From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- files/fr/_wikihistory.json | 46058 ------------------- .../index.html" | 89 - .../index.html | 75 - .../index.html" | 35 - .../index.html" | 43 - .../index.html" | 38 - files/fr/api_du_toolkit/index.html | 52 - .../index.html" | 14 - .../index.html" | 54 - .../index.html" | 49 - files/fr/apprendre/les_menaces/index.html | 59 - .../les_vuln\303\251rabilit\303\251s/index.html" | 60 - files/fr/apprendre/ssl_et_tls/index.html | 84 - .../s\303\251curit\303\251_tcp_ip/index.html" | 40 - .../api_de_restauration_de_session/index.html | 82 - .../index.html" | 50 - .../index.html | 55 - files/fr/archive/add-ons/index.html | 8 - .../index.html" | 71 - .../add-ons/paquetage_multi_extensions/index.html | 78 - .../index.html" | 17 - .../index.html" | 299 - files/fr/archive/apps/advanced_topics/index.html | 75 - files/fr/archive/apps/index.html | 8 - .../index.html" | 357 - files/fr/archive/b2g_os/add-ons/index.html | 108 - files/fr/archive/b2g_os/api/alarm_api/index.html | 184 - .../fr/archive/b2g_os/api/api_contacts/index.html | 272 - .../api/bluetoothstatuschangedevent/index.html | 59 - files/fr/archive/b2g_os/api/callevent/index.html | 130 - .../archive/b2g_os/api/data_store_api/index.html | 203 - .../archive/b2g_os/api/domapplication/index.html | 106 - .../archive/b2g_os/api/domrequest/error/index.html | 38 - files/fr/archive/b2g_os/api/domrequest/index.html | 97 - .../b2g_os/api/domrequest/onerror/index.html | 74 - .../b2g_os/api/domrequest/onsuccess/index.html | 74 - .../b2g_os/api/domrequest/readystate/index.html | 77 - .../b2g_os/api/domrequest/result/index.html | 76 - files/fr/archive/b2g_os/api/index.html | 831 - files/fr/archive/b2g_os/api/l10n_api/index.html | 52 - .../api/navigator/addidleobserver/index.html | 62 - files/fr/archive/b2g_os/api/navigator/index.html | 25 - .../b2g_os/api/navigator/mozapps/index.html | 90 - .../api/navigator/requestwakelock/index.html | 60 - files/fr/archive/b2g_os/api/nfc_api/index.html | 118 - files/fr/archive/b2g_os/api/udpsocket/index.html | 66 - .../fr/archive/b2g_os/api/wake_lock_api/index.html | 77 - .../index.html | 83 - files/fr/archive/b2g_os/api/window/index.html | 25 - .../configurer_marionette/index.html | 48 - .../b2g_os/automated_testing/endurance/index.html | 153 - .../automated_testing/gaia-ui-tests/index.html | 74 - .../index.html | 129 - .../index.html | 120 - .../partie_3_tests_reutilisables/index.html | 131 - .../index.html | 108 - .../index.html | 190 - .../partie_6_marionette_classe_by/index.html | 77 - .../partie_7_ecrire_vos_propres_tests/index.html | 63 - .../partie_8_utiliser_une_classe_base/index.html | 94 - .../gaia-ui-tests/partie_9_objets_app/index.html | 80 - .../fr/archive/b2g_os/automated_testing/index.html | 93 - .../marionette_pour_python_interactif/index.html | 75 - .../b2g_os/automated_testing/mtbf_tests/index.html | 233 - .../b2g_os/automated_testing/reftests/index.html | 191 - .../test_execution_chart/index.html | 89 - .../automated_testing/tests_cppunit/index.html | 44 - .../archive/b2g_os/b2g_os_architecture/index.html | 38 - files/fr/archive/b2g_os/bluetooth_api/index.html | 223 - .../board_guide/chirimen/chirimen_faq/index.html | 14 - .../archive/b2g_os/board_guide/chirimen/index.html | 123 - .../board_guide/chirimen/os_image/index.html | 14 - .../quick_start_guide/basic_startup/index.html | 8 - .../quick_start_guide/board_connectors/index.html | 163 - .../quick_start_guide/dev_windows/index.html | 9 - .../firmware_update_guide_for_windows/index.html | 11 - .../chirimen/quick_start_guide/index.html | 26 - files/fr/archive/b2g_os/board_guide/index.html | 35 - .../appareils_compatibles/index.html | 360 - .../b2g_build_variables_reference_sheet/index.html | 261 - .../b2g_installer_add-on/index.html | 284 - .../b2g_os_update_packages/index.html | 534 - .../compiler_pour_le_flame_sur_os_x/index.html | 174 - .../index.html" | 87 - .../construire_anciennes_branches/index.html | 79 - .../index.html | 121 - .../index.html | 47 - .../index.html" | 153 - .../building_b2g_for_qemu_emulator/index.html | 37 - .../building_the_firefox_os_simulator/index.html | 264 - .../choisir_comment_lancer_gaia_ou_b2g/index.html | 80 - .../index.html | 8 - .../compiler/compiler_pour_le_fairphone/index.html | 79 - .../compiler/fota_community_builds/index.html | 174 - files/fr/archive/b2g_os/compiler/index.html | 442 - .../index.html | 201 - .../index.html | 64 - files/fr/archive/b2g_os/debugging/index.html | 79 - .../b2g_os/debugging/installer_adb/index.html | 135 - .../debugging/journalisation_console/index.html | 25 - .../index.html" | 421 - .../debugging/personnaliser_b2g.sh/index.html | 46 - .../signaler_une_erreur_firefox_os/index.html | 121 - .../\303\251tapes_pr\303\251paratoires/index.html" | 59 - files/fr/archive/b2g_os/depannage/index.html | 60 - .../b2g_os/developer_preview_phone/index.html | 23 - .../b2g_os/developing_firefox_os/index.html | 49 - .../personnalisation_des_dns/index.html | 65 - .../quickstart_guide_to_b2g_development/index.html | 41 - .../rapporter_bug_firefox_os/index.html | 199 - .../apporter_modifications_gaia/index.html | 87 - .../index.html" | 191 - .../comprendre_les_fondements_de_gaia/index.html | 156 - .../different_ways_to_run_gaia/index.html | 230 - .../index.html" | 89 - .../faire_fonctionner_code_gaia/index.html | 69 - .../gaia_tools_reference/index.html | 191 - .../index.html" | 1311 - files/fr/archive/b2g_os/developing_gaia/index.html | 73 - .../localiser_firefox_os/index.html | 132 - .../index.html" | 88 - .../personnaliser_le_clavier/index.html | 177 - .../index.html" | 331 - .../soumettre_correctif_pour_gaia/index.html | 119 - .../tester_modifications_gaia/index.html | 119 - .../index.html | 110 - .../firefox_os_apps/building_blocks/index.html | 195 - files/fr/archive/b2g_os/firefox_os_apps/index.html | 84 - .../index.html | 173 - .../firefox_os_connected-devices_guide/index.html | 35 - .../index.html" | 27 - .../simuler_firefox_os_pour_tv/index.html | 126 - .../index.html | 93 - files/fr/archive/b2g_os/firefox_os_faq/index.html | 39 - .../b2g_os/firefox_os_usage_tips/index.html | 72 - .../unlocking_your_phone/index.html | 8 - .../archive/b2g_os/gaia_hacking_guide/index.html | 11 - files/fr/archive/b2g_os/index.html | 165 - .../installer_sur_un_telephone_mobile/index.html | 97 - files/fr/archive/b2g_os/introduction/index.html | 86 - files/fr/archive/b2g_os/media_support/index.html | 59 - files/fr/archive/b2g_os/mulet/index.html | 122 - files/fr/archive/b2g_os/pandaboard/index.html | 120 - .../phone_guide/alcatel_one_touch_fire/index.html | 104 - .../alcatel_one_touch_fire_c/index.html | 68 - .../alcatel_one_touch_fire_e/index.html | 97 - .../alcatel_one_touch_pixi_3_(3.5)/index.html | 54 - .../alcatel_onetouch_fire_c_4020d/index.html | 64 - .../index.html | 84 - .../phone_guide/cherry_mobile_ace/index.html | 118 - .../b2g_os/phone_guide/fairphone/index.html | 190 - .../firefox_os_device_features/index.html | 76 - .../phone_guide/flame/configuration/index.html | 129 - .../fr/archive/b2g_os/phone_guide/flame/index.html | 71 - .../flame/mettre_a_jour_flame/index.html | 353 - files/fr/archive/b2g_os/phone_guide/fx0/index.html | 108 - .../b2g_os/phone_guide/huawei_y300_ii/index.html | 67 - files/fr/archive/b2g_os/phone_guide/index.html | 89 - .../b2g_os/phone_guide/intex_cloud_fx/index.html | 61 - .../b2g_os/phone_guide/lg_fireweb/index.html | 66 - .../archive/b2g_os/phone_guide/nexus_4/index.html | 47 - .../archive/b2g_os/phone_guide/nexus_5/index.html | 46 - .../b2g_os/phone_guide/phone_specs/index.html | 549 - .../phone_guide/spice_fire_one_mi_fx1/index.html | 59 - .../phone_guide/spice_fire_one_mi_fx2/index.html | 66 - .../b2g_os/phone_guide/zen_u105_fire/index.html | 60 - .../archive/b2g_os/phone_guide/zte_open/index.html | 305 - .../b2g_os/phone_guide/zte_open_c/index.html | 190 - .../b2g_os/phone_guide/zte_open_ii/index.html | 72 - .../b2g_os/platform/apps_architecture/index.html | 37 - .../b2g_os/platform/architecture/index.html | 722 - .../platform/gaia/gaia_apps/browser/index.html | 136 - .../b2g_os/platform/gaia/gaia_apps/index.html | 92 - .../gaia/gaia_apps/param\303\250tres/index.html" | 112 - .../gaia/gaia_apps/syst\303\250me/index.html" | 303 - .../platform/gaia/gaia_apps/video/index.html | 30 - .../b2g_os/platform/gaia/hacking/index.html | 126 - files/fr/archive/b2g_os/platform/gaia/index.html | 83 - .../platform/gaia/introduction_a_gaia/index.html | 35 - .../index.html" | 74 - files/fr/archive/b2g_os/platform/gonk/index.html | 102 - files/fr/archive/b2g_os/platform/index.html | 92 - .../b2g_os/platform/settings_list/index.html | 717 - .../platform/support_fonctionnalites/index.html | 160 - files/fr/archive/b2g_os/portage/index.html | 244 - .../porter_firefox_os/b2g_nexus_player/index.html | 186 - .../fr/archive/b2g_os/porter_firefox_os/index.html | 16 - .../portage_sur_cyanogenmod/index.html | 197 - .../preparing_for_your_first_b2g_build/index.html | 181 - .../index.html | 421 - files/fr/archive/b2g_os/quickstart/index.html | 32 - .../votre_premier_application/index.html | 261 - files/fr/archive/b2g_os/releases/1.0.1/index.html | 128 - files/fr/archive/b2g_os/releases/1.1/index.html | 111 - files/fr/archive/b2g_os/releases/2.0/index.html | 111 - files/fr/archive/b2g_os/releases/2.1/index.html | 44 - files/fr/archive/b2g_os/releases/2.2/index.html | 125 - files/fr/archive/b2g_os/releases/2.5/index.html | 108 - files/fr/archive/b2g_os/releases/index.html | 31 - files/fr/archive/b2g_os/resources/index.html | 101 - .../index.html | 90 - files/fr/archive/b2g_os/samsung_nexus_s/index.html | 61 - .../index.html | 226 - .../securite/application_security/index.html | 224 - files/fr/archive/b2g_os/securite/index.html | 71 - .../index.html | 89 - .../b2g_os/securite/security_model/index.html | 396 - .../b2g_os/securite/system_security/index.html | 449 - files/fr/archive/b2g_os/simulator/index.html | 112 - .../simulator_vs_emulator_vs_device/index.html | 74 - files/fr/archive/b2g_os/spark/index.html | 20 - .../faire_des_captures_ecran/index.html | 88 - .../modifier_le_fichier_hosts/index.html | 38 - .../b2g_os/using_the_app_manager/index.html | 293 - .../b2g_os/using_the_b2g_emulators/index.html | 151 - .../fr/archive/b2g_os/web_telephony_api/index.html | 40 - .../writing_apps_for_boot_to_gecko/index.html | 18 - files/fr/archive/css3/index.html | 14 - files/fr/archive/deviceproximity/index.html | 84 - files/fr/archive/index.html | 21 - .../getinstalled/index.html | 37 - .../api/domapplicationsregistry/getself/index.html | 42 - .../api/domapplicationsregistry/index.html | 51 - .../api/domapplicationsregistry/install/index.html | 86 - files/fr/archive/marketplace/api/index.html | 38 - files/fr/archive/marketplace/index.html | 56 - files/fr/archive/mdn/index.html | 42 - files/fr/archive/meta_docs/index.html | 30 - .../index.html" | 195 - files/fr/archive/misc_top_level/index.html | 8 - .../monitoring_wifi_access_points/index.html | 92 - .../index.html | 198 - .../index.html" | 38 - files/fr/archive/mozilla/drag_and_drop/index.html | 118 - files/fr/archive/mozilla/firefox/index.html | 8 - .../index.html" | 26 - .../soap_dans_les_navigateurs_gecko/index.html | 284 - .../firefox/utilisation_de_microformats/index.html | 197 - files/fr/archive/mozilla/index.html | 19 - .../index.html" | 166 - .../mozilla/persona/api_de_verification/index.html | 142 - .../persona/bootstrapping_persona/index.html | 44 - .../fr/archive/mozilla/persona/branding/index.html | 44 - .../persona/browser_compatibility/index.html | 82 - .../persona/considerations_de_securite/index.html | 57 - .../persona/identity_provider_overview/index.html | 59 - files/fr/archive/mozilla/persona/index.html | 195 - .../persona/internationalisation/index.html | 50 - .../persona/libraries_and_plugins/index.html | 205 - .../mozilla/persona/pourquoi_persona/index.html | 32 - .../archive/mozilla/persona/quick_setup/index.html | 241 - .../index.html | 18 - .../index.html | 12 - .../call_logout()_after_a_failed_login/index.html | 21 - .../persona/the_implementor_s_guide/index.html | 55 - .../index.html | 22 - .../problemes_integrer_protection_crsf/index.html | 21 - .../index.html | 10 - .../the_implementor_s_guide/tester/index.html | 10 - .../persona/vue_densemble_du_protocole/index.html | 61 - .../archive/mozilla/when_to_use_ifdefs/index.html | 28 - files/fr/archive/mozilla/xbl/index.html | 37 - .../r\303\251f\303\251rence_xbl_1.0/index.html" | 106 - .../\303\251l\303\251ments/index.html" | 462 - files/fr/archive/mozilla/xpinstall/index.html | 64 - .../codes_retourn\303\251s/index.html" | 274 - .../exemples/file.macalias/index.html" | 33 - .../exemples/file.windowsshortcut/index.html" | 52 - .../exemples/index.html" | 6 - .../exemples/install.adddirectory/index.html" | 23 - .../exemples/install.addfile/index.html" | 25 - .../installtrigger.installchrome/index.html" | 18 - .../installtrigger.startsoftwareupdate/index.html" | 20 - .../index.html" | 15 - .../exemples/windows_install/index.html" | 112 - .../index.html" | 193 - .../objet_file/index.html" | 14 - .../objet_file/m\303\251thodes/copy/index.html" | 38 - .../m\303\251thodes/dircreate/index.html" | 36 - .../m\303\251thodes/dirgetparent/index.html" | 34 - .../m\303\251thodes/dirremove/index.html" | 32 - .../m\303\251thodes/dirrename/index.html" | 33 - .../m\303\251thodes/diskspaceavailable/index.html" | 48 - .../objet_file/m\303\251thodes/execute/index.html" | 41 - .../objet_file/m\303\251thodes/exists/index.html" | 33 - .../objet_file/m\303\251thodes/index.html" | 86 - .../m\303\251thodes/isdirectory/index.html" | 26 - .../objet_file/m\303\251thodes/isfile/index.html" | 30 - .../m\303\251thodes/macalias/index.html" | 46 - .../objet_file/m\303\251thodes/moddate/index.html" | 31 - .../m\303\251thodes/moddatechanged/index.html" | 54 - .../objet_file/m\303\251thodes/move/index.html" | 46 - .../objet_file/m\303\251thodes/remove/index.html" | 29 - .../objet_file/m\303\251thodes/rename/index.html" | 33 - .../objet_file/m\303\251thodes/size/index.html" | 26 - .../windowsgetshortname/index.html" | 34 - .../windowsregisterserver/index.html" | 30 - .../m\303\251thodes/windowsshortcut/index.html" | 71 - .../objet_install/index.html" | 45 - .../m\303\251thodes/adddirectory/index.html" | 84 - .../m\303\251thodes/addfile/index.html" | 103 - .../m\303\251thodes/alert/index.html" | 20 - .../m\303\251thodes/cancelinstall/index.html" | 32 - .../m\303\251thodes/confirm/index.html" | 212 - .../deleteregisteredfile/index.html" | 40 - .../m\303\251thodes/execute/index.html" | 71 - .../m\303\251thodes/gestalt/index.html" | 29 - .../m\303\251thodes/getcomponentfolder/index.html" | 40 - .../m\303\251thodes/getfolder/index.html" | 127 - .../m\303\251thodes/getlasterror/index.html" | 30 - .../m\303\251thodes/getwinprofile/index.html" | 40 - .../m\303\251thodes/getwinregistry/index.html" | 23 - .../objet_install/m\303\251thodes/index.html" | 101 - .../m\303\251thodes/initinstall/index.html" | 87 - .../m\303\251thodes/loadresources/index.html" | 33 - .../m\303\251thodes/logcomment/index.html" | 28 - .../m\303\251thodes/patch/index.html" | 80 - .../m\303\251thodes/performinstall/index.html" | 35 - .../m\303\251thodes/refreshplugins/index.html" | 52 - .../m\303\251thodes/registerchrome/index.html" | 61 - .../m\303\251thodes/reseterror/index.html" | 26 - .../m\303\251thodes/setpackagefolder/index.html" | 33 - .../propri\303\251t\303\251s/index.html" | 38 - .../objet_installtrigger/index.html" | 20 - .../objet_installversion/index.html" | 29 - .../m\303\251thodes/compareto/index.html" | 104 - .../m\303\251thodes/index.html" | 26 - .../m\303\251thodes/init/index.html" | 43 - .../m\303\251thodes/tostring/index.html" | 32 - .../propri\303\251t\303\251s/index.html" | 36 - .../objet_winprofile/index.html" | 13 - .../m\303\251thodes/getstring/index.html" | 37 - .../objet_winprofile/m\303\251thodes/index.html" | 22 - .../m\303\251thodes/writestring/index.html" | 41 - .../objet_winreg/index.html" | 19 - .../m\303\251thodes/createkey/index.html" | 32 - .../m\303\251thodes/deletekey/index.html" | 26 - .../m\303\251thodes/deletevalue/index.html" | 30 - .../m\303\251thodes/enumkeys/index.html" | 48 - .../m\303\251thodes/enumvaluenames/index.html" | 39 - .../m\303\251thodes/getvalue/index.html" | 33 - .../m\303\251thodes/getvaluenumber/index.html" | 32 - .../m\303\251thodes/getvaluestring/index.html" | 32 - .../objet_winreg/m\303\251thodes/index.html" | 74 - .../m\303\251thodes/iskeywritable/index.html" | 40 - .../m\303\251thodes/keyexists/index.html" | 45 - .../m\303\251thodes/setrootkey/index.html" | 42 - .../m\303\251thodes/setvalue/index.html" | 42 - .../m\303\251thodes/setvaluenumber/index.html" | 36 - .../m\303\251thodes/setvaluestring/index.html" | 36 - .../m\303\251thodes/valueexists/index.html" | 43 - .../objet_winreg/winregvalue/index.html" | 62 - .../mozilla/xul/attributs/acceltext/index.html | 18 - .../mozilla/xul/attributs/accesskey/index.html | 26 - .../archive/mozilla/xul/attributs/align/index.html | 36 - .../mozilla/xul/attributs/allowevents/index.html | 19 - .../attributs/allownegativeassertions/index.html | 17 - .../xul/attributs/buttondisabledaccept/index.html | 18 - .../mozilla/xul/attributs/checked/index.html | 24 - .../archive/mozilla/xul/attributs/class/index.html | 15 - .../xul/attributs/coalesceduplicatearcs/index.html | 17 - .../mozilla/xul/attributs/collapsed/index.html | 17 - .../mozilla/xul/attributs/command/index.html | 23 - .../mozilla/xul/attributs/container/index.html | 17 - .../mozilla/xul/attributs/containment/index.html | 19 - .../mozilla/xul/attributs/context/index.html | 17 - .../mozilla/xul/attributs/contextmenu/index.html | 17 - .../archive/mozilla/xul/attributs/crop/index.html | 26 - .../mozilla/xul/attributs/datasources/index.html | 21 - .../xul/attributs/datepicker.type/index.html | 40 - .../xul/attributs/datepicker.value/index.html | 18 - .../archive/mozilla/xul/attributs/dir/index.html | 32 - .../mozilla/xul/attributs/disabled/index.html | 21 - .../archive/mozilla/xul/attributs/empty/index.html | 15 - .../mozilla/xul/attributs/equalsize/index.html | 18 - .../xul/attributs/firstdayofweek/index.html | 17 - .../archive/mozilla/xul/attributs/flags/index.html | 20 - .../archive/mozilla/xul/attributs/flex/index.html | 14 - .../mozilla/xul/attributs/height/index.html | 15 - .../mozilla/xul/attributs/helpuri/index.html | 18 - .../mozilla/xul/attributs/hidden/index.html | 15 - .../mozilla/xul/attributs/hidechrome/index.html | 15 - .../mozilla/xul/attributs/hideseconds/index.html | 18 - .../fr/archive/mozilla/xul/attributs/id/index.html | 38 - .../archive/mozilla/xul/attributs/image/index.html | 18 - .../mozilla/xul/attributs/increment/index.html | 21 - files/fr/archive/mozilla/xul/attributs/index.html | 281 - .../mozilla/xul/attributs/insertafter/index.html | 17 - .../mozilla/xul/attributs/insertbefore/index.html | 17 - .../mozilla/xul/attributs/instantapply/index.html | 17 - .../mozilla/xul/attributs/inverted/index.html | 17 - .../archive/mozilla/xul/attributs/label/index.html | 33 - .../archive/mozilla/xul/attributs/left/index.html | 15 - .../archive/mozilla/xul/attributs/max/index.html | 21 - .../mozilla/xul/attributs/maxheight/index.html | 15 - .../mozilla/xul/attributs/maxwidth/index.html | 15 - .../archive/mozilla/xul/attributs/menu/index.html | 15 - .../archive/mozilla/xul/attributs/min/index.html | 21 - .../mozilla/xul/attributs/minheight/index.html | 15 - .../mozilla/xul/attributs/minwidth/index.html | 15 - .../mozilla/xul/attributs/mousethrough/index.html | 25 - .../archive/mozilla/xul/attributs/name/index.html | 14 - .../mozilla/xul/attributs/noautofocus/index.html | 17 - .../mozilla/xul/attributs/observes/index.html | 17 - .../mozilla/xul/attributs/onchange/index.html | 17 - .../mozilla/xul/attributs/oncommand/index.html | 21 - .../mozilla/xul/attributs/onpaneload/index.html | 18 - .../mozilla/xul/attributs/onpopuphidden/index.html | 15 - .../mozilla/xul/attributs/onpopuphiding/index.html | 15 - .../xul/attributs/onpopupshowing/index.html | 15 - .../mozilla/xul/attributs/onpopupshown/index.html | 15 - .../archive/mozilla/xul/attributs/open/index.html | 16 - .../mozilla/xul/attributs/ordinal/index.html | 15 - .../mozilla/xul/attributs/orient/index.html | 21 - .../archive/mozilla/xul/attributs/pack/index.html | 22 - .../mozilla/xul/attributs/pageincrement/index.html | 21 - .../mozilla/xul/attributs/persist/index.html | 15 - .../mozilla/xul/attributs/popup.left/index.html | 17 - .../xul/attributs/popup.position/index.html | 30 - .../mozilla/xul/attributs/popup.top/index.html | 17 - .../archive/mozilla/xul/attributs/popup/index.html | 22 - .../mozilla/xul/attributs/position/index.html | 17 - .../xul/attributs/preference-editable/index.html | 16 - .../xul/attributs/preference.name/index.html | 18 - .../xul/attributs/preference.type/index.html | 13 - .../mozilla/xul/attributs/preference/index.html | 15 - .../xul/attributs/prefpane.selected/index.html | 24 - .../mozilla/xul/attributs/prefpane.src/index.html | 25 - .../mozilla/xul/attributs/properties/index.html | 15 - .../mozilla/xul/attributs/querytype/index.html | 15 - .../mozilla/xul/attributs/readonly/index.html | 15 - .../archive/mozilla/xul/attributs/ref/index.html | 15 - .../mozilla/xul/attributs/removeelement/index.html | 17 - .../archive/mozilla/xul/attributs/rows/index.html | 15 - .../mozilla/xul/attributs/screenx/index.html | 15 - .../mozilla/xul/attributs/screeny/index.html | 17 - .../mozilla/xul/attributs/selected/index.html | 19 - .../mozilla/xul/attributs/seltype/index.html | 26 - .../mozilla/xul/attributs/sizemode/index.html | 21 - .../mozilla/xul/attributs/sortdirection/index.html | 21 - .../mozilla/xul/attributs/sortresource/index.html | 17 - .../mozilla/xul/attributs/sortresource2/index.html | 17 - .../archive/mozilla/xul/attributs/src/index.html | 34 - .../mozilla/xul/attributs/statustext/index.html | 39 - .../archive/mozilla/xul/attributs/style/index.html | 15 - .../xul/attributs/suppressonselect/index.html | 22 - .../mozilla/xul/attributs/tabindex/index.html | 15 - .../mozilla/xul/attributs/template/index.html | 15 - .../xul/attributs/timepicker.increment/index.html | 18 - .../xul/attributs/timepicker.value/index.html | 18 - .../archive/mozilla/xul/attributs/title/index.html | 17 - .../mozilla/xul/attributs/tooltip/index.html | 15 - .../mozilla/xul/attributs/tooltiptext/index.html | 15 - .../archive/mozilla/xul/attributs/top/index.html | 17 - .../archive/mozilla/xul/attributs/type/index.html | 21 - .../archive/mozilla/xul/attributs/uri/index.html | 19 - .../archive/mozilla/xul/attributs/value/index.html | 22 - .../mozilla/xul/attributs/wait-cursor/index.html | 15 - .../archive/mozilla/xul/attributs/width/index.html | 30 - .../mozilla/xul/attributs/windowtype/index.html | 17 - files/fr/archive/mozilla/xul/box/index.html | 100 - files/fr/archive/mozilla/xul/button/index.html | 287 - .../index.html" | 27 - files/fr/archive/mozilla/xul/checkbox/index.html | 194 - files/fr/archive/mozilla/xul/command/index.html | 81 - files/fr/archive/mozilla/xul/datepicker/index.html | 231 - .../fr/archive/mozilla/xul/description/index.html | 150 - files/fr/archive/mozilla/xul/dropmarker/index.html | 88 - .../index.html" | 74 - .../mozilla/xul/guide_des_popups/index.html | 69 - .../ouverture_et_fermeture/index.html | 174 - .../mozilla/xul/guide_des_popups/panels/index.html | 128 - files/fr/archive/mozilla/xul/hbox/index.html | 98 - .../ic\303\264nes_de_fen\303\252tre/index.html" | 17 - files/fr/archive/mozilla/xul/index.html | 116 - .../xul/introduction_\303\240_xul/index.html" | 46 - files/fr/archive/mozilla/xul/label/index.html | 183 - .../xul/les_contr\303\264les_xul/index.html" | 550 - .../mozilla/xul/les_joies_de_xul/index.html | 142 - files/fr/archive/mozilla/xul/listbox/index.html | 276 - files/fr/archive/mozilla/xul/listitem/index.html | 265 - files/fr/archive/mozilla/xul/menu/index.html | 196 - files/fr/archive/mozilla/xul/menubar/index.html | 77 - files/fr/archive/mozilla/xul/menuitem/index.html | 293 - files/fr/archive/mozilla/xul/menulist/index.html | 276 - files/fr/archive/mozilla/xul/menupopup/index.html | 229 - .../archive/mozilla/xul/menuseparator/index.html | 242 - .../index.html | 98 - .../modifications_xul_pour_firefox_1.5/index.html | 59 - .../mozilla/xul/m\303\251thodes/blur/index.html" | 14 - .../mozilla/xul/m\303\251thodes/click/index.html" | 14 - .../xul/m\303\251thodes/decrease/index.html" | 26 - .../xul/m\303\251thodes/decreasepage/index.html" | 17 - .../xul/m\303\251thodes/docommand/index.html" | 14 - .../mozilla/xul/m\303\251thodes/focus/index.html" | 14 - .../getelementsbyattribute/index.html" | 14 - .../xul/m\303\251thodes/getrowcount/index.html" | 14 - .../xul/m\303\251thodes/hasuservalue/index.html" | 16 - .../xul/m\303\251thodes/hidepopup/index.html" | 15 - .../xul/m\303\251thodes/increase/index.html" | 29 - .../xul/m\303\251thodes/increasepage/index.html" | 17 - .../mozilla/xul/m\303\251thodes/index.html" | 186 - .../mozilla/xul/m\303\251thodes/moveto/index.html" | 14 - .../xul/m\303\251thodes/openpopup/index.html" | 21 - .../m\303\251thodes/openpopupatscreen/index.html" | 15 - .../mozilla/xul/m\303\251thodes/reset/index.html" | 17 - .../mozilla/xul/m\303\251thodes/select/index.html" | 16 - .../xul/m\303\251thodes/selectall/index.html" | 14 - .../xul/m\303\251thodes/selectitem/index.html" | 14 - .../m\303\251thodes/selectitemrange/index.html" | 14 - .../m\303\251thodes/setselectionrange/index.html" | 18 - .../xul/m\303\251thodes/showpane/index.html" | 16 - .../xul/m\303\251thodes/showpopup/index.html" | 20 - .../mozilla/xul/m\303\251thodes/sizeto/index.html" | 14 - .../mozilla/xul/m\303\251thodes/stop/index.html" | 19 - .../xul/m\303\251thodes/syncsessions/index.html" | 19 - .../xul/m\303\251thodes/timedselect/index.html" | 14 - .../toggleitemselection/index.html" | 14 - files/fr/archive/mozilla/xul/panel/index.html | 222 - files/fr/archive/mozilla/xul/popup/index.html | 19 - files/fr/archive/mozilla/xul/preference/index.html | 219 - .../fr/archive/mozilla/xul/preferences/index.html | 95 - files/fr/archive/mozilla/xul/prefpane/index.html | 135 - files/fr/archive/mozilla/xul/prefwindow/index.html | 144 - .../accessible/index.html" | 16 - .../accessibletype/index.html" | 58 - .../propri\303\251t\303\251s/accesskey/index.html" | 16 - .../xul/propri\303\251t\303\251s/align/index.html" | 14 - .../allowevents/index.html" | 16 - .../amindicator/index.html" | 16 - .../propri\303\251t\303\251s/boxobject/index.html" | 16 - .../propri\303\251t\303\251s/builder/index.html" | 16 - .../propri\303\251t\303\251s/classname/index.html" | 14 - .../propri\303\251t\303\251s/collapsed/index.html" | 14 - .../contextmenu/index.html" | 14 - .../controllers/index.html" | 14 - .../xul/propri\303\251t\303\251s/crop/index.html" | 14 - .../currentitem/index.html" | 14 - .../propri\303\251t\303\251s/database/index.html" | 14 - .../datasources/index.html" | 14 - .../xul/propri\303\251t\303\251s/date/index.html" | 17 - .../dateleadingzero/index.html" | 17 - .../datepicker.open/index.html" | 17 - .../datepicker.value/index.html" | 17 - .../propri\303\251t\303\251s/datevalue/index.html" | 17 - .../defaultvalue/index.html" | 16 - .../xul/propri\303\251t\303\251s/dir/index.html" | 14 - .../propri\303\251t\303\251s/disabled/index.html" | 14 - .../xul/propri\303\251t\303\251s/flex/index.html" | 16 - .../propri\303\251t\303\251s/height/index.html" | 14 - .../propri\303\251t\303\251s/hidden/index.html" | 14 - .../hideseconds/index.html" | 17 - .../xul/propri\303\251t\303\251s/hour/index.html" | 17 - .../hourleadingzero/index.html" | 17 - .../xul/propri\303\251t\303\251s/id/index.html" | 16 - .../xul/propri\303\251t\303\251s/image/index.html" | 14 - .../propri\303\251t\303\251s/increment/index.html" | 17 - .../xul/propri\303\251t\303\251s/index.html" | 224 - .../propri\303\251t\303\251s/inverted/index.html" | 16 - .../is24hourclock/index.html" | 17 - .../xul/propri\303\251t\303\251s/ispm/index.html" | 17 - .../xul/propri\303\251t\303\251s/label/index.html" | 14 - .../xul/propri\303\251t\303\251s/left/index.html" | 16 - .../listboxobject/index.html" | 14 - .../propri\303\251t\303\251s/locked/index.html" | 16 - .../xul/propri\303\251t\303\251s/max/index.html" | 16 - .../propri\303\251t\303\251s/maxheight/index.html" | 14 - .../propri\303\251t\303\251s/maxwidth/index.html" | 14 - .../xul/propri\303\251t\303\251s/menu/index.html" | 14 - .../xul/propri\303\251t\303\251s/min/index.html" | 16 - .../propri\303\251t\303\251s/minheight/index.html" | 16 - .../propri\303\251t\303\251s/minute/index.html" | 17 - .../minuteleadingzero/index.html" | 17 - .../propri\303\251t\303\251s/minwidth/index.html" | 14 - .../xul/propri\303\251t\303\251s/month/index.html" | 17 - .../monthleadingzero/index.html" | 17 - .../xul/propri\303\251t\303\251s/name/index.html" | 16 - .../propri\303\251t\303\251s/observes/index.html" | 14 - .../xul/propri\303\251t\303\251s/open/index.html" | 14 - .../propri\303\251t\303\251s/ordinal/index.html" | 16 - .../propri\303\251t\303\251s/orient/index.html" | 14 - .../xul/propri\303\251t\303\251s/pack/index.html" | 14 - .../pageincrement/index.html" | 16 - .../propri\303\251t\303\251s/persist/index.html" | 16 - .../pmindicator/index.html" | 17 - .../popupboxobject/index.html" | 14 - .../propri\303\251t\303\251s/position/index.html" | 14 - .../preference.preferences/index.html" | 16 - .../propri\303\251t\303\251s/readonly/index.html" | 21 - .../xul/propri\303\251t\303\251s/ref/index.html" | 14 - .../propri\303\251t\303\251s/resource/index.html" | 14 - .../propri\303\251t\303\251s/second/index.html" | 17 - .../secondleadingzero/index.html" | 17 - .../propri\303\251t\303\251s/selected/index.html" | 14 - .../selectedindex/index.html" | 14 - .../selecteditem/index.html" | 14 - .../propri\303\251t\303\251s/seltype/index.html" | 22 - .../xul/propri\303\251t\303\251s/state/index.html" | 20 - .../statustext/index.html" | 14 - .../xul/propri\303\251t\303\251s/style/index.html" | 14 - .../suppressonselect/index.html" | 20 - .../propri\303\251t\303\251s/tabindex/index.html" | 14 - .../timepicker.value/index.html" | 17 - .../propri\303\251t\303\251s/tooltip/index.html" | 14 - .../tooltiptext/index.html" | 24 - .../xul/propri\303\251t\303\251s/top/index.html" | 16 - .../xul/propri\303\251t\303\251s/type/index.html" | 17 - .../xul/propri\303\251t\303\251s/value/index.html" | 14 - .../xul/propri\303\251t\303\251s/width/index.html" | 16 - .../xul/propri\303\251t\303\251s/year/index.html" | 17 - .../yearleadingzero/index.html" | 17 - .../index.html" | 484 - .../fr/archive/mozilla/xul/richlistbox/index.html | 268 - .../fr/archive/mozilla/xul/richlistitem/index.html | 128 - .../xul/r\303\251f\303\251rence_xul/index.html" | 165 - files/fr/archive/mozilla/xul/scale/index.html | 255 - files/fr/archive/mozilla/xul/spacer/index.html | 100 - .../fr/archive/mozilla/xul/spinbuttons/index.html | 93 - files/fr/archive/mozilla/xul/stack/index.html | 93 - files/fr/archive/mozilla/xul/tabpanels/index.html | 126 - files/fr/archive/mozilla/xul/textbox/index.html | 348 - files/fr/archive/mozilla/xul/timepicker/index.html | 264 - .../index.html" | 127 - files/fr/archive/mozilla/xul/toolbars/index.html | 72 - files/fr/archive/mozilla/xul/toolbox/index.html | 127 - files/fr/archive/mozilla/xul/tooltip/index.html | 225 - files/fr/archive/mozilla/xul/tree/index.html | 313 - files/fr/archive/mozilla/xul/treecell/index.html | 83 - .../fr/archive/mozilla/xul/treechildren/index.html | 101 - files/fr/archive/mozilla/xul/treecol/index.html | 187 - files/fr/archive/mozilla/xul/treecols/index.html | 112 - files/fr/archive/mozilla/xul/treeitem/index.html | 87 - files/fr/archive/mozilla/xul/treerow/index.html | 108 - .../archive/mozilla/xul/treeseparator/index.html | 107 - .../index.html" | 153 - .../index.html" | 139 - .../index.html" | 140 - .../ajout_de_m\303\251thodes/index.html" | 194 - .../ajout_de_propri\303\251t\303\251s/index.html" | 168 - .../tutoriel_xul/ajouter_des_boutons/index.html | 106 - .../ajouter_des_feuilles_de_style/index.html | 107 - .../index.html" | 64 - .../index.html" | 73 - .../mozilla/xul/tutoriel_xul/arbres/index.html | 105 - .../xul/tutoriel_xul/arbres_et_gabarits/index.html | 93 - .../assistant_avan\303\247\303\251/index.html" | 66 - .../index.html" | 109 - .../barres_de_d\303\251filement/index.html" | 39 - .../barres_de_menus_simples/index.html | 127 - .../index.html" | 103 - .../broadcasters_et_observateurs/index.html | 86 - .../xul/tutoriel_xul/cadres_de_contenu/index.html | 86 - .../index.html" | 76 - .../mozilla/xul/tutoriel_xul/commandes/index.html | 119 - .../xul/tutoriel_xul/contenu_anonyme/index.html | 214 - .../cr\303\251ation_d'un_assistant/index.html" | 141 - .../index.html" | 115 - .../index.html" | 152 - .../cr\303\251er_un_th\303\250me/index.html" | 205 - .../cr\303\251er_une_fen\303\252tre/index.html" | 104 - .../tutoriel_xul/document_object_model/index.html | 138 - .../donn\303\251es_persistantes/index.html" | 51 - .../index.html" | 92 - .../index.html" | 298 - .../xul/tutoriel_xul/exemple_xbl/index.html | 205 - .../xul/tutoriel_xul/exemples_xpcom/index.html | 157 - .../xul/tutoriel_xul/focus_et_selection/index.html | 122 - .../index.html | 72 - .../mozilla/xul/tutoriel_xul/gabarits/index.html | 205 - .../mozilla/xul/tutoriel_xul/grilles/index.html | 200 - .../h\303\251ritage_d'attributs_xbl/index.html" | 100 - .../tutoriel_xul/h\303\251ritage_xbl/index.html" | 60 - .../fr/archive/mozilla/xul/tutoriel_xul/index.html | 179 - .../indicateurs_de_progression/index.html | 48 - .../xul/tutoriel_xul/interfaces_xpcom/index.html | 190 - .../xul/tutoriel_xul/introduction/index.html | 52 - .../introduction_\303\240_rdf/index.html" | 147 - .../introduction_\303\240_xbl/index.html" | 78 - .../xul/tutoriel_xul/l'url_chrome/index.html | 45 - .../xul/tutoriel_xul/la_structure_xul/index.html | 158 - .../le_mod\303\250le_de_bo\303\256te/index.html" | 146 - .../les_bo\303\256tes_de_groupe/index.html" | 101 - .../tutoriel_xul/les_champs_de_saisie/index.html | 126 - .../les_contr\303\264les_de_listes/index.html" | 134 - .../index.html" | 63 - .../index.html" | 81 - .../tutoriel_xul/les_fichiers_manifest/index.html | 108 - .../les_objets_bo\303\256tes/index.html" | 159 - .../index.html" | 193 - .../les_scripts_d'installation/index.html | 147 - .../xul/tutoriel_xul/localisation/index.html | 328 - .../tutoriel_xul/manipulation_de_listes/index.html | 132 - .../menus_d\303\251filants/index.html" | 47 - .../xul/tutoriel_xul/menus_surgissants/index.html | 214 - .../mise_\303\240_jour_de_commandes/index.html" | 98 - .../modification_d'une_interface_xul/index.html | 167 - .../index.html" | 50 - .../mozilla/xul/tutoriel_xul/onglets/index.html | 107 - .../overlays_inter-paquetage/index.html | 96 - .../xul/tutoriel_xul/piles_et_paquets/index.html | 97 - .../index.html" | 107 - .../index.html" | 93 - .../index.html" | 129 - .../positionnement_dans_une_pile/index.html | 36 - .../index.html" | 253 - .../xul/tutoriel_xul/raccourcis_clavier/index.html | 377 - .../index.html" | 213 - .../sources_de_donn\303\251es_rdf/index.html" | 296 - .../xul/tutoriel_xul/styler_un_arbre/index.html | 79 - .../s\303\251lection_dans_les_arbres/index.html" | 60 - .../tutoriel_xul/s\303\251parateurs/index.html" | 80 - .../utilisation_des_spacers/index.html | 143 - .../vues_d'arbre_personnalis\303\251es/index.html" | 143 - .../xul/utilisation_de_nsixulappinfo/index.html | 109 - .../xul/utilisation_de_plusieurs_dtd/index.html | 41 - .../index.html | 36 - files/fr/archive/mozilla/xul/vbox/index.html | 100 - .../mozilla/xul/vulgarisation_xul/index.html | 33 - .../xul/vulgarisation_xul/introduction/index.html | 102 - .../l'essentiel_d'une_extension/index.html | 412 - .../index.html | 132 - files/fr/archive/mozilla/xul/window/index.html | 179 - .../mozilla/xulrunner/astuces_xulrunner/index.html | 164 - .../xulrunner/ce_qu'offre_xulrunner/index.html | 67 - .../index.html" | 157 - .../empaqueter_une_application_xul/index.html | 74 - .../mozilla/xulrunner/faq_de_xulrunner/index.html | 23 - .../index.html" | 79 - files/fr/archive/mozilla/xulrunner/index.html | 118 - .../index.html | 90 - .../notes_de_versions_de_xulrunner_1.9/index.html | 137 - .../xulrunner_anciennes_versions/index.html | 26 - files/fr/archive/plugins/reference/index.html | 17 - files/fr/archive/rss/autres_ressources/index.html | 17 - "files/fr/archive/rss/entit\303\251s/index.html" | 1379 - files/fr/archive/rss/index.html | 70 - .../premiers_pas/fonctionnement_de_rss/index.html | 21 - files/fr/archive/rss/premiers_pas/index.html | 56 - .../premiers_pas/pourquoi_utiliser_rss/index.html | 28 - .../pr\303\251sentation_de_rss/index.html" | 255 - .../rss/premiers_pas/syndication/index.html | 101 - files/fr/archive/rss/version/index.html | 27 - .../archive/rss/\303\251l\303\251ments/index.html" | 80 - files/fr/archive/security/index.html | 27 - .../index.html" | 104 - .../standards_du_web/communaut\303\251/index.html" | 30 - files/fr/archive/standards_du_web/index.html | 92 - .../index.html" | 143 - .../le_sniffing_de_doctype_dans_mozilla/index.html | 142 - .../index.html" | 73 - .../rdf_en_cinquante_mots/index.html | 69 - .../index.html | 35 - .../index.html | 102 - files/fr/archive/themes/creer_un_theme/index.html | 268 - files/fr/archive/themes/index.html | 27 - files/fr/archive/web/css/display-inside/index.html | 139 - .../fr/archive/web/css/display-outside/index.html | 145 - files/fr/archive/web/css/index.html | 10 - files/fr/archive/web/index.html | 19 - files/fr/archive/web/iterator/index.html | 190 - .../extensions_microsoft/activexobject/index.html | 96 - .../extensions_microsoft/at-cc-on/index.html | 59 - .../extensions_microsoft/at-if/index.html | 78 - .../extensions_microsoft/at-set/index.html | 94 - .../date.getvardate/index.html | 41 - .../debug/debuggerenabled/index.html | 30 - .../extensions_microsoft/debug/index.html | 140 - .../debug/mstraceasynccallbackcompleted/index.html | 26 - .../debug/mstraceasynccallbackstarting/index.html | 71 - .../mstraceasyncoperationcompleted/index.html | 88 - .../debug/mstraceasyncoperationstarting/index.html | 26 - .../debug/msupdateasynccallbackrelation/index.html | 71 - .../debug/setnonusercodeexceptions/index.html | 48 - .../extensions_microsoft/debug/write/index.html | 57 - .../extensions_microsoft/debug/writeln/index.html | 56 - .../enumerator/atend/index.html | 62 - .../extensions_microsoft/enumerator/index.html | 98 - .../enumerator/item/index.html | 62 - .../enumerator/movefirst/index.html | 66 - .../enumerator/movenext/index.html | 66 - .../error.description/index.html | 64 - .../extensions_microsoft/error.number/index.html | 61 - .../error.stacktracelimit/index.html | 48 - .../extensions_microsoft/getobject/index.html | 78 - .../web/javascript/extensions_microsoft/index.html | 68 - .../extensions_microsoft/scriptengine/index.html | 43 - .../scriptenginebuildversion/index.html | 45 - .../scriptenginemajorversion/index.html | 46 - .../scriptengineminorversion/index.html | 46 - .../vbarray/dimensions/index.html | 80 - .../vbarray/getitem/index.html | 89 - .../extensions_microsoft/vbarray/index.html | 108 - .../extensions_microsoft/vbarray/lbound/index.html | 91 - .../vbarray/toarray/index.html | 84 - .../extensions_microsoft/vbarray/ubound/index.html | 91 - .../index.html" | 58 - .../index.html" | 66 - .../web/javascript/handler.enumerate/index.html | 121 - files/fr/archive/web/javascript/index.html | 12 - .../web/javascript/reflect.enumerate/index.html | 79 - .../support_ecmascript_next_par_mozilla/index.html | 75 - .../web/xforms/autres_ressources/index.html | 15 - files/fr/archive/web/xforms/index.html | 96 - .../index.html" | 27 - .../r\303\251f\303\251rence_api_xforms/index.html" | 47 - .../index.html" | 25 - .../index.html" | 159 - .../tests_en_charge/index.html" | 14 - files/fr/bundles/index.html | 71 - .../index.html | 20 - .../index.html | 249 - files/fr/compare-locales/index.html | 47 - files/fr/components.utils.evalinsandbox/index.html | 57 - files/fr/components.utils.import/index.html | 47 - files/fr/components.utils.reporterror/index.html | 32 - files/fr/components.utils/index.html | 18 - .../index.html | 66 - files/fr/console_d'erreurs/index.html | 49 - .../index.html" | 129 - .../index.html" | 227 - .../index.html" | 28 - "files/fr/cr\303\251ation_d'un_patch/index.html" | 38 - .../index.html" | 60 - .../index.html" | 124 - .../premiers_pas/donn\303\251es_xml/index.html" | 191 - .../interfaces_utilisateur_xul/index.html | 315 - files/fr/css/premiers_pas/liaisons_xbl/index.html | 198 - .../design_web_responsive/index.html" | 49 - files/fr/e4x/index.html | 34 - files/fr/extensions/bootcamp_tutorial/index.html | 24 - "files/fr/extensions/communaut\303\251/index.html" | 28 - .../index.html" | 159 - files/fr/feed_content_access_api/index.html | 165 - files/fr/fuel/annotations/index.html | 92 - files/fr/fuel/bookmark/index.html | 85 - files/fr/fuel/bookmarkfolder/index.html | 121 - files/fr/fuel/browsertab/index.html | 110 - files/fr/fuel/console/index.html | 54 - files/fr/fuel/eventitem/index.html | 46 - files/fr/fuel/eventlistener/index.html | 40 - files/fr/fuel/events/index.html | 52 - files/fr/fuel/extensions/index.html | 64 - files/fr/fuel/index.html | 34 - files/fr/fuel/preference/index.html | 73 - files/fr/fuel/preferencebranch/index.html | 112 - files/fr/fuel/sessionstorage/index.html | 76 - files/fr/fuel/window/devicelight/index.html | 72 - files/fr/fuel/window/index.html | 57 - files/fr/git/index.html | 53 - files/fr/guide_de_migration_vers_places/index.html | 179 - .../g\303\251n\303\251ration_de_guid/index.html" | 33 - .../index.html | 28 - "files/fr/images_png_anim\303\251es/index.html" | 545 - files/fr/installation_de_mercurial/index.html | 34 - .../index.html" | 27 - .../index.html" | 28 - .../fr/introduction_au_shell_javascript/index.html | 404 - .../index.html" | 31 - "files/fr/introduction_\303\240_ssl/index.html" | 253 - files/fr/ipdl/index.html | 18 - files/fr/ipdl/tutorial/index.html | 690 - .../traitement_de_xml_avec_e4x/index.html | 252 - files/fr/javaxpcom/index.html | 31 - files/fr/l'objet_components/index.html | 111 - files/fr/les_bases_de_mercurial/index.html | 63 - files/fr/les_bases_des_services_web/index.html | 38 - .../index.html" | 43 - files/fr/localisation_avec_mercurial/index.html | 261 - files/fr/localisation_d'une_extension/index.html | 152 - .../index.html | 88 - .../index.html" | 40 - files/fr/localisation_et_pluriels/index.html | 313 - .../index.html" | 171 - files/fr/mccoy/index.html | 43 - .../howto/lier_un_compte_github/index.html | 17 - files/fr/mdn/contribute/persona_sign-in/index.html | 32 - .../fr/mdn/user_guide/r\303\251daction/index.html" | 61 - files/fr/mercurial/index.html | 36 - files/fr/midas/index.html | 6 - files/fr/midas/security_preferences/index.html | 84 - .../index.html | 1245 - .../index.html" | 95 - .../about_omni.ja_(formerly_omni.jar)/index.html | 61 - .../fr/mozilla/add-ons/add-on_debugger/index.html | 94 - .../add-ons/amo/r\303\250gles/featured/index.html" | 85 - .../mozilla/add-ons/amo/r\303\250gles/index.html" | 21 - .../add-ons/amo/r\303\250gles/reviews/index.html" | 157 - .../add-ons/bootstrapped_extensions/index.html | 348 - .../index.html | 213 - .../retrait_de_votre_extension/index.html | 68 - .../mozilla/add-ons/install_manifests/index.html | 566 - files/fr/mozilla/add-ons/nous_contacter/index.html | 45 - .../index.html | 103 - files/fr/mozilla/add-ons/plugins/index.html | 110 - .../add-ons/sdk/high-level_apis/base64/index.html | 111 - .../sdk/high-level_apis/context-menu/index.html | 833 - .../mozilla/add-ons/sdk/high-level_apis/index.html | 13 - .../sdk/high-level_apis/indexed-db/index.html | 166 - .../sdk/high-level_apis/simple-storage/index.html | 170 - .../add-ons/sdk/high-level_apis/tabs/index.html | 669 - files/fr/mozilla/add-ons/sdk/index.html | 337 - .../mozilla/add-ons/sdk/low-level_apis/index.html | 24 - .../sdk/low-level_apis/io_byte-streams/index.html | 109 - .../add-ons/sdk/low-level_apis/io_file/index.html | 196 - .../low-level_apis/system_child_process/index.html | 50 - .../sdk/low-level_apis/ui_button_action/index.html | 659 - .../add-ons/sdk/tools/cfx_to_jpm/index.html | 192 - files/fr/mozilla/add-ons/sdk/tools/index.html | 13 - files/fr/mozilla/add-ons/sdk/tools/jpm/index.html | 600 - .../tutorials/add_a_context_menu_item/index.html | 115 - .../sdk/tutorials/getting_started_(jpm)/index.html | 165 - files/fr/mozilla/add-ons/sdk/tutorials/index.html | 143 - .../mozilla/add-ons/sdk/tutorials/l10n/index.html | 383 - files/fr/mozilla/add-ons/thunderbird/index.html | 135 - .../mozilla/add-ons/th\303\250mes/fond/index.html" | 79 - .../fr/mozilla/add-ons/th\303\250mes/index.html" | 45 - .../th\303\250mes/theme_concepts/index.html" | 231 - .../embedded_webextensions/index.html | 219 - files/fr/mozilla/bugzilla/index.html | 59 - files/fr/mozilla/command_line_options/index.html | 472 - files/fr/mozilla/css/index.html | 10 - .../index.html | 103 - files/fr/mozilla/enregistrement_chrome/index.html | 168 - .../firefox/compiler_firefox_avec_rust/index.html | 38 - .../firefox/deploiement_entreprise/index.html | 145 - .../mozilla/firefox/developer_edition/index.html | 57 - .../firefox/developer_edition/reverting/index.html | 23 - files/fr/mozilla/firefox/firefox_esr/index.html | 15 - files/fr/mozilla/firefox/headless_mode/index.html | 124 - .../mozilla/firefox/le_protocole_about/index.html | 174 - .../firefox/multiprocessus_firefox/index.html | 77 - .../multiprocessus_firefox/motivation/index.html | 44 - .../technical_overview/index.html | 164 - files/fr/mozilla/firefox/privacy/index.html | 15 - .../protection_contre_le_pistage/index.html | 79 - .../protection_du_pistage_par_rebond/index.html | 101 - files/fr/mozilla/firefox/versions/14/index.html | 90 - files/fr/mozilla/firefox_pour_android/index.html | 65 - .../test_compatibilite/index.html | 105 - .../chrome/css/-moz-window-dragging/index.html | 107 - .../index.html | 19 - .../_doublecolon_-moz-tree-cell-text/index.html | 32 - .../css/_doublecolon_-moz-tree-cell/index.html | 40 - .../css/_doublecolon_-moz-tree-column/index.html | 31 - .../index.html | 30 - .../css/_doublecolon_-moz-tree-image/index.html | 36 - .../_doublecolon_-moz-tree-indentation/index.html | 29 - .../css/_doublecolon_-moz-tree-line/index.html | 30 - .../index.html | 30 - .../_doublecolon_-moz-tree-row(hover)/index.html | 19 - .../css/_doublecolon_-moz-tree-row/index.html | 55 - .../_doublecolon_-moz-tree-separator/index.html | 31 - .../css/_doublecolon_-moz-tree-twisty/index.html | 35 - files/fr/mozilla/gecko/chrome/css/index.html | 25 - files/fr/mozilla/gecko/chrome/index.html | 15 - files/fr/mozilla/gecko/faq/index.html | 201 - .../gecko/gecko_embedding_basics/index.html | 403 - files/fr/mozilla/gecko/index.html | 118 - .../api_overview/index.html" | 422 - .../embarquer_gecko/index.html" | 133 - .../index.html" | 53 - .../gecko/mozilla_embarqu\303\251/index.html" | 59 - .../int\303\251gration_\303\251diteur/index.html" | 133 - files/fr/mozilla/gecko/sdk_gecko/index.html | 61 - .../index.html | 76 - files/fr/mozilla/instantbird/index.html | 58 - .../fr/mozilla/internal_css_attributes/index.html | 20 - files/fr/mozilla/javascript_astuces/index.html | 115 - .../fr/mozilla/javascript_code_modules/index.html | 93 - .../javascript_code_modules/osfile.jsm/index.html | 70 - .../os.file_for_the_main_thread/index.html | 1159 - .../services.jsm/index.html | 283 - .../javascript_code_modules/sqlite.jsm/index.html | 360 - files/fr/mozilla/localization/index.html | 25 - files/fr/mozilla/localization/index/index.html | 8 - .../localization/l10n_style_guide/index.html | 357 - .../localization/localiser_avec_pontoon/index.html | 135 - .../localization/localization_notes/index.html | 25 - .../localizing_with_verbatim/index.html | 169 - files/fr/mozilla/marketplace/index.html | 127 - files/fr/mozilla/marketplace/index/index.html | 8 - .../fr/mozilla/marketplace/monetisation/index.html | 73 - .../options/creating_a_store/index.html | 66 - files/fr/mozilla/marketplace/options/index.html | 21 - .../marketplace/options/introduction/index.html | 25 - .../options/open_web_apps_for_android/index.html | 216 - .../marketplace/options/packaged_apps/index.html | 92 - .../marketplace/options/self_publishing/index.html | 144 - .../fr/mozilla/marketplace/publication/index.html | 9 - .../marketplace_critere_revue/index.html | 110 - .../publication/updating_apps/index.html | 68 - files/fr/mozilla/marketplace/publish/index.html | 25 - .../marketplace/publishing/submit/index.html | 10 - files/fr/mozilla/mathml_project/index.html | 99 - .../mathml_project/mathml_torture_test/index.html | 1445 - .../mozilla/mobile/balise_meta_viewport/index.html | 80 - files/fr/mozilla/mobile/index.html | 22 - .../mode_presque_standard_de_gecko/index.html | 75 - .../participer_au_projet_mozilla/index.html | 9 - files/fr/mozilla/preferences/index.html | 53 - files/fr/mozilla/projects/emscripten/index.html | 37 - files/fr/mozilla/projects/index.html | 15 - .../fr/mozilla/projects/rhino/examples/index.html | 32 - files/fr/mozilla/projects/rhino/index.html | 25 - files/fr/mozilla/projects/talos/index.html | 8 - .../thunderbird_localisation/index.html | 95 - files/fr/mozilla/rejoindre/index.html | 94 - files/fr/mozilla/rust/index.html | 47 - files/fr/mozilla/security/index.html | 30 - files/fr/mozilla/tech/index.html | 13 - .../index.html | 37 - .../an_overview_of_xpcom/index.html | 504 - .../xpcom/guide/creating_components/index.html | 281 - .../guide/creating_components/preface/index.html | 77 - .../using_xpcom_components/index.html | 303 - files/fr/mozilla/tech/xpcom/guide/index.html | 16 - files/fr/mozilla/tech/xpidl/index.html | 22 - .../testing/asan_nightly_project/index.html | 126 - .../firefox_and_address_sanitizer/index.html | 11 - files/fr/mozilla/testing/index.html | 12 - .../thunderbird/account_examples/index.html | 71 - .../thunderbird/autoconfiguration/index.html | 173 - files/fr/mozilla/thunderbird/index.html | 72 - files/fr/mozilla/thunderbird/index/index.html | 8 - .../index.html | 97 - .../working_with_windows_in_chrome_code/index.html | 250 - files/fr/new_compatibility_tables_beta/index.html | 24 - files/fr/np_initialize/index.html | 61 - files/fr/np_shutdown/index.html | 55 - files/fr/npp/index.html | 61 - files/fr/npp_new/index.html | 105 - files/fr/npp_setwindow/index.html | 83 - files/fr/nsiconsoleservice/index.html | 55 - files/fr/nsifeed/index.html | 103 - files/fr/nsifeedcontainer/index.html | 101 - files/fr/nsifeedelementbase/index.html | 43 - files/fr/nsifeedentry/index.html | 66 - files/fr/nsifeedgenerator/index.html | 45 - files/fr/nsifeedperson/index.html | 50 - files/fr/nsifeedprocessor/index.html | 99 - files/fr/nsifeedprogresslistener/index.html | 93 - files/fr/nsifeedresult/index.html | 88 - files/fr/nsifeedresultlistener/index.html | 47 - files/fr/nsifeedtextconstruct/index.html | 89 - files/fr/nsipromptservice/index.html | 701 - files/fr/nsiscriptableunescapehtml/index.html | 90 - files/fr/nsisessionstore/index.html | 292 - files/fr/nspr/about_nspr/index.html | 449 - files/fr/nspr/index.html | 59 - files/fr/outils/ardoise/index.html | 127 - .../d\303\251bogueur/param\303\250tres/index.html" | 57 - files/fr/outils/webide/diagnostic/index.html | 165 - files/fr/outils/webide/index.html | 40 - .../mise_en_place_des_environnements/index.html | 131 - files/fr/outils/webide/monitor/index.html | 162 - files/fr/outils/webide/opening_webide/index.html | 32 - files/fr/outils/webide/the_runtime_menu/index.html | 53 - .../working_with_cordova_apps_in_webide/index.html | 46 - .../index.html" | 42 - files/fr/performance/about_colon_memory/index.html | 186 - files/fr/performance/index.html | 69 - .../index.html | 109 - .../performance/scroll-linked_effects/index.html | 98 - .../index.html | 31 - .../acc\303\250s_aux_marque-pages/index.html" | 101 - files/fr/places/index.html | 66 - .../syst\303\250me_de_requ\303\252tes/index.html" | 209 - files/fr/plug-n-hack/index.html | 55 - files/fr/plug-n-hack/plug-n-hack_phase1/index.html | 83 - files/fr/plug-n-hack/plug-n-hack_phase2/index.html | 15 - .../plug-n-hack_tools_supported/index.html | 31 - files/fr/prism/index.html | 88 - files/fr/profile_manager/index.html | 108 - .../index.html" | 48 - files/fr/pyxpcom/index.html | 87 - files/fr/qa/index.html | 60 - files/fr/qa/triaging_bugs_for_firefox/index.html | 135 - files/fr/rapports_de_plantage/index.html | 6 - files/fr/rdf/index.html | 86 - .../index.html" | 149 - .../r\303\251f\303\251rence_de_jsapi/index.html" | 843 - .../js_callfunction/index.html" | 138 - files/fr/sandbox/index.html | 183 - files/fr/sax/index.html | 110 - .../index.html" | 227 - .../fr/spidermonkey/build_documentation/index.html | 235 - files/fr/spidermonkey/index.html | 64 - files/fr/spidermonkey/index/index.html | 10 - files/fr/storage/index.html | 392 - .../index.html" | 49 - files/fr/theme_packaging/index.html | 100 - .../index.html | 59 - .../index.html | 74 - files/fr/venkman/index.html | 40 - .../fr/web/accessibility/at-apis/at-spi/index.html | 9 - .../interfaces_at-spi_prises_en_charge/index.html | 136 - .../fr/web/accessibility/at-apis/gecko/index.html | 9 - .../accessibility/at-apis/gecko/roles/index.html | 736 - .../at-apis/gecko/roles/role_alert/index.html | 41 - .../gecko/roles/role_password_text/index.html | 27 - files/fr/web/accessibility/at-apis/index.html | 56 - .../api/domapplicationsmanager/getall/index.html | 33 - files/fr/web/api/domapplicationsmanager/index.html | 82 - files/fr/web/api/navigator/id/index.html | 17 - files/fr/web/api/navigator/mozpower/index.html | 26 - files/fr/web/api/navigator/moztcpsocket/index.html | 34 - files/fr/web/api/powermanager/index.html | 109 - files/fr/web/api/tcp_socket_api/index.html | 121 - files/fr/web/api/tcpsocket/index.html | 102 - files/fr/web/api/wifimanager/associate/index.html | 65 - files/fr/web/api/wifimanager/connection/index.html | 44 - .../wifimanager/connectioninformation/index.html | 52 - files/fr/web/api/wifimanager/enabled/index.html | 39 - files/fr/web/api/wifimanager/forget/index.html | 44 - .../api/wifimanager/getknownnetworks/index.html | 35 - .../fr/web/api/wifimanager/getnetworks/index.html | 58 - files/fr/web/api/wifimanager/index.html | 100 - files/fr/web/api/wifimanager/macaddress/index.html | 34 - .../wifimanager/onconnectioninfoupdate/index.html | 33 - files/fr/web/api/wifimanager/ondisabled/index.html | 32 - files/fr/web/api/wifimanager/onenabled/index.html | 32 - .../web/api/wifimanager/onstatuschange/index.html | 33 - .../api/wifimanager/setpowersavingmode/index.html | 39 - .../web/api/wifimanager/setstaticipmode/index.html | 51 - files/fr/web/api/wifimanager/wps/index.html | 112 - files/fr/web/api/window/importdialog/index.html | 64 - .../apps/design/building_blocks/buton/index.html | 231 - .../design/building_blocks/confirmation/index.html | 86 - .../apps/design/building_blocks/filtre/index.html | 49 - .../fr/web/apps/design/building_blocks/index.html | 268 - .../design/building_blocks/menu_action/index.html | 46 - .../design/building_blocks/zone_saisie/index.html | 141 - files/fr/web/css/-moz-binding/index.html | 64 - .../web/css/-moz-border-bottom-colors/index.html | 96 - .../fr/web/css/-moz-border-left-colors/index.html | 95 - .../fr/web/css/-moz-border-right-colors/index.html | 96 - files/fr/web/css/-moz-border-top-colors/index.html | 96 - files/fr/web/css/-moz-stack-sizing/index.html | 62 - files/fr/web/css/-moz-text-blink/index.html | 51 - files/fr/web/css/-moz-window-shadow/index.html | 70 - files/fr/web/css/-ms-accelerator/index.html | 75 - files/fr/web/css/-ms-block-progression/index.html | 48 - .../web/css/-ms-content-zoom-chaining/index.html | 44 - .../web/css/-ms-content-zoom-limit-max/index.html | 42 - .../web/css/-ms-content-zoom-limit-min/index.html | 42 - files/fr/web/css/-ms-content-zoom-limit/index.html | 44 - .../css/-ms-content-zoom-snap-points/index.html | 74 - .../web/css/-ms-content-zoom-snap-type/index.html | 54 - files/fr/web/css/-ms-content-zoom-snap/index.html | 44 - files/fr/web/css/-ms-content-zooming/index.html | 46 - files/fr/web/css/-ms-filter/index.html | 218 - files/fr/web/css/-ms-flow-from/index.html | 40 - files/fr/web/css/-ms-flow-into/index.html | 40 - .../fr/web/css/-ms-high-contrast-adjust/index.html | 44 - .../web/css/-ms-hyphenate-limit-chars/index.html | 46 - .../web/css/-ms-hyphenate-limit-lines/index.html | 44 - .../fr/web/css/-ms-hyphenate-limit-zone/index.html | 46 - files/fr/web/css/-ms-ime-align/index.html | 48 - files/fr/web/css/-ms-overflow-style/index.html | 43 - files/fr/web/css/-ms-scroll-chaining/index.html | 68 - files/fr/web/css/-ms-scroll-limit-x-max/index.html | 50 - files/fr/web/css/-ms-scroll-limit-x-min/index.html | 44 - files/fr/web/css/-ms-scroll-limit-y-max/index.html | 48 - files/fr/web/css/-ms-scroll-limit-y-min/index.html | 44 - files/fr/web/css/-ms-scroll-limit/index.html | 56 - files/fr/web/css/-ms-scroll-rails/index.html | 50 - .../fr/web/css/-ms-scroll-snap-points-x/index.html | 88 - .../fr/web/css/-ms-scroll-snap-points-y/index.html | 94 - files/fr/web/css/-ms-scroll-snap-x/index.html | 61 - files/fr/web/css/-ms-scroll-snap-y/index.html | 61 - files/fr/web/css/-ms-scroll-translation/index.html | 54 - .../web/css/-ms-scrollbar-3dlight-color/index.html | 75 - .../web/css/-ms-scrollbar-arrow-color/index.html | 95 - .../fr/web/css/-ms-scrollbar-base-color/index.html | 95 - .../css/-ms-scrollbar-darkshadow-color/index.html | 71 - .../fr/web/css/-ms-scrollbar-face-color/index.html | 93 - .../css/-ms-scrollbar-highlight-color/index.html | 95 - .../web/css/-ms-scrollbar-shadow-color/index.html | 73 - .../web/css/-ms-scrollbar-track-color/index.html | 97 - files/fr/web/css/-ms-text-autospace/index.html | 59 - files/fr/web/css/-ms-touch-select/index.html | 49 - files/fr/web/css/-ms-wrap-flow/index.html | 63 - files/fr/web/css/-ms-wrap-margin/index.html | 39 - files/fr/web/css/-ms-wrap-through/index.html | 45 - .../css/@media/-moz-mac-graphite-theme/index.html | 34 - .../web/css/@media/-moz-maemo-classic/index.html | 30 - files/fr/web/css/@media/-moz-os-version/index.html | 34 - .../@media/-moz-scrollbar-end-backward/index.html | 32 - .../@media/-moz-scrollbar-end-forward/index.html | 32 - .../-moz-scrollbar-start-backward/index.html | 32 - .../@media/-moz-scrollbar-start-forward/index.html | 32 - .../-moz-scrollbar-thumb-proportional/index.html | 32 - .../web/css/@media/-moz-touch-enabled/index.html | 46 - .../index.html | 46 - .../web/css/@media/-moz-windows-classic/index.html | 34 - .../css/@media/-moz-windows-compositor/index.html | 32 - .../@media/-moz-windows-default-theme/index.html | 34 - .../web/css/@media/-moz-windows-glass/index.html | 25 - .../web/css/@media/-moz-windows-theme/index.html | 43 - .../_colon_-moz-full-screen-ancestor/index.html | 41 - .../css/_colon_-moz-lwtheme-brighttext/index.html | 25 - .../css/_colon_-moz-lwtheme-darktext/index.html | 25 - files/fr/web/css/_colon_-moz-lwtheme/index.html | 25 - .../images-in-menus/index.html | 29 - .../web/css/_colon_-moz-system-metric/index.html | 39 - .../mac-graphite-theme/index.html | 35 - .../scrollbar-end-backward/index.html | 29 - .../scrollbar-end-forward/index.html | 27 - .../scrollbar-start-backward/index.html | 29 - .../scrollbar-start-forward/index.html | 29 - .../scrollbar-thumb-proportional/index.html | 29 - .../touch-enabled/index.html | 29 - .../windows-default-theme/index.html | 69 - .../fr/web/css/_doublecolon_-ms-browse/index.html | 108 - files/fr/web/css/_doublecolon_-ms-check/index.html | 125 - files/fr/web/css/_doublecolon_-ms-clear/index.html | 137 - .../fr/web/css/_doublecolon_-ms-expand/index.html | 88 - .../web/css/_doublecolon_-ms-fill-lower/index.html | 96 - .../web/css/_doublecolon_-ms-fill-upper/index.html | 101 - files/fr/web/css/_doublecolon_-ms-fill/index.html | 117 - .../fr/web/css/_doublecolon_-ms-reveal/index.html | 91 - files/fr/web/css/_doublecolon_-ms-thumb/index.html | 100 - .../css/_doublecolon_-ms-ticks-after/index.html | 91 - .../css/_doublecolon_-ms-ticks-before/index.html | 89 - .../fr/web/css/_doublecolon_-ms-tooltip/index.html | 30 - files/fr/web/css/_doublecolon_-ms-track/index.html | 104 - files/fr/web/css/_doublecolon_-ms-value/index.html | 92 - files/fr/web/css/azimuth/index.html | 104 - .../fr/web/css/overflow-clip-box-block/index.html | 157 - .../fr/web/css/overflow-clip-box-inline/index.html | 157 - files/fr/web/css/overflow-clip-box/index.html | 175 - files/fr/web/events/cached/index.html | 82 - files/fr/web/events/chargingchange/index.html | 63 - files/fr/web/events/chargingtimechange/index.html | 63 - files/fr/web/events/checking/index.html | 74 - files/fr/web/events/downloading/index.html | 74 - .../1.1/index.html" | 76 - .../1.2/index.html" | 92 - .../1.3/index.html" | 141 - .../1.4/index.html" | 28 - .../1.5/index.html" | 40 - .../1.6/index.html" | 33 - .../1.7/index.html" | 38 - .../1.8.1/index.html" | 30 - .../1.8.5/index.html" | 128 - .../1.8/index.html" | 41 - .../index.html" | 72 - .../index.html" | 273 - .../support_ecmascript_5_par_mozilla/index.html" | 46 - .../fonctions/arguments/caller/index.html | 54 - .../instructions/for_each...in/index.html | 80 - .../objets_globaux/array/observe/index.html | 90 - .../objets_globaux/array/unobserve/index.html | 89 - .../objets_globaux/arraybuffer/transfer/index.html | 100 - .../objets_globaux/date/tolocaleformat/index.html | 80 - .../objets_globaux/function/arity/index.html | 32 - .../objets_globaux/function/isgenerator/index.html | 53 - .../objets_globaux/number/tointeger/index.html | 56 - .../objets_globaux/object/count/index.html | 42 - .../objets_globaux/object/eval/index.html | 47 - .../objets_globaux/object/getnotifier/index.html | 53 - .../objets_globaux/object/nosuchmethod/index.html | 76 - .../objets_globaux/object/observe/index.html | 154 - .../objets_globaux/object/parent/index.html | 42 - .../objets_globaux/object/unobserve/index.html | 103 - .../objets_globaux/object/unwatch/index.html | 70 - .../objets_globaux/object/watch/index.html | 150 - .../objets_globaux/parallelarray/index.html | 56 - .../objets_globaux/stopiteration/index.html | 115 - .../objets_globaux/string/quote/index.html | 72 - .../index.html" | 183 - .../compr\303\251hensions_de_tableau/index.html" | 209 - .../expression_closures/index.html" | 85 - files/fr/webapi/browser/index.html | 209 - files/fr/webapi/camera/index.html | 23 - files/fr/webapi/idle/index.html | 65 - files/fr/webapi/mobile_connection/index.html | 151 - files/fr/webapi/network_stats/index.html | 89 - files/fr/webapi/power_management/index.html | 123 - files/fr/webapi/websms/index.html | 62 - files/fr/xml_dans_mozilla/index.html | 286 - files/fr/xml_extras/index.html | 114 - files/fr/xpcnativewrapper/index.html | 201 - files/fr/xpcom/index.html | 96 - .../components.exception/index.html | 35 - .../liaisons_de_langage/components.id/index.html | 26 - files/fr/xpcom/liaisons_de_langage/index.html | 108 - files/fr/xpcom/reference/core_functions/index.html | 8 - files/fr/xpcom/reference/index.html | 19 - .../reference/reference_by_grouping/index.html | 981 - .../xpcom/setting_http_request_headers/index.html | 261 - files/fr/xpcom_interface_reference/index.html | 17 - .../mozistoragestatement/index.html | 568 - .../nsiaccessibleprovider/index.html | 49 - .../nsidomclientrect/index.html | 97 - .../nsiidleservice/index.html | 51 - .../nsiprocess/index.html | 303 - .../nsisupports/index.html | 41 - .../fr/xpcom_interface_reference/nsiuri/index.html | 189 - .../nsixulappinfo/index.html | 10 - files/fr/xpconnect/index.html | 18 - files/fr/xpcshell/index.html | 45 - files/fr/xpi/index.html | 21 - files/fr/zones/index.html | 53 - .../index.html" | 46 - .../index.html" | 33 - 1306 files changed, 170005 deletions(-) delete mode 100644 files/fr/_wikihistory.json delete mode 100644 "files/fr/acc\303\250s_s\303\251curis\303\251_au_contenu_dom_depuis_le_chrome/index.html" delete mode 100644 files/fr/adding_extensions_using_the_windows_registry/index.html delete mode 100644 "files/fr/ajout_de_fournisseurs_de_donn\303\251es_de_protection_anti-phishing/index.html" delete mode 100644 "files/fr/am\303\251liorations_css_dans_firefox_3/index.html" delete mode 100644 "files/fr/am\303\251liorations_du_gestionnaire_de_t\303\251l\303\251chargement_dans_firefox_3/index.html" delete mode 100644 files/fr/api_du_toolkit/index.html delete mode 100644 "files/fr/api_du_toolkit/r\303\251f\303\251rences_officielles/index.html" delete mode 100644 "files/fr/apprendre/confidentialit\303\251_int\303\251grit\303\251_et_disponibilit\303\251/index.html" delete mode 100644 "files/fr/apprendre/contr\303\264les_de_s\303\251curit\303\251/index.html" delete mode 100644 files/fr/apprendre/les_menaces/index.html delete mode 100644 "files/fr/apprendre/les_vuln\303\251rabilit\303\251s/index.html" delete mode 100644 files/fr/apprendre/ssl_et_tls/index.html delete mode 100644 "files/fr/apprendre/s\303\251curit\303\251_tcp_ip/index.html" delete mode 100644 files/fr/archive/add-ons/api_de_restauration_de_session/index.html delete mode 100644 "files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/index.html" delete mode 100644 files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html delete mode 100644 files/fr/archive/add-ons/index.html delete mode 100644 "files/fr/archive/add-ons/installation_d_extensions_et_de_th\303\250mes_depuis_une_page_web/index.html" delete mode 100644 files/fr/archive/add-ons/paquetage_multi_extensions/index.html delete mode 100644 "files/fr/archive/add-ons/t\303\251l\303\251charger_du_json_et_du_javascript_dans_une_extension/index.html" delete mode 100644 "files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/index.html" delete mode 100644 files/fr/archive/apps/advanced_topics/index.html delete mode 100644 files/fr/archive/apps/index.html delete mode 100644 "files/fr/archive/b2g_os/add-ons/d\303\251velopper_des_add-ons_pour_firefox_os/index.html" delete mode 100644 files/fr/archive/b2g_os/add-ons/index.html delete mode 100644 files/fr/archive/b2g_os/api/alarm_api/index.html delete mode 100644 files/fr/archive/b2g_os/api/api_contacts/index.html delete mode 100644 files/fr/archive/b2g_os/api/bluetoothstatuschangedevent/index.html delete mode 100644 files/fr/archive/b2g_os/api/callevent/index.html delete mode 100644 files/fr/archive/b2g_os/api/data_store_api/index.html delete mode 100644 files/fr/archive/b2g_os/api/domapplication/index.html delete mode 100644 files/fr/archive/b2g_os/api/domrequest/error/index.html delete mode 100644 files/fr/archive/b2g_os/api/domrequest/index.html delete mode 100644 files/fr/archive/b2g_os/api/domrequest/onerror/index.html delete mode 100644 files/fr/archive/b2g_os/api/domrequest/onsuccess/index.html delete mode 100644 files/fr/archive/b2g_os/api/domrequest/readystate/index.html delete mode 100644 files/fr/archive/b2g_os/api/domrequest/result/index.html delete mode 100644 files/fr/archive/b2g_os/api/index.html delete mode 100644 files/fr/archive/b2g_os/api/l10n_api/index.html delete mode 100644 files/fr/archive/b2g_os/api/navigator/addidleobserver/index.html delete mode 100644 files/fr/archive/b2g_os/api/navigator/index.html delete mode 100644 files/fr/archive/b2g_os/api/navigator/mozapps/index.html delete mode 100644 files/fr/archive/b2g_os/api/navigator/requestwakelock/index.html delete mode 100644 files/fr/archive/b2g_os/api/nfc_api/index.html delete mode 100644 files/fr/archive/b2g_os/api/udpsocket/index.html delete mode 100644 files/fr/archive/b2g_os/api/wake_lock_api/index.html delete mode 100644 files/fr/archive/b2g_os/api/wake_lock_api/keeping_the_geolocation_on_when_the_application_is_invisible/index.html delete mode 100644 files/fr/archive/b2g_os/api/window/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/configurer_marionette/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/endurance/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_1_marionette_firefox_os_commencer/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_2_marionette_firefox_os_interactions/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_3_tests_reutilisables/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_4_reutiliser_commandes_firefox_os_configuration/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_5_introduction_executeur_tests/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_6_marionette_classe_by/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_7_ecrire_vos_propres_tests/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_8_utiliser_une_classe_base/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_9_objets_app/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/marionette_pour_python_interactif/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/mtbf_tests/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/reftests/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/test_execution_chart/index.html delete mode 100644 files/fr/archive/b2g_os/automated_testing/tests_cppunit/index.html delete mode 100644 files/fr/archive/b2g_os/b2g_os_architecture/index.html delete mode 100644 files/fr/archive/b2g_os/bluetooth_api/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/chirimen_faq/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/os_image/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/basic_startup/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/board_connectors/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/dev_windows/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/firmware_update_guide_for_windows/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/index.html delete mode 100644 files/fr/archive/b2g_os/board_guide/index.html delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/appareils_compatibles/index.html delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_build_variables_reference_sheet/index.html delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_installer_add-on/index.html delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_os_update_packages/index.html delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/compiler_pour_le_flame_sur_os_x/index.html delete mode 100644 "files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/configurer_votre_premi\303\250re_construction/index.html" delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/construire_anciennes_branches/index.html delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/index.html delete mode 100644 files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/mettre_en_place_un_environnement_de_construction/index.html delete mode 100644 "files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/r\303\251sum\303\251_processus_compilation_firefox_os/index.html" delete mode 100644 files/fr/archive/b2g_os/building_b2g_for_qemu_emulator/index.html delete mode 100644 files/fr/archive/b2g_os/building_the_firefox_os_simulator/index.html delete mode 100644 files/fr/archive/b2g_os/choisir_comment_lancer_gaia_ou_b2g/index.html delete mode 100644 files/fr/archive/b2g_os/compiler/building_an_engineering_build_like_the_ones_publis/index.html delete mode 100644 files/fr/archive/b2g_os/compiler/compiler_pour_le_fairphone/index.html delete mode 100644 files/fr/archive/b2g_os/compiler/fota_community_builds/index.html delete mode 100644 files/fr/archive/b2g_os/compiler/index.html delete mode 100644 files/fr/archive/b2g_os/customisation_avec_le_fichier_.userconfig/index.html delete mode 100644 files/fr/archive/b2g_os/debugging/connecting_a_firefox_os_device_to_the_desktop/index.html delete mode 100644 files/fr/archive/b2g_os/debugging/index.html delete mode 100644 files/fr/archive/b2g_os/debugging/installer_adb/index.html delete mode 100644 files/fr/archive/b2g_os/debugging/journalisation_console/index.html delete mode 100644 "files/fr/archive/b2g_os/debugging/les_param\303\250tres_d\303\251veloppeurs/index.html" delete mode 100644 files/fr/archive/b2g_os/debugging/personnaliser_b2g.sh/index.html delete mode 100644 files/fr/archive/b2g_os/debugging/signaler_une_erreur_firefox_os/index.html delete mode 100644 "files/fr/archive/b2g_os/debugging/\303\251tapes_pr\303\251paratoires/index.html" delete mode 100644 files/fr/archive/b2g_os/depannage/index.html delete mode 100644 files/fr/archive/b2g_os/developer_preview_phone/index.html delete mode 100644 files/fr/archive/b2g_os/developing_firefox_os/index.html delete mode 100644 files/fr/archive/b2g_os/developing_firefox_os/personnalisation_des_dns/index.html delete mode 100644 files/fr/archive/b2g_os/developing_firefox_os/quickstart_guide_to_b2g_development/index.html delete mode 100644 files/fr/archive/b2g_os/developing_firefox_os/rapporter_bug_firefox_os/index.html delete mode 100644 files/fr/archive/b2g_os/developing_gaia/apporter_modifications_gaia/index.html delete mode 100644 "files/fr/archive/b2g_os/developing_gaia/bases_syst\303\250me_construction_gaia/index.html" delete mode 100644 files/fr/archive/b2g_os/developing_gaia/comprendre_les_fondements_de_gaia/index.html delete mode 100644 files/fr/archive/b2g_os/developing_gaia/different_ways_to_run_gaia/index.html delete mode 100644 "files/fr/archive/b2g_os/developing_gaia/ex\303\251cuter_des_versions_personnalis\303\251es_dans_webide/index.html" delete mode 100644 files/fr/archive/b2g_os/developing_gaia/faire_fonctionner_code_gaia/index.html delete mode 100644 files/fr/archive/b2g_os/developing_gaia/gaia_tools_reference/index.html delete mode 100644 "files/fr/archive/b2g_os/developing_gaia/guide_version_personnalis\303\251e_gaia/index.html" delete mode 100644 files/fr/archive/b2g_os/developing_gaia/index.html delete mode 100644 files/fr/archive/b2g_os/developing_gaia/localiser_firefox_os/index.html delete mode 100644 "files/fr/archive/b2g_os/developing_gaia/personnalisation_applications_pr\303\251sentes_construction/index.html" delete mode 100644 files/fr/archive/b2g_os/developing_gaia/personnaliser_le_clavier/index.html delete mode 100644 "files/fr/archive/b2g_os/developing_gaia/r\303\251f\303\251rence_options_make/index.html" delete mode 100644 files/fr/archive/b2g_os/developing_gaia/soumettre_correctif_pour_gaia/index.html delete mode 100644 files/fr/archive/b2g_os/developing_gaia/tester_modifications_gaia/index.html delete mode 100644 files/fr/archive/b2g_os/dual_boot_de_b2g_et_android_sur_sgs2/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_apps/building_blocks/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_apps/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_connected-devices_guide/how_to_get_started_with_tv_apps_development/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_connected-devices_guide/index.html delete mode 100644 "files/fr/archive/b2g_os/firefox_os_connected-devices_guide/interagir_avec_les_t\303\251l\303\251commandes_tv/index.html" delete mode 100644 files/fr/archive/b2g_os/firefox_os_connected-devices_guide/simuler_firefox_os_pour_tv/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_connected-devices_guide/tv_remote_control_button_mapping_to_keyboard/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_faq/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_usage_tips/index.html delete mode 100644 files/fr/archive/b2g_os/firefox_os_usage_tips/unlocking_your_phone/index.html delete mode 100644 files/fr/archive/b2g_os/gaia_hacking_guide/index.html delete mode 100644 files/fr/archive/b2g_os/index.html delete mode 100644 files/fr/archive/b2g_os/installer_sur_un_telephone_mobile/index.html delete mode 100644 files/fr/archive/b2g_os/introduction/index.html delete mode 100644 files/fr/archive/b2g_os/media_support/index.html delete mode 100644 files/fr/archive/b2g_os/mulet/index.html delete mode 100644 files/fr/archive/b2g_os/pandaboard/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_c/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_e/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_pixi_3_(3.5)/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/alcatel_onetouch_fire_c_4020d/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/best_practices_open_reference_devices/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/cherry_mobile_ace/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/fairphone/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/firefox_os_device_features/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/flame/configuration/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/flame/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/flame/mettre_a_jour_flame/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/fx0/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/huawei_y300_ii/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/intex_cloud_fx/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/lg_fireweb/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/nexus_4/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/nexus_5/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/phone_specs/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx1/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx2/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/zen_u105_fire/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/zte_open/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/zte_open_c/index.html delete mode 100644 files/fr/archive/b2g_os/phone_guide/zte_open_ii/index.html delete mode 100644 files/fr/archive/b2g_os/platform/apps_architecture/index.html delete mode 100644 files/fr/archive/b2g_os/platform/architecture/index.html delete mode 100644 files/fr/archive/b2g_os/platform/gaia/gaia_apps/browser/index.html delete mode 100644 files/fr/archive/b2g_os/platform/gaia/gaia_apps/index.html delete mode 100644 "files/fr/archive/b2g_os/platform/gaia/gaia_apps/param\303\250tres/index.html" delete mode 100644 "files/fr/archive/b2g_os/platform/gaia/gaia_apps/syst\303\250me/index.html" delete mode 100644 files/fr/archive/b2g_os/platform/gaia/gaia_apps/video/index.html delete mode 100644 files/fr/archive/b2g_os/platform/gaia/hacking/index.html delete mode 100644 files/fr/archive/b2g_os/platform/gaia/index.html delete mode 100644 files/fr/archive/b2g_os/platform/gaia/introduction_a_gaia/index.html delete mode 100644 "files/fr/archive/b2g_os/platform/gestion_de_la_m\303\251moire_dans_firefox_os/index.html" delete mode 100644 files/fr/archive/b2g_os/platform/gonk/index.html delete mode 100644 files/fr/archive/b2g_os/platform/index.html delete mode 100644 files/fr/archive/b2g_os/platform/settings_list/index.html delete mode 100644 files/fr/archive/b2g_os/platform/support_fonctionnalites/index.html delete mode 100644 files/fr/archive/b2g_os/portage/index.html delete mode 100644 files/fr/archive/b2g_os/porter_firefox_os/b2g_nexus_player/index.html delete mode 100644 files/fr/archive/b2g_os/porter_firefox_os/index.html delete mode 100644 files/fr/archive/b2g_os/porter_firefox_os/portage_sur_cyanogenmod/index.html delete mode 100644 files/fr/archive/b2g_os/preparing_for_your_first_b2g_build/index.html delete mode 100644 files/fr/archive/b2g_os/prerequis_pour_construire_firefox_os/index.html delete mode 100644 files/fr/archive/b2g_os/quickstart/index.html delete mode 100644 files/fr/archive/b2g_os/quickstart/votre_premier_application/index.html delete mode 100644 files/fr/archive/b2g_os/releases/1.0.1/index.html delete mode 100644 files/fr/archive/b2g_os/releases/1.1/index.html delete mode 100644 files/fr/archive/b2g_os/releases/2.0/index.html delete mode 100644 files/fr/archive/b2g_os/releases/2.1/index.html delete mode 100644 files/fr/archive/b2g_os/releases/2.2/index.html delete mode 100644 files/fr/archive/b2g_os/releases/2.5/index.html delete mode 100644 files/fr/archive/b2g_os/releases/index.html delete mode 100644 files/fr/archive/b2g_os/resources/index.html delete mode 100644 files/fr/archive/b2g_os/running_tests_on_firefox_os_for_developers/index.html delete mode 100644 files/fr/archive/b2g_os/samsung_nexus_s/index.html delete mode 100644 files/fr/archive/b2g_os/screencast_series_colon__app_basics_for_firefox_os/index.html delete mode 100644 files/fr/archive/b2g_os/securite/application_security/index.html delete mode 100644 files/fr/archive/b2g_os/securite/index.html delete mode 100644 files/fr/archive/b2g_os/securite/installing_and_updating_applications/index.html delete mode 100644 files/fr/archive/b2g_os/securite/security_model/index.html delete mode 100644 files/fr/archive/b2g_os/securite/system_security/index.html delete mode 100644 files/fr/archive/b2g_os/simulator/index.html delete mode 100644 files/fr/archive/b2g_os/simulator_vs_emulator_vs_device/index.html delete mode 100644 files/fr/archive/b2g_os/spark/index.html delete mode 100644 files/fr/archive/b2g_os/tips_and_tricks/faire_des_captures_ecran/index.html delete mode 100644 files/fr/archive/b2g_os/tips_and_tricks/modifier_le_fichier_hosts/index.html delete mode 100644 files/fr/archive/b2g_os/using_the_app_manager/index.html delete mode 100644 files/fr/archive/b2g_os/using_the_b2g_emulators/index.html delete mode 100644 files/fr/archive/b2g_os/web_telephony_api/index.html delete mode 100644 files/fr/archive/b2g_os/writing_apps_for_boot_to_gecko/index.html delete mode 100644 files/fr/archive/css3/index.html delete mode 100644 files/fr/archive/deviceproximity/index.html delete mode 100644 files/fr/archive/index.html delete mode 100644 files/fr/archive/marketplace/api/domapplicationsregistry/getinstalled/index.html delete mode 100644 files/fr/archive/marketplace/api/domapplicationsregistry/getself/index.html delete mode 100644 files/fr/archive/marketplace/api/domapplicationsregistry/index.html delete mode 100644 files/fr/archive/marketplace/api/domapplicationsregistry/install/index.html delete mode 100644 files/fr/archive/marketplace/api/index.html delete mode 100644 files/fr/archive/marketplace/index.html delete mode 100644 files/fr/archive/mdn/index.html delete mode 100644 files/fr/archive/meta_docs/index.html delete mode 100644 "files/fr/archive/misc_top_level/images,_tableaux_et_d\303\251calages_myst\303\251rieux/index.html" delete mode 100644 files/fr/archive/misc_top_level/index.html delete mode 100644 files/fr/archive/misc_top_level/monitoring_wifi_access_points/index.html delete mode 100644 files/fr/archive/misc_top_level/utilisation_de_data_islands_xml_dans_mozilla/index.html delete mode 100644 "files/fr/archive/misc_top_level/utilisation_des_pr\303\251f\303\251rences_de_contenu/index.html" delete mode 100644 files/fr/archive/mozilla/drag_and_drop/index.html delete mode 100644 files/fr/archive/mozilla/firefox/index.html delete mode 100644 "files/fr/archive/mozilla/firefox/les_\303\251tats_de_contenu_et_le_syst\303\250me_de_style/index.html" delete mode 100644 files/fr/archive/mozilla/firefox/soap_dans_les_navigateurs_gecko/index.html delete mode 100644 files/fr/archive/mozilla/firefox/utilisation_de_microformats/index.html delete mode 100644 files/fr/archive/mozilla/index.html delete mode 100644 "files/fr/archive/mozilla/nouveau_mod\303\250le_de_s\303\251curit\303\251_des_services_web/index.html" delete mode 100644 files/fr/archive/mozilla/persona/api_de_verification/index.html delete mode 100644 files/fr/archive/mozilla/persona/bootstrapping_persona/index.html delete mode 100644 files/fr/archive/mozilla/persona/branding/index.html delete mode 100644 files/fr/archive/mozilla/persona/browser_compatibility/index.html delete mode 100644 files/fr/archive/mozilla/persona/considerations_de_securite/index.html delete mode 100644 files/fr/archive/mozilla/persona/identity_provider_overview/index.html delete mode 100644 files/fr/archive/mozilla/persona/index.html delete mode 100644 files/fr/archive/mozilla/persona/internationalisation/index.html delete mode 100644 files/fr/archive/mozilla/persona/libraries_and_plugins/index.html delete mode 100644 files/fr/archive/mozilla/persona/pourquoi_persona/index.html delete mode 100644 files/fr/archive/mozilla/persona/quick_setup/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/ajouter_adresse_email_supplementaire_avec_persona/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/call_logout()_after_a_failed_login/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/permettre_utilisateurs_changer_adresse_email/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/problemes_integrer_protection_crsf/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/supporter_utilisateurs_sans_javascript/index.html delete mode 100644 files/fr/archive/mozilla/persona/the_implementor_s_guide/tester/index.html delete mode 100644 files/fr/archive/mozilla/persona/vue_densemble_du_protocole/index.html delete mode 100644 files/fr/archive/mozilla/when_to_use_ifdefs/index.html delete mode 100644 files/fr/archive/mozilla/xbl/index.html delete mode 100644 "files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/index.html" delete mode 100644 "files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/\303\251l\303\251ments/index.html" delete mode 100644 files/fr/archive/mozilla/xpinstall/index.html delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/codes_retourn\303\251s/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.macalias/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.windowsshortcut/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.adddirectory/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.addfile/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.installchrome/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.startsoftwareupdate/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/scripts_de_d\303\251clenchement_et_scripts_d'installation/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/windows_install/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/copy/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dircreate/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirgetparent/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirremove/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirrename/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/diskspaceavailable/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/execute/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/exists/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isdirectory/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isfile/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/macalias/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddate/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddatechanged/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/move/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/remove/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/rename/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/size/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsgetshortname/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsregisterserver/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsshortcut/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/adddirectory/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/addfile/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/alert/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/cancelinstall/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/confirm/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/deleteregisteredfile/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/execute/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/gestalt/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getcomponentfolder/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getfolder/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getlasterror/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinprofile/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinregistry/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/initinstall/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/loadresources/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/logcomment/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/patch/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/performinstall/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/refreshplugins/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/registerchrome/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/reseterror/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/setpackagefolder/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/propri\303\251t\303\251s/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installtrigger/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/compareto/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/init/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/tostring/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/propri\303\251t\303\251s/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/getstring/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/writestring/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/createkey/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletekey/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletevalue/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumkeys/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumvaluenames/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvalue/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluenumber/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluestring/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/iskeywritable/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/keyexists/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setrootkey/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvalue/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluenumber/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluestring/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/valueexists/index.html" delete mode 100644 "files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/winregvalue/index.html" delete mode 100644 files/fr/archive/mozilla/xul/attributs/acceltext/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/accesskey/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/align/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/allowevents/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/allownegativeassertions/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/buttondisabledaccept/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/checked/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/class/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/coalesceduplicatearcs/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/collapsed/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/command/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/container/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/containment/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/context/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/contextmenu/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/crop/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/datasources/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/datepicker.type/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/datepicker.value/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/dir/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/disabled/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/empty/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/equalsize/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/firstdayofweek/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/flags/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/flex/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/height/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/helpuri/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/hidden/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/hidechrome/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/hideseconds/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/id/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/image/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/increment/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/insertafter/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/insertbefore/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/instantapply/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/inverted/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/label/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/left/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/max/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/maxheight/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/maxwidth/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/menu/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/min/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/minheight/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/minwidth/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/mousethrough/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/name/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/noautofocus/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/observes/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/onchange/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/oncommand/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/onpaneload/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/onpopuphidden/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/onpopuphiding/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/onpopupshowing/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/onpopupshown/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/open/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/ordinal/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/orient/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/pack/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/pageincrement/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/persist/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/popup.left/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/popup.position/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/popup.top/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/popup/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/position/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/preference-editable/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/preference.name/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/preference.type/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/preference/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/prefpane.selected/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/prefpane.src/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/properties/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/querytype/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/readonly/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/ref/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/removeelement/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/rows/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/screenx/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/screeny/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/selected/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/seltype/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/sizemode/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/sortdirection/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/sortresource/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/sortresource2/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/src/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/statustext/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/style/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/suppressonselect/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/tabindex/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/template/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/timepicker.increment/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/timepicker.value/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/title/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/tooltip/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/tooltiptext/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/top/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/type/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/uri/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/value/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/wait-cursor/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/width/index.html delete mode 100644 files/fr/archive/mozilla/xul/attributs/windowtype/index.html delete mode 100644 files/fr/archive/mozilla/xul/box/index.html delete mode 100644 files/fr/archive/mozilla/xul/button/index.html delete mode 100644 "files/fr/archive/mozilla/xul/caract\303\250res_internationaux_dans_du_javascript_xul/index.html" delete mode 100644 files/fr/archive/mozilla/xul/checkbox/index.html delete mode 100644 files/fr/archive/mozilla/xul/command/index.html delete mode 100644 files/fr/archive/mozilla/xul/datepicker/index.html delete mode 100644 files/fr/archive/mozilla/xul/description/index.html delete mode 100644 files/fr/archive/mozilla/xul/dropmarker/index.html delete mode 100644 "files/fr/archive/mozilla/xul/faq_et_r\303\250gles_pour_les_accesskeys_en_xul/index.html" delete mode 100644 files/fr/archive/mozilla/xul/guide_des_popups/index.html delete mode 100644 files/fr/archive/mozilla/xul/guide_des_popups/ouverture_et_fermeture/index.html delete mode 100644 files/fr/archive/mozilla/xul/guide_des_popups/panels/index.html delete mode 100644 files/fr/archive/mozilla/xul/hbox/index.html delete mode 100644 "files/fr/archive/mozilla/xul/ic\303\264nes_de_fen\303\252tre/index.html" delete mode 100644 files/fr/archive/mozilla/xul/index.html delete mode 100644 "files/fr/archive/mozilla/xul/introduction_\303\240_xul/index.html" delete mode 100644 files/fr/archive/mozilla/xul/label/index.html delete mode 100644 "files/fr/archive/mozilla/xul/les_contr\303\264les_xul/index.html" delete mode 100644 files/fr/archive/mozilla/xul/les_joies_de_xul/index.html delete mode 100644 files/fr/archive/mozilla/xul/listbox/index.html delete mode 100644 files/fr/archive/mozilla/xul/listitem/index.html delete mode 100644 files/fr/archive/mozilla/xul/menu/index.html delete mode 100644 files/fr/archive/mozilla/xul/menubar/index.html delete mode 100644 files/fr/archive/mozilla/xul/menuitem/index.html delete mode 100644 files/fr/archive/mozilla/xul/menulist/index.html delete mode 100644 files/fr/archive/mozilla/xul/menupopup/index.html delete mode 100644 files/fr/archive/mozilla/xul/menuseparator/index.html delete mode 100644 files/fr/archive/mozilla/xul/modification_dynamique_d'interfaces_utilisateur_en_xul/index.html delete mode 100644 files/fr/archive/mozilla/xul/modifications_xul_pour_firefox_1.5/index.html delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/blur/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/click/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/decrease/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/decreasepage/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/docommand/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/focus/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/getelementsbyattribute/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/getrowcount/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/hasuservalue/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/hidepopup/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/increase/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/increasepage/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/moveto/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/openpopup/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/openpopupatscreen/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/reset/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/select/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/selectall/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/selectitem/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/selectitemrange/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/setselectionrange/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/showpane/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/showpopup/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/sizeto/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/stop/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/syncsessions/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/timedselect/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/m\303\251thodes/toggleitemselection/index.html" delete mode 100644 files/fr/archive/mozilla/xul/panel/index.html delete mode 100644 files/fr/archive/mozilla/xul/popup/index.html delete mode 100644 files/fr/archive/mozilla/xul/preference/index.html delete mode 100644 files/fr/archive/mozilla/xul/preferences/index.html delete mode 100644 files/fr/archive/mozilla/xul/prefpane/index.html delete mode 100644 files/fr/archive/mozilla/xul/prefwindow/index.html delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessible/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessibletype/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accesskey/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/align/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/allowevents/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/amindicator/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/boxobject/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/builder/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/classname/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/collapsed/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/contextmenu/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/controllers/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/crop/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/currentitem/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/database/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datasources/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/date/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dateleadingzero/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.open/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.value/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datevalue/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/defaultvalue/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dir/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/disabled/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/flex/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/height/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hidden/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hideseconds/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hour/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hourleadingzero/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/id/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/image/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/increment/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/inverted/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/is24hourclock/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ispm/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/label/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/left/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/listboxobject/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/locked/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/max/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxheight/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxwidth/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/menu/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/min/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minheight/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minute/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minuteleadingzero/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minwidth/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/month/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/monthleadingzero/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/name/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/observes/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/open/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ordinal/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/orient/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pack/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pageincrement/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/persist/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pmindicator/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/popupboxobject/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/position/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/preference.preferences/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/readonly/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ref/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/resource/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/second/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/secondleadingzero/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selected/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selectedindex/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selecteditem/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/seltype/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/state/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/statustext/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/style/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/suppressonselect/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tabindex/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/timepicker.value/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltip/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltiptext/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/top/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/type/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/value/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/width/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/year/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/propri\303\251t\303\251s/yearleadingzero/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/recommandations_accessibilit\303\251_pour_xul/index.html" delete mode 100644 files/fr/archive/mozilla/xul/richlistbox/index.html delete mode 100644 files/fr/archive/mozilla/xul/richlistitem/index.html delete mode 100644 "files/fr/archive/mozilla/xul/r\303\251f\303\251rence_xul/index.html" delete mode 100644 files/fr/archive/mozilla/xul/scale/index.html delete mode 100644 files/fr/archive/mozilla/xul/spacer/index.html delete mode 100644 files/fr/archive/mozilla/xul/spinbuttons/index.html delete mode 100644 files/fr/archive/mozilla/xul/stack/index.html delete mode 100644 files/fr/archive/mozilla/xul/tabpanels/index.html delete mode 100644 files/fr/archive/mozilla/xul/textbox/index.html delete mode 100644 files/fr/archive/mozilla/xul/timepicker/index.html delete mode 100644 "files/fr/archive/mozilla/xul/toolbars/cr\303\251ation_de_boutons_de_barre_d'outils/index.html" delete mode 100644 files/fr/archive/mozilla/xul/toolbars/index.html delete mode 100644 files/fr/archive/mozilla/xul/toolbox/index.html delete mode 100644 files/fr/archive/mozilla/xul/tooltip/index.html delete mode 100644 files/fr/archive/mozilla/xul/tree/index.html delete mode 100644 files/fr/archive/mozilla/xul/treecell/index.html delete mode 100644 files/fr/archive/mozilla/xul/treechildren/index.html delete mode 100644 files/fr/archive/mozilla/xul/treecol/index.html delete mode 100644 files/fr/archive/mozilla/xul/treecols/index.html delete mode 100644 files/fr/archive/mozilla/xul/treeitem/index.html delete mode 100644 files/fr/archive/mozilla/xul/treerow/index.html delete mode 100644 files/fr/archive/mozilla/xul/treeseparator/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/ajout_d'\303\251l\303\251ments_html/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaire_d_\303\251v\303\250nements/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaires_d'\303\251v\303\250nements/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_m\303\251thodes/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_propri\303\251t\303\251s/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_boutons/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_feuilles_de_style/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_libell\303\251s_et_des_images/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_plus_d'\303\251l\303\251ments/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/arbres/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/arbres_et_gabarits/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/assistant_avan\303\247\303\251/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/autres_caract\303\251ristiques_des_arbres/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_d\303\251filement/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_menus_simples/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/bo\303\256te_de_dialogue_de_fichier/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/broadcasters_et_observateurs/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/cadres_de_contenu/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/caract\303\251ristiques_d'une_fen\303\252tre/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/commandes/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/contenu_anonyme/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_assistant/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_programme_d'installation/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_des_bo\303\256tes_de_dialogue/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_un_th\303\250me/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_une_fen\303\252tre/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/document_object_model/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/donn\303\251es_persistantes/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_le_mod\303\250le_de_bo\303\256te/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_les_vues_d'arbres/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/exemple_xbl/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/exemples_xpcom/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/focus_et_selection/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/fonctions_additionnelles_d'installation/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/gabarits/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/grilles/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_d'attributs_xbl/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_xbl/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/indicateurs_de_progression/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/interfaces_xpcom/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/introduction/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_rdf/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_xbl/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/l'url_chrome/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/la_structure_xul/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/le_mod\303\250le_de_bo\303\256te/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/les_bo\303\256tes_de_groupe/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/les_champs_de_saisie/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_de_listes/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_num\303\251riques/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_de_propri\303\251t\303\251s/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_manifest/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes_des_arbres/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/les_scripts_d'installation/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/localisation/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/manipulation_de_listes/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/menus_d\303\251filants/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/menus_surgissants/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/mise_\303\240_jour_de_commandes/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/modification_d'une_interface_xul/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/modification_du_th\303\250me_par_d\303\251faut/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/onglets/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/overlays_inter-paquetage/index.html delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/piles_et_paquets/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_caract\303\251ristiques_sur_les_boutons/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_fonctionnalit\303\251s_de_menu/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/plus_sur_les_gestionnaires_d'\303\251v\303\250nements/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_dans_une_pile/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_des_\303\251l\303\251ments/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/raccourcis_clavier/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/r\303\250gles_avan\303\247\303\251es/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/sources_de_donn\303\251es_rdf/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/styler_un_arbre/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251lection_dans_les_arbres/index.html" delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251parateurs/index.html" delete mode 100644 files/fr/archive/mozilla/xul/tutoriel_xul/utilisation_des_spacers/index.html delete mode 100644 "files/fr/archive/mozilla/xul/tutoriel_xul/vues_d'arbre_personnalis\303\251es/index.html" delete mode 100644 files/fr/archive/mozilla/xul/utilisation_de_nsixulappinfo/index.html delete mode 100644 files/fr/archive/mozilla/xul/utilisation_de_plusieurs_dtd/index.html delete mode 100644 files/fr/archive/mozilla/xul/utilisation_du_correcteur_orthographique_dans_xul/index.html delete mode 100644 files/fr/archive/mozilla/xul/vbox/index.html delete mode 100644 files/fr/archive/mozilla/xul/vulgarisation_xul/index.html delete mode 100644 files/fr/archive/mozilla/xul/vulgarisation_xul/introduction/index.html delete mode 100644 files/fr/archive/mozilla/xul/vulgarisation_xul/l'essentiel_d'une_extension/index.html delete mode 100644 files/fr/archive/mozilla/xul/vulgarisation_xul/premiers_pas_avec_les_extensions_firefox/index.html delete mode 100644 files/fr/archive/mozilla/xul/window/index.html delete mode 100644 files/fr/archive/mozilla/xulrunner/astuces_xulrunner/index.html delete mode 100644 files/fr/archive/mozilla/xulrunner/ce_qu'offre_xulrunner/index.html delete mode 100644 "files/fr/archive/mozilla/xulrunner/d\303\251ploiement_de_xulrunner_1.8/index.html" delete mode 100644 files/fr/archive/mozilla/xulrunner/empaqueter_une_application_xul/index.html delete mode 100644 files/fr/archive/mozilla/xulrunner/faq_de_xulrunner/index.html delete mode 100644 "files/fr/archive/mozilla/xulrunner/floril\303\250ge_des_applications_xulrunner/index.html" delete mode 100644 files/fr/archive/mozilla/xulrunner/index.html delete mode 100644 files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.8.0.4/index.html delete mode 100644 files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.9/index.html delete mode 100644 files/fr/archive/mozilla/xulrunner/xulrunner_anciennes_versions/index.html delete mode 100644 files/fr/archive/plugins/reference/index.html delete mode 100644 files/fr/archive/rss/autres_ressources/index.html delete mode 100644 "files/fr/archive/rss/entit\303\251s/index.html" delete mode 100644 files/fr/archive/rss/index.html delete mode 100644 files/fr/archive/rss/premiers_pas/fonctionnement_de_rss/index.html delete mode 100644 files/fr/archive/rss/premiers_pas/index.html delete mode 100644 files/fr/archive/rss/premiers_pas/pourquoi_utiliser_rss/index.html delete mode 100644 "files/fr/archive/rss/premiers_pas/pr\303\251sentation_de_rss/index.html" delete mode 100644 files/fr/archive/rss/premiers_pas/syndication/index.html delete mode 100644 files/fr/archive/rss/version/index.html delete mode 100644 "files/fr/archive/rss/\303\251l\303\251ments/index.html" delete mode 100644 files/fr/archive/security/index.html delete mode 100644 "files/fr/archive/standards_du_web/choisir_de_se_conformer_aux_standards_plut\303\264t_qu_aux_pratiques_propri\303\251taires/index.html" delete mode 100644 "files/fr/archive/standards_du_web/communaut\303\251/index.html" delete mode 100644 files/fr/archive/standards_du_web/index.html delete mode 100644 "files/fr/archive/standards_du_web/le_mod\303\250le_\303\251conomique_des_standards_web/index.html" delete mode 100644 files/fr/archive/standards_du_web/le_sniffing_de_doctype_dans_mozilla/index.html delete mode 100644 "files/fr/archive/standards_du_web/probl\303\250mes_soulev\303\251s_par_le_pseudo_\303\251l\303\251ment_hover/index.html" delete mode 100644 files/fr/archive/standards_du_web/rdf_en_cinquante_mots/index.html delete mode 100644 files/fr/archive/standards_du_web/utiliser_des_titres_corrects_avec_des_feuilles_de_styles_externes/index.html delete mode 100644 files/fr/archive/themes/create_your_own_firefox_background_theme/index.html delete mode 100644 files/fr/archive/themes/creer_un_theme/index.html delete mode 100644 files/fr/archive/themes/index.html delete mode 100644 files/fr/archive/web/css/display-inside/index.html delete mode 100644 files/fr/archive/web/css/display-outside/index.html delete mode 100644 files/fr/archive/web/css/index.html delete mode 100644 files/fr/archive/web/index.html delete mode 100644 files/fr/archive/web/iterator/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/activexobject/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/at-cc-on/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/at-if/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/at-set/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/date.getvardate/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/debuggerenabled/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackcompleted/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackstarting/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationcompleted/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationstarting/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/msupdateasynccallbackrelation/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/setnonusercodeexceptions/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/write/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/debug/writeln/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/enumerator/atend/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/enumerator/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/enumerator/item/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/enumerator/movefirst/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/enumerator/movenext/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/error.description/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/error.number/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/error.stacktracelimit/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/getobject/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/scriptengine/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/scriptenginebuildversion/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/scriptenginemajorversion/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/scriptengineminorversion/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/vbarray/dimensions/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/vbarray/getitem/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/vbarray/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/vbarray/lbound/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/vbarray/toarray/index.html delete mode 100644 files/fr/archive/web/javascript/extensions_microsoft/vbarray/ubound/index.html delete mode 100644 "files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique/index.html" delete mode 100644 "files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique_statement/index.html" delete mode 100644 files/fr/archive/web/javascript/handler.enumerate/index.html delete mode 100644 files/fr/archive/web/javascript/index.html delete mode 100644 files/fr/archive/web/javascript/reflect.enumerate/index.html delete mode 100644 files/fr/archive/web/javascript/support_ecmascript_next_par_mozilla/index.html delete mode 100644 files/fr/archive/web/xforms/autres_ressources/index.html delete mode 100644 files/fr/archive/web/xforms/index.html delete mode 100644 "files/fr/archive/web/xforms/pr\303\251f\303\251rences_utilisateur/index.html" delete mode 100644 "files/fr/archive/web/xforms/r\303\251f\303\251rence_api_xforms/index.html" delete mode 100644 "files/fr/archive/web/xforms/r\303\251solution_des_probl\303\250mes_avec_xforms/index.html" delete mode 100644 "files/fr/archive/web/xforms/\303\251l\303\251ment_interface_utilisateur_xforms/index.html" delete mode 100644 "files/fr/assurance_qualit\303\251/tests_en_charge/index.html" delete mode 100644 files/fr/bundles/index.html delete mode 100644 files/fr/changements_dans_xmlhttprequest_pour_gecko_1.8/index.html delete mode 100644 files/fr/comment_integrer_le_moteur_javascript/index.html delete mode 100644 files/fr/compare-locales/index.html delete mode 100644 files/fr/components.utils.evalinsandbox/index.html delete mode 100644 files/fr/components.utils.import/index.html delete mode 100644 files/fr/components.utils.reporterror/index.html delete mode 100644 files/fr/components.utils/index.html delete mode 100644 files/fr/comportement_du_mode_quirks_de_mozilla/index.html delete mode 100644 files/fr/console_d'erreurs/index.html delete mode 100644 "files/fr/cr\303\251ation_d'expression_r\303\251guli\303\250res_pour_les_g\303\251n\303\251rateurs_de_micror\303\251sum\303\251s/index.html" delete mode 100644 "files/fr/cr\303\251ation_d'un_g\303\251n\303\251rateur_de_micror\303\251sum\303\251/index.html" delete mode 100644 "files/fr/cr\303\251ation_d'un_pack_de_langue/index.html" delete mode 100644 "files/fr/cr\303\251ation_d'un_patch/index.html" delete mode 100644 "files/fr/cr\303\251ation_de_plugins_mozsearch/index.html" delete mode 100644 "files/fr/cr\303\251er_un_th\303\250me_pour_firefox_premiers_pas/index.html" delete mode 100644 "files/fr/css/premiers_pas/donn\303\251es_xml/index.html" delete mode 100644 files/fr/css/premiers_pas/interfaces_utilisateur_xul/index.html delete mode 100644 files/fr/css/premiers_pas/liaisons_xbl/index.html delete mode 100644 "files/fr/d\303\251veloppement_web/design_web_responsive/index.html" delete mode 100644 files/fr/e4x/index.html delete mode 100644 files/fr/extensions/bootcamp_tutorial/index.html delete mode 100644 "files/fr/extensions/communaut\303\251/index.html" delete mode 100644 "files/fr/faq_de_mozilla_pour_d\303\251veloppeurs_web/index.html" delete mode 100644 files/fr/feed_content_access_api/index.html delete mode 100644 files/fr/fuel/annotations/index.html delete mode 100644 files/fr/fuel/bookmark/index.html delete mode 100644 files/fr/fuel/bookmarkfolder/index.html delete mode 100644 files/fr/fuel/browsertab/index.html delete mode 100644 files/fr/fuel/console/index.html delete mode 100644 files/fr/fuel/eventitem/index.html delete mode 100644 files/fr/fuel/eventlistener/index.html delete mode 100644 files/fr/fuel/events/index.html delete mode 100644 files/fr/fuel/extensions/index.html delete mode 100644 files/fr/fuel/index.html delete mode 100644 files/fr/fuel/preference/index.html delete mode 100644 files/fr/fuel/preferencebranch/index.html delete mode 100644 files/fr/fuel/sessionstorage/index.html delete mode 100644 files/fr/fuel/window/devicelight/index.html delete mode 100644 files/fr/fuel/window/index.html delete mode 100644 files/fr/git/index.html delete mode 100644 files/fr/guide_de_migration_vers_places/index.html delete mode 100644 "files/fr/g\303\251n\303\251ration_de_guid/index.html" delete mode 100644 files/fr/how_to_pass_an_xpcom_object_to_a_new_window/index.html delete mode 100644 "files/fr/images_png_anim\303\251es/index.html" delete mode 100644 files/fr/installation_de_mercurial/index.html delete mode 100644 "files/fr/interfaces/\303\240_propos_des_interfaces_gel\303\251es/index.html" delete mode 100644 "files/fr/interfaces/\303\240_propos_des_interfaces_scriptables/index.html" delete mode 100644 files/fr/introduction_au_shell_javascript/index.html delete mode 100644 "files/fr/introduction_\303\240_la_cryptographie_\303\240_clef_publique/index.html" delete mode 100644 "files/fr/introduction_\303\240_ssl/index.html" delete mode 100644 files/fr/ipdl/index.html delete mode 100644 files/fr/ipdl/tutorial/index.html delete mode 100644 files/fr/javascript_guide/traitement_de_xml_avec_e4x/index.html delete mode 100644 files/fr/javaxpcom/index.html delete mode 100644 files/fr/l'objet_components/index.html delete mode 100644 files/fr/les_bases_de_mercurial/index.html delete mode 100644 files/fr/les_bases_des_services_web/index.html delete mode 100644 "files/fr/les_cha\303\256nes_useragent_de_gecko/index.html" delete mode 100644 files/fr/localisation_avec_mercurial/index.html delete mode 100644 files/fr/localisation_d'une_extension/index.html delete mode 100644 files/fr/localisation_des_descriptions_d'extensions/index.html delete mode 100644 "files/fr/localisation_des_m\303\251tadonn\303\251es_extension_sur_addons.mozilla.org/index.html" delete mode 100644 files/fr/localisation_et_pluriels/index.html delete mode 100644 "files/fr/manuel_de_compatibilit\303\251_gecko/index.html" delete mode 100644 files/fr/mccoy/index.html delete mode 100644 files/fr/mdn/contribute/howto/lier_un_compte_github/index.html delete mode 100644 files/fr/mdn/contribute/persona_sign-in/index.html delete mode 100644 "files/fr/mdn/user_guide/r\303\251daction/index.html" delete mode 100644 files/fr/mercurial/index.html delete mode 100644 files/fr/midas/index.html delete mode 100644 files/fr/midas/security_preferences/index.html delete mode 100644 files/fr/migration_applications_internet_explorer_vers_mozilla/index.html delete mode 100644 "files/fr/mod\303\250le_de_s\303\251curit\303\251_mozilla_des_services_web/index.html" delete mode 100644 files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html delete mode 100644 files/fr/mozilla/add-ons/add-on_debugger/index.html delete mode 100644 "files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" delete mode 100644 "files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" delete mode 100644 "files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" delete mode 100644 files/fr/mozilla/add-ons/bootstrapped_extensions/index.html delete mode 100644 files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html delete mode 100644 files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html delete mode 100644 files/fr/mozilla/add-ons/install_manifests/index.html delete mode 100644 files/fr/mozilla/add-ons/nous_contacter/index.html delete mode 100644 files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html delete mode 100644 files/fr/mozilla/add-ons/plugins/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tools/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tools/jpm/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html delete mode 100644 files/fr/mozilla/add-ons/thunderbird/index.html delete mode 100644 "files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" delete mode 100644 "files/fr/mozilla/add-ons/th\303\250mes/index.html" delete mode 100644 "files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" delete mode 100644 files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html delete mode 100644 files/fr/mozilla/bugzilla/index.html delete mode 100644 files/fr/mozilla/command_line_options/index.html delete mode 100644 files/fr/mozilla/css/index.html delete mode 100644 files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html delete mode 100644 files/fr/mozilla/enregistrement_chrome/index.html delete mode 100644 files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html delete mode 100644 files/fr/mozilla/firefox/deploiement_entreprise/index.html delete mode 100644 files/fr/mozilla/firefox/developer_edition/index.html delete mode 100644 files/fr/mozilla/firefox/developer_edition/reverting/index.html delete mode 100644 files/fr/mozilla/firefox/firefox_esr/index.html delete mode 100644 files/fr/mozilla/firefox/headless_mode/index.html delete mode 100644 files/fr/mozilla/firefox/le_protocole_about/index.html delete mode 100644 files/fr/mozilla/firefox/multiprocessus_firefox/index.html delete mode 100644 files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html delete mode 100644 files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html delete mode 100644 files/fr/mozilla/firefox/privacy/index.html delete mode 100644 files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html delete mode 100644 files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html delete mode 100644 files/fr/mozilla/firefox/versions/14/index.html delete mode 100644 files/fr/mozilla/firefox_pour_android/index.html delete mode 100644 files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/index.html delete mode 100644 files/fr/mozilla/gecko/faq/index.html delete mode 100644 files/fr/mozilla/gecko/gecko_embedding_basics/index.html delete mode 100644 files/fr/mozilla/gecko/index.html delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" delete mode 100644 files/fr/mozilla/gecko/sdk_gecko/index.html delete mode 100644 files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html delete mode 100644 files/fr/mozilla/instantbird/index.html delete mode 100644 files/fr/mozilla/internal_css_attributes/index.html delete mode 100644 files/fr/mozilla/javascript_astuces/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/services.jsm/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html delete mode 100644 files/fr/mozilla/localization/index.html delete mode 100644 files/fr/mozilla/localization/index/index.html delete mode 100644 files/fr/mozilla/localization/l10n_style_guide/index.html delete mode 100644 files/fr/mozilla/localization/localiser_avec_pontoon/index.html delete mode 100644 files/fr/mozilla/localization/localization_notes/index.html delete mode 100644 files/fr/mozilla/localization/localizing_with_verbatim/index.html delete mode 100644 files/fr/mozilla/marketplace/index.html delete mode 100644 files/fr/mozilla/marketplace/index/index.html delete mode 100644 files/fr/mozilla/marketplace/monetisation/index.html delete mode 100644 files/fr/mozilla/marketplace/options/creating_a_store/index.html delete mode 100644 files/fr/mozilla/marketplace/options/index.html delete mode 100644 files/fr/mozilla/marketplace/options/introduction/index.html delete mode 100644 files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html delete mode 100644 files/fr/mozilla/marketplace/options/packaged_apps/index.html delete mode 100644 files/fr/mozilla/marketplace/options/self_publishing/index.html delete mode 100644 files/fr/mozilla/marketplace/publication/index.html delete mode 100644 files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html delete mode 100644 files/fr/mozilla/marketplace/publication/updating_apps/index.html delete mode 100644 files/fr/mozilla/marketplace/publish/index.html delete mode 100644 files/fr/mozilla/marketplace/publishing/submit/index.html delete mode 100644 files/fr/mozilla/mathml_project/index.html delete mode 100644 files/fr/mozilla/mathml_project/mathml_torture_test/index.html delete mode 100644 files/fr/mozilla/mobile/balise_meta_viewport/index.html delete mode 100644 files/fr/mozilla/mobile/index.html delete mode 100644 files/fr/mozilla/mode_presque_standard_de_gecko/index.html delete mode 100644 files/fr/mozilla/participer_au_projet_mozilla/index.html delete mode 100644 files/fr/mozilla/preferences/index.html delete mode 100644 files/fr/mozilla/projects/emscripten/index.html delete mode 100644 files/fr/mozilla/projects/index.html delete mode 100644 files/fr/mozilla/projects/rhino/examples/index.html delete mode 100644 files/fr/mozilla/projects/rhino/index.html delete mode 100644 files/fr/mozilla/projects/talos/index.html delete mode 100644 files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html delete mode 100644 files/fr/mozilla/rejoindre/index.html delete mode 100644 files/fr/mozilla/rust/index.html delete mode 100644 files/fr/mozilla/security/index.html delete mode 100644 files/fr/mozilla/tech/index.html delete mode 100644 files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/index.html delete mode 100644 files/fr/mozilla/tech/xpidl/index.html delete mode 100644 files/fr/mozilla/testing/asan_nightly_project/index.html delete mode 100644 files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html delete mode 100644 files/fr/mozilla/testing/index.html delete mode 100644 files/fr/mozilla/thunderbird/account_examples/index.html delete mode 100644 files/fr/mozilla/thunderbird/autoconfiguration/index.html delete mode 100644 files/fr/mozilla/thunderbird/index.html delete mode 100644 files/fr/mozilla/thunderbird/index/index.html delete mode 100644 files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html delete mode 100644 files/fr/mozilla/working_with_windows_in_chrome_code/index.html delete mode 100644 files/fr/new_compatibility_tables_beta/index.html delete mode 100644 files/fr/np_initialize/index.html delete mode 100644 files/fr/np_shutdown/index.html delete mode 100644 files/fr/npp/index.html delete mode 100644 files/fr/npp_new/index.html delete mode 100644 files/fr/npp_setwindow/index.html delete mode 100644 files/fr/nsiconsoleservice/index.html delete mode 100644 files/fr/nsifeed/index.html delete mode 100644 files/fr/nsifeedcontainer/index.html delete mode 100644 files/fr/nsifeedelementbase/index.html delete mode 100644 files/fr/nsifeedentry/index.html delete mode 100644 files/fr/nsifeedgenerator/index.html delete mode 100644 files/fr/nsifeedperson/index.html delete mode 100644 files/fr/nsifeedprocessor/index.html delete mode 100644 files/fr/nsifeedprogresslistener/index.html delete mode 100644 files/fr/nsifeedresult/index.html delete mode 100644 files/fr/nsifeedresultlistener/index.html delete mode 100644 files/fr/nsifeedtextconstruct/index.html delete mode 100644 files/fr/nsipromptservice/index.html delete mode 100644 files/fr/nsiscriptableunescapehtml/index.html delete mode 100644 files/fr/nsisessionstore/index.html delete mode 100644 files/fr/nspr/about_nspr/index.html delete mode 100644 files/fr/nspr/index.html delete mode 100644 files/fr/outils/ardoise/index.html delete mode 100644 "files/fr/outils/d\303\251bogueur/param\303\250tres/index.html" delete mode 100644 files/fr/outils/webide/diagnostic/index.html delete mode 100644 files/fr/outils/webide/index.html delete mode 100644 files/fr/outils/webide/mise_en_place_des_environnements/index.html delete mode 100644 files/fr/outils/webide/monitor/index.html delete mode 100644 files/fr/outils/webide/opening_webide/index.html delete mode 100644 files/fr/outils/webide/the_runtime_menu/index.html delete mode 100644 files/fr/outils/webide/working_with_cordova_apps_in_webide/index.html delete mode 100644 "files/fr/outils_d'\303\251dition_respectueux_des_standards/index.html" delete mode 100644 files/fr/performance/about_colon_memory/index.html delete mode 100644 files/fr/performance/index.html delete mode 100644 files/fr/performance/profiling_with_the_built-in_profiler/index.html delete mode 100644 files/fr/performance/scroll-linked_effects/index.html delete mode 100644 files/fr/performance/signaler_un_probleme_de_performances/index.html delete mode 100644 "files/fr/places/acc\303\250s_aux_marque-pages/index.html" delete mode 100644 files/fr/places/index.html delete mode 100644 "files/fr/places/syst\303\250me_de_requ\303\252tes/index.html" delete mode 100644 files/fr/plug-n-hack/index.html delete mode 100644 files/fr/plug-n-hack/plug-n-hack_phase1/index.html delete mode 100644 files/fr/plug-n-hack/plug-n-hack_phase2/index.html delete mode 100644 files/fr/plug-n-hack/plug-n-hack_tools_supported/index.html delete mode 100644 files/fr/prism/index.html delete mode 100644 files/fr/profile_manager/index.html delete mode 100644 "files/fr/pr\303\251alables_\303\240_la_localisation/index.html" delete mode 100644 files/fr/pyxpcom/index.html delete mode 100644 files/fr/qa/index.html delete mode 100644 files/fr/qa/triaging_bugs_for_firefox/index.html delete mode 100644 files/fr/rapports_de_plantage/index.html delete mode 100644 files/fr/rdf/index.html delete mode 100644 "files/fr/recommandations_pour_l'\303\251criture_d'un_bug/index.html" delete mode 100644 "files/fr/r\303\251f\303\251rence_de_jsapi/index.html" delete mode 100644 "files/fr/r\303\251f\303\251rence_de_jsapi/js_callfunction/index.html" delete mode 100644 files/fr/sandbox/index.html delete mode 100644 files/fr/sax/index.html delete mode 100644 "files/fr/services_web_xml/acc\303\251der_\303\240_des_services_web_avec_mozilla_en_utilisant_un_proxy_wsdl/index.html" delete mode 100644 files/fr/spidermonkey/build_documentation/index.html delete mode 100644 files/fr/spidermonkey/index.html delete mode 100644 files/fr/spidermonkey/index/index.html delete mode 100644 files/fr/storage/index.html delete mode 100644 "files/fr/syst\303\250me_de_pr\303\251f\303\251rences/index.html" delete mode 100644 files/fr/theme_packaging/index.html delete mode 100644 files/fr/utilisation_de_code_mozilla_dans_d'autres_projets/index.html delete mode 100644 files/fr/utilisation_de_modules_de_code_javascript/index.html delete mode 100644 files/fr/venkman/index.html delete mode 100644 files/fr/web/accessibility/at-apis/at-spi/index.html delete mode 100644 files/fr/web/accessibility/at-apis/at-spi/interfaces_at-spi_prises_en_charge/index.html delete mode 100644 files/fr/web/accessibility/at-apis/gecko/index.html delete mode 100644 files/fr/web/accessibility/at-apis/gecko/roles/index.html delete mode 100644 files/fr/web/accessibility/at-apis/gecko/roles/role_alert/index.html delete mode 100644 files/fr/web/accessibility/at-apis/gecko/roles/role_password_text/index.html delete mode 100644 files/fr/web/accessibility/at-apis/index.html delete mode 100644 files/fr/web/api/domapplicationsmanager/getall/index.html delete mode 100644 files/fr/web/api/domapplicationsmanager/index.html delete mode 100644 files/fr/web/api/navigator/id/index.html delete mode 100644 files/fr/web/api/navigator/mozpower/index.html delete mode 100644 files/fr/web/api/navigator/moztcpsocket/index.html delete mode 100644 files/fr/web/api/powermanager/index.html delete mode 100644 files/fr/web/api/tcp_socket_api/index.html delete mode 100644 files/fr/web/api/tcpsocket/index.html delete mode 100644 files/fr/web/api/wifimanager/associate/index.html delete mode 100644 files/fr/web/api/wifimanager/connection/index.html delete mode 100644 files/fr/web/api/wifimanager/connectioninformation/index.html delete mode 100644 files/fr/web/api/wifimanager/enabled/index.html delete mode 100644 files/fr/web/api/wifimanager/forget/index.html delete mode 100644 files/fr/web/api/wifimanager/getknownnetworks/index.html delete mode 100644 files/fr/web/api/wifimanager/getnetworks/index.html delete mode 100644 files/fr/web/api/wifimanager/index.html delete mode 100644 files/fr/web/api/wifimanager/macaddress/index.html delete mode 100644 files/fr/web/api/wifimanager/onconnectioninfoupdate/index.html delete mode 100644 files/fr/web/api/wifimanager/ondisabled/index.html delete mode 100644 files/fr/web/api/wifimanager/onenabled/index.html delete mode 100644 files/fr/web/api/wifimanager/onstatuschange/index.html delete mode 100644 files/fr/web/api/wifimanager/setpowersavingmode/index.html delete mode 100644 files/fr/web/api/wifimanager/setstaticipmode/index.html delete mode 100644 files/fr/web/api/wifimanager/wps/index.html delete mode 100644 files/fr/web/api/window/importdialog/index.html delete mode 100644 files/fr/web/apps/design/building_blocks/buton/index.html delete mode 100644 files/fr/web/apps/design/building_blocks/confirmation/index.html delete mode 100644 files/fr/web/apps/design/building_blocks/filtre/index.html delete mode 100644 files/fr/web/apps/design/building_blocks/index.html delete mode 100644 files/fr/web/apps/design/building_blocks/menu_action/index.html delete mode 100644 files/fr/web/apps/design/building_blocks/zone_saisie/index.html delete mode 100644 files/fr/web/css/-moz-binding/index.html delete mode 100644 files/fr/web/css/-moz-border-bottom-colors/index.html delete mode 100644 files/fr/web/css/-moz-border-left-colors/index.html delete mode 100644 files/fr/web/css/-moz-border-right-colors/index.html delete mode 100644 files/fr/web/css/-moz-border-top-colors/index.html delete mode 100644 files/fr/web/css/-moz-stack-sizing/index.html delete mode 100644 files/fr/web/css/-moz-text-blink/index.html delete mode 100644 files/fr/web/css/-moz-window-shadow/index.html delete mode 100644 files/fr/web/css/-ms-accelerator/index.html delete mode 100644 files/fr/web/css/-ms-block-progression/index.html delete mode 100644 files/fr/web/css/-ms-content-zoom-chaining/index.html delete mode 100644 files/fr/web/css/-ms-content-zoom-limit-max/index.html delete mode 100644 files/fr/web/css/-ms-content-zoom-limit-min/index.html delete mode 100644 files/fr/web/css/-ms-content-zoom-limit/index.html delete mode 100644 files/fr/web/css/-ms-content-zoom-snap-points/index.html delete mode 100644 files/fr/web/css/-ms-content-zoom-snap-type/index.html delete mode 100644 files/fr/web/css/-ms-content-zoom-snap/index.html delete mode 100644 files/fr/web/css/-ms-content-zooming/index.html delete mode 100644 files/fr/web/css/-ms-filter/index.html delete mode 100644 files/fr/web/css/-ms-flow-from/index.html delete mode 100644 files/fr/web/css/-ms-flow-into/index.html delete mode 100644 files/fr/web/css/-ms-high-contrast-adjust/index.html delete mode 100644 files/fr/web/css/-ms-hyphenate-limit-chars/index.html delete mode 100644 files/fr/web/css/-ms-hyphenate-limit-lines/index.html delete mode 100644 files/fr/web/css/-ms-hyphenate-limit-zone/index.html delete mode 100644 files/fr/web/css/-ms-ime-align/index.html delete mode 100644 files/fr/web/css/-ms-overflow-style/index.html delete mode 100644 files/fr/web/css/-ms-scroll-chaining/index.html delete mode 100644 files/fr/web/css/-ms-scroll-limit-x-max/index.html delete mode 100644 files/fr/web/css/-ms-scroll-limit-x-min/index.html delete mode 100644 files/fr/web/css/-ms-scroll-limit-y-max/index.html delete mode 100644 files/fr/web/css/-ms-scroll-limit-y-min/index.html delete mode 100644 files/fr/web/css/-ms-scroll-limit/index.html delete mode 100644 files/fr/web/css/-ms-scroll-rails/index.html delete mode 100644 files/fr/web/css/-ms-scroll-snap-points-x/index.html delete mode 100644 files/fr/web/css/-ms-scroll-snap-points-y/index.html delete mode 100644 files/fr/web/css/-ms-scroll-snap-x/index.html delete mode 100644 files/fr/web/css/-ms-scroll-snap-y/index.html delete mode 100644 files/fr/web/css/-ms-scroll-translation/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-3dlight-color/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-arrow-color/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-base-color/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-darkshadow-color/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-face-color/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-highlight-color/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-shadow-color/index.html delete mode 100644 files/fr/web/css/-ms-scrollbar-track-color/index.html delete mode 100644 files/fr/web/css/-ms-text-autospace/index.html delete mode 100644 files/fr/web/css/-ms-touch-select/index.html delete mode 100644 files/fr/web/css/-ms-wrap-flow/index.html delete mode 100644 files/fr/web/css/-ms-wrap-margin/index.html delete mode 100644 files/fr/web/css/-ms-wrap-through/index.html delete mode 100644 files/fr/web/css/@media/-moz-mac-graphite-theme/index.html delete mode 100644 files/fr/web/css/@media/-moz-maemo-classic/index.html delete mode 100644 files/fr/web/css/@media/-moz-os-version/index.html delete mode 100644 files/fr/web/css/@media/-moz-scrollbar-end-backward/index.html delete mode 100644 files/fr/web/css/@media/-moz-scrollbar-end-forward/index.html delete mode 100644 files/fr/web/css/@media/-moz-scrollbar-start-backward/index.html delete mode 100644 files/fr/web/css/@media/-moz-scrollbar-start-forward/index.html delete mode 100644 files/fr/web/css/@media/-moz-scrollbar-thumb-proportional/index.html delete mode 100644 files/fr/web/css/@media/-moz-touch-enabled/index.html delete mode 100644 files/fr/web/css/@media/-moz-windows-accent-color-in-titlebar/index.html delete mode 100644 files/fr/web/css/@media/-moz-windows-classic/index.html delete mode 100644 files/fr/web/css/@media/-moz-windows-compositor/index.html delete mode 100644 files/fr/web/css/@media/-moz-windows-default-theme/index.html delete mode 100644 files/fr/web/css/@media/-moz-windows-glass/index.html delete mode 100644 files/fr/web/css/@media/-moz-windows-theme/index.html delete mode 100644 files/fr/web/css/_colon_-moz-full-screen-ancestor/index.html delete mode 100644 files/fr/web/css/_colon_-moz-lwtheme-brighttext/index.html delete mode 100644 files/fr/web/css/_colon_-moz-lwtheme-darktext/index.html delete mode 100644 files/fr/web/css/_colon_-moz-lwtheme/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/images-in-menus/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/mac-graphite-theme/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-backward/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-forward/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-backward/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-forward/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/scrollbar-thumb-proportional/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/touch-enabled/index.html delete mode 100644 files/fr/web/css/_colon_-moz-system-metric/windows-default-theme/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-browse/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-check/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-clear/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-expand/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-fill-lower/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-fill-upper/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-fill/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-reveal/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-thumb/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-ticks-after/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-ticks-before/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-tooltip/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-track/index.html delete mode 100644 files/fr/web/css/_doublecolon_-ms-value/index.html delete mode 100644 files/fr/web/css/azimuth/index.html delete mode 100644 files/fr/web/css/overflow-clip-box-block/index.html delete mode 100644 files/fr/web/css/overflow-clip-box-inline/index.html delete mode 100644 files/fr/web/css/overflow-clip-box/index.html delete mode 100644 files/fr/web/events/cached/index.html delete mode 100644 files/fr/web/events/chargingchange/index.html delete mode 100644 files/fr/web/events/chargingtimechange/index.html delete mode 100644 files/fr/web/events/checking/index.html delete mode 100644 files/fr/web/events/downloading/index.html delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.1/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.2/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.3/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.4/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.5/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.6/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.7/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.1/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.5/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_2015_par_mozilla/index.html" delete mode 100644 "files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_5_par_mozilla/index.html" delete mode 100644 files/fr/web/javascript/reference/fonctions/arguments/caller/index.html delete mode 100644 files/fr/web/javascript/reference/instructions/for_each...in/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/array/observe/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/array/unobserve/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/arraybuffer/transfer/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/date/tolocaleformat/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/function/arity/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/function/isgenerator/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/number/tointeger/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/count/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/eval/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/getnotifier/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/nosuchmethod/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/observe/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/parent/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/unobserve/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/unwatch/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/object/watch/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/parallelarray/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/stopiteration/index.html delete mode 100644 files/fr/web/javascript/reference/objets_globaux/string/quote/index.html delete mode 100644 "files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_g\303\251n\303\251rateur/index.html" delete mode 100644 "files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_tableau/index.html" delete mode 100644 "files/fr/web/javascript/reference/op\303\251rateurs/expression_closures/index.html" delete mode 100644 files/fr/webapi/browser/index.html delete mode 100644 files/fr/webapi/camera/index.html delete mode 100644 files/fr/webapi/idle/index.html delete mode 100644 files/fr/webapi/mobile_connection/index.html delete mode 100644 files/fr/webapi/network_stats/index.html delete mode 100644 files/fr/webapi/power_management/index.html delete mode 100644 files/fr/webapi/websms/index.html delete mode 100644 files/fr/xml_dans_mozilla/index.html delete mode 100644 files/fr/xml_extras/index.html delete mode 100644 files/fr/xpcnativewrapper/index.html delete mode 100644 files/fr/xpcom/index.html delete mode 100644 files/fr/xpcom/liaisons_de_langage/components.exception/index.html delete mode 100644 files/fr/xpcom/liaisons_de_langage/components.id/index.html delete mode 100644 files/fr/xpcom/liaisons_de_langage/index.html delete mode 100644 files/fr/xpcom/reference/core_functions/index.html delete mode 100644 files/fr/xpcom/reference/index.html delete mode 100644 files/fr/xpcom/reference/reference_by_grouping/index.html delete mode 100644 files/fr/xpcom/setting_http_request_headers/index.html delete mode 100644 files/fr/xpcom_interface_reference/index.html delete mode 100644 files/fr/xpcom_interface_reference/mozistoragestatement/index.html delete mode 100644 files/fr/xpcom_interface_reference/nsiaccessibleprovider/index.html delete mode 100644 files/fr/xpcom_interface_reference/nsidomclientrect/index.html delete mode 100644 files/fr/xpcom_interface_reference/nsiidleservice/index.html delete mode 100644 files/fr/xpcom_interface_reference/nsiprocess/index.html delete mode 100644 files/fr/xpcom_interface_reference/nsisupports/index.html delete mode 100644 files/fr/xpcom_interface_reference/nsiuri/index.html delete mode 100644 files/fr/xpcom_interface_reference/nsixulappinfo/index.html delete mode 100644 files/fr/xpconnect/index.html delete mode 100644 files/fr/xpcshell/index.html delete mode 100644 files/fr/xpi/index.html delete mode 100644 files/fr/zones/index.html delete mode 100644 "files/fr/\303\251criture_de_code_localisable/index.html" delete mode 100644 "files/fr/\303\251v\303\250nements_de_glisser-d\303\251poser/index.html" (limited to 'files/fr') diff --git a/files/fr/_wikihistory.json b/files/fr/_wikihistory.json deleted file mode 100644 index 542f13046c..0000000000 --- a/files/fr/_wikihistory.json +++ /dev/null @@ -1,46058 +0,0 @@ -{ - "Accessibilité": { - "modified": "2020-04-12T15:58:54.738Z", - "contributors": [ - "ele-gall-ac-mineducation", - "SphinxKnight", - "NerOcrO", - "Steph", - "tonybengue", - "BenoitL", - "Fredchat", - "FredB", - "MoniqueB", - "fscholz", - "Chbok", - "Mgjbot", - "VincentN", - "Cedric", - "Mozinet", - "Jean-Yves Cronier", - "Anonymous", - "Laurent Denis", - "Nickolay" - ] - }, - "Accessibilité/ARIA": { - "modified": "2019-11-08T13:58:24.544Z", - "contributors": [ - "SphinxKnight", - "evefevrier", - "teoli", - "BenoitL", - "Fredchat", - "Goofy", - "FredB", - "Anonymous" - ] - }, - "Accessibilité/ARIA/Comment_deposer_un_bug_lie_a_ARIA": { - "modified": "2019-03-23T22:43:55.753Z", - "contributors": [ - "paul.bignier" - ] - }, - "Accessibilité/ARIA/FAQ_Applications_Web_et_ARIA": { - "modified": "2019-03-23T23:16:38.785Z", - "contributors": [ - "sdumetz", - "dFegnoux", - "Mozinet", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Guides_ARIA": { - "modified": "2019-03-23T23:17:01.535Z", - "contributors": [ - "hmore", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA": { - "modified": "2019-03-23T23:17:45.799Z", - "contributors": [ - "BenoitL", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Modele_Technique_ARIA": { - "modified": "2019-03-23T23:17:02.348Z", - "contributors": [ - "BenoitL", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utilisation_du_groupe_rôle": { - "modified": "2019-03-18T21:16:59.818Z", - "contributors": [ - "paul.bignier" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utilisation_du_groupe_switch": { - "modified": "2019-03-23T22:44:02.313Z", - "contributors": [ - "paul.bignier" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-describedby": { - "modified": "2019-03-23T23:14:38.539Z", - "contributors": [ - "hmore", - "P45QU10U", - "Havano", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-invalid": { - "modified": "2019-03-23T23:14:24.380Z", - "contributors": [ - "NerOcrO", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-label": { - "modified": "2019-09-16T14:04:28.206Z", - "contributors": [ - "Lo_h", - "mathildebuenerd", - "bcetienne", - "David-Werbrouck", - "yoanmalie", - "oliv06", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-labelledby": { - "modified": "2020-11-26T01:35:04.943Z", - "contributors": [ - "PhilippePerret", - "OlivierNourry", - "dzc34", - "J.DMB", - "Havano", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-orientation": { - "modified": "2019-03-23T23:14:15.589Z", - "contributors": [ - "J.DMB", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-relevant": { - "modified": "2019-03-23T22:14:39.098Z", - "contributors": [ - "NerOcrO", - "clokanku" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-required": { - "modified": "2019-03-23T23:14:22.660Z", - "contributors": [ - "clokanku", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-valuemax": { - "modified": "2019-03-23T23:14:27.575Z", - "contributors": [ - "Hell_Carlito", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-valuemin": { - "modified": "2019-03-18T20:46:07.166Z", - "contributors": [ - "JeffD", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-valuenow": { - "modified": "2019-03-23T23:14:27.424Z", - "contributors": [ - "Gibus", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_l_attribut_aria-valuetext": { - "modified": "2019-03-18T20:46:06.951Z", - "contributors": [ - "JeffD", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_alertdialog": { - "modified": "2019-03-23T23:14:00.888Z", - "contributors": [ - "trouba", - "AdeLyneBD", - "hmore", - "goetsu", - "BenoitL", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_banner": { - "modified": "2019-03-23T23:15:06.469Z", - "contributors": [ - "nerville", - "hmore", - "BenoitL", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_checkbox": { - "modified": "2019-03-23T23:14:59.469Z", - "contributors": [ - "BenoitL", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_group": { - "modified": "2020-04-08T04:03:57.859Z", - "contributors": [ - "olivierdupon", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_link": { - "modified": "2019-03-23T23:14:59.014Z", - "contributors": [ - "Manuela", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_listbox": { - "modified": "2019-03-23T23:14:58.870Z", - "contributors": [ - "stevenmouret", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_log": { - "modified": "2019-03-23T23:14:20.710Z", - "contributors": [ - "J.DMB", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_presentation": { - "modified": "2020-02-06T12:23:48.064Z", - "contributors": [ - "GeoffreyC.", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_progressbar": { - "modified": "2019-03-29T05:52:02.630Z", - "contributors": [ - "prsdta", - "Fredchat", - "Goofy" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_slider": { - "modified": "2019-03-23T23:14:53.364Z", - "contributors": [ - "Gibus", - "KrySoar", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_status": { - "modified": "2019-03-23T23:13:50.573Z", - "contributors": [ - "J.DMB", - "@lucieLme", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_textbox": { - "modified": "2019-03-23T23:13:40.655Z", - "contributors": [ - "J.DMB", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_role_toolbar": { - "modified": "2019-03-23T23:15:02.491Z", - "contributors": [ - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_rôle_alert": { - "modified": "2019-03-23T23:16:30.067Z", - "contributors": [ - "hmore", - "BenoitL", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_rôle_article": { - "modified": "2019-03-23T23:16:28.140Z", - "contributors": [ - "hmore", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_rôle_button": { - "modified": "2019-03-23T23:16:24.067Z", - "contributors": [ - "frassinier", - "hmore", - "BenoitL", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Techniques_ARIA/Utiliser_le_rôle_dialog": { - "modified": "2020-10-13T10:16:26.541Z", - "contributors": [ - "newick", - "BenoitL", - "Fredchat" - ] - }, - "Accessibilité/ARIA/Zones_live_ARIA": { - "modified": "2019-03-23T23:17:43.700Z", - "contributors": [ - "kantoche", - "cdelhomme", - "BenoitL", - "Fredchat" - ] - }, - "Accessibilité/ARIA/formulaires": { - "modified": "2019-03-23T23:18:04.282Z", - "contributors": [ - "PhilippeV", - "Fredchat" - ] - }, - "Accessibilité/ARIA/formulaires/Alertes": { - "modified": "2019-03-23T23:17:54.084Z", - "contributors": [ - "P45QU10U", - "hmore", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/formulaires/Indications_elementaires_pour_les_formulaires": { - "modified": "2019-03-23T23:17:50.755Z", - "contributors": [ - "hmore", - "Goofy", - "Fredchat" - ] - }, - "Accessibilité/ARIA/formulaires/Labels_multi-options": { - "modified": "2019-03-23T23:17:46.968Z", - "contributors": [ - "hmore", - "Fredchat" - ] - }, - "Accessibilité/Aperçu_d_applications_Web_et_de_composants_dynamiques_accessibles": { - "modified": "2020-05-08T11:21:39.179Z", - "contributors": [ - "JNa0", - "P45QU10U", - "tonybengue", - "Louprenard", - "kevamp", - "jMoulis", - "Taver", - "vprigent", - "maeljirari", - "teoli" - ] - }, - "Accessibilité/Checklist_accessibilite_mobile": { - "modified": "2019-03-23T23:16:50.803Z", - "contributors": [ - "Fredchat", - "SphinxKnight" - ] - }, - "Accessibilité/Communauté": { - "modified": "2019-03-23T23:43:56.307Z", - "contributors": [ - "achraf", - "Jeremie", - "Fredchat" - ] - }, - "Accessibilité/Développement_Web": { - "modified": "2019-03-23T23:16:51.023Z", - "contributors": [ - "Fredchat" - ] - }, - "Adaptation_des_applications_XUL_pour_Firefox_1.5": { - "modified": "2019-03-23T23:44:05.298Z", - "contributors": [ - "wbamberg", - "Mgjbot", - "BenoitL", - "Sheppy", - "Chbok" - ] - }, - "Améliorations_DOM_dans_Firefox_3": { - "modified": "2019-03-23T23:52:52.677Z", - "contributors": [ - "wbamberg", - "BenoitL", - "Mgjbot" - ] - }, - "Améliorations_SVG_dans_Firefox_3": { - "modified": "2019-03-23T23:52:40.955Z", - "contributors": [ - "wbamberg", - "BenoitL", - "Mgjbot" - ] - }, - "Améliorations_XUL_dans_Firefox_3": { - "modified": "2019-03-24T00:02:27.372Z", - "contributors": [ - "wbamberg", - "fscholz", - "BenoitL" - ] - }, - "Apprendre": { - "modified": "2020-10-08T14:43:04.373Z", - "contributors": [ - "geraldventadour", - "stphngrc", - "smeden-lod", - "methodx", - "SphinxKnight", - "Melanie.Almeida", - "fredrun14", - "lecoeurseb", - "StrangeRocknRoller", - "tonybengue", - "Dralyab", - "egidiusmendel", - "unsteadyCode", - "W1773ND", - "Ilphrin", - "Raulel", - "JeffD", - "mliatt", - "teoli", - "gcodeur", - "Goofy", - "PetiPandaRou", - "jeromepasquelin", - "ValPom", - "Oliviermoz", - "DamienBertrand", - "wakka27", - "Benedetti", - "maxperchus" - ] - }, - "Apprendre/Accessibilité": { - "modified": "2020-07-16T22:35:46.786Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/CSS": { - "modified": "2020-10-08T16:01:55.051Z", - "contributors": [ - "geraldventadour", - "BAHLOUL_Farouk", - "nherbaut", - "Dralyab", - "SphinxKnight", - "dattaz", - "Oliviermoz" - ] - }, - "Apprendre/CSS/Building_blocks": { - "modified": "2020-09-16T07:14:02.390Z", - "contributors": [ - "Voulto", - "smeden-lod", - "AxelGiauffret", - "chrisdavidmills" - ] - }, - "Apprendre/CSS/Building_blocks/Advanced_styling_effects": { - "modified": "2020-07-16T22:28:21.276Z", - "contributors": [ - "chrisdavidmills", - "Dralyab" - ] - }, - "Apprendre/CSS/Building_blocks/Backgrounds_and_borders": { - "modified": "2020-10-12T10:29:46.948Z", - "contributors": [ - "chuck2kill", - "pauline.chalus", - "smeden-lod" - ] - }, - "Apprendre/CSS/Building_blocks/Cascade_et_heritage": { - "modified": "2020-10-17T12:41:21.832Z", - "contributors": [ - "geraldventadour", - "smeden-lod" - ] - }, - "Apprendre/CSS/Building_blocks/Debugging_CSS": { - "modified": "2020-10-15T22:35:18.278Z", - "contributors": [ - "chuck2kill" - ] - }, - "Apprendre/CSS/Building_blocks/Handling_different_text_directions": { - "modified": "2020-10-12T12:01:46.438Z", - "contributors": [ - "chuck2kill" - ] - }, - "Apprendre/CSS/Building_blocks/Le_modele_de_boite": { - "modified": "2020-10-31T20:40:32.362Z", - "contributors": [ - "Romain04", - "devscipline", - "cgz141413", - "vvvaleee" - ] - }, - "Apprendre/CSS/Building_blocks/Overflowing_content": { - "modified": "2020-10-13T05:02:31.498Z", - "contributors": [ - "chuck2kill", - "JTR1103" - ] - }, - "Apprendre/CSS/Building_blocks/Selectors": { - "modified": "2020-10-09T07:28:41.371Z", - "contributors": [ - "chuck2kill", - "smeden-lod", - "Zouayni" - ] - }, - "Apprendre/CSS/Building_blocks/Selectors/Combinateurs": { - "modified": "2020-12-07T09:25:08.631Z", - "contributors": [ - "francoistm", - "chuck2kill" - ] - }, - "Apprendre/CSS/Building_blocks/Selectors/Pseudo-classes_et_pseudo-éléments": { - "modified": "2020-10-17T16:55:55.753Z", - "contributors": [ - "geraldventadour", - "chuck2kill", - "time132", - "smeden-lod" - ] - }, - "Apprendre/CSS/Building_blocks/Selectors/Sélecteurs_d_atrribut": { - "modified": "2020-07-16T22:28:49.665Z", - "contributors": [ - "smeden-lod" - ] - }, - "Apprendre/CSS/Building_blocks/Selectors/Sélecteurs_de_type_classe_ID": { - "modified": "2020-07-16T22:28:39.961Z", - "contributors": [ - "smeden-lod" - ] - }, - "Apprendre/CSS/Building_blocks/Sizing_items_in_CSS": { - "modified": "2020-10-14T08:26:17.339Z", - "contributors": [ - "chuck2kill", - "Guetso", - "JTR1103", - "cgz141413", - "smeden-lod" - ] - }, - "Apprendre/CSS/Building_blocks/Styling_tables": { - "modified": "2020-07-16T22:28:15.930Z", - "contributors": [ - "smeden-lod", - "chrisdavidmills", - "manuilambert", - "PhilippeV", - "Dralyab" - ] - }, - "Apprendre/CSS/Building_blocks/Values_and_units": { - "modified": "2020-10-13T07:02:20.601Z", - "contributors": [ - "chuck2kill" - ] - }, - "Apprendre/CSS/CSS_layout": { - "modified": "2020-07-16T22:26:30.167Z", - "contributors": [ - "Anonymous", - "manuilambert", - "Dralyab", - "tonybengue" - ] - }, - "Apprendre/CSS/CSS_layout/Exemples_pratiques_de_positionnement": { - "modified": "2020-07-16T22:26:48.222Z", - "contributors": [ - "Anonymous" - ] - }, - "Apprendre/CSS/CSS_layout/Flexbox": { - "modified": "2020-07-16T22:26:52.633Z", - "contributors": [ - "Anonymous", - "interfacteur", - "_julien_", - "Dralyab" - ] - }, - "Apprendre/CSS/CSS_layout/Flexbox_skills": { - "modified": "2020-07-16T22:27:33.960Z", - "contributors": [ - "Anonymous" - ] - }, - "Apprendre/CSS/CSS_layout/Floats": { - "modified": "2020-07-16T22:26:37.621Z", - "contributors": [ - "Anonymous", - "Dralyab", - "Alan_Braut" - ] - }, - "Apprendre/CSS/CSS_layout/Fundamental_Layout_Comprehension": { - "modified": "2020-07-16T22:27:24.245Z", - "contributors": [ - "tristantheb", - "junior-batilat" - ] - }, - "Apprendre/CSS/CSS_layout/Grids": { - "modified": "2020-07-16T22:26:59.113Z", - "contributors": [ - "Anonymous", - "Dralyab" - ] - }, - "Apprendre/CSS/CSS_layout/Introduction": { - "modified": "2020-07-16T22:27:04.363Z", - "contributors": [ - "Anonymous", - "Dralyab", - "creposucre", - "Alan_Braut" - ] - }, - "Apprendre/CSS/CSS_layout/Le_positionnement": { - "modified": "2020-11-08T08:33:26.641Z", - "contributors": [ - "CCR-G", - "Anonymous", - "Dralyab", - "Alan_Braut" - ] - }, - "Apprendre/CSS/CSS_layout/Legacy_Layout_Methods": { - "modified": "2020-07-16T22:27:13.887Z", - "contributors": [ - "Dralyab" - ] - }, - "Apprendre/CSS/CSS_layout/Media_queries": { - "modified": "2020-07-16T22:27:31.483Z", - "contributors": [ - "tristantheb" - ] - }, - "Apprendre/CSS/CSS_layout/Multiple-column_Layout": { - "modified": "2020-07-16T22:27:09.504Z", - "contributors": [ - "Dralyab" - ] - }, - "Apprendre/CSS/CSS_layout/Normal_Flow": { - "modified": "2020-07-16T22:27:21.075Z", - "contributors": [ - "Anonymous", - "Dralyab" - ] - }, - "Apprendre/CSS/CSS_layout/Prise_En_Charge_Des_Anciens_Navigateurs": { - "modified": "2020-07-16T22:27:18.222Z", - "contributors": [ - "tristantheb" - ] - }, - "Apprendre/CSS/CSS_layout/Responsive_Design": { - "modified": "2020-07-16T22:27:27.744Z", - "contributors": [ - "xavier.boisnon", - "tristantheb", - "Anonymous" - ] - }, - "Apprendre/CSS/Comment": { - "modified": "2020-07-16T22:25:42.247Z", - "contributors": [ - "loella16", - "SphinxKnight" - ] - }, - "Apprendre/CSS/Comment/Créer_de_belles_boîtes": { - "modified": "2020-07-16T22:25:49.335Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/CSS/Comment/Generated_content": { - "modified": "2020-07-16T22:25:47.662Z", - "contributors": [ - "chrisdavidmills", - "teoli", - "grandoc", - "Mgjbot", - "Verruckt", - "BenoitL" - ] - }, - "Apprendre/CSS/Comment/Mettre_en_forme_du_texte": { - "modified": "2020-07-16T22:25:49.005Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/CSS/Comment/personnaliser_une_liste": { - "modified": "2020-07-16T22:25:49.686Z", - "contributors": [ - "xdelatour" - ] - }, - "Apprendre/CSS/Introduction_à_CSS/Fundamental_CSS_comprehension": { - "modified": "2020-07-16T22:28:12.063Z", - "contributors": [ - "Dralyab" - ] - }, - "Apprendre/CSS/Introduction_à_CSS/La_disposition": { - "modified": "2020-07-16T22:25:40.392Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/CSS/Les_propriétés_CSS": { - "modified": "2020-07-16T22:25:39.574Z", - "contributors": [ - "SphinxKnight", - "Oliviermoz" - ] - }, - "Apprendre/CSS/Utiliser_CSS_dans_une_page_web": { - "modified": "2020-07-16T22:25:39.949Z", - "contributors": [ - "Loliwe", - "SphinxKnight", - "Oliviermoz" - ] - }, - "Apprendre/CSS/formatage_texte_CSS": { - "modified": "2020-07-16T22:25:39.378Z", - "contributors": [ - "teoli", - "SphinxKnight", - "Mozinet", - "Oliviermoz" - ] - }, - "Apprendre/CSS/styliser_boites/A_cool_looking_box": { - "modified": "2020-07-16T22:28:26.748Z", - "contributors": [ - "Dralyab" - ] - }, - "Apprendre/CSS/styliser_boites/Creating_fancy_letterheaded_paper": { - "modified": "2020-07-16T22:28:24.684Z", - "contributors": [ - "LeMilitaire", - "Dralyab" - ] - }, - "Apprendre/Choisir_installer_paramétrer_un_éditeur_de_texte": { - "modified": "2020-07-16T22:35:48.990Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Commencer_avec_le_web": { - "modified": "2020-07-16T22:33:52.213Z", - "contributors": [ - "Melanie.Almeida", - "Dralyab", - "Hirevo", - "Ilphrin", - "loella16", - "tonybengue", - "Porkepix", - "Aminelahlou", - "allan.miro", - "SphinxKnight", - "mouloudia1981", - "Oliviermoz", - "qwincy", - "Luejni", - "Goofy", - "maxperchus" - ] - }, - "Apprendre/Commencer_avec_le_web/Gérer_les_fichiers": { - "modified": "2020-07-16T22:34:33.292Z", - "contributors": [ - "StrangeRocknRoller", - "Dralyab", - "Ilphrin", - "loella16", - "shoelaces", - "marie-ototoi", - "SphinxKnight" - ] - }, - "Apprendre/Commencer_avec_le_web/Installation_outils_de_base": { - "modified": "2020-10-20T05:04:23.584Z", - "contributors": [ - "SebastienLatouche", - "goofy_mdn", - "SphinxKnight", - "NacimHarfouche", - "Chomchaum", - "Dralyab", - "zakaila", - "Ilphrin", - "TiCaillou", - "yannicka", - "loella16", - "clamb", - "PifyZ", - "DamienBertrand", - "qwincy", - "Luejni", - "Goofy" - ] - }, - "Apprendre/Commencer_avec_le_web/Le_fonctionnement_du_Web": { - "modified": "2020-07-16T22:34:00.161Z", - "contributors": [ - "grandoc", - "Keyrolus", - "ValentinFlamand", - "Dralyab", - "TheStarrK", - "Ilphrin", - "loella16", - "SphinxKnight" - ] - }, - "Apprendre/Commencer_avec_le_web/Les_bases_CSS": { - "modified": "2020-07-16T22:34:58.312Z", - "contributors": [ - "Melanie.Almeida", - "Dralyab", - "Ilphrin", - "loella16", - "Mozinet", - "marie-ototoi", - "bl4n", - "SphinxKnight" - ] - }, - "Apprendre/Commencer_avec_le_web/Les_bases_HTML": { - "modified": "2020-07-16T22:34:45.216Z", - "contributors": [ - "aSeches", - "Chomchaum", - "StrangeRocknRoller", - "Dralyab", - "Ilphrin", - "loella16", - "tonybengue", - "KhalilSnaake", - "SphinxKnight" - ] - }, - "Apprendre/Commencer_avec_le_web/Les_bases_JavaScript": { - "modified": "2020-07-16T22:35:10.257Z", - "contributors": [ - "edspeedy", - "grandoc", - "SuppWill", - "Melanie.Almeida", - "Drakone", - "clamb", - "manuilambert", - "Maartz", - "codingk8", - "Dralyab", - "TheStarrK", - "loella16", - "TheoDardel", - "bl4n", - "SphinxKnight", - "Aelerinya" - ] - }, - "Apprendre/Commencer_avec_le_web/Publier_votre_site_web": { - "modified": "2020-07-16T22:34:25.316Z", - "contributors": [ - "edspeedy", - "Dralyab", - "NemoNobobyPersonne", - "Ilphrin", - "villastien", - "SphinxKnight" - ] - }, - "Apprendre/Commencer_avec_le_web/Quel_aspect_pour_votre_site": { - "modified": "2020-07-16T22:34:16.258Z", - "contributors": [ - "Dralyab", - "Ilphrin", - "yannicka", - "loella16", - "SphinxKnight", - "J.DMB", - "Luejni" - ] - }, - "Apprendre/Commencer_avec_le_web/The_web_and_web_standards": { - "modified": "2020-11-28T07:27:01.600Z", - "contributors": [ - "Kinskikick", - "Chomchaum" - ] - }, - "Apprendre/Commencez_votre_projet_web": { - "modified": "2020-07-16T22:35:34.202Z", - "contributors": [ - "SphinxKnight", - "rtabusse" - ] - }, - "Apprendre/Comment_contribuer": { - "modified": "2020-07-16T22:33:43.608Z", - "contributors": [ - "SphinxKnight", - "Dralyab", - "loella16", - "PetiPandaRou" - ] - }, - "Apprendre/Common_questions": { - "modified": "2020-08-07T08:34:09.122Z", - "contributors": [ - "ramakuzhou", - "As-Sinder", - "JeffD", - "Willyntobila" - ] - }, - "Apprendre/Common_questions/configurer_un_serveur_de_test_local": { - "modified": "2020-07-16T22:35:52.861Z", - "contributors": [ - "Duth", - "smeden-lod", - "ThCarrere", - "Zinavolia", - "fleuronvilik", - "TheStarrK", - "Albynton" - ] - }, - "Apprendre/Comprendre_les_URL": { - "modified": "2020-07-16T22:35:29.353Z", - "contributors": [ - "clamb", - "Porkepix", - "SphinxKnight" - ] - }, - "Apprendre/Comprendre_noms_de_domaine": { - "modified": "2020-07-16T22:35:44.035Z", - "contributors": [ - "Porkepix", - "SphinxKnight" - ] - }, - "Apprendre/Compétences": { - "modified": "2020-07-16T22:22:13.196Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Concevoir_page_web": { - "modified": "2020-07-16T22:35:42.406Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "ValPom" - ] - }, - "Apprendre/Concevoir_site_tous_types_utilisateurs": { - "modified": "2020-07-16T22:35:50.809Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Découvrir_outils_développement_navigateurs": { - "modified": "2020-07-16T22:35:47.424Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Fonctionnement_Internet": { - "modified": "2020-07-16T22:35:36.757Z", - "contributors": [ - "TheStarrK", - "Porkepix", - "SphinxKnight", - "ValPom" - ] - }, - "Apprendre/Front-end_web_developer": { - "modified": "2020-11-09T18:55:17.114Z", - "contributors": [ - "Twinklelight", - "geraldventadour", - "KHALIL5benz", - "Gwenishere" - ] - }, - "Apprendre/HTML": { - "modified": "2020-07-16T22:22:17.105Z", - "contributors": [ - "Th0m4", - "Dralyab", - "zakaila", - "Ilphrin", - "interfacteur", - "Goofy", - "jlagneau", - "gillou58", - "SphinxKnight", - "DamienBertrand" - ] - }, - "Apprendre/HTML/Balises_HTML": { - "modified": "2020-07-16T22:22:27.345Z", - "contributors": [ - "gudemare", - "Loliwe", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Cheatsheet": { - "modified": "2020-07-16T22:22:44.025Z", - "contributors": [ - "SphinxKnight", - "Goofy" - ] - }, - "Apprendre/HTML/Comment": { - "modified": "2020-07-16T22:22:28.392Z", - "contributors": [ - "Goofy", - "SphinxKnight", - "SisteSkygge" - ] - }, - "Apprendre/HTML/Comment/Afficher_du_code_informatique_avec_HTML": { - "modified": "2020-07-16T22:22:41.102Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Ajouter_carte_zones_cliquables_sur_image": { - "modified": "2020-07-16T22:22:42.935Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Ajouter_citations_sur_page_web": { - "modified": "2020-07-16T22:22:41.315Z", - "contributors": [ - "teoli", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Ajouter_contenu_Flash_dans_page_web": { - "modified": "2020-07-16T22:22:42.572Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Ajouter_contenu_audio_vidéo_page_web": { - "modified": "2020-07-16T22:22:40.861Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Ajouter_des_images_adaptatives_à_une_page_web": { - "modified": "2020-12-06T15:45:53.769Z", - "contributors": [ - "Kinskikick", - "jwhitlock", - "ncodefun", - "Bpruneau", - "Dralyab", - "edspeedy", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Ajouter_des_images_vectorielles_à_une_page_web": { - "modified": "2020-07-16T22:24:39.978Z", - "contributors": [ - "brundozer", - "Dralyab", - "carnival187", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Ajouter_des_images_à_une_page_web": { - "modified": "2020-07-16T22:22:38.961Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Annoter_des_images_et_graphiques": { - "modified": "2020-07-16T22:22:41.471Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Appliquer_du_CSS_à_une_page_web": { - "modified": "2020-07-16T22:22:39.866Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Créer_un_document_HTML_simple": { - "modified": "2020-07-16T22:22:38.260Z", - "contributors": [ - "G4cklez", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Créer_un_hyperlien": { - "modified": "2020-07-16T22:22:39.664Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Créer_une_liste_d_éléments_avec_HTML": { - "modified": "2020-07-16T22:22:40.566Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Découper_une_page_web_en_sections_logiques": { - "modified": "2020-07-16T22:22:39.225Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Définir_des_termes_avec_HTML": { - "modified": "2020-07-16T22:22:41.835Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Identifier_et_expliquer_des_abréviations": { - "modified": "2020-07-16T22:22:37.801Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Intégrer_une_page_web_dans_une_autre_page_web": { - "modified": "2020-07-16T22:22:42.317Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Mettre_en_place_une_hiérarchie_de_titres": { - "modified": "2020-07-16T22:22:39.419Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Mettre_l_accent_sur_un_contenu_ou_indiquer_qu_un_texte_est_important": { - "modified": "2020-07-16T22:22:38.547Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Utiliser_JavaScript_au_sein_d_une_page_web": { - "modified": "2020-07-16T22:22:40.147Z", - "contributors": [ - "RomainLanz", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Comment/Utiliser_attributs_donnes": { - "modified": "2020-07-16T22:22:34.977Z", - "contributors": [ - "lotfire24", - "SphinxKnight", - "Goofy" - ] - }, - "Apprendre/HTML/Introduction_à_HTML": { - "modified": "2020-07-16T22:22:47.142Z", - "contributors": [ - "bfritscher", - "NerOcrO", - "Dralyab", - "Ilphrin", - "loella16", - "Porkepix", - "Jeremie", - "SphinxKnight" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/Creating_hyperlinks": { - "modified": "2020-11-27T09:49:15.655Z", - "contributors": [ - "Chomchaum", - "goofy_mdn", - "Dralyab", - "_kud", - "NemoNobobyPersonne", - "zakaila", - "Ilphrin" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/Debugging_HTML": { - "modified": "2020-07-16T22:24:12.781Z", - "contributors": [ - "chrisdavidmills", - "LeMilitaire", - "Dralyab", - "Ilphrin" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/Document_and_website_structure": { - "modified": "2020-07-16T22:24:04.214Z", - "contributors": [ - "tonybengue", - "fredckl", - "Dralyab", - "AntoineJacquet", - "olschneider", - "SamuChan", - "Ilphrin" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/Getting_started": { - "modified": "2020-07-16T22:23:00.212Z", - "contributors": [ - "aSeches", - "Chomchaum", - "Dralyab", - "bastosh", - "Lizie", - "KhalilSnaake" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/HTML_text_fundamentals": { - "modified": "2020-07-16T22:23:32.043Z", - "contributors": [ - "aSeches", - "Chomchaum", - "LeMilitaire", - "Dralyab", - "gnoyaze", - "clamb", - "Ilphrin" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/Marking_up_a_letter": { - "modified": "2020-12-05T16:03:44.361Z", - "contributors": [ - "Kinskikick", - "chrisdavidmills", - "LeMilitaire", - "Dralyab", - "Ilphrin" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/Structuring_a_page_of_content": { - "modified": "2020-07-16T22:24:18.719Z", - "contributors": [ - "LeMilitaire", - "Dralyab", - "Arkelis", - "Ilphrin" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/The_head_metadata_in_HTML": { - "modified": "2020-11-17T15:11:05.138Z", - "contributors": [ - "gauthier.delaserraz", - "lord128", - "Chomchaum", - "Dralyab", - "tonybengue", - "bastosh", - "loella16", - "Pethrow", - "KhalilSnaake" - ] - }, - "Apprendre/HTML/Introduction_à_HTML/formatage-avance-texte": { - "modified": "2020-11-29T07:50:37.082Z", - "contributors": [ - "Kinskikick", - "Dralyab", - "zakaila", - "BartGui", - "Goofy" - ] - }, - "Apprendre/HTML/Multimedia_and_embedding": { - "modified": "2020-07-16T22:24:25.278Z", - "contributors": [ - "tristantheb", - "Dralyab", - "AntoineJacquet", - "zakaila", - "Ilphrin" - ] - }, - "Apprendre/HTML/Multimedia_and_embedding/Contenu_audio_et_video": { - "modified": "2020-07-16T22:24:52.741Z", - "contributors": [ - "Chomchaum", - "LeMilitaire", - "Dralyab", - "zakaila" - ] - }, - "Apprendre/HTML/Multimedia_and_embedding/Images_in_HTML": { - "modified": "2020-07-16T22:24:44.917Z", - "contributors": [ - "BAHLOUL_Farouk", - "didierbroska", - "Chomchaum", - "daftaupe", - "zakaila", - "Dralyab" - ] - }, - "Apprendre/HTML/Multimedia_and_embedding/Mozilla_splash_page": { - "modified": "2020-07-16T22:25:07.018Z", - "contributors": [ - "zakaila" - ] - }, - "Apprendre/HTML/Multimedia_and_embedding/Other_embedding_technologies": { - "modified": "2020-07-16T22:25:01.620Z", - "contributors": [ - "Dralyab" - ] - }, - "Apprendre/HTML/Tableaux": { - "modified": "2020-07-16T22:25:11.317Z", - "contributors": [ - "NerOcrO", - "Dralyab", - "loella16", - "tonybengue" - ] - }, - "Apprendre/HTML/Tableaux/Advanced": { - "modified": "2020-07-16T22:25:25.886Z", - "contributors": [ - "Dralyab", - "loella16", - "tonybengue" - ] - }, - "Apprendre/HTML/Tableaux/Basics": { - "modified": "2020-07-16T22:25:20.473Z", - "contributors": [ - "ThCarrere", - "Dralyab", - "loella16", - "tonybengue" - ] - }, - "Apprendre/HTML/Tableaux/Structuring_planet_data": { - "modified": "2020-07-16T22:25:29.724Z", - "contributors": [ - "Dralyab", - "loella16", - "tonybengue" - ] - }, - "Apprendre/HTML/Écrire_une_simple_page_HTML": { - "modified": "2020-07-16T22:22:26.616Z", - "contributors": [ - "wbamberg", - "SphinxKnight" - ] - }, - "Apprendre/Index": { - "modified": "2020-07-16T22:33:36.900Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/JavaScript": { - "modified": "2020-07-16T22:29:38.759Z", - "contributors": [ - "mper", - "Dralyab", - "tonybengue", - "loella16", - "SphinxKnight", - "Thogusa" - ] - }, - "Apprendre/JavaScript/Building_blocks": { - "modified": "2020-07-16T22:31:07.626Z", - "contributors": [ - "smeden-lod", - "tonybengue", - "SphinxKnight", - "benjaminlepine", - "loella16", - "daufinsyd" - ] - }, - "Apprendre/JavaScript/Building_blocks/Build_your_own_function": { - "modified": "2020-07-16T22:31:29.138Z", - "contributors": [ - "smeden-lod", - "EmerikC", - "Chaospherae", - "andyquin", - "Gasperowicz" - ] - }, - "Apprendre/JavaScript/Building_blocks/Evènements": { - "modified": "2020-07-16T22:31:37.886Z", - "contributors": [ - "Chaospherae", - "bubzy34", - "tonybengue" - ] - }, - "Apprendre/JavaScript/Building_blocks/Fonctions": { - "modified": "2020-07-16T22:31:24.630Z", - "contributors": [ - "Voltariuss", - "smeden-lod", - "vacarme", - "Mania", - "bubzy34", - "tonybengue" - ] - }, - "Apprendre/JavaScript/Building_blocks/Image_gallery": { - "modified": "2020-07-16T22:31:43.231Z", - "contributors": [ - "tristantheb", - "Chaospherae", - "Jcninho87", - "SphinxKnight", - "tonybengue" - ] - }, - "Apprendre/JavaScript/Building_blocks/Looping_code": { - "modified": "2020-07-16T22:31:19.091Z", - "contributors": [ - "JNa0", - "baslumol", - "Eric-ciccotti", - "andyquin", - "ThCarrere", - "bubzy34", - "tonybengue", - "joan38", - "Abrams" - ] - }, - "Apprendre/JavaScript/Building_blocks/Return_values": { - "modified": "2020-07-16T22:31:33.181Z", - "contributors": [ - "Chaospherae", - "andyquin", - "tonybengue", - "farantDEV" - ] - }, - "Apprendre/JavaScript/Building_blocks/conditionals": { - "modified": "2020-07-16T22:31:13.085Z", - "contributors": [ - "Tendø", - "smeden-lod", - "Chomchaum", - "Eric-ciccotti", - "grandoc", - "tonybengue", - "Dralyab", - "OxyDesign" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs": { - "modified": "2020-07-16T22:32:39.093Z", - "contributors": [ - "a-mt", - "Dralyab", - "bretondev" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs/Client-side_storage": { - "modified": "2020-07-16T22:33:04.752Z", - "contributors": [ - "smeden-lod", - "a-mt" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs/Drawing_graphics": { - "modified": "2020-07-16T22:33:01.225Z", - "contributors": [ - "CcelestinC", - "a-mt" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs/Fetching_data": { - "modified": "2020-07-16T22:32:57.712Z", - "contributors": [ - "nrdAio", - "smeden-lod", - "neytsumi", - "CcelestinC", - "BigBigDoudou", - "a-mt" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs/Introduction": { - "modified": "2020-07-16T22:32:44.687Z", - "contributors": [ - "zoora", - "fuentesloic", - "BigBigDoudou", - "a-mt", - "Dralyab", - "elWombator", - "bretondev" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs/Manipulating_documents": { - "modified": "2020-07-16T22:32:47.994Z", - "contributors": [ - "Vony", - "a-mt" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs/Third_party_APIs": { - "modified": "2020-07-16T22:32:54.118Z", - "contributors": [ - "SphinxKnight", - "a-mt" - ] - }, - "Apprendre/JavaScript/Client-side_web_APIs/Video_and_audio_APIs": { - "modified": "2020-07-16T22:32:52.122Z", - "contributors": [ - "a-mt", - "Naouak" - ] - }, - "Apprendre/Le_fonctionnement_des_liens_sur_le_Web": { - "modified": "2020-07-16T22:35:43.089Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Mettre_en_place_un_environnement_de_travail": { - "modified": "2020-07-16T22:35:46.563Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Outils_et_tests": { - "modified": "2020-07-16T22:38:55.131Z", - "contributors": [ - "gnoyaze", - "KrySoar" - ] - }, - "Apprendre/Outils_et_tests/GitHub": { - "modified": "2020-09-09T16:10:57.840Z", - "contributors": [ - "JNa0" - ] - }, - "Apprendre/Ouvrir_un_fichier_dans_un_navigateur_web": { - "modified": "2020-07-16T22:35:20.536Z", - "contributors": [ - "ILIKECOOKIE", - "SphinxKnight" - ] - }, - "Apprendre/Publier_sur_le_Web_combien_ça_coûte": { - "modified": "2020-07-16T22:35:45.519Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Qu_est-ce_qu_un_serveur_web": { - "modified": "2020-07-16T22:35:31.313Z", - "contributors": [ - "jswisher", - "adupays", - "LooDom", - "SphinxKnight" - ] - }, - "Apprendre/Quels_logiciels_sont_nécessaires_pour_construire_un_site_web": { - "modified": "2020-07-16T22:35:33.023Z", - "contributors": [ - "JNa0", - "SphinxKnight" - ] - }, - "Apprendre/Tester_le_bon_fonctionnement_de_votre_site_web": { - "modified": "2020-07-16T22:35:50.068Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Transférer_des_fichiers_vers_un_serveur_web": { - "modified": "2020-07-16T22:35:41.575Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Tutoriels": { - "modified": "2020-08-30T08:21:58.955Z", - "contributors": [ - "Voulto", - "SphinxKnight", - "Andrew_Pfeiffer" - ] - }, - "Apprendre/Tutoriels/Comment_construire_un_site_web": { - "modified": "2020-07-16T22:33:41.155Z", - "contributors": [ - "SphinxKnight", - "Thegennok" - ] - }, - "Apprendre/Tutoriels/Les_bases_de_la_sécurité_informatique": { - "modified": "2019-03-23T22:46:47.760Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Apprendre/Utiliser_les_pages_GitHub": { - "modified": "2020-07-16T22:35:51.735Z", - "contributors": [ - "tonybengue", - "SphinxKnight" - ] - }, - "Apprendre/a11y": { - "modified": "2020-07-16T22:39:56.923Z", - "contributors": [ - "smeden-lod", - "KrySoar", - "Mozinet", - "SphinxKnight", - "Steph" - ] - }, - "Apprendre/a11y/Accessibility_troubleshooting": { - "modified": "2020-07-16T22:40:35.382Z", - "contributors": [ - "dragon38800" - ] - }, - "Apprendre/a11y/CSS_and_JavaScript": { - "modified": "2020-07-16T22:40:16.805Z", - "contributors": [ - "smeden-lod", - "JNa0", - "dragon38800" - ] - }, - "Apprendre/a11y/HTML": { - "modified": "2020-11-16T16:49:01.676Z", - "contributors": [ - "Mozinet", - "smeden-lod", - "JNa0", - "dragon38800", - "SphinxKnight", - "Tartasprint", - "n-chardon", - "tonybengue" - ] - }, - "Apprendre/a11y/Mobile": { - "modified": "2020-07-16T22:40:29.992Z", - "contributors": [ - "dragon38800" - ] - }, - "Apprendre/a11y/Multimedia": { - "modified": "2020-07-16T22:40:26.301Z", - "contributors": [ - "dragon38800" - ] - }, - "Apprendre/a11y/WAI-ARIA_basics": { - "modified": "2020-07-16T22:40:21.563Z", - "contributors": [ - "JNa0", - "dragon38800" - ] - }, - "Apprendre/a11y/What_is_accessibility": { - "modified": "2020-08-21T07:34:09.191Z", - "contributors": [ - "geoffctn", - "smeden-lod", - "dragon38800", - "gnoyaze", - "tonybengue" - ] - }, - "Apprendre/page_vs_site_vs_serveur_vs_moteur_recherche": { - "modified": "2020-07-16T22:35:39.748Z", - "contributors": [ - "SphinxKnight", - "fndiaye", - "ValPom" - ] - }, - "Astuces_CSS": { - "modified": "2019-01-16T16:09:55.868Z", - "contributors": [ - "BenoitL" - ] - }, - "Astuces_CSS/Couleurs_et_fonds": { - "modified": "2019-01-16T15:51:34.856Z", - "contributors": [ - "Fredchat", - "Kyodev", - "DirtyF", - "BenoitL" - ] - }, - "Astuces_CSS/Liens": { - "modified": "2019-01-16T15:51:16.166Z", - "contributors": [ - "Fredchat", - "Kyodev" - ] - }, - "Astuces_CSS/Tableaux": { - "modified": "2019-03-23T23:49:00.263Z", - "contributors": [ - "ethertank", - "Fredchat", - "Kyodev", - "Chbok", - "Mgjbot" - ] - }, - "Bugs_importants_corrigés_dans_Firefox_3": { - "modified": "2019-03-23T23:50:56.565Z", - "contributors": [ - "wbamberg", - "Mgjbot", - "BenoitL" - ] - }, - "CSS/Premiers_pas": { - "modified": "2019-03-23T23:43:26.964Z", - "contributors": [ - "Avent", - "wakka27", - "jparker", - "Delapouite", - "Verruckt", - "VincentN", - "Mgjbot", - "Indigo", - "BenoitL", - "Gorrk", - "Anonymous", - "Nickolay", - "TestUser" - ] - }, - "CSS/Premiers_pas/Boîtes": { - "modified": "2019-03-24T00:11:28.445Z", - "contributors": [ - "grandoc", - "Fredchat", - "Altinfo", - "Verruckt", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Cascade_et_héritage": { - "modified": "2019-03-23T23:43:29.860Z", - "contributors": [ - "teoli", - "Verruckt", - "Mgjbot", - "Mozinet", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Couleurs": { - "modified": "2019-03-23T23:48:37.546Z", - "contributors": [ - "teoli", - "Mgjbot", - "Verruckt", - "Indigo", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Des_CSS_lisibles": { - "modified": "2019-03-24T00:11:21.223Z", - "contributors": [ - "teoli", - "grandoc", - "R greg", - "Mgjbot", - "Verruckt", - "Indigo", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Fonctionnement_de_CSS": { - "modified": "2019-03-23T23:43:30.663Z", - "contributors": [ - "teoli", - "Verruckt", - "Mgjbot", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Graphiques_SVG": { - "modified": "2019-03-23T23:43:35.150Z", - "contributors": [ - "teoli", - "Verruckt", - "BenoitL" - ] - }, - "CSS/Premiers_pas/JavaScript": { - "modified": "2019-03-23T23:43:36.441Z", - "contributors": [ - "teoli", - "Verruckt", - "Sheppy", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Les_sélecteurs": { - "modified": "2019-03-24T00:11:21.423Z", - "contributors": [ - "xseignard", - "teoli", - "grandoc", - "R greg", - "Mgjbot", - "Verruckt", - "BenoitL", - "Mozinet", - "Christian13" - ] - }, - "CSS/Premiers_pas/Listes": { - "modified": "2019-03-23T23:43:24.796Z", - "contributors": [ - "teoli", - "Verruckt", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Mise_en_page": { - "modified": "2019-03-23T23:43:29.436Z", - "contributors": [ - "teoli", - "Verruckt", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Médias": { - "modified": "2019-03-24T00:11:03.641Z", - "contributors": [ - "teoli", - "grandoc", - "Verruckt", - "BenoitL" - ] - }, - "CSS/Premiers_pas/Pourquoi_utiliser_CSS": { - "modified": "2019-03-23T23:47:29.274Z", - "contributors": [ - "teoli", - "Fredchat", - "Verruckt", - "Mgjbot", - "Indigo", - "BenoitL", - "Gorrk" - ] - }, - "CSS/Premiers_pas/Présentation_des_CSS": { - "modified": "2019-03-23T23:47:23.927Z", - "contributors": [ - "wakka27", - "teoli", - "Fredchat", - "Verruckt", - "Mgjbot", - "BenoitL", - "Gorrk", - "Anonymous" - ] - }, - "CSS/Premiers_pas/Styles_de_texte": { - "modified": "2019-03-24T00:11:21.618Z", - "contributors": [ - "grandoc", - "Mgjbot", - "Verruckt", - "BenoitL", - "Loveuzz59", - "Indigo" - ] - }, - "CSS/Premiers_pas/Tableaux": { - "modified": "2019-03-24T00:11:25.378Z", - "contributors": [ - "teoli", - "grandoc", - "Verruckt", - "Pitchum", - "BenoitL" - ] - }, - "Changements_dans_Gecko_1.9_affectant_les_sites_Web": { - "modified": "2019-03-23T23:51:24.948Z", - "contributors": [ - "wbamberg", - "Sheppy", - "Mgjbot", - "BenoitL", - "Kyodev", - "Fredchat" - ] - }, - "Chrome": { - "modified": "2019-03-23T23:48:48.795Z", - "contributors": [ - "Delapouite", - "BenoitL", - "Mgjbot", - "VincentN", - "Chbok", - "Fredchat" - ] - }, - "Comment_créer_un_arbre_DOM": { - "modified": "2019-03-24T00:07:12.456Z", - "contributors": [ - "loella16", - "kmaglione", - "Azema", - "Valacar", - "Fredchat", - "Fping" - ] - }, - "Compilation_et_installation": { - "modified": "2019-03-23T23:48:28.119Z", - "contributors": [ - "fscholz", - "capgemini-ocs", - "teoli", - "The RedBurn", - "BenoitL", - "Mgjbot" - ] - }, - "Contrôles_DHTML_personnalisés_navigables_au_clavier": { - "modified": "2019-03-23T23:45:41.315Z", - "contributors": [ - "Jeremie", - "Fredchat", - "Kyodev", - "Daaaaad", - "BenoitL" - ] - }, - "DHTML": { - "modified": "2019-03-24T00:02:32.004Z", - "contributors": [ - "loella16", - "fscholz", - "Mgjbot", - "BenoitL", - "Chbok", - "Anonymous" - ] - }, - "DOM/Storage": { - "modified": "2019-03-23T23:53:02.039Z", - "contributors": [ - "AshfaqHossain", - "teoli", - "Nigel_Sheldon", - "BenoitL", - "Mgjbot", - "CedricP", - "Sum2807" - ] - }, - "DOM/dispatchEvent_exemple": { - "modified": "2019-03-23T23:50:28.205Z", - "contributors": [ - "xuancanh", - "Mgjbot", - "BenoitL", - "Elethiomel", - "Fredchat" - ] - }, - "Développement_Web": { - "modified": "2019-03-24T00:13:07.123Z", - "contributors": [ - "bilali", - "pixelastic", - "traan", - "Owidd", - "BenoitL", - "Mgjbot", - "Takenbot", - "Mozinet", - "Mrueegg", - "Chbok" - ] - }, - "Développement_Web/Développer_des_sites_à_compatibilité_descendante": { - "modified": "2019-03-24T00:13:23.048Z", - "contributors": [ - "Dralyab", - "pixelastic" - ] - }, - "Développement_Web/Introduction_au_développement_web": { - "modified": "2019-03-24T00:03:04.501Z", - "contributors": [ - "Jeremie", - "fscholz", - "BenoitL" - ] - }, - "Explorer_un_tableau_HTML_avec_des_interfaces_DOM_et_JavaScript": { - "modified": "2019-03-23T23:47:28.003Z", - "contributors": [ - "loella16", - "BenoitL", - "Mgjbot", - "Planche" - ] - }, - "FAQ_sur_les_transformations_XSL_dans_Mozilla": { - "modified": "2019-01-16T16:04:45.409Z", - "contributors": [ - "VincentN", - "Mgjbot", - "Kyodev", - "Fredchat", - "BenoitL" - ] - }, - "FUEL/Window/devicemotion_event": { - "modified": "2019-04-18T20:33:39.760Z", - "contributors": [ - "wbamberg", - "estelle", - "fscholz", - "Kalwyn" - ] - }, - "FUEL/Window/deviceorientation": { - "modified": "2019-04-18T20:33:41.817Z", - "contributors": [ - "wbamberg", - "estelle", - "fscholz", - "Kalwyn" - ] - }, - "Games/Techniques": { - "modified": "2020-04-10T15:50:15.159Z", - "contributors": [ - "olivierdupon", - "wbamberg", - "loella16", - "Fredchat", - "Halfman", - "chrisdavidmills" - ] - }, - "Games/Techniques/2D_collision_detection": { - "modified": "2019-03-23T23:16:18.305Z", - "contributors": [ - "wbamberg", - "loella16", - "Halfman", - "Fredchat", - "Goofy" - ] - }, - "Games/Techniques/3D_on_the_web": { - "modified": "2020-05-28T09:39:19.969Z", - "contributors": [ - "rponsini", - "wbamberg", - "NerOcrO", - "loella16", - "ngokevin" - ] - }, - "Games/Techniques/3D_on_the_web/Basic_theory": { - "modified": "2019-03-23T22:13:55.102Z", - "contributors": [ - "wbamberg", - "loella16", - "Dwaaren" - ] - }, - "Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_PlayCanvas": { - "modified": "2019-03-18T21:38:23.278Z", - "contributors": [ - "wbamberg", - "egidiusmendel" - ] - }, - "Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Three.js": { - "modified": "2020-06-28T15:40:46.953Z", - "contributors": [ - "houckontape" - ] - }, - "Games/Techniques/Audio_for_Web_Games": { - "modified": "2019-03-23T23:04:51.258Z", - "contributors": [ - "wbamberg", - "loella16", - "quentin.lamamy" - ] - }, - "Games/Tools": { - "modified": "2020-09-01T06:30:44.644Z", - "contributors": [ - "Voulto", - "wbamberg", - "dkocho4" - ] - }, - "Games/Tools/asm.js": { - "modified": "2019-01-17T01:50:29.041Z", - "contributors": [ - "wbamberg", - "BEHOUBA" - ] - }, - "Games/Workflows": { - "modified": "2019-03-23T23:13:37.908Z", - "contributors": [ - "wbamberg", - "loella16", - "LineVA", - "Antoine", - "groovecoder" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript": { - "modified": "2020-06-27T08:09:27.078Z", - "contributors": [ - "PascalLeMerrer", - "wbamberg", - "loella16", - "Flacipe", - "mboultoureau" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/Build_the_brick_field": { - "modified": "2020-06-28T04:40:48.007Z", - "contributors": [ - "PascalLeMerrer", - "ms-studio", - "NadjaRbgt", - "jgil83000", - "socadance" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/Faire_rebondir_la_balle_sur_les_murs": { - "modified": "2020-06-27T07:15:09.503Z", - "contributors": [ - "PascalLeMerrer", - "ms-studio", - "jgil83000", - "wbamberg", - "eerrtrr" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/Game_over": { - "modified": "2020-06-27T09:56:22.821Z", - "contributors": [ - "PascalLeMerrer", - "ms-studio", - "wbamberg", - "GaryJULIEN" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/Mouse_controls": { - "modified": "2020-06-28T04:14:12.215Z", - "contributors": [ - "PascalLeMerrer" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/Move_the_ball": { - "modified": "2020-06-27T10:00:36.942Z", - "contributors": [ - "PascalLeMerrer", - "SphinxKnight", - "jgil83000", - "wbamberg", - "eerrtrr", - "Arhance05", - "Cotting" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/Paddle_et_contrôle_clavier": { - "modified": "2020-06-27T09:45:30.950Z", - "contributors": [ - "PascalLeMerrer", - "ms-studio", - "jgil83000", - "wbamberg", - "eerrtrr" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/Track_the_score_and_win": { - "modified": "2020-06-28T04:10:36.923Z", - "contributors": [ - "PascalLeMerrer", - "ms-studio", - "NadjaRbgt", - "Camrifof" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/creer_element_canvas_et_afficher": { - "modified": "2020-06-27T09:58:29.574Z", - "contributors": [ - "PascalLeMerrer", - "antzilla", - "wbamberg", - "loella16", - "mboultoureau" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/detection_colisions": { - "modified": "2020-06-28T03:56:54.608Z", - "contributors": [ - "PascalLeMerrer", - "NadjaRbgt", - "Antoine-92" - ] - }, - "Games/Workflows/2D_Breakout_game_pure_JavaScript/finitions": { - "modified": "2020-06-27T06:26:41.729Z", - "contributors": [ - "PascalLeMerrer" - ] - }, - "Games/Workflows/2D_breakout_game_Phaser": { - "modified": "2019-06-20T04:41:51.709Z", - "contributors": [ - "Zyrass" - ] - }, - "Games/Workflows/HTML5_Gamedev_Phaser_Device_Orientation_FR": { - "modified": "2019-03-23T23:13:43.165Z", - "contributors": [ - "wbamberg", - "loella16", - "mliatt", - "PhilippeS", - "Antoine" - ] - }, - "Glossaire": { - "modified": "2020-10-11T04:48:06.317Z", - "contributors": [ - "peterbe", - "SphinxKnight", - "wbamberg", - "floustier", - "loella16", - "Jeremie", - "Macadam" - ] - }, - "Glossaire/404": { - "modified": "2019-03-23T23:07:59.110Z", - "contributors": [ - "loella16", - "Jeremie", - "Porkepix", - "genma" - ] - }, - "Glossaire/502": { - "modified": "2019-03-23T23:00:23.677Z", - "contributors": [ - "loella16", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/AJAX": { - "modified": "2020-02-09T18:25:52.010Z", - "contributors": [ - "tristantheb", - "tanguymartinez", - "AbdelElMansari", - "NemoNobobyPersonne", - "loella16", - "wakeuteu", - "Tradetnet", - "Gibus", - "vanz", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/ALPN": { - "modified": "2020-09-25T06:08:01.612Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/API": { - "modified": "2019-10-18T09:39:16.224Z", - "contributors": [ - "tanguymartinez", - "loella16", - "vanz", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/ARIA": { - "modified": "2019-03-23T23:00:07.200Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "vanz", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/ARPA": { - "modified": "2019-03-23T22:41:59.454Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/ASCII": { - "modified": "2019-03-23T22:46:33.759Z", - "contributors": [ - "loella16", - "Porkepix", - "vanz" - ] - }, - "Glossaire/ATAG": { - "modified": "2019-03-23T23:00:06.741Z", - "contributors": [ - "loella16", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Abstraction": { - "modified": "2019-03-23T23:00:07.652Z", - "contributors": [ - "loella16", - "AlemFarid", - "Porkepix", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Accessibilité": { - "modified": "2019-03-23T23:00:06.850Z", - "contributors": [ - "loella16", - "vanz", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Adobe_Flash": { - "modified": "2019-03-23T23:00:08.019Z", - "contributors": [ - "loella16", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Algorithme": { - "modified": "2019-01-16T20:52:42.595Z", - "contributors": [ - "loella16", - "vanz", - "SphinxKnight" - ] - }, - "Glossaire/Alignment_Container": { - "modified": "2019-03-18T21:18:07.982Z", - "contributors": [ - "AurelieBayre" - ] - }, - "Glossaire/Alignment_Subject": { - "modified": "2019-07-26T06:07:44.096Z", - "contributors": [ - "necraidan" - ] - }, - "Glossaire/Amélioration_progressive": { - "modified": "2019-03-23T22:39:20.648Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Apple_Safari": { - "modified": "2019-03-23T23:00:07.474Z", - "contributors": [ - "loella16", - "Porkepix", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Architecture_de_l_information": { - "modified": "2019-03-23T22:02:39.824Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Argument": { - "modified": "2019-03-23T23:00:07.319Z", - "contributors": [ - "loella16", - "Porkepix", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Arpanet": { - "modified": "2019-03-23T22:41:20.781Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Asynchronous": { - "modified": "2019-03-23T22:40:37.762Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Attaque_DOS": { - "modified": "2019-03-23T22:38:58.117Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Attribut": { - "modified": "2019-03-23T23:00:06.975Z", - "contributors": [ - "loella16", - "gharel", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Attribut_global": { - "modified": "2019-03-23T22:41:06.193Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Axe_de_grille": { - "modified": "2019-03-23T22:03:10.370Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Axe_principal": { - "modified": "2019-03-18T21:45:39.916Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Axe_transversal": { - "modified": "2019-03-18T21:45:47.680Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Balise": { - "modified": "2019-03-23T22:57:07.360Z", - "contributors": [ - "loella16", - "Porkepix", - "GeekShadow" - ] - }, - "Glossaire/Bandwidth": { - "modified": "2019-03-23T22:42:48.033Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/BiDi": { - "modified": "2019-03-23T22:41:59.861Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/BigInt": { - "modified": "2020-09-25T05:47:04.712Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Blink": { - "modified": "2019-03-23T22:59:53.173Z", - "contributors": [ - "loella16", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Block_cipher_mode_of_operation": { - "modified": "2020-09-25T05:52:15.554Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Boolean": { - "modified": "2019-03-23T22:58:43.329Z", - "contributors": [ - "loella16", - "Goofy", - "htindon" - ] - }, - "Glossaire/Boot2Gecko": { - "modified": "2019-03-23T22:44:37.220Z", - "contributors": [ - "loella16", - "Bat" - ] - }, - "Glossaire/Bootstrap": { - "modified": "2020-10-08T09:01:42.946Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Breadcrumb": { - "modified": "2020-09-25T06:01:58.166Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Browsing_context": { - "modified": "2020-09-27T07:13:04.450Z", - "contributors": [ - "tomderudder", - "loella16", - "xdelatour" - ] - }, - "Glossaire/Bézier_curve": { - "modified": "2020-10-05T03:57:01.254Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/CDN": { - "modified": "2019-03-23T22:40:07.356Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/CMS": { - "modified": "2019-03-23T22:57:05.726Z", - "contributors": [ - "loella16", - "Porkepix", - "Goofy", - "htindon" - ] - }, - "Glossaire/CORS": { - "modified": "2019-03-23T22:40:00.673Z", - "contributors": [ - "loella16", - "Yves_ASTIER", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/CRLF": { - "modified": "2019-03-23T22:39:56.107Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/CRUD": { - "modified": "2019-03-23T22:56:57.160Z", - "contributors": [ - "loella16", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/CSP": { - "modified": "2019-03-23T22:39:56.209Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/CSRF": { - "modified": "2019-03-23T22:39:14.118Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/CSS": { - "modified": "2020-05-24T07:09:43.791Z", - "contributors": [ - "tristantheb", - "loella16", - "tonybengue", - "arlequin", - "interfacteur", - "ysabelm", - "Porkepix", - "marie-ototoi", - "magikmanu", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/Cache": { - "modified": "2019-10-26T12:15:38.533Z", - "contributors": [ - "ledenis", - "Othael" - ] - }, - "Glossaire/CalDAV": { - "modified": "2019-03-23T22:42:10.052Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Canvas": { - "modified": "2019-03-23T22:46:31.363Z", - "contributors": [ - "loella16", - "vanz" - ] - }, - "Glossaire/CardDAV": { - "modified": "2019-03-23T22:42:06.600Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Cellule_de_grille": { - "modified": "2019-03-23T22:03:17.867Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Certificat_numérique": { - "modified": "2019-03-23T22:40:24.230Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Certificate_authority": { - "modified": "2019-03-23T22:40:36.402Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Certifié": { - "modified": "2019-03-23T22:40:21.550Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Character": { - "modified": "2019-03-23T22:57:04.701Z", - "contributors": [ - "loella16", - "Porkepix", - "Lizie" - ] - }, - "Glossaire/Chiffre": { - "modified": "2019-03-23T22:32:32.968Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "sebastien-bartoli" - ] - }, - "Glossaire/Chiffrement": { - "modified": "2019-03-23T22:39:39.008Z", - "contributors": [ - "loella16", - "SphinxKnight", - "xdelatour" - ] - }, - "Glossaire/Chrome": { - "modified": "2019-03-23T23:04:30.083Z", - "contributors": [ - "loella16", - "Jeremie", - "J.DMB", - "Pierre.Fauconnier", - "oooops" - ] - }, - "Glossaire/Class": { - "modified": "2019-03-23T22:41:15.262Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Clé": { - "modified": "2019-03-23T22:02:44.687Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Codec": { - "modified": "2019-03-23T22:42:11.584Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Colonne_de_grille": { - "modified": "2019-03-23T22:03:13.654Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Compile": { - "modified": "2019-03-23T22:49:54.371Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "y9mo" - ] - }, - "Glossaire/Compression_sans_perte": { - "modified": "2020-11-10T04:48:58.531Z", - "contributors": [ - "Voulto", - "pauladeville" - ] - }, - "Glossaire/Computer_Programming": { - "modified": "2019-03-23T22:42:04.675Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Condensat": { - "modified": "2019-03-23T22:39:24.362Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Conditionnel": { - "modified": "2019-03-23T22:40:22.363Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Constant": { - "modified": "2019-03-23T22:42:08.752Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Constructeur": { - "modified": "2019-03-23T22:40:24.326Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Contexte_d_empilement": { - "modified": "2019-03-18T21:45:45.716Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Conversion_de_type": { - "modified": "2019-03-23T22:41:51.598Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Cookie": { - "modified": "2019-03-23T22:40:01.278Z", - "contributors": [ - "Porkepix", - "loella16", - "xdelatour" - ] - }, - "Glossaire/Copyleft": { - "modified": "2019-03-23T22:38:55.191Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Cross-site_scripting": { - "modified": "2020-09-04T02:51:19.273Z", - "contributors": [ - "SphinxKnight", - "jooo.market", - "loella16" - ] - }, - "Glossaire/Cryptanalyse": { - "modified": "2019-03-23T22:39:19.630Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Cryptogramme": { - "modified": "2019-03-23T22:53:37.701Z", - "contributors": [ - "loella16", - "Goofy", - "SphinxKnight" - ] - }, - "Glossaire/Cryptographie": { - "modified": "2019-03-23T22:39:19.721Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Curseur_caret": { - "modified": "2019-03-18T21:45:34.459Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/DIC": { - "modified": "2019-03-23T22:39:55.578Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/DMZ": { - "modified": "2019-03-23T22:03:28.627Z", - "contributors": [ - "loella16", - "macmorning" - ] - }, - "Glossaire/DNS": { - "modified": "2019-03-23T22:56:52.127Z", - "contributors": [ - "loella16", - "Porkepix", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/DOM": { - "modified": "2019-03-23T22:57:17.449Z", - "contributors": [ - "loella16", - "davidgourde", - "vanz", - "Goofy", - "htindon" - ] - }, - "Glossaire/DTD": { - "modified": "2019-01-16T21:53:56.898Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/DTMF": { - "modified": "2019-03-23T22:03:28.745Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Delta": { - "modified": "2020-10-08T09:27:37.753Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Descripteur_(CSS)": { - "modified": "2019-03-23T22:03:25.810Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Developer_Tools": { - "modified": "2019-03-23T22:03:22.936Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Directive_de_navigation": { - "modified": "2019-03-23T22:03:14.851Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Directive_de_rapport": { - "modified": "2019-03-23T22:03:09.311Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Directive_de_récupération": { - "modified": "2019-03-23T22:03:13.368Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Doctype": { - "modified": "2019-03-23T23:06:03.805Z", - "contributors": [ - "loella16", - "Jeremie", - "Dexter_Deter" - ] - }, - "Glossaire/Document_directive": { - "modified": "2019-03-23T22:03:22.186Z", - "contributors": [ - "Porkepix", - "loella16" - ] - }, - "Glossaire/Domaine": { - "modified": "2019-03-23T22:32:24.113Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "htindon" - ] - }, - "Glossaire/Domaine_deuxième-niveau": { - "modified": "2019-01-16T21:52:29.757Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Dominant": { - "modified": "2019-03-23T22:03:21.288Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Déchiffrement": { - "modified": "2019-03-23T22:39:22.127Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Déni_de_Service": { - "modified": "2019-01-16T22:13:09.374Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Déni_de_service_distribué": { - "modified": "2019-03-23T22:03:22.826Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Dépôt": { - "modified": "2019-03-18T21:15:47.756Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Désérialisation": { - "modified": "2019-03-23T22:03:27.594Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Détournement_de_session": { - "modified": "2019-05-23T08:47:32.401Z", - "contributors": [ - "Watilin", - "loella16" - ] - }, - "Glossaire/ECMA": { - "modified": "2019-03-23T22:46:33.851Z", - "contributors": [ - "loella16", - "Porkepix", - "vanz" - ] - }, - "Glossaire/ECMAScript": { - "modified": "2019-03-23T22:42:01.993Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Element_vide": { - "modified": "2019-03-23T22:58:49.655Z", - "contributors": [ - "loella16", - "cdr" - ] - }, - "Glossaire/En-tête": { - "modified": "2019-03-23T22:39:01.787Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/En-tête_de_requête": { - "modified": "2019-03-18T21:46:42.307Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/En-tête_de_réponse_simple": { - "modified": "2019-03-18T21:45:55.399Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/En-tête_entité": { - "modified": "2019-03-23T22:12:49.956Z", - "contributors": [ - "loella16", - "Badacadabra" - ] - }, - "Glossaire/En-tête_simple": { - "modified": "2019-03-18T21:45:54.235Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/En-têtes_de_réponse": { - "modified": "2019-03-18T21:46:41.952Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Encapsulation": { - "modified": "2019-03-23T22:41:15.348Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Endianness": { - "modified": "2019-03-23T22:39:43.705Z", - "contributors": [ - "warpdesign", - "loella16", - "xdelatour" - ] - }, - "Glossaire/Engine": { - "modified": "2019-03-23T22:42:14.243Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Entity": { - "modified": "2019-03-23T22:42:04.087Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Environnement_de_document": { - "modified": "2019-03-18T21:45:35.460Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Exception": { - "modified": "2019-03-23T22:49:59.707Z", - "contributors": [ - "loella16", - "Gibus", - "y9mo" - ] - }, - "Glossaire/Expando": { - "modified": "2019-03-23T22:41:24.942Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/FAI": { - "modified": "2019-03-23T22:41:15.640Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/FTP": { - "modified": "2019-03-23T22:57:02.956Z", - "contributors": [ - "loella16", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/FTU": { - "modified": "2019-03-23T22:39:47.645Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Falsy": { - "modified": "2019-03-23T22:24:34.255Z", - "contributors": [ - "forresst", - "loella16", - "myrmecia" - ] - }, - "Glossaire/Favicon": { - "modified": "2020-10-08T10:43:13.038Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Fermeture": { - "modified": "2019-03-23T22:38:51.275Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Firefox_OS": { - "modified": "2019-03-23T23:08:04.734Z", - "contributors": [ - "loella16", - "Jeremie", - "genma" - ] - }, - "Glossaire/First_contentful_paint": { - "modified": "2020-11-10T08:21:34.381Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Flex": { - "modified": "2019-03-18T21:45:53.322Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Flex_Container": { - "modified": "2019-03-18T21:45:56.489Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Flex_Item": { - "modified": "2019-03-18T21:45:50.759Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Flexbox": { - "modified": "2019-03-18T21:45:59.605Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Fonction": { - "modified": "2019-03-23T22:57:15.355Z", - "contributors": [ - "loella16", - "Goofy", - "htindon" - ] - }, - "Glossaire/Fonction_de_hachage_cryptographique": { - "modified": "2019-03-23T22:39:21.209Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Fonction_de_première_classe": { - "modified": "2019-03-23T22:03:09.220Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Fonction_de_rappel": { - "modified": "2019-10-23T02:51:28.575Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Glossaire/Forbidden_header_name": { - "modified": "2019-03-23T22:03:08.442Z", - "contributors": [ - "loella16", - "Porkepix" - ] - }, - "Glossaire/Forbidden_response_header_name": { - "modified": "2019-03-23T22:03:07.354Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Fork": { - "modified": "2019-10-16T12:26:16.525Z", - "contributors": [ - "Mozinet", - "hellosct1" - ] - }, - "Glossaire/GIJ": { - "modified": "2019-01-16T21:52:08.705Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/GIT": { - "modified": "2019-03-23T22:56:56.750Z", - "contributors": [ - "loella16", - "Gibus", - "Porkepix", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/GPL": { - "modified": "2019-03-23T22:41:39.440Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/GPU": { - "modified": "2019-01-17T00:05:22.673Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/GZip_compression": { - "modified": "2019-03-23T22:03:21.908Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Gaia": { - "modified": "2019-03-23T22:42:05.161Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Gecko": { - "modified": "2019-03-23T22:42:01.710Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/General_header": { - "modified": "2019-03-23T22:17:50.134Z", - "contributors": [ - "loella16", - "Posey1235" - ] - }, - "Glossaire/Glyphe": { - "modified": "2019-08-25T18:38:32.909Z", - "contributors": [ - "Pols12" - ] - }, - "Glossaire/Gonk": { - "modified": "2019-03-23T22:41:40.903Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Google_Chrome": { - "modified": "2019-03-23T22:41:41.934Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Graceful_degradation": { - "modified": "2019-03-23T22:03:22.370Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Grid": { - "modified": "2019-03-23T22:03:08.561Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Guard": { - "modified": "2019-01-17T02:08:05.574Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Gutters": { - "modified": "2019-03-23T22:02:47.196Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/HMAC": { - "modified": "2019-03-23T22:02:44.595Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/HPKP": { - "modified": "2019-03-23T22:02:44.491Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/HSTS": { - "modified": "2019-03-23T22:17:04.593Z", - "contributors": [ - "loella16", - "David-5-1", - "Porkepix" - ] - }, - "Glossaire/HTML": { - "modified": "2020-02-08T12:46:36.790Z", - "contributors": [ - "tristantheb", - "Porkepix", - "SphinxKnight", - "Brahim-Tb", - "AbdelElMansari", - "Watilin", - "louisgrasset", - "loella16", - "marie-ototoi", - "xdelatour" - ] - }, - "Glossaire/HTML5": { - "modified": "2019-03-23T22:42:01.476Z", - "contributors": [ - "Mozinet", - "Goofy", - "xdelatour" - ] - }, - "Glossaire/HTTP": { - "modified": "2019-12-04T16:30:35.039Z", - "contributors": [ - "Porkepix", - "marcpicaud", - "loella16", - "marie-ototoi", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/HTTP_2": { - "modified": "2020-02-23T18:12:20.047Z", - "contributors": [ - "tristantheb" - ] - }, - "Glossaire/HTTP_3": { - "modified": "2020-10-08T10:15:56.390Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Header": { - "modified": "2019-03-23T22:13:03.478Z", - "contributors": [ - "loella16", - "luccioman" - ] - }, - "Glossaire/Hoisting": { - "modified": "2019-03-23T22:32:08.449Z", - "contributors": [ - "NemoNobobyPersonne", - "loella16", - "latour4", - "ericnsh", - "ylerjen" - ] - }, - "Glossaire/Host": { - "modified": "2019-03-23T22:42:04.779Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Hotlink": { - "modified": "2019-03-23T22:02:45.441Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Houdini": { - "modified": "2020-09-25T06:35:50.044Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Hyperlien": { - "modified": "2019-03-18T21:43:54.235Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Hypertexte": { - "modified": "2019-03-23T22:42:03.435Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Héritage": { - "modified": "2019-03-18T21:15:48.792Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/I18N": { - "modified": "2019-03-23T22:41:26.912Z", - "contributors": [ - "Goofy", - "xdelatour" - ] - }, - "Glossaire/IANA": { - "modified": "2019-03-23T22:42:02.685Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/ICANN": { - "modified": "2019-03-23T22:41:20.475Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/ICE": { - "modified": "2019-03-18T21:15:41.890Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/IDE": { - "modified": "2019-03-23T22:42:01.895Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/IDL": { - "modified": "2019-03-23T22:40:46.124Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/IETF": { - "modified": "2019-03-23T22:41:14.969Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/IIFE": { - "modified": "2019-03-23T22:40:31.554Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/IMAP": { - "modified": "2019-03-23T22:40:46.212Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/IP_Address": { - "modified": "2019-03-23T22:53:42.998Z", - "contributors": [ - "loella16", - "Goofy", - "htindon" - ] - }, - "Glossaire/IPv4": { - "modified": "2019-03-23T22:57:18.924Z", - "contributors": [ - "loella16", - "Porkepix", - "Goofy", - "dattaz" - ] - }, - "Glossaire/IPv6": { - "modified": "2019-03-23T22:57:21.986Z", - "contributors": [ - "loella16", - "Porkepix", - "Goofy", - "dattaz" - ] - }, - "Glossaire/IRC": { - "modified": "2019-03-23T22:58:51.295Z", - "contributors": [ - "loella16", - "Goofy", - "Sodan" - ] - }, - "Glossaire/ISO": { - "modified": "2019-03-23T22:40:36.585Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/ITU": { - "modified": "2020-09-25T06:42:41.752Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Idempotent": { - "modified": "2019-03-23T22:02:43.812Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Glossaire/Identifiant": { - "modified": "2019-03-23T22:41:09.348Z", - "contributors": [ - "loella16", - "SphinxKnight", - "xdelatour" - ] - }, - "Glossaire/Image_matricielle": { - "modified": "2019-03-18T21:46:42.119Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Immuable": { - "modified": "2019-03-23T22:40:36.312Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Index": { - "modified": "2019-01-16T21:55:44.075Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/IndexedDB": { - "modified": "2019-03-23T22:46:35.134Z", - "contributors": [ - "loella16", - "vanz" - ] - }, - "Glossaire/Injection_SQL": { - "modified": "2019-03-18T21:46:32.446Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Input_method_editor": { - "modified": "2020-07-20T14:35:12.540Z", - "contributors": [ - "tbetous" - ] - }, - "Glossaire/Instance": { - "modified": "2019-03-23T22:41:11.990Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Intergiciel": { - "modified": "2019-03-23T22:02:42.236Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Internationalisation_et_localisation": { - "modified": "2020-10-09T08:51:46.428Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Internet": { - "modified": "2019-03-23T22:53:44.936Z", - "contributors": [ - "loella16", - "Goofy", - "htindon" - ] - }, - "Glossaire/JSON": { - "modified": "2019-03-23T22:14:27.925Z", - "contributors": [ - "marcpicaud", - "BenoitL" - ] - }, - "Glossaire/Jank": { - "modified": "2019-01-17T02:07:53.363Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Java": { - "modified": "2019-03-23T22:40:52.651Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/JavaScript": { - "modified": "2019-07-06T09:36:27.477Z", - "contributors": [ - "JNa0", - "abvll", - "loella16", - "marie-ototoi", - "vanz" - ] - }, - "Glossaire/Keyword": { - "modified": "2019-03-23T22:40:38.596Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/LGPL": { - "modified": "2019-03-23T22:40:24.920Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Langage_de_programmation_de_haut_niveau": { - "modified": "2019-03-23T22:02:41.493Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Langage_de_programmation_dynamique": { - "modified": "2019-03-23T22:03:22.277Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Latence": { - "modified": "2019-10-26T12:09:56.716Z", - "contributors": [ - "ledenis" - ] - }, - "Glossaire/Lazy_load": { - "modified": "2020-08-28T17:22:57.514Z", - "contributors": [ - "jsiny" - ] - }, - "Glossaire/Ligature": { - "modified": "2019-03-23T22:40:33.596Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Lignes_de_grille_(Row)": { - "modified": "2019-03-23T22:03:16.488Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Lignes_de_grille_(lines)": { - "modified": "2019-03-23T22:03:18.469Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Locale": { - "modified": "2019-03-23T22:53:30.385Z", - "contributors": [ - "Goofy", - "Porkepix" - ] - }, - "Glossaire/MVC": { - "modified": "2019-03-23T22:02:46.018Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Machine_d_état": { - "modified": "2019-03-18T21:45:44.311Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/MathML": { - "modified": "2019-03-23T22:40:42.034Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Media": { - "modified": "2020-09-25T06:46:27.178Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Media/CSS": { - "modified": "2020-10-09T09:27:07.839Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Microsoft_Edge": { - "modified": "2019-03-23T22:42:05.336Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Microsoft_Internet_Explorer": { - "modified": "2019-03-23T22:41:39.204Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/MitM": { - "modified": "2019-03-23T22:02:42.338Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Mixin": { - "modified": "2019-03-23T22:40:20.738Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Mobile_d_abord": { - "modified": "2019-01-17T02:07:48.652Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Modem": { - "modified": "2019-03-23T22:01:18.215Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Moment_de_compilation": { - "modified": "2019-03-23T22:38:58.464Z", - "contributors": [ - "Jeremie", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Moteur_de_recherche": { - "modified": "2019-03-23T22:39:26.753Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Moteur_de_rendu": { - "modified": "2019-03-23T22:41:58.102Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Mozilla_Firefox": { - "modified": "2019-03-23T22:42:01.387Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Muable": { - "modified": "2019-03-23T22:01:19.010Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Métadonnée": { - "modified": "2019-03-23T22:39:13.695Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Méthode": { - "modified": "2019-03-23T22:48:52.633Z", - "contributors": [ - "loella16", - "Porkepix", - "Gibus", - "CLEm" - ] - }, - "Glossaire/NAT": { - "modified": "2019-03-23T22:41:06.552Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/NNTP": { - "modified": "2019-03-23T22:40:45.090Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/NaN": { - "modified": "2019-03-23T22:50:00.212Z", - "contributors": [ - "loella16", - "Gibus", - "Porkepix" - ] - }, - "Glossaire/Namespace": { - "modified": "2019-03-23T22:40:18.478Z", - "contributors": [ - "ylerjen" - ] - }, - "Glossaire/Native": { - "modified": "2019-03-23T22:41:39.546Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Navigateur": { - "modified": "2019-03-23T22:58:47.673Z", - "contributors": [ - "loella16", - "Porkepix", - "Goofy", - "Sodan" - ] - }, - "Glossaire/Netscape_Navigator": { - "modified": "2019-03-23T22:41:30.201Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Node.js": { - "modified": "2019-03-23T22:57:00.606Z", - "contributors": [ - "loella16", - "vanz", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/Nom_de_domaine": { - "modified": "2019-03-23T22:41:45.215Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Noms_réservés": { - "modified": "2019-03-23T22:01:08.667Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Normative": { - "modified": "2019-03-23T22:40:46.036Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Null": { - "modified": "2019-03-23T22:41:31.875Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Number": { - "modified": "2019-07-30T05:53:43.899Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/OTA": { - "modified": "2019-03-23T22:57:20.732Z", - "contributors": [ - "loella16", - "vanz", - "Goofy", - "dattaz" - ] - }, - "Glossaire/OWASP": { - "modified": "2019-03-23T22:40:34.868Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Objet": { - "modified": "2019-03-23T22:48:58.921Z", - "contributors": [ - "loella16", - "Cobrand", - "CLEm" - ] - }, - "Glossaire/Objet_global": { - "modified": "2019-08-12T02:59:41.540Z", - "contributors": [ - "SphinxKnight", - "yvisherve", - "loella16", - "xdelatour" - ] - }, - "Glossaire/Objet_parent": { - "modified": "2019-03-23T22:41:08.742Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/OpenGL": { - "modified": "2019-03-23T22:39:58.850Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/OpenSSL": { - "modified": "2019-03-23T22:40:31.413Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Opera_Browser": { - "modified": "2019-03-23T22:42:05.249Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Operand": { - "modified": "2019-03-23T22:42:03.272Z", - "contributors": [ - "loella16", - "SphinxKnight", - "xdelatour" - ] - }, - "Glossaire/Operator": { - "modified": "2019-03-23T22:41:59.764Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Ordre_canonique": { - "modified": "2019-03-23T22:03:27.512Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Origine": { - "modified": "2019-03-23T23:05:24.534Z", - "contributors": [ - "loella16", - "Jeremie", - "Watilin" - ] - }, - "Glossaire/P2P": { - "modified": "2019-03-23T22:57:06.814Z", - "contributors": [ - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/PAC": { - "modified": "2019-03-23T22:36:31.695Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/PDF": { - "modified": "2019-03-23T22:57:04.556Z", - "contributors": [ - "Porkepix", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/PHP": { - "modified": "2019-03-23T22:57:01.311Z", - "contributors": [ - "loella16", - "Porkepix", - "Toumitoun" - ] - }, - "Glossaire/PNG": { - "modified": "2019-03-23T22:41:50.073Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/POO": { - "modified": "2019-03-23T22:48:59.017Z", - "contributors": [ - "loella16", - "Gibus", - "CLEm" - ] - }, - "Glossaire/POP": { - "modified": "2019-03-23T22:40:50.975Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Paquet": { - "modified": "2020-10-12T03:29:11.646Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Parameter": { - "modified": "2019-03-23T22:40:31.655Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Parse": { - "modified": "2019-03-23T22:40:37.469Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Parser": { - "modified": "2019-03-23T22:40:29.017Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Pile_d_exécution": { - "modified": "2019-03-23T22:41:33.785Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Pistes_de_grille": { - "modified": "2019-03-23T22:02:47.082Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Pixel": { - "modified": "2019-03-23T22:40:37.845Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Pixel_CSS": { - "modified": "2020-10-05T04:42:31.706Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Polyfill": { - "modified": "2019-03-18T20:40:41.785Z", - "contributors": [ - "GaelWLR", - "caribouflex", - "loella16", - "Ostefanini" - ] - }, - "Glossaire/Polymorphisme": { - "modified": "2019-03-23T22:39:57.969Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Port": { - "modified": "2019-03-23T22:58:43.599Z", - "contributors": [ - "loella16", - "Porkepix", - "Lulamay", - "Jeremie" - ] - }, - "Glossaire/Portée": { - "modified": "2019-03-23T22:40:22.490Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Portée_globale": { - "modified": "2019-03-23T22:41:14.880Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Portée_locale": { - "modified": "2019-03-23T22:40:56.046Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Presto": { - "modified": "2019-03-23T22:42:11.378Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Primitive": { - "modified": "2019-03-23T22:48:58.549Z", - "contributors": [ - "loella16", - "Gibus", - "CLEm" - ] - }, - "Glossaire/Privilégié": { - "modified": "2019-03-23T22:41:29.520Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Programmation_orientée_prototype": { - "modified": "2019-03-23T22:01:08.082Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Progressive_web_apps": { - "modified": "2019-03-23T22:18:10.153Z", - "contributors": [ - "loella16", - "unpeudetout", - "Jeremie" - ] - }, - "Glossaire/Promesse": { - "modified": "2020-11-29T17:08:43.767Z", - "contributors": [ - "Dimitri_TRAVAILLOUX", - "JNa0", - "tpoisseau" - ] - }, - "Glossaire/Propriete_CSS": { - "modified": "2019-03-23T22:57:05.036Z", - "contributors": [ - "loella16", - "xdelatour", - "Goofy", - "htindon" - ] - }, - "Glossaire/Protocol": { - "modified": "2019-03-23T22:42:16.452Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Prototype": { - "modified": "2019-03-23T22:40:20.436Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Préfixe_Vendeur": { - "modified": "2019-03-23T22:40:15.581Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Pseudo-classe": { - "modified": "2019-03-23T22:40:46.877Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Pseudo-code": { - "modified": "2019-03-18T21:47:09.076Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Pseudo-élément": { - "modified": "2019-03-23T22:40:07.267Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Python": { - "modified": "2019-03-23T22:40:49.701Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/QUIC": { - "modified": "2020-10-12T03:40:33.880Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Quality_values": { - "modified": "2019-03-18T21:47:07.513Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/RAIL": { - "modified": "2020-10-11T05:55:50.398Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/RDF": { - "modified": "2019-03-23T22:40:14.803Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/REST": { - "modified": "2019-03-23T22:39:50.192Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/RGB": { - "modified": "2019-03-23T22:39:05.612Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/RIL": { - "modified": "2019-03-23T22:39:40.462Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/RNG": { - "modified": "2019-03-23T22:39:14.416Z", - "contributors": [ - "Goofy", - "xdelatour" - ] - }, - "Glossaire/RSS": { - "modified": "2019-03-23T22:40:15.677Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/RTF": { - "modified": "2019-03-23T22:42:05.530Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/RTP": { - "modified": "2020-09-30T07:30:27.350Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Ramasse-miettes": { - "modified": "2019-03-23T22:37:46.005Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Real_User_Monitoring": { - "modified": "2020-09-25T05:36:48.774Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Reflow": { - "modified": "2019-03-18T21:46:42.626Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Regular_expression": { - "modified": "2019-03-23T22:46:36.694Z", - "contributors": [ - "loella16", - "Porkepix", - "Hell_Carlito", - "sebastien-bartoli", - "vanz" - ] - }, - "Glossaire/Responsive_web_design": { - "modified": "2019-03-18T21:46:42.758Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Robot_d_indexation": { - "modified": "2019-03-23T22:39:26.515Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Robots.txt": { - "modified": "2019-03-23T22:39:27.042Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Ruby": { - "modified": "2019-03-23T22:41:17.345Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Récursion": { - "modified": "2019-03-23T22:41:09.659Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Référence": { - "modified": "2019-03-23T22:40:24.148Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Référence_d_objet": { - "modified": "2019-03-23T22:40:23.211Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/SCM": { - "modified": "2019-03-23T22:38:57.015Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/SCTP": { - "modified": "2019-03-18T21:46:38.825Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/SDP": { - "modified": "2019-03-23T22:41:12.448Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/SEO": { - "modified": "2019-03-18T21:46:24.952Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/SIMD": { - "modified": "2019-03-23T22:41:12.178Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/SISD": { - "modified": "2019-03-23T22:41:10.120Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/SLD": { - "modified": "2019-03-23T22:42:04.405Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/SMTP": { - "modified": "2019-03-23T22:40:17.302Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/SOAP": { - "modified": "2019-03-23T22:40:38.697Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/SQL": { - "modified": "2019-03-23T22:57:00.831Z", - "contributors": [ - "Porkepix", - "Toumitoun" - ] - }, - "Glossaire/SRI": { - "modified": "2019-03-18T21:46:37.925Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/SSL_Glossary": { - "modified": "2019-03-18T21:46:35.161Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/STUN": { - "modified": "2019-03-23T22:40:15.360Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/SVG": { - "modified": "2019-03-23T22:40:20.842Z", - "contributors": [ - "loella16", - "Porkepix", - "marie-ototoi", - "xdelatour" - ] - }, - "Glossaire/SVN": { - "modified": "2019-03-23T22:57:07.228Z", - "contributors": [ - "loella16", - "Toumitoun" - ] - }, - "Glossaire/Same-origin_policy": { - "modified": "2019-06-14T06:25:34.615Z", - "contributors": [ - "Watilin" - ] - }, - "Glossaire/Serveur": { - "modified": "2019-03-23T22:41:08.500Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Serveur_Web": { - "modified": "2020-10-11T04:52:56.117Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Serveur_proxy": { - "modified": "2019-03-18T21:47:12.657Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Shim": { - "modified": "2019-03-18T21:45:43.959Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Signature": { - "modified": "2019-03-23T22:40:17.194Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Signature/Fonction": { - "modified": "2019-03-23T22:40:21.442Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Signature/Sécurité": { - "modified": "2019-03-23T22:40:22.990Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Site": { - "modified": "2020-10-11T05:33:50.641Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Site_map": { - "modified": "2020-10-11T05:42:01.722Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Sloppy_mode": { - "modified": "2019-03-18T21:45:43.833Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Slug": { - "modified": "2019-03-18T21:45:46.971Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Specification": { - "modified": "2019-03-23T22:41:43.100Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Statement": { - "modified": "2019-03-23T22:42:03.846Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/String": { - "modified": "2019-03-23T22:40:00.102Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Structure_de_contrôle": { - "modified": "2019-03-23T22:41:59.034Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Structure_de_données": { - "modified": "2019-09-04T16:13:28.582Z", - "contributors": [ - "SphinxKnight", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Symbole": { - "modified": "2019-03-23T22:39:08.053Z", - "contributors": [ - "Nopias", - "loella16", - "xdelatour" - ] - }, - "Glossaire/Synchronous": { - "modified": "2019-03-23T22:40:33.779Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Syntax_error": { - "modified": "2019-03-23T22:41:06.855Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Syntaxe": { - "modified": "2019-03-23T22:39:03.649Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Sélecteur_CSS": { - "modified": "2019-03-23T22:39:53.102Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Sémantique": { - "modified": "2019-03-23T22:38:43.484Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Sérialisation": { - "modified": "2019-03-23T22:03:28.172Z", - "contributors": [ - "macmorning", - "loella16" - ] - }, - "Glossaire/TCP": { - "modified": "2019-03-23T22:57:04.926Z", - "contributors": [ - "Porkepix", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/TCP_handshake": { - "modified": "2019-09-15T08:41:25.795Z", - "contributors": [ - "estelle" - ] - }, - "Glossaire/TCP_slow_start": { - "modified": "2019-09-02T01:46:30.468Z", - "contributors": [ - "estelle" - ] - }, - "Glossaire/TLD": { - "modified": "2019-03-23T22:38:54.058Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/TLS": { - "modified": "2019-03-23T22:39:14.027Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/TOFU": { - "modified": "2019-03-18T21:45:44.983Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Glossaire/TTL": { - "modified": "2019-03-18T21:45:45.855Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Glossaire/TURN": { - "modified": "2019-03-23T22:40:25.013Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Tampon": { - "modified": "2019-03-18T21:45:35.327Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Telnet": { - "modified": "2019-03-23T22:42:10.476Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Test_de_fumée": { - "modified": "2019-03-18T21:45:36.505Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Texel": { - "modified": "2020-10-11T05:05:07.567Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Texte_brut": { - "modified": "2019-03-23T22:39:26.132Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Three_js": { - "modified": "2019-03-23T22:40:32.870Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Time_to_interactive": { - "modified": "2020-11-10T08:04:33.624Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/Transmission_Control_Protocol_(TCP)": { - "modified": "2019-09-13T20:23:27.919Z", - "contributors": [ - "estelle" - ] - }, - "Glossaire/Tree_shaking": { - "modified": "2019-03-18T21:45:48.808Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Tri_par_cartes": { - "modified": "2019-03-23T22:25:45.561Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "htindon" - ] - }, - "Glossaire/Trident": { - "modified": "2019-03-23T22:57:05.971Z", - "contributors": [ - "loella16", - "GeekShadow" - ] - }, - "Glossaire/Truthy": { - "modified": "2019-03-23T22:43:00.610Z", - "contributors": [ - "loella16", - "davidbourguignon", - "jswisher", - "raoul632" - ] - }, - "Glossaire/Type": { - "modified": "2019-03-23T22:42:01.802Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Type_MIME": { - "modified": "2019-03-23T22:40:46.635Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Type_coercion": { - "modified": "2020-08-28T17:39:29.859Z", - "contributors": [ - "jsiny" - ] - }, - "Glossaire/UDP": { - "modified": "2019-03-23T22:41:59.662Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/UI": { - "modified": "2019-03-23T22:41:37.563Z", - "contributors": [ - "SphinxKnight", - "Gibus", - "xdelatour" - ] - }, - "Glossaire/URI": { - "modified": "2019-03-23T22:57:00.503Z", - "contributors": [ - "loella16", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/URL": { - "modified": "2020-10-19T13:47:26.150Z", - "contributors": [ - "Voulto", - "loella16", - "marie-ototoi", - "Porkepix", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/URN": { - "modified": "2019-03-23T22:39:50.091Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/UTF-8": { - "modified": "2019-03-23T22:39:53.487Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/UX": { - "modified": "2019-03-23T22:32:29.107Z", - "contributors": [ - "Gibus", - "htindon" - ] - }, - "Glossaire/Unicode": { - "modified": "2019-03-18T21:45:46.646Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Usenet": { - "modified": "2019-03-23T22:40:09.482Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/User_agent": { - "modified": "2019-03-23T22:40:37.671Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Valeur": { - "modified": "2019-03-23T22:40:20.340Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Validator": { - "modified": "2019-03-23T22:57:06.137Z", - "contributors": [ - "loella16", - "Porkepix", - "Toumitoun" - ] - }, - "Glossaire/Variable": { - "modified": "2019-03-23T22:42:09.601Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Variable_globale": { - "modified": "2019-03-23T22:41:13.951Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Variable_locale": { - "modified": "2019-03-23T22:41:09.572Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Viewport": { - "modified": "2019-03-23T22:39:08.726Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/VoIP": { - "modified": "2019-03-23T22:39:39.990Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/W3C": { - "modified": "2019-03-23T22:57:06.246Z", - "contributors": [ - "Porkepix", - "Goofy", - "Toumitoun" - ] - }, - "Glossaire/WAI": { - "modified": "2019-03-23T22:39:58.348Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/WCAG": { - "modified": "2019-03-23T22:40:02.080Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/WHATWG": { - "modified": "2019-03-23T22:40:20.041Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/WebDAV": { - "modified": "2019-03-23T22:40:37.379Z", - "contributors": [ - "tonybengue", - "xdelatour" - ] - }, - "Glossaire/WebExtensions": { - "modified": "2019-03-23T22:07:24.912Z", - "contributors": [ - "Mozinet" - ] - }, - "Glossaire/WebGL": { - "modified": "2019-03-23T22:40:38.243Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/WebIDL": { - "modified": "2019-03-23T22:40:18.690Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/WebKit": { - "modified": "2019-03-23T22:40:36.496Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/WebRTC": { - "modified": "2019-03-23T22:41:08.284Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/WebSockets": { - "modified": "2019-03-23T22:40:37.281Z", - "contributors": [ - "Raul6469", - "loella16", - "xdelatour" - ] - }, - "Glossaire/WebVTT": { - "modified": "2019-03-18T21:45:46.184Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/Web_standards": { - "modified": "2019-03-23T22:40:24.427Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/Whitespace": { - "modified": "2020-09-25T06:24:07.540Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/World_Wide_Web": { - "modified": "2019-03-23T22:40:59.764Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/Wrapper": { - "modified": "2019-03-23T22:40:25.100Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/XForm": { - "modified": "2019-03-23T22:40:51.846Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/XHR_(XMLHttpRequest)": { - "modified": "2019-03-18T21:45:35.065Z", - "contributors": [ - "Porkepix", - "loella16" - ] - }, - "Glossaire/XInclude": { - "modified": "2019-03-18T21:44:11.126Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/XLink": { - "modified": "2019-03-23T22:39:40.575Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/XML": { - "modified": "2019-03-23T22:41:20.251Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/XPath": { - "modified": "2019-03-23T22:40:53.901Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/XQuery": { - "modified": "2019-03-23T22:40:51.223Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/XSLT": { - "modified": "2019-03-23T22:40:34.285Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Zones_de_grille": { - "modified": "2019-06-14T08:10:14.682Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/application_context": { - "modified": "2019-03-23T22:25:39.268Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "htindon" - ] - }, - "Glossaire/applications_web_modernes": { - "modified": "2019-01-17T02:12:55.112Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/array": { - "modified": "2019-03-23T23:00:07.104Z", - "contributors": [ - "loella16", - "Porkepix", - "Gibus", - "CLEm", - "Jeremie", - "Goofy", - "htindon" - ] - }, - "Glossaire/beacon": { - "modified": "2020-09-25T05:38:18.987Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/brotli_compression": { - "modified": "2020-09-25T05:08:06.594Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/cacheable": { - "modified": "2019-03-23T22:03:25.242Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/codage_caracteres": { - "modified": "2019-03-23T22:25:41.959Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "htindon" - ] - }, - "Glossaire/compression_avec_perte": { - "modified": "2020-05-17T20:09:32.712Z", - "contributors": [ - "pauladeville" - ] - }, - "Glossaire/défi_réponse": { - "modified": "2019-03-23T22:03:29.414Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/first_meaningful_paint": { - "modified": "2020-11-10T08:20:23.558Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/fonction_anonyme_auto-executante": { - "modified": "2019-03-18T21:27:08.446Z", - "contributors": [ - "Porkepix" - ] - }, - "Glossaire/gif": { - "modified": "2019-03-23T22:42:12.743Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/grid_container": { - "modified": "2019-03-30T11:19:32.680Z", - "contributors": [ - "kaderamrichat" - ] - }, - "Glossaire/hash": { - "modified": "2019-03-23T22:39:11.400Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/https": { - "modified": "2019-03-23T22:41:38.751Z", - "contributors": [ - "SphinxKnight", - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/jQuery": { - "modified": "2019-03-18T21:44:06.026Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/jpeg": { - "modified": "2019-03-23T22:42:05.422Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/ligne_de_base": { - "modified": "2019-08-25T18:36:58.702Z", - "contributors": [ - "Pols12" - ] - }, - "Glossaire/loop": { - "modified": "2019-03-23T22:41:58.930Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/ltr": { - "modified": "2019-01-16T21:54:05.497Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/mime": { - "modified": "2019-03-23T22:41:30.560Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/minification": { - "modified": "2020-10-09T09:12:43.676Z", - "contributors": [ - "Voulto" - ] - }, - "Glossaire/modularité": { - "modified": "2019-03-23T22:40:53.509Z", - "contributors": [ - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/non-normative": { - "modified": "2019-03-23T22:40:53.799Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/pare-feu": { - "modified": "2019-03-23T22:33:06.193Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossaire/percent-encoding": { - "modified": "2019-03-23T22:01:15.210Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/preprocesseur_CSS": { - "modified": "2019-03-23T22:03:31.823Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/privileged_code": { - "modified": "2019-03-18T21:44:10.644Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/rectangle_limitation_minimum": { - "modified": "2019-01-17T00:01:56.249Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "htindon" - ] - }, - "Glossaire/requete_pre-verification": { - "modified": "2019-03-23T22:14:22.077Z", - "contributors": [ - "Porkepix", - "elias551", - "loella16", - "Yves_ASTIER" - ] - }, - "Glossaire/rtl": { - "modified": "2019-01-16T20:52:28.089Z", - "contributors": [ - "Goofy", - "Porkepix" - ] - }, - "Glossaire/suite_de_chiffrement": { - "modified": "2019-03-23T22:32:22.378Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "sebastien-bartoli" - ] - }, - "Glossaire/sécurisée": { - "modified": "2019-03-18T21:46:28.796Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/typage_dynamique": { - "modified": "2019-03-23T22:41:39.637Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/typage_statique": { - "modified": "2019-03-23T22:41:24.853Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/undefined": { - "modified": "2019-03-23T22:04:28.704Z", - "contributors": [ - "loella16", - "michelc" - ] - }, - "Glossaire/webm": { - "modified": "2019-03-23T22:40:30.477Z", - "contributors": [ - "loella16", - "xdelatour" - ] - }, - "Glossaire/webp": { - "modified": "2019-03-23T22:40:38.141Z", - "contributors": [ - "xdelatour" - ] - }, - "Glossaire/Élément": { - "modified": "2019-03-18T21:38:38.555Z", - "contributors": [ - "AurelieBayre", - "gnoyaze" - ] - }, - "Glossaire/Éléments_supports_de_script": { - "modified": "2019-03-18T21:46:41.808Z", - "contributors": [ - "loella16" - ] - }, - "Glossaire/évènement": { - "modified": "2019-03-23T22:03:33.571Z", - "contributors": [ - "loella16" - ] - }, - "Glossary/Accessibility_tree": { - "modified": "2020-10-23T07:47:32.798Z", - "contributors": [ - "chrisdavidmills", - "Voulto", - "UFOcatcher" - ] - }, - "Glossary/Block": { - "modified": "2019-03-23T22:56:58.228Z", - "contributors": [ - "loella16", - "vanz", - "Sheppy" - ] - }, - "Glossary/Block/Block_(CSS)": { - "modified": "2019-03-23T22:56:52.690Z", - "contributors": [ - "loella16", - "Goofy", - "Toumitoun" - ] - }, - "Glossary/Block/Scripting": { - "modified": "2019-03-23T22:42:03.185Z", - "contributors": [ - "SphinxKnight", - "loella16", - "xdelatour" - ] - }, - "Glossary/Node": { - "modified": "2019-03-23T22:42:04.167Z", - "contributors": [ - "xdelatour", - "klez" - ] - }, - "Glossary/Node/DOM": { - "modified": "2019-03-23T22:41:33.687Z", - "contributors": [ - "loella16", - "htindon", - "Gibus", - "xdelatour" - ] - }, - "Glossary/Node/réseau": { - "modified": "2019-03-23T22:42:03.351Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "Glossary/property": { - "modified": "2019-03-23T22:40:25.191Z", - "contributors": [ - "xdelatour", - "Jeremie" - ] - }, - "Glossary/property/JavaScript": { - "modified": "2019-03-23T22:40:28.485Z", - "contributors": [ - "loella16", - "Porkepix", - "xdelatour" - ] - }, - "HTML/Manipulating_video_using_canvas": { - "modified": "2019-03-23T23:19:48.901Z", - "contributors": [ - "loella16", - "kuronoyurei" - ] - }, - "Inspecteur_DOM": { - "modified": "2020-07-16T22:36:24.288Z", - "contributors": [ - "wbamberg", - "maximelore", - "tregagnon", - "Delapouite", - "Mgjbot", - "BenoitL", - "Sheppy", - "Chbok" - ] - }, - "Inspecteur_DOM/DOM_Inspector_FAQ": { - "modified": "2020-07-16T22:36:25.515Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Inspecteur_DOM/Internals": { - "modified": "2020-07-16T22:36:25.144Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Inspecteur_DOM/Introduction_to_DOM_Inspector": { - "modified": "2020-07-16T22:36:25.833Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Introduction_(alternative)": { - "modified": "2019-03-23T23:40:01.462Z", - "contributors": [ - "m-r-r", - "FredB" - ] - }, - "Introduction_à_la_cryptographie_à_clef_publique/Certificats_et_authentification": { - "modified": "2019-03-24T00:12:07.320Z", - "contributors": [ - "fsiliadin", - "SphinxKnight", - "Sebastianz", - "Sheppy", - "nterray", - "BenoitL", - "Fredchat" - ] - }, - "Introduction_à_la_cryptographie_à_clef_publique/Chiffrement_et_déchiffrement": { - "modified": "2019-03-23T23:47:48.910Z", - "contributors": [ - "acemann", - "Sebastianz", - "CedricP", - "Fredchat" - ] - }, - "Introduction_à_la_cryptographie_à_clef_publique/Gestion_des_certificats": { - "modified": "2019-03-23T23:47:44.500Z", - "contributors": [ - "acemann", - "Sebastianz", - "fscholz", - "CedricP", - "Fredchat" - ] - }, - "Introduction_à_la_cryptographie_à_clef_publique/Les_problèmes_de_sécurité_sur_Internet": { - "modified": "2019-03-23T23:47:50.104Z", - "contributors": [ - "Sebastianz", - "CedricP", - "Fredchat" - ] - }, - "Introduction_à_la_cryptographie_à_clef_publique/Signatures_numériques": { - "modified": "2019-03-23T23:47:49.334Z", - "contributors": [ - "fsiliadin", - "Sebastianz", - "CedricP", - "Fredchat" - ] - }, - "JavaScript/Reference/Annexes/Fonctionnalités_dépréciées": { - "modified": "2020-03-12T19:36:16.242Z", - "contributors": [ - "SphinxKnight", - "soleuu", - "Vnicolas", - "teoli", - "LaBoumerde", - "matteodelabre" - ] - }, - "Jeux": { - "modified": "2019-09-09T15:31:44.765Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "gnoyaze", - "Zefling", - "loella16", - "Tetrastorm" - ] - }, - "Jeux/Anatomie": { - "modified": "2019-01-17T06:54:31.636Z", - "contributors": [ - "wbamberg", - "und3rh00d", - "loella16", - "ericfourmaux" - ] - }, - "Jeux/Exemples": { - "modified": "2019-03-23T22:44:48.124Z", - "contributors": [ - "wbamberg", - "loella16", - "Gibus", - "samuelbeloola", - "BNedry" - ] - }, - "Jeux/Index": { - "modified": "2019-01-16T21:55:43.323Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Jeux/Introduction": { - "modified": "2019-04-23T09:34:16.784Z", - "contributors": [ - "As-Sinder", - "wbamberg", - "loella16", - "DeathPixHell", - "CarlosAvim", - "Tetrastorm", - "Goofy", - "SphinxKnight" - ] - }, - "Jeux/Introduction_to_HTML5_Game_Gevelopment_(summary)": { - "modified": "2020-09-28T01:50:43.797Z", - "contributors": [ - "Voulto", - "JNa0", - "dragon38800" - ] - }, - "Jeux/Publier_jeux": { - "modified": "2020-09-28T03:39:21.488Z", - "contributors": [ - "Voulto", - "wbamberg", - "NerOcrO", - "Tipoussin" - ] - }, - "Jeux/Publier_jeux/Game_monetization": { - "modified": "2020-10-08T10:55:08.029Z", - "contributors": [ - "Voulto" - ] - }, - "La_sécurité_dans_Firefox_2": { - "modified": "2019-03-23T23:54:31.258Z", - "contributors": [ - "wbamberg", - "Mgjbot", - "BenoitL", - "Fredchat", - "Chbok" - ] - }, - "Learn/CSS/First_steps": { - "modified": "2020-10-08T12:02:37.318Z", - "contributors": [ - "geraldventadour", - "ylerjen", - "smeden-lod", - "nherbaut", - "chrisdavidmills" - ] - }, - "Learn/CSS/First_steps/Getting_started": { - "modified": "2020-10-20T05:38:33.608Z", - "contributors": [ - "SebastienLatouche", - "smeden-lod" - ] - }, - "Learn/CSS/First_steps/How_CSS_is_structured": { - "modified": "2020-11-27T19:02:59.051Z", - "contributors": [ - "Chomchaum", - "smeden-lod", - "mrbbp" - ] - }, - "Learn/CSS/First_steps/How_CSS_works": { - "modified": "2020-07-16T22:28:00.239Z", - "contributors": [ - "smeden-lod" - ] - }, - "Learn/CSS/First_steps/Qu_est_ce_que_CSS": { - "modified": "2020-10-15T22:25:55.680Z", - "contributors": [ - "geraldventadour", - "SphinxKnight", - "smeden-lod" - ] - }, - "Learn/CSS/First_steps/Using_your_new_knowledge": { - "modified": "2020-07-16T22:28:03.815Z", - "contributors": [ - "SphinxKnight", - "smeden-lod" - ] - }, - "Learn/CSS/Styling_text": { - "modified": "2020-07-16T22:25:57.902Z", - "contributors": [ - "Dralyab", - "zakaila", - "loella16", - "chrisdavidmills" - ] - }, - "Learn/CSS/Styling_text/Mise_en_forme_des_liens": { - "modified": "2020-11-15T18:10:36.319Z", - "contributors": [ - "NemoNobobyPersonne", - "Dralyab" - ] - }, - "Learn/CSS/Styling_text/Styling_lists": { - "modified": "2020-07-16T22:26:12.463Z", - "contributors": [ - "Dralyab", - "loella16", - "BOBY2017" - ] - }, - "Learn/CSS/Styling_text/Typesetting_a_homepage": { - "modified": "2020-07-16T22:26:26.346Z", - "contributors": [ - "Dralyab" - ] - }, - "Learn/CSS/Styling_text/Web_fonts": { - "modified": "2020-07-16T22:26:23.494Z", - "contributors": [ - "Dralyab" - ] - }, - "Learn/CSS/Styling_text/initiation-mise-en-forme-du-texte": { - "modified": "2020-07-16T22:26:05.430Z", - "contributors": [ - "Dralyab", - "loella16", - "Oliv" - ] - }, - "Learn/JavaScript/First_steps": { - "modified": "2020-07-16T22:29:50.440Z", - "contributors": [ - "smeden-lod", - "mauradelrosario", - "Dralyab", - "tonybengue", - "loella16", - "Badacadabra", - "daufinsyd", - "chrisdavidmills" - ] - }, - "Learn/JavaScript/First_steps/A_first_splash": { - "modified": "2020-07-16T22:30:17.669Z", - "contributors": [ - "smeden-lod", - "Floles", - "Eric-ciccotti", - "clamb", - "Dralyab", - "tonybengue", - "jumperparis", - "Merkrynis", - "withedouard", - "moziyin76" - ] - }, - "Learn/JavaScript/First_steps/Math": { - "modified": "2020-10-27T06:47:01.734Z", - "contributors": [ - "chuck2kill", - "Chomchaum", - "Jim-Arby", - "grandoc", - "Dralyab", - "tonybengue" - ] - }, - "Learn/JavaScript/First_steps/Silly_story_generator": { - "modified": "2020-07-16T22:31:01.217Z", - "contributors": [ - "smeden-lod", - "daftaupe", - "Opsylac" - ] - }, - "Learn/JavaScript/First_steps/Strings": { - "modified": "2020-07-16T22:30:39.299Z", - "contributors": [ - "smeden-lod", - "Jim-Arby", - "goofy_mdn", - "grandoc", - "Dralyab", - "be-math", - "tonybengue" - ] - }, - "Learn/JavaScript/First_steps/Testes_vos_competence:_Tableaux": { - "modified": "2020-10-17T18:40:31.138Z", - "contributors": [ - "tonybengue" - ] - }, - "Learn/JavaScript/First_steps/Variables": { - "modified": "2020-07-16T22:29:58.969Z", - "contributors": [ - "AntoineJT", - "innocenzi", - "smeden-lod", - "chrisdavidmills", - "Jim-Arby", - "Jumper754", - "Eric-ciccotti", - "grandoc", - "Dralyab", - "tonybengue" - ] - }, - "Learn/JavaScript/First_steps/What_is_JavaScript": { - "modified": "2020-07-16T22:30:07.337Z", - "contributors": [ - "smeden-lod", - "ludivinepoussier", - "chrisdavidmills", - "SphinxKnight", - "wkz3w59", - "abvll", - "Kinskikick", - "Eric-ciccotti", - "clamb", - "Dralyab", - "codingk8", - "TheStarrK", - "tonybengue", - "Idlus" - ] - }, - "Learn/JavaScript/First_steps/What_went_wrong": { - "modified": "2020-07-16T22:30:32.918Z", - "contributors": [ - "smeden-lod", - "clamb", - "codeFighting", - "Dralyab", - "tonybengue", - "macjpster" - ] - }, - "Learn/JavaScript/First_steps/methode_chaine_utile": { - "modified": "2020-07-16T22:30:46.814Z", - "contributors": [ - "smeden-lod", - "Dralyab", - "Iwazaru", - "tonybengue" - ] - }, - "Learn/JavaScript/First_steps/tableaux": { - "modified": "2020-07-16T22:30:53.940Z", - "contributors": [ - "smeden-lod", - "tavax", - "Dralyab", - "tonybengue" - ] - }, - "Learn/JavaScript/Objects": { - "modified": "2020-07-16T22:31:49.517Z", - "contributors": [ - "smeden-lod", - "tonybengue", - "elWombator", - "manuwhat", - "loella16", - "breizhrunner", - "chrisdavidmills" - ] - }, - "Learn/JavaScript/Objects/Ajouter_des_fonctionnalités_à_notre_démo_de_balles_rebondissantes": { - "modified": "2020-07-16T22:32:34.729Z", - "contributors": [ - "AkwindFr", - "tonybengue" - ] - }, - "Learn/JavaScript/Objects/Basics": { - "modified": "2020-09-18T09:37:24.602Z", - "contributors": [ - "GDFtj", - "FloppyJunior", - "franssu", - "grandoc", - "spike008t", - "srimko", - "LDCL", - "Halkeand", - "SphinxKnight", - "mouffy" - ] - }, - "Learn/JavaScript/Objects/Heritage": { - "modified": "2020-07-16T22:32:13.707Z", - "contributors": [ - "franssu", - "loranger32", - "elWombator", - "lobertrand", - "manuwhat", - "Yopai", - "AntrHaxx", - "MartyO256", - "Alpha" - ] - }, - "Learn/JavaScript/Objects/JSON": { - "modified": "2020-07-16T22:32:25.278Z", - "contributors": [ - "smeden-lod", - "FloppyJunior", - "ThCarrere", - "newick", - "manuwhat", - "sebastien_colbe", - "darthyoh" - ] - }, - "Learn/JavaScript/Objects/JS_orienté-objet": { - "modified": "2020-07-16T22:32:05.419Z", - "contributors": [ - "grandoc", - "FloppyJunior", - "vacarme", - "zoora", - "Jetinho", - "elWombator", - "manuwhat", - "antoninha", - "LDCL", - "Alpha", - "SphinxKnight" - ] - }, - "Learn/JavaScript/Objects/Prototypes_Objet": { - "modified": "2020-07-16T22:32:19.975Z", - "contributors": [ - "grandoc", - "Etheonor", - "aSeches", - "zoora", - "Jetinho", - "JonGarbayo", - "LDCL", - "Alpha" - ] - }, - "Learn/JavaScript/Objects/la_construction_d_objet_en_pratique": { - "modified": "2020-07-16T22:32:31.265Z", - "contributors": [ - "smeden-lod", - "loranger32", - "manuwhat" - ] - }, - "Learn/Performance": { - "modified": "2020-11-10T09:39:07.479Z", - "contributors": [ - "Voulto", - "estelle" - ] - }, - "Learn/Performance/CSS": { - "modified": "2020-11-10T09:14:31.465Z", - "contributors": [ - "Voulto", - "Romain04" - ] - }, - "Learn/Performance/pourquoi_performance_web": { - "modified": "2020-11-10T09:10:02.087Z", - "contributors": [ - "Voulto" - ] - }, - "Learn/Server-side": { - "modified": "2020-08-31T06:16:11.413Z", - "contributors": [ - "Voulto", - "AKAsebu", - "aurelieg", - "KurtC0ba1n", - "tonybengue", - "serorl", - "chrisdavidmills" - ] - }, - "Learn/Server-side/Django": { - "modified": "2020-07-16T22:36:32.263Z", - "contributors": [ - "biface", - "skyfrigate", - "As-Sinder", - "KurtC0ba1n", - "pierrotmagic" - ] - }, - "Learn/Server-side/Django/Admin_site": { - "modified": "2020-07-16T22:37:03.285Z", - "contributors": [ - "biface" - ] - }, - "Learn/Server-side/Django/Forms": { - "modified": "2020-07-16T22:37:31.019Z", - "contributors": [ - "BrRoman", - "Elbofino", - "ben5962" - ] - }, - "Learn/Server-side/Django/Home_page": { - "modified": "2020-07-16T22:37:08.874Z", - "contributors": [ - "biface" - ] - }, - "Learn/Server-side/Django/Introduction": { - "modified": "2020-07-16T22:36:38.887Z", - "contributors": [ - "olivierdupon", - "edaveau", - "biface", - "As-Sinder", - "KurtC0ba1n" - ] - }, - "Learn/Server-side/Django/Models": { - "modified": "2020-11-15T11:16:41.925Z", - "contributors": [ - "fsaid", - "Moh-Said", - "biface", - "skyfrigate" - ] - }, - "Learn/Server-side/Django/Testing": { - "modified": "2020-07-16T22:37:36.868Z", - "contributors": [ - "BrRoman" - ] - }, - "Learn/Server-side/Django/Tutorial_local_library_website": { - "modified": "2020-07-16T22:36:48.972Z", - "contributors": [ - "biface", - "skyfrigate" - ] - }, - "Learn/Server-side/Django/Vues_generiques": { - "modified": "2020-08-10T12:14:32.253Z", - "contributors": [ - "BrRoman" - ] - }, - "Learn/Server-side/Django/development_environment": { - "modified": "2020-07-16T22:36:44.147Z", - "contributors": [ - "edaveau" - ] - }, - "Learn/Server-side/Django/skeleton_website": { - "modified": "2020-11-14T22:07:57.460Z", - "contributors": [ - "ThuringEnigma", - "skyfrigate", - "biface" - ] - }, - "Learn/Server-side/Express_Nodejs": { - "modified": "2020-07-16T22:37:52.128Z", - "contributors": [ - "smeden-lod", - "PhilippePerret", - "Alan_Braut", - "serorl" - ] - }, - "Learn/Server-side/Express_Nodejs/Introduction": { - "modified": "2020-07-16T22:38:09.613Z", - "contributors": [ - "JNa0", - "carlyne", - "ThCarrere", - "PhilippePerret", - "codingk8", - "Raulel" - ] - }, - "Learn/Server-side/Premiers_pas": { - "modified": "2020-07-16T22:36:08.675Z", - "contributors": [ - "Etheonor", - "smeden-lod", - "SphinxKnight", - "JeffD", - "KurtC0ba1n", - "ayshiff", - "chrisdavidmills" - ] - }, - "Learn/Server-side/Premiers_pas/Client-Serveur": { - "modified": "2020-07-16T22:36:19.848Z", - "contributors": [ - "smeden-lod", - "houckontape", - "SphinxKnight", - "ThCarrere" - ] - }, - "Learn/Server-side/Premiers_pas/Introduction": { - "modified": "2020-07-16T22:36:13.996Z", - "contributors": [ - "smeden-lod", - "SphinxKnight", - "ThCarrere", - "a-mt" - ] - }, - "Learn/Server-side/Premiers_pas/Web_frameworks": { - "modified": "2020-07-16T22:36:24.273Z", - "contributors": [ - "smeden-lod", - "houckontape", - "SphinxKnight", - "Mania" - ] - }, - "Learn/Server-side/Premiers_pas/Website_security": { - "modified": "2020-07-16T22:36:28.165Z", - "contributors": [ - "smeden-lod", - "ThCarrere", - "LeMilitaire", - "SphinxKnight", - "JeffD" - ] - }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks": { - "modified": "2020-09-15T15:45:33.414Z", - "contributors": [ - "JNa0", - "Voulto", - "CodeDotJS" - ] - }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Introduction": { - "modified": "2020-11-21T11:56:14.049Z", - "contributors": [ - "tonybengue" - ] - }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Main_features": { - "modified": "2020-11-21T11:57:54.636Z", - "contributors": [ - "tonybengue" - ] - }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started": { - "modified": "2020-11-21T12:01:48.747Z", - "contributors": [ - "tonybengue", - "florestalclaudel878" - ] - }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_todo_list_beginning": { - "modified": "2020-11-19T13:18:09.787Z", - "contributors": [ - "tonybengue" - ] - }, - "Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started": { - "modified": "2020-10-03T00:57:04.281Z", - "contributors": [ - "duduindo", - "Anonymous" - ] - }, - "Learn/Tools_and_testing/Cross_browser_testing": { - "modified": "2020-11-23T17:27:15.888Z", - "contributors": [ - "Chomchaum", - "Voulto", - "wbamberg", - "arai" - ] - }, - "Learn/Tools_and_testing/Cross_browser_testing/Accessibilité": { - "modified": "2020-07-16T22:39:16.445Z", - "contributors": [ - "Dralyab", - "Azyme" - ] - }, - "Learn/Tools_and_testing/Cross_browser_testing/HTML_et_CSS": { - "modified": "2020-07-16T22:39:09.777Z", - "contributors": [ - "NacimHarfouche", - "Azyme" - ] - }, - "Learn/Tools_and_testing/Cross_browser_testing/Introduction": { - "modified": "2020-07-16T22:39:03.351Z", - "contributors": [ - "Azyme" - ] - }, - "Learn/Tools_and_testing/Cross_browser_testing/JavaScript": { - "modified": "2020-07-16T22:39:13.632Z", - "contributors": [ - "jedepaepe", - "Azyme" - ] - }, - "Learn/Tools_and_testing/Cross_browser_testing/Testing_strategies": { - "modified": "2020-07-16T22:39:06.838Z", - "contributors": [ - "Azyme" - ] - }, - "Learn/Tools_and_testing/Understanding_client-side_tools": { - "modified": "2020-09-04T08:38:04.330Z", - "contributors": [ - "Voulto", - "chrisdavidmills" - ] - }, - "Learn/Tools_and_testing/Understanding_client-side_tools/Ligne_de_commande": { - "modified": "2020-08-07T09:37:14.013Z", - "contributors": [ - "voronamanga" - ] - }, - "Localization": { - "modified": "2019-03-24T00:14:08.788Z", - "contributors": [ - "loella16", - "ethertank", - "DirkS", - "Mgjbot", - "Fredchat", - "BenoitL", - "Goofy", - "Verruckt", - "Takenbot", - "Chbok" - ] - }, - "MDN": { - "modified": "2020-02-08T12:54:31.725Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "wbamberg", - "htindon", - "Jeremie", - "tregagnon", - "teoli", - "wakka27", - "Sheppy" - ] - }, - "MDN/A_propos": { - "modified": "2019-03-24T00:12:46.908Z", - "contributors": [ - "wbamberg", - "Porkepix", - "Mozinet", - "fscholz", - "jswisher", - "microsoft", - "wakka27", - "Jeremie", - "teoli", - "tregagnon", - "le penseur", - "Akiro", - "BenoitL", - "Petrus", - "Omnisilver", - "Gege2", - "Dria", - "Cbeard", - "Anonymous" - ] - }, - "MDN/Contribute": { - "modified": "2020-08-31T06:19:39.661Z", - "contributors": [ - "Voulto", - "wbamberg", - "zakaila", - "callmemagnus", - "Danette41240", - "SphinxKnight", - "Porkepix", - "thbil", - "Goofy", - "Baball", - "teoli", - "wakka27", - "jswisher" - ] - }, - "MDN/Contribute/Feedback": { - "modified": "2020-09-30T17:50:52.899Z", - "contributors": [ - "chrisdavidmills", - "jswisher", - "SphinxKnight", - "wbamberg", - "Yvain", - "Jnthnctt", - "PifyZ" - ] - }, - "MDN/Contribute/Getting_started": { - "modified": "2020-09-30T17:11:12.542Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "yasminamess", - "wbamberg", - "NerOcrO", - "Burgito", - "black_cat", - "PhilippePerret", - "Axnyff", - "JDev4U", - "Jeremie", - "mliatt", - "manubcd", - "stephane34", - "Benedetti", - "Nothus", - "BiGrEgGaErOoTs", - "Frigory", - "Goofy", - "B_M", - "tregagnon", - "guillaumev", - "Lamaw", - "G-de-Bruges", - "PetiPandaRou", - "wakka27" - ] - }, - "MDN/Contribute/Howto": { - "modified": "2019-01-16T18:23:52.592Z", - "contributors": [ - "wbamberg", - "Porkepix", - "Baball", - "Sheppy" - ] - }, - "MDN/Contribute/Howto/Comment_créer_un_compte_sur_MDN": { - "modified": "2019-01-16T18:25:23.702Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "Goofy" - ] - }, - "MDN/Contribute/Howto/Creer_un_exercice_interactif_pour_apprendre_le_web": { - "modified": "2019-07-17T03:15:29.432Z", - "contributors": [ - "SphinxKnight", - "AkwindFr" - ] - }, - "MDN/Contribute/Howto/Set_the_summary_for_a_page": { - "modified": "2019-03-23T22:55:58.937Z", - "contributors": [ - "wbamberg", - "loella16", - "Hell_Carlito", - "pixoux", - "diomabb" - ] - }, - "MDN/Contribute/Howto/Write_a_new_entry_in_the_Glossary": { - "modified": "2019-03-23T22:09:42.767Z", - "contributors": [ - "wbamberg", - "PhilippePerret" - ] - }, - "MDN/Contribute/Howto/Write_an_article_to_help_learn_about_the_Web": { - "modified": "2020-02-28T22:24:52.629Z", - "contributors": [ - "As-Sinder", - "wbamberg", - "Dralyab" - ] - }, - "MDN/Contribute/Howto/convertir_code_pour_etre_direct": { - "modified": "2019-01-16T20:18:20.962Z", - "contributors": [ - "wbamberg", - "Maamouch", - "Goofy", - "Lamaw" - ] - }, - "MDN/Contribute/Howto/faire_relecture_redactionnelle": { - "modified": "2020-04-12T16:14:40.644Z", - "contributors": [ - "ele-gall-ac-mineducation", - "wbamberg", - "ussmarc", - "SphinxKnight", - "Raulel", - "ThinkDumbIndustries", - "Fabienne1963", - "Requiem75020", - "tregagnon" - ] - }, - "MDN/Contribute/Howto/faire_relecture_technique": { - "modified": "2019-08-07T15:32:02.446Z", - "contributors": [ - "mathildebuenerd", - "wbamberg", - "SphinxKnight", - "AlemFarid", - "vhf", - "tregagnon" - ] - }, - "MDN/Contribute/Howto/Étiquettes_pages_JavaScript": { - "modified": "2019-01-16T19:52:49.003Z", - "contributors": [ - "wbamberg", - "NerOcrO", - "jswisher", - "Johann-S", - "Maamouch", - "BiGrEgGaErOoTs", - "Bath66", - "ainouss", - "Wladek92", - "DOCUBE", - "Luejni" - ] - }, - "MDN/Contribute/Localize": { - "modified": "2019-01-16T18:34:28.866Z", - "contributors": [ - "wbamberg", - "Dralyab", - "Fredchat", - "vaz__ar", - "Sheppy" - ] - }, - "MDN/Contribute/Localize/Translating_pages": { - "modified": "2019-01-16T18:34:31.322Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "Kant1.0", - "MrDeath", - "Oliviermoz", - "Goofy", - "Mechain+franck", - "Jampes", - "louuis", - "Requiem75020", - "Mylainos", - "gingifruden" - ] - }, - "MDN/Contribute/Processes": { - "modified": "2020-09-03T03:23:25.806Z", - "contributors": [ - "Voulto", - "wbamberg", - "jswisher" - ] - }, - "MDN/Editor": { - "modified": "2020-09-30T15:38:34.314Z", - "contributors": [ - "chrisdavidmills", - "verdy_p", - "wbamberg", - "Keyrolus", - "ftoulouse", - "Mylainos", - "Jeremie", - "teoli", - "BenoitL" - ] - }, - "MDN/Editor/Basics": { - "modified": "2020-09-30T15:38:34.461Z", - "contributors": [ - "chrisdavidmills", - "Voulto", - "jswisher" - ] - }, - "MDN/Editor/Basics/Pieces_jointes": { - "modified": "2020-09-30T15:38:34.580Z", - "contributors": [ - "chrisdavidmills", - "ele-gall-ac-mineducation" - ] - }, - "MDN/Guidelines": { - "modified": "2020-09-30T15:29:18.429Z", - "contributors": [ - "chrisdavidmills", - "wbamberg", - "Porkepix", - "thbil" - ] - }, - "MDN/Guidelines/Code_lignesdirectrices": { - "modified": "2020-09-30T15:29:18.597Z", - "contributors": [ - "chrisdavidmills", - "tristantheb" - ] - }, - "MDN/Kuma": { - "modified": "2020-02-08T12:56:22.102Z", - "contributors": [ - "tristantheb" - ] - }, - "MDN/Rejoindre_la_communauté": { - "modified": "2019-09-11T08:03:04.252Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "NerOcrO", - "loella16", - "ZakCodes", - "Mozinet", - "teoli", - "wakka27" - ] - }, - "MDN/Rejoindre_la_communauté/Conversations": { - "modified": "2019-01-17T02:52:45.654Z", - "contributors": [ - "wbamberg", - "zakaila" - ] - }, - "MDN/Rejoindre_la_communauté/Doc_sprints": { - "modified": "2019-03-23T22:40:48.518Z", - "contributors": [ - "wbamberg", - "qwincy_p", - "Manuela" - ] - }, - "MDN/Rejoindre_la_communauté/Roles": { - "modified": "2020-10-05T07:18:46.385Z", - "contributors": [ - "Voulto" - ] - }, - "MDN/Rejoindre_la_communauté/Roles/Admins": { - "modified": "2020-10-05T11:05:15.596Z", - "contributors": [ - "Voulto" - ] - }, - "MDN/Rejoindre_la_communauté/Roles/role_de_pilote_de_localisation": { - "modified": "2020-11-11T19:54:44.189Z", - "contributors": [ - "JNa0", - "Voulto" - ] - }, - "MDN/Rejoindre_la_communauté/Roles/role_du_conducteur_de_sujet": { - "modified": "2020-10-05T10:54:22.012Z", - "contributors": [ - "Voulto" - ] - }, - "MDN/Rejoindre_la_communauté/Roles/role_du_mentor": { - "modified": "2020-10-05T11:12:29.434Z", - "contributors": [ - "Voulto" - ] - }, - "MDN/Rejoindre_la_communauté/Whats_happening": { - "modified": "2020-10-05T06:56:25.370Z", - "contributors": [ - "Voulto" - ] - }, - "MDN/Structures": { - "modified": "2020-09-30T09:06:58.853Z", - "contributors": [ - "chrisdavidmills", - "Voulto", - "wbamberg", - "jswisher" - ] - }, - "MDN/Structures/Exemples_live": { - "modified": "2020-09-30T09:06:59.551Z", - "contributors": [ - "chrisdavidmills", - "tristantheb", - "wbamberg", - "Johann-S" - ] - }, - "MDN/Structures/Macros": { - "modified": "2020-09-30T09:06:59.189Z", - "contributors": [ - "chrisdavidmills", - "wbamberg", - "jmh" - ] - }, - "MDN/Structures/Macros/Commonly-used_macros": { - "modified": "2020-09-30T09:06:59.707Z", - "contributors": [ - "chrisdavidmills", - "wbamberg", - "teoli", - "fscholz", - "jmh" - ] - }, - "MDN/Structures/Tables_de_compatibilité": { - "modified": "2020-10-15T22:02:05.521Z", - "contributors": [ - "chrisdavidmills", - "wbamberg", - "jcletousey", - "loella16" - ] - }, - "MDN/Tools": { - "modified": "2020-09-30T16:48:32.947Z", - "contributors": [ - "chrisdavidmills", - "Voulto", - "wbamberg", - "jswisher" - ] - }, - "MDN/Tools/KumaScript": { - "modified": "2020-09-30T16:48:33.592Z", - "contributors": [ - "chrisdavidmills", - "JNa0", - "wbamberg", - "SaintCyr" - ] - }, - "MDN/Tools/Template_editing": { - "modified": "2020-09-30T16:48:33.737Z", - "contributors": [ - "chrisdavidmills", - "JNa0" - ] - }, - "MDN/User_guide": { - "modified": "2019-01-16T20:49:48.849Z", - "contributors": [ - "wbamberg", - "Jacqboel", - "Hell_Carlito", - "Sheppy" - ] - }, - "MDN_a_dix_ans": { - "modified": "2019-03-23T22:50:40.435Z", - "contributors": [ - "lumiru", - "achraf", - "stephaniehobson", - "Cyber-Tron", - "ArtonP", - "SphinxKnight", - "tchevalier" - ] - }, - "MDN_a_dix_ans/Contribuer_à_MDN": { - "modified": "2020-02-19T18:10:07.383Z", - "contributors": [ - "jswisher", - "SphinxKnight" - ] - }, - "MDN_a_dix_ans/Histoire_MDN": { - "modified": "2019-03-23T22:50:37.833Z", - "contributors": [ - "stephaniehobson", - "tchevalier", - "SphinxKnight" - ] - }, - "Mise_à_jour_des_applications_Web_pour_Firefox_3": { - "modified": "2019-03-23T23:53:12.406Z", - "contributors": [ - "wbamberg", - "Sheppy", - "Mgjbot", - "BenoitL" - ] - }, - "Mise_à_jour_des_extensions_pour_Firefox_2": { - "modified": "2019-03-23T23:50:49.070Z", - "contributors": [ - "wbamberg", - "Mgjbot", - "Fredchat", - "Planche" - ] - }, - "Mise_à_jour_des_extensions_pour_Firefox_3": { - "modified": "2019-12-13T20:33:09.962Z", - "contributors": [ - "wbamberg", - "Sheppy", - "Gandoulf", - "BenoitL", - "Mgjbot", - "Fredchat" - ] - }, - "Mozilla": { - "modified": "2019-03-23T23:34:28.870Z", - "contributors": [ - "Dralyab", - "Hell_Carlito", - "PtitPou", - "jmh", - "ethertank" - ] - }, - "Mozilla/Add-ons": { - "modified": "2020-09-03T19:55:47.093Z", - "contributors": [ - "Dono7", - "Flavien", - "SphinxKnight", - "Mozinet", - "jezdez", - "pt1dav" - ] - }, - "Mozilla/Add-ons/WebExtensions": { - "modified": "2020-08-27T19:26:10.093Z", - "contributors": [ - "NassimSaboundji", - "hellosct1", - "JNa0", - "Mozinet", - "oub", - "arthuretienne", - "xdelatour", - "LaurentBarbareau", - "foxstorm", - "Bat41", - "MERIOULI", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API": { - "modified": "2020-05-25T16:55:24.491Z", - "contributors": [ - "hellosct1", - "JNa0", - "Badacadabra", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms": { - "modified": "2020-10-15T21:49:27.575Z", - "contributors": [ - "hellosct1", - "SphinxKnight", - "Needlex" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms/Alarm": { - "modified": "2020-10-15T21:56:47.391Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms/clear": { - "modified": "2020-10-15T21:56:52.162Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms/clearAll": { - "modified": "2020-10-15T21:56:49.302Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms/create": { - "modified": "2020-10-15T21:56:55.595Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms/get": { - "modified": "2020-10-15T21:56:47.349Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms/getAll": { - "modified": "2020-10-15T21:56:49.563Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/alarms/onAlarm": { - "modified": "2020-10-15T21:56:50.838Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks": { - "modified": "2020-10-15T21:55:09.926Z", - "contributors": [ - "hellosct1", - "JNa0", - "NerOcrO" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/BookmarkTreeNode": { - "modified": "2020-10-15T22:06:54.229Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/BookmarkTreeNodeType": { - "modified": "2020-10-15T22:06:55.729Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/BookmarkTreeNodeUnmodifiable": { - "modified": "2020-10-15T22:06:56.897Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/CreateDetails": { - "modified": "2020-10-15T22:06:54.030Z", - "contributors": [ - "hellosct1", - "ariasuni" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/create": { - "modified": "2020-10-15T22:06:53.629Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/get": { - "modified": "2020-10-15T22:06:54.282Z", - "contributors": [ - "Arzak656", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/getChildren": { - "modified": "2020-10-15T22:06:56.873Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/getRecent": { - "modified": "2020-10-15T22:06:57.277Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/getSubTree": { - "modified": "2020-10-15T22:06:54.273Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/getTree": { - "modified": "2020-10-15T22:06:52.492Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/move": { - "modified": "2020-10-15T22:06:58.622Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/onChanged": { - "modified": "2020-10-15T22:06:59.610Z", - "contributors": [ - "hellosct1", - "duduindo", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/onChildrenReordered": { - "modified": "2020-10-15T22:06:57.747Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/onCreated": { - "modified": "2020-10-15T22:06:56.763Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/onImportBegan": { - "modified": "2020-10-15T22:06:58.178Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/onImportEnded": { - "modified": "2020-10-15T22:06:57.694Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/onMoved": { - "modified": "2020-10-15T22:06:57.181Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/onRemoved": { - "modified": "2020-10-15T22:06:57.843Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/remove": { - "modified": "2020-10-15T22:06:56.991Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/removeTree": { - "modified": "2020-10-15T22:06:56.214Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/search": { - "modified": "2020-10-15T22:06:57.967Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/bookmarks/update": { - "modified": "2020-10-15T22:06:55.775Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction": { - "modified": "2020-10-15T21:55:16.337Z", - "contributors": [ - "hellosct1", - "wbamberg", - "JujuLeVilleurbannais" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/ColorArray": { - "modified": "2020-10-15T21:57:12.722Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/ImageDataType": { - "modified": "2020-10-15T21:57:10.313Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/disable": { - "modified": "2020-10-15T21:57:17.917Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/enable": { - "modified": "2020-10-15T21:57:15.753Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/getBadgeBackgroundColor": { - "modified": "2020-10-15T21:57:19.839Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/getBadgeText": { - "modified": "2020-10-15T21:57:19.156Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/getBadgeTextColor": { - "modified": "2020-10-15T22:08:46.895Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/getPopup": { - "modified": "2020-10-15T21:57:14.137Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/getTitle": { - "modified": "2020-10-15T21:57:13.635Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/isEnabled": { - "modified": "2020-10-15T22:04:36.266Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/onClicked": { - "modified": "2020-10-15T21:57:11.578Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/openPopup": { - "modified": "2020-10-15T22:04:36.594Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/setBadgeBackgroundColor": { - "modified": "2020-10-15T21:57:20.395Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/setBadgeText": { - "modified": "2020-10-15T21:57:15.662Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/setBadgeTextColor": { - "modified": "2020-10-15T22:08:45.959Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/setIcon": { - "modified": "2020-10-15T21:57:18.790Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/setPopup": { - "modified": "2020-10-15T21:57:20.848Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserAction/setTitle": { - "modified": "2020-10-15T21:57:13.171Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings": { - "modified": "2020-10-15T21:57:20.303Z", - "contributors": [ - "vince-origin", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/allowPopupsForUserEvents": { - "modified": "2020-10-15T21:57:16.502Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/cacheEnabled": { - "modified": "2020-10-15T21:57:20.596Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/closeTabsByDoubleClick": { - "modified": "2020-10-15T22:13:16.558Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/contextMenuShowEvent": { - "modified": "2020-10-15T22:04:59.335Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/ftpProtocolEnabled": { - "modified": "2020-10-15T22:29:18.905Z", - "contributors": [ - "hellosct1", - "vince-origin" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/homepageOverride": { - "modified": "2020-10-15T22:04:59.231Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/imageAnimationBehavior": { - "modified": "2020-10-15T22:04:59.301Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/newTabPageOverride": { - "modified": "2020-10-15T22:04:59.445Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/newTabPosition": { - "modified": "2020-10-15T22:06:52.287Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/openBookmarksInNewTabs": { - "modified": "2020-10-15T22:04:59.369Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/openSearchResultsInNewTabs": { - "modified": "2020-10-15T22:04:58.861Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/openUrlbarResultsInNewTabs": { - "modified": "2020-10-15T22:05:40.306Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/overrideDocumentColors": { - "modified": "2020-10-15T22:05:24.428Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/proxyConfig": { - "modified": "2020-10-15T22:04:59.888Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/useDocumentFonts": { - "modified": "2020-10-15T22:05:23.408Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/webNotificationsDisabled": { - "modified": "2020-10-15T22:04:59.020Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/zoomFullPage": { - "modified": "2020-10-15T22:29:18.493Z", - "contributors": [ - "hellosct1", - "vince-origin" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browserSettings/zoomSiteSpecific": { - "modified": "2020-10-15T22:29:16.581Z", - "contributors": [ - "hellosct1", - "vince-origin" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData": { - "modified": "2020-10-15T21:57:41.783Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/DataTypeSet": { - "modified": "2020-10-15T22:00:04.307Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/RemovalOptions": { - "modified": "2020-10-15T22:00:01.417Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/remove": { - "modified": "2020-10-15T21:58:20.101Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removeCache": { - "modified": "2020-10-15T22:00:00.917Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removeCookies": { - "modified": "2020-10-15T22:00:02.470Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removeDownloads": { - "modified": "2020-10-15T22:00:02.232Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removeFormData": { - "modified": "2020-10-15T22:00:02.195Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removeHistory": { - "modified": "2020-10-15T22:00:03.781Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removeLocalStorage": { - "modified": "2020-10-15T22:00:02.673Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removePasswords": { - "modified": "2020-10-15T22:00:00.174Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/removePluginData": { - "modified": "2020-10-15T22:00:01.101Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/browsingData/settings": { - "modified": "2020-10-15T22:00:00.741Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/captivePortal": { - "modified": "2020-10-15T22:30:04.270Z", - "contributors": [ - "hellosct1", - "rebloor" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/captivePortal/canonicalURL": { - "modified": "2020-10-15T22:30:03.440Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/captivePortal/getLastChecked": { - "modified": "2020-10-15T22:30:05.691Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/captivePortal/getState": { - "modified": "2020-10-15T22:30:34.996Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/captivePortal/onConnectivityAvailable": { - "modified": "2020-10-15T22:30:05.428Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/captivePortal/onStateChanged": { - "modified": "2020-10-15T22:30:34.412Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/clipboard": { - "modified": "2020-10-15T21:58:44.611Z", - "contributors": [ - "hellosct1", - "clamb" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/clipboard/setImageData": { - "modified": "2020-10-15T21:58:52.602Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/commands": { - "modified": "2020-10-15T21:57:41.229Z", - "contributors": [ - "hellosct1", - "JNa0" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/commands/Command": { - "modified": "2020-10-15T22:00:15.894Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/commands/getAll": { - "modified": "2020-10-15T22:00:16.483Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/commands/onCommand": { - "modified": "2020-10-15T22:00:18.817Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/commands/reset": { - "modified": "2020-10-15T22:04:36.152Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/commands/update": { - "modified": "2020-10-15T22:04:36.445Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contentScripts": { - "modified": "2020-10-15T22:03:15.588Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contentScripts/RegisteredContentScript": { - "modified": "2020-10-15T22:03:05.082Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contentScripts/RegisteredContentScript/unregister": { - "modified": "2020-10-15T22:03:07.948Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contentScripts/register": { - "modified": "2020-10-15T22:03:07.517Z", - "contributors": [ - "milouse", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities": { - "modified": "2020-10-15T21:57:40.932Z", - "contributors": [ - "hellosct1", - "JNa0" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/ContextualIdentity": { - "modified": "2020-10-15T22:03:10.039Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/create": { - "modified": "2020-10-15T22:03:09.387Z", - "contributors": [ - "hellosct1", - "BenDz" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/get": { - "modified": "2020-10-15T22:03:07.326Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/onCreated": { - "modified": "2020-10-15T22:03:10.805Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/onRemoved": { - "modified": "2020-10-15T22:03:10.585Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/onUpdated": { - "modified": "2020-10-15T22:03:11.564Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/query": { - "modified": "2020-10-15T22:03:06.215Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/remove": { - "modified": "2020-10-15T22:03:06.492Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/contextualIdentities/update": { - "modified": "2020-10-15T22:03:06.298Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies": { - "modified": "2020-10-15T21:57:42.517Z", - "contributors": [ - "hellosct1", - "pierregillet" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/Cookie": { - "modified": "2020-10-15T22:00:18.569Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/CookieStore": { - "modified": "2020-10-15T22:00:17.792Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/OnChangedCause": { - "modified": "2020-10-15T22:00:17.330Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/SameSiteStatus": { - "modified": "2019-07-03T06:45:04.077Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/get": { - "modified": "2020-10-15T22:00:19.493Z", - "contributors": [ - "hellosct1", - "Loenix" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/getAll": { - "modified": "2020-10-15T22:00:18.081Z", - "contributors": [ - "regseb", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/getAllCookieStores": { - "modified": "2020-10-15T22:00:19.042Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/onChanged": { - "modified": "2020-10-15T22:00:17.953Z", - "contributors": [ - "hellosct1", - "thomascaillier" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/remove": { - "modified": "2020-10-15T22:00:18.993Z", - "contributors": [ - "hellosct1", - "MusiKid" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/cookies/set": { - "modified": "2020-10-15T22:00:19.267Z", - "contributors": [ - "hellosct1", - "P45QU10U" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools": { - "modified": "2020-10-15T22:30:24.003Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow": { - "modified": "2020-10-15T21:55:11.329Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow/eval": { - "modified": "2020-10-15T21:55:14.114Z", - "contributors": [ - "hellosct1", - "m-r-r" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow/reload": { - "modified": "2020-10-15T21:55:58.911Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow/tabId": { - "modified": "2020-10-15T21:55:59.720Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.network": { - "modified": "2020-10-15T21:55:16.357Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.network/getHAR": { - "modified": "2020-10-15T22:04:36.939Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.network/onNavigated": { - "modified": "2020-10-15T21:56:01.394Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.network/onRequestFinished": { - "modified": "2020-10-15T22:04:12.813Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels": { - "modified": "2020-10-15T21:55:15.857Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ElementsPanel": { - "modified": "2020-10-15T21:56:25.683Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ElementsPanel/createSidebarPane": { - "modified": "2020-10-15T22:04:11.111Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ElementsPanel/onSelectionChanged": { - "modified": "2020-10-15T21:56:28.564Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ExtensionPanel": { - "modified": "2020-10-15T21:56:01.635Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ExtensionSidebarPane": { - "modified": "2020-10-15T22:04:11.081Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ExtensionSidebarPane/onHidden": { - "modified": "2020-10-15T22:04:12.026Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ExtensionSidebarPane/onShown": { - "modified": "2020-10-15T22:04:11.474Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ExtensionSidebarPane/setExpression": { - "modified": "2020-10-15T22:04:11.532Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ExtensionSidebarPane/setObject": { - "modified": "2020-10-15T22:04:12.294Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/ExtensionSidebarPane/setPage": { - "modified": "2020-10-15T22:15:03.534Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/create": { - "modified": "2020-10-15T21:56:02.132Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/elements": { - "modified": "2020-10-15T22:04:11.356Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/onThemeChanged": { - "modified": "2020-10-15T21:55:59.922Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/devtools.panels/themeName": { - "modified": "2020-10-15T21:55:59.431Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/dns": { - "modified": "2020-10-15T22:04:28.089Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/dns/resolve": { - "modified": "2020-10-15T22:04:22.142Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads": { - "modified": "2020-10-15T21:57:39.749Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/BooleanDelta": { - "modified": "2020-10-15T22:03:08.682Z", - "contributors": [ - "hellosct1", - "dragon38800" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/DangerType": { - "modified": "2020-10-15T22:03:15.056Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/DoubleDelta": { - "modified": "2020-10-15T22:03:02.646Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/DownloadItem": { - "modified": "2020-10-15T22:03:03.375Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/DownloadQuery": { - "modified": "2020-10-15T22:03:01.801Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/DownloadTime": { - "modified": "2020-10-15T22:03:15.782Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/FilenameConflictAction": { - "modified": "2020-10-15T22:03:03.037Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/InterruptReason": { - "modified": "2020-10-15T22:03:02.130Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/State": { - "modified": "2020-10-15T22:03:05.545Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/StringDelta": { - "modified": "2020-10-15T22:03:05.192Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/acceptDanger": { - "modified": "2020-10-15T22:03:15.128Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/cancel": { - "modified": "2020-10-15T22:02:46.073Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/download": { - "modified": "2020-10-15T22:03:05.206Z", - "contributors": [ - "hellosct1", - "dragon38800" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/drag": { - "modified": "2020-10-15T22:03:15.113Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/erase": { - "modified": "2020-10-15T22:03:02.956Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/getFileIcon": { - "modified": "2020-10-15T22:03:04.595Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/onChanged": { - "modified": "2020-10-15T22:03:05.044Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/onCreated": { - "modified": "2020-10-15T22:03:02.215Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/onErased": { - "modified": "2020-10-15T22:03:15.734Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/open": { - "modified": "2020-10-15T22:03:03.328Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/pause": { - "modified": "2020-10-15T22:02:12.925Z", - "contributors": [ - "hellosct1", - "dragon38800" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/removeFile": { - "modified": "2020-10-15T22:03:03.899Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/resume": { - "modified": "2020-10-15T22:02:18.854Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/search": { - "modified": "2020-10-15T22:03:01.476Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/setShelfEnabled": { - "modified": "2020-10-15T22:03:15.953Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/show": { - "modified": "2020-10-15T22:03:08.095Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/downloads/showDefaultFolder": { - "modified": "2020-10-15T22:02:35.095Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/events": { - "modified": "2020-10-15T21:57:40.303Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/events/Event": { - "modified": "2020-10-15T22:05:03.208Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/events/Rule": { - "modified": "2020-10-15T22:04:57.145Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/events/UrlFilter": { - "modified": "2020-10-15T22:04:57.285Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension": { - "modified": "2020-10-15T21:57:42.006Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/ViewType": { - "modified": "2020-10-15T22:06:07.729Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/getBackgroundPage": { - "modified": "2020-10-15T22:06:09.291Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/getExtensionTabs": { - "modified": "2020-10-15T22:06:21.269Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/getURL": { - "modified": "2020-10-15T22:06:08.250Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/getViews": { - "modified": "2020-10-15T22:06:07.060Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/inIncognitoContext": { - "modified": "2020-10-15T22:06:06.499Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/isAllowedFileSchemeAccess": { - "modified": "2020-10-15T22:06:09.327Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/isAllowedIncognitoAccess": { - "modified": "2020-10-15T22:06:08.273Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/lastError": { - "modified": "2020-10-15T22:06:06.418Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/onRequest": { - "modified": "2020-10-15T22:06:08.877Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/onRequestExternal": { - "modified": "2020-10-15T22:06:07.613Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/sendRequest": { - "modified": "2020-10-15T22:06:21.926Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extension/setUpdateUrlData": { - "modified": "2020-10-15T22:06:08.809Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extensionTypes": { - "modified": "2020-10-15T21:56:56.857Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extensionTypes/ImageDetails": { - "modified": "2020-10-15T21:56:51.770Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extensionTypes/ImageFormat": { - "modified": "2020-10-15T21:56:47.737Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extensionTypes/InjectDetails": { - "modified": "2019-07-03T07:34:29.652Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/extensionTypes/RunAt": { - "modified": "2020-10-15T21:56:53.627Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/find": { - "modified": "2020-10-15T21:57:44.346Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/find/find": { - "modified": "2020-10-15T22:00:01.623Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/find/highlightResults": { - "modified": "2020-10-15T22:00:02.947Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/find/removeHighlighting": { - "modified": "2020-10-15T22:00:05.741Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history": { - "modified": "2020-10-15T21:57:45.044Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/HistoryItem": { - "modified": "2020-10-15T22:06:28.558Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/TransitionType": { - "modified": "2020-10-15T22:06:33.903Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/VisitItem": { - "modified": "2020-10-15T22:06:33.995Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/addUrl": { - "modified": "2020-10-15T22:06:37.057Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/deleteAll": { - "modified": "2020-10-15T22:06:35.323Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/deleteRange": { - "modified": "2020-10-15T22:06:35.709Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/deleteUrl": { - "modified": "2020-10-15T22:06:34.956Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/getVisits": { - "modified": "2020-10-15T22:06:37.073Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/onTitleChanged": { - "modified": "2020-10-15T22:06:36.096Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/onVisitRemoved": { - "modified": "2020-10-15T22:06:35.263Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/onVisited": { - "modified": "2020-10-15T22:06:10.233Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/history/search": { - "modified": "2020-10-15T22:06:37.603Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/i18n": { - "modified": "2020-10-15T21:57:44.314Z", - "contributors": [ - "tristantheb", - "hellosct1", - "SphinxKnight", - "rlouvat" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/i18n/LanguageCode": { - "modified": "2020-10-15T22:04:59.009Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/i18n/Locale-Specific_Message_reference": { - "modified": "2019-07-03T07:42:45.286Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/i18n/detectLanguage": { - "modified": "2020-10-15T22:04:59.961Z", - "contributors": [ - "hellosct1", - "TimotheAlbouy" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/i18n/getAcceptLanguages": { - "modified": "2020-10-15T22:04:59.973Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/i18n/getMessage": { - "modified": "2020-10-15T22:05:02.362Z", - "contributors": [ - "regseb", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/i18n/getUILanguage": { - "modified": "2020-10-15T22:05:00.805Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/identity": { - "modified": "2020-10-15T21:57:44.574Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/identity/getRedirectURL": { - "modified": "2020-10-15T22:04:47.574Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/identity/launchWebAuthFlow": { - "modified": "2020-10-15T22:04:47.997Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/idle": { - "modified": "2020-10-15T21:57:44.432Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/idle/IdleState": { - "modified": "2020-10-15T21:58:03.267Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/idle/onStateChanged": { - "modified": "2020-10-15T21:58:03.496Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/idle/queryState": { - "modified": "2020-10-15T21:58:02.830Z", - "contributors": [ - "hellosct1", - "icefire" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/idle/setDetectionInterval": { - "modified": "2020-10-15T21:58:02.847Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management": { - "modified": "2020-10-15T21:56:55.314Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/ExtensionInfo": { - "modified": "2020-10-15T21:56:55.061Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/get": { - "modified": "2020-10-15T21:56:52.865Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/getAll": { - "modified": "2020-10-15T21:56:49.913Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/getPermissionWarningsById": { - "modified": "2020-10-15T21:56:53.122Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/getPermissionWarningsByManifest": { - "modified": "2020-10-15T21:56:54.588Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/getSelf": { - "modified": "2020-10-15T21:57:02.041Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/install": { - "modified": "2020-10-15T22:09:55.921Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/onDisabled": { - "modified": "2020-10-15T21:57:10.496Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/onEnabled": { - "modified": "2020-10-15T21:57:09.562Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/onInstalled": { - "modified": "2020-10-15T21:57:08.652Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/onUninstalled": { - "modified": "2020-10-15T21:57:08.612Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/setEnabled": { - "modified": "2020-10-15T21:57:09.341Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/uninstall": { - "modified": "2020-10-15T21:56:50.746Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/management/uninstallSelf": { - "modified": "2020-10-15T21:56:55.665Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus": { - "modified": "2020-10-15T21:57:47.933Z", - "contributors": [ - "hellosct1", - "ariasuni" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/ACTION_MENU_TOP_LEVEL_LIMIT": { - "modified": "2020-10-15T22:04:45.584Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/ContextType": { - "modified": "2020-10-15T22:04:44.533Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/ItemType": { - "modified": "2020-10-15T22:04:44.141Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/OnClickData": { - "modified": "2020-10-15T22:04:45.674Z", - "contributors": [ - "regseb", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/create": { - "modified": "2020-10-15T22:04:43.381Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/createProperties": { - "modified": "2020-10-15T22:30:24.941Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/getTargetElement": { - "modified": "2020-10-15T22:08:42.353Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/menus.overrideContext()": { - "modified": "2019-07-03T07:58:27.877Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/onClicked": { - "modified": "2020-10-15T22:04:44.931Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/onHidden": { - "modified": "2020-10-15T22:04:44.507Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/onShown": { - "modified": "2020-10-15T22:04:45.669Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/overrideContext": { - "modified": "2019-10-13T09:44:24.526Z", - "contributors": [ - "hellosct1", - "ariasuni" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/refresh": { - "modified": "2020-10-15T22:04:44.190Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/remove": { - "modified": "2020-10-15T22:04:45.195Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/removeAll": { - "modified": "2020-10-15T22:04:46.038Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/menus/update": { - "modified": "2020-10-15T22:04:46.899Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications": { - "modified": "2020-10-15T21:57:45.083Z", - "contributors": [ - "hellosct1", - "wbamberg", - "lp177" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/NotificationOptions": { - "modified": "2020-10-15T21:58:04.461Z", - "contributors": [ - "hellosct1", - "wbamberg", - "Bat41" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/TemplateType": { - "modified": "2020-10-15T22:04:53.358Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/clear": { - "modified": "2020-10-15T22:04:47.769Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/create": { - "modified": "2020-10-15T22:04:47.399Z", - "contributors": [ - "ariasuni", - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/getAll": { - "modified": "2020-10-15T22:04:53.186Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/onButtonClicked": { - "modified": "2020-10-15T22:04:47.252Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/onClicked": { - "modified": "2020-10-15T22:04:53.553Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/onClosed": { - "modified": "2020-10-15T22:04:54.823Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/onShown": { - "modified": "2020-10-15T22:04:55.282Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/notifications/update": { - "modified": "2020-10-15T22:04:47.104Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox": { - "modified": "2020-10-15T21:57:45.193Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox/OnInputEnteredDisposition": { - "modified": "2020-10-15T22:04:54.500Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox/SuggestResult": { - "modified": "2020-10-15T22:04:54.402Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox/onInputCancelled": { - "modified": "2020-10-15T22:04:56.337Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox/onInputChanged": { - "modified": "2020-10-15T22:04:56.335Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox/onInputEntered": { - "modified": "2020-10-15T22:04:55.151Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox/onInputStarted": { - "modified": "2020-10-15T22:04:56.742Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/omnibox/setDefaultSuggestion": { - "modified": "2020-10-15T22:04:57.902Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction": { - "modified": "2020-10-15T21:57:40.850Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/ImageDataType": { - "modified": "2020-10-15T21:57:40.386Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/getPopup": { - "modified": "2020-10-15T22:00:13.778Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/getTitle": { - "modified": "2020-10-15T22:00:11.505Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/hide": { - "modified": "2020-10-15T22:00:11.157Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/isShown": { - "modified": "2020-10-15T22:04:36.368Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/onClicked": { - "modified": "2020-10-15T22:00:11.289Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/openPopup": { - "modified": "2020-10-15T22:00:13.634Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/setIcon": { - "modified": "2020-10-15T22:00:14.155Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/setPopup": { - "modified": "2020-10-15T22:00:16.798Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/setTitle": { - "modified": "2020-10-15T22:00:06.505Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pageAction/show": { - "modified": "2020-10-15T22:00:05.544Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions": { - "modified": "2020-10-15T21:57:44.451Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions/Permissions": { - "modified": "2020-10-15T21:57:56.351Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions/contains": { - "modified": "2020-10-15T21:57:57.373Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions/getAll": { - "modified": "2020-10-15T21:58:01.535Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions/onAdded": { - "modified": "2020-10-15T21:57:56.950Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions/onRemoved": { - "modified": "2020-10-15T21:57:56.881Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions/remove": { - "modified": "2020-10-15T21:58:02.493Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/permissions/request": { - "modified": "2020-10-15T21:58:03.038Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pkcs11": { - "modified": "2020-10-15T21:58:39.173Z", - "contributors": [ - "hellosct1", - "Jeremie" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pkcs11/getModuleSlots": { - "modified": "2020-10-15T22:00:14.823Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pkcs11/installModule": { - "modified": "2020-10-15T22:00:16.239Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pkcs11/isModuleInstalled": { - "modified": "2020-10-15T22:00:16.486Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/pkcs11/uninstallModule": { - "modified": "2020-10-15T22:00:13.525Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/privacy": { - "modified": "2020-10-15T21:57:20.922Z", - "contributors": [ - "hellosct1", - "JeffD" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/privacy/network": { - "modified": "2020-10-15T21:57:19.949Z", - "contributors": [ - "hellosct1", - "JeffD" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/privacy/services": { - "modified": "2020-10-15T21:57:19.393Z", - "contributors": [ - "hellosct1", - "JeffD" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/privacy/websites": { - "modified": "2020-10-15T21:57:19.498Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/proxy": { - "modified": "2020-10-15T21:57:43.079Z", - "contributors": [ - "hellosct1", - "wbamberg", - "FlorianHatat" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/proxy/ProxyInfo": { - "modified": "2020-10-15T22:04:57.639Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/proxy/RequestDetails": { - "modified": "2020-10-15T22:05:00.086Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/proxy/onProxyError": { - "modified": "2020-10-15T22:00:36.758Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/proxy/onRequest": { - "modified": "2020-10-15T22:04:59.176Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/proxy/register": { - "modified": "2020-10-15T22:02:15.003Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/proxy/unregister": { - "modified": "2020-10-15T22:02:18.835Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime": { - "modified": "2020-10-15T21:57:48.381Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/MessageSender": { - "modified": "2020-10-15T22:01:08.573Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/OnInstalledReason": { - "modified": "2020-10-15T22:01:07.997Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/OnRestartRequiredReason": { - "modified": "2020-10-15T22:01:08.309Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/PlatformArch": { - "modified": "2020-10-15T22:01:06.690Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/PlatformInfo": { - "modified": "2020-10-15T22:01:04.459Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/PlatformNaclArch": { - "modified": "2020-10-15T22:01:08.937Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/PlatformOs": { - "modified": "2020-10-15T22:00:21.839Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/Port": { - "modified": "2020-10-15T22:00:25.981Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/RequestUpdateCheckStatus": { - "modified": "2020-10-15T22:01:06.562Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/connect": { - "modified": "2020-10-15T21:59:39.250Z", - "contributors": [ - "hellosct1", - "Ostefanini" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/connectNative": { - "modified": "2020-10-15T22:01:10.130Z", - "contributors": [ - "hellosct1", - "wbamberg", - "Crikxi" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/getBackgroundPage": { - "modified": "2020-10-15T22:00:25.503Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/getBrowserInfo": { - "modified": "2020-10-15T22:01:08.613Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/getManifest": { - "modified": "2020-10-15T22:01:04.454Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/getPackageDirectoryEntry": { - "modified": "2020-10-15T22:01:15.366Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/getPlatformInfo": { - "modified": "2020-10-15T22:01:09.499Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/getURL": { - "modified": "2020-10-15T22:00:25.329Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/id": { - "modified": "2020-10-15T22:00:23.562Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/lastError": { - "modified": "2020-10-15T22:00:25.937Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onBrowserUpdateAvailable": { - "modified": "2020-10-15T22:01:10.633Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onConnect": { - "modified": "2020-10-15T21:58:16.219Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onConnectExternal": { - "modified": "2020-10-15T22:00:44.948Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onInstalled": { - "modified": "2020-10-15T22:01:07.159Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onMessage": { - "modified": "2020-10-15T22:00:46.143Z", - "contributors": [ - "hellosct1", - "Watilin", - "ariasuni", - "Nothus" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onMessageExternal": { - "modified": "2020-10-15T22:01:07.864Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onRestartRequired": { - "modified": "2020-10-15T22:01:08.100Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onStartup": { - "modified": "2020-10-15T22:01:10.619Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onSuspend": { - "modified": "2020-10-15T22:01:12.137Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onSuspendCanceled": { - "modified": "2020-10-15T22:01:15.709Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/onUpdateAvailable": { - "modified": "2020-10-15T22:01:09.956Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/openOptionsPage": { - "modified": "2020-10-15T22:01:05.192Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/reload": { - "modified": "2020-10-15T22:00:19.270Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/requestUpdateCheck": { - "modified": "2020-10-15T22:01:09.435Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage": { - "modified": "2020-10-15T22:00:52.245Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/sendNativeMessage": { - "modified": "2020-10-15T22:01:11.077Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/runtime/setUninstallURL": { - "modified": "2020-10-15T22:00:25.239Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/search": { - "modified": "2020-10-15T22:07:14.449Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/search/get": { - "modified": "2020-10-15T22:07:16.442Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/search/search": { - "modified": "2020-10-15T22:07:15.372Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions": { - "modified": "2020-10-15T21:55:14.411Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/Filter": { - "modified": "2020-10-15T21:56:01.494Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/MAX_SESSION_RESULTS": { - "modified": "2020-10-15T21:56:00.737Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/Session": { - "modified": "2020-10-15T21:56:01.710Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/forgetClosedTab": { - "modified": "2020-10-15T22:04:36.912Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/forgetClosedWindow": { - "modified": "2020-10-15T22:04:36.603Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/getRecentlyClosed": { - "modified": "2020-10-15T21:56:01.554Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/getTabValue": { - "modified": "2020-10-15T22:04:38.593Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/getWindowValue": { - "modified": "2020-10-15T22:04:37.850Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/onChanged": { - "modified": "2020-10-15T21:56:06.118Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/removeTabValue": { - "modified": "2020-10-15T22:04:38.272Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/removeWindowValue": { - "modified": "2020-10-15T22:04:37.866Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/restore": { - "modified": "2020-10-15T21:56:02.475Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/setTabValue": { - "modified": "2020-10-15T22:04:37.948Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sessions/setWindowValue": { - "modified": "2020-10-15T22:04:37.991Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction": { - "modified": "2020-10-15T21:57:44.918Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/ImageDataType": { - "modified": "2020-10-15T22:05:22.946Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/close": { - "modified": "2020-10-15T22:05:22.895Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/getPanel": { - "modified": "2020-10-15T22:05:22.102Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/getTitle": { - "modified": "2020-10-15T22:05:23.613Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/isOpen": { - "modified": "2020-10-15T22:05:23.432Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/open": { - "modified": "2020-10-15T22:05:23.939Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/setIcon": { - "modified": "2020-10-15T22:05:23.907Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/setPanel": { - "modified": "2020-10-15T22:05:22.031Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/setTitle": { - "modified": "2020-10-15T22:05:24.111Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/sidebarAction/toggle": { - "modified": "2020-10-15T22:30:04.353Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage": { - "modified": "2020-10-15T21:57:44.721Z", - "contributors": [ - "AntoineJT", - "hellosct1", - "wbamberg", - "Idlus" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/StorageArea": { - "modified": "2020-10-15T22:05:20.120Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/StorageArea/clear": { - "modified": "2020-10-15T22:05:24.101Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/StorageArea/get": { - "modified": "2020-10-15T22:05:24.141Z", - "contributors": [ - "ariasuni", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/StorageArea/getBytesInUse": { - "modified": "2020-10-15T22:05:21.058Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/StorageArea/remove": { - "modified": "2020-10-15T22:05:20.838Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/StorageArea/set": { - "modified": "2020-10-15T22:05:24.815Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/StorageChange": { - "modified": "2020-10-15T22:05:21.622Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/local": { - "modified": "2020-10-15T22:05:23.273Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/managed": { - "modified": "2020-10-15T22:05:22.202Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/onChanged": { - "modified": "2020-10-15T22:05:23.632Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/storage/sync": { - "modified": "2020-10-15T22:05:23.398Z", - "contributors": [ - "Mozinet", - "locness3", - "hellosct1", - "wbamberg", - "Kocal" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs": { - "modified": "2020-10-15T21:49:29.878Z", - "contributors": [ - "hellosct1", - "Watilin", - "wbamberg", - "Rik", - "Ostefanini", - "Sheppy" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/MutedInfo": { - "modified": "2020-10-15T22:03:57.638Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/MutedInfoReason": { - "modified": "2020-10-15T22:03:52.917Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/PageSettings": { - "modified": "2020-10-15T22:03:52.956Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/TAB_ID_NONE": { - "modified": "2020-10-15T21:58:23.043Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/Tab": { - "modified": "2020-10-15T22:03:11.629Z", - "contributors": [ - "hellosct1", - "ariasuni" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/TabStatus": { - "modified": "2020-10-15T22:03:52.910Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/WindowType": { - "modified": "2020-10-15T22:03:51.484Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/ZoomSettings": { - "modified": "2020-10-15T22:03:54.274Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/ZoomSettingsMode": { - "modified": "2020-10-15T22:03:55.281Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/ZoomSettingsScope": { - "modified": "2020-10-15T22:03:52.641Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/captureTab": { - "modified": "2020-10-15T22:03:53.968Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/captureVisibleTab": { - "modified": "2020-10-15T22:03:37.508Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/connect": { - "modified": "2020-10-15T21:58:20.324Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/create": { - "modified": "2020-10-15T22:03:33.431Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/detectLanguage": { - "modified": "2020-10-15T22:03:48.243Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/discard": { - "modified": "2020-10-15T22:03:57.449Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/duplicate": { - "modified": "2020-10-15T22:03:08.294Z", - "contributors": [ - "hellosct1", - "ariasuni", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/executeScript": { - "modified": "2020-10-15T21:58:22.450Z", - "contributors": [ - "hellosct1", - "wbamberg", - "Watilin" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/get": { - "modified": "2020-10-15T22:03:48.764Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/getAllInWindow": { - "modified": "2020-10-15T22:03:47.367Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/getCurrent": { - "modified": "2020-10-15T22:03:47.217Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/getSelected": { - "modified": "2020-10-15T22:03:47.042Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/getZoom": { - "modified": "2020-10-15T22:03:47.459Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/getZoomSettings": { - "modified": "2020-10-15T22:03:49.865Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/goBack": { - "modified": "2020-10-15T22:30:04.681Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/goForward": { - "modified": "2020-10-15T22:30:06.344Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/hide": { - "modified": "2020-10-15T22:03:53.118Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/highlight": { - "modified": "2020-10-15T22:03:50.648Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/insertCSS": { - "modified": "2020-10-15T21:49:28.464Z", - "contributors": [ - "hellosct1", - "wbamberg", - "Needlex" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/move": { - "modified": "2020-10-15T22:03:49.781Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/moveInSuccession": { - "modified": "2020-10-15T22:15:20.685Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onActivated": { - "modified": "2020-10-15T22:03:53.409Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onActiveChanged": { - "modified": "2020-10-15T22:03:53.571Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onAttached": { - "modified": "2020-10-15T22:03:53.710Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onCreated": { - "modified": "2020-10-15T22:03:52.917Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onDetached": { - "modified": "2020-10-15T22:03:52.758Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onHighlightChanged": { - "modified": "2020-10-15T22:03:53.182Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onHighlighted": { - "modified": "2020-10-15T22:03:55.546Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onMoved": { - "modified": "2020-10-15T22:03:52.892Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onRemoved": { - "modified": "2020-10-15T22:03:54.353Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onReplaced": { - "modified": "2020-10-15T22:03:54.180Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onSelectionChanged": { - "modified": "2020-10-15T22:03:53.491Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated": { - "modified": "2020-10-15T22:03:55.052Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/onZoomChange": { - "modified": "2020-10-15T22:03:55.458Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/print": { - "modified": "2020-10-15T22:03:49.388Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/printPreview": { - "modified": "2020-10-15T22:03:49.526Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/query": { - "modified": "2020-10-15T22:03:31.970Z", - "contributors": [ - "hellosct1", - "duduindo", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/reload": { - "modified": "2020-10-15T22:03:48.842Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/remove": { - "modified": "2020-10-15T22:03:49.809Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/removeCSS": { - "modified": "2020-10-15T22:03:48.685Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/saveAsPDF": { - "modified": "2020-10-15T22:03:10.663Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/sendMessage": { - "modified": "2020-10-15T21:56:45.906Z", - "contributors": [ - "hellosct1", - "wbamberg", - "sxilderik", - "Ostefanini" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/sendRequest": { - "modified": "2020-10-15T22:03:50.232Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/setZoom": { - "modified": "2020-10-15T22:03:49.328Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/setZoomSettings": { - "modified": "2020-10-15T22:03:49.946Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/show": { - "modified": "2020-10-15T22:03:54.896Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/toggleReaderMode": { - "modified": "2020-10-15T22:03:50.644Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/tabs/update": { - "modified": "2020-10-15T22:03:52.738Z", - "contributors": [ - "hellosct1", - "Highbrainer" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/theme": { - "modified": "2020-10-15T21:57:45.524Z", - "contributors": [ - "hellosct1", - "wbamberg", - "ntim" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/theme/Theme": { - "modified": "2020-10-15T21:57:51.337Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/theme/getCurrent": { - "modified": "2020-10-15T21:59:29.473Z", - "contributors": [ - "hellosct1", - "ntim" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/theme/onUpdated": { - "modified": "2020-10-15T22:00:25.228Z", - "contributors": [ - "hellosct1", - "ntim" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/theme/reset": { - "modified": "2020-10-15T21:57:51.422Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/theme/update": { - "modified": "2020-10-15T21:57:50.766Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/topSites": { - "modified": "2020-10-15T21:57:46.000Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/topSites/MostVisitedURL": { - "modified": "2020-10-15T21:58:01.003Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/topSites/get": { - "modified": "2020-10-15T21:58:02.136Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/types": { - "modified": "2019-07-03T11:01:54.372Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/types/BrowserSetting": { - "modified": "2020-10-15T21:57:18.321Z", - "contributors": [ - "hellosct1", - "andrewtruongmoz" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/types/BrowserSetting/clear": { - "modified": "2019-07-03T11:03:45.430Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/types/BrowserSetting/get": { - "modified": "2019-06-05T16:54:03.389Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/types/BrowserSetting/onChange": { - "modified": "2020-10-15T21:57:19.014Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/types/BrowserSetting/set": { - "modified": "2019-07-03T11:03:56.666Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts": { - "modified": "2020-10-15T22:23:35.773Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/APIScript": { - "modified": "2019-10-13T04:23:03.445Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/RegisteredUserScript": { - "modified": "2020-10-15T22:23:33.344Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/RegisteredUserScript/RegisteredUserScript.unregister()": { - "modified": "2020-10-15T22:23:34.113Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/RegisteredUserScript/unregister": { - "modified": "2020-10-15T22:23:35.185Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/UserScriptOptions": { - "modified": "2020-06-09T16:06:52.616Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/onBeforeScript": { - "modified": "2020-10-15T22:23:34.529Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/register": { - "modified": "2020-10-15T22:23:34.422Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/userScripts/travailler_avec_userScripts": { - "modified": "2019-10-13T04:55:15.939Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation": { - "modified": "2020-10-15T21:57:52.141Z", - "contributors": [ - "hellosct1", - "wbamberg", - "sxilderik", - "tiimax" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/TransitionQualifier": { - "modified": "2020-10-15T22:07:03.896Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/TransitionType": { - "modified": "2020-10-15T22:07:02.866Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/getAllFrames": { - "modified": "2020-10-15T22:07:02.793Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/getFrame": { - "modified": "2020-10-15T22:07:00.126Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onBeforeNavigate": { - "modified": "2020-10-15T22:07:02.940Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onCommitted": { - "modified": "2020-10-15T22:07:02.451Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onCompleted": { - "modified": "2020-10-15T22:07:03.742Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onCreatedNavigationTarget": { - "modified": "2020-10-15T22:07:03.933Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onDOMContentLoaded": { - "modified": "2020-10-15T22:07:02.959Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onErrorOccurred": { - "modified": "2020-10-15T22:07:03.666Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onHistoryStateUpdated": { - "modified": "2020-10-15T22:07:05.669Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onReferenceFragmentUpdated": { - "modified": "2020-10-15T22:07:03.560Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webNavigation/onTabReplaced": { - "modified": "2020-10-15T22:07:03.017Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest": { - "modified": "2020-10-15T21:56:48.858Z", - "contributors": [ - "hellosct1", - "wbamberg", - "Ostefanini" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/BlockingResponse": { - "modified": "2020-10-15T22:07:42.613Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/CertificateInfo": { - "modified": "2020-10-15T22:07:39.362Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/HttpHeaders": { - "modified": "2020-10-15T22:07:40.664Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES": { - "modified": "2020-10-15T22:07:41.126Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/RequestFilter": { - "modified": "2020-10-15T22:07:42.125Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType": { - "modified": "2020-10-15T22:07:40.764Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/SecurityInfo": { - "modified": "2020-10-15T22:07:37.628Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter": { - "modified": "2020-10-15T22:07:33.978Z", - "contributors": [ - "hellosct1", - "kernp" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/close": { - "modified": "2020-10-15T22:07:36.429Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/disconnect": { - "modified": "2020-10-15T22:07:37.658Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/error": { - "modified": "2020-10-15T22:07:36.127Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/ondata": { - "modified": "2020-10-15T22:07:38.841Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/onerror": { - "modified": "2020-10-15T22:07:36.695Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/onstart": { - "modified": "2020-10-15T22:07:36.284Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/onstop": { - "modified": "2020-10-15T22:07:38.862Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/resume": { - "modified": "2020-10-15T22:07:37.721Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/status": { - "modified": "2020-10-15T22:07:37.031Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/suspend": { - "modified": "2020-10-15T22:07:37.750Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/write": { - "modified": "2020-10-15T22:07:35.165Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/UploadData": { - "modified": "2020-10-15T22:07:36.344Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData": { - "modified": "2020-10-15T22:07:37.557Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/getSecurityInfo": { - "modified": "2020-10-15T22:07:36.970Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/handlerBehaviorChanged": { - "modified": "2020-10-15T22:07:41.109Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onAuthRequired": { - "modified": "2020-10-15T22:07:43.648Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeRedirect": { - "modified": "2020-10-15T22:07:43.857Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeRequest": { - "modified": "2020-10-15T22:07:42.418Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeSendHeaders": { - "modified": "2020-10-15T22:07:42.104Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onCompleted": { - "modified": "2020-10-15T22:07:39.958Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onErrorOccurred": { - "modified": "2020-10-15T22:07:41.971Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onHeadersReceived": { - "modified": "2020-10-15T22:07:37.308Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onResponseStarted": { - "modified": "2020-10-15T22:07:39.432Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/webRequest/onSendHeaders": { - "modified": "2020-10-15T22:07:44.311Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows": { - "modified": "2020-10-15T21:54:01.228Z", - "contributors": [ - "hellosct1", - "ariasuni", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/CreateType": { - "modified": "2020-10-15T21:54:03.517Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/WINDOW_ID_CURRENT": { - "modified": "2020-10-15T21:55:56.833Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/WINDOW_ID_NONE": { - "modified": "2020-10-15T21:55:57.264Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/Window": { - "modified": "2020-10-15T21:54:02.522Z", - "contributors": [ - "hellosct1", - "wbamberg", - "kodliber" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/WindowState": { - "modified": "2020-10-15T21:54:02.219Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/WindowType": { - "modified": "2020-10-15T21:54:03.274Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/create": { - "modified": "2020-10-15T21:55:59.984Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/get": { - "modified": "2020-10-15T21:55:58.524Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/getAll": { - "modified": "2020-10-15T21:56:00.964Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/getCurrent": { - "modified": "2020-10-15T21:55:58.426Z", - "contributors": [ - "TontonSancho", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/getLastFocused": { - "modified": "2020-10-15T21:55:59.393Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/onCreated": { - "modified": "2020-10-15T21:55:57.655Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/onFocusChanged": { - "modified": "2020-10-15T21:55:58.239Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/onRemoved": { - "modified": "2020-10-15T21:56:00.938Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/remove": { - "modified": "2020-10-15T21:55:58.919Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/API/windows/update": { - "modified": "2020-10-15T21:55:59.013Z", - "contributors": [ - "hellosct1", - "wbamberg" - ] - }, - "Mozilla/Add-ons/WebExtensions/Ajouter_un_bouton_a_la_barre_d_outils": { - "modified": "2019-07-03T05:22:48.886Z", - "contributors": [ - "hellosct1", - "JNa0", - "Goofy" - ] - }, - "Mozilla/Add-ons/WebExtensions/Ajouter_une_page_de_paramètres": { - "modified": "2019-05-19T03:44:17.070Z", - "contributors": [ - "hellosct1", - "RoyalPanda" - ] - }, - "Mozilla/Add-ons/WebExtensions/Alternative_distribution_options": { - "modified": "2019-07-08T08:22:26.722Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps": { - "modified": "2019-09-30T14:55:22.937Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise": { - "modified": "2019-07-08T08:21:59.137Z", - "contributors": [ - "hellosct1", - "JeffD" - ] - }, - "Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Sideloading_add-ons": { - "modified": "2019-07-08T08:20:57.253Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension": { - "modified": "2019-09-22T20:40:17.710Z", - "contributors": [ - "hellosct1", - "LeMilitaire", - "EBoespflug", - "Goofy", - "NerOcrO", - "zebu1er", - "lotfire24", - "Lamri" - ] - }, - "Mozilla/Add-ons/WebExtensions/Browser_actions": { - "modified": "2019-03-18T21:02:11.294Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Browser_compatibility_for_manifest.json": { - "modified": "2020-10-15T22:06:59.369Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Comparaison_avec_le_SDK_Add-on": { - "modified": "2019-05-19T07:28:28.529Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/Compatibilité_navigateurs_API_JavaScript": { - "modified": "2020-10-15T20:55:07.811Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/Compte_developpeurs": { - "modified": "2019-10-12T19:14:11.531Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Content_Security_Policy": { - "modified": "2019-11-07T19:55:56.920Z", - "contributors": [ - "hellosct1", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/Content_scripts": { - "modified": "2019-09-22T19:42:08.982Z", - "contributors": [ - "hellosct1", - "sblondon", - "JNa0", - "SphinxKnight", - "Idlus", - "SuperTouch", - "Ostefanini" - ] - }, - "Mozilla/Add-ons/WebExtensions/Debogage_(avant_Firefox_50)": { - "modified": "2019-03-18T21:02:43.036Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Developing_WebExtensions_for_Thunderbird": { - "modified": "2019-07-08T08:27:00.328Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Differences_entre_les_implementations_api": { - "modified": "2019-07-08T08:23:30.368Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Exemples": { - "modified": "2020-05-24T09:35:11.044Z", - "contributors": [ - "hellosct1", - "NerOcrO", - "gritchou" - ] - }, - "Mozilla/Add-ons/WebExtensions/Experience_utilisateur_bonnes_pratiques": { - "modified": "2019-05-18T19:46:03.001Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Firefox_differentiators": { - "modified": "2019-12-14T15:20:16.560Z", - "contributors": [ - "Mozinet", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Firefox_workflow_overview": { - "modified": "2020-05-24T09:38:20.083Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Incompatibilités_Chrome": { - "modified": "2019-10-13T06:54:47.652Z", - "contributors": [ - "hellosct1", - "SphinxKnight", - "lp177", - "wtoscer", - "Goofy", - "Bat41" - ] - }, - "Mozilla/Add-ons/WebExtensions/Index": { - "modified": "2019-03-18T21:01:44.832Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Intercepter_requêtes_HTTP": { - "modified": "2019-07-03T05:48:59.759Z", - "contributors": [ - "hellosct1", - "Wintersunshine-Do" - ] - }, - "Mozilla/Add-ons/WebExtensions/Internationalization": { - "modified": "2019-12-13T05:03:26.676Z", - "contributors": [ - "timkrief", - "hellosct1", - "Mozinet", - "dauphine-dev", - "Yopadd" - ] - }, - "Mozilla/Add-ons/WebExtensions/Match_patterns": { - "modified": "2020-10-15T21:55:13.648Z", - "contributors": [ - "hellosct1", - "JNa0", - "Watilin" - ] - }, - "Mozilla/Add-ons/WebExtensions/Modify_a_web_page": { - "modified": "2019-09-23T03:48:09.232Z", - "contributors": [ - "hellosct1", - "supertanuki" - ] - }, - "Mozilla/Add-ons/WebExtensions/Native_messaging": { - "modified": "2019-10-13T07:29:27.829Z", - "contributors": [ - "hellosct1", - "fbessou", - "JNa0", - "Drosos", - "SphinxKnight", - "peetcamron", - "Baniway", - "glacambre", - "m4ucoder" - ] - }, - "Mozilla/Add-ons/WebExtensions/Portage_d_une_extension_Firefox_heritee": { - "modified": "2019-05-19T03:42:46.903Z", - "contributors": [ - "hellosct1", - "TheSirC" - ] - }, - "Mozilla/Add-ons/WebExtensions/Prerequisites": { - "modified": "2019-03-18T21:02:53.858Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Publishing_your_WebExtension": { - "modified": "2019-09-22T20:09:03.419Z", - "contributors": [ - "hellosct1", - "zecakeh", - "adorsaz", - "ValentinG", - "romainneutron" - ] - }, - "Mozilla/Add-ons/WebExtensions/Tips": { - "modified": "2019-07-03T12:01:15.793Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Travailler_avec_l_API_Tabs": { - "modified": "2019-10-13T09:50:25.032Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/User_actions": { - "modified": "2019-07-03T12:01:29.724Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/What_are_WebExtensions": { - "modified": "2020-08-28T23:27:12.925Z", - "contributors": [ - "NassimSaboundji", - "hellosct1", - "Ilphrin", - "dark-rabbit", - "SphinxKnight", - "gritchou", - "Ostefanini", - "CarlosAvim", - "unpeudetout" - ] - }, - "Mozilla/Add-ons/WebExtensions/Work_with_the_Bookmarks_API": { - "modified": "2019-07-03T12:03:31.339Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/Working_with_files": { - "modified": "2019-05-18T19:31:16.604Z", - "contributors": [ - "hellosct1", - "Torzivalds", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/Your_first_WebExtension": { - "modified": "2020-09-01T21:52:47.245Z", - "contributors": [ - "NassimSaboundji", - "hellosct1", - "TwinProduction", - "NerOcrO", - "Enche", - "DeflatedBimbo" - ] - }, - "Mozilla/Add-ons/WebExtensions/Your_second_WebExtension": { - "modified": "2020-05-24T09:19:35.748Z", - "contributors": [ - "hellosct1", - "ThCarrere", - "NerOcrO", - "Artusamak", - "b1nj", - "pascalchevrel", - "Hell_Carlito", - "DeflatedBimbo" - ] - }, - "Mozilla/Add-ons/WebExtensions/bonnes_pratiques_pour_la_mise_a_jour_de_votre_extension": { - "modified": "2019-07-05T09:31:56.338Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/choisissez_une_version_firefox_pour_le_developpement_extensions_web": { - "modified": "2019-10-12T17:29:13.794Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/construction_extension_cross_browser": { - "modified": "2019-09-22T19:56:40.143Z", - "contributors": [ - "hellosct1", - "ponsfrilus" - ] - }, - "Mozilla/Add-ons/WebExtensions/demander_les_bonnes_permissions": { - "modified": "2019-07-03T12:00:26.344Z", - "contributors": [ - "hellosct1", - "regseb" - ] - }, - "Mozilla/Add-ons/WebExtensions/demandes_de_permission": { - "modified": "2019-05-18T18:06:34.313Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/extension_des_outils_de_developpement": { - "modified": "2019-07-08T08:20:22.550Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/inserer_en_toute_securite_du_contenu_externe_dans_une_page": { - "modified": "2019-07-03T12:00:39.099Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/installation_temporaire_dans_Firefox": { - "modified": "2019-03-28T06:57:14.853Z", - "contributors": [ - "hellosct1", - "zecakeh", - "fbessou" - ] - }, - "Mozilla/Add-ons/WebExtensions/interagir_avec_le_presse_papier": { - "modified": "2019-07-03T05:46:49.789Z", - "contributors": [ - "hellosct1", - "MyriamB" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json": { - "modified": "2020-10-15T21:39:14.599Z", - "contributors": [ - "hellosct1", - "loella16", - "Bat" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/arriere-plan": { - "modified": "2020-10-15T21:53:54.965Z", - "contributors": [ - "hellosct1", - "Porkepix", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/auteur": { - "modified": "2020-10-15T21:53:55.193Z", - "contributors": [ - "hellosct1", - "fscholz", - "regseb", - "Porkepix", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/browser_action": { - "modified": "2020-10-15T21:54:15.348Z", - "contributors": [ - "hellosct1", - "loella16", - "SphinxKnight" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings": { - "modified": "2020-10-15T21:39:14.644Z", - "contributors": [ - "hellosct1", - "ExE-Boss", - "loella16", - "Goofy", - "Bat" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides": { - "modified": "2020-10-15T21:55:19.782Z", - "contributors": [ - "hellosct1", - "loella16", - "Ostefanini" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/chrome_url_overrides": { - "modified": "2020-10-15T21:55:21.140Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/commands": { - "modified": "2020-10-15T21:55:23.895Z", - "contributors": [ - "hellosct1", - "wbamberg", - "Mozinet", - "edrflt", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts": { - "modified": "2020-10-15T21:55:21.489Z", - "contributors": [ - "hellosct1", - "Watilin", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/content_security_policy": { - "modified": "2020-10-15T21:55:18.077Z", - "contributors": [ - "hellosct1", - "Watilin" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/default_locale": { - "modified": "2020-10-15T21:55:15.929Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/description": { - "modified": "2020-10-15T21:55:19.122Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/developer": { - "modified": "2020-10-15T21:55:22.713Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/devtools_page": { - "modified": "2020-10-15T21:55:10.420Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/dictionaries": { - "modified": "2020-10-15T22:18:47.471Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/externally_connectable": { - "modified": "2020-10-15T22:23:08.757Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url": { - "modified": "2020-10-15T21:55:17.650Z", - "contributors": [ - "hellosct1", - "regseb", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/icons": { - "modified": "2020-10-15T21:55:13.686Z", - "contributors": [ - "hellosct1", - "ggrossetie", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/incognito": { - "modified": "2020-10-15T21:55:19.216Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/manifest_version": { - "modified": "2020-10-15T21:55:12.053Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/name": { - "modified": "2020-10-15T21:55:11.900Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/offline_enabled": { - "modified": "2020-10-15T22:11:14.653Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/omnibox": { - "modified": "2020-10-15T21:55:22.642Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions": { - "modified": "2020-10-15T21:55:16.335Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/options_page": { - "modified": "2020-10-15T22:08:03.256Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/options_ui": { - "modified": "2020-10-15T21:55:19.972Z", - "contributors": [ - "hellosct1", - "loella16", - "Ostefanini" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/page_action": { - "modified": "2020-10-15T21:55:24.587Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/permissions": { - "modified": "2020-10-15T21:54:37.682Z", - "contributors": [ - "hellosct1", - "Salamafet", - "Torzivalds", - "loella16", - "lotfire24" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers": { - "modified": "2020-10-15T21:55:15.617Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/short_name": { - "modified": "2020-10-15T21:55:14.061Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/sidebar_action": { - "modified": "2020-10-15T21:55:14.605Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/storage": { - "modified": "2020-10-15T22:30:02.853Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/theme": { - "modified": "2020-10-15T21:55:34.819Z", - "contributors": [ - "hellosct1", - "ariasuni", - "ntim", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/theme_experimentation": { - "modified": "2020-10-15T22:23:34.499Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/user_scripts": { - "modified": "2019-10-12T20:43:45.353Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/version": { - "modified": "2020-10-15T21:55:11.372Z", - "contributors": [ - "hellosct1", - "regseb", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/version_name": { - "modified": "2020-10-15T22:04:03.493Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources": { - "modified": "2020-10-15T21:55:21.044Z", - "contributors": [ - "hellosct1", - "loella16" - ] - }, - "Mozilla/Add-ons/WebExtensions/manifests_native": { - "modified": "2019-09-30T13:34:40.128Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/partage_d_objets_avec_des_scripts_de_page": { - "modified": "2020-09-21T20:21:11.522Z", - "contributors": [ - "JackNUMBER", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/que_faire_ensuite": { - "modified": "2020-05-24T10:03:42.606Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/que_signifie_le_rejet_d_une_revision_pour_les_utilisateurs": { - "modified": "2019-09-30T16:27:32.411Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/securite_bonne_pratique": { - "modified": "2019-05-18T18:20:19.136Z", - "contributors": [ - "hellosct1", - "JNa0" - ] - }, - "Mozilla/Add-ons/WebExtensions/test_des_fonctionnalites_persistantes_et_de_redemarrage": { - "modified": "2019-05-19T02:44:57.977Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/travailler_avec_des_identites_contextuelles": { - "modified": "2019-07-03T12:03:14.858Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/travailler_avec_l_API_cookies": { - "modified": "2019-07-03T12:04:24.574Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface": { - "modified": "2019-05-19T16:33:54.438Z", - "contributors": [ - "hellosct1", - "rebloor" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/Browser_action": { - "modified": "2019-07-03T12:02:27.727Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles": { - "modified": "2020-10-15T22:06:57.625Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/Notifications": { - "modified": "2019-09-30T16:39:31.088Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/Omnibox": { - "modified": "2019-07-03T14:25:31.393Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/Options_pages": { - "modified": "2019-10-07T19:06:20.943Z", - "contributors": [ - "WSH", - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/Page_actions": { - "modified": "2019-07-03T15:11:50.284Z", - "contributors": [ - "hellosct1", - "Silbad" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/Popups": { - "modified": "2019-09-30T16:35:45.642Z", - "contributors": [ - "hellosct1", - "supertanuki", - "Silbad" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/barres_laterales": { - "modified": "2020-06-21T16:36:44.213Z", - "contributors": [ - "hellosct1", - "Eonm" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/elements_menu_contextuel": { - "modified": "2019-09-30T14:46:57.757Z", - "contributors": [ - "hellosct1", - "chrisspb", - "Outpox" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/lignes_directrices_en_matiere_accessibilite": { - "modified": "2019-10-12T19:02:53.249Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/pages_web_incluses": { - "modified": "2020-06-09T16:59:51.409Z", - "contributors": [ - "hellosct1", - "JNa0" - ] - }, - "Mozilla/Add-ons/WebExtensions/user_interface/panneaux_devtools": { - "modified": "2019-07-03T14:11:08.292Z", - "contributors": [ - "hellosct1" - ] - }, - "Mozilla/Add-ons_bonnes_pratiques_performances_extensions": { - "modified": "2019-03-23T22:52:30.998Z", - "contributors": [ - "ArakNoPhob" - ] - }, - "Mozilla/Developer_guide": { - "modified": "2020-08-31T05:54:42.010Z", - "contributors": [ - "Voulto", - "chrisdavidmills", - "jp.jeaphil", - "echaudron", - "Jonathanlempereur", - "wakka27", - "Delapouite", - "bskari" - ] - }, - "Mozilla/Developer_guide/How_to_Submit_a_Patch": { - "modified": "2019-03-23T22:06:44.874Z", - "contributors": [ - "sylvestre", - "chrisdavidmills", - "loella16", - "KurtC0ba1n" - ] - }, - "Mozilla/Developer_guide/Reviewer_Checklist": { - "modified": "2020-04-06T15:56:36.678Z", - "contributors": [ - "olivierdupon", - "chrisdavidmills", - "loella16", - "CarlosAvim" - ] - }, - "Mozilla/Developer_guide/Vous_venez_juste_de_compiler_Firefox": { - "modified": "2019-03-23T23:19:14.291Z", - "contributors": [ - "chrisdavidmills", - "juleschz" - ] - }, - "Mozilla/Developer_guide/mozilla-central": { - "modified": "2019-03-24T00:02:46.954Z", - "contributors": [ - "chrisdavidmills", - "QuentinAmelot", - "tregagnon", - "fscholz", - "BenoitL" - ] - }, - "Mozilla/Firefox": { - "modified": "2020-01-18T13:29:35.316Z", - "contributors": [ - "leela52452", - "SphinxKnight", - "wbamberg", - "cecilebertin", - "arthuretienne", - "zozolulu74", - "Pikexel", - "flo5589", - "FredB", - "ethertank" - ] - }, - "Mozilla/Firefox/Experimental_features": { - "modified": "2020-09-22T03:39:10.062Z", - "contributors": [ - "Mttwt9", - "olivierdupon", - "wbamberg", - "GuiBret", - "Lululion", - "DTSSE" - ] - }, - "Mozilla/Firefox/Releases/25": { - "modified": "2020-09-12T04:13:11.916Z", - "contributors": [ - "Voulto", - "wbamberg", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/25/Site_Compatibility": { - "modified": "2019-01-16T21:57:42.942Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/26": { - "modified": "2020-09-16T08:21:14.333Z", - "contributors": [ - "Voulto", - "wbamberg", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/26/Site_Compatibility": { - "modified": "2019-01-16T21:59:11.115Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/27": { - "modified": "2020-09-20T06:36:32.881Z", - "contributors": [ - "Voulto", - "wbamberg", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/27/Site_Compatibility": { - "modified": "2019-01-16T21:49:05.193Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/28": { - "modified": "2020-09-30T06:44:33.639Z", - "contributors": [ - "Voulto", - "wbamberg", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/28/Site_Compatibility": { - "modified": "2019-01-16T21:59:08.939Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/29": { - "modified": "2020-10-29T07:27:45.030Z", - "contributors": [ - "Voulto", - "wbamberg", - "Sebastianz", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/29/Site_Compatibility": { - "modified": "2019-01-16T21:57:45.131Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/30": { - "modified": "2020-09-21T08:58:56.014Z", - "contributors": [ - "Voulto", - "wbamberg", - "fscholz" - ] - }, - "Mozilla/Firefox/Releases/30/Site_Compatibility": { - "modified": "2019-01-16T21:57:39.588Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/31": { - "modified": "2019-03-23T22:41:00.540Z", - "contributors": [ - "wbamberg", - "teoli" - ] - }, - "Mozilla/Firefox/Releases/31/Site_Compatibility": { - "modified": "2019-01-16T21:57:55.582Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/32": { - "modified": "2019-03-23T22:59:34.596Z", - "contributors": [ - "wbamberg", - "kmaglione" - ] - }, - "Mozilla/Firefox/Releases/32/Site_Compatibility": { - "modified": "2019-03-23T22:59:35.978Z", - "contributors": [ - "wbamberg", - "Amandine83" - ] - }, - "Mozilla/Firefox/Releases/33": { - "modified": "2019-03-23T22:40:55.948Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "teoli" - ] - }, - "Mozilla/Firefox/Releases/33/Site_Compatibility": { - "modified": "2019-01-16T21:57:26.981Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/34": { - "modified": "2019-03-23T22:42:55.224Z", - "contributors": [ - "wbamberg", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/34/Site_Compatibility": { - "modified": "2019-01-16T21:49:04.698Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/36": { - "modified": "2019-03-23T22:42:49.784Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/36/Site_Compatibility": { - "modified": "2019-01-16T21:49:12.998Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/37": { - "modified": "2019-03-23T22:42:50.839Z", - "contributors": [ - "wbamberg", - "kohei.yoshino" - ] - }, - "Mozilla/Firefox/Releases/37/Site_Compatibility": { - "modified": "2019-01-16T21:49:07.566Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/38": { - "modified": "2019-03-23T22:42:50.499Z", - "contributors": [ - "wbamberg", - "teoli" - ] - }, - "Mozilla/Firefox/Releases/38/Site_Compatibility": { - "modified": "2019-01-16T21:49:04.613Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/39": { - "modified": "2020-09-21T08:17:39.666Z", - "contributors": [ - "Voulto", - "wbamberg", - "Guillaume-Heras", - "teoli" - ] - }, - "Mozilla/Firefox/Releases/39/Site_Compatibility": { - "modified": "2019-01-16T21:49:07.002Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Releases/42": { - "modified": "2020-09-20T07:50:40.946Z", - "contributors": [ - "Voulto", - "wbamberg", - "SphinxKnight", - "syoichi" - ] - }, - "Mozilla/Firefox/Releases/42/Site_Compatibility": { - "modified": "2019-01-16T21:48:30.986Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions": { - "modified": "2020-09-04T09:36:06.531Z", - "contributors": [ - "Voulto", - "wbamberg", - "FredB", - "Sheppy" - ] - }, - "Mozilla/Firefox/Versions/1.5": { - "modified": "2019-03-24T00:15:36.655Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner", - "BenoitL", - "Mgjbot", - "Mozinet", - "Chbok" - ] - }, - "Mozilla/Firefox/Versions/11": { - "modified": "2019-03-23T23:38:04.029Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/12": { - "modified": "2019-03-18T21:08:58.052Z", - "contributors": [ - "fscholz", - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/13": { - "modified": "2019-03-23T23:38:05.142Z", - "contributors": [ - "wbamberg", - "prayash", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/15": { - "modified": "2019-03-23T23:06:29.503Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/16": { - "modified": "2019-03-23T23:37:32.181Z", - "contributors": [ - "wbamberg", - "mrstork", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/17": { - "modified": "2019-03-18T21:08:57.759Z", - "contributors": [ - "fscholz", - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/17/Site_compatibility": { - "modified": "2019-01-16T21:49:04.673Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/18": { - "modified": "2019-03-23T23:35:11.165Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/18/Site_compatibility": { - "modified": "2019-01-16T21:57:32.133Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/19": { - "modified": "2019-03-23T23:34:04.814Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "tregagnon", - "FredB", - "ThePrisoner", - "Skoua" - ] - }, - "Mozilla/Firefox/Versions/19/Site_compatibility": { - "modified": "2019-01-16T21:57:39.651Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/2": { - "modified": "2019-03-24T00:04:11.055Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "fscholz", - "Mgjbot", - "BenoitL", - "Fredchat", - "Chbok", - "Lefou", - "Planche", - "Mozinet" - ] - }, - "Mozilla/Firefox/Versions/20": { - "modified": "2019-03-23T23:33:26.421Z", - "contributors": [ - "wbamberg", - "FredB", - "ThePrisoner", - "Martial76" - ] - }, - "Mozilla/Firefox/Versions/20/Site_compatibility": { - "modified": "2019-01-16T21:58:36.580Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/21": { - "modified": "2019-11-20T21:19:06.767Z", - "contributors": [ - "wbamberg", - "tregagnon", - "Delapouite" - ] - }, - "Mozilla/Firefox/Versions/21/Site_compatibility": { - "modified": "2019-01-16T21:57:29.270Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/22": { - "modified": "2019-03-23T23:28:17.543Z", - "contributors": [ - "wbamberg", - "chrisdavidmills", - "Skoua" - ] - }, - "Mozilla/Firefox/Versions/22/Site_compatibility": { - "modified": "2019-01-16T21:57:40.074Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/23": { - "modified": "2019-03-23T22:59:15.612Z", - "contributors": [ - "wbamberg", - "benaddou", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/23/Site_compatibility": { - "modified": "2019-01-16T21:57:25.542Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/24": { - "modified": "2019-03-23T22:43:17.357Z", - "contributors": [ - "wbamberg", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/24/Site_compatibility": { - "modified": "2019-01-16T21:57:47.692Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/3": { - "modified": "2019-03-23T23:57:59.495Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "BenoitL", - "Mgjbot", - "Chbok", - "Mozinet", - "Fredchat", - "Rishtarz", - "Kyodev" - ] - }, - "Mozilla/Firefox/Versions/3.5": { - "modified": "2019-03-24T00:01:24.251Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "BenoitL", - "Chbok", - "Goofy", - "Mgjbot" - ] - }, - "Mozilla/Firefox/Versions/3.6": { - "modified": "2019-12-13T20:33:39.144Z", - "contributors": [ - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner", - "fryn", - "fscholz", - "Thomash", - "BenoitL" - ] - }, - "Mozilla/Firefox/Versions/35": { - "modified": "2019-12-13T20:33:22.682Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "mliatt", - "Godrod", - "Runatal" - ] - }, - "Mozilla/Firefox/Versions/35/Site_Compatibility": { - "modified": "2019-01-16T21:49:04.592Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/4": { - "modified": "2019-11-21T00:43:25.071Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/40": { - "modified": "2019-03-23T22:51:13.163Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "BenoitEsnard", - "ov357" - ] - }, - "Mozilla/Firefox/Versions/40/Site_Compatibility": { - "modified": "2019-01-16T21:48:27.545Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/41": { - "modified": "2019-03-23T22:49:38.696Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "Paleno" - ] - }, - "Mozilla/Firefox/Versions/41/Site_Compatibility": { - "modified": "2019-01-16T21:48:49.107Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Mozilla/Firefox/Versions/5": { - "modified": "2019-03-23T23:38:10.236Z", - "contributors": [ - "fscholz", - "wbamberg", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/50": { - "modified": "2019-03-23T22:23:32.722Z", - "contributors": [ - "wbamberg", - "Xhelas" - ] - }, - "Mozilla/Firefox/Versions/59": { - "modified": "2019-03-18T21:37:37.649Z", - "contributors": [ - "wbamberg", - "julienw" - ] - }, - "Mozilla/Firefox/Versions/6": { - "modified": "2019-11-21T00:43:13.867Z", - "contributors": [ - "wbamberg", - "tregagnon", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/63": { - "modified": "2019-03-18T21:22:08.997Z", - "contributors": [ - "algorun77" - ] - }, - "Mozilla/Firefox/Versions/65": { - "modified": "2019-03-18T20:39:08.555Z", - "contributors": [ - "samus35" - ] - }, - "Mozilla/Firefox/Versions/68": { - "modified": "2019-08-22T13:01:38.971Z", - "contributors": [ - "BuzzRage" - ] - }, - "Mozilla/Firefox/Versions/69": { - "modified": "2019-08-14T05:59:15.506Z", - "contributors": [ - "Kuzcoo" - ] - }, - "Mozilla/Firefox/Versions/7": { - "modified": "2019-03-23T23:38:06.097Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/70": { - "modified": "2019-09-02T05:07:52.712Z", - "contributors": [ - "pbrosset" - ] - }, - "Mozilla/Firefox/Versions/76": { - "modified": "2020-05-10T16:11:03.049Z", - "contributors": [ - "tristantheb" - ] - }, - "Mozilla/Firefox/Versions/77": { - "modified": "2020-05-10T15:53:10.394Z", - "contributors": [ - "tristantheb", - "Neku3721" - ] - }, - "Mozilla/Firefox/Versions/8": { - "modified": "2019-11-21T00:43:06.185Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Mozilla/Firefox/Versions/9": { - "modified": "2019-12-13T20:33:26.081Z", - "contributors": [ - "wbamberg", - "fscholz", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "NPAPI/Constantes": { - "modified": "2019-03-24T00:03:23.228Z", - "contributors": [ - "Delapouite", - "Demos" - ] - }, - "NavigatorUserMedia.getUserMedia": { - "modified": "2019-03-23T23:05:32.482Z", - "contributors": [ - "a-mt", - "Nek-", - "Eric013", - "SuperStrong" - ] - }, - "Outils": { - "modified": "2020-07-16T22:44:14.844Z", - "contributors": [ - "SphinxKnight", - "maximelore", - "sunazerty", - "wbamberg", - "Dralyab", - "unpeudetout", - "stephane34", - "enguerran", - "BenoitL", - "Pierrot", - "Goofy", - "Sabine", - "Azurrea", - "thequestion", - "KittenOverlord", - "ninovelena", - "tregagnon", - "teoli", - "wakka27", - "Juju77", - "tchevalier", - "Delapouite", - "FredB", - "ethertank", - "julienw", - "tcit", - "Fredchat", - "Kyodev", - "Mgjbot", - "Takenbot", - "Andreas Wuest", - "Jean-Yves Cronier", - "Chbok", - "Jep", - "Nickolay", - "TestUser" - ] - }, - "Outils/Accessing_the_Developer_Tools": { - "modified": "2020-07-16T22:35:25.957Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Add-ons": { - "modified": "2020-07-16T22:36:23.351Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Boîte_à_outils_du_navigateur": { - "modified": "2020-07-16T22:35:55.531Z", - "contributors": [ - "hellosct1", - "wbamberg", - "maximelore", - "nico_nc", - "teoli", - "KittenOverlord", - "nora" - ] - }, - "Outils/CSS_Coverage": { - "modified": "2019-03-23T22:51:54.141Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Console_JavaScript": { - "modified": "2020-07-16T22:35:42.346Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli", - "Jeremie", - "tregagnon", - "Delapouite", - "SylvainPasche", - "BenoitL", - "Pablor44", - "Fredchat", - "Matdere" - ] - }, - "Outils/Console_Web": { - "modified": "2020-07-16T22:34:05.900Z", - "contributors": [ - "maximelore", - "wbamberg", - "glickind", - "Coraline", - "teoli", - "Thegennok", - "trevorh", - "J.DMB", - "tregagnon", - "milc", - "sperling", - "dataG" - ] - }, - "Outils/Console_Web/Console_messages": { - "modified": "2020-08-29T03:46:11.424Z", - "contributors": [ - "stphngrc", - "wbamberg", - "maximelore", - "glickind" - ] - }, - "Outils/Console_Web/Fonctions_d_aide": { - "modified": "2020-08-28T09:54:35.807Z", - "contributors": [ - "stphngrc", - "wbamberg", - "maximelore", - "teoli", - "tregagnon" - ] - }, - "Outils/Console_Web/Keyboard_shortcuts": { - "modified": "2020-07-16T22:34:22.621Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Console_Web/Opening_the_Web_Console": { - "modified": "2020-07-16T22:34:17.163Z", - "contributors": [ - "maximelore", - "wbamberg", - "glickind" - ] - }, - "Outils/Console_Web/Rich_output": { - "modified": "2020-07-16T22:34:20.227Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Console_Web/Split_console": { - "modified": "2020-07-16T22:34:20.903Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Console_Web/The_command_line_interpreter": { - "modified": "2020-08-28T09:12:31.516Z", - "contributors": [ - "stphngrc", - "tchioubak", - "aminelch", - "A-312", - "maximelore", - "wbamberg" - ] - }, - "Outils/Couleurs_des_DevTools": { - "modified": "2020-07-16T22:35:53.314Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/DOM_Property_Viewer": { - "modified": "2020-07-16T22:36:34.322Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Debugger_(before_Firefox_52)": { - "modified": "2019-03-23T22:22:28.971Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/Disable_breakpoints": { - "modified": "2019-03-23T22:21:17.073Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to": { - "modified": "2019-03-23T22:22:26.886Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Access_debugging_in_add-ons": { - "modified": "2019-03-23T22:21:33.063Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Black_box_a_source": { - "modified": "2019-03-23T22:21:44.269Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Break_on_a_DOM_event": { - "modified": "2019-03-23T22:22:11.943Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Debug_eval_sources": { - "modified": "2019-03-23T22:22:29.066Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Disable_breakpoints": { - "modified": "2019-03-23T22:22:13.461Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Examine,_modify,_and_watch_variables": { - "modified": "2019-03-23T22:22:09.066Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Highlight_and_inspect_DOM_nodes": { - "modified": "2019-03-23T22:22:10.389Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Open_the_debugger": { - "modified": "2019-03-23T22:22:10.293Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Pretty-print_a_minified_file": { - "modified": "2019-03-23T22:22:11.012Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Search_and_filter": { - "modified": "2019-03-23T22:21:42.961Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Set_a_breakpoint": { - "modified": "2019-03-23T22:21:42.671Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Set_a_conditional_breakpoint": { - "modified": "2019-03-23T22:21:51.627Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Step_through_code": { - "modified": "2019-03-23T22:21:44.640Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/How_to/Use_a_source_map": { - "modified": "2019-03-23T22:21:49.457Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/Keyboard_shortcuts": { - "modified": "2019-03-23T22:21:50.707Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/Settings": { - "modified": "2019-03-23T22:14:03.961Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Debugger_(before_Firefox_52)/UI_Tour": { - "modified": "2019-03-23T22:19:32.754Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/DevToolsAPI": { - "modified": "2020-07-16T22:35:24.078Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Débogage_distant": { - "modified": "2020-07-16T22:35:37.277Z", - "contributors": [ - "maximelore", - "wbamberg", - "glickind", - "teoli", - "J.DMB", - "G-de-Bruges", - "medhi.naveau@hotmail.be", - "Omnilaika02", - "KIDY" - ] - }, - "Outils/Débogage_distant/Chrome_Desktop": { - "modified": "2020-07-16T22:35:40.256Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "teoli", - "jsx", - "dorianecampagne" - ] - }, - "Outils/Débogage_distant/Debugging_Firefox_Desktop": { - "modified": "2020-07-16T22:35:40.983Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Débogage_distant/Debugging_Firefox_for_Android_with_WebIDE_clone": { - "modified": "2020-07-16T22:35:40.616Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Débogage_distant/Thunderbird": { - "modified": "2020-07-16T22:35:39.867Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Débogueur": { - "modified": "2020-07-16T22:35:04.438Z", - "contributors": [ - "maximelore", - "wbamberg", - "glickind", - "teoli", - "SphinxKnight", - "Omnilaika02", - "nora" - ] - }, - "Outils/Débogueur/Comment": { - "modified": "2020-09-04T07:36:16.042Z", - "contributors": [ - "Voulto", - "wbamberg", - "maximelore", - "teoli", - "sidgan" - ] - }, - "Outils/Débogueur/Comment/Accéder_au_débogage_depuis_un_module_complàmentaire": { - "modified": "2020-07-16T22:35:14.754Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Afficher_en_surbrillance_et_inspecter_le_DOM": { - "modified": "2020-07-16T22:35:13.697Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Ajouter_un_point_d_arrêt": { - "modified": "2020-07-16T22:35:09.962Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Ajouter_un_point_d_arrêt_conditionnel": { - "modified": "2020-07-16T22:35:10.533Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Breaking_on_exceptions": { - "modified": "2020-07-16T22:35:15.043Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Débogueur/Comment/Déboguer_des_sources_évaluées": { - "modified": "2020-07-16T22:35:14.396Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Désactiver_des_points_d_arrêts": { - "modified": "2020-07-16T22:35:11.273Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Examiner,_modifier,_et_espionner_des_variables": { - "modified": "2020-07-16T22:35:12.981Z", - "contributors": [ - "wbamberg", - "maximelore", - "EIJDOLL", - "teoli", - "Goofy" - ] - }, - "Outils/Débogueur/Comment/Formater_et_indenter_un_fichier_minifié": { - "modified": "2020-07-16T22:35:13.988Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Mettre_une_source_dans_une_boîte_noire": { - "modified": "2020-07-16T22:35:13.367Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Ouvrir_le_débogueur": { - "modified": "2020-07-16T22:35:09.012Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Parcourir_le_code": { - "modified": "2020-07-16T22:35:11.898Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/S_arrêter_sur_un_évènement_DOM": { - "modified": "2020-07-16T22:35:11.566Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Comment/Search": { - "modified": "2020-07-16T22:35:15.360Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Débogueur/Comment/Set_Watch_Expressions": { - "modified": "2020-07-16T22:35:15.802Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Débogueur/Comment/Utiliser_une_source_map": { - "modified": "2020-07-16T22:35:12.417Z", - "contributors": [ - "tchevalier", - "maximelore", - "wbamberg", - "hervehobbes", - "necraidan", - "teoli", - "franckuser16" - ] - }, - "Outils/Débogueur/Limitations_of_the_new_debugger": { - "modified": "2019-03-23T22:22:02.266Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Débogueur/Raccourcis_clavier": { - "modified": "2020-07-16T22:35:18.146Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Débogueur/Set_an_XHR_breakpoint": { - "modified": "2020-07-16T22:35:20.080Z", - "contributors": [ - "maximelore" - ] - }, - "Outils/Débogueur/Source_map_errors": { - "modified": "2020-07-16T22:35:19.304Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Débogueur/Visite_guidée_de_l_interface_utilisateur": { - "modified": "2020-07-16T22:35:16.333Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli", - "Goofy" - ] - }, - "Outils/Editeur_Web_Audio": { - "modified": "2020-07-16T22:36:08.440Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli", - "tregagnon", - "batisteo" - ] - }, - "Outils/Editeur_de_shaders": { - "modified": "2020-07-16T22:35:54.397Z", - "contributors": [ - "maximelore", - "wbamberg", - "stephaniehobson", - "teoli", - "bassam", - "tregagnon" - ] - }, - "Outils/Firefox_OS_Simulator_clone": { - "modified": "2020-07-16T22:36:22.890Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Outils/Frise_chronologique": { - "modified": "2020-07-16T22:36:22.616Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Index": { - "modified": "2020-07-16T22:36:03.885Z", - "contributors": [ - "wbamberg", - "xdelatour" - ] - }, - "Outils/Inspecteur": { - "modified": "2020-07-16T22:34:27.499Z", - "contributors": [ - "maximelore", - "wbamberg", - "clementpolito", - "teoli", - "J.DMB", - "tregagnon", - "milc", - "tchevalier", - "Delapouite" - ] - }, - "Outils/Inspecteur/3-pane_mode": { - "modified": "2020-07-16T22:34:53.714Z", - "contributors": [ - "maximelore" - ] - }, - "Outils/Inspecteur/Comment": { - "modified": "2020-07-16T22:34:31.149Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli", - "sidgan" - ] - }, - "Outils/Inspecteur/Comment/Edition_filtres_css": { - "modified": "2020-07-16T22:34:45.240Z", - "contributors": [ - "maximelore", - "wbamberg", - "MRdotB" - ] - }, - "Outils/Inspecteur/Comment/Examine_grid_layouts": { - "modified": "2020-07-16T22:34:47.223Z", - "contributors": [ - "GregMorel", - "maximelore", - "wbamberg", - "Mozinet", - "PhilippePerret" - ] - }, - "Outils/Inspecteur/Comment/Examiner_et_modifier_le_CSS": { - "modified": "2020-07-16T22:34:42.394Z", - "contributors": [ - "wbamberg", - "Alan_Braut", - "maximelore", - "Loliwe", - "SphinxKnight", - "teoli" - ] - }, - "Outils/Inspecteur/Comment/Examiner_et_modifier_le_modèle_de_boîte": { - "modified": "2020-07-16T22:34:34.287Z", - "contributors": [ - "wbamberg", - "maximelore", - "clementpolito", - "teoli", - "jsx" - ] - }, - "Outils/Inspecteur/Comment/Examiner_et_éditer_le_code_HTML": { - "modified": "2020-07-16T22:34:40.766Z", - "contributors": [ - "maximelore", - "wbamberg", - "JeffD", - "teoli", - "micetf", - "SphinxKnight", - "Goofy" - ] - }, - "Outils/Inspecteur/Comment/Examiner_les_écouteurs_d_évènements": { - "modified": "2020-07-16T22:34:35.648Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Inspecteur/Comment/Inspecter_et_sélectionner_des_couleurs": { - "modified": "2020-07-16T22:34:34.991Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli", - "jsx" - ] - }, - "Outils/Inspecteur/Comment/Ouvrir_l_Inspecteur": { - "modified": "2020-07-16T22:34:32.703Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Inspecteur/Comment/Prévisualiser_des_images_de_fond": { - "modified": "2020-07-16T22:34:44.112Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli" - ] - }, - "Outils/Inspecteur/Comment/Reposition_elements_in_the_page": { - "modified": "2020-07-16T22:34:45.853Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Inspecteur/Comment/Select_and_highlight_elements": { - "modified": "2020-07-16T22:34:46.553Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Inspecteur/Comment/Sélectionner_un_élément": { - "modified": "2020-07-16T22:34:33.580Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli", - "jsx" - ] - }, - "Outils/Inspecteur/Comment/Utiliser_l_API_de_l_Inspecteur": { - "modified": "2020-07-16T22:34:44.851Z", - "contributors": [ - "maximelore", - "wbamberg", - "daimebag", - "teoli" - ] - }, - "Outils/Inspecteur/Comment/Utiliser_l_Inspecteur_depuis_la_Console_Web": { - "modified": "2020-07-16T22:34:44.470Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Inspecteur/Comment/Visualiser_les_transformations": { - "modified": "2020-07-16T22:34:39.528Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli" - ] - }, - "Outils/Inspecteur/Comment/Work_with_animations": { - "modified": "2020-07-16T22:34:36.523Z", - "contributors": [ - "maximelore", - "wbamberg", - "daimebag", - "colibri83", - "hutrd", - "MRdotB" - ] - }, - "Outils/Inspecteur/Comment/Work_with_animations/Animation_inspector_(Firefox_41_and_42)": { - "modified": "2020-07-16T22:34:37.976Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Inspecteur/Comment/Work_with_animations/Animation_inspector_example:_Web_Animations_API": { - "modified": "2020-07-16T22:34:38.254Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Inspecteur/Comment/Work_with_animations/Animations_examples": { - "modified": "2020-07-16T22:34:37.720Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Inspecteur/Panneau_HTML": { - "modified": "2020-07-16T22:34:30.496Z", - "contributors": [ - "wbamberg", - "teoli", - "maximelore" - ] - }, - "Outils/Inspecteur/UI_Tour": { - "modified": "2020-07-16T22:34:49.046Z", - "contributors": [ - "maximelore", - "wbamberg", - "fixius69gggg", - "hutrd", - "clementpolito" - ] - }, - "Outils/Inspecteur_accessibilite": { - "modified": "2020-07-16T22:36:39.636Z", - "contributors": [ - "maximelore", - "hellosct1", - "SphinxKnight" - ] - }, - "Outils/Inspecteur_accessibilite/Simulation": { - "modified": "2020-07-16T22:36:40.512Z", - "contributors": [ - "MarieComet" - ] - }, - "Outils/JSON_viewer": { - "modified": "2020-07-16T22:36:31.458Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Measure_a_portion_of_the_page": { - "modified": "2020-07-16T22:36:38.831Z", - "contributors": [ - "maximelore" - ] - }, - "Outils/Memory": { - "modified": "2020-07-16T22:36:26.928Z", - "contributors": [ - "wbamberg", - "maximelore", - "unpeudetout" - ] - }, - "Outils/Memory/Aggregate_view": { - "modified": "2020-07-16T22:36:28.617Z", - "contributors": [ - "wbamberg", - "maximelore", - "solfen" - ] - }, - "Outils/Memory/Basic_operations": { - "modified": "2020-07-16T22:36:29.526Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/Comparing_heap_snapshots": { - "modified": "2020-07-16T22:36:28.898Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/DOM_allocation_example": { - "modified": "2020-07-16T22:36:30.900Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/Dominators": { - "modified": "2020-07-16T22:36:29.172Z", - "contributors": [ - "wkz3w59", - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/Dominators_view": { - "modified": "2020-07-16T22:36:28.146Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/Monster_example": { - "modified": "2020-07-16T22:36:29.974Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/Open_the_Memory_tool": { - "modified": "2020-07-16T22:36:27.674Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/Take_a_heap_snapshot": { - "modified": "2020-07-16T22:36:27.834Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Memory/Tree_map_view": { - "modified": "2020-07-16T22:36:30.334Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Migrating_from_Firebug": { - "modified": "2020-07-16T22:36:37.454Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Moniteur_réseau": { - "modified": "2020-07-16T22:35:30.164Z", - "contributors": [ - "maximelore", - "roiLeo", - "wbamberg", - "Breizhim", - "Hell_Carlito", - "marie-ototoi", - "teoli", - "J.DMB", - "P45QU10U", - "Omnilaika02", - "Goofy" - ] - }, - "Outils/Moniteur_réseau/Performance_Analysis": { - "modified": "2020-11-12T09:23:11.969Z", - "contributors": [ - "JNa0", - "maximelore", - "zatteo" - ] - }, - "Outils/Moniteur_réseau/Throttling": { - "modified": "2020-07-16T22:35:36.195Z", - "contributors": [ - "maximelore" - ] - }, - "Outils/Moniteur_réseau/recording": { - "modified": "2020-07-16T22:35:35.319Z", - "contributors": [ - "maximelore" - ] - }, - "Outils/Moniteur_réseau/request_details": { - "modified": "2020-11-12T09:26:09.919Z", - "contributors": [ - "JNa0", - "hellosct1", - "maximelore" - ] - }, - "Outils/Moniteur_réseau/request_list": { - "modified": "2020-07-16T22:35:33.669Z", - "contributors": [ - "maximelore" - ] - }, - "Outils/Moniteur_réseau/toolbar": { - "modified": "2020-07-16T22:35:32.750Z", - "contributors": [ - "maximelore", - "hellosct1" - ] - }, - "Outils/Outils_boite_à_outils": { - "modified": "2020-07-16T22:35:27.255Z", - "contributors": [ - "maximelore", - "sunazerty", - "wbamberg", - "Amandine83", - "joel.costamagna" - ] - }, - "Outils/Paint_Flashing_Tool": { - "modified": "2020-07-16T22:35:43.506Z", - "contributors": [ - "nicofrand", - "maximelore", - "wbamberg" - ] - }, - "Outils/Performance": { - "modified": "2020-07-16T22:36:12.629Z", - "contributors": [ - "maximelore", - "wbamberg", - "Porkepix", - "KrySoar", - "WSH", - "adim" - ] - }, - "Outils/Performance/Allocations": { - "modified": "2020-07-16T22:36:22.257Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Performance/Call_Tree": { - "modified": "2020-07-16T22:36:19.677Z", - "contributors": [ - "maximelore", - "wbamberg", - "Puxarnal" - ] - }, - "Outils/Performance/Examples": { - "modified": "2020-07-16T22:36:20.791Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Performance/Examples/Sorting_algorithms_comparison": { - "modified": "2020-07-16T22:36:21.341Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Performance/Flame_Chart": { - "modified": "2020-07-16T22:36:20.412Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Performance/Frame_rate": { - "modified": "2020-07-16T22:36:19.001Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Performance/How_to": { - "modified": "2020-07-16T22:36:21.749Z", - "contributors": [ - "wbamberg", - "Porkepix", - "maximelore" - ] - }, - "Outils/Performance/Scenarios": { - "modified": "2020-07-16T22:36:15.683Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Performance/Scenarios/Animating_CSS_properties": { - "modified": "2020-07-16T22:36:16.242Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Performance/Scenarios/Intensive_JavaScript": { - "modified": "2020-07-16T22:36:16.709Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Performance/UI_Tour": { - "modified": "2020-07-16T22:36:14.899Z", - "contributors": [ - "Thomsath", - "wbamberg", - "elsawalker", - "maximelore", - "axel8591" - ] - }, - "Outils/Performance/Waterfall": { - "modified": "2020-07-16T22:36:17.448Z", - "contributors": [ - "maximelore", - "wbamberg", - "P45QU10U" - ] - }, - "Outils/Pipette_à_couleur": { - "modified": "2020-07-16T22:36:07.358Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli", - "Goofy", - "maybe", - "AnthonyMaton", - "louloutche" - ] - }, - "Outils/Raccourcis_claviers": { - "modified": "2020-07-16T22:35:47.095Z", - "contributors": [ - "Mozinet", - "maximelore", - "wbamberg", - "maybe", - "teoli", - "SphinxKnight", - "fscholz", - "tregagnon", - "Fredchat", - "Omnilaika02" - ] - }, - "Outils/Responsive_Design_Mode_(before_Firefox_52)": { - "modified": "2020-07-16T22:36:36.829Z", - "contributors": [ - "wbamberg", - "maximelore" - ] - }, - "Outils/Rulers": { - "modified": "2020-07-16T22:36:26.322Z", - "contributors": [ - "maximelore", - "wbamberg", - "sayabiws" - ] - }, - "Outils/Settings": { - "modified": "2020-07-16T22:36:34.961Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Taking_screenshots": { - "modified": "2020-07-16T22:36:38.392Z", - "contributors": [ - "maximelore", - "wbamberg", - "Porkepix", - "QuaiSera" - ] - }, - "Outils/Tips": { - "modified": "2020-07-16T22:36:36.322Z", - "contributors": [ - "maximelore", - "wbamberg", - "JeffD" - ] - }, - "Outils/Travailler_avec_les_iframes": { - "modified": "2020-07-16T22:36:11.851Z", - "contributors": [ - "maximelore", - "wbamberg", - "unpeudetout", - "yaaboukir", - "teoli", - "maybe", - "Sheppy", - "J.DMB" - ] - }, - "Outils/Validateurs": { - "modified": "2020-07-16T22:35:03.388Z", - "contributors": [ - "wbamberg", - "maximelore", - "tregagnon", - "Mgjbot", - "Kyodev", - "Fredchat", - "Jean-Yves Cronier" - ] - }, - "Outils/View_source": { - "modified": "2020-07-16T22:35:02.805Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/Vue_3D": { - "modified": "2020-07-16T22:34:25.273Z", - "contributors": [ - "Kearny", - "maximelore", - "wbamberg", - "erwandf", - "Red-Phoenix", - "Bene", - "tregagnon", - "ModernGames" - ] - }, - "Outils/Vue_adaptative": { - "modified": "2020-07-16T22:35:21.388Z", - "contributors": [ - "maximelore", - "Machou", - "wbamberg", - "LaurentGarnier", - "WillyReyno", - "trevorh", - "J.DMB", - "Nadra", - "Omnilaika02", - "wakka27", - "tregagnon", - "Goofy", - "Delapouite", - "mh_nichts" - ] - }, - "Outils/about:debugging": { - "modified": "2020-07-16T22:36:32.303Z", - "contributors": [ - "maximelore", - "wbamberg" - ] - }, - "Outils/about:debugging/about:debugging_before_Firefox_68": { - "modified": "2020-07-16T22:36:33.804Z", - "contributors": [ - "caleyz" - ] - }, - "Outils/inspecteur/Raccourcis_clavier": { - "modified": "2020-07-16T22:34:50.971Z", - "contributors": [ - "wbamberg", - "maximelore", - "teoli" - ] - }, - "Outils/Éditeur_de_style": { - "modified": "2020-07-16T22:35:00.333Z", - "contributors": [ - "maximelore", - "wbamberg", - "teoli", - "tregagnon", - "salsero" - ] - }, - "Référence_DOM_Gecko": { - "modified": "2019-03-24T00:11:57.509Z", - "contributors": [ - "Goofy", - "teoli", - "bou22" - ] - }, - "SGML": { - "modified": "2019-03-23T23:31:44.178Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "sebastien-bartoli", - "SphinxKnight" - ] - }, - "SVG_dans_Firefox": { - "modified": "2019-03-23T23:49:52.334Z", - "contributors": [ - "marie-ototoi", - "wakka27", - "Fredchat", - "BenoitL", - "VincentN", - "Mgjbot", - "Chbok" - ] - }, - "Type_MIME_incorrect_pour_les_fichiers_CSS": { - "modified": "2020-04-19T02:52:23.292Z", - "contributors": [ - "vvvaleee", - "BenoitL" - ] - }, - "Un_raycaster_basique_avec_canvas": { - "modified": "2019-03-23T23:44:18.702Z", - "contributors": [ - "loella16", - "teoli", - "Delapouite", - "Fredchat", - "VincentN", - "Planche" - ] - }, - "Utilisation_de_XPath": { - "modified": "2019-01-16T14:19:09.912Z", - "contributors": [ - "kmaglione", - "Mgjbot", - "Elethiomel", - "Fredchat" - ] - }, - "Utilisation_du_cache_de_Firefox_1.5": { - "modified": "2019-03-24T00:03:08.986Z", - "contributors": [ - "wbamberg", - "nicofrand", - "fscholz", - "Mgjbot", - "Sheppy", - "BenoitL", - "Doozer", - "Chbok" - ] - }, - "Web": { - "modified": "2020-02-21T16:24:09.970Z", - "contributors": [ - "inwardmovement", - "SphinxKnight", - "RolandGautier", - "alexetgus", - "ThreadElric", - "tonybengue", - "AvatarWeb", - "Alpha", - "eagleusb", - "x2357", - "udakpakembim", - "teoli", - "Fredchat", - "wakka27", - "Juju77", - "tregagnon", - "Sheppy" - ] - }, - "Web/API": { - "modified": "2019-03-18T20:41:10.621Z", - "contributors": [ - "codingk8", - "sbenard", - "loella16", - "teoli", - "tregagnon", - "flo5589", - "SphinxKnight", - "Sheppy" - ] - }, - "Web/API/API_HTML_Drag_and_Drop": { - "modified": "2019-10-25T04:36:55.763Z", - "contributors": [ - "SphinxKnight", - "jledentu", - "teoli", - "kazma", - "goofy_bz", - "azurakaiser", - "Delapouite", - "rd6137" - ] - }, - "Web/API/API_HTML_Drag_and_Drop/Opérations_de_glissement": { - "modified": "2019-11-28T11:30:12.535Z", - "contributors": [ - "azocankara", - "arthurlacoste", - "SphinxKnight", - "teoli", - "Jeremie", - "Chbok" - ] - }, - "Web/API/API_IndexedDB": { - "modified": "2020-05-12T10:06:55.343Z", - "contributors": [ - "floreengrad", - "giloop", - "matmorel", - "eiro", - "EloD10", - "onra87", - "loella16", - "gharel", - "SphinxKnight", - "JeffD", - "P45QU10U", - "Caudralys", - "moins52" - ] - }, - "Web/API/API_IndexedDB/Basic_Concepts_Behind_IndexedDB": { - "modified": "2020-03-19T07:25:26.127Z", - "contributors": [ - "ChristopheBoucaut", - "loella16", - "Alpha", - "SphinxKnight", - "teoli", - "julienw" - ] - }, - "Web/API/API_IndexedDB/Browser_storage_limits_and_eviction_criteria": { - "modified": "2019-07-09T03:14:33.430Z", - "contributors": [ - "SphinxKnight", - "xavieralt", - "loella16", - "Billos" - ] - }, - "Web/API/API_IndexedDB/Using_IndexedDB": { - "modified": "2019-11-09T09:03:11.340Z", - "contributors": [ - "JNa0", - "wbamberg", - "loella16", - "P45QU10U", - "SphinxKnight", - "zap221" - ] - }, - "Web/API/API_fichier_systeme": { - "modified": "2019-03-23T22:35:43.265Z", - "contributors": [ - "alexisdelee" - ] - }, - "Web/API/AbortSignal": { - "modified": "2020-10-15T22:01:02.561Z", - "contributors": [ - "Morgan-jarry", - "loella16" - ] - }, - "Web/API/AbstractWorker": { - "modified": "2020-10-15T21:26:01.488Z", - "contributors": [ - "Arzak656", - "wakka27", - "tregagnon", - "dexterneo" - ] - }, - "Web/API/AbstractWorker/onerror": { - "modified": "2020-10-15T21:32:33.262Z", - "contributors": [ - "Arzak656", - "wakka27", - "jean-pierre.gay", - "fscholz" - ] - }, - "Web/API/AnalyserNode": { - "modified": "2020-10-15T21:24:02.190Z", - "contributors": [ - "jpcote", - "SphinxKnight", - "moussagigawatt", - "marie-ototoi", - "jmdelafont", - "teoli", - "fscholz", - "Goofy", - "tregagnon", - "dexterneo" - ] - }, - "Web/API/AnalyserNode/AnalyserNode": { - "modified": "2019-03-23T22:09:55.975Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AnalyserNode/fftSize": { - "modified": "2019-03-23T22:36:35.592Z", - "contributors": [ - "Yellarkh", - "marie-ototoi", - "pmalhaire" - ] - }, - "Web/API/AnalyserNode/frequencyBinCount": { - "modified": "2019-03-23T22:36:37.077Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AnalyserNode/getByteFrequencyData": { - "modified": "2019-03-23T22:36:35.277Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AnalyserNode/getByteTimeDomainData": { - "modified": "2019-03-23T22:36:04.717Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AnalyserNode/getFloatFrequencyData": { - "modified": "2019-03-23T22:35:48.718Z", - "contributors": [ - "marie-ototoi", - "Mr21" - ] - }, - "Web/API/AnalyserNode/getFloatTimeDomainData": { - "modified": "2019-03-23T22:35:47.582Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AnalyserNode/maxDecibels": { - "modified": "2019-03-23T22:36:35.839Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AnalyserNode/minDecibels": { - "modified": "2019-03-18T21:15:50.310Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AnalyserNode/smoothingTimeConstant": { - "modified": "2019-03-23T22:35:50.453Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/Animation": { - "modified": "2019-03-23T22:28:00.225Z", - "contributors": [ - "GrandSchtroumpf" - ] - }, - "Web/API/AnimationEffectTimingProperties": { - "modified": "2019-03-23T22:28:24.754Z", - "contributors": [ - "SphinxKnight", - "HereComesJuju", - "rachelnabors" - ] - }, - "Web/API/AnimationEffectTimingProperties/delay": { - "modified": "2019-03-23T22:28:20.379Z", - "contributors": [ - "SphinxKnight", - "HereComesJuju" - ] - }, - "Web/API/AnimationEvent": { - "modified": "2020-11-16T08:35:46.188Z", - "contributors": [ - "JNa0", - "teoli", - "fscholz", - "tregagnon", - "Goofy", - "dexterneo" - ] - }, - "Web/API/AnimationEvent/AnimationEvent": { - "modified": "2019-03-23T22:04:06.737Z", - "contributors": [ - "tonybengue" - ] - }, - "Web/API/AnimationEvent/animationName": { - "modified": "2020-10-15T21:26:08.479Z", - "contributors": [ - "SphinxKnight", - "teoli", - "fscholz", - "tregagnon" - ] - }, - "Web/API/AnimationEvent/elapsedTime": { - "modified": "2019-03-23T23:21:17.582Z", - "contributors": [ - "teoli", - "fscholz", - "tregagnon" - ] - }, - "Web/API/AnimationEvent/pseudoElement": { - "modified": "2020-10-15T21:26:10.153Z", - "contributors": [ - "SphinxKnight", - "teoli", - "fscholz", - "tregagnon" - ] - }, - "Web/API/Attr": { - "modified": "2019-03-23T23:29:06.471Z", - "contributors": [ - "loella16", - "robin850", - "fscholz", - "ntrillaud", - "Jeremie", - "dexterneo" - ] - }, - "Web/API/Attr/localName": { - "modified": "2019-03-23T22:13:07.184Z", - "contributors": [ - "loella16", - "BEHOUBA", - "Joel-Costamagna" - ] - }, - "Web/API/Attr/namespaceURI": { - "modified": "2019-03-18T21:42:32.598Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Attr/prefix": { - "modified": "2019-03-23T22:07:36.471Z", - "contributors": [ - "loella16", - "BEHOUBA" - ] - }, - "Web/API/AudioBuffer": { - "modified": "2019-03-23T23:29:07.846Z", - "contributors": [ - "marie-ototoi", - "fscholz", - "Goofy", - "tregagnon", - "dexterneo" - ] - }, - "Web/API/AudioBuffer/AudioBuffer": { - "modified": "2019-03-23T22:07:03.337Z", - "contributors": [ - "Maamouch" - ] - }, - "Web/API/AudioBuffer/copyFromChannel": { - "modified": "2019-05-16T07:00:31.805Z", - "contributors": [ - "sizvix", - "marie-ototoi", - "nobe4" - ] - }, - "Web/API/AudioBuffer/copyToChannel": { - "modified": "2019-03-23T22:32:43.512Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBuffer/duration": { - "modified": "2019-03-23T22:33:02.014Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBuffer/getChannelData": { - "modified": "2019-03-23T22:32:47.435Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBuffer/length": { - "modified": "2019-03-23T22:33:05.726Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBuffer/numberOfChannels": { - "modified": "2019-03-23T22:32:35.350Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBuffer/sampleRate": { - "modified": "2019-03-23T22:32:46.659Z", - "contributors": [ - "Maamouch", - "marie-ototoi" - ] - }, - "Web/API/AudioBufferSourceNode": { - "modified": "2020-10-15T21:23:44.789Z", - "contributors": [ - "letochagone", - "SphinxKnight", - "marie-ototoi", - "sizvix", - "dooxe", - "fscholz", - "teoli", - "tregagnon", - "dexterneo" - ] - }, - "Web/API/AudioBufferSourceNode/buffer": { - "modified": "2019-03-23T22:24:27.684Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBufferSourceNode/detune": { - "modified": "2020-10-15T21:45:42.081Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "Mr21", - "nobe4" - ] - }, - "Web/API/AudioBufferSourceNode/loop": { - "modified": "2019-03-23T22:34:16.953Z", - "contributors": [ - "marie-ototoi", - "nobe4" - ] - }, - "Web/API/AudioBufferSourceNode/loopEnd": { - "modified": "2020-10-15T21:46:40.981Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi" - ] - }, - "Web/API/AudioBufferSourceNode/loopStart": { - "modified": "2019-03-23T22:32:20.622Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBufferSourceNode/playbackRate": { - "modified": "2019-03-23T22:32:12.255Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioBufferSourceNode/start": { - "modified": "2019-03-23T22:32:08.127Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioContext": { - "modified": "2019-03-23T23:29:08.112Z", - "contributors": [ - "marie-ototoi", - "fscholz", - "tregagnon", - "dexterneo" - ] - }, - "Web/API/AudioContext/createGain": { - "modified": "2019-03-23T22:43:18.087Z", - "contributors": [ - "JNa0", - "marie-ototoi", - "Threstle" - ] - }, - "Web/API/AudioContext/createMediaElementSource": { - "modified": "2020-10-15T22:07:31.399Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/AudioListener": { - "modified": "2019-03-23T23:29:10.150Z", - "contributors": [ - "marie-ototoi", - "fscholz", - "tregagnon", - "Delapouite", - "Goofy", - "SphinxKnight", - "dexterneo" - ] - }, - "Web/API/AudioNode": { - "modified": "2019-03-23T22:20:42.964Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/AudioParam": { - "modified": "2019-03-23T23:28:58.977Z", - "contributors": [ - "marie-ototoi", - "fscholz", - "tregagnon", - "dexterneo" - ] - }, - "Web/API/AudioProcessingEvent": { - "modified": "2019-03-23T23:28:53.968Z", - "contributors": [ - "marie-ototoi", - "fscholz", - "tregagnon", - "dexterneo" - ] - }, - "Web/API/AudioWorklet": { - "modified": "2020-10-15T22:29:43.020Z", - "contributors": [ - "hellosct1" - ] - }, - "Web/API/AuthenticatorAssertionResponse": { - "modified": "2020-10-15T22:15:38.464Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/AuthenticatorAssertionResponse/authenticatorData": { - "modified": "2020-10-15T22:15:42.626Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/AuthenticatorAttestationResponse": { - "modified": "2020-10-15T22:15:38.529Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/AuthenticatorResponse": { - "modified": "2020-10-15T22:15:37.142Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/BaseAudioContext": { - "modified": "2020-09-07T04:47:49.697Z", - "contributors": [ - "Voulto", - "Jedipedia" - ] - }, - "Web/API/BaseAudioContext/createBiquadFilter": { - "modified": "2020-10-15T22:22:10.010Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/BaseAudioContext/createBuffer": { - "modified": "2019-03-18T21:37:57.614Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/BaseAudioContext/createBufferSource": { - "modified": "2020-10-15T22:23:57.305Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/BaseAudioContext/createPanner": { - "modified": "2020-10-15T22:22:12.658Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/BaseAudioContext/createPeriodicWave": { - "modified": "2020-10-15T22:12:41.903Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/BatteryManager": { - "modified": "2019-03-23T23:28:54.126Z", - "contributors": [ - "LordKBX", - "khalid32", - "teoli", - "dexterneo" - ] - }, - "Web/API/BatteryManager/charging": { - "modified": "2020-10-15T22:20:44.178Z", - "contributors": [ - "thebrave" - ] - }, - "Web/API/BatteryManager/chargingTime": { - "modified": "2020-10-15T22:20:44.964Z", - "contributors": [ - "thebrave" - ] - }, - "Web/API/BatteryManager/dischargingTime": { - "modified": "2020-10-15T22:20:44.576Z", - "contributors": [ - "thebrave" - ] - }, - "Web/API/BatteryManager/level": { - "modified": "2020-10-15T22:20:43.803Z", - "contributors": [ - "thebrave" - ] - }, - "Web/API/Battery_status_API": { - "modified": "2020-10-15T21:24:14.232Z", - "contributors": [ - "thebrave", - "SphinxKnight", - "DTSSE", - "teoli" - ] - }, - "Web/API/BeforeUnloadEvent": { - "modified": "2020-11-10T19:19:54.429Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/BiquadFilterNode": { - "modified": "2019-08-24T07:16:34.926Z", - "contributors": [ - "JNa0", - "marie-ototoi", - "teoli", - "ouhouhsami", - "fscholz", - "tregagnon", - "Jeremie", - "dexterneo" - ] - }, - "Web/API/BiquadFilterNode/frequency": { - "modified": "2020-10-15T21:43:49.371Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi" - ] - }, - "Web/API/Blob": { - "modified": "2019-03-23T23:28:26.396Z", - "contributors": [ - "petosorus", - "SphinxKnight", - "ChristopheBoucaut", - "emersion", - "mekal", - "teoli", - "bfn", - "dexterneo" - ] - }, - "Web/API/Blob/Blob": { - "modified": "2020-10-15T21:38:35.650Z", - "contributors": [ - "thebrave", - "SphinxKnight", - "wlalele" - ] - }, - "Web/API/Blob/type": { - "modified": "2020-10-15T21:55:27.760Z", - "contributors": [ - "loella16", - "Hennek" - ] - }, - "Web/API/BlobBuilder": { - "modified": "2020-10-15T22:05:47.307Z", - "contributors": [ - "velkro", - "jgroc-de" - ] - }, - "Web/API/BlobEvent": { - "modified": "2020-10-15T22:01:50.494Z", - "contributors": [ - "SphinxKnight", - "illaweb35", - "Sheppy" - ] - }, - "Web/API/BlobEvent/BlobEvent": { - "modified": "2020-10-15T22:01:50.313Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/BlobEvent/data": { - "modified": "2020-10-15T22:01:50.239Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Body": { - "modified": "2020-10-15T22:00:04.273Z", - "contributors": [ - "Voulto", - "Retroscilo", - "Arzak656", - "SphinxKnight", - "vqrs" - ] - }, - "Web/API/Body/json": { - "modified": "2020-10-15T22:00:00.599Z", - "contributors": [ - "SphinxKnight", - "jdvauguet", - "enkienki", - "MaximeSarrato", - "Nithramir" - ] - }, - "Web/API/ByteString": { - "modified": "2019-03-23T22:50:30.417Z", - "contributors": [ - "BEHOUBA", - "SphinxKnight", - "Hell_Carlito" - ] - }, - "Web/API/CDATASection": { - "modified": "2020-10-15T21:37:54.310Z", - "contributors": [ - "loella16", - "SphinxKnight", - "Hell_Carlito" - ] - }, - "Web/API/CSS": { - "modified": "2019-03-23T22:44:45.496Z", - "contributors": [ - "PPGirault123" - ] - }, - "Web/API/CSSMatrix": { - "modified": "2019-03-23T22:45:55.560Z", - "contributors": [ - "SphinxKnight", - "morganPolitano" - ] - }, - "Web/API/CSSMediaRule": { - "modified": "2020-10-15T22:27:05.762Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/CSSRuleList": { - "modified": "2019-03-23T23:28:18.630Z", - "contributors": [ - "fscholz", - "Delapouite" - ] - }, - "Web/API/CSSStyleDeclaration": { - "modified": "2019-03-18T21:37:40.971Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/CSSStyleDeclaration/cssText": { - "modified": "2019-03-18T21:36:22.387Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/CSSStyleRule": { - "modified": "2019-03-23T22:06:59.663Z", - "contributors": [ - "aligatorjmg" - ] - }, - "Web/API/CSSValue": { - "modified": "2020-10-15T21:56:05.370Z", - "contributors": [ - "loella16", - "BEHOUBA" - ] - }, - "Web/API/CSSValueList": { - "modified": "2020-10-15T22:01:02.005Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/CSS_Object_Model": { - "modified": "2019-03-23T22:30:29.411Z", - "contributors": [ - "Watilin", - "teoli" - ] - }, - "Web/API/CSS_Object_Model/Determining_the_dimensions_of_elements": { - "modified": "2019-03-18T20:59:05.536Z", - "contributors": [ - "SphinxKnight", - "jmh", - "Goofy" - ] - }, - "Web/API/CSS_Object_Model/Managing_screen_orientation": { - "modified": "2019-03-18T21:32:40.291Z", - "contributors": [ - "a-mt" - ] - }, - "Web/API/Cache": { - "modified": "2020-10-15T21:44:04.525Z", - "contributors": [ - "tristantheb", - "jean-pierre.gay" - ] - }, - "Web/API/Cache/add": { - "modified": "2020-10-15T21:44:04.898Z", - "contributors": [ - "tristantheb", - "NuclearPony", - "nobe4" - ] - }, - "Web/API/Cache/addAll": { - "modified": "2020-10-15T21:44:04.955Z", - "contributors": [ - "tristantheb", - "NuclearPony" - ] - }, - "Web/API/Cache/delete": { - "modified": "2020-10-15T21:44:04.821Z", - "contributors": [ - "tristantheb", - "NuclearPony" - ] - }, - "Web/API/Cache/keys": { - "modified": "2020-10-15T21:44:04.904Z", - "contributors": [ - "tristantheb", - "NuclearPony" - ] - }, - "Web/API/Cache/match": { - "modified": "2020-10-15T21:44:04.434Z", - "contributors": [ - "tristantheb", - "vincedew", - "NuclearPony" - ] - }, - "Web/API/Cache/matchAll": { - "modified": "2020-10-15T21:44:05.782Z", - "contributors": [ - "tristantheb", - "NuclearPony" - ] - }, - "Web/API/Cache/put": { - "modified": "2020-10-15T21:44:05.632Z", - "contributors": [ - "tristantheb", - "NuclearPony" - ] - }, - "Web/API/CacheStorage": { - "modified": "2020-10-15T21:44:09.229Z", - "contributors": [ - "tristantheb", - "BlackYoup", - "NuclearPony" - ] - }, - "Web/API/CacheStorage/delete": { - "modified": "2020-10-15T21:44:49.808Z", - "contributors": [ - "tristantheb", - "nobe4" - ] - }, - "Web/API/CacheStorage/has": { - "modified": "2020-10-15T21:44:47.507Z", - "contributors": [ - "tristantheb", - "jean-pierre.gay", - "nobe4" - ] - }, - "Web/API/CacheStorage/keys": { - "modified": "2020-10-15T21:44:49.361Z", - "contributors": [ - "tristantheb", - "nobe4" - ] - }, - "Web/API/CacheStorage/match": { - "modified": "2020-10-15T21:44:46.776Z", - "contributors": [ - "tristantheb", - "nobe4" - ] - }, - "Web/API/CacheStorage/open": { - "modified": "2020-10-15T21:44:46.743Z", - "contributors": [ - "tristantheb", - "lotfire24", - "nobe4" - ] - }, - "Web/API/CanvasGradient": { - "modified": "2020-10-15T21:53:53.503Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "Joel-Costamagna" - ] - }, - "Web/API/CanvasGradient/addColorStop": { - "modified": "2020-10-15T21:54:37.185Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D": { - "modified": "2019-03-23T23:16:58.158Z", - "contributors": [ - "JNa0", - "steuzz", - "NemoNobobyPersonne", - "Halfman", - "vdrac", - "Y0kaze" - ] - }, - "Web/API/CanvasRenderingContext2D/arc": { - "modified": "2020-10-15T21:41:36.642Z", - "contributors": [ - "SphinxKnight", - "loella16", - "jmpp" - ] - }, - "Web/API/CanvasRenderingContext2D/beginPath": { - "modified": "2020-10-15T22:05:05.343Z", - "contributors": [ - "a-mt" - ] - }, - "Web/API/CanvasRenderingContext2D/bezierCurveTo": { - "modified": "2020-10-15T22:12:46.030Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/CanvasRenderingContext2D/canvas": { - "modified": "2020-10-15T21:50:07.563Z", - "contributors": [ - "SphinxKnight", - "Hell_Carlito", - "JNa0" - ] - }, - "Web/API/CanvasRenderingContext2D/clearRect": { - "modified": "2020-10-15T21:50:06.817Z", - "contributors": [ - "a-mt", - "Guillaume.Wulpes", - "SphinxKnight", - "NemoNobobyPersonne", - "Hell_Carlito", - "JNa0" - ] - }, - "Web/API/CanvasRenderingContext2D/closePath": { - "modified": "2019-03-23T22:22:37.948Z", - "contributors": [ - "gpenissard" - ] - }, - "Web/API/CanvasRenderingContext2D/createLinearGradient": { - "modified": "2020-10-15T21:54:27.162Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/direction": { - "modified": "2020-10-15T21:54:36.516Z", - "contributors": [ - "SphinxKnight", - "Loelle", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/drawImage": { - "modified": "2019-03-23T22:24:41.008Z", - "contributors": [ - "PeeWee2201", - "Hell_Carlito", - "JNa0" - ] - }, - "Web/API/CanvasRenderingContext2D/ellipse": { - "modified": "2020-10-15T21:54:18.769Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/fill": { - "modified": "2020-10-15T22:05:15.196Z", - "contributors": [ - "a-mt" - ] - }, - "Web/API/CanvasRenderingContext2D/fillRect": { - "modified": "2020-10-15T21:50:06.787Z", - "contributors": [ - "JNa0", - "SphinxKnight", - "Hell_Carlito" - ] - }, - "Web/API/CanvasRenderingContext2D/fillStyle": { - "modified": "2020-10-15T22:05:05.410Z", - "contributors": [ - "a-mt" - ] - }, - "Web/API/CanvasRenderingContext2D/fillText": { - "modified": "2019-03-23T22:11:41.288Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/font": { - "modified": "2020-10-15T21:54:28.139Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/getImageData": { - "modified": "2020-10-15T21:56:10.861Z", - "contributors": [ - "JNa0", - "SphinxKnight", - "loella16", - "Nerostalgeek" - ] - }, - "Web/API/CanvasRenderingContext2D/globalAlpha": { - "modified": "2020-10-15T21:54:40.273Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/globalCompositeOperation": { - "modified": "2020-10-15T22:25:07.709Z", - "contributors": [ - "UFOcatcher" - ] - }, - "Web/API/CanvasRenderingContext2D/imageSmoothingEnabled": { - "modified": "2020-10-15T21:59:28.179Z", - "contributors": [ - "warpdesign", - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/lineCap": { - "modified": "2020-10-15T21:54:48.924Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/lineJoin": { - "modified": "2020-10-15T22:14:22.519Z", - "contributors": [ - "JNa0", - "Mars073" - ] - }, - "Web/API/CanvasRenderingContext2D/lineTo": { - "modified": "2020-10-15T21:50:07.144Z", - "contributors": [ - "a-mt", - "SphinxKnight", - "Hell_Carlito", - "JNa0" - ] - }, - "Web/API/CanvasRenderingContext2D/measureText": { - "modified": "2019-03-23T22:10:28.208Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/moveTo": { - "modified": "2020-10-15T22:05:05.756Z", - "contributors": [ - "a-mt" - ] - }, - "Web/API/CanvasRenderingContext2D/quadraticCurveTo": { - "modified": "2020-10-15T22:12:46.959Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/CanvasRenderingContext2D/rect": { - "modified": "2020-10-15T22:05:15.196Z", - "contributors": [ - "JNa0", - "a-mt" - ] - }, - "Web/API/CanvasRenderingContext2D/rotate": { - "modified": "2019-03-23T22:11:43.187Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/save": { - "modified": "2020-10-15T22:22:46.023Z", - "contributors": [ - "SenpaiWeb", - "Mars073" - ] - }, - "Web/API/CanvasRenderingContext2D/scale": { - "modified": "2020-10-15T21:54:33.658Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/setLineDash": { - "modified": "2020-10-15T22:00:14.768Z", - "contributors": [ - "SphinxKnight", - "GoGoAndroid" - ] - }, - "Web/API/CanvasRenderingContext2D/setTransform": { - "modified": "2020-10-15T21:54:30.072Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/stroke": { - "modified": "2020-10-15T22:01:10.781Z", - "contributors": [ - "Loelle" - ] - }, - "Web/API/CanvasRenderingContext2D/strokeRect": { - "modified": "2020-10-15T21:50:08.912Z", - "contributors": [ - "SphinxKnight", - "Hell_Carlito", - "JNa0" - ] - }, - "Web/API/CanvasRenderingContext2D/strokeStyle": { - "modified": "2020-10-15T22:05:15.224Z", - "contributors": [ - "a-mt" - ] - }, - "Web/API/CanvasRenderingContext2D/strokeText": { - "modified": "2020-10-15T21:54:48.430Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/textAlign": { - "modified": "2020-10-15T21:54:32.849Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/textBaseline": { - "modified": "2019-03-23T22:11:43.727Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/transform": { - "modified": "2020-10-15T21:54:37.850Z", - "contributors": [ - "SphinxKnight", - "calixte", - "NemoNobobyPersonne" - ] - }, - "Web/API/CanvasRenderingContext2D/translate": { - "modified": "2020-10-15T21:54:49.704Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/Canvas_API": { - "modified": "2020-11-13T03:37:17.858Z", - "contributors": [ - "SphinxKnight", - "loella16", - "timkrief", - "NemoNobobyPersonne", - "etienne-gauvin", - "emersion", - "Laurent_Lyaudet", - "Delapouite", - "tregagnon", - "ethertank", - "openjck", - "teoli", - "dextra", - "Mgjbot", - "BenoitL", - "Chbok" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas": { - "modified": "2020-11-13T03:38:17.265Z", - "contributors": [ - "SphinxKnight", - "loella16", - "lumiru", - "jmh", - "Mathieu_deLauniere", - "teoli", - "Jeremie", - "Delapouite", - "Mgjbot", - "BenoitL", - "Chbok" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Advanced_animations": { - "modified": "2020-11-13T03:38:18.424Z", - "contributors": [ - "SphinxKnight", - "benjaminbouwyn", - "PaperFlu", - "loella16", - "gliluaume", - "lumiru", - "vanz" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Ajout_de_styles_et_de_couleurs": { - "modified": "2020-11-13T03:38:20.196Z", - "contributors": [ - "SphinxKnight", - "lhapaipai", - "a-mt", - "lebernard", - "loella16", - "JNa0", - "ecolinet", - "jmh" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Animations_basiques": { - "modified": "2020-11-13T03:38:18.694Z", - "contributors": [ - "SphinxKnight", - "a-mt", - "loella16", - "lumiru", - "zaphibel" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Composition": { - "modified": "2020-11-13T03:38:19.786Z", - "contributors": [ - "SphinxKnight", - "a-mt", - "Syberam" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Composition/Example": { - "modified": "2020-11-13T03:38:18.691Z", - "contributors": [ - "SphinxKnight", - "a-mt" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Dessin_de_texte_avec_canvas": { - "modified": "2020-11-13T03:38:17.919Z", - "contributors": [ - "SphinxKnight", - "a-mt", - "loella16", - "jmh", - "emersion", - "Delapouite", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Formes_géométriques": { - "modified": "2020-11-13T03:38:18.692Z", - "contributors": [ - "SphinxKnight", - "Link_D._Potter", - "jpcote", - "NerOcrO", - "a-mt", - "lebernard", - "Halkeand", - "loella16", - "NemoNobobyPersonne", - "ecolinet", - "mesclics", - "JNa0", - "jmh", - "teoli", - "pie3636", - "anaskiee", - "Mathieu_deLauniere" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Hit_regions_and_accessibility": { - "modified": "2020-11-13T03:38:19.005Z", - "contributors": [ - "SphinxKnight", - "smartinus44", - "Syberam" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Optimizing_canvas": { - "modified": "2020-11-13T03:38:18.443Z", - "contributors": [ - "SphinxKnight", - "jonathanlinat", - "lumiru", - "Hell_Carlito", - "ClementNerma" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Pixel_manipulation_with_canvas": { - "modified": "2020-11-13T03:38:20.129Z", - "contributors": [ - "SphinxKnight", - "loella16", - "NemoNobobyPersonne", - "jodenda" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Transformations": { - "modified": "2020-11-13T03:38:19.573Z", - "contributors": [ - "SphinxKnight", - "ni.pineau", - "loella16", - "BEHOUBA", - "gliluaume" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Utilisation_d'images": { - "modified": "2020-11-13T03:38:17.830Z", - "contributors": [ - "SphinxKnight", - "a-mt", - "loella16", - "jmh", - "Sebastianz", - "teoli", - "Laurent_Lyaudet", - "Delapouite", - "Notafish", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Canvas_API/Tutoriel_canvas/Utilisation_de_base": { - "modified": "2020-11-13T03:38:18.165Z", - "contributors": [ - "SphinxKnight", - "OhNiice", - "FabienTregan", - "NerOcrO", - "lebernard", - "iyadev", - "loella16", - "mireero", - "CoCay", - "AymDev", - "jmh", - "Nicolas_A", - "Olivier_C", - "MicroJoe", - "Mathieu_deLauniere" - ] - }, - "Web/API/CharacterData": { - "modified": "2019-03-18T21:43:27.023Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/ChildNode": { - "modified": "2020-10-15T21:28:06.168Z", - "contributors": [ - "loella16", - "alexandreL", - "thbil", - "khalid32", - "bchaplet" - ] - }, - "Web/API/ChildNode/after": { - "modified": "2020-10-15T21:56:14.439Z", - "contributors": [ - "loella16", - "BEHOUBA" - ] - }, - "Web/API/ChildNode/before": { - "modified": "2020-10-15T22:01:12.319Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/ChildNode/remove": { - "modified": "2020-10-15T21:49:32.341Z", - "contributors": [ - "tristantheb", - "loella16", - "Goofy", - "Copen" - ] - }, - "Web/API/ChildNode/replaceWith": { - "modified": "2020-10-15T21:55:03.476Z", - "contributors": [ - "tristantheb", - "loella16", - "Spictheweb", - "v-Stein" - ] - }, - "Web/API/Client": { - "modified": "2020-11-16T08:56:05.543Z", - "contributors": [ - "JNa0", - "nobe4" - ] - }, - "Web/API/Client/frameType": { - "modified": "2019-03-23T22:37:02.346Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Client/id": { - "modified": "2019-03-23T22:37:07.911Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Client/postMessage": { - "modified": "2019-03-23T22:37:01.942Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Client/url": { - "modified": "2019-03-23T22:37:03.996Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Clients": { - "modified": "2019-03-23T22:37:04.424Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Clients/claim": { - "modified": "2019-03-23T22:37:07.697Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Clients/get": { - "modified": "2019-03-23T22:37:03.256Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Clients/matchAll": { - "modified": "2019-03-18T21:15:46.468Z", - "contributors": [ - "m-r-r", - "nobe4" - ] - }, - "Web/API/Clients/openWindow": { - "modified": "2019-03-23T22:37:03.615Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/Clipboard": { - "modified": "2020-10-15T22:17:56.225Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Clipboard/write": { - "modified": "2020-10-15T22:21:53.300Z", - "contributors": [ - "pldespaigne", - "lp177" - ] - }, - "Web/API/Clipboard/writeText": { - "modified": "2020-10-15T22:17:57.078Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/CloseEvent": { - "modified": "2019-03-23T22:51:23.474Z", - "contributors": [ - "Hell_Carlito", - "Hyspirit" - ] - }, - "Web/API/Comment": { - "modified": "2020-11-25T16:12:58.810Z", - "contributors": [ - "Wixonic", - "Jeremie", - "loella16", - "luccioman", - "Gibus", - "Hell_Carlito" - ] - }, - "Web/API/Comment/Comment": { - "modified": "2020-10-15T21:56:16.592Z", - "contributors": [ - "Jeremie", - "loella16", - "BEHOUBA" - ] - }, - "Web/API/CompositionEvent": { - "modified": "2020-10-15T21:37:10.055Z", - "contributors": [ - "fscholz", - "loella16", - "sousmangoosta" - ] - }, - "Web/API/Console": { - "modified": "2019-05-01T14:25:50.246Z", - "contributors": [ - "jcalixte", - "loella16", - "Ostefanini", - "christophe.hurpeau", - "P45QU10U", - "fscholz" - ] - }, - "Web/API/Console/assert": { - "modified": "2020-10-15T21:37:07.545Z", - "contributors": [ - "Fenn", - "loella16", - "christophe.hurpeau", - "frederikdussault", - "ElianWonhalf" - ] - }, - "Web/API/Console/clear": { - "modified": "2019-03-23T22:18:57.653Z", - "contributors": [ - "christophe.hurpeau", - "DavidLibeau" - ] - }, - "Web/API/Console/count": { - "modified": "2020-10-15T21:39:57.745Z", - "contributors": [ - "loella16", - "christophe.hurpeau", - "normannMarit", - "Styus" - ] - }, - "Web/API/Console/countReset": { - "modified": "2020-10-15T22:22:03.008Z", - "contributors": [ - "tbetous", - "quentin.lamamy" - ] - }, - "Web/API/Console/debug": { - "modified": "2020-10-15T22:21:32.530Z", - "contributors": [ - "thiag73" - ] - }, - "Web/API/Console/dir": { - "modified": "2020-10-15T21:43:00.216Z", - "contributors": [ - "xavierartot", - "loella16", - "sylvaindethier", - "Chevallm" - ] - }, - "Web/API/Console/dirxml": { - "modified": "2020-10-15T21:56:31.266Z", - "contributors": [ - "loella16", - "BEHOUBA" - ] - }, - "Web/API/Console/error": { - "modified": "2020-10-15T21:37:29.101Z", - "contributors": [ - "SphinxKnight", - "loella16", - "christophe.hurpeau", - "unpeudetout", - "Goofy", - "JulienItard" - ] - }, - "Web/API/Console/group": { - "modified": "2020-10-15T21:39:57.936Z", - "contributors": [ - "loella16", - "Styus" - ] - }, - "Web/API/Console/groupCollapsed": { - "modified": "2020-10-15T21:39:57.660Z", - "contributors": [ - "loella16", - "Styus" - ] - }, - "Web/API/Console/groupEnd": { - "modified": "2020-10-15T21:39:57.905Z", - "contributors": [ - "loella16", - "christophe.hurpeau", - "Styus" - ] - }, - "Web/API/Console/info": { - "modified": "2020-11-11T13:53:02.402Z", - "contributors": [ - "Yukulele.", - "unpeudetout", - "JonGiamp", - "JulienItard" - ] - }, - "Web/API/Console/log": { - "modified": "2020-11-11T19:51:04.080Z", - "contributors": [ - "JNa0", - "Yukulele.", - "loella16", - "christophe.hurpeau", - "fscholz", - "jsx", - "benfarhat.elyes" - ] - }, - "Web/API/Console/profile": { - "modified": "2020-10-15T22:01:10.357Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Console/profileEnd": { - "modified": "2020-10-15T22:01:12.608Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Console/table": { - "modified": "2020-10-15T21:30:09.666Z", - "contributors": [ - "loella16", - "DCLAN", - "fscholz", - "tregagnon" - ] - }, - "Web/API/Console/time": { - "modified": "2020-10-15T21:26:08.561Z", - "contributors": [ - "loella16", - "mireero", - "fscholz", - "khalid32", - "fvelcker" - ] - }, - "Web/API/Console/timeEnd": { - "modified": "2020-10-15T21:28:27.222Z", - "contributors": [ - "loella16", - "fscholz", - "AshfaqHossain", - "Fredchat", - "Automatik" - ] - }, - "Web/API/Console/timeLog": { - "modified": "2020-10-15T22:20:05.673Z", - "contributors": [ - "ewen-lbh", - "SphinxKnight" - ] - }, - "Web/API/Console/timeStamp": { - "modified": "2020-10-15T22:02:32.433Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Console/trace": { - "modified": "2020-10-15T21:37:28.957Z", - "contributors": [ - "loella16", - "JonGiamp", - "JulienItard" - ] - }, - "Web/API/Console/warn": { - "modified": "2020-10-15T21:37:32.060Z", - "contributors": [ - "loella16", - "unpeudetout", - "JulienItard" - ] - }, - "Web/API/Console_API": { - "modified": "2020-10-15T22:34:41.922Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/Credential": { - "modified": "2020-10-15T22:15:42.154Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/Credential_Management_API": { - "modified": "2019-03-18T20:40:05.156Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/CredentialsContainer": { - "modified": "2020-10-15T22:15:42.732Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/CredentialsContainer/create": { - "modified": "2020-10-15T22:15:42.455Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/CredentialsContainer/get": { - "modified": "2020-10-15T22:15:43.383Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/CredentialsContainer/preventSilentAccess": { - "modified": "2020-10-15T22:15:43.293Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/CredentialsContainer/store": { - "modified": "2020-10-15T22:15:43.204Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/Crypto": { - "modified": "2019-06-12T16:42:03.729Z", - "contributors": [ - "Maamouch", - "foxstorm" - ] - }, - "Web/API/Crypto/subtle": { - "modified": "2020-06-25T05:07:25.362Z", - "contributors": [ - "micky008", - "foxstorm" - ] - }, - "Web/API/CryptoKey": { - "modified": "2019-03-23T22:37:47.323Z", - "contributors": [ - "Porkepix", - "foxstorm" - ] - }, - "Web/API/CustomEvent": { - "modified": "2020-10-15T21:27:31.037Z", - "contributors": [ - "Arilox", - "loella16", - "Hell_Carlito", - "J.DMB", - "jbenoit", - "Porkepix", - "Lionel_Peramo" - ] - }, - "Web/API/CustomEvent/detail": { - "modified": "2020-10-15T22:01:25.082Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/CustomEvent/initCustomEvent": { - "modified": "2020-10-15T22:01:25.135Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMError": { - "modified": "2020-10-15T21:21:42.567Z", - "contributors": [ - "loella16", - "slietar", - "teoli", - "jsx", - "tregagnon" - ] - }, - "Web/API/DOMException": { - "modified": "2019-03-18T21:43:29.207Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMHighResTimeStamp": { - "modified": "2020-10-15T22:09:08.657Z", - "contributors": [ - "BenMorel" - ] - }, - "Web/API/DOMImplementation": { - "modified": "2019-03-23T22:57:47.120Z", - "contributors": [ - "loella16", - "teoli" - ] - }, - "Web/API/DOMImplementation/createDocument": { - "modified": "2019-03-23T22:57:50.841Z", - "contributors": [ - "loella16", - "FranckCo" - ] - }, - "Web/API/DOMImplementation/createDocumentType": { - "modified": "2019-04-19T04:24:15.205Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Web/API/DOMImplementation/createHTMLDocument": { - "modified": "2019-03-23T22:52:22.386Z", - "contributors": [ - "wbamberg", - "loella16", - "SphinxKnight", - "tazzcoco" - ] - }, - "Web/API/DOMImplementation/hasFeature": { - "modified": "2019-03-18T21:41:55.984Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMLocator": { - "modified": "2019-03-18T21:41:56.748Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMObject": { - "modified": "2019-03-18T21:41:56.899Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMParser": { - "modified": "2019-03-24T00:00:31.565Z", - "contributors": [ - "loella16", - "fscholz", - "PWeilbacher", - "Yolek", - "Mgjbot", - "Chbok", - "VincentN" - ] - }, - "Web/API/DOMPoint": { - "modified": "2019-03-18T21:41:56.595Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMPoint/DOMPoint": { - "modified": "2019-03-18T21:41:53.479Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMPointReadOnly": { - "modified": "2019-03-18T21:41:46.420Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMPointReadOnly/w": { - "modified": "2019-03-18T21:41:53.283Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMPointReadOnly/x": { - "modified": "2019-03-18T21:41:25.837Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMPointReadOnly/y": { - "modified": "2019-03-18T21:41:24.854Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMPointReadOnly/z": { - "modified": "2019-03-18T21:41:33.692Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMQuad": { - "modified": "2019-03-18T21:41:24.469Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRect": { - "modified": "2020-10-15T22:01:35.250Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Web/API/DOMRect/DOMRect": { - "modified": "2019-03-18T21:41:21.109Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly": { - "modified": "2020-10-15T22:01:33.628Z", - "contributors": [ - "Voulto", - "SphinxKnight", - "jpmedley" - ] - }, - "Web/API/DOMRectReadOnly/DOMRectReadOnly": { - "modified": "2019-03-18T21:41:33.048Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/bottom": { - "modified": "2019-03-18T21:41:33.238Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/height": { - "modified": "2019-03-18T21:41:36.495Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/left": { - "modified": "2019-03-18T21:41:30.332Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/right": { - "modified": "2019-03-18T21:41:25.443Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/top": { - "modified": "2019-03-18T21:41:25.257Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/width": { - "modified": "2019-03-18T21:41:15.373Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/x": { - "modified": "2019-03-18T21:41:26.564Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMRectReadOnly/y": { - "modified": "2019-03-18T21:41:25.051Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMString": { - "modified": "2019-03-23T23:30:27.295Z", - "contributors": [ - "loella16", - "Puxarnal", - "FredB", - "tregagnon" - ] - }, - "Web/API/DOMString/Binary": { - "modified": "2019-03-18T21:41:36.649Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMStringList": { - "modified": "2019-03-18T21:41:20.124Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTimeStamp": { - "modified": "2019-03-23T23:29:44.989Z", - "contributors": [ - "loella16", - "FredB" - ] - }, - "Web/API/DOMTokenList": { - "modified": "2020-10-15T21:34:05.793Z", - "contributors": [ - "loella16", - "SphinxKnight", - "Hell_Carlito", - "P45QU10U" - ] - }, - "Web/API/DOMTokenList/add": { - "modified": "2020-10-15T22:01:35.712Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/contains": { - "modified": "2020-10-15T22:01:38.901Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/entries": { - "modified": "2020-10-15T22:01:37.953Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/forEach": { - "modified": "2020-10-15T22:01:35.057Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/item": { - "modified": "2020-10-15T22:01:44.192Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/keys": { - "modified": "2020-10-15T22:01:47.459Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/length": { - "modified": "2020-10-15T22:01:47.586Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/remove": { - "modified": "2020-10-15T22:01:48.383Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/replace": { - "modified": "2020-10-15T22:01:47.482Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/supports": { - "modified": "2020-10-15T22:01:47.863Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/toggle": { - "modified": "2020-10-15T22:01:47.325Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/value": { - "modified": "2020-10-15T22:01:52.216Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMTokenList/values": { - "modified": "2020-10-15T22:01:52.240Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DOMUserData": { - "modified": "2019-03-18T21:41:11.030Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DataTransfer": { - "modified": "2019-04-20T00:20:42.022Z", - "contributors": [ - "wbamberg", - "teoli", - "patricepalau", - "Jeremie", - "fscholz", - "virg", - "mekal" - ] - }, - "Web/API/DataTransfer/clearData": { - "modified": "2019-03-23T22:32:20.041Z", - "contributors": [ - "NicolasGoudry" - ] - }, - "Web/API/DataTransfer/files": { - "modified": "2019-03-23T22:10:26.337Z", - "contributors": [ - "arthurlacoste", - "greg95000" - ] - }, - "Web/API/DedicatedWorkerGlobalScope": { - "modified": "2020-10-15T21:33:24.664Z", - "contributors": [ - "Arzak656", - "blackfox", - "jean-pierre.gay" - ] - }, - "Web/API/DedicatedWorkerGlobalScope/close": { - "modified": "2020-10-15T22:01:49.897Z", - "contributors": [ - "Arzak656", - "loella16" - ] - }, - "Web/API/DedicatedWorkerGlobalScope/name": { - "modified": "2020-10-15T22:01:49.649Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DeviceMotionEvent": { - "modified": "2020-09-07T05:26:58.789Z", - "contributors": [ - "Voulto", - "jpmedley" - ] - }, - "Web/API/DeviceMotionEvent/DeviceMotionEvent": { - "modified": "2019-03-18T21:41:13.672Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DeviceMotionEvent/accelerationIncludingGravity": { - "modified": "2019-03-18T21:41:01.615Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DeviceMotionEvent/interval": { - "modified": "2020-10-15T22:01:49.895Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Web/API/DeviceMotionEvent/rotationRate": { - "modified": "2020-10-15T22:01:52.234Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Web/API/DeviceOrientationEvent": { - "modified": "2019-03-23T23:28:16.009Z", - "contributors": [ - "khalid32", - "Goofy", - "FredB", - "darnuria" - ] - }, - "Web/API/DeviceOrientationEvent.absolute": { - "modified": "2019-03-23T23:28:20.161Z", - "contributors": [ - "Hellscream360", - "AshfaqHossain", - "darnuria" - ] - }, - "Web/API/DeviceRotationRate": { - "modified": "2019-03-18T21:41:14.051Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DeviceRotationRate/alpha": { - "modified": "2019-03-18T21:40:56.610Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DeviceRotationRate/beta": { - "modified": "2019-03-18T21:41:13.475Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DeviceRotationRate/gamma": { - "modified": "2019-03-18T21:41:11.230Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document": { - "modified": "2019-03-24T00:01:48.529Z", - "contributors": [ - "edspeedy", - "loella16", - "frederikdussault", - "vava", - "thbil", - "teoli", - "khalid32", - "Delapouite", - "ethertank", - "tregagnon", - "Crash", - "BenoitL", - "Mgjbot", - "Takenbot", - "Gorrk" - ] - }, - "Web/API/Document/DOMContentLoaded_event": { - "modified": "2020-10-15T22:29:03.455Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/Document/Document": { - "modified": "2019-03-23T22:05:00.212Z", - "contributors": [ - "loella16", - "cabalpit" - ] - }, - "Web/API/Document/Document.anchors": { - "modified": "2019-09-26T06:32:48.667Z", - "contributors": [ - "Le-Bookman", - "wbamberg", - "ThibautBremand", - "symsym" - ] - }, - "Web/API/Document/URL": { - "modified": "2019-03-23T22:50:43.925Z", - "contributors": [ - "ThibautBremand" - ] - }, - "Web/API/Document/activeElement": { - "modified": "2019-03-23T23:12:53.004Z", - "contributors": [ - "fscholz", - "teoli", - "AshfaqHossain", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/adoptNode": { - "modified": "2019-03-18T21:40:45.731Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/alinkColor": { - "modified": "2020-10-15T22:21:17.154Z", - "contributors": [ - "CocoMC98000" - ] - }, - "Web/API/Document/applets": { - "modified": "2019-03-23T23:10:50.034Z", - "contributors": [ - "fscholz", - "jsx", - "fmasy" - ] - }, - "Web/API/Document/bgColor": { - "modified": "2020-10-15T21:48:00.497Z", - "contributors": [ - "SphinxKnight", - "Dwaaren" - ] - }, - "Web/API/Document/body": { - "modified": "2019-03-23T23:33:33.035Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "mathbr" - ] - }, - "Web/API/Document/caretRangeFromPoint": { - "modified": "2019-03-18T21:40:33.489Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/characterSet": { - "modified": "2020-10-15T21:57:57.499Z", - "contributors": [ - "SphinxKnight", - "cabalpit" - ] - }, - "Web/API/Document/clear": { - "modified": "2020-10-15T22:07:57.497Z", - "contributors": [ - "Tokami" - ] - }, - "Web/API/Document/compatMode": { - "modified": "2019-03-18T20:59:10.281Z", - "contributors": [ - "SphinxKnight", - "loella16", - "fscholz", - "alexandrehebert" - ] - }, - "Web/API/Document/contentType": { - "modified": "2019-03-18T21:40:51.962Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/createAttribute": { - "modified": "2020-10-15T21:14:37.249Z", - "contributors": [ - "SphinxKnight", - "loella16", - "fscholz", - "teoli", - "xuancanh", - "Sébastien C.", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Document/createCDATASection": { - "modified": "2019-03-18T21:40:24.223Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/createComment": { - "modified": "2019-03-23T23:24:36.077Z", - "contributors": [ - "loella16", - "fscholz", - "jsx", - "sisyphe" - ] - }, - "Web/API/Document/createDocumentFragment": { - "modified": "2019-03-23T23:32:44.624Z", - "contributors": [ - "loella16", - "JNa0", - "P45QU10U", - "fscholz", - "jsx", - "AshfaqHossain", - "teoli", - "jdvauguet" - ] - }, - "Web/API/Document/createElement": { - "modified": "2020-10-15T21:15:29.511Z", - "contributors": [ - "Watilin", - "loella16", - "VictorLequin", - "Ealhad", - "Misty418", - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL", - "Takenbot" - ] - }, - "Web/API/Document/createElementNS": { - "modified": "2019-03-23T23:06:18.565Z", - "contributors": [ - "loella16", - "lotfire24", - "fscholz", - "Twidi" - ] - }, - "Web/API/Document/createEntityReference": { - "modified": "2019-03-18T21:40:14.903Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/createEvent": { - "modified": "2019-03-23T22:44:18.504Z", - "contributors": [ - "loella16", - "jmh" - ] - }, - "Web/API/Document/createExpression": { - "modified": "2019-03-18T21:40:18.366Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/createNSResolver": { - "modified": "2019-03-18T21:40:18.204Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/createNodeIterator": { - "modified": "2019-03-18T21:40:21.964Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/createProcessingInstruction": { - "modified": "2019-03-18T21:40:28.676Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/createRange": { - "modified": "2019-03-23T23:21:36.391Z", - "contributors": [ - "loella16", - "fscholz", - "Jeremie", - "fvelcker" - ] - }, - "Web/API/Document/createTextNode": { - "modified": "2019-03-23T23:53:24.787Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Document/createTreeWalker": { - "modified": "2019-03-18T21:40:20.459Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/currentScript": { - "modified": "2019-03-23T22:04:56.348Z", - "contributors": [ - "wbamberg", - "loella16", - "kantoche", - "cabalpit" - ] - }, - "Web/API/Document/defaultView": { - "modified": "2019-03-23T23:28:33.455Z", - "contributors": [ - "fscholz", - "Delapouite" - ] - }, - "Web/API/Document/designMode": { - "modified": "2019-03-23T22:47:19.586Z", - "contributors": [ - "dark_nemo" - ] - }, - "Web/API/Document/dir": { - "modified": "2020-10-15T22:26:01.944Z", - "contributors": [ - "SphinxKnight", - "hervems" - ] - }, - "Web/API/Document/doctype": { - "modified": "2019-03-18T21:40:14.743Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/documentElement": { - "modified": "2020-10-15T21:16:26.147Z", - "contributors": [ - "abvll", - "loella16", - "tzilliox", - "fscholz", - "teoli", - "AshfaqHossain", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/documentURI": { - "modified": "2020-10-15T22:02:10.846Z", - "contributors": [ - "abvll", - "loella16" - ] - }, - "Web/API/Document/documentURIObject": { - "modified": "2019-03-23T23:50:30.665Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/domain": { - "modified": "2019-03-18T21:16:45.176Z", - "contributors": [ - "NemoNobobyPersonne", - "marcdahan", - "remi34" - ] - }, - "Web/API/Document/drag_event": { - "modified": "2019-04-30T14:17:50.518Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/dragend_event": { - "modified": "2019-04-30T14:03:40.078Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/dragenter_event": { - "modified": "2019-04-30T14:21:07.497Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/dragleave_event": { - "modified": "2019-04-30T14:02:56.864Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/dragover_event": { - "modified": "2019-04-30T14:24:34.192Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/dragstart_event": { - "modified": "2019-04-30T14:03:33.933Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/drop_event": { - "modified": "2019-04-30T14:21:50.701Z", - "contributors": [ - "wbamberg", - "fscholz", - "areltfc", - "Kalwyn" - ] - }, - "Web/API/Document/elementFromPoint": { - "modified": "2019-03-23T23:50:28.633Z", - "contributors": [ - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/enableStyleSheetsForSet": { - "modified": "2019-03-18T21:40:08.810Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/evaluate": { - "modified": "2020-10-15T21:14:48.465Z", - "contributors": [ - "SphinxKnight", - "loella16", - "fscholz", - "teoli", - "tregagnon", - "Julien.stuby" - ] - }, - "Web/API/Document/execCommand": { - "modified": "2019-03-23T23:34:20.957Z", - "contributors": [ - "thibault", - "loella16", - "sylvainpolletvillard", - "Fenchister", - "DominiqueDevinci", - "ebear", - "fscholz", - "teoli", - "bfn" - ] - }, - "Web/API/Document/exitFullscreen": { - "modified": "2019-03-18T21:40:09.294Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/exitPointerLock": { - "modified": "2019-03-23T22:43:28.410Z", - "contributors": [ - "SphinxKnight", - "kipcode66" - ] - }, - "Web/API/Document/featurePolicy": { - "modified": "2020-11-02T18:36:11.259Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/Document/forms": { - "modified": "2019-03-23T22:47:49.253Z", - "contributors": [ - "loella16", - "Watilin" - ] - }, - "Web/API/Document/fullscreenchange_event": { - "modified": "2019-07-18T10:46:51.166Z", - "contributors": [ - "AlaricCalmette", - "irenesmith", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/fullscreenerror_event": { - "modified": "2019-03-23T21:59:49.455Z", - "contributors": [ - "irenesmith", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Document/getBoxObjectFor": { - "modified": "2019-03-18T21:39:17.387Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/getElementById": { - "modified": "2020-10-15T21:13:25.383Z", - "contributors": [ - "tristantheb", - "loella16", - "db0sch", - "genstor", - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Mgjbot", - "Takenbot" - ] - }, - "Web/API/Document/getElementsByClassName": { - "modified": "2020-10-15T21:17:56.718Z", - "contributors": [ - "abvll", - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/getElementsByName": { - "modified": "2019-03-23T23:43:51.351Z", - "contributors": [ - "loella16", - "edspeedy", - "fscholz", - "teoli", - "jsx", - "BenoitL" - ] - }, - "Web/API/Document/getElementsByTagName": { - "modified": "2019-03-23T23:50:32.919Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "arunpandianp", - "n_g", - "tregagnon", - "fkhannouf", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/getElementsByTagNameNS": { - "modified": "2019-03-18T21:39:18.440Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/getSelection": { - "modified": "2019-09-25T07:21:02.389Z", - "contributors": [ - "julienc", - "sudwebdesign", - "loella16", - "fscholz", - "FredPl" - ] - }, - "Web/API/Document/hasFocus": { - "modified": "2019-03-23T23:53:18.772Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/head": { - "modified": "2019-03-23T23:28:49.084Z", - "contributors": [ - "fscholz", - "Goofy", - "Delapouite" - ] - }, - "Web/API/Document/height": { - "modified": "2019-03-23T22:35:36.713Z", - "contributors": [ - "Beaver" - ] - }, - "Web/API/Document/hidden": { - "modified": "2020-10-15T22:15:02.524Z", - "contributors": [ - "ThCarrere" - ] - }, - "Web/API/Document/images": { - "modified": "2019-03-24T00:04:19.350Z", - "contributors": [ - "fscholz", - "teoli", - "jsx", - "tregagnon", - "RAP1D", - "Julien.stuby", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Document/implementation": { - "modified": "2019-03-23T23:57:36.312Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "tregagnon", - "Yanmorin" - ] - }, - "Web/API/Document/importNode": { - "modified": "2020-10-15T21:16:48.197Z", - "contributors": [ - "fscholz", - "wbamberg", - "m-r-r", - "loella16", - "teoli", - "Hasilt", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document/keypress_event": { - "modified": "2020-10-15T21:59:28.229Z", - "contributors": [ - "SphinxKnight", - "ImOverlord", - "chrisdavidmills", - "fscholz", - "NemoNobobyPersonne" - ] - }, - "Web/API/Document/lastModified": { - "modified": "2020-10-15T21:40:49.228Z", - "contributors": [ - "SphinxKnight", - "Hell_Carlito", - "DaweedM" - ] - }, - "Web/API/Document/lastStyleSheetSet": { - "modified": "2019-03-18T21:39:20.451Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/location": { - "modified": "2020-08-07T14:59:04.090Z", - "contributors": [ - "jcodeteo", - "NacimHarfouche", - "fscholz", - "tburette" - ] - }, - "Web/API/Document/mozSetImageElement": { - "modified": "2019-03-18T21:39:25.178Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/mozSyntheticDocument": { - "modified": "2019-03-18T21:39:15.573Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/onafterscriptexecute": { - "modified": "2019-03-18T21:16:44.711Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/onbeforescriptexecute": { - "modified": "2019-03-18T21:39:17.231Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/onfullscreenchange": { - "modified": "2019-03-23T22:29:20.848Z", - "contributors": [ - "Dwaaren" - ] - }, - "Web/API/Document/onoffline": { - "modified": "2019-03-18T21:39:15.173Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/ononline": { - "modified": "2019-03-18T21:39:26.555Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/open": { - "modified": "2019-03-23T23:45:31.773Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "arunpandianp", - "Delapouite", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Document/origin": { - "modified": "2019-03-18T21:39:14.796Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/popupNode": { - "modified": "2019-04-19T19:08:29.481Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/preferredStyleSheetSet": { - "modified": "2019-03-18T21:17:09.649Z", - "contributors": [ - "wbamberg", - "loella16", - "redorff" - ] - }, - "Web/API/Document/queryCommandState": { - "modified": "2019-03-18T21:39:20.655Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/queryCommandSupported": { - "modified": "2019-03-18T21:39:23.967Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/querySelector": { - "modified": "2019-03-23T23:16:43.222Z", - "contributors": [ - "khrys", - "loella16", - "juliend2", - "NemoNobobyPersonne", - "fscholz", - "Torvast", - "khalid32", - "Fredchat", - "lithrel", - "Goofy", - "Nek" - ] - }, - "Web/API/Document/querySelectorAll": { - "modified": "2019-03-23T22:57:36.074Z", - "contributors": [ - "loella16", - "fkhannouf", - "tym-network", - "DCK", - "micetf" - ] - }, - "Web/API/Document/readyState": { - "modified": "2020-11-29T14:54:59.337Z", - "contributors": [ - "Arzak656", - "GenjoMoz", - "cedeber", - "tobozo", - "thefractaler" - ] - }, - "Web/API/Document/referrer": { - "modified": "2019-03-23T23:15:05.977Z", - "contributors": [ - "fscholz", - "Fredchat", - "Akronos" - ] - }, - "Web/API/Document/registerElement": { - "modified": "2019-03-23T22:43:18.277Z", - "contributors": [ - "loella16", - "gsavin" - ] - }, - "Web/API/Document/releaseCapture": { - "modified": "2019-03-18T21:39:14.396Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/scripts": { - "modified": "2019-03-23T23:20:37.772Z", - "contributors": [ - "fscholz", - "AshfaqHossain", - "sisyphe" - ] - }, - "Web/API/Document/scroll_event": { - "modified": "2020-11-10T19:16:07.946Z", - "contributors": [ - "JNa0", - "wbamberg", - "irenesmith", - "Watilin", - "fscholz", - "timkrief", - "florentDieg" - ] - }, - "Web/API/Document/selectedStyleSheetSet": { - "modified": "2019-03-18T21:39:17.582Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/styleSheetSets": { - "modified": "2019-03-18T21:39:14.023Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Document/styleSheets": { - "modified": "2019-03-23T23:06:00.949Z", - "contributors": [ - "a5er", - "fscholz", - "J.DMB", - "Nothus" - ] - }, - "Web/API/Document/title": { - "modified": "2019-03-23T22:28:27.000Z", - "contributors": [ - "Hell_Carlito", - "Akio08" - ] - }, - "Web/API/Document/tooltipNode": { - "modified": "2019-03-18T21:39:13.843Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/touchend_event": { - "modified": "2019-04-30T14:08:32.474Z", - "contributors": [ - "wbamberg", - "irenesmith", - "fscholz", - "alcalyn" - ] - }, - "Web/API/Document/transitionend_event": { - "modified": "2020-10-15T22:23:39.293Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Document/visibilityState": { - "modified": "2019-03-18T21:39:28.477Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/width": { - "modified": "2019-03-23T22:07:26.300Z", - "contributors": [ - "ap369" - ] - }, - "Web/API/Document/write": { - "modified": "2019-03-23T23:45:34.301Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "jsx", - "Delapouite", - "Mgjbot", - "BenoitL", - "Takenbot" - ] - }, - "Web/API/Document/writeln": { - "modified": "2020-11-11T07:37:30.795Z", - "contributors": [ - "JNa0", - "cabalpit" - ] - }, - "Web/API/Document/xmlEncoding": { - "modified": "2019-03-18T21:39:14.209Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document/xmlVersion": { - "modified": "2019-03-18T21:39:27.536Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DocumentFragment": { - "modified": "2020-10-15T21:52:43.417Z", - "contributors": [ - "loella16", - "Watilin" - ] - }, - "Web/API/DocumentFragment/DocumentFragment": { - "modified": "2020-10-15T22:02:35.964Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DocumentFragment/querySelector": { - "modified": "2020-10-15T22:02:37.385Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DocumentFragment/querySelectorAll": { - "modified": "2020-10-15T22:02:36.843Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/DocumentOrShadowRoot": { - "modified": "2020-10-15T22:25:01.411Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/DocumentOrShadowRoot/elementsFromPoint": { - "modified": "2020-10-15T22:25:00.754Z", - "contributors": [ - "SphinxKnight", - "RolandGautier" - ] - }, - "Web/API/DocumentTouch": { - "modified": "2019-03-23T22:50:40.193Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "enayfuos" - ] - }, - "Web/API/DocumentType": { - "modified": "2020-04-26T15:13:01.231Z", - "contributors": [ - "adtrevor", - "loella16", - "SphinxKnight", - "Hell_Carlito" - ] - }, - "Web/API/Document_Object_Model": { - "modified": "2019-03-24T00:04:14.830Z", - "contributors": [ - "loella16", - "Dralyab", - "SphinxKnight", - "jmh", - "robin850", - "teoli", - "damien.flament", - "BenoitL", - "Mgjbot", - "Fredchat" - ] - }, - "Web/API/Document_Object_Model/Exemples": { - "modified": "2019-03-23T23:50:50.905Z", - "contributors": [ - "loella16", - "SphinxKnight", - "teoli", - "khalid32", - "BenoitL", - "Domif", - "Mgjbot", - "Fredchat" - ] - }, - "Web/API/Document_Object_Model/Introduction": { - "modified": "2020-10-18T13:14:40.506Z", - "contributors": [ - "Lolo", - "diassynthesis", - "loella16", - "kekbait", - "SphinxKnight", - "yasakura_", - "teoli", - "khalid32", - "BenoitL", - "Mgjbot", - "Takenbot", - "Chbok" - ] - }, - "Web/API/Document_Object_Model/Les_évènements_et_le_DOM": { - "modified": "2019-03-18T21:39:20.100Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document_Object_Model/Localisation_des_éléments_DOM_avec_les_sélecteurs": { - "modified": "2019-03-18T21:39:30.176Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Document_Object_Model/Préface": { - "modified": "2019-03-23T23:46:29.146Z", - "contributors": [ - "SphinxKnight", - "teoli", - "khalid32", - "Sheppy", - "Ame Nomade", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document_Object_Model/Whitespace": { - "modified": "2020-01-30T13:20:28.299Z", - "contributors": [ - "chrisdavidmills", - "loella16", - "ethertank", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document_object_model/Utilisation_du_DOM_Level_1_Core_du_W3C": { - "modified": "2020-03-02T10:16:52.732Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "loella16", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Document_object_model/Utilisation_du_DOM_Level_1_Core_du_W3C/Exemple": { - "modified": "2020-03-02T10:16:52.814Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Web/API/DoubleRange": { - "modified": "2020-11-11T19:01:25.656Z", - "contributors": [ - "JNa0", - "Voulto" - ] - }, - "Web/API/Element": { - "modified": "2020-11-10T21:11:37.745Z", - "contributors": [ - "JNa0", - "NacimHarfouche", - "fscholz", - "loella16", - "teoli", - "soumya", - "Delapouite", - "Julien.stuby", - "BenoitL", - "Mgjbot", - "Fredchat", - "Sam.bree", - "Takenbot", - "GT", - "Anonymous" - ] - }, - "Web/API/Element.blur": { - "modified": "2020-10-15T21:17:21.812Z", - "contributors": [ - "abvll", - "a-mt", - "teoli", - "jsx", - "tregagnon", - "BenoitL" - ] - }, - "Web/API/Element/accessKey": { - "modified": "2019-03-23T22:24:43.588Z", - "contributors": [ - "loella16", - "alexandre-le-borgne" - ] - }, - "Web/API/Element/animate": { - "modified": "2019-03-23T22:28:26.628Z", - "contributors": [ - "gharel", - "HereComesJuju" - ] - }, - "Web/API/Element/attachShadow": { - "modified": "2020-11-16T08:31:28.051Z", - "contributors": [ - "mherchy", - "linsolas" - ] - }, - "Web/API/Element/attributes": { - "modified": "2020-10-15T21:18:22.728Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "senshu", - "Mgjbot", - "Takenbot", - "BenoitL", - "GT" - ] - }, - "Web/API/Element/classList": { - "modified": "2020-10-15T21:22:02.156Z", - "contributors": [ - "tristantheb", - "JLuc", - "sir-kain", - "loella16", - "Twidi", - "lyrixx", - "edspeedy", - "DaScritch", - "P45QU10U", - "fscholz", - "teoli", - "khalid32", - "Delapouite", - "juleschz" - ] - }, - "Web/API/Element/className": { - "modified": "2020-10-15T21:09:39.687Z", - "contributors": [ - "tristantheb", - "loella16", - "arthurlacoste", - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "dextra", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Element/click_event": { - "modified": "2020-10-15T21:50:40.431Z", - "contributors": [ - "SphinxKnight", - "irenesmith", - "necraidan", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Element/clientHeight": { - "modified": "2019-03-23T23:43:32.086Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "Takenbot", - "BenoitL", - "Peter1789", - "Chbok" - ] - }, - "Web/API/Element/clientLeft": { - "modified": "2019-03-23T23:50:24.432Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Element/clientWidth": { - "modified": "2020-11-05T03:12:27.036Z", - "contributors": [ - "SphinxKnight", - "spirival", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "Takenbot", - "BenoitL", - "Peter1789" - ] - }, - "Web/API/Element/closest": { - "modified": "2020-10-15T21:39:34.749Z", - "contributors": [ - "lgiraudel", - "RemyGuihard", - "BenMorel", - "loella16", - "SphinxKnight", - "gxolin", - "Teepo" - ] - }, - "Web/API/Element/contextmenu_event": { - "modified": "2020-10-15T21:50:46.121Z", - "contributors": [ - "SphinxKnight", - "irenesmith", - "ctjhoa", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Element/currentStyle": { - "modified": "2019-03-18T21:32:08.768Z", - "contributors": [ - "z1057" - ] - }, - "Web/API/Element/dblclick_event": { - "modified": "2020-10-15T21:49:52.144Z", - "contributors": [ - "SphinxKnight", - "irenesmith", - "fscholz", - "Copen" - ] - }, - "Web/API/Element/getAttribute": { - "modified": "2020-11-11T08:07:56.657Z", - "contributors": [ - "JNa0", - "loella16", - "lehollandaisvolant", - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL", - "Fredchat", - "Domif", - "Takenbot" - ] - }, - "Web/API/Element/getAttributeNS": { - "modified": "2020-10-15T21:15:37.517Z", - "contributors": [ - "SphinxKnight", - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Element/getAttributeNames": { - "modified": "2019-04-17T13:08:28.913Z", - "contributors": [ - "gfc", - "loella16" - ] - }, - "Web/API/Element/getAttributeNode": { - "modified": "2019-03-23T23:53:08.091Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Celelibi" - ] - }, - "Web/API/Element/getAttributeNodeNS": { - "modified": "2019-03-23T23:54:18.423Z", - "contributors": [ - "wbamberg", - "fscholz", - "teoli", - "jsx", - "AshfaqHossain", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Element/getBoundingClientRect": { - "modified": "2020-11-18T10:29:48.861Z", - "contributors": [ - "cdoublev", - "SphinxKnight", - "floribon", - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Mgjbot" - ] - }, - "Web/API/Element/getElementsByClassName": { - "modified": "2020-10-15T21:41:18.545Z", - "contributors": [ - "tristantheb", - "polinux", - "Gibus", - "devethic" - ] - }, - "Web/API/Element/getElementsByTagName": { - "modified": "2019-03-24T00:14:28.776Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "Mgjbot", - "The RedBurn", - "BenoitL", - "Fredchat", - "Mytony", - "Takenbot" - ] - }, - "Web/API/Element/getElementsByTagNameNS": { - "modified": "2020-10-15T21:08:26.964Z", - "contributors": [ - "SphinxKnight", - "hervems", - "wbamberg", - "loella16", - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Element/hasAttribute": { - "modified": "2019-03-23T23:53:10.754Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Celelibi" - ] - }, - "Web/API/Element/hasAttributeNS": { - "modified": "2019-03-23T23:53:18.889Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "AshfaqHossain", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Element/hasAttributes": { - "modified": "2020-10-15T21:15:58.454Z", - "contributors": [ - "SphinxKnight", - "loella16", - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL", - "Celelibi" - ] - }, - "Web/API/Element/id": { - "modified": "2019-04-19T09:07:28.280Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Element/innertHTML": { - "modified": "2020-11-03T14:59:36.186Z", - "contributors": [ - "spirival", - "loella16", - "sami.boukortt", - "fscholz", - "teoli", - "scaillerie", - "khalid32", - "ethertank", - "grafik.muzik", - "Mgjbot", - "BenoitL", - "Takenbot", - "Anonymous" - ] - }, - "Web/API/Element/insertAdjacentElement": { - "modified": "2020-10-15T22:01:30.731Z", - "contributors": [ - "Yukulele.", - "tym-network", - "loella16", - "gigouni" - ] - }, - "Web/API/Element/insertAdjacentHTML": { - "modified": "2020-10-15T21:21:30.158Z", - "contributors": [ - "Yukulele.", - "ocombe", - "loella16", - "TTBlist", - "fscholz", - "teoli", - "khalid32", - "JeanDavidDaviet" - ] - }, - "Web/API/Element/insertAdjacentText": { - "modified": "2020-10-15T22:02:37.949Z", - "contributors": [ - "Yukulele.", - "loella16", - "NemoNobobyPersonne" - ] - }, - "Web/API/Element/localName": { - "modified": "2019-03-18T21:38:49.396Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Element/matches": { - "modified": "2020-10-15T21:37:50.464Z", - "contributors": [ - "loella16", - "nbouvrette", - "Watilin", - "vava" - ] - }, - "Web/API/Element/mousedown_event": { - "modified": "2020-10-15T21:56:54.584Z", - "contributors": [ - "SphinxKnight", - "norival", - "wbamberg", - "JyTosTT", - "irenesmith", - "wgaetan", - "areltfc", - "Halkeand" - ] - }, - "Web/API/Element/mouseenter_event": { - "modified": "2020-10-15T22:26:31.978Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/Element/mouseleave_event": { - "modified": "2020-10-15T22:26:33.987Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/Element/mousemove_event": { - "modified": "2020-10-15T21:59:29.869Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "irenesmith", - "SteelCode94", - "areltfc" - ] - }, - "Web/API/Element/mouseout_event": { - "modified": "2020-10-15T21:59:51.535Z", - "contributors": [ - "nboisteault", - "SphinxKnight", - "wbamberg", - "irenesmith", - "T-Zahil", - "areltfc" - ] - }, - "Web/API/Element/mouseover_event": { - "modified": "2020-10-15T21:51:43.078Z", - "contributors": [ - "SphinxKnight", - "irenesmith", - "fscholz", - "Copen", - "necraidan" - ] - }, - "Web/API/Element/mouseup_event": { - "modified": "2020-10-15T21:59:51.425Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "irenesmith", - "areltfc" - ] - }, - "Web/API/Element/name": { - "modified": "2019-03-24T00:13:05.858Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "dextra", - "BenoitL" - ] - }, - "Web/API/Element/namespaceURI": { - "modified": "2019-03-18T21:38:59.961Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Element/onwheel": { - "modified": "2019-03-18T21:09:01.795Z", - "contributors": [ - "fscholz", - "loella16", - "alexandre-le-borgne" - ] - }, - "Web/API/Element/outerHTML": { - "modified": "2020-02-14T07:49:22.857Z", - "contributors": [ - "khalyomede", - "loella16", - "fscholz", - "scaillerie" - ] - }, - "Web/API/Element/prefix": { - "modified": "2019-03-18T21:38:57.778Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Element/querySelector": { - "modified": "2019-03-23T23:09:24.946Z", - "contributors": [ - "loella16", - "fscholz", - "Ailete619" - ] - }, - "Web/API/Element/querySelectorAll": { - "modified": "2019-03-23T23:09:56.033Z", - "contributors": [ - "loella16", - "fscholz", - "kyfr59" - ] - }, - "Web/API/Element/releasePointerCapture": { - "modified": "2019-03-18T21:38:50.640Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Element/removeAttribute": { - "modified": "2019-03-23T23:53:07.381Z", - "contributors": [ - "sylv1", - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "Fredchat", - "BenoitL", - "Celelibi" - ] - }, - "Web/API/Element/removeAttributeNS": { - "modified": "2019-03-23T23:54:16.680Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Element/removeAttributeNode": { - "modified": "2019-03-23T23:53:02.731Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "jsx", - "AshfaqHossain", - "Mgjbot", - "BenoitL", - "Fredchat", - "Celelibi" - ] - }, - "Web/API/Element/requestFullScreen": { - "modified": "2019-03-18T21:38:48.086Z", - "contributors": [ - "loella16", - "jena43" - ] - }, - "Web/API/Element/scrollHeight": { - "modified": "2020-05-06T11:11:48.539Z", - "contributors": [ - "regseb", - "SphinxKnight", - "fscholz", - "teoli", - "khalid32", - "Goofy", - "adrienchretien", - "Julien STUBY", - "BenoitL" - ] - }, - "Web/API/Element/scrollIntoView": { - "modified": "2020-10-15T21:16:44.187Z", - "contributors": [ - "SphinxKnight", - "kevin-verschaeve", - "loella16", - "palpalpalpal", - "fscholz", - "teoli", - "khalid32", - "ethertank", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Element/scrollIntoViewIfNeeded": { - "modified": "2019-03-18T21:38:48.451Z", - "contributors": [ - "teoli", - "loella16" - ] - }, - "Web/API/Element/scrollLeft": { - "modified": "2019-03-24T00:09:03.253Z", - "contributors": [ - "solidreno", - "fscholz", - "teoli", - "khalid32", - "Julien STUBY", - "BenoitL" - ] - }, - "Web/API/Element/scrollLeftMax": { - "modified": "2019-03-23T22:24:40.413Z", - "contributors": [ - "alexandre-le-borgne" - ] - }, - "Web/API/Element/scrollTo": { - "modified": "2020-10-15T22:23:29.547Z", - "contributors": [ - "rassacnivek", - "innocenzi" - ] - }, - "Web/API/Element/scrollTop": { - "modified": "2019-03-24T00:03:08.360Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Delapouite", - "Wladimir_Palant", - "Julien STUBY", - "BenoitL" - ] - }, - "Web/API/Element/scrollWidth": { - "modified": "2019-03-23T23:47:11.412Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/Element/select_event": { - "modified": "2019-03-29T11:42:06.216Z", - "contributors": [ - "irenesmith", - "fscholz", - "NemoNobobyPersonne" - ] - }, - "Web/API/Element/setAttribute": { - "modified": "2019-03-23T23:53:11.574Z", - "contributors": [ - "SphinxKnight", - "Linkus", - "loella16", - "teoli", - "julienw", - "fscholz", - "khalid32", - "Mgjbot", - "BenoitL", - "Takenbot" - ] - }, - "Web/API/Element/setAttributeNS": { - "modified": "2019-03-23T23:53:03.972Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Element/setAttributeNode": { - "modified": "2019-03-23T23:53:12.251Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Celelibi" - ] - }, - "Web/API/Element/setAttributeNodeNS": { - "modified": "2019-03-23T23:54:18.084Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Element/setCapture": { - "modified": "2019-03-18T21:39:21.819Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Element/setPointerCapture": { - "modified": "2019-03-18T21:38:49.004Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Element/tabStop": { - "modified": "2019-03-18T21:38:50.214Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Element/tagName": { - "modified": "2019-03-23T23:53:29.906Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/ElementTraversal": { - "modified": "2019-03-18T21:39:02.443Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Encoding_API": { - "modified": "2020-10-15T22:21:39.244Z", - "contributors": [ - "Torzivalds" - ] - }, - "Web/API/Entity": { - "modified": "2019-03-18T21:40:22.544Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/EntityReference": { - "modified": "2019-03-18T21:40:29.302Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/ErrorEvent": { - "modified": "2020-10-15T22:26:44.334Z", - "contributors": [ - "Eliastik" - ] - }, - "Web/API/Event": { - "modified": "2020-10-15T21:17:13.702Z", - "contributors": [ - "loella16", - "hs0ucy", - "teoli", - "jsx", - "AshfaqHossain", - "Mgjbot", - "BenoitL", - "Fredchat", - "Takenbot" - ] - }, - "Web/API/Event/Comparaison_des_cibles_d_évènements": { - "modified": "2019-03-18T21:39:09.103Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Event/Event": { - "modified": "2020-10-15T22:02:32.493Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Event/bubbles": { - "modified": "2020-10-15T21:49:52.202Z", - "contributors": [ - "loella16", - "Kalwyn" - ] - }, - "Web/API/Event/cancelBubble": { - "modified": "2020-10-15T22:02:41.801Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Event/cancelable": { - "modified": "2020-10-15T21:49:52.647Z", - "contributors": [ - "loella16", - "Kalwyn" - ] - }, - "Web/API/Event/createEvent": { - "modified": "2020-10-15T21:37:47.725Z", - "contributors": [ - "loella16", - "Alexgruissan" - ] - }, - "Web/API/Event/currentTarget": { - "modified": "2020-10-22T12:52:32.833Z", - "contributors": [ - "funguy25637", - "SphinxKnight", - "programgamer-real", - "loella16", - "Kalwyn", - "Nothus", - "P45QU10U" - ] - }, - "Web/API/Event/defaultPrevented": { - "modified": "2020-10-15T21:24:14.815Z", - "contributors": [ - "loella16", - "robin850", - "fscholz", - "AshfaqHossain", - "Delapouite" - ] - }, - "Web/API/Event/eventPhase": { - "modified": "2020-10-15T21:50:01.057Z", - "contributors": [ - "loella16", - "Kalwyn" - ] - }, - "Web/API/Event/explicitOriginalTarget": { - "modified": "2019-03-23T22:52:51.091Z", - "contributors": [ - "SphinxKnight", - "Hell_Carlito" - ] - }, - "Web/API/Event/initEvent": { - "modified": "2020-10-15T21:08:43.295Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Event/isTrusted": { - "modified": "2019-03-23T22:25:09.425Z", - "contributors": [ - "HugoCareil", - "mickro", - "Kalwyn" - ] - }, - "Web/API/Event/originalTarget": { - "modified": "2020-10-15T22:02:43.739Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Event/preventDefault": { - "modified": "2020-10-15T21:24:03.795Z", - "contributors": [ - "watsab", - "loella16", - "Hell_Carlito", - "robin850", - "fscholz", - "khalid32", - "Goofy", - "Delapouite", - "flo5589" - ] - }, - "Web/API/Event/returnValue": { - "modified": "2020-10-15T22:02:41.674Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Event/srcElement": { - "modified": "2020-10-15T21:50:04.182Z", - "contributors": [ - "loella16", - "Kalwyn" - ] - }, - "Web/API/Event/stopImmediatePropagation": { - "modified": "2020-10-15T21:50:10.053Z", - "contributors": [ - "SphinxKnight", - "ebear", - "Kalwyn" - ] - }, - "Web/API/Event/stopPropagation": { - "modified": "2020-10-15T21:21:29.573Z", - "contributors": [ - "loella16", - "teoli", - "robin850", - "fscholz", - "matthieusieben", - "Dgellow" - ] - }, - "Web/API/Event/target": { - "modified": "2020-10-15T21:33:55.755Z", - "contributors": [ - "loella16", - "Kalwyn", - "P45QU10U" - ] - }, - "Web/API/Event/timeStamp": { - "modified": "2020-10-15T21:50:06.610Z", - "contributors": [ - "loella16", - "Kalwyn" - ] - }, - "Web/API/Event/type": { - "modified": "2020-10-15T21:50:06.134Z", - "contributors": [ - "loella16", - "Kalwyn" - ] - }, - "Web/API/EventListener": { - "modified": "2019-03-23T22:25:52.637Z", - "contributors": [ - "loella16", - "Copen" - ] - }, - "Web/API/EventSource": { - "modified": "2020-08-20T16:36:34.612Z", - "contributors": [ - "sylvain_floury", - "SphinxKnight", - "Nothus" - ] - }, - "Web/API/EventSource/close": { - "modified": "2019-03-23T22:04:48.136Z", - "contributors": [ - "Plotisateur" - ] - }, - "Web/API/EventSource/onopen": { - "modified": "2020-10-15T22:17:18.152Z", - "contributors": [ - "SphinxKnight", - "nmerinian" - ] - }, - "Web/API/EventTarget": { - "modified": "2020-10-15T21:33:04.540Z", - "contributors": [ - "tomderudder", - "abvll", - "SphinxKnight", - "Gibus", - "Hell_Carlito", - "Iwagg", - "fscholz" - ] - }, - "Web/API/EventTarget/EventTarget": { - "modified": "2020-10-15T22:02:43.043Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/EventTarget/addEventListener": { - "modified": "2020-10-16T08:15:40.817Z", - "contributors": [ - "vvvaleee", - "NemoNobobyPersonne", - "SphinxKnight", - "Askrenteam", - "samuelClo", - "erwanjugand", - "loella16", - "cedeber", - "wbamberg", - "fscholz", - "teoli", - "Hasilt", - "Pragmateek", - "Delapouite", - "olibre", - "alexnormand", - "Piopier", - "Mgjbot", - "CNeo", - "BenoitL" - ] - }, - "Web/API/EventTarget/dispatchEvent": { - "modified": "2020-10-15T21:15:24.071Z", - "contributors": [ - "loella16", - "Yvain", - "fscholz", - "khalid32", - "teoli", - "Yukulele", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/EventTarget/removeEventListener": { - "modified": "2020-10-15T21:15:05.213Z", - "contributors": [ - "SphinxKnight", - "guillaumegarcia13", - "loella16", - "wbamberg", - "nclsndr", - "fscholz", - "teoli", - "AshfaqHossain", - "Pkjmr", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/ExtendableEvent": { - "modified": "2019-03-23T22:36:58.080Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/ExtendableEvent/ExtendableEvent": { - "modified": "2019-03-23T22:36:32.000Z", - "contributors": [ - "Goofy", - "nobe4" - ] - }, - "Web/API/ExtendableMessageEvent": { - "modified": "2019-03-23T22:36:23.615Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/ExtendableMessageEvent/ExtendableMessageEvent": { - "modified": "2019-03-23T22:35:53.292Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/ExtendableMessageEvent/data": { - "modified": "2019-03-23T22:34:19.930Z", - "contributors": [ - "SphinxKnight", - "nobe4" - ] - }, - "Web/API/ExtendableMessageEvent/lastEventId": { - "modified": "2019-03-18T21:15:10.720Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/ExtendableMessageEvent/origin": { - "modified": "2019-03-23T22:30:09.594Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/ExtendableMessageEvent/ports": { - "modified": "2019-03-23T22:30:10.559Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/FeaturePolicy": { - "modified": "2020-10-31T09:28:54.428Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/FeaturePolicy/allowedFeatures": { - "modified": "2020-11-05T15:31:32.647Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/FeaturePolicy/allowsFeature": { - "modified": "2020-11-05T15:45:40.562Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/FeaturePolicy/features": { - "modified": "2020-11-05T15:35:08.623Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/FeaturePolicy/getAllowlistForFeature": { - "modified": "2020-11-05T15:30:12.248Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/FederatedCredential": { - "modified": "2020-10-15T22:15:42.146Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/FederatedCredential/FederatedCredential": { - "modified": "2020-10-15T22:15:43.153Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/FederatedCredential/provider": { - "modified": "2020-10-15T22:15:43.967Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/FetchEvent": { - "modified": "2019-03-23T22:37:05.029Z", - "contributors": [ - "NuclearPony" - ] - }, - "Web/API/Fetch_API": { - "modified": "2020-10-15T21:42:27.599Z", - "contributors": [ - "codingk8", - "jonathan.cregut", - "Graziellah", - "Elianel", - "blr21560", - "jean-pierre.gay" - ] - }, - "Web/API/Fetch_API/Basic_concepts": { - "modified": "2019-07-08T10:32:12.030Z", - "contributors": [ - "ThCarrere", - "BabaDelNorte" - ] - }, - "Web/API/Fetch_API/Using_Fetch": { - "modified": "2020-10-15T21:44:53.941Z", - "contributors": [ - "smeden-lod", - "chrisdavidmills", - "ylerjen", - "thibaultboursier", - "Krap", - "laem", - "chaBiselx", - "elie_michel", - "AlainGourves", - "Xstoudi", - "P45QU10U", - "JeffD" - ] - }, - "Web/API/File": { - "modified": "2020-10-15T21:10:58.299Z", - "contributors": [ - "Watilin", - "wbamberg", - "nop", - "frassinier", - "mireero", - "teoli", - "tregagnon", - "mekal" - ] - }, - "Web/API/File/Using_files_from_web_applications": { - "modified": "2019-08-27T03:14:59.087Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "Copen", - "jmh", - "Mr21", - "vava", - "m2c", - "Goofy", - "LoeWzukW", - "jean_pierre" - ] - }, - "Web/API/File/fileName": { - "modified": "2019-03-18T21:38:44.194Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/File/fileSize": { - "modified": "2019-03-18T21:38:36.545Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/FileList": { - "modified": "2020-10-15T21:10:58.823Z", - "contributors": [ - "SphinxKnight", - "Cid", - "teoli", - "mekal", - "Goofy", - "tregagnon" - ] - }, - "Web/API/FileReader": { - "modified": "2019-06-10T09:09:17.422Z", - "contributors": [ - "jerominejournet", - "SphinxKnight", - "EmmanuelBeziat", - "NeptuneK", - "romainlebreton", - "teoli", - "fabien", - "Laowai", - "emersion", - "mekal", - "Jack_Duthen", - "tregagnon" - ] - }, - "Web/API/FileReader/FileReader": { - "modified": "2019-12-05T20:52:27.264Z", - "contributors": [ - "Hessabra" - ] - }, - "Web/API/FileReader/readAsArrayBuffer": { - "modified": "2020-10-15T22:00:47.285Z", - "contributors": [ - "thebrave", - "roptch", - "loella16", - "notnope" - ] - }, - "Web/API/FileReader/readAsBinaryString": { - "modified": "2020-10-15T22:20:45.031Z", - "contributors": [ - "thebrave" - ] - }, - "Web/API/FileReader/readAsDataURL": { - "modified": "2019-03-23T22:14:23.679Z", - "contributors": [ - "Wintersunshine-Do" - ] - }, - "Web/API/FileReader/readAsText": { - "modified": "2019-03-18T21:45:42.885Z", - "contributors": [ - "Blipz", - "jeanpul" - ] - }, - "Web/API/FileRequest": { - "modified": "2019-03-18T21:38:32.972Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/FileRequest/lockedFile": { - "modified": "2019-03-18T21:38:29.049Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/FileRequest/onprogress": { - "modified": "2019-03-18T21:38:33.597Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/FocusEvent": { - "modified": "2020-10-15T21:50:08.822Z", - "contributors": [ - "loella16", - "Kalwyn" - ] - }, - "Web/API/Force_Touch_events": { - "modified": "2019-03-18T21:38:38.023Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/FormData": { - "modified": "2020-10-15T21:21:44.510Z", - "contributors": [ - "tristantheb", - "dhovart", - "WSH", - "teoli", - "jdvauguet", - "maxpain2011" - ] - }, - "Web/API/FormData/FormData": { - "modified": "2020-10-15T22:10:44.093Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "Pandazaur", - "ThreadElric" - ] - }, - "Web/API/FormData/Utilisation_objets_FormData": { - "modified": "2019-03-23T22:14:27.375Z", - "contributors": [ - "Wintersunshine-Do" - ] - }, - "Web/API/FormData/append": { - "modified": "2020-10-15T22:10:52.044Z", - "contributors": [ - "tristantheb", - "ThreadElric", - "cyppan" - ] - }, - "Web/API/FormData/delete": { - "modified": "2020-10-15T22:29:17.750Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/FormData/entries": { - "modified": "2020-10-15T21:55:57.814Z", - "contributors": [ - "tristantheb", - "Alexandre-cibot" - ] - }, - "Web/API/FormData/get": { - "modified": "2020-10-15T22:29:19.506Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/FormData/getAll": { - "modified": "2020-10-15T22:29:17.809Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/FormData/has": { - "modified": "2020-10-15T22:29:23.241Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/FormData/keys": { - "modified": "2020-10-15T22:29:23.766Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/FormData/set": { - "modified": "2020-10-15T22:29:23.778Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/FormData/values": { - "modified": "2020-10-15T22:29:22.795Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/GainNode": { - "modified": "2019-03-23T23:28:24.109Z", - "contributors": [ - "marie-ototoi", - "fscholz", - "teoli", - "vava", - "tregagnon", - "Delapouite", - "dexterneo" - ] - }, - "Web/API/Gamepad": { - "modified": "2020-10-15T21:50:09.762Z", - "contributors": [ - "SphinxKnight", - "ea1000", - "Kalwyn" - ] - }, - "Web/API/Gamepad_API": { - "modified": "2020-10-15T22:22:14.027Z", - "contributors": [ - "jogemu" - ] - }, - "Web/API/Geolocation": { - "modified": "2019-03-23T22:12:18.756Z", - "contributors": [ - "FranckGrosDubois" - ] - }, - "Web/API/Geolocation/clearWatch": { - "modified": "2019-03-23T22:12:27.261Z", - "contributors": [ - "FranckGrosDubois" - ] - }, - "Web/API/Geolocation/getCurrentPosition": { - "modified": "2020-10-15T21:54:12.372Z", - "contributors": [ - "SphinxKnight", - "Nathan_Mercieca", - "FranckGrosDubois" - ] - }, - "Web/API/Geolocation/watchPosition": { - "modified": "2019-03-23T22:12:20.299Z", - "contributors": [ - "FranckGrosDubois" - ] - }, - "Web/API/GeolocationCoordinates": { - "modified": "2019-12-10T09:34:37.988Z", - "contributors": [ - "chrisdavidmills", - "DylanGauthier" - ] - }, - "Web/API/GeolocationPosition": { - "modified": "2020-10-15T22:26:46.525Z", - "contributors": [ - "Voulto", - "chrisdavidmills" - ] - }, - "Web/API/GeolocationPosition/timestamp": { - "modified": "2020-10-15T22:26:47.312Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/GeolocationPositionError": { - "modified": "2020-10-15T22:26:48.406Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/Geolocation_API": { - "modified": "2020-10-15T21:20:47.889Z", - "contributors": [ - "SphinxKnight", - "joellord", - "lotfire24", - "edouard", - "fluxine", - "Nigel_Sheldon" - ] - }, - "Web/API/GestureEvent": { - "modified": "2019-03-18T21:38:40.642Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/GlobalEventHandlers": { - "modified": "2019-03-23T23:01:24.395Z", - "contributors": [ - "loella16", - "fscholz" - ] - }, - "Web/API/GlobalEventHandlers/onabort": { - "modified": "2019-03-23T22:29:18.151Z", - "contributors": [ - "NemoNobobyPersonne", - "Dwaaren" - ] - }, - "Web/API/GlobalEventHandlers/onauxclick": { - "modified": "2020-10-15T22:33:47.986Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/GlobalEventHandlers/onblur": { - "modified": "2019-03-23T23:46:41.843Z", - "contributors": [ - "OpenStark", - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Pitoutompoilu" - ] - }, - "Web/API/GlobalEventHandlers/onchange": { - "modified": "2019-03-23T23:47:11.218Z", - "contributors": [ - "fscholz", - "teoli", - "AshfaqHossain", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/onclick": { - "modified": "2020-03-06T22:16:53.219Z", - "contributors": [ - "noelmace", - "sudwebdesign", - "williamdes", - "Bpruneau", - "louity", - "Daimanu06", - "fscholz", - "teoli", - "jsx", - "Priam", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/onclose": { - "modified": "2019-03-23T22:45:51.255Z", - "contributors": [ - "SphinxKnight", - "smumu" - ] - }, - "Web/API/GlobalEventHandlers/ondblclick": { - "modified": "2019-03-23T23:46:40.744Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Pitoutompoilu" - ] - }, - "Web/API/GlobalEventHandlers/onerror": { - "modified": "2019-03-23T22:47:31.401Z", - "contributors": [ - "NemoNobobyPersonne", - "Hell_Carlito", - "FGM", - "ylerjen" - ] - }, - "Web/API/GlobalEventHandlers/onfocus": { - "modified": "2019-03-23T23:47:18.451Z", - "contributors": [ - "fscholz", - "teoli", - "AshfaqHossain", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/ongotpointercapture": { - "modified": "2020-10-15T22:16:22.004Z", - "contributors": [ - "fmartin5" - ] - }, - "Web/API/GlobalEventHandlers/onkeydown": { - "modified": "2019-03-24T00:01:53.937Z", - "contributors": [ - "fscholz", - "teoli", - "AshfaqHossain", - "Julien.stuby", - "BenoitL", - "Mgjbot", - "Pitoutompoilu" - ] - }, - "Web/API/GlobalEventHandlers/onkeypress": { - "modified": "2019-03-24T00:01:54.246Z", - "contributors": [ - "fscholz", - "teoli", - "AshfaqHossain", - "Julien.stuby", - "BenoitL", - "Pitoutompoilu" - ] - }, - "Web/API/GlobalEventHandlers/onkeyup": { - "modified": "2019-03-24T00:01:52.086Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Julien.stuby", - "Pitoutompoilu", - "Chbok" - ] - }, - "Web/API/GlobalEventHandlers/onload": { - "modified": "2019-03-23T23:45:30.027Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/onloadend": { - "modified": "2019-03-18T21:35:41.854Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/GlobalEventHandlers/onloadstart": { - "modified": "2020-10-15T22:04:38.335Z", - "contributors": [ - "fscholz", - "loella16" - ] - }, - "Web/API/GlobalEventHandlers/onmousedown": { - "modified": "2019-03-23T23:47:18.721Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/onmousemove": { - "modified": "2019-04-24T11:41:27.577Z", - "contributors": [ - "JyTosTT", - "fscholz", - "teoli", - "Hasilt", - "Priam", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/onmouseout": { - "modified": "2019-03-23T23:47:15.838Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/onmouseover": { - "modified": "2019-03-23T23:47:22.003Z", - "contributors": [ - "fscholz", - "teoli", - "mimzi_fahia", - "Mgjbot", - "Chbok" - ] - }, - "Web/API/GlobalEventHandlers/onmouseup": { - "modified": "2019-03-23T23:47:26.350Z", - "contributors": [ - "fscholz", - "teoli", - "mimzi_fahia", - "Chbok" - ] - }, - "Web/API/GlobalEventHandlers/onreset": { - "modified": "2019-03-18T21:35:42.230Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/GlobalEventHandlers/onresize": { - "modified": "2019-03-23T23:47:25.748Z", - "contributors": [ - "ArthurMaurer", - "fscholz", - "teoli", - "khalid32", - "Chbok" - ] - }, - "Web/API/GlobalEventHandlers/onscroll": { - "modified": "2019-03-23T23:49:06.629Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/GlobalEventHandlers/onselect": { - "modified": "2020-11-16T16:15:42.515Z", - "contributors": [ - "NemoNobobyPersonne", - "s6mon" - ] - }, - "Web/API/HTMLBRElement": { - "modified": "2019-03-23T23:30:24.531Z", - "contributors": [ - "teoli", - "khalid32", - "tregagnon" - ] - }, - "Web/API/HTMLBaseElement": { - "modified": "2019-11-23T18:10:52.263Z", - "contributors": [ - "regseb", - "Kalwyn" - ] - }, - "Web/API/HTMLBaseFontElement": { - "modified": "2020-10-15T22:35:14.285Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/HTMLBodyElement": { - "modified": "2019-04-19T13:59:15.144Z", - "contributors": [ - "SphinxKnight", - "jmh" - ] - }, - "Web/API/HTMLButtonElement": { - "modified": "2020-10-15T22:04:39.590Z", - "contributors": [ - "Voulto", - "dragon38800", - "fscholz" - ] - }, - "Web/API/HTMLButtonElement/labels": { - "modified": "2020-10-15T22:04:38.333Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/HTMLCanvasElement": { - "modified": "2019-03-23T23:28:23.922Z", - "contributors": [ - "wbamberg", - "khalid32", - "Delapouite", - "Bobo" - ] - }, - "Web/API/HTMLCanvasElement/getContext": { - "modified": "2019-03-23T22:11:53.953Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/HTMLCanvasElement/height": { - "modified": "2020-10-15T21:54:28.516Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/API/HTMLCollection": { - "modified": "2019-03-23T23:00:36.863Z", - "contributors": [ - "loella16", - "jean-pierre.gay", - "vava", - "Raison" - ] - }, - "Web/API/HTMLCollection/item": { - "modified": "2020-04-01T12:50:44.774Z", - "contributors": [ - "olivierdupon", - "OhNiice" - ] - }, - "Web/API/HTMLContentElement": { - "modified": "2019-03-23T22:32:17.762Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/HTMLContentElement/getDistributedNodes": { - "modified": "2019-03-18T20:46:56.376Z", - "contributors": [ - "dragon38800", - "nobe4" - ] - }, - "Web/API/HTMLContentElement/select": { - "modified": "2019-03-18T20:46:55.702Z", - "contributors": [ - "dragon38800", - "nobe4" - ] - }, - "Web/API/HTMLDialogElement": { - "modified": "2020-10-15T22:34:56.116Z", - "contributors": [ - "neoncitylights" - ] - }, - "Web/API/HTMLDialogElement/close_event": { - "modified": "2020-10-15T22:34:54.370Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/HTMLDivElement": { - "modified": "2020-10-15T21:40:05.712Z", - "contributors": [ - "SphinxKnight", - "dragon38800", - "jmh" - ] - }, - "Web/API/HTMLDocument": { - "modified": "2019-03-23T22:33:08.931Z", - "contributors": [ - "crica" - ] - }, - "Web/API/HTMLElement": { - "modified": "2019-03-23T23:30:24.040Z", - "contributors": [ - "AshfaqHossain", - "Jeremie", - "tregagnon" - ] - }, - "Web/API/HTMLElement/beforeinput_event": { - "modified": "2020-10-15T22:20:11.192Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/HTMLElement/change_event": { - "modified": "2020-10-15T21:34:35.319Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "fscholz", - "loella16", - "Kalwyn", - "karyngaudreau" - ] - }, - "Web/API/HTMLElement/click": { - "modified": "2019-03-23T23:47:15.393Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "BenoitL" - ] - }, - "Web/API/HTMLElement/contentEditable": { - "modified": "2019-03-23T22:15:40.936Z", - "contributors": [ - "loella16", - "ebear" - ] - }, - "Web/API/HTMLElement/dataset": { - "modified": "2020-10-15T21:37:22.950Z", - "contributors": [ - "abvll", - "P45QU10U", - "tburette", - "Hell_Carlito", - "Laurent_Lyaudet" - ] - }, - "Web/API/HTMLElement/dir": { - "modified": "2019-03-24T00:13:15.143Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "dextra", - "BenoitL" - ] - }, - "Web/API/HTMLElement/focus": { - "modified": "2019-10-10T16:45:54.605Z", - "contributors": [ - "HRobineau", - "a-mt", - "vava", - "fscholz", - "teoli", - "jsx", - "tregagnon", - "BenoitL" - ] - }, - "Web/API/HTMLElement/hidden": { - "modified": "2020-10-15T22:34:15.806Z", - "contributors": [ - "asgmeonerandom" - ] - }, - "Web/API/HTMLElement/input_event": { - "modified": "2019-04-17T07:33:49.618Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "loella16", - "Sebastianz", - "LoicPuchaux" - ] - }, - "Web/API/HTMLElement/isContentEditable": { - "modified": "2019-03-23T22:50:36.754Z", - "contributors": [ - "loella16", - "vava" - ] - }, - "Web/API/HTMLElement/lang": { - "modified": "2019-03-23T23:46:31.690Z", - "contributors": [ - "fscholz", - "teoli", - "AshfaqHossain", - "tregagnon", - "BenoitL" - ] - }, - "Web/API/HTMLElement/offsetHeight": { - "modified": "2019-03-24T00:05:55.047Z", - "contributors": [ - "vava", - "fscholz", - "teoli", - "jsx", - "AshfaqHossain", - "Julien STUBY", - "BenoitL" - ] - }, - "Web/API/HTMLElement/offsetLeft": { - "modified": "2019-03-23T23:47:14.986Z", - "contributors": [ - "fscholz", - "teoli", - "jsx", - "BenoitL" - ] - }, - "Web/API/HTMLElement/offsetParent": { - "modified": "2019-03-23T23:47:16.899Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/HTMLElement/offsetTop": { - "modified": "2019-03-23T23:47:50.209Z", - "contributors": [ - "nhoizey", - "fscholz", - "teoli", - "khalid32", - "cold sun", - "BenoitL" - ] - }, - "Web/API/HTMLElement/offsetWidth": { - "modified": "2019-03-23T23:47:15.232Z", - "contributors": [ - "vincent.tschanz", - "EmixMaxime", - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/HTMLElement/outerText": { - "modified": "2019-03-23T22:29:19.506Z", - "contributors": [ - "loella16", - "HereComesJuju" - ] - }, - "Web/API/HTMLElement/style": { - "modified": "2020-10-15T21:09:58.052Z", - "contributors": [ - "tristantheb", - "dominiquevilain", - "edspeedy", - "ebear", - "fscholz", - "teoli", - "xuancanh", - "Julien.stuby", - "BenoitL", - "Mgjbot", - "Takenbot" - ] - }, - "Web/API/HTMLElement/tabIndex": { - "modified": "2019-03-24T00:13:15.014Z", - "contributors": [ - "fscholz", - "khalid32", - "teoli", - "dextra", - "BenoitL" - ] - }, - "Web/API/HTMLElement/title": { - "modified": "2019-03-18T21:38:30.184Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/HTMLFormControlsCollection": { - "modified": "2020-10-15T22:04:38.234Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/HTMLFormElement": { - "modified": "2020-10-15T21:18:02.094Z", - "contributors": [ - "loella16", - "SphinxKnight", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/HTMLFormElement/acceptCharset": { - "modified": "2019-03-23T22:56:05.617Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/action": { - "modified": "2019-03-23T22:56:10.694Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/elements": { - "modified": "2019-03-23T22:56:07.279Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/encoding": { - "modified": "2019-03-23T22:56:05.939Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/enctype": { - "modified": "2019-03-23T22:56:06.183Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/length": { - "modified": "2019-03-23T22:56:03.752Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/method": { - "modified": "2019-03-23T22:56:06.732Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/name": { - "modified": "2019-03-23T22:56:01.559Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFormElement/reportValidity": { - "modified": "2020-10-15T22:15:18.266Z", - "contributors": [ - "dragon38800" - ] - }, - "Web/API/HTMLFormElement/reset": { - "modified": "2019-03-18T21:15:21.862Z", - "contributors": [ - "a-mt" - ] - }, - "Web/API/HTMLFormElement/submit": { - "modified": "2020-10-15T22:15:18.900Z", - "contributors": [ - "dragon38800" - ] - }, - "Web/API/HTMLFormElement/submit_event_": { - "modified": "2019-09-03T20:50:22.661Z", - "contributors": [ - "estelle", - "Watilin", - "fscholz", - "thbil" - ] - }, - "Web/API/HTMLFormElement/target": { - "modified": "2019-03-23T22:56:10.264Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLFrameSetElement": { - "modified": "2020-10-15T22:35:16.209Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/HTMLIFrameElement": { - "modified": "2019-07-30T13:28:00.924Z", - "contributors": [ - "thbil" - ] - }, - "Web/API/HTMLIFrameElement/contentWindow": { - "modified": "2020-10-15T21:42:29.039Z", - "contributors": [ - "SphinxKnight", - "loella16", - "benjaminW78" - ] - }, - "Web/API/HTMLIFrameElement/featurePolicy": { - "modified": "2020-11-12T09:04:15.995Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/HTMLImageElement": { - "modified": "2019-03-23T23:38:17.058Z", - "contributors": [ - "loella16", - "fscholz", - "khalid32", - "teoli", - "louuis", - "rm1720" - ] - }, - "Web/API/HTMLImageElement/Image": { - "modified": "2019-09-01T13:58:47.617Z", - "contributors": [ - "loella16", - "sztan" - ] - }, - "Web/API/HTMLInputElement": { - "modified": "2020-10-15T21:34:36.231Z", - "contributors": [ - "SphinxKnight", - "jpmedley" - ] - }, - "Web/API/HTMLInputElement/labels": { - "modified": "2020-10-15T22:04:38.251Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Web/API/HTMLMediaElement": { - "modified": "2020-10-15T21:50:41.898Z", - "contributors": [ - "AntoineJT", - "loella16", - "MrMargouillat" - ] - }, - "Web/API/HTMLMediaElement/abort_event": { - "modified": "2020-10-15T22:34:53.863Z", - "contributors": [ - "NEO_the-code" - ] - }, - "Web/API/HTMLMediaElement/canplay_event": { - "modified": "2019-03-18T20:49:26.215Z", - "contributors": [ - "estelle", - "fscholz", - "Kalwyn", - "Maxime-T" - ] - }, - "Web/API/HTMLMediaElement/canplaythrough_event": { - "modified": "2020-10-30T13:49:01.434Z", - "contributors": [ - "Sroucheray", - "estelle", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/HTMLMediaElement/captureStream": { - "modified": "2020-10-15T22:06:00.390Z", - "contributors": [ - "o0sh4d0w0o" - ] - }, - "Web/API/HTMLMediaElement/durationchange_event": { - "modified": "2019-03-18T20:49:29.267Z", - "contributors": [ - "estelle", - "fscholz", - "Kalwyn", - "BobyTT" - ] - }, - "Web/API/HTMLMediaElement/emptied_event": { - "modified": "2019-03-18T20:49:29.095Z", - "contributors": [ - "estelle", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/HTMLMediaElement/ended_event": { - "modified": "2019-03-18T20:49:28.930Z", - "contributors": [ - "estelle", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/HTMLMediaElement/play": { - "modified": "2019-03-18T21:39:19.899Z", - "contributors": [ - "3dos" - ] - }, - "Web/API/HTMLMediaElement/volume": { - "modified": "2020-10-15T22:22:12.837Z", - "contributors": [ - "Mars073" - ] - }, - "Web/API/HTMLOptionElement": { - "modified": "2019-03-23T23:28:20.044Z", - "contributors": [ - "khalid32", - "MedB" - ] - }, - "Web/API/HTMLOptionElement/Option": { - "modified": "2019-11-18T08:34:34.768Z", - "contributors": [ - "SphinxKnight", - "Jmarin" - ] - }, - "Web/API/HTMLQuoteElement": { - "modified": "2019-03-23T23:30:25.216Z", - "contributors": [ - "teoli", - "khalid32", - "tregagnon" - ] - }, - "Web/API/HTMLSelectElement": { - "modified": "2019-03-23T22:50:52.276Z", - "contributors": [ - "Jean-MariePETIT", - "tinou98" - ] - }, - "Web/API/HTMLSelectElement/remove": { - "modified": "2019-03-23T22:45:22.256Z", - "contributors": [ - "Jean-MariePETIT" - ] - }, - "Web/API/HTMLSelectElement/selectedIndex": { - "modified": "2020-10-15T22:10:16.178Z", - "contributors": [ - "Watilin", - "Bpruneau" - ] - }, - "Web/API/HTMLSelectElement/setCustomValidity": { - "modified": "2019-04-22T04:45:00.486Z", - "contributors": [ - "kenavoloic", - "v-Stein" - ] - }, - "Web/API/HTMLShadowElement": { - "modified": "2019-03-23T22:32:10.748Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/HTMLSpanElement": { - "modified": "2019-03-23T23:30:40.037Z", - "contributors": [ - "teoli", - "khalid32", - "tregagnon" - ] - }, - "Web/API/HTMLStyleElement": { - "modified": "2019-03-23T23:45:30.418Z", - "contributors": [ - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/HTMLTableCellElement": { - "modified": "2019-03-23T22:22:55.497Z", - "contributors": [ - "Copen" - ] - }, - "Web/API/HTMLTableElement": { - "modified": "2019-03-23T23:46:08.570Z", - "contributors": [ - "teoli", - "jsx", - "ethertank", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/HTMLTableElement/caption": { - "modified": "2019-03-23T23:45:21.628Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Chbok", - "Marcolive" - ] - }, - "Web/API/HTMLTableElement/insertRow": { - "modified": "2019-03-23T23:31:04.505Z", - "contributors": [ - "WeWantMiles", - "NemoNobobyPersonne", - "fscholz", - "teoli", - "AshfaqHossain", - "Restimel" - ] - }, - "Web/API/HTMLTableRowElement": { - "modified": "2020-10-15T22:17:56.178Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/HTMLTableRowElement/insertCell": { - "modified": "2020-10-15T22:17:56.662Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/HTMLTimeElement": { - "modified": "2020-10-15T22:21:35.210Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/HTMLTimeElement/dateTime": { - "modified": "2020-10-15T22:21:37.221Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/HTMLUnknownElement": { - "modified": "2020-10-15T22:17:58.810Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/HTMLVideoElement": { - "modified": "2020-10-15T22:28:40.533Z", - "contributors": [ - "SphinxKnight", - "maudsefo" - ] - }, - "Web/API/Headers": { - "modified": "2020-10-15T22:21:38.336Z", - "contributors": [ - "robin850", - "Torzivalds" - ] - }, - "Web/API/History": { - "modified": "2019-03-23T23:10:25.221Z", - "contributors": [ - "DavidLibeau", - "remi_grumeau" - ] - }, - "Web/API/History/length": { - "modified": "2020-10-15T22:28:26.926Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/IDBCursor": { - "modified": "2019-03-23T22:34:39.578Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBCursor/advance": { - "modified": "2019-03-23T22:34:38.198Z", - "contributors": [ - "perrinjerome", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBCursor/continue": { - "modified": "2019-03-23T22:34:31.664Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase": { - "modified": "2019-03-23T22:31:18.316Z", - "contributors": [ - "v-Stein", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/close": { - "modified": "2019-03-23T22:31:11.263Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/createObjectStore": { - "modified": "2019-03-23T22:31:16.639Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/deleteObjectStore": { - "modified": "2019-03-23T22:31:14.248Z", - "contributors": [ - "christophe.hurpeau", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/name": { - "modified": "2019-03-23T22:31:09.217Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/objectStoreNames": { - "modified": "2019-03-23T22:31:09.388Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/onabort": { - "modified": "2019-03-23T22:31:09.551Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/onerror": { - "modified": "2019-03-23T22:31:08.731Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/onversionchange": { - "modified": "2019-03-23T22:30:58.851Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBDatabase/transaction": { - "modified": "2019-03-23T22:31:19.784Z", - "contributors": [ - "P45QU10U", - "gadgino" - ] - }, - "Web/API/IDBDatabase/version": { - "modified": "2020-10-15T21:47:11.268Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBEnvironment": { - "modified": "2020-10-15T21:45:39.502Z", - "contributors": [ - "loella16", - "SphinxKnight", - "gadgino", - "Brettz9" - ] - }, - "Web/API/IDBFactory": { - "modified": "2020-10-15T21:45:40.483Z", - "contributors": [ - "bershanskiy", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBFactory/cmp": { - "modified": "2019-03-23T22:34:32.314Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBFactory/deleteDatabase": { - "modified": "2019-03-23T22:34:37.176Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBFactory/open": { - "modified": "2020-10-15T21:45:42.009Z", - "contributors": [ - "Watilin", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex": { - "modified": "2020-09-12T05:13:55.776Z", - "contributors": [ - "Voulto", - "GhislainPhu", - "gadgino", - "jpmedley" - ] - }, - "Web/API/IDBIndex/count": { - "modified": "2019-03-23T22:30:43.317Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex/get": { - "modified": "2019-03-18T21:17:42.033Z", - "contributors": [ - "AdeLyneBD", - "gadgino" - ] - }, - "Web/API/IDBIndex/getAll": { - "modified": "2020-10-15T21:47:29.237Z", - "contributors": [ - "SphinxKnight", - "AdeLyneBD", - "gadgino" - ] - }, - "Web/API/IDBIndex/getAllKeys": { - "modified": "2020-10-15T21:47:28.678Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex/getKey": { - "modified": "2019-03-23T22:30:30.773Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex/isAutoLocale": { - "modified": "2020-10-15T21:47:13.856Z", - "contributors": [ - "SphinxKnight", - "teoli", - "gadgino" - ] - }, - "Web/API/IDBIndex/keyPath": { - "modified": "2019-03-23T22:30:52.686Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBIndex/locale": { - "modified": "2019-03-23T22:30:44.660Z", - "contributors": [ - "teoli", - "gadgino" - ] - }, - "Web/API/IDBIndex/multiEntry": { - "modified": "2019-03-23T22:30:48.807Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex/name": { - "modified": "2019-03-23T22:30:41.544Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex/objectStore": { - "modified": "2019-03-23T22:30:48.435Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBIndex/openCursor": { - "modified": "2019-03-23T22:30:31.037Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex/openKeyCursor": { - "modified": "2019-03-23T22:30:32.594Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBIndex/unique": { - "modified": "2019-03-23T22:30:45.150Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange": { - "modified": "2020-10-15T21:46:17.358Z", - "contributors": [ - "Voulto", - "SphinxKnight", - "gadgino", - "Goofy", - "jpmedley" - ] - }, - "Web/API/IDBKeyRange/bound": { - "modified": "2019-03-23T22:33:04.699Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/includes": { - "modified": "2019-03-23T22:33:05.590Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/lower": { - "modified": "2019-03-23T22:33:04.885Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/lowerBound": { - "modified": "2019-03-23T22:33:05.216Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/lowerOpen": { - "modified": "2019-03-23T22:32:57.950Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/only": { - "modified": "2019-03-23T22:33:01.396Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/upper": { - "modified": "2019-03-23T22:33:10.697Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/upperBound": { - "modified": "2019-03-23T22:33:21.510Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBKeyRange/upperOpen": { - "modified": "2019-03-23T22:32:58.450Z", - "contributors": [ - "Hell_Carlito", - "gadgino" - ] - }, - "Web/API/IDBObjectStore": { - "modified": "2019-03-23T22:34:11.877Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBObjectStore/add": { - "modified": "2019-03-23T22:34:09.726Z", - "contributors": [ - "perrinjerome", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/autoIncrement": { - "modified": "2019-03-23T22:34:10.196Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBObjectStore/clear": { - "modified": "2019-03-23T22:34:03.069Z", - "contributors": [ - "doppelganger9", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/count": { - "modified": "2019-03-23T22:34:13.752Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/createIndex": { - "modified": "2019-03-23T22:34:07.900Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBObjectStore/delete": { - "modified": "2019-03-23T22:33:59.327Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/deleteIndex": { - "modified": "2019-03-23T22:33:53.159Z", - "contributors": [ - "AdeLyneBD", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/get": { - "modified": "2019-03-23T22:33:58.671Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBObjectStore/getAll": { - "modified": "2019-05-06T07:04:02.783Z", - "contributors": [ - "Helfics", - "Thomas-Tonneau", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/getAllKeys": { - "modified": "2019-03-23T22:33:43.424Z", - "contributors": [ - "Nothus", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/getKey": { - "modified": "2019-03-23T22:11:20.472Z", - "contributors": [ - "Nothus", - "julienw" - ] - }, - "Web/API/IDBObjectStore/index": { - "modified": "2019-03-23T22:33:52.521Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/indexNames": { - "modified": "2019-03-23T22:34:04.202Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/keyPath": { - "modified": "2019-03-23T22:34:05.962Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/name": { - "modified": "2019-03-23T22:34:05.656Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/openCursor": { - "modified": "2019-03-23T22:33:43.786Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/openKeyCursor": { - "modified": "2019-03-23T22:33:39.850Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/put": { - "modified": "2019-03-23T22:33:30.943Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBObjectStore/transaction": { - "modified": "2019-03-23T22:34:04.872Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBOpenDBRequest": { - "modified": "2019-03-23T22:14:30.384Z", - "contributors": [ - "loella16", - "Enigma-42" - ] - }, - "Web/API/IDBRequest": { - "modified": "2020-10-15T21:45:42.565Z", - "contributors": [ - "Voulto", - "Arzak656", - "gadgino", - "inexorabletash" - ] - }, - "Web/API/IDBRequest/blocked_event": { - "modified": "2019-03-23T22:00:21.621Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/IDBRequest/error": { - "modified": "2019-03-23T22:34:15.414Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBRequest/onerror": { - "modified": "2019-03-23T22:34:16.420Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBRequest/onsuccess": { - "modified": "2019-03-23T22:34:17.762Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBRequest/readyState": { - "modified": "2019-03-23T22:34:18.824Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBRequest/result": { - "modified": "2019-03-23T22:34:18.616Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBRequest/source": { - "modified": "2019-03-23T22:34:18.295Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBRequest/transaction": { - "modified": "2019-03-23T22:34:14.676Z", - "contributors": [ - "gadgino" - ] - }, - "Web/API/IDBTransaction": { - "modified": "2019-03-23T22:34:48.048Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/ObjectStoreNames": { - "modified": "2019-03-23T22:34:33.787Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/abort": { - "modified": "2019-03-23T22:34:40.971Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/abort_event": { - "modified": "2019-03-23T22:00:21.766Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/IDBTransaction/complete_event": { - "modified": "2019-03-23T22:00:21.434Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/IDBTransaction/db": { - "modified": "2019-03-23T22:34:41.582Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/error": { - "modified": "2019-03-23T22:34:37.959Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/mode": { - "modified": "2019-03-23T22:34:37.380Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/objectStore": { - "modified": "2019-03-23T22:34:32.499Z", - "contributors": [ - "Faontetard", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/onabort": { - "modified": "2019-03-23T22:34:39.344Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/oncomplete": { - "modified": "2019-03-23T22:34:31.462Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/IDBTransaction/onerror": { - "modified": "2019-03-23T22:34:27.556Z", - "contributors": [ - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/ImageData": { - "modified": "2020-10-15T21:29:16.846Z", - "contributors": [ - "SphinxKnight", - "loella16", - "fscholz", - "Sandyl" - ] - }, - "Web/API/ImageData/data": { - "modified": "2020-10-15T22:05:57.237Z", - "contributors": [ - "adrienbecker" - ] - }, - "Web/API/InputEvent": { - "modified": "2020-10-15T22:20:10.431Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/IntersectionObserver": { - "modified": "2020-10-15T22:10:55.790Z", - "contributors": [ - "JNa0", - "lotfire24" - ] - }, - "Web/API/IntersectionObserver/IntersectionObserver": { - "modified": "2020-10-15T22:12:46.597Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/IntersectionObserver/observe": { - "modified": "2020-10-15T22:12:46.281Z", - "contributors": [ - "SphinxKnight", - "nicolas-t", - "JNa0" - ] - }, - "Web/API/IntersectionObserver/root": { - "modified": "2020-10-15T22:11:03.625Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/IntersectionObserver/rootMargin": { - "modified": "2020-10-15T22:11:13.398Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/IntersectionObserver/thresholds": { - "modified": "2020-10-15T22:12:45.071Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/IntersectionObserver/unobserve": { - "modified": "2020-10-15T22:12:46.323Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/IntersectionObserverEntry": { - "modified": "2020-10-15T22:11:13.890Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/IntersectionObserverEntry/target": { - "modified": "2020-10-15T22:11:14.373Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/Intersection_Observer_API": { - "modified": "2019-05-02T10:59:37.478Z", - "contributors": [ - "JNa0", - "SphinxKnight", - "baptistecolin", - "Marc.V" - ] - }, - "Web/API/KeyboardEvent": { - "modified": "2020-10-15T21:36:30.379Z", - "contributors": [ - "fscholz", - "wbamberg", - "loella16", - "NemoNobobyPersonne", - "jean-pierre.gay", - "Gibus", - "mikemaccana" - ] - }, - "Web/API/KeyboardEvent/KeyboardEvent": { - "modified": "2020-10-15T21:36:29.697Z", - "contributors": [ - "loella16", - "fuzeKlown", - "B_M" - ] - }, - "Web/API/KeyboardEvent/charCode": { - "modified": "2020-10-15T21:56:28.108Z", - "contributors": [ - "Lucas-C", - "loella16", - "ManuelEdao" - ] - }, - "Web/API/KeyboardEvent/code": { - "modified": "2020-10-15T22:17:28.552Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "NoxFly" - ] - }, - "Web/API/KeyboardEvent/key": { - "modified": "2020-10-15T21:45:49.321Z", - "contributors": [ - "tristantheb", - "Jeremie", - "loella16", - "P45QU10U" - ] - }, - "Web/API/KeyboardEvent/key/Key_Values": { - "modified": "2020-04-20T11:30:29.100Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/LocalFileSystem": { - "modified": "2020-11-02T04:24:20.566Z", - "contributors": [ - "SphinxKnight", - "roxaneprovost" - ] - }, - "Web/API/Location": { - "modified": "2020-10-15T21:27:50.600Z", - "contributors": [ - "Arzak656", - "NacimHarfouche", - "Goofy", - "Watilin" - ] - }, - "Web/API/Location/assign": { - "modified": "2020-10-15T21:27:45.542Z", - "contributors": [ - "Arzak656", - "fscholz", - "Watilin" - ] - }, - "Web/API/Location/reload": { - "modified": "2020-11-18T15:46:55.367Z", - "contributors": [ - "Arzak656", - "fscholz", - "teoli", - "Watilin" - ] - }, - "Web/API/Location/replace": { - "modified": "2019-03-23T23:15:34.708Z", - "contributors": [ - "fscholz", - "Watilin" - ] - }, - "Web/API/MediaDevices": { - "modified": "2020-10-15T21:39:57.500Z", - "contributors": [ - "Voulto", - "tristantheb", - "jpmedley" - ] - }, - "Web/API/MediaDevices/getUserMedia": { - "modified": "2019-03-23T22:10:09.687Z", - "contributors": [ - "SoufianeLasri", - "DonBeny" - ] - }, - "Web/API/MediaSource": { - "modified": "2020-10-15T22:24:17.807Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/MediaSource/MediaSource": { - "modified": "2020-10-15T22:24:16.976Z", - "contributors": [ - "nowlow" - ] - }, - "Web/API/MediaStream": { - "modified": "2019-03-23T23:24:56.798Z", - "contributors": [ - "fscholz", - "AbrahamT" - ] - }, - "Web/API/MediaStreamAudioSourceNode": { - "modified": "2019-03-23T22:22:16.693Z", - "contributors": [ - "marie-ototoi", - "Nek-" - ] - }, - "Web/API/MediaStreamEvent": { - "modified": "2020-10-22T05:56:07.167Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/MessageEvent": { - "modified": "2019-03-23T22:37:35.554Z", - "contributors": [ - "AClavijo", - "Nothus" - ] - }, - "Web/API/MouseEvent": { - "modified": "2019-03-23T23:09:55.683Z", - "contributors": [ - "loella16", - "Sebastianz", - "Jean-MariePETIT", - "julienw", - "AlainRinder", - "kipcode66" - ] - }, - "Web/API/MouseEvent/offsetX": { - "modified": "2019-03-23T22:01:19.710Z", - "contributors": [ - "shezard", - "imhaage" - ] - }, - "Web/API/MouseEvent/offsetY": { - "modified": "2019-03-23T22:01:15.982Z", - "contributors": [ - "imhaage" - ] - }, - "Web/API/MutationObserver": { - "modified": "2019-03-23T23:04:58.339Z", - "contributors": [ - "loella16", - "cedeber", - "Watilin", - "Goofy", - "jucrouzet", - "gregoryRednet", - "Melkior" - ] - }, - "Web/API/NameList": { - "modified": "2020-10-13T11:05:39.955Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/NamedNodeMap": { - "modified": "2019-03-23T22:39:49.395Z", - "contributors": [ - "SphinxKnight", - "Puxarnal", - "Dexter_Deter" - ] - }, - "Web/API/Navigator": { - "modified": "2019-03-23T23:01:28.541Z", - "contributors": [ - "loella16", - "v-Stein", - "unpeudetout", - "EnzDev", - "fscholz" - ] - }, - "Web/API/Navigator/battery": { - "modified": "2019-03-23T23:37:50.722Z", - "contributors": [ - "Perraudeau", - "fscholz", - "khalid32", - "Florent_ATo" - ] - }, - "Web/API/Navigator/connection": { - "modified": "2019-03-23T22:11:57.924Z", - "contributors": [ - "loella16", - "fsenat" - ] - }, - "Web/API/Navigator/cookieEnabled": { - "modified": "2020-10-15T22:13:20.569Z", - "contributors": [ - "bloblga" - ] - }, - "Web/API/Navigator/credentials": { - "modified": "2020-10-15T22:15:44.720Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/Navigator/doNotTrack": { - "modified": "2019-03-23T23:15:47.123Z", - "contributors": [ - "loella16", - "fscholz", - "khalid32", - "T2A5H1A1" - ] - }, - "Web/API/Navigator/geolocation": { - "modified": "2019-03-23T22:26:18.567Z", - "contributors": [ - "Goofy", - "Lornkor" - ] - }, - "Web/API/Navigator/getGamepads": { - "modified": "2020-10-15T21:31:17.970Z", - "contributors": [ - "Arzak656", - "fscholz", - "matteodelabre" - ] - }, - "Web/API/Navigator/mozIsLocallyAvailable": { - "modified": "2019-03-23T23:52:20.754Z", - "contributors": [ - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Navigator/registerProtocolHandler": { - "modified": "2019-03-23T23:52:04.757Z", - "contributors": [ - "Fluorinx", - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Mgjbot" - ] - }, - "Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers": { - "modified": "2019-03-23T23:58:55.939Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "tregagnon", - "muffinchoco", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Navigator/sendBeacon": { - "modified": "2020-10-15T21:52:49.634Z", - "contributors": [ - "ylerjen", - "regseb", - "fireyoshiqc" - ] - }, - "Web/API/Navigator/serviceWorker": { - "modified": "2019-03-23T22:46:34.715Z", - "contributors": [ - "mazoutzecat", - "isac83" - ] - }, - "Web/API/Navigator/share": { - "modified": "2020-10-15T22:19:51.304Z", - "contributors": [ - "antoinerousseau", - "AlexisColin" - ] - }, - "Web/API/Navigator/vibrate": { - "modified": "2020-10-15T22:22:06.618Z", - "contributors": [ - "nboisteault", - "Arzak656" - ] - }, - "Web/API/NavigatorLanguage": { - "modified": "2020-11-13T08:13:18.543Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/NavigatorLanguage/language": { - "modified": "2020-11-13T09:34:12.937Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/NavigatorLanguage/languages": { - "modified": "2020-11-13T11:23:05.443Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/NavigatorOnLine": { - "modified": "2020-10-15T21:33:01.047Z", - "contributors": [ - "Arzak656", - "fscholz" - ] - }, - "Web/API/NavigatorOnLine/onLine": { - "modified": "2020-10-15T21:16:47.165Z", - "contributors": [ - "tomderudder", - "thibaultboursier", - "nicodel", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/NavigatorOnLine/Évènements_online_et_offline": { - "modified": "2019-03-23T23:53:02.447Z", - "contributors": [ - "Suriteka", - "chrisdavidmills", - "BenoitL", - "Mgjbot" - ] - }, - "Web/API/NavigatorStorage": { - "modified": "2020-10-15T22:17:55.760Z" - }, - "Web/API/NavigatorStorage/storage": { - "modified": "2020-10-15T22:17:55.620Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Node": { - "modified": "2020-11-10T19:53:04.820Z", - "contributors": [ - "JNa0", - "loella16", - "3dos", - "SphinxKnight", - "Hell_Carlito", - "teoli", - "jsx", - "tregagnon", - "Julien.stuby" - ] - }, - "Web/API/Node/appendChild": { - "modified": "2019-04-19T11:04:07.094Z", - "contributors": [ - "dhb33", - "loella16", - "gpenissard", - "P45QU10U", - "fscholz", - "teoli", - "khalid32", - "oooo", - "Jeremie", - "Shikiryu", - "Julien STUBY", - "Mgjbot", - "Chbok", - "ErgoUser", - "BenoitL", - "Takenbot" - ] - }, - "Web/API/Node/baseURI": { - "modified": "2019-03-18T21:40:03.713Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/baseURIObject": { - "modified": "2020-10-15T22:02:08.284Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/childNodes": { - "modified": "2020-10-15T21:13:37.347Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "time132", - "Julien STUBY", - "BenoitL", - "Mgjbot", - "Takenbot", - "GT" - ] - }, - "Web/API/Node/cloneNode": { - "modified": "2019-03-23T23:49:43.842Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "jsx", - "Twistede", - "Mgjbot", - "BenoitL", - "Fredchat", - "Celelibi" - ] - }, - "Web/API/Node/compareDocumentPosition": { - "modified": "2019-03-18T21:40:11.785Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/contains": { - "modified": "2019-03-23T23:10:58.748Z", - "contributors": [ - "loella16", - "vava", - "fscholz", - "AshfaqHossain", - "R_403" - ] - }, - "Web/API/Node/firstChild": { - "modified": "2020-10-15T21:15:37.706Z", - "contributors": [ - "Eric-ciccotti", - "loella16", - "fscholz", - "AshfaqHossain", - "Sheppy", - "Mgjbot", - "BenoitL", - "Takenbot" - ] - }, - "Web/API/Node/getRootNode": { - "modified": "2020-10-15T22:02:10.046Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/getUserData": { - "modified": "2019-03-18T21:40:10.400Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/hasChildNodes": { - "modified": "2019-03-23T23:54:17.372Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Fredchat", - "Celelibi" - ] - }, - "Web/API/Node/innerText": { - "modified": "2020-10-15T21:45:59.327Z", - "contributors": [ - "loella16", - "Watilin", - "kodliber", - "lansanasylla" - ] - }, - "Web/API/Node/insertBefore": { - "modified": "2019-03-23T23:59:37.542Z", - "contributors": [ - "loella16", - "trebly", - "fscholz", - "teoli", - "Hasilt", - "tregagnon", - "Julien.stuby", - "Mgjbot", - "BenoitL", - "Cerbere13" - ] - }, - "Web/API/Node/isConnected": { - "modified": "2020-10-15T22:02:12.631Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/isDefaultNamespace": { - "modified": "2019-03-18T21:40:10.800Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/isEqualNode": { - "modified": "2019-03-23T22:54:52.633Z", - "contributors": [ - "loella16", - "mjeanroy" - ] - }, - "Web/API/Node/isSameNode": { - "modified": "2019-03-18T21:39:55.776Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/isSupported": { - "modified": "2019-03-18T21:15:15.385Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "jsx", - "BenoitL" - ] - }, - "Web/API/Node/lastChild": { - "modified": "2020-10-15T21:15:08.719Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "mimzi_fahia", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Node/localName": { - "modified": "2020-10-15T21:17:55.986Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/Node/lookupNamespaceURI": { - "modified": "2019-03-18T21:39:45.898Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/lookupPrefix": { - "modified": "2019-03-18T21:40:12.652Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/namespaceURI": { - "modified": "2020-10-15T21:17:54.747Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "khalid32", - "BenoitL" - ] - }, - "Web/API/Node/nextSibling": { - "modified": "2020-10-15T21:15:37.751Z", - "contributors": [ - "wbamberg", - "loella16", - "fscholz", - "AshfaqHossain", - "Sheppy", - "Mgjbot", - "BenoitL", - "Pitoutompoilu", - "Takenbot" - ] - }, - "Web/API/Node/nodeName": { - "modified": "2020-10-15T21:16:21.067Z", - "contributors": [ - "loella16", - "mparisot", - "fscholz", - "teoli", - "jsx", - "AshfaqHossain", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Node/nodePrincipal": { - "modified": "2020-10-15T22:02:08.674Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/nodeType": { - "modified": "2020-10-15T21:16:45.416Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "arunpandianp", - "ethertank", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Node/nodeValue": { - "modified": "2020-10-15T21:09:31.818Z", - "contributors": [ - "loella16", - "fscholz", - "jsx", - "teoli", - "dextra", - "BenoitL", - "Kamel" - ] - }, - "Web/API/Node/normalize": { - "modified": "2019-03-23T23:47:18.882Z", - "contributors": [ - "Watilin", - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Fredchat" - ] - }, - "Web/API/Node/ownerDocument": { - "modified": "2020-10-15T21:15:33.193Z", - "contributors": [ - "loella16", - "fscholz", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Node/parentElement": { - "modified": "2020-10-15T21:34:10.422Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "CLEm", - "Goofy", - "Eyelock" - ] - }, - "Web/API/Node/parentNode": { - "modified": "2020-10-15T21:15:23.433Z", - "contributors": [ - "mickro", - "loella16", - "vava", - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Node/prefix": { - "modified": "2020-10-15T21:17:23.469Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "soumya", - "BenoitL" - ] - }, - "Web/API/Node/previousSibling": { - "modified": "2020-10-15T21:15:38.177Z", - "contributors": [ - "wbamberg", - "loella16", - "fscholz", - "jsx", - "Sheppy", - "Mgjbot", - "BenoitL", - "Pitoutompoilu" - ] - }, - "Web/API/Node/removeChild": { - "modified": "2019-05-05T22:02:06.657Z", - "contributors": [ - "loella16", - "Hell_Carlito", - "Copen", - "antmout", - "fscholz", - "teoli", - "khalid32", - "Julien STUBY", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Node/replaceChild": { - "modified": "2019-03-23T23:54:19.719Z", - "contributors": [ - "loella16", - "lexoyo", - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL", - "Fredchat", - "Celelibi" - ] - }, - "Web/API/Node/rootNode": { - "modified": "2020-10-15T22:02:08.977Z", - "contributors": [ - "wbamberg", - "loella16" - ] - }, - "Web/API/Node/setUserData": { - "modified": "2019-03-18T21:39:40.470Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Node/textContent": { - "modified": "2020-10-15T21:17:31.045Z", - "contributors": [ - "loella16", - "fscholz", - "teoli", - "Etienne_WATTEBLED", - "khalid32", - "Delapouite", - "BenoitL" - ] - }, - "Web/API/NodeFilter": { - "modified": "2020-10-15T22:02:05.638Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeFilter/acceptNode": { - "modified": "2020-10-15T22:02:05.206Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator": { - "modified": "2019-03-18T21:40:15.210Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/detach": { - "modified": "2020-10-15T22:02:07.225Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/expandEntityReferences": { - "modified": "2020-10-15T22:02:07.409Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/filter": { - "modified": "2020-10-15T22:02:07.204Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/nextNode": { - "modified": "2020-10-15T22:02:07.539Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/pointerBeforeReferenceNode": { - "modified": "2020-10-15T22:02:09.377Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/previousNode": { - "modified": "2020-10-15T22:02:08.258Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/referenceNode": { - "modified": "2020-10-15T22:02:07.308Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/root": { - "modified": "2020-10-15T22:02:05.574Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeIterator/whatToShow": { - "modified": "2020-10-15T22:02:06.711Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeList": { - "modified": "2019-03-23T22:57:59.165Z", - "contributors": [ - "madarche", - "loella16", - "uniqid", - "Fredchat", - "taorepoara" - ] - }, - "Web/API/NodeList/entries": { - "modified": "2020-10-15T22:02:16.295Z", - "contributors": [ - "edspeedy", - "loella16" - ] - }, - "Web/API/NodeList/forEach": { - "modified": "2020-10-15T22:02:31.449Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeList/item": { - "modified": "2020-10-15T22:02:18.906Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeList/keys": { - "modified": "2020-10-15T22:02:31.309Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeList/length": { - "modified": "2020-10-15T22:02:17.633Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NodeList/values": { - "modified": "2020-10-15T22:02:32.815Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Notation": { - "modified": "2019-03-18T21:40:13.820Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/NotificationEvent": { - "modified": "2020-09-27T20:47:13.129Z", - "contributors": [ - "SphinxKnight", - "dzlabs" - ] - }, - "Web/API/Notifications_API": { - "modified": "2020-10-15T22:34:42.573Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/NotifyAudioAvailableEvent": { - "modified": "2020-10-13T11:44:03.313Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/OffscreenCanvas": { - "modified": "2019-03-18T21:46:24.440Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/OscillatorNode": { - "modified": "2019-03-23T22:53:15.413Z", - "contributors": [ - "marie-ototoi", - "kbeaulieu", - "Goofy", - "fscholz", - "Poyoman39" - ] - }, - "Web/API/PageTransitionEvent": { - "modified": "2019-03-23T22:48:09.437Z", - "contributors": [ - "Watilin", - "ashnet" - ] - }, - "Web/API/Page_Visibility_API": { - "modified": "2019-03-23T22:01:56.477Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/ParentNode": { - "modified": "2020-10-15T21:33:02.872Z", - "contributors": [ - "abvll", - "loella16", - "fscholz" - ] - }, - "Web/API/ParentNode/append": { - "modified": "2020-10-15T21:59:23.058Z", - "contributors": [ - "Yukulele.", - "Watilin", - "ayshiff" - ] - }, - "Web/API/ParentNode/childElementCount": { - "modified": "2020-10-15T21:37:50.913Z", - "contributors": [ - "abvll", - "loella16", - "xavierartot", - "vava" - ] - }, - "Web/API/ParentNode/children": { - "modified": "2020-10-15T21:43:07.206Z", - "contributors": [ - "Arzak656", - "jMoulis", - "loella16", - "NemoNobobyPersonne", - "xavierartot" - ] - }, - "Web/API/ParentNode/firstElementChild": { - "modified": "2019-03-23T23:35:50.443Z", - "contributors": [ - "pdonias", - "fscholz", - "teoli", - "khalid32", - "Delapouite", - "Beaver" - ] - }, - "Web/API/ParentNode/lastElementChild": { - "modified": "2019-03-18T21:39:15.409Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/ParentNode/prepend": { - "modified": "2020-10-15T22:02:32.998Z", - "contributors": [ - "Yukulele.", - "Seblor", - "loella16" - ] - }, - "Web/API/ParentNode/querySelector": { - "modified": "2020-10-15T22:30:52.578Z", - "contributors": [ - "NeaVy" - ] - }, - "Web/API/ParentNode/querySelectorAll": { - "modified": "2020-10-15T22:02:32.472Z", - "contributors": [ - "abvll", - "loella16" - ] - }, - "Web/API/PasswordCredential": { - "modified": "2020-10-15T22:15:37.555Z", - "contributors": [ - "SphinxKnight", - "fscholz" - ] - }, - "Web/API/PasswordCredential/PasswordCredential": { - "modified": "2020-10-15T22:15:43.158Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/PasswordCredential/additionalData": { - "modified": "2020-10-15T22:15:45.161Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/PasswordCredential/iconURL": { - "modified": "2020-10-15T22:15:45.183Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/PasswordCredential/idName": { - "modified": "2020-10-15T22:15:37.132Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/PasswordCredential/name": { - "modified": "2020-10-15T22:15:42.939Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/PasswordCredential/password": { - "modified": "2020-10-15T22:15:44.068Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/PasswordCredential/passwordName": { - "modified": "2020-10-15T22:15:42.960Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/Payment_Request_API": { - "modified": "2020-10-15T22:20:45.922Z", - "contributors": [ - "codingk8" - ] - }, - "Web/API/Performance": { - "modified": "2020-10-15T21:33:03.900Z", - "contributors": [ - "cdoublev", - "fscholz", - "maeljirari" - ] - }, - "Web/API/Performance/navigation": { - "modified": "2020-10-15T22:03:54.846Z", - "contributors": [ - "fscholz", - "maeljirari" - ] - }, - "Web/API/Performance/now": { - "modified": "2020-10-15T21:27:41.866Z", - "contributors": [ - "Watilin", - "NemoNobobyPersonne", - "fscholz", - "Goofy", - "ilaborie" - ] - }, - "Web/API/PeriodicWave": { - "modified": "2020-10-15T22:09:54.557Z", - "contributors": [ - "SphinxKnight", - "JNa0", - "simdax" - ] - }, - "Web/API/Permissions_API": { - "modified": "2020-10-15T22:21:53.625Z", - "contributors": [ - "lp177" - ] - }, - "Web/API/Plugin": { - "modified": "2019-03-18T21:43:51.138Z", - "contributors": [ - "ayshiff" - ] - }, - "Web/API/PointerEvent": { - "modified": "2020-10-15T22:17:19.185Z", - "contributors": [ - "brunostasse", - "cdoublev" - ] - }, - "Web/API/Pointer_events": { - "modified": "2020-11-02T15:44:40.619Z", - "contributors": [ - "lephemere", - "a-mt", - "davidhbrown" - ] - }, - "Web/API/Pointer_events/gestes_pincer_zoom": { - "modified": "2019-03-23T22:13:16.101Z", - "contributors": [ - "a-mt", - "insomniaqc" - ] - }, - "Web/API/PositionOptions": { - "modified": "2019-08-26T09:46:33.509Z", - "contributors": [ - "ReinWired", - "guizmo51", - "JeanLucB" - ] - }, - "Web/API/PositionOptions/enableHighAccuracy": { - "modified": "2019-03-18T21:37:11.224Z", - "contributors": [ - "JeanLucB" - ] - }, - "Web/API/PositionOptions/maximumAge": { - "modified": "2019-03-18T21:37:16.913Z", - "contributors": [ - "JeanLucB" - ] - }, - "Web/API/PositionOptions/timeout": { - "modified": "2020-10-15T22:03:34.783Z", - "contributors": [ - "Arzak656", - "JeanLucB" - ] - }, - "Web/API/ProcessingInstruction": { - "modified": "2019-03-18T21:40:23.342Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/PublicKeyCredential": { - "modified": "2020-10-15T22:15:37.633Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/PushEvent": { - "modified": "2019-03-18T21:17:31.867Z", - "contributors": [ - "Hell_Carlito", - "JeffD" - ] - }, - "Web/API/Push_API": { - "modified": "2020-10-15T21:44:48.386Z", - "contributors": [ - "tristantheb", - "Hell_Carlito", - "nicolashenry", - "JeffD" - ] - }, - "Web/API/RTCIceServer": { - "modified": "2020-09-12T07:23:54.439Z", - "contributors": [ - "MisterDA", - "amineSsa" - ] - }, - "Web/API/RTCPeerConnection": { - "modified": "2020-10-15T22:22:14.553Z", - "contributors": [ - "plyd", - "philbhur" - ] - }, - "Web/API/RTCPeerConnection/setConfiguration": { - "modified": "2020-10-15T22:22:53.605Z", - "contributors": [ - "SphinxKnight", - "bbataini" - ] - }, - "Web/API/RandomSource/getRandomValues": { - "modified": "2020-10-15T21:32:23.009Z", - "contributors": [ - "tristantheb", - "noftaly", - "Clemix37", - "ea1000", - "fscholz", - "Grahack" - ] - }, - "Web/API/Range": { - "modified": "2019-03-18T20:49:38.585Z", - "contributors": [ - "Watilin", - "stefmaster", - "teoli", - "jsx", - "Mgjbot", - "BenoitL", - "Fredchat", - "VincentN", - "Learning" - ] - }, - "Web/API/Range/createContextualFragment": { - "modified": "2019-03-18T21:42:33.795Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Range/detach": { - "modified": "2020-10-15T22:06:40.189Z", - "contributors": [ - "jonasgrilleres" - ] - }, - "Web/API/Range/extractContents": { - "modified": "2020-10-15T22:01:04.338Z", - "contributors": [ - "SphinxKnight", - "Watilin" - ] - }, - "Web/API/Range/insertNode": { - "modified": "2019-03-23T22:26:49.211Z", - "contributors": [ - "Hell_Carlito", - "Watilin" - ] - }, - "Web/API/Range/selectNode": { - "modified": "2019-03-18T21:38:58.634Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/Range/setStart": { - "modified": "2019-03-23T22:02:21.472Z", - "contributors": [ - "cabalpit" - ] - }, - "Web/API/Range/surroundContents": { - "modified": "2020-10-15T22:15:03.441Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Request": { - "modified": "2020-10-15T21:45:46.926Z", - "contributors": [ - "Voulto", - "SphinxKnight", - "Sheppy" - ] - }, - "Web/API/Request/Request": { - "modified": "2020-10-15T21:58:38.703Z", - "contributors": [ - "SphinxKnight", - "rpereira-dev", - "NemoNobobyPersonne" - ] - }, - "Web/API/Request/credentials": { - "modified": "2020-10-15T21:59:03.816Z", - "contributors": [ - "SphinxKnight", - "Flavien" - ] - }, - "Web/API/Request/mode": { - "modified": "2020-10-15T21:45:44.176Z", - "contributors": [ - "SphinxKnight", - "m1ch3lcl", - "P45QU10U" - ] - }, - "Web/API/Resize_Observer_API": { - "modified": "2020-11-16T08:29:15.752Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/Response": { - "modified": "2019-03-23T22:02:32.946Z", - "contributors": [ - "Hennek" - ] - }, - "Web/API/SVGAElement": { - "modified": "2019-03-23T23:09:32.730Z", - "contributors": [ - "Goofy", - "Barbrousse" - ] - }, - "Web/API/SVGDescElement": { - "modified": "2020-10-15T21:34:30.445Z", - "contributors": [ - "SphinxKnight", - "B_M" - ] - }, - "Web/API/SVGElement": { - "modified": "2019-03-23T23:05:24.715Z", - "contributors": [ - "thePivottt" - ] - }, - "Web/API/SVGMatrix": { - "modified": "2019-03-23T23:03:00.534Z", - "contributors": [ - "Arioch" - ] - }, - "Web/API/SVGRect": { - "modified": "2019-03-23T23:02:52.318Z", - "contributors": [ - "Arioch" - ] - }, - "Web/API/SVGRectElement": { - "modified": "2020-10-15T22:16:03.247Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/SVGStylable": { - "modified": "2020-10-15T21:34:30.185Z", - "contributors": [ - "SphinxKnight", - "B_M" - ] - }, - "Web/API/SVGTitleElement": { - "modified": "2019-03-23T22:57:49.129Z", - "contributors": [ - "B_M" - ] - }, - "Web/API/Screen_Capture_API": { - "modified": "2020-10-15T22:21:38.382Z", - "contributors": [ - "Torzivalds" - ] - }, - "Web/API/Selection": { - "modified": "2020-10-15T21:17:12.773Z", - "contributors": [ - "scientificware", - "jeangab62", - "thiberaw", - "Hell_Carlito", - "Goofy", - "Watilin", - "Nothus", - "gaelb", - "teoli", - "jsx", - "Mgjbot", - "Chbok" - ] - }, - "Web/API/Selection/collapse": { - "modified": "2019-03-23T22:40:49.435Z", - "contributors": [ - "Hell_Carlito", - "zede-master" - ] - }, - "Web/API/Selection/toString": { - "modified": "2019-03-23T23:47:21.731Z", - "contributors": [ - "fscholz", - "teoli", - "jsx", - "Chbok" - ] - }, - "Web/API/Selection/type": { - "modified": "2020-10-15T22:28:11.070Z", - "contributors": [ - "G-Couvert" - ] - }, - "Web/API/Selection_API": { - "modified": "2019-03-18T21:28:44.424Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Server-sent_events": { - "modified": "2020-08-31T06:12:15.737Z", - "contributors": [ - "Voulto", - "SphinxKnight", - "Arterrien", - "ethertank" - ] - }, - "Web/API/Server-sent_events/Using_server-sent_events": { - "modified": "2019-10-23T03:46:57.246Z", - "contributors": [ - "SphinxKnight", - "Watilin", - "tartinesKiller", - "duchesne.andre", - "ygarbage", - "QuentinChx", - "mikadev" - ] - }, - "Web/API/ServiceWorker": { - "modified": "2020-10-15T21:44:04.910Z", - "contributors": [ - "tomderudder", - "JNa0", - "pdesjardins90", - "nobe4" - ] - }, - "Web/API/ServiceWorker/onstatechange": { - "modified": "2019-03-23T22:37:05.749Z", - "contributors": [ - "nobe4" - ] - }, - "Web/API/ServiceWorkerContainer": { - "modified": "2019-03-23T22:15:17.877Z", - "contributors": [ - "Tranber0" - ] - }, - "Web/API/ServiceWorkerContainer/getRegistration": { - "modified": "2020-10-15T22:33:54.801Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/ServiceWorkerContainer/register": { - "modified": "2020-10-15T22:34:39.454Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/ServiceWorkerGlobalScope": { - "modified": "2020-10-15T22:34:58.233Z", - "contributors": [ - "alattalatta" - ] - }, - "Web/API/ServiceWorkerGlobalScope/onnotificationclick": { - "modified": "2020-10-15T22:34:57.743Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/ServiceWorkerRegistration": { - "modified": "2020-10-15T22:15:48.505Z", - "contributors": [ - "chrisdavidmills" - ] - }, - "Web/API/ServiceWorkerRegistration/active": { - "modified": "2020-10-15T22:15:46.844Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/ServiceWorkerRegistration/getNotifications": { - "modified": "2020-10-15T22:34:57.266Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/ServiceWorkerRegistration/scope": { - "modified": "2020-10-15T22:35:02.366Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/ServiceWorkerRegistration/showNotification": { - "modified": "2020-10-15T22:34:57.967Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/ServiceWorkerState": { - "modified": "2019-03-18T21:18:01.317Z", - "contributors": [ - "AurelieBayre" - ] - }, - "Web/API/Service_Worker_API": { - "modified": "2019-03-23T22:40:14.713Z", - "contributors": [ - "onra87", - "STudio26", - "JeffD", - "jean-pierre.gay" - ] - }, - "Web/API/Service_Worker_API/Using_Service_Workers": { - "modified": "2020-07-26T01:50:40.763Z", - "contributors": [ - "yanabess", - "bArraxas", - "yanns1", - "Faenzar", - "lp177", - "NerOcrO", - "paulintrognon", - "bgondy", - "luminecence", - "drskullster", - "zikinf", - "vthibault", - "nhoizey", - "jean-pierre.gay" - ] - }, - "Web/API/ShadowRoot": { - "modified": "2020-10-15T21:48:45.645Z", - "contributors": [ - "SphinxKnight", - "EnzDev" - ] - }, - "Web/API/ShadowRoot/delegatesFocus": { - "modified": "2020-10-15T22:25:00.485Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/ShadowRoot/host": { - "modified": "2020-10-15T22:25:00.578Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/ShadowRoot/innerHTML": { - "modified": "2020-10-15T22:25:01.691Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/ShadowRoot/mode": { - "modified": "2020-10-15T22:25:00.485Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/SharedWorker": { - "modified": "2020-10-15T21:27:22.248Z", - "contributors": [ - "Arzak656", - "a-mt", - "wakka27", - "jean-pierre.gay", - "FuturLiberta" - ] - }, - "Web/API/SharedWorker/SharedWorker": { - "modified": "2020-10-15T22:27:12.056Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/SharedWorker/port": { - "modified": "2020-10-15T22:27:03.021Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/SharedWorkerGlobalScope": { - "modified": "2020-10-15T22:26:31.672Z", - "contributors": [ - "SphinxKnight", - "mfuji09" - ] - }, - "Web/API/SharedWorkerGlobalScope/applicationCache": { - "modified": "2020-10-15T22:26:34.435Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/SharedWorkerGlobalScope/onconnect": { - "modified": "2020-10-15T22:26:31.419Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/SpeechRecognition": { - "modified": "2019-03-18T21:42:43.926Z", - "contributors": [ - "SamuelCompagnon" - ] - }, - "Web/API/SpeechSynthesisUtterance": { - "modified": "2019-03-23T22:05:52.587Z", - "contributors": [ - "necraidan" - ] - }, - "Web/API/Storage": { - "modified": "2020-10-15T21:32:34.574Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "CaribouFute", - "EmilienD", - "gpenissard" - ] - }, - "Web/API/Storage/LocalStorage": { - "modified": "2019-03-18T20:41:23.924Z", - "contributors": [ - "Watilin", - "cedeber", - "lulu5239", - "Fredloub", - "CoolSnow04" - ] - }, - "Web/API/Storage/clear": { - "modified": "2020-10-15T21:46:22.875Z", - "contributors": [ - "tristantheb", - "JNa0", - "Axnyff", - "Hell_Carlito", - "EmilienD" - ] - }, - "Web/API/Storage/getItem": { - "modified": "2020-11-11T20:24:08.906Z", - "contributors": [ - "tristantheb", - "JNa0", - "Axnyff", - "gharel", - "Sofness", - "EmilienD" - ] - }, - "Web/API/Storage/key": { - "modified": "2019-03-23T22:21:16.859Z", - "contributors": [ - "JNa0", - "Axnyff", - "Sofness" - ] - }, - "Web/API/Storage/length": { - "modified": "2019-03-23T22:11:25.445Z", - "contributors": [ - "JNa0", - "Axnyff" - ] - }, - "Web/API/Storage/removeItem": { - "modified": "2020-11-19T06:32:26.629Z", - "contributors": [ - "tristantheb", - "JNa0", - "refschool" - ] - }, - "Web/API/Storage/setItem": { - "modified": "2019-10-31T12:01:56.712Z", - "contributors": [ - "KoalaMoala", - "JNa0", - "Axnyff", - "rmNyro" - ] - }, - "Web/API/StorageEstimate": { - "modified": "2020-10-15T22:17:55.065Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/StorageManager": { - "modified": "2020-10-15T22:17:54.664Z" - }, - "Web/API/StorageManager/estimate": { - "modified": "2020-10-15T22:17:54.758Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/StorageManager/persist": { - "modified": "2020-10-15T22:17:54.254Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/StorageManager/persisted": { - "modified": "2020-10-15T22:17:55.112Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Storage_API": { - "modified": "2020-10-15T22:17:55.127Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/Streams_API": { - "modified": "2020-10-15T22:14:40.364Z", - "contributors": [ - "Kuzcoo", - "sbenard" - ] - }, - "Web/API/StyleSheet": { - "modified": "2020-10-15T21:55:12.566Z", - "contributors": [ - "SphinxKnight", - "remibremont", - "JNa0", - "Crg" - ] - }, - "Web/API/StyleSheet/disabled": { - "modified": "2019-03-23T22:10:02.805Z", - "contributors": [ - "Crg" - ] - }, - "Web/API/StyleSheet/href": { - "modified": "2019-03-23T22:10:02.014Z", - "contributors": [ - "Crg" - ] - }, - "Web/API/StyleSheet/media": { - "modified": "2019-03-23T22:10:08.278Z", - "contributors": [ - "Crg" - ] - }, - "Web/API/StyleSheet/ownerNode": { - "modified": "2019-03-23T22:10:07.966Z", - "contributors": [ - "Crg" - ] - }, - "Web/API/StyleSheet/parentStyleSheet": { - "modified": "2019-03-23T22:10:09.954Z", - "contributors": [ - "Crg" - ] - }, - "Web/API/StyleSheet/title": { - "modified": "2019-03-23T22:09:59.139Z", - "contributors": [ - "Crg" - ] - }, - "Web/API/StyleSheet/type": { - "modified": "2019-03-23T22:10:03.329Z", - "contributors": [ - "Crg" - ] - }, - "Web/API/StyleSheetList": { - "modified": "2019-03-23T22:56:21.510Z", - "contributors": [ - "Goofy", - "weeger" - ] - }, - "Web/API/SubtleCrypto": { - "modified": "2020-10-15T22:30:51.870Z", - "contributors": [ - "Sheppy" - ] - }, - "Web/API/SubtleCrypto/digest": { - "modified": "2020-10-15T22:30:49.992Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/SyncManager": { - "modified": "2020-10-15T22:21:29.924Z", - "contributors": [ - "necraidan" - ] - }, - "Web/API/Text": { - "modified": "2019-03-18T21:43:23.092Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/Text/splitText": { - "modified": "2019-03-18T21:43:29.396Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/TextEncoder": { - "modified": "2020-10-15T22:13:59.801Z", - "contributors": [ - "JNa0" - ] - }, - "Web/API/TextEncoder/TextEncoder": { - "modified": "2020-10-15T22:31:11.795Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/TextMetrics": { - "modified": "2019-03-23T22:10:26.189Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/TextMetrics/width": { - "modified": "2019-03-23T22:10:36.977Z", - "contributors": [ - "gamifiq", - "NemoNobobyPersonne" - ] - }, - "Web/API/TimeRanges": { - "modified": "2019-03-18T20:47:45.518Z", - "contributors": [ - "monlouisj", - "efusien" - ] - }, - "Web/API/Transferable": { - "modified": "2020-10-15T21:33:28.712Z", - "contributors": [ - "Arzak656", - "AClavijo", - "jean-pierre.gay" - ] - }, - "Web/API/TransitionEvent": { - "modified": "2019-03-23T22:10:07.091Z", - "contributors": [ - "SphinxKnight", - "Crg" - ] - }, - "Web/API/TreeWalker": { - "modified": "2019-03-18T21:40:16.199Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/currentNode": { - "modified": "2019-03-18T21:40:23.895Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/expandEntityReferences": { - "modified": "2019-03-18T21:40:21.457Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/filter": { - "modified": "2019-03-18T21:40:31.482Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/firstChild": { - "modified": "2019-03-18T21:40:34.770Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/lastChild": { - "modified": "2019-03-18T21:40:24.414Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/nextNode": { - "modified": "2019-03-18T21:40:20.647Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/nextSibling": { - "modified": "2019-03-18T21:40:14.024Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/parentNode": { - "modified": "2019-03-18T21:40:31.869Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/previousNode": { - "modified": "2019-03-18T21:40:32.593Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/previousSibling": { - "modified": "2019-03-18T21:40:17.837Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/root": { - "modified": "2019-03-18T21:40:33.877Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/TreeWalker/whatToShow": { - "modified": "2020-10-15T22:02:07.579Z", - "contributors": [ - "SphinxKnight", - "loella16" - ] - }, - "Web/API/UIEvent": { - "modified": "2020-11-05T16:01:13.811Z", - "contributors": [ - "JNa0", - "loella16", - "fscholz" - ] - }, - "Web/API/UIEvent/detail": { - "modified": "2020-10-15T21:49:56.915Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "Kalwyn" - ] - }, - "Web/API/UIEvent/layerX": { - "modified": "2019-04-19T04:25:56.943Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "fscholz", - "khalid32", - "Feugy" - ] - }, - "Web/API/ULongRange": { - "modified": "2020-10-15T22:35:00.304Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/URL": { - "modified": "2019-04-05T15:11:45.608Z", - "contributors": [ - "loella16", - "fscholz" - ] - }, - "Web/API/URL/URL": { - "modified": "2020-10-15T22:04:11.269Z", - "contributors": [ - "spike008t", - "cdelamarre" - ] - }, - "Web/API/URL/createObjectURL": { - "modified": "2020-10-15T21:21:40.672Z", - "contributors": [ - "Watilin", - "Arzak656", - "Blodangan", - "fscholz", - "teoli", - "nicofrand", - "alaric" - ] - }, - "Web/API/URL/hash": { - "modified": "2020-10-15T22:17:10.984Z", - "contributors": [ - "noelmace", - "spike008t" - ] - }, - "Web/API/URL/protocol": { - "modified": "2020-10-15T22:17:10.990Z", - "contributors": [ - "spike008t" - ] - }, - "Web/API/URL/revokeObjectURL": { - "modified": "2020-10-15T22:07:59.746Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/URL/search": { - "modified": "2020-10-15T22:17:09.818Z", - "contributors": [ - "SphinxKnight", - "spike008t" - ] - }, - "Web/API/URL/searchParams": { - "modified": "2020-10-15T22:17:08.530Z", - "contributors": [ - "spike008t" - ] - }, - "Web/API/URL/toJSON": { - "modified": "2020-10-15T22:17:08.519Z", - "contributors": [ - "spike008t" - ] - }, - "Web/API/URL/toString": { - "modified": "2020-10-15T22:13:58.455Z", - "contributors": [ - "martialseron" - ] - }, - "Web/API/URLSearchParams": { - "modified": "2019-03-18T21:39:55.036Z", - "contributors": [ - "Watilin", - "cdelamarre" - ] - }, - "Web/API/URLSearchParams/entries": { - "modified": "2020-10-15T22:08:32.278Z", - "contributors": [ - "moshir" - ] - }, - "Web/API/URLUtils": { - "modified": "2019-03-23T23:15:38.230Z", - "contributors": [ - "Watilin" - ] - }, - "Web/API/URLUtilsReadOnly": { - "modified": "2020-10-15T22:17:11.893Z", - "contributors": [ - "spike008t" - ] - }, - "Web/API/USVString": { - "modified": "2020-04-28T10:35:09.074Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/API/VRDisplayCapabilities": { - "modified": "2019-03-23T22:12:25.995Z", - "contributors": [ - "frankymacster" - ] - }, - "Web/API/Vibration_API": { - "modified": "2019-03-23T22:45:55.163Z", - "contributors": [ - "Hell_Carlito", - "lynxhack" - ] - }, - "Web/API/VideoTrack": { - "modified": "2020-10-15T22:20:15.596Z", - "contributors": [ - "Voulto", - "Wind1808" - ] - }, - "Web/API/VideoTrack/id": { - "modified": "2020-10-15T22:20:11.798Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/WebGL2RenderingContext": { - "modified": "2020-10-15T21:59:56.462Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLBuffer": { - "modified": "2020-10-15T21:59:33.541Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLFramebuffer": { - "modified": "2020-10-15T21:59:35.211Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLProgram": { - "modified": "2020-10-15T21:59:07.199Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext": { - "modified": "2020-10-15T21:51:29.279Z", - "contributors": [ - "BonoBX", - "teoli" - ] - }, - "Web/API/WebGLRenderingContext/activeTexture": { - "modified": "2020-10-15T22:01:31.601Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/activer": { - "modified": "2020-10-15T21:59:29.725Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/attachShader": { - "modified": "2020-10-15T21:59:28.122Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/bindBuffer": { - "modified": "2020-10-15T21:59:37.132Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/bindTexture": { - "modified": "2020-10-15T21:59:54.842Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/bufferData": { - "modified": "2020-10-15T21:59:40.058Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/canevas": { - "modified": "2020-10-15T21:59:28.454Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/clear": { - "modified": "2020-10-15T21:51:28.582Z", - "contributors": [ - "NemoNobobyPersonne", - "SphinxKnight", - "Noctisdark" - ] - }, - "Web/API/WebGLRenderingContext/compileShader": { - "modified": "2020-10-15T21:59:28.703Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/createBuffer": { - "modified": "2020-10-15T21:59:33.748Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/createProgram": { - "modified": "2020-10-15T21:59:33.912Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/createShader": { - "modified": "2020-10-15T21:59:29.550Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/createTexture": { - "modified": "2020-10-15T21:59:54.835Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/deleteBuffer": { - "modified": "2020-10-15T21:59:40.774Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/deleteShader": { - "modified": "2020-10-15T21:59:32.565Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/drawArrays": { - "modified": "2020-10-15T21:59:35.395Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/enableVertexAttribArray": { - "modified": "2020-10-15T21:59:35.034Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/generateMipmap": { - "modified": "2020-10-15T22:01:31.184Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/getAttribLocation": { - "modified": "2020-10-15T21:59:38.706Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/getError": { - "modified": "2020-10-15T21:59:32.173Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/getShaderParameter": { - "modified": "2020-10-15T21:59:29.618Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/getTexParameter": { - "modified": "2020-10-15T22:01:31.142Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/getUniformLocation": { - "modified": "2020-10-15T21:59:34.949Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/isBuffer": { - "modified": "2020-10-15T21:59:35.831Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/shaderSource": { - "modified": "2020-10-15T21:59:30.850Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/texImage2D": { - "modified": "2020-10-15T21:59:56.336Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/texParameter": { - "modified": "2020-10-15T22:01:30.454Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/uniform": { - "modified": "2020-10-15T22:01:33.704Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/uniformMatrix": { - "modified": "2020-10-15T21:59:37.493Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/useProgram": { - "modified": "2020-10-15T21:59:35.227Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/vertexAttribPointer": { - "modified": "2020-10-15T21:59:38.458Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLRenderingContext/viewport": { - "modified": "2020-10-15T21:59:28.597Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLShader": { - "modified": "2020-10-15T21:59:07.385Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGLTexture": { - "modified": "2020-10-15T22:03:21.533Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGL_API": { - "modified": "2019-03-24T00:15:31.256Z", - "contributors": [ - "NemoNobobyPersonne", - "Chbok", - "teoli", - "fscholz", - "Bat", - "TimN" - ] - }, - "Web/API/WebGL_API/By_example": { - "modified": "2019-03-23T22:42:41.529Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Appliquer_des_couleurs": { - "modified": "2019-03-23T22:42:38.405Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Appliquer_des_découpes_simples": { - "modified": "2019-03-23T22:42:39.054Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Appliquer_une_couleur_à_la_souris": { - "modified": "2019-03-23T22:42:47.790Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Créer_une_animation_avec_découpe_et_applique": { - "modified": "2019-03-23T22:41:55.736Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Créer_une_animation_colorée": { - "modified": "2019-03-23T22:42:38.639Z", - "contributors": [ - "chrisdavidmills", - "phareal", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Détecter_WebGL": { - "modified": "2019-03-23T22:42:45.973Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Générer_des_textures_avec_du_code": { - "modified": "2019-03-23T22:42:34.831Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Hello_GLSL": { - "modified": "2019-03-23T22:42:47.561Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Introduction_aux_attributs_vertex": { - "modified": "2019-03-23T22:41:53.712Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Les_textures_vidéos": { - "modified": "2019-03-23T22:42:42.053Z", - "contributors": [ - "chrisdavidmills", - "Porkepix", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Masque_de_couleur": { - "modified": "2019-03-23T22:37:46.638Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Modèle_1": { - "modified": "2019-03-23T22:41:51.922Z", - "contributors": [ - "chrisdavidmills", - "wbamberg", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Tailles_de_canvas_et_WebGL": { - "modified": "2019-03-23T22:41:53.133Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/By_example/Une_pluie_de_rectangle": { - "modified": "2019-03-23T22:41:53.831Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/API/WebGL_API/Données": { - "modified": "2019-03-23T22:01:55.247Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGL_API/Tutorial": { - "modified": "2019-12-30T09:02:46.688Z", - "contributors": [ - "JNa0", - "NemoNobobyPersonne", - "frankymacster", - "teoli", - "fscholz" - ] - }, - "Web/API/WebGL_API/Tutorial/Ajouter_des_couleurs_avec_les_shaders": { - "modified": "2019-12-30T10:10:01.835Z", - "contributors": [ - "JNa0", - "NemoNobobyPersonne", - "greberger", - "teoli", - "fscholz", - "TimN" - ] - }, - "Web/API/WebGL_API/Tutorial/Ajouter_du_contenu_à_WebGL": { - "modified": "2020-05-20T15:13:08.482Z", - "contributors": [ - "monsieurbadia", - "NemoNobobyPersonne", - "jeljeli", - "Golmote", - "Yomguithereal", - "JohnBerlin", - "teoli", - "fscholz", - "TimN", - "ThePrisoner" - ] - }, - "Web/API/WebGL_API/Tutorial/Animation_de_textures_en_WebGL": { - "modified": "2019-03-18T21:41:52.213Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebGL_API/Tutorial/Animer_des_objets_avec_WebGL": { - "modified": "2019-03-23T22:58:21.362Z", - "contributors": [ - "NemoNobobyPersonne", - "xovaox", - "Golmote", - "teoli", - "fscholz", - "LDelhez" - ] - }, - "Web/API/WebGL_API/Tutorial/Commencer_avec_WebGL": { - "modified": "2019-10-05T20:05:27.908Z", - "contributors": [ - "Yukulele.", - "Julien-prrs", - "chrisdavidmills", - "TimPrd", - "BonoBX", - "naneunga", - "NemoNobobyPersonne", - "museifu1", - "nonatomiclabs", - "teoli", - "fscholz", - "TimN", - "ThePrisoner" - ] - }, - "Web/API/WebGL_API/Tutorial/Creer_des_objets_3D_avec_WebGL": { - "modified": "2019-03-23T22:52:14.509Z", - "contributors": [ - "PJoy", - "NemoNobobyPersonne", - "teoli", - "fscholz", - "Bat" - ] - }, - "Web/API/WebGL_API/Tutorial/Eclairage_en_WebGL": { - "modified": "2019-03-23T22:11:17.974Z", - "contributors": [ - "dxsp", - "Slayug" - ] - }, - "Web/API/WebGL_API/Tutorial/Utiliser_les_textures_avec_WebGL": { - "modified": "2019-03-23T22:58:22.974Z", - "contributors": [ - "NemoNobobyPersonne", - "teoli", - "fscholz", - "Nasso", - "LDelhez" - ] - }, - "Web/API/WebGL_API/Types": { - "modified": "2019-03-23T22:01:49.667Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/WebRTC_API": { - "modified": "2020-10-22T05:44:55.105Z", - "contributors": [ - "Voulto", - "tonybengue", - "thourayabenali", - "Sheppy" - ] - }, - "Web/API/WebSocket": { - "modified": "2019-03-23T23:02:45.010Z", - "contributors": [ - "lessonsharing", - "Ilphrin", - "VinceOPS" - ] - }, - "Web/API/WebSocket/close_event": { - "modified": "2019-03-23T21:59:50.351Z", - "contributors": [ - "irenesmith", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/WebSockets_API": { - "modified": "2020-05-29T06:16:34.594Z", - "contributors": [ - "Kayoshi-dev", - "SphinxKnight", - "Graziellah", - "cydelic", - "Nothus", - "Goofy", - "filipovi" - ] - }, - "Web/API/WebSockets_API/Writing_WebSocket_client_applications": { - "modified": "2019-03-18T20:48:00.893Z", - "contributors": [ - "SphinxKnight", - "greizgh", - "alexca93", - "fbessou", - "marie-ototoi", - "Goofy", - "sisyphe" - ] - }, - "Web/API/WebSockets_API/Writing_WebSocket_servers": { - "modified": "2019-07-08T10:30:19.533Z", - "contributors": [ - "ThCarrere", - "SphinxKnight", - "cbdt", - "H4dr1en", - "Jibec", - "Nek-", - "ynno", - "Nothus" - ] - }, - "Web/API/WebSockets_API/Writing_a_WebSocket_server_in_Java": { - "modified": "2019-03-18T20:48:00.087Z", - "contributors": [ - "SphinxKnight", - "Jibec" - ] - }, - "Web/API/WebVR_API": { - "modified": "2019-06-08T20:04:07.795Z", - "contributors": [ - "frankymacster", - "DavidLibeau" - ] - }, - "Web/API/WebVR_API/Utiliser_des_contrôleurs_de_realite_virtuelle_pour_du_WebVR": { - "modified": "2019-03-18T21:44:15.461Z", - "contributors": [ - "DavidLibeau" - ] - }, - "Web/API/WebVTT_API": { - "modified": "2020-10-15T22:20:12.504Z", - "contributors": [ - "fffjacquier", - "Arzak656" - ] - }, - "Web/API/WebXR_Device_API": { - "modified": "2020-10-15T22:34:09.543Z", - "contributors": [ - "Hans_PRESTAT" - ] - }, - "Web/API/Web_Animations_API": { - "modified": "2020-12-07T14:00:31.639Z", - "contributors": [ - "AdalbertPungu" - ] - }, - "Web/API/Web_Audio_API": { - "modified": "2019-03-23T23:07:29.151Z", - "contributors": [ - "Mr21", - "a-cordier", - "MAKIO135", - "Elfhir", - "marie-ototoi", - "SphinxKnight", - "mtrabelsi", - "raphael0202", - "FBerthelot", - "Buridan", - "theGlenn" - ] - }, - "Web/API/Web_Audio_API/Basic_concepts_behind_Web_Audio_API": { - "modified": "2019-03-23T22:41:04.256Z", - "contributors": [ - "VS64", - "marie-ototoi" - ] - }, - "Web/API/Web_Audio_API/Using_Web_Audio_API": { - "modified": "2019-03-23T22:37:49.629Z", - "contributors": [ - "marie-ototoi", - "jcbohin" - ] - }, - "Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API": { - "modified": "2019-03-23T22:37:03.451Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/Web_Audio_API/Web_audio_spatialization_basics": { - "modified": "2019-03-23T22:09:00.124Z", - "contributors": [ - "marie-ototoi" - ] - }, - "Web/API/Web_Speech_API": { - "modified": "2020-11-16T08:41:59.799Z", - "contributors": [ - "JNa0", - "codingk8" - ] - }, - "Web/API/Web_Speech_API/Using_the_Web_Speech_API": { - "modified": "2020-06-20T07:22:44.915Z", - "contributors": [ - "matbe19" - ] - }, - "Web/API/Web_Storage_API": { - "modified": "2020-10-15T21:39:12.031Z", - "contributors": [ - "ThCarrere", - "abvll", - "olivier-axyome", - "ericGuyaderBerger", - "necraidan", - "Dexter_Deter", - "teoli" - ] - }, - "Web/API/Web_Storage_API/Using_the_Web_Storage_API": { - "modified": "2020-10-15T21:39:11.598Z", - "contributors": [ - "Alan_Braut", - "SphinxKnight", - "Vifier-Lockla", - "edspeedy", - "Hell_Carlito", - "hostar_mdn", - "JeffD", - "rmNyro" - ] - }, - "Web/API/Web_Workers_API": { - "modified": "2020-02-13T03:21:00.537Z", - "contributors": [ - "Arzak656", - "GregMorel", - "wakka27", - "jean-pierre.gay" - ] - }, - "Web/API/Web_Workers_API/Advanced_concepts_and_examples": { - "modified": "2019-03-23T23:02:10.788Z", - "contributors": [ - "jean-pierre.gay" - ] - }, - "Web/API/Web_Workers_API/Utilisation_des_web_workers": { - "modified": "2019-11-27T14:21:09.047Z", - "contributors": [ - "leobnt", - "SphinxKnight", - "hyphaene", - "necraidan", - "loella16", - "aurelienb33", - "Gasperowicz", - "dcamilleri", - "Philiphil", - "mliatt", - "SaintCyr", - "qwincy_p", - "m3doune", - "nicodel", - "jmh", - "goofy_bz", - "ThibautBremand", - "jean-pierre.gay", - "gaspardbenoit", - "teoli", - "tregagnon", - "dbruant", - "AurelienM" - ] - }, - "Web/API/Web_Workers_API/algorithme_clonage_structure": { - "modified": "2019-03-23T22:20:19.039Z", - "contributors": [ - "Hell_Carlito", - "Watilin" - ] - }, - "Web/API/WheelEvent": { - "modified": "2020-11-05T15:49:11.373Z", - "contributors": [ - "JNa0", - "Voulto" - ] - }, - "Web/API/WheelEvent/deltaX": { - "modified": "2020-10-15T22:35:00.346Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/WheelEvent/deltaY": { - "modified": "2020-10-15T22:35:00.628Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/WheelEvent/deltaZ": { - "modified": "2020-10-15T22:35:00.253Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window": { - "modified": "2019-06-20T16:27:26.215Z", - "contributors": [ - "grandoc", - "m-r-r", - "NemoNobobyPersonne", - "hellosct1", - "teoli", - "flexbox", - "khalid32", - "Crash", - "Julien.stuby", - "BenoitL", - "Mgjbot", - "Chbok", - "Takenbot", - "Gorrk" - ] - }, - "Web/API/Window/URL": { - "modified": "2019-03-23T22:29:28.869Z", - "contributors": [ - "branciat" - ] - }, - "Web/API/Window/alert": { - "modified": "2019-03-23T23:50:34.370Z", - "contributors": [ - "fscholz", - "teoli", - "icefire", - "khalid32", - "Mgjbot", - "Chbok", - "BenoitL" - ] - }, - "Web/API/Window/applicationCache": { - "modified": "2019-05-15T12:55:24.617Z", - "contributors": [ - "Lonylis", - "personnel" - ] - }, - "Web/API/Window/back": { - "modified": "2020-08-30T04:11:10.912Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/blur": { - "modified": "2020-10-15T22:33:51.982Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/cancelAnimationFrame": { - "modified": "2020-10-15T22:25:28.586Z", - "contributors": [ - "SphinxKnight", - "eloidrai" - ] - }, - "Web/API/Window/cancelIdleCallback": { - "modified": "2019-03-18T21:15:28.832Z", - "contributors": [ - "Adrael" - ] - }, - "Web/API/Window/captureEvents": { - "modified": "2020-08-26T09:45:14.172Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/clearImmediate": { - "modified": "2020-10-15T22:33:31.501Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/close": { - "modified": "2019-03-23T23:49:10.598Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/closed": { - "modified": "2019-03-23T23:49:10.478Z", - "contributors": [ - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL", - "Gorrk" - ] - }, - "Web/API/Window/confirm": { - "modified": "2019-03-23T23:50:38.060Z", - "contributors": [ - "fffjacquier", - "fscholz", - "teoli", - "icefire", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/console": { - "modified": "2019-03-18T21:43:50.040Z", - "contributors": [ - "tweqx" - ] - }, - "Web/API/Window/content": { - "modified": "2019-03-23T23:49:48.265Z", - "contributors": [ - "fscholz", - "teoli", - "jsx", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/controllers": { - "modified": "2019-03-18T21:38:06.814Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/Window/copy_event": { - "modified": "2020-10-15T22:33:31.446Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/crypto": { - "modified": "2019-06-12T16:41:52.512Z", - "contributors": [ - "plyd", - "foxstorm", - "alandrieu" - ] - }, - "Web/API/Window/customElements": { - "modified": "2019-03-18T21:37:51.562Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/Window/cut_event": { - "modified": "2020-10-15T22:33:51.319Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/defaultStatus": { - "modified": "2020-08-26T10:36:08.889Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/devicePixelRatio": { - "modified": "2019-03-23T22:41:51.233Z", - "contributors": [ - "plyd" - ] - }, - "Web/API/Window/dialogArguments": { - "modified": "2020-10-15T22:33:30.968Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/directories": { - "modified": "2020-08-26T10:46:42.910Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/document": { - "modified": "2020-10-15T22:33:30.190Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/dump": { - "modified": "2019-03-24T00:09:26.929Z", - "contributors": [ - "fscholz", - "teoli", - "AshfaqHossain", - "omarce", - "Mgjbot", - "Chbok" - ] - }, - "Web/API/Window/event": { - "modified": "2020-10-15T22:33:50.857Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/find": { - "modified": "2020-08-30T05:23:27.822Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/focus": { - "modified": "2019-03-23T22:47:01.519Z", - "contributors": [ - "mmerian" - ] - }, - "Web/API/Window/frameElement": { - "modified": "2020-10-15T22:33:32.894Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/frames": { - "modified": "2019-03-23T23:07:57.219Z", - "contributors": [ - "Ac1521", - "fscholz", - "SphinxKnight", - "Goofy", - "MatthieuHa" - ] - }, - "Web/API/Window/fullScreen": { - "modified": "2019-03-23T23:50:27.730Z", - "contributors": [ - "fscholz", - "teoli", - "Hasilt", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/gamepadconnected_event": { - "modified": "2019-03-23T21:59:49.070Z", - "contributors": [ - "irenesmith", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Window/gamepaddisconnected_event": { - "modified": "2019-03-23T21:59:48.411Z", - "contributors": [ - "irenesmith", - "Snosky", - "fscholz", - "Kalwyn" - ] - }, - "Web/API/Window/getComputedStyle": { - "modified": "2019-03-23T23:39:22.750Z", - "contributors": [ - "scaillerie", - "Jean-MariePETIT", - "fscholz", - "teoli", - "khalid32", - "tregagnon", - "Zlitus" - ] - }, - "Web/API/Window/getDefaultComputedStyle": { - "modified": "2019-03-18T21:37:50.335Z", - "contributors": [ - "teoli", - "NemoNobobyPersonne" - ] - }, - "Web/API/Window/getSelection": { - "modified": "2019-09-25T07:23:01.504Z", - "contributors": [ - "julienc", - "sudwebdesign", - "fscholz", - "jsx", - "teoli", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/hashchange_event": { - "modified": "2020-06-01T06:05:14.156Z", - "contributors": [ - "CommandMaker", - "fscholz", - "SaintCyr" - ] - }, - "Web/API/Window/history": { - "modified": "2020-10-15T21:25:14.236Z", - "contributors": [ - "Arzak656", - "SphinxKnight", - "fscholz", - "khalid32", - "Goofy", - "Jeuxclic" - ] - }, - "Web/API/Window/home": { - "modified": "2020-10-15T22:33:52.712Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/innerHeight": { - "modified": "2019-03-23T23:51:40.324Z", - "contributors": [ - "Copen", - "fscholz", - "teoli", - "khalid32", - "BenoitL", - "Mgjbot", - "Druss" - ] - }, - "Web/API/Window/innerWidth": { - "modified": "2019-03-23T23:51:38.427Z", - "contributors": [ - "callmemagnus", - "jdeniau", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "Druss" - ] - }, - "Web/API/Window/isSecureContext": { - "modified": "2020-10-15T22:33:30.685Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/languagechange_event": { - "modified": "2020-10-15T22:33:51.717Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/length": { - "modified": "2019-03-23T22:49:39.967Z", - "contributors": [ - "Scott99" - ] - }, - "Web/API/Window/localStorage": { - "modified": "2020-10-15T21:38:24.266Z", - "contributors": [ - "tristantheb", - "begmans", - "Bpruneau", - "Axnyff", - "EmmanuelBeziat", - "Nolwennig", - "goofy_bz", - "mfrederic" - ] - }, - "Web/API/Window/locationbar": { - "modified": "2020-10-15T22:33:31.052Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/matchMedia": { - "modified": "2019-03-23T23:36:43.486Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "kim_doudou" - ] - }, - "Web/API/Window/menubar": { - "modified": "2020-10-15T22:33:33.066Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/message_event": { - "modified": "2020-10-15T22:33:32.981Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/messageerror_event": { - "modified": "2020-10-15T22:33:50.217Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/mozAnimationStartTime": { - "modified": "2020-10-15T22:33:31.316Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/mozInnerScreenX": { - "modified": "2020-10-15T22:33:30.539Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/mozInnerScreenY": { - "modified": "2020-10-15T22:33:31.996Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/mozPaintCount": { - "modified": "2020-10-15T22:33:32.495Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/name": { - "modified": "2019-03-23T22:14:13.942Z", - "contributors": [ - "Copen" - ] - }, - "Web/API/Window/navigator": { - "modified": "2019-07-01T12:52:20.296Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/offline_event": { - "modified": "2020-10-15T22:32:51.446Z", - "contributors": [ - "Voulto", - "discipolat" - ] - }, - "Web/API/Window/ondevicelight": { - "modified": "2020-10-15T22:33:47.080Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/online_event": { - "modified": "2020-10-15T22:33:30.848Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/onpaint": { - "modified": "2020-08-30T03:31:57.086Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/onresize": { - "modified": "2019-03-23T23:03:02.343Z", - "contributors": [ - "loella16", - "fscholz", - "mikadev" - ] - }, - "Web/API/Window/open": { - "modified": "2019-10-13T15:48:24.493Z", - "contributors": [ - "Sibian2019", - "P45QU10U", - "SphinxKnight", - "trebly", - "jigs12", - "jnoelEFL", - "fscholz", - "khalid32", - "teoli", - "damien.flament", - "GT", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/openDialog": { - "modified": "2020-10-15T21:14:00.787Z", - "contributors": [ - "velkro", - "fscholz", - "teoli", - "jsx", - "tregagnon", - "damien.flament" - ] - }, - "Web/API/Window/opener": { - "modified": "2019-03-23T23:49:11.676Z", - "contributors": [ - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/orientation": { - "modified": "2020-10-15T22:33:28.551Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/outerHeight": { - "modified": "2019-03-23T22:35:54.960Z", - "contributors": [ - "Nlmc", - "cyriil_dev" - ] - }, - "Web/API/Window/outerWidth": { - "modified": "2019-03-18T21:37:58.232Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/Window/parent": { - "modified": "2019-03-23T23:50:11.432Z", - "contributors": [ - "fscholz", - "khalid32", - "teoli", - "Mgjbot", - "Takenbot", - "BenoitL" - ] - }, - "Web/API/Window/paste_event": { - "modified": "2020-10-15T22:33:30.919Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/popstate_event": { - "modified": "2019-04-26T08:34:01.571Z", - "contributors": [ - "chrisdavidmills", - "irenesmith", - "fscholz", - "Hell_Carlito", - "DuaelFr" - ] - }, - "Web/API/Window/postMessage": { - "modified": "2020-10-15T21:31:31.287Z", - "contributors": [ - "abvll", - "J.DMB", - "fscholz", - "Watilin" - ] - }, - "Web/API/Window/print": { - "modified": "2019-03-23T22:47:25.609Z", - "contributors": [ - "Bringdal", - "clementgarbay", - "Chealer" - ] - }, - "Web/API/Window/prompt": { - "modified": "2020-10-20T04:53:05.942Z", - "contributors": [ - "Yopai", - "goofy_mdn", - "SphinxKnight", - "SUN-D-IA-L", - "fscholz", - "teoli", - "icefire", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/rejectionhandled_event": { - "modified": "2020-10-15T22:33:52.394Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/requestAnimationFrame": { - "modified": "2020-10-15T21:25:38.318Z", - "contributors": [ - "gsavin", - "Hell_Carlito", - "Gibus", - "kiux", - "xUMi", - "Durindo", - "Huntedpix", - "fscholz", - "youssefj", - "wakooka", - "juleschz" - ] - }, - "Web/API/Window/requestIdleCallback": { - "modified": "2019-03-23T22:21:17.753Z", - "contributors": [ - "Adrael" - ] - }, - "Web/API/Window/resizeBy": { - "modified": "2020-10-15T22:33:30.846Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/screen": { - "modified": "2020-10-15T22:13:48.969Z", - "contributors": [ - "SphinxKnight", - "AurelieBayre" - ] - }, - "Web/API/Window/screenX": { - "modified": "2019-03-23T22:30:27.252Z", - "contributors": [ - "tutosfaciles48" - ] - }, - "Web/API/Window/scroll": { - "modified": "2019-03-23T23:38:26.784Z", - "contributors": [ - "fscholz", - "khalid32", - "rd6137" - ] - }, - "Web/API/Window/scrollBy": { - "modified": "2019-01-16T23:16:12.982Z", - "contributors": [ - "gharel", - "OhNiice" - ] - }, - "Web/API/Window/scrollByLines": { - "modified": "2019-03-23T22:28:15.817Z", - "contributors": [ - "OhNiice" - ] - }, - "Web/API/Window/scrollByPages": { - "modified": "2019-03-23T22:28:29.251Z", - "contributors": [ - "OhNiice" - ] - }, - "Web/API/Window/scrollTo": { - "modified": "2019-03-23T23:51:36.100Z", - "contributors": [ - "victorlevasseur", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/scrollY": { - "modified": "2019-09-06T18:25:26.774Z", - "contributors": [ - "Awebsome", - "blr21560", - "Buzut", - "romuleald", - "cyriil_dev" - ] - }, - "Web/API/Window/scrollbars": { - "modified": "2020-10-15T22:33:49.792Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/sessionStorage": { - "modified": "2020-10-15T21:38:20.068Z", - "contributors": [ - "madidier", - "SphinxKnight", - "Prestine", - "begmans", - "carvallegro", - "cedeber", - "gharel", - "Puxarnal", - "Weeple" - ] - }, - "Web/API/Window/showModalDialog": { - "modified": "2019-03-23T23:49:12.676Z", - "contributors": [ - "Enoryon", - "fscholz", - "teoli", - "MatthieuHa", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Window/stop": { - "modified": "2020-10-15T22:33:32.200Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/storage_event": { - "modified": "2020-10-15T22:33:50.498Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/top": { - "modified": "2020-10-15T22:33:34.095Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/vrdisplayconnect_event": { - "modified": "2020-10-15T22:33:51.404Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/vrdisplaydisconnect_event": { - "modified": "2020-10-15T22:33:50.659Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/Window/vrdisplaypresentchange_event": { - "modified": "2020-10-15T22:33:50.217Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/WindowBase64/Décoder_encoder_en_base64": { - "modified": "2020-07-01T11:04:19.647Z", - "contributors": [ - "sigmal", - "olivierdupon", - "SphinxKnight", - "fscholz" - ] - }, - "Web/API/WindowBase64/atob": { - "modified": "2019-09-24T09:32:03.862Z", - "contributors": [ - "NemoNobobyPersonne", - "tbroadley", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL", - "Celelibi" - ] - }, - "Web/API/WindowBase64/btoa": { - "modified": "2019-03-18T21:13:03.287Z", - "contributors": [ - "PamProg", - "NemoNobobyPersonne", - "teoli", - "lovasoa", - "fscholz", - "jsx", - "e7d", - "Mgjbot", - "BenoitL", - "Celelibi" - ] - }, - "Web/API/WindowClient": { - "modified": "2019-03-23T22:34:19.127Z", - "contributors": [ - "NuclearPony" - ] - }, - "Web/API/WindowClient/focus": { - "modified": "2019-03-23T22:34:17.444Z", - "contributors": [ - "NuclearPony" - ] - }, - "Web/API/WindowClient/focused": { - "modified": "2019-03-23T22:06:02.438Z", - "contributors": [ - "aligatorjmg" - ] - }, - "Web/API/WindowClient/navigate": { - "modified": "2019-03-23T22:05:57.858Z", - "contributors": [ - "aligatorjmg" - ] - }, - "Web/API/WindowClient/visibilityState": { - "modified": "2019-03-23T22:05:58.402Z", - "contributors": [ - "aligatorjmg" - ] - }, - "Web/API/WindowEventHandlers": { - "modified": "2020-10-15T21:33:02.753Z", - "contributors": [ - "a-mt", - "fscholz" - ] - }, - "Web/API/WindowEventHandlers/onafterprint": { - "modified": "2020-10-15T22:10:57.103Z", - "contributors": [ - "velkro" - ] - }, - "Web/API/WindowEventHandlers/onbeforeprint": { - "modified": "2020-10-15T22:10:57.975Z", - "contributors": [ - "velkro" - ] - }, - "Web/API/WindowEventHandlers/onbeforeunload": { - "modified": "2019-04-18T06:36:38.075Z", - "contributors": [ - "ocommeng", - "Chocobozzz", - "Yves_ASTIER", - "teoli", - "fscholz", - "Ender-events", - "Jeremie", - "Delapouite", - "souen", - "matteodelabre", - "Jacqhal" - ] - }, - "Web/API/WindowEventHandlers/onhashchange": { - "modified": "2019-03-23T22:29:53.876Z", - "contributors": [ - "romuleald", - "Restimel", - "electrotiti" - ] - }, - "Web/API/WindowEventHandlers/onlanguagechange": { - "modified": "2020-10-15T22:33:47.473Z", - "contributors": [ - "Voulto" - ] - }, - "Web/API/WindowEventHandlers/onpopstate": { - "modified": "2020-03-22T20:22:18.860Z", - "contributors": [ - "noelmace", - "JouxRose", - "fscholz", - "teoli", - "khalid32", - "gudoy", - "matteodelabre" - ] - }, - "Web/API/WindowEventHandlers/onunload": { - "modified": "2020-10-15T21:34:36.558Z", - "contributors": [ - "Sibian2019", - "SphinxKnight", - "regzd" - ] - }, - "Web/API/WindowOrWorkerGlobalScope": { - "modified": "2020-08-30T06:30:00.848Z", - "contributors": [ - "Voulto", - "Bzbarsky" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/caches": { - "modified": "2020-10-15T22:06:53.037Z", - "contributors": [ - "Arzak656", - "jonasgrilleres" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/crossOriginIsolated": { - "modified": "2020-10-15T22:26:34.641Z", - "contributors": [ - "Eliastik" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/fetch": { - "modified": "2020-11-16T08:26:54.613Z", - "contributors": [ - "JNa0", - "PxlCtzn", - "fscholz", - "Hell_Carlito", - "Bat41" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/indexedDB": { - "modified": "2020-10-15T21:45:39.555Z", - "contributors": [ - "Arzak656", - "SphinxKnight", - "gadgino" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/isSecureContext": { - "modified": "2020-10-15T22:06:53.371Z", - "contributors": [ - "jonasgrilleres" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/origin": { - "modified": "2020-10-15T22:06:53.236Z", - "contributors": [ - "jonasgrilleres" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/queueMicrotask": { - "modified": "2020-10-15T22:26:44.474Z", - "contributors": [ - "Eliastik" - ] - }, - "Web/API/WindowOrWorkerGlobalScope/setTimeout": { - "modified": "2020-10-15T21:13:52.309Z", - "contributors": [ - "SphinxKnight", - "jmh", - "fscholz", - "teoli", - "jsx", - "Automatik", - "zanz", - "Tiller", - "Ceth", - "BenoitL", - "Mgjbot" - ] - }, - "Web/API/WindowTimers/clearInterval": { - "modified": "2020-10-15T21:18:22.478Z", - "contributors": [ - "SphinxKnight", - "faflo10", - "Shinomix", - "fscholz", - "teoli", - "khalid32", - "Mgjbot", - "BenoitL" - ] - }, - "Web/API/Worker": { - "modified": "2020-10-15T21:25:14.944Z", - "contributors": [ - "Arzak656", - "laruiss", - "khalid32", - "DrJeffrey", - "JonathanMM", - "benjiiiiii" - ] - }, - "Web/API/Worker/Functions_and_classes_available_to_workers": { - "modified": "2019-03-23T23:02:00.292Z", - "contributors": [ - "oaubert", - "Goofy", - "jean-pierre.gay" - ] - }, - "Web/API/Worker/Worker": { - "modified": "2020-10-15T21:32:56.649Z", - "contributors": [ - "Arzak656", - "wakka27", - "fscholz", - "jean-pierre.gay" - ] - }, - "Web/API/Worker/onmessage": { - "modified": "2020-10-15T21:32:57.785Z", - "contributors": [ - "Arzak656", - "wakka27", - "fscholz", - "jean-pierre.gay" - ] - }, - "Web/API/Worker/postMessage": { - "modified": "2020-10-15T21:28:27.233Z", - "contributors": [ - "Arzak656", - "fscholz", - "J.DMB", - "Whimzfreak" - ] - }, - "Web/API/Worker/terminate": { - "modified": "2020-10-15T21:32:32.338Z", - "contributors": [ - "Arzak656", - "fscholz", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope": { - "modified": "2020-10-03T00:59:22.962Z", - "contributors": [ - "duduindo", - "Voulto", - "chrisdavidmills" - ] - }, - "Web/API/WorkerGlobalScope/close": { - "modified": "2020-10-15T21:36:58.427Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/console": { - "modified": "2020-10-15T22:26:34.613Z", - "contributors": [ - "Eliastik" - ] - }, - "Web/API/WorkerGlobalScope/dump": { - "modified": "2020-10-15T22:27:11.681Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/API/WorkerGlobalScope/importScripts": { - "modified": "2020-10-15T21:36:58.896Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/location": { - "modified": "2020-10-15T21:33:55.947Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/navigator": { - "modified": "2020-10-15T21:33:53.933Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/onclose": { - "modified": "2020-10-15T21:33:54.728Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/onerror": { - "modified": "2020-10-15T21:33:56.757Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/onlanguagechange": { - "modified": "2020-10-15T21:33:55.141Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/onoffline": { - "modified": "2020-10-15T21:33:24.512Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/ononline": { - "modified": "2020-10-15T21:33:24.530Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerGlobalScope/self": { - "modified": "2020-10-15T21:33:24.526Z", - "contributors": [ - "Arzak656", - "jean-pierre.gay" - ] - }, - "Web/API/WorkerLocation": { - "modified": "2020-10-15T21:49:33.462Z", - "contributors": [ - "Arzak656", - "Hell_Carlito", - "Copen" - ] - }, - "Web/API/XMLDocument": { - "modified": "2020-10-15T22:03:21.753Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/XMLDocument/async": { - "modified": "2019-04-24T21:08:31.361Z", - "contributors": [ - "ExE-Boss", - "loella16" - ] - }, - "Web/API/XMLDocument/load": { - "modified": "2020-10-15T22:04:13.899Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/API/XMLHttpRequest": { - "modified": "2020-10-15T21:15:49.505Z", - "contributors": [ - "tramber30", - "SphinxKnight", - "lessonsharing", - "NemoNobobyPersonne", - "JoJoMimosa", - "lipki", - "teoli", - "JulienRobitaille", - "BenoitL", - "Mgjbot", - "Chbok", - "Laurent Denis", - "Anonymous" - ] - }, - "Web/API/XMLHttpRequest/Utiliser_XMLHttpRequest": { - "modified": "2019-03-23T23:16:32.724Z", - "contributors": [ - "sylv1", - "JNa0", - "lessonsharing", - "Deleplace", - "teoli", - "riderodd" - ] - }, - "Web/API/XMLHttpRequest/XMLHttpRequest": { - "modified": "2019-11-25T21:11:58.899Z", - "contributors": [ - "Lyokolux" - ] - }, - "Web/API/XMLHttpRequest/onreadystatechange": { - "modified": "2020-10-15T22:12:50.281Z", - "contributors": [ - "AdminXVII" - ] - }, - "Web/API/XMLHttpRequest/open": { - "modified": "2020-10-15T22:20:27.895Z", - "contributors": [ - "ThCarrere" - ] - }, - "Web/API/XMLHttpRequest/readyState": { - "modified": "2020-10-15T22:33:49.573Z", - "contributors": [ - "devweb157" - ] - }, - "Web/API/XMLHttpRequest/response": { - "modified": "2019-03-18T21:46:41.662Z", - "contributors": [ - "lpoujade" - ] - }, - "Web/API/XMLHttpRequest/responseText": { - "modified": "2020-10-15T22:32:45.494Z", - "contributors": [ - "la.boutique.art" - ] - }, - "Web/API/XMLHttpRequest/send": { - "modified": "2020-10-15T22:20:28.816Z", - "contributors": [ - "koala819", - "LocsLight", - "ThCarrere" - ] - }, - "Web/API/XMLHttpRequest/sendAsBinary": { - "modified": "2020-10-15T22:26:07.337Z", - "contributors": [ - "SphinxKnight", - "MasterFox" - ] - }, - "Web/API/XMLHttpRequest/setRequestHeader": { - "modified": "2020-10-15T22:22:04.139Z", - "contributors": [ - "AkwindFr" - ] - }, - "Web/API/XMLHttpRequest/status": { - "modified": "2020-10-15T22:33:50.087Z", - "contributors": [ - "devweb157" - ] - }, - "Web/API/XMLHttpRequest/timeout": { - "modified": "2020-10-15T22:25:10.471Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/API/XMLHttpRequest/withCredentials": { - "modified": "2020-10-15T22:15:36.714Z", - "contributors": [ - "innocenzi", - "hsdino", - "SphinxKnight" - ] - }, - "Web/API/XMLHttpRequestEventTarget": { - "modified": "2020-10-15T22:31:14.301Z", - "contributors": [ - "Voulto", - "devweb157" - ] - }, - "Web/API/XMLHttpRequestEventTarget/onload": { - "modified": "2020-10-15T22:31:14.653Z", - "contributors": [ - "fatmalimem19" - ] - }, - "Web/API/XPathExpression": { - "modified": "2019-03-18T21:40:34.918Z", - "contributors": [ - "loella16" - ] - }, - "Web/API/XSLTProcessor": { - "modified": "2020-08-30T07:26:30.646Z", - "contributors": [ - "Voulto", - "Mars073", - "erikadoyle" - ] - }, - "Web/API/notification": { - "modified": "2020-10-15T21:26:50.253Z", - "contributors": [ - "tomderudder", - "robin850", - "Omnilaika02", - "AshfaqHossain", - "P45QU10U" - ] - }, - "Web/API/notification/Notification": { - "modified": "2020-10-15T22:34:41.434Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/Using_Web_Notifications": { - "modified": "2019-03-23T22:59:38.508Z", - "contributors": [ - "nhoizey", - "ajie62", - "Kazquo", - "Hell_Carlito", - "JeffD", - "3bandiste", - "Goofy", - "Moosh" - ] - }, - "Web/API/notification/actions": { - "modified": "2020-10-15T22:34:52.498Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/badge": { - "modified": "2020-10-15T22:34:53.335Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/body": { - "modified": "2020-10-15T22:34:54.457Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/close": { - "modified": "2020-10-15T22:34:52.199Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/data": { - "modified": "2020-10-15T22:34:54.481Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/dir": { - "modified": "2020-10-15T22:34:54.338Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/icon": { - "modified": "2020-10-15T22:34:54.321Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/image": { - "modified": "2020-10-15T22:34:54.254Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/lang": { - "modified": "2020-10-15T22:34:54.385Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/maxActions": { - "modified": "2020-10-15T22:34:53.286Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/onclick": { - "modified": "2020-10-15T21:46:42.833Z", - "contributors": [ - "SphinxKnight", - "matthieurambert" - ] - }, - "Web/API/notification/onclose": { - "modified": "2020-10-15T22:34:55.643Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/onerror": { - "modified": "2020-10-15T22:34:55.473Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/onshow": { - "modified": "2020-10-15T22:34:55.503Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/permission": { - "modified": "2020-10-15T22:34:55.540Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/renotify": { - "modified": "2020-10-15T22:34:56.481Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/requestPermission": { - "modified": "2020-10-15T22:34:52.487Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/requireInteraction": { - "modified": "2020-10-15T22:34:56.272Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/silent": { - "modified": "2020-10-15T22:34:55.185Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/tag": { - "modified": "2020-10-15T22:34:55.217Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/timestamp": { - "modified": "2020-10-15T22:34:55.519Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/title": { - "modified": "2020-10-15T22:34:56.301Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/notification/vibrate": { - "modified": "2020-10-15T22:34:56.431Z", - "contributors": [ - "tomderudder" - ] - }, - "Web/API/window/location": { - "modified": "2019-03-23T23:59:30.762Z", - "contributors": [ - "Mahabarata", - "fscholz", - "maelito", - "tregagnon", - "Julien.stuby", - "Mgjbot", - "BenoitL" - ] - }, - "Web/Accessibility/ARIA/widgets": { - "modified": "2019-01-16T21:44:15.383Z", - "contributors": [ - "Waxaal", - "julianosilvaa" - ] - }, - "Web/Accessibility/ARIA/widgets/overview": { - "modified": "2019-03-23T22:43:55.361Z", - "contributors": [ - "paul.bignier" - ] - }, - "Web/Accessibility/Understanding_WCAG": { - "modified": "2020-09-07T05:15:13.925Z", - "contributors": [ - "Voulto" - ] - }, - "Web/Accessibility/Understanding_WCAG/Perceivable": { - "modified": "2020-04-12T14:23:45.963Z", - "contributors": [ - "chrisdavidmills" - ] - }, - "Web/Accessibility/Understanding_WCAG/Perceivable/Contraste_de_la_couleur": { - "modified": "2020-05-11T17:06:50.947Z", - "contributors": [ - "ewen-lbh", - "Maxi_Mega" - ] - }, - "Web/CSS": { - "modified": "2020-08-12T16:33:21.340Z", - "contributors": [ - "frmovies", - "zephimir", - "SphinxKnight", - "adagioribbit", - "goofy_mdn", - "codingk8", - "juliendargelos", - "BenoitL", - "eerrtrr", - "tonybengue", - "Mozinet", - "romain.bohdanowicz", - "Daniel005", - "magikmanu", - "Oliviermoz", - "teoli", - "wakka27", - "Goofy", - "FredB", - "Delapouite", - "tregagnon", - "jackblack", - "Mgjbot", - "Fredchat", - "VincentN", - "Chbok", - "Bpruneau", - "Laurent Denis", - "Jean-Yves Cronier", - "Nickolay", - "Cbeard", - "TestUser" - ] - }, - "Web/CSS/--*": { - "modified": "2020-10-15T21:43:41.268Z", - "contributors": [ - "SphinxKnight", - "lp177", - "Sagiliste", - "xdelatour" - ] - }, - "Web/CSS/-moz-box-ordinal-group": { - "modified": "2019-04-05T07:25:19.546Z", - "contributors": [ - "SphinxKnight", - "teoli", - "quentin.lamamy" - ] - }, - "Web/CSS/-moz-cell": { - "modified": "2019-04-05T07:25:43.783Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/-moz-context-properties": { - "modified": "2020-10-15T21:54:21.107Z", - "contributors": [ - "SphinxKnight", - "teoli", - "PolariTOON" - ] - }, - "Web/CSS/-moz-float-edge": { - "modified": "2019-04-05T07:27:19.851Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-moz-force-broken-image-icon": { - "modified": "2019-04-05T07:26:56.277Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "louuis" - ] - }, - "Web/CSS/-moz-image-rect": { - "modified": "2020-10-15T21:37:22.128Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "teoli", - "pixoux" - ] - }, - "Web/CSS/-moz-image-region": { - "modified": "2020-10-15T21:18:05.925Z", - "contributors": [ - "SphinxKnight", - "teoli", - "gudoy", - "FredB", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/-moz-orient": { - "modified": "2020-10-15T21:28:10.504Z", - "contributors": [ - "SphinxKnight", - "teoli", - "louuis" - ] - }, - "Web/CSS/-moz-outline-radius": { - "modified": "2020-10-15T21:18:04.818Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/-moz-outline-radius-bottomleft": { - "modified": "2019-08-07T07:41:04.258Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Fredchat" - ] - }, - "Web/CSS/-moz-outline-radius-bottomright": { - "modified": "2019-08-07T07:41:12.958Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Fredchat" - ] - }, - "Web/CSS/-moz-outline-radius-topleft": { - "modified": "2019-08-07T07:41:19.867Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Fredchat" - ] - }, - "Web/CSS/-moz-outline-radius-topright": { - "modified": "2019-08-07T07:41:29.133Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Fredchat" - ] - }, - "Web/CSS/-moz-user-focus": { - "modified": "2020-10-15T21:48:29.475Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-moz-user-input": { - "modified": "2020-10-15T21:18:06.870Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/-ms-high-contrast": { - "modified": "2019-04-06T12:02:58.663Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-ms-scroll-snap-type": { - "modified": "2019-03-18T21:33:34.445Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-ms-user-select": { - "modified": "2019-03-18T21:33:21.174Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-border-before": { - "modified": "2020-10-15T21:48:29.989Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-webkit-box-reflect": { - "modified": "2020-10-15T21:48:31.768Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-webkit-line-clamp": { - "modified": "2020-10-15T22:18:53.977Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-mask-attachment": { - "modified": "2020-10-15T21:48:27.080Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-webkit-mask-box-image": { - "modified": "2020-10-15T21:33:47.333Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Sebastianz", - "mrstork", - "lbelavoir" - ] - }, - "Web/CSS/-webkit-mask-composite": { - "modified": "2020-10-15T21:48:30.437Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-webkit-mask-image": { - "modified": "2019-03-23T22:58:08.427Z", - "contributors": [ - "mrstork", - "ZorGleH" - ] - }, - "Web/CSS/-webkit-mask-position-x": { - "modified": "2020-10-15T21:48:29.056Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-webkit-mask-position-y": { - "modified": "2020-10-15T21:48:27.575Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-webkit-mask-repeat-x": { - "modified": "2020-10-15T21:48:28.359Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-mask-repeat-y": { - "modified": "2020-10-15T21:48:28.259Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-overflow-scrolling": { - "modified": "2020-10-15T21:33:11.491Z", - "contributors": [ - "SphinxKnight", - "alhuno1" - ] - }, - "Web/CSS/-webkit-print-color-adjust": { - "modified": "2020-10-15T21:28:10.335Z", - "contributors": [ - "SphinxKnight", - "CuteRabbit", - "louuis" - ] - }, - "Web/CSS/-webkit-tap-highlight-color": { - "modified": "2019-04-26T02:53:32.938Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/-webkit-text-fill-color": { - "modified": "2020-10-15T21:43:41.928Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/-webkit-text-security": { - "modified": "2019-05-23T08:23:14.321Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-text-stroke": { - "modified": "2020-11-09T04:48:47.938Z", - "contributors": [ - "sideshowbarker", - "codingdudecom", - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-text-stroke-color": { - "modified": "2020-10-15T21:48:27.834Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-text-stroke-width": { - "modified": "2020-10-15T21:48:26.220Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/-webkit-touch-callout": { - "modified": "2020-10-15T21:37:55.730Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/:-moz-broken": { - "modified": "2019-04-05T07:47:01.932Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/:-moz-drag-over": { - "modified": "2019-04-05T07:46:45.615Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/:-moz-first-node": { - "modified": "2019-04-05T07:46:35.367Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/:-moz-focusring": { - "modified": "2020-10-15T21:48:30.571Z", - "contributors": [ - "SphinxKnight", - "teoli", - "claudepache" - ] - }, - "Web/CSS/:-moz-handler-blocked": { - "modified": "2019-04-05T07:44:27.221Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/:-moz-handler-crashed": { - "modified": "2019-04-05T07:44:15.559Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/:-moz-handler-disabled": { - "modified": "2019-04-05T07:44:05.413Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/:-moz-last-node": { - "modified": "2019-04-05T07:43:47.239Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/:-moz-loading": { - "modified": "2019-04-05T07:43:32.819Z", - "contributors": [ - "SphinxKnight", - "teoli", - "J.DMB", - "louuis" - ] - }, - "Web/CSS/:-moz-locale-dir(ltr)": { - "modified": "2019-04-05T07:42:37.438Z", - "contributors": [ - "SphinxKnight", - "teoli", - "boby_drack" - ] - }, - "Web/CSS/:-moz-locale-dir(rtl)": { - "modified": "2019-04-05T07:42:24.268Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/:-moz-only-whitespace": { - "modified": "2020-10-15T21:15:44.286Z", - "contributors": [ - "SphinxKnight", - "louisgrasset", - "lp177", - "teoli", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/:-moz-submit-invalid": { - "modified": "2020-10-15T21:46:06.689Z", - "contributors": [ - "SphinxKnight", - "teoli", - "xdelatour" - ] - }, - "Web/CSS/:-moz-suppressed": { - "modified": "2019-04-05T09:23:47.517Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Fredchat", - "louuis" - ] - }, - "Web/CSS/:-moz-ui-invalid": { - "modified": "2020-10-15T21:48:22.953Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/:-moz-ui-valid": { - "modified": "2020-10-15T21:48:25.437Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Aaaaaaa" - ] - }, - "Web/CSS/:-moz-user-disabled": { - "modified": "2019-04-05T09:18:22.670Z", - "contributors": [ - "SphinxKnight", - "teoli", - "xdelatour" - ] - }, - "Web/CSS/:-moz-window-inactive": { - "modified": "2020-10-15T21:48:27.167Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/:-ms-input-placeholder": { - "modified": "2019-05-28T09:44:44.784Z", - "contributors": [ - "brunostasse", - "teoli", - "SphinxKnight" - ] - }, - "Web/CSS/:-webkit-autofill": { - "modified": "2020-10-15T21:48:21.767Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-moz-color-swatch": { - "modified": "2020-10-15T22:02:12.946Z", - "contributors": [ - "SphinxKnight", - "tonybengue" - ] - }, - "Web/CSS/::-moz-list-bullet": { - "modified": "2019-04-05T09:17:36.311Z", - "contributors": [ - "SphinxKnight", - "teoli", - "xdelatour" - ] - }, - "Web/CSS/::-moz-list-number": { - "modified": "2019-04-05T09:17:28.748Z", - "contributors": [ - "SphinxKnight", - "teoli", - "xdelatour" - ] - }, - "Web/CSS/::-moz-page": { - "modified": "2020-10-15T21:44:27.397Z", - "contributors": [ - "SphinxKnight", - "teoli", - "xdelatour" - ] - }, - "Web/CSS/::-moz-page-sequence": { - "modified": "2020-10-15T21:48:23.764Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-moz-progress-bar": { - "modified": "2019-04-05T09:15:19.260Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Goofy", - "FredB", - "Delapouite", - "Zimmermann_Geoffrey" - ] - }, - "Web/CSS/::-moz-range-progress": { - "modified": "2020-10-15T21:48:21.065Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-moz-range-thumb": { - "modified": "2020-10-15T21:48:27.269Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-moz-range-track": { - "modified": "2020-10-15T21:48:19.960Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-moz-scrolled-page-sequence": { - "modified": "2020-10-15T21:48:22.005Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-webkit-file-upload-button": { - "modified": "2020-10-15T21:48:06.609Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-webkit-inner-spin-button": { - "modified": "2020-10-15T21:48:12.641Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-webkit-input-placeholder": { - "modified": "2019-03-18T21:41:58.383Z", - "contributors": [ - "teoli", - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-meter-bar": { - "modified": "2020-10-15T21:48:04.484Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-meter-even-less-good-value": { - "modified": "2020-10-15T21:48:04.434Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-meter-inner-element": { - "modified": "2020-10-15T21:48:12.603Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-meter-optimum-value": { - "modified": "2020-10-15T21:48:08.117Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-meter-suboptimum-value": { - "modified": "2020-10-15T21:48:01.492Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-outer-spin-button": { - "modified": "2020-10-15T21:48:38.423Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-webkit-progress-bar": { - "modified": "2020-10-15T21:48:02.594Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-webkit-progress-inner-element": { - "modified": "2020-10-15T21:48:02.637Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-progress-value": { - "modified": "2020-10-15T21:48:03.069Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-scrollbar": { - "modified": "2020-10-15T21:48:02.536Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-search-cancel-button": { - "modified": "2020-10-15T21:48:01.643Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-search-results-button": { - "modified": "2020-10-15T21:48:08.586Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::-webkit-slider-runnable-track": { - "modified": "2020-10-15T21:48:01.943Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::-webkit-slider-thumb": { - "modified": "2020-10-15T21:48:01.738Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/::after": { - "modified": "2020-10-15T21:08:32.107Z", - "contributors": [ - "AbdelElMansari", - "SphinxKnight", - "alegout", - "NemoNobobyPersonne", - "Ryanfarrah25", - "P45QU10U", - "tregagnon", - "teoli", - "wakka27", - "FredB", - "Delapouite", - "pixelastic", - "BenoitL", - "Nathymig", - "Mgjbot", - "Elethiomel", - "Fredchat" - ] - }, - "Web/CSS/::backdrop": { - "modified": "2020-10-15T21:45:46.376Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::before": { - "modified": "2020-10-15T21:08:27.713Z", - "contributors": [ - "ylerjen", - "SphinxKnight", - "wakka27", - "LaurentBarbareau", - "teoli", - "cloughy", - "lespacedunmatin", - "Fredchat", - "ferncoder", - "FredB", - "tregagnon", - "BenoitL", - "Nathymig", - "Mgjbot", - "Elethiomel" - ] - }, - "Web/CSS/::cue": { - "modified": "2020-10-15T21:55:21.153Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::cue-region": { - "modified": "2020-10-15T22:24:04.146Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/::first-letter": { - "modified": "2020-10-15T21:07:23.625Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "yannicka", - "tregagnon", - "teoli", - "louuis", - "FredB" - ] - }, - "Web/CSS/::first-line": { - "modified": "2020-10-15T21:20:05.618Z", - "contributors": [ - "SphinxKnight", - "Yann Dìnendal", - "tregagnon", - "teoli", - "louuis", - "wakka27", - "FredB" - ] - }, - "Web/CSS/::grammar-error": { - "modified": "2020-10-15T21:43:46.302Z", - "contributors": [ - "SphinxKnight", - "lp177", - "xdelatour" - ] - }, - "Web/CSS/::marker": { - "modified": "2020-10-15T21:45:48.780Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/::part": { - "modified": "2020-10-15T22:20:01.491Z", - "contributors": [ - "SphinxKnight", - "verdy_p" - ] - }, - "Web/CSS/::placeholder": { - "modified": "2020-10-15T21:45:47.586Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/::selection": { - "modified": "2020-10-15T21:03:37.745Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "Matdonell", - "BenoitEsnard", - "tregagnon", - "teoli", - "louuis", - "FredB" - ] - }, - "Web/CSS/::slotted": { - "modified": "2020-10-15T22:01:37.195Z", - "contributors": [ - "samsad35", - "SphinxKnight", - "tonybengue" - ] - }, - "Web/CSS/::spelling-error": { - "modified": "2020-10-15T21:43:45.997Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/:active": { - "modified": "2020-10-15T21:08:24.445Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "gmetais", - "tregagnon", - "adevoufera", - "teoli", - "louuis", - "FredB", - "Delapouite", - "ThePrisoner" - ] - }, - "Web/CSS/:any": { - "modified": "2020-10-15T21:28:06.961Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "louuis" - ] - }, - "Web/CSS/:any-link": { - "modified": "2020-10-15T21:48:00.408Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/:blank": { - "modified": "2020-10-15T22:12:33.251Z", - "contributors": [ - "AbdelElMansari", - "SphinxKnight" - ] - }, - "Web/CSS/:checked": { - "modified": "2020-10-15T21:10:25.542Z", - "contributors": [ - "SphinxKnight", - "FredB", - "tregagnon", - "teoli", - "ThePrisoner" - ] - }, - "Web/CSS/:default": { - "modified": "2020-10-15T21:15:31.751Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "FredB", - "Mgjbot", - "BenoitL" - ] - }, - "Web/CSS/:defined": { - "modified": "2020-10-15T22:01:14.016Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/:dir": { - "modified": "2020-10-15T21:20:01.114Z", - "contributors": [ - "SphinxKnight", - "lp177", - "tregagnon", - "teoli", - "FredB" - ] - }, - "Web/CSS/:disabled": { - "modified": "2020-10-15T21:08:18.977Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "FredB" - ] - }, - "Web/CSS/:empty": { - "modified": "2020-10-15T21:10:25.873Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "tregagnon", - "teoli", - "FredB", - "ThePrisoner", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/:enabled": { - "modified": "2020-10-15T21:08:16.083Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "FredB" - ] - }, - "Web/CSS/:first": { - "modified": "2020-10-15T21:08:24.606Z", - "contributors": [ - "sizvix", - "cestoliv", - "SphinxKnight", - "edspeedy", - "teoli", - "tregagnon", - "FredB" - ] - }, - "Web/CSS/:first-child": { - "modified": "2020-10-15T21:10:31.316Z", - "contributors": [ - "SphinxKnight", - "teoli", - "dohzya", - "tregagnon", - "FredB", - "ThePrisoner", - "Fredchat" - ] - }, - "Web/CSS/:first-of-type": { - "modified": "2020-10-15T21:10:28.574Z", - "contributors": [ - "SphinxKnight", - "cdoublev", - "tregagnon", - "enogael", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:focus": { - "modified": "2020-10-15T21:10:39.154Z", - "contributors": [ - "Steph", - "SphinxKnight", - "tregagnon", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:focus-visible": { - "modified": "2020-10-15T22:06:41.459Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/:focus-within": { - "modified": "2020-10-15T21:49:33.879Z", - "contributors": [ - "SphinxKnight", - "PhilippeV" - ] - }, - "Web/CSS/:fullscreen": { - "modified": "2020-10-15T21:26:16.468Z", - "contributors": [ - "ChristopheBoucaut", - "teluric", - "SphinxKnight", - "LaurentBarbareau", - "Porkepix", - "Medhy_35", - "FredB", - "teoli", - "tregagnon" - ] - }, - "Web/CSS/:has": { - "modified": "2020-10-15T21:45:03.002Z", - "contributors": [ - "SphinxKnight", - "lp177", - "aduh95" - ] - }, - "Web/CSS/:host": { - "modified": "2020-10-15T22:02:19.051Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/:host()": { - "modified": "2020-10-15T22:02:15.628Z", - "contributors": [ - "SphinxKnight", - "tonybengue" - ] - }, - "Web/CSS/:host-context()": { - "modified": "2020-10-15T22:02:13.459Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/:hover": { - "modified": "2020-10-15T21:10:36.788Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "FredB", - "teoli", - "tregagnon", - "ThePrisoner", - "tcit" - ] - }, - "Web/CSS/:in-range": { - "modified": "2020-10-15T21:46:05.793Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/:indeterminate": { - "modified": "2020-10-15T21:08:18.181Z", - "contributors": [ - "artentica", - "SphinxKnight", - "jbuiquan", - "edspeedy", - "GeoffreyC.", - "Goofy", - "tregagnon", - "louuis", - "teoli", - "FredB" - ] - }, - "Web/CSS/:invalid": { - "modified": "2020-10-15T21:07:22.814Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "FredB" - ] - }, - "Web/CSS/:is": { - "modified": "2020-10-15T22:02:43.628Z", - "contributors": [ - "cdoublev", - "SphinxKnight", - "tonybengue", - "Dralyab" - ] - }, - "Web/CSS/:lang": { - "modified": "2020-10-15T21:08:15.878Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "louuis", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:last-child": { - "modified": "2020-10-15T21:10:26.996Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "Fredchat", - "louuis", - "teoli", - "FredB", - "ThePrisoner", - "Vivelefrat" - ] - }, - "Web/CSS/:last-of-type": { - "modified": "2020-10-15T21:10:28.351Z", - "contributors": [ - "06Games", - "SphinxKnight", - "tregagnon", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:left": { - "modified": "2020-10-15T21:08:38.277Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "FredB", - "Manu1400" - ] - }, - "Web/CSS/:link": { - "modified": "2020-10-15T21:10:29.359Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "FredB", - "Delapouite", - "ThePrisoner" - ] - }, - "Web/CSS/:not": { - "modified": "2020-10-15T21:10:32.618Z", - "contributors": [ - "SphinxKnight", - "efd", - "edspeedy", - "venotp", - "dackmin", - "tregagnon", - "teoli", - "tzilliox", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:nth-child": { - "modified": "2020-10-15T21:10:27.568Z", - "contributors": [ - "SphinxKnight", - "Jeremie", - "clementpolito", - "Dexter_Deter", - "teoli", - "tregagnon", - "FredB", - "DavidWalsh", - "ThePrisoner" - ] - }, - "Web/CSS/:nth-last-child": { - "modified": "2020-10-15T21:10:37.297Z", - "contributors": [ - "SphinxKnight", - "loicbourg", - "teoli", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:nth-last-of-type": { - "modified": "2020-10-15T21:10:39.125Z", - "contributors": [ - "SphinxKnight", - "FredB", - "teoli", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/CSS/:nth-of-type": { - "modified": "2020-10-15T21:10:26.292Z", - "contributors": [ - "cdoublev", - "SphinxKnight", - "Groutch", - "yatoogamii", - "teoli", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:only-child": { - "modified": "2020-10-15T21:07:18.968Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "Fredchat", - "louuis", - "teoli", - "FredB" - ] - }, - "Web/CSS/:only-of-type": { - "modified": "2020-10-15T21:10:36.883Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:optional": { - "modified": "2020-10-15T21:07:19.786Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "FredB" - ] - }, - "Web/CSS/:out-of-range": { - "modified": "2020-10-15T21:33:47.653Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/CSS/:placeholder-shown": { - "modified": "2020-10-15T21:49:18.000Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/:read-only": { - "modified": "2020-10-15T21:41:39.400Z", - "contributors": [ - "SphinxKnight", - "Norihiori", - "NathanB" - ] - }, - "Web/CSS/:read-write": { - "modified": "2020-10-15T21:19:38.171Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "FredB" - ] - }, - "Web/CSS/:required": { - "modified": "2020-10-15T21:08:14.776Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "FredB" - ] - }, - "Web/CSS/:right": { - "modified": "2020-10-15T21:08:33.609Z", - "contributors": [ - "SphinxKnight", - "FredB", - "teoli", - "tregagnon", - "Manu1400" - ] - }, - "Web/CSS/:root": { - "modified": "2020-10-15T21:10:27.339Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:scope": { - "modified": "2020-10-15T21:28:07.626Z", - "contributors": [ - "Maxi_Mega", - "SphinxKnight", - "b1nj", - "J.DMB", - "teoli", - "louuis" - ] - }, - "Web/CSS/:target": { - "modified": "2020-10-15T21:10:33.875Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/:valid": { - "modified": "2020-10-15T21:18:37.134Z", - "contributors": [ - "SphinxKnight", - "viki53", - "enogael", - "FredB", - "teoli", - "tregagnon" - ] - }, - "Web/CSS/:visited": { - "modified": "2020-10-15T21:10:37.542Z", - "contributors": [ - "yannicka", - "SphinxKnight", - "flexbox", - "FredB", - "teoli", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/CSS/:visited_et_la_vie_privée": { - "modified": "2019-04-06T13:09:09.164Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/:where": { - "modified": "2020-10-15T22:12:34.192Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@charset": { - "modified": "2020-10-15T21:10:24.532Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "Guillaume-Heras", - "fscholz", - "FredB", - "teoli", - "jdvauguet", - "ThePrisoner" - ] - }, - "Web/CSS/@counter-style": { - "modified": "2020-10-15T21:46:29.639Z", - "contributors": [ - "VictorLequin", - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/additive-symbols": { - "modified": "2020-10-15T21:46:29.610Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/fallback": { - "modified": "2020-10-15T21:46:38.184Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/negative": { - "modified": "2020-10-15T21:46:39.589Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/pad": { - "modified": "2020-10-15T21:46:39.962Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/prefix": { - "modified": "2020-10-15T21:46:43.969Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/range": { - "modified": "2020-10-15T21:46:41.181Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/speak-as": { - "modified": "2020-10-15T21:46:42.317Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/suffix": { - "modified": "2020-10-15T21:46:49.763Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/symbols": { - "modified": "2020-10-15T21:46:43.930Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@counter-style/system": { - "modified": "2020-10-15T21:46:44.513Z", - "contributors": [ - "SphinxKnight", - "personnel" - ] - }, - "Web/CSS/@document": { - "modified": "2020-10-15T21:28:07.583Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "fscholz", - "FredB", - "teoli" - ] - }, - "Web/CSS/@font-face": { - "modified": "2020-10-15T21:14:44.961Z", - "contributors": [ - "SphinxKnight", - "mh_nichts", - "fscholz", - "mleduque", - "Qu3tzalify", - "teoli", - "PifyZ", - "FredB", - "naar", - "Jürgen Jeka", - "BenoitL", - "Fredchat", - "Valacar", - "Huchezal", - "SebMouren" - ] - }, - "Web/CSS/@font-face/font-display": { - "modified": "2020-10-15T21:48:25.337Z", - "contributors": [ - "SphinxKnight", - "davidwerbrouck", - "tpillard", - "frlinw" - ] - }, - "Web/CSS/@font-face/font-family": { - "modified": "2020-10-15T21:46:27.023Z", - "contributors": [ - "SphinxKnight", - "personnel", - "Gibus" - ] - }, - "Web/CSS/@font-face/font-stretch": { - "modified": "2020-10-15T22:24:06.161Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@font-face/font-style": { - "modified": "2020-10-15T21:46:53.998Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@font-face/font-variation-settings": { - "modified": "2020-10-15T22:02:45.623Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@font-face/font-weight": { - "modified": "2020-10-15T22:24:04.613Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@font-face/src": { - "modified": "2020-10-15T21:49:16.995Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@font-face/unicode-range": { - "modified": "2020-10-15T21:46:51.127Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@font-feature-values": { - "modified": "2020-10-15T21:46:50.242Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@import": { - "modified": "2020-10-15T21:18:11.323Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "VincentN", - "Fredchat" - ] - }, - "Web/CSS/@keyframes": { - "modified": "2020-11-05T12:26:09.223Z", - "contributors": [ - "julienw", - "SphinxKnight", - "lhapaipai", - "Matschik", - "ghivert", - "fscholz", - "Sheppy", - "teoli", - "LaChouette" - ] - }, - "Web/CSS/@media": { - "modified": "2020-10-15T21:18:17.901Z", - "contributors": [ - "SphinxKnight", - "ferdi_", - "edspeedy", - "fscholz", - "Chealer", - "teoli", - "wakka27", - "FredB", - "VincentN", - "ethertank", - "Fredchat" - ] - }, - "Web/CSS/@media/-moz-device-pixel-ratio": { - "modified": "2020-10-15T21:58:09.229Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/-webkit-animation": { - "modified": "2020-10-15T21:48:23.920Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/@media/-webkit-device-pixel-ratio": { - "modified": "2020-10-15T21:48:22.736Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/-webkit-transform-2d": { - "modified": "2020-10-15T21:48:23.969Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/@media/-webkit-transform-3d": { - "modified": "2020-10-15T21:48:18.449Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/-webkit-transition": { - "modified": "2020-10-15T21:48:23.562Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/@media/Index": { - "modified": "2019-04-06T12:02:15.887Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/any-hover": { - "modified": "2020-10-15T21:47:18.453Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/any-pointer": { - "modified": "2020-10-15T21:47:16.191Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/aspect-ratio": { - "modified": "2020-10-15T21:47:21.069Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/aural": { - "modified": "2019-04-06T12:01:18.819Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/@media/color": { - "modified": "2020-10-15T21:43:28.940Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/@media/color-gamut": { - "modified": "2020-10-15T21:55:30.101Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/color-index": { - "modified": "2020-10-15T21:44:30.610Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/@media/device-aspect-ratio": { - "modified": "2020-10-15T21:47:20.425Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/device-height": { - "modified": "2020-10-15T21:47:23.040Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/device-width": { - "modified": "2020-10-15T21:47:23.467Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/display-mode": { - "modified": "2020-10-15T21:47:18.852Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/forced-colors": { - "modified": "2020-10-15T22:20:18.237Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/grid": { - "modified": "2020-10-15T21:47:19.575Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/height": { - "modified": "2020-10-15T21:47:19.978Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/hover": { - "modified": "2020-10-15T21:47:18.517Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/inverted-colors": { - "modified": "2020-10-15T21:47:20.806Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/monochrome": { - "modified": "2020-10-15T21:47:20.532Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/orientation": { - "modified": "2020-10-15T21:43:29.519Z", - "contributors": [ - "SphinxKnight", - "damiencaselli", - "xdelatour" - ] - }, - "Web/CSS/@media/overflow-block": { - "modified": "2020-10-15T21:47:24.131Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/overflow-inline": { - "modified": "2020-10-15T21:47:19.850Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/pointer": { - "modified": "2020-10-15T21:47:18.966Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/prefers-color-scheme": { - "modified": "2020-10-15T22:11:37.399Z", - "contributors": [ - "bopol", - "AbdelElMansari", - "SphinxKnight" - ] - }, - "Web/CSS/@media/prefers-contrast": { - "modified": "2020-10-15T22:20:20.152Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/prefers-reduced-motion": { - "modified": "2020-10-15T22:10:02.862Z", - "contributors": [ - "Neilyroth", - "SphinxKnight" - ] - }, - "Web/CSS/@media/prefers-reduced-transparency": { - "modified": "2020-10-15T22:20:20.333Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/resolution": { - "modified": "2020-10-15T21:47:24.193Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/scan": { - "modified": "2020-10-15T21:47:29.526Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/scripting": { - "modified": "2020-10-15T21:47:29.228Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/shape": { - "modified": "2020-10-15T22:21:05.763Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/update-frequency": { - "modified": "2020-10-15T21:47:29.603Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@media/width": { - "modified": "2020-10-15T21:47:29.961Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@namespace": { - "modified": "2020-10-15T21:47:29.816Z", - "contributors": [ - "SphinxKnight", - "HTeuMeuLeu" - ] - }, - "Web/CSS/@page": { - "modified": "2020-10-15T21:21:45.119Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "Skoua" - ] - }, - "Web/CSS/@page/bleed": { - "modified": "2020-10-15T21:47:32.177Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@page/marks": { - "modified": "2020-10-15T21:20:05.400Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB" - ] - }, - "Web/CSS/@page/size": { - "modified": "2020-10-15T21:47:32.255Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@supports": { - "modified": "2020-10-15T21:21:41.949Z", - "contributors": [ - "regseb", - "SphinxKnight", - "edspeedy", - "fscholz", - "teoli", - "FredB" - ] - }, - "Web/CSS/@viewport": { - "modified": "2020-10-15T21:21:36.008Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "J.DMB", - "louuis", - "teoli", - "Igro", - "FredB", - "Delapouite" - ] - }, - "Web/CSS/@viewport/height": { - "modified": "2020-10-15T21:47:32.203Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/max-height": { - "modified": "2020-10-15T21:47:31.282Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/max-width": { - "modified": "2020-10-15T21:47:34.574Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/max-zoom": { - "modified": "2020-10-15T21:46:46.765Z", - "contributors": [ - "SphinxKnight", - "HerveRenault", - "Akitoshi" - ] - }, - "Web/CSS/@viewport/min-height": { - "modified": "2020-10-15T21:47:36.736Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/min-width": { - "modified": "2020-10-15T21:47:32.971Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/min-zoom": { - "modified": "2020-10-15T21:47:33.735Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/orientation": { - "modified": "2020-10-15T21:47:32.251Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/user-zoom": { - "modified": "2020-10-15T21:47:36.683Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/viewport-fit": { - "modified": "2020-10-15T22:10:03.823Z", - "contributors": [ - "duduindo", - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/width": { - "modified": "2020-10-15T21:47:33.307Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/@viewport/zoom": { - "modified": "2020-10-15T21:47:36.061Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/A_Propos_Du_Bloc_Conteneur": { - "modified": "2020-09-13T07:51:15.383Z", - "contributors": [ - "devscipline", - "alattalatta", - "SphinxKnight", - "Frigory", - "loganblangenois" - ] - }, - "Web/CSS/Animations_CSS": { - "modified": "2020-10-15T21:40:14.931Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/Animations_CSS/Conseils": { - "modified": "2019-04-06T12:14:05.389Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Animations_CSS/Détecter_la_prise_en_charge_des_animations_CSS": { - "modified": "2019-04-06T12:13:54.913Z", - "contributors": [ - "SphinxKnight", - "wbamberg" - ] - }, - "Web/CSS/Animations_CSS/Utiliser_les_animations_CSS": { - "modified": "2019-09-12T15:12:07.417Z", - "contributors": [ - "SphinxKnight", - "Hytsar", - "Zgore14", - "magikmanu", - "Iwazaru", - "teoli", - "lapinter", - "FredB" - ] - }, - "Web/CSS/Arrière-plans_et_bordures_CSS": { - "modified": "2019-04-19T04:03:57.429Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/Arrière-plans_et_bordures_CSS/Générateur_border-image": { - "modified": "2019-03-23T22:30:30.328Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Arrière-plans_et_bordures_CSS/Générateur_border-radius": { - "modified": "2019-03-23T22:30:26.745Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Block_formatting_context": { - "modified": "2019-05-18T12:20:40.602Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/CSS/CSSOM_View": { - "modified": "2020-10-15T21:47:55.001Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSSOM_View/Systèmes_de_coordonnées": { - "modified": "2019-04-06T13:17:41.411Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Backgrounds_and_Borders": { - "modified": "2019-04-06T12:13:22.172Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Backgrounds_and_Borders/Scaling_background_images": { - "modified": "2019-06-18T19:28:42.872Z", - "contributors": [ - "SphinxKnight", - "jcisio" - ] - }, - "Web/CSS/CSS_Backgrounds_and_Borders/Utiliser_plusieurs_arrière-plans": { - "modified": "2019-04-06T12:13:04.362Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Basic_User_Interface": { - "modified": "2019-04-26T03:46:44.475Z", - "contributors": [ - "SphinxKnight", - "ExE-Boss" - ] - }, - "Web/CSS/CSS_Basic_User_Interface/Utilisation_d_URL_pour_la_propriété_cursor": { - "modified": "2019-04-06T12:43:13.926Z", - "contributors": [ - "SphinxKnight", - "ExE-Boss", - "teoli", - "Kyodev", - "Mgjbot", - "Sheppy", - "BenoitL", - "Fredchat", - "Learning", - "Chbok" - ] - }, - "Web/CSS/CSS_Box_Alignment": { - "modified": "2019-04-06T12:42:39.208Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Box_Alignment/Alignement_boîtes_disposition_Flexbox": { - "modified": "2019-04-26T03:47:25.587Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Box_Alignment/Alignement_boîtes_disposition_bloc_absolue_tableau": { - "modified": "2019-04-06T12:43:22.538Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Box_Alignment/Alignement_boîtes_disposition_colonnes": { - "modified": "2019-04-06T12:43:28.533Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Box_Alignment/Alignement_boîtes_disposition_grille": { - "modified": "2019-04-06T12:42:13.894Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Color": { - "modified": "2020-10-15T22:02:12.684Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Columns": { - "modified": "2019-03-23T22:43:50.171Z", - "contributors": [ - "SphinxKnight", - "Sebastianz" - ] - }, - "Web/CSS/CSS_Columns/Concepts_base_multi-colonnes": { - "modified": "2019-04-06T12:54:10.082Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Columns/Gestion_dépassement_multi-colonnes": { - "modified": "2019-04-06T12:53:58.823Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Columns/Gérer_rupture_contenu_entre_colonnes": { - "modified": "2019-04-06T12:53:51.858Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Columns/Mettre_en_forme_les_colonnes": { - "modified": "2019-07-12T07:43:39.985Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Columns/Répartir_entre_les_colonnes": { - "modified": "2019-04-06T12:53:13.456Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Columns/Utiliser_une_disposition_multi-colonnes": { - "modified": "2019-04-26T04:16:31.564Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "louuis", - "Delapouite", - "FredB", - "tregagnon", - "Fredchat", - "BenoitL", - "Mgjbot", - "Jorolo", - "Chbok" - ] - }, - "Web/CSS/CSS_Conditional_Rules": { - "modified": "2020-10-15T21:44:14.343Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Conditional_Rules/Utiliser_requêtes_fonctionnalité_(feature_queries)": { - "modified": "2019-11-04T09:09:49.786Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Counter_Styles": { - "modified": "2020-10-15T21:58:13.628Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Device_Adaptation": { - "modified": "2020-10-15T21:44:13.646Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Display": { - "modified": "2020-10-15T21:44:13.926Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout": { - "modified": "2019-08-18T10:02:17.518Z", - "contributors": [ - "patboens", - "SphinxKnight", - "fscholz" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Aligner_des_éléments_dans_un_conteneur_flexible": { - "modified": "2020-05-15T19:19:41.021Z", - "contributors": [ - "lhapaipai", - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Boîtes_flexibles_pour_applications_web": { - "modified": "2019-03-23T22:29:57.804Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Cas_utilisation_flexbox": { - "modified": "2019-04-06T12:35:25.205Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Concepts_de_base_flexbox": { - "modified": "2019-04-06T12:37:54.531Z", - "contributors": [ - "SphinxKnight", - "PolPasop", - "Goofy" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Contrôler_les_proportions_des_boîtes_flexibles_le_long_de_l_axe_principal": { - "modified": "2019-04-06T12:38:05.161Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Liens_entre_flexbox_et_les_autres_dispositions": { - "modified": "2019-04-01T10:49:49.132Z", - "contributors": [ - "lhapaipai", - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Maîtriser_passage_à_la_ligne_des_éléments_flexibles": { - "modified": "2019-04-06T12:37:23.388Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Mixins": { - "modified": "2019-04-06T12:37:32.698Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "pixoux" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Ordonner_éléments_flexibles": { - "modified": "2019-04-06T12:35:46.732Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/CSS/CSS_Flexible_Box_Layout/Rétrocompatibilite_de_flexbox": { - "modified": "2019-04-06T12:38:31.267Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flow_Layout": { - "modified": "2019-04-06T12:35:10.609Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flow_Layout/Dans_le_flux_ou_en_dehors": { - "modified": "2019-04-06T12:34:12.506Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flow_Layout/Disposition_de_bloc_en_ligne_avec_flux_normal": { - "modified": "2019-08-05T13:45:58.006Z", - "contributors": [ - "SphinxKnight", - "edspeedy" - ] - }, - "Web/CSS/CSS_Flow_Layout/Disposition_flux_et_dépassement": { - "modified": "2019-04-06T12:34:48.167Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flow_Layout/Disposition_flux_et_modes_écriture": { - "modified": "2019-04-06T12:34:40.772Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Flow_Layout/Explications_contextes_formatage": { - "modified": "2019-06-19T08:53:49.103Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Fonts": { - "modified": "2020-09-29T14:45:42.143Z", - "contributors": [ - "sylozof", - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Fonts/Guide_caractéristiques_police_OpenType": { - "modified": "2019-04-06T12:33:40.801Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Fonts/Guide_polices_variables": { - "modified": "2019-08-23T17:50:35.852Z", - "contributors": [ - "JNa0", - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Fragmentation": { - "modified": "2019-04-06T12:33:06.910Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Generated_Content": { - "modified": "2019-04-26T03:48:56.862Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Grid_Layout": { - "modified": "2019-05-23T08:33:35.461Z", - "contributors": [ - "SphinxKnight", - "ferdi_", - "marie-ototoi", - "xdelatour" - ] - }, - "Web/CSS/CSS_Grid_Layout/Alignement_des_boîtes_avec_les_grilles_CSS": { - "modified": "2020-05-31T18:37:07.590Z", - "contributors": [ - "fesaille", - "SphinxKnight", - "Kalwyn" - ] - }, - "Web/CSS/CSS_Grid_Layout/Construire_des_dispositions_courantes_avec_des_grilles_CSS": { - "modified": "2020-05-31T18:37:07.771Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Grid_Layout/Définir_des_zones_sur_une_grille": { - "modified": "2020-05-31T18:37:07.195Z", - "contributors": [ - "SphinxKnight", - "JivaHard" - ] - }, - "Web/CSS/CSS_Grid_Layout/Les_concepts_de_base": { - "modified": "2020-05-31T18:37:07.467Z", - "contributors": [ - "SphinxKnight", - "Dev-Crea", - "Goofy", - "Halkeand", - "JeffD", - "marec", - "marie-ototoi" - ] - }, - "Web/CSS/CSS_Grid_Layout/Les_grilles_CSS_et_l_accessibilité": { - "modified": "2020-05-31T18:37:07.017Z", - "contributors": [ - "SphinxKnight", - "ldvc", - "Terag" - ] - }, - "Web/CSS/CSS_Grid_Layout/Les_grilles_CSS_et_l_amélioration_progressive": { - "modified": "2020-05-31T18:37:08.537Z", - "contributors": [ - "SphinxKnight", - "alexr" - ] - }, - "Web/CSS/CSS_Grid_Layout/Les_grilles_CSS_les_valeurs_logiques_les_modes_d_écriture": { - "modified": "2020-05-31T18:37:09.641Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Grid_Layout/Modèle_de_grille_et_autres_modèles_de_disposition": { - "modified": "2020-09-14T10:03:49.856Z", - "contributors": [ - "devscipline", - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Grid_Layout/Placement_automatique_sur_une_grille_CSS": { - "modified": "2020-05-31T18:37:07.981Z", - "contributors": [ - "lhapaipai", - "SphinxKnight", - "mathieuLacroix", - "alexr" - ] - }, - "Web/CSS/CSS_Grid_Layout/Placer_les_éléments_sur_les_lignes_d_une_grille_CSS": { - "modified": "2020-05-31T18:37:09.049Z", - "contributors": [ - "SphinxKnight", - "Alan_Braut" - ] - }, - "Web/CSS/CSS_Grid_Layout/Subgrid": { - "modified": "2019-11-13T15:40:12.000Z", - "contributors": [ - "Loliwe", - "Lo_h", - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Grid_Layout/Utiliser_des_lignes_nommées_sur_une_grille": { - "modified": "2020-05-31T18:37:08.613Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Images": { - "modified": "2019-04-06T12:28:36.193Z", - "contributors": [ - "SphinxKnight", - "wizAmit", - "xdelatour", - "mrstork" - ] - }, - "Web/CSS/CSS_Images/Sprites_CSS": { - "modified": "2019-06-03T14:14:53.416Z", - "contributors": [ - "SphinxKnight", - "Horsell", - "JeffD", - "PifyZ" - ] - }, - "Web/CSS/CSS_Lists": { - "modified": "2019-07-12T07:42:40.998Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Lists/Compteurs_CSS": { - "modified": "2019-07-27T03:11:03.371Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Delapouite", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/CSS_Lists/Indentation_homogène_des_listes": { - "modified": "2019-04-06T12:56:13.956Z", - "contributors": [ - "SphinxKnight", - "tonybengue", - "Kyodev", - "BenoitL", - "Ferbenoit", - "Laurent Denis" - ] - }, - "Web/CSS/CSS_Logical_Properties": { - "modified": "2019-06-18T19:34:36.043Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Logical_Properties/Concepts_de_base": { - "modified": "2019-04-06T12:55:47.785Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Logical_Properties/Dimensionnement": { - "modified": "2019-04-06T12:54:33.371Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Logical_Properties/Propriétés_logiques_flottements_positionnement": { - "modified": "2019-06-03T14:16:43.059Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Logical_Properties/Propriétés_logiques_marges_bordures_remplissages": { - "modified": "2019-04-06T12:55:25.631Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Masks": { - "modified": "2019-04-27T13:46:10.634Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Miscellaneous": { - "modified": "2019-04-06T12:54:16.767Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Namespaces": { - "modified": "2020-10-15T21:44:29.065Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Overflow": { - "modified": "2019-11-04T14:40:28.794Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Pages": { - "modified": "2019-04-06T12:52:06.180Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Positioning": { - "modified": "2019-04-06T12:51:56.824Z", - "contributors": [ - "SphinxKnight", - "younes-14", - "xdelatour" - ] - }, - "Web/CSS/CSS_Properties_Reference": { - "modified": "2019-04-06T12:50:15.870Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Ruby": { - "modified": "2019-04-26T04:17:25.189Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Scroll_Snap": { - "modified": "2020-12-06T20:57:49.980Z", - "contributors": [ - "Rik", - "giloop", - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Scroll_Snap/Compatibilité_navigateurs": { - "modified": "2019-07-21T13:28:24.043Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Scroll_Snap/Concepts_de_base": { - "modified": "2019-06-18T19:40:17.355Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Scroll_Snap_Points": { - "modified": "2019-04-26T04:18:54.788Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Scrollbars": { - "modified": "2020-10-15T22:10:56.124Z", - "contributors": [ - "tristantheb", - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Shapes": { - "modified": "2019-04-26T04:23:36.000Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Shapes/Aperçu_formes_CSS": { - "modified": "2019-04-06T12:48:50.622Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Shapes/Créer_formes_boîtes": { - "modified": "2019-04-06T13:09:43.597Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Shapes/Formes_simples": { - "modified": "2019-04-06T12:49:01.114Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Shapes/Générer_formes_images": { - "modified": "2019-04-06T12:48:32.877Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Table": { - "modified": "2019-04-06T12:48:15.509Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Text": { - "modified": "2019-04-06T12:48:00.980Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Text_Decoration": { - "modified": "2019-04-06T13:10:17.701Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_Transforms": { - "modified": "2019-04-06T13:09:54.986Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "teoli" - ] - }, - "Web/CSS/CSS_Transforms/Utilisation_des_transformations_CSS": { - "modified": "2019-08-23T07:06:08.586Z", - "contributors": [ - "Flaburgan", - "SphinxKnight", - "edspeedy", - "fscholz", - "teoli", - "Delapouite", - "FredB", - "BenoitL" - ] - }, - "Web/CSS/CSS_Transitions": { - "modified": "2019-04-06T13:10:27.488Z", - "contributors": [ - "SphinxKnight", - "Gibus", - "amdufour" - ] - }, - "Web/CSS/CSS_Transitions/Utiliser_transitions_CSS": { - "modified": "2019-09-12T15:19:25.668Z", - "contributors": [ - "SphinxKnight", - "Nantosuelte", - "Louis-MarieMatthews", - "lotfire24", - "amdufour" - ] - }, - "Web/CSS/CSS_Variables": { - "modified": "2019-04-06T12:40:29.577Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/CSS_Writing_Modes": { - "modified": "2019-04-06T13:11:34.329Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/CSS_questions_frequentes": { - "modified": "2020-07-16T22:25:44.957Z", - "contributors": [ - "SphinxKnight", - "PetiPandaRou", - "MatthieuHa", - "teoli", - "laurent-thuy" - ] - }, - "Web/CSS/Combinateur_colonne": { - "modified": "2020-10-15T22:10:06.707Z", - "contributors": [ - "SphinxKnight", - "ExE-Boss" - ] - }, - "Web/CSS/Combinateur_de_voisin_direct": { - "modified": "2020-10-15T21:46:19.453Z", - "contributors": [ - "SphinxKnight", - "builgui", - "ffoodd" - ] - }, - "Web/CSS/Comments": { - "modified": "2019-04-06T13:14:39.069Z", - "contributors": [ - "SphinxKnight", - "juliemoynat", - "teoli", - "FredB", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/CSS/Compartimentation_CSS": { - "modified": "2019-11-04T14:25:26.741Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Compositing_and_Blending": { - "modified": "2020-10-15T22:02:46.274Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Comprendre_z-index": { - "modified": "2020-05-31T18:36:39.203Z", - "contributors": [ - "SphinxKnight", - "mo0z", - "Serrulien", - "teoli", - "tregagnon", - "BenoitL", - "Lapinkiller", - "Fredchat" - ] - }, - "Web/CSS/Comprendre_z-index/Ajout_de_z-index": { - "modified": "2020-05-31T18:36:38.468Z", - "contributors": [ - "SphinxKnight", - "christophe-petitjean", - "mo0z", - "Serrulien", - "teoli", - "tregagnon", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/Comprendre_z-index/Empilement_de_couches": { - "modified": "2020-05-31T18:36:40.196Z", - "contributors": [ - "v-Stein", - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/Comprendre_z-index/Empilement_et_float": { - "modified": "2020-05-31T18:36:35.517Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "teoli", - "tregagnon", - "BenoitL", - "Lapinkiller", - "Fredchat" - ] - }, - "Web/CSS/Comprendre_z-index/Empilement_sans_z-index": { - "modified": "2020-05-31T18:36:35.932Z", - "contributors": [ - "SphinxKnight", - "teoli", - "invitetheweb", - "tregagnon", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/Comprendre_z-index/Exemple_1": { - "modified": "2020-05-31T18:36:35.214Z", - "contributors": [ - "maximesanmartin", - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/Comprendre_z-index/Exemple_2": { - "modified": "2020-05-31T18:36:34.925Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "webskin", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/Comprendre_z-index/Exemple_3": { - "modified": "2020-05-31T18:36:35.162Z", - "contributors": [ - "maximesanmartin", - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/Concepts_viewport": { - "modified": "2019-05-23T08:44:33.152Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Contexte_de_formatage_en_ligne": { - "modified": "2019-11-05T09:02:18.660Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Couleurs_CSS": { - "modified": "2019-03-23T22:48:09.885Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli" - ] - }, - "Web/CSS/Couleurs_CSS/Sélecteur_de_couleurs": { - "modified": "2019-03-23T23:09:13.209Z", - "contributors": [ - "YannisDelmas", - "SphinxKnight", - "Fabien_Hanquet" - ] - }, - "Web/CSS/Extensions_CSS_Microsoft": { - "modified": "2019-04-06T13:12:03.310Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Extensions_Mozilla": { - "modified": "2019-04-06T13:09:25.625Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "Ilphrin", - "louuis", - "teoli", - "Fredchat", - "Goofy" - ] - }, - "Web/CSS/Feuilles_de_style_alternatives": { - "modified": "2019-04-06T12:15:36.750Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL" - ] - }, - "Web/CSS/Filter_Effects": { - "modified": "2020-10-15T21:58:36.661Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Filters_Effects": { - "modified": "2019-03-23T22:35:55.917Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/Héritage": { - "modified": "2019-04-06T13:06:49.569Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/Image-rendering": { - "modified": "2020-10-15T21:19:37.197Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "piouPiouM", - "teoli", - "FredB", - "DavidWalsh" - ] - }, - "Web/CSS/Implémentation_des_Brouillons_CSS": { - "modified": "2019-04-06T13:16:07.903Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/Index": { - "modified": "2019-04-06T13:12:11.177Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/Jeux_de_caractères_CSS": { - "modified": "2020-10-15T21:44:09.549Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/Layout_cookbook": { - "modified": "2019-04-06T12:59:27.445Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills" - ] - }, - "Web/CSS/Layout_cookbook/Bas_de_page_adhérant": { - "modified": "2020-10-15T22:10:28.813Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Carte": { - "modified": "2020-10-15T22:10:32.076Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Centrer_un_element": { - "modified": "2020-10-15T22:10:07.676Z", - "contributors": [ - "SphinxKnight", - "jaouedjackson", - "mouffy" - ] - }, - "Web/CSS/Layout_cookbook/Contribuer_à_une_recette": { - "modified": "2019-04-06T12:58:12.249Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills" - ] - }, - "Web/CSS/Layout_cookbook/Contribuer_à_une_recette/Cookbook_template": { - "modified": "2020-10-15T22:10:21.166Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Disposition_en_colonnes": { - "modified": "2020-10-15T22:10:25.136Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Grid_wrapper": { - "modified": "2020-10-15T22:11:37.851Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Liste_groupes_avec_indicateurs": { - "modified": "2020-10-15T22:10:18.617Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Media_objects": { - "modified": "2020-10-15T22:10:31.768Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Navigation_Breadcrumb": { - "modified": "2020-10-15T22:10:26.639Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Navigation_segmentée": { - "modified": "2020-10-15T22:10:27.669Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Layout_cookbook/Pagination": { - "modified": "2020-10-15T22:10:27.609Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Liste_de_Fonctionnalités_CSS_Propriétaires": { - "modified": "2019-04-06T13:18:27.677Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/Liste_propriétés_CSS_animées": { - "modified": "2019-04-06T12:15:29.279Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "tregagnon" - ] - }, - "Web/CSS/Mode_de_mise_en_page": { - "modified": "2019-04-06T13:12:21.356Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB" - ] - }, - "Web/CSS/Modèle_de_boîte_CSS": { - "modified": "2019-04-06T12:12:44.675Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/Modèle_de_boîte_CSS/Fusion_des_marges": { - "modified": "2019-07-21T06:30:38.788Z", - "contributors": [ - "SphinxKnight", - "gcyrillus", - "fscholz", - "teoli", - "FredB", - "Elethiomel", - "Worms", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/Modèle_de_boîte_CSS/Générateur_box-shadow": { - "modified": "2019-03-18T20:43:43.479Z", - "contributors": [ - "BychekRU", - "SphinxKnight", - "kiux" - ] - }, - "Web/CSS/Modèle_de_mise_en_forme_visuelle": { - "modified": "2020-09-14T06:31:27.412Z", - "contributors": [ - "devscipline", - "echayotte", - "SphinxKnight" - ] - }, - "Web/CSS/Motion_Path": { - "modified": "2020-10-15T21:47:42.306Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Média_paginés": { - "modified": "2019-04-06T13:19:25.688Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/Outils": { - "modified": "2019-04-06T13:47:45.843Z", - "contributors": [ - "SphinxKnight", - "velvel53" - ] - }, - "Web/CSS/Outils/Générateur_de_courbe_de_Bézier": { - "modified": "2019-04-06T13:46:55.571Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Outils/Générateur_de_dégradés_linéaires": { - "modified": "2019-04-06T13:48:01.466Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Propriétés_raccourcies": { - "modified": "2020-07-28T11:04:21.446Z", - "contributors": [ - "Yevgeniy.Shumakov", - "SphinxKnight", - "Banban", - "teoli", - "FredB" - ] - }, - "Web/CSS/Pseudo-classes": { - "modified": "2019-11-12T05:33:01.534Z", - "contributors": [ - "Totokoutonio", - "SphinxKnight", - "bgaude", - "teoli", - "Goofy", - "louuis", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/Pseudo-éléments": { - "modified": "2019-11-12T05:40:37.053Z", - "contributors": [ - "Totokoutonio", - "SphinxKnight", - "teoli", - "wakka27", - "Delapouite", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/Redimensionnement_arrière-plans_SVG": { - "modified": "2020-06-14T04:32:11.030Z", - "contributors": [ - "yanns1", - "SphinxKnight" - ] - }, - "Web/CSS/Reference": { - "modified": "2019-10-28T09:11:58.317Z", - "contributors": [ - "SphinxKnight", - "Camrifof", - "eiro", - "verdy_p", - "JNa0", - "PolariTOON", - "unsteadyCode", - "BEHOUBA", - "tonybengue", - "Oliviermoz", - "challet", - "teoli", - "thenew", - "Fredchat", - "wakka27", - "tregagnon", - "FredB", - "jackblack", - "Jeremie", - "openjck", - "groovecoder", - "ThePrisoner", - "BenoitL", - "Mgjbot", - "Nathymig" - ] - }, - "Web/CSS/Requêtes_média": { - "modified": "2019-06-03T14:19:49.928Z", - "contributors": [ - "SphinxKnight", - "zakaila" - ] - }, - "Web/CSS/Requêtes_média/Tester_les_media_queries": { - "modified": "2020-10-15T21:48:31.789Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Requêtes_média/Utilisation_requêtes_media_accessibilité": { - "modified": "2019-04-06T13:18:57.827Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Requêtes_média/Utiliser_les_Media_queries": { - "modified": "2020-09-12T11:51:58.821Z", - "contributors": [ - "kgrandemange", - "tzilliox", - "SphinxKnight", - "JNa0", - "JeffD", - "Sebastianz", - "mrstork", - "malayaleecoder", - "adevoufera", - "teoli", - "wakka27", - "infogenious", - "tregagnon", - "FredB", - "BenoitL" - ] - }, - "Web/CSS/Règles_@": { - "modified": "2019-04-06T12:15:09.052Z", - "contributors": [ - "SphinxKnight", - "LudoL", - "loella16", - "brikou", - "vvvaleee", - "Chealer", - "teoli", - "naar", - "FredB" - ] - }, - "Web/CSS/Selector_list": { - "modified": "2020-10-15T22:24:05.333Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Syntaxe_de_définition_des_valeurs": { - "modified": "2019-04-06T13:47:19.541Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "Guillaume-Heras", - "prayash", - "pixoux", - "teoli", - "FredB" - ] - }, - "Web/CSS/Sélecteurs_CSS": { - "modified": "2019-10-31T07:53:06.500Z", - "contributors": [ - "bdrnglm", - "SphinxKnight", - "a-mt", - "cabscorp", - "edspeedy", - "TiWisti", - "daisyback", - "personnel", - "Sebastianz" - ] - }, - "Web/CSS/Sélecteurs_CSS/Comparison_with_XPath": { - "modified": "2019-03-18T21:23:27.990Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Sélecteurs_CSS/Utiliser_la_pseudo-classe_:target_dans_un_selecteur": { - "modified": "2019-04-06T13:14:05.671Z", - "contributors": [ - "SphinxKnight", - "ffoodd" - ] - }, - "Web/CSS/Sélecteurs_d_ID": { - "modified": "2020-10-15T21:04:23.373Z", - "contributors": [ - "SphinxKnight", - "teoli", - "louuis", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/Sélecteurs_d_attribut": { - "modified": "2020-10-15T21:04:28.909Z", - "contributors": [ - "SphinxKnight", - "BenMorel", - "fuentesloic", - "teoli", - "tregagnon", - "FredB" - ] - }, - "Web/CSS/Sélecteurs_de_classe": { - "modified": "2020-10-15T21:04:22.803Z", - "contributors": [ - "SphinxKnight", - "teoli", - "goofy_bz", - "FredB" - ] - }, - "Web/CSS/Sélecteurs_de_type": { - "modified": "2020-10-15T21:04:24.242Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB" - ] - }, - "Web/CSS/Sélecteurs_de_voisins_généraux": { - "modified": "2020-10-15T21:04:26.332Z", - "contributors": [ - "BrnvrlUoeey", - "SphinxKnight", - "teoli", - "FredB" - ] - }, - "Web/CSS/Sélecteurs_descendant": { - "modified": "2020-10-15T21:04:29.156Z", - "contributors": [ - "SphinxKnight", - "eloi-duwer", - "yannicka", - "teoli", - "FredB" - ] - }, - "Web/CSS/Sélecteurs_enfant": { - "modified": "2020-10-15T21:04:28.522Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/Sélecteurs_universels": { - "modified": "2020-10-15T21:04:25.083Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB" - ] - }, - "Web/CSS/Tutorials": { - "modified": "2019-04-06T13:11:04.601Z", - "contributors": [ - "SphinxKnight", - "Oliviermoz", - "teoli", - "Axel_Viala" - ] - }, - "Web/CSS/Type_color": { - "modified": "2020-10-15T21:15:21.928Z", - "contributors": [ - "SphinxKnight", - "benoitdubuc", - "cdoublev", - "Simplexible", - "fscholz", - "teoli", - "louuis", - "FredB", - "BenoitL" - ] - }, - "Web/CSS/Type_position": { - "modified": "2020-10-15T21:46:27.417Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Types_CSS": { - "modified": "2019-07-12T07:45:36.764Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/Using_CSS_custom_properties": { - "modified": "2020-10-15T21:44:45.745Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "autodidactie", - "edspeedy", - "OhNiice" - ] - }, - "Web/CSS/Utilisation_de_dégradés_CSS": { - "modified": "2019-09-12T16:42:50.201Z", - "contributors": [ - "SphinxKnight", - "Darkilen", - "3dos", - "wizAmit", - "slayslot", - "teoli", - "wakka27", - "FredB", - "julienw", - "floEdelmann", - "BenoitL" - ] - }, - "Web/CSS/Valeur_calculée": { - "modified": "2019-07-12T07:46:01.465Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "teoli", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/Valeur_initiale": { - "modified": "2019-04-06T13:12:40.534Z", - "contributors": [ - "SphinxKnight", - "teoli", - "louuis", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/Valeur_spécifiée": { - "modified": "2019-07-12T07:46:53.914Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "FredB" - ] - }, - "Web/CSS/Valeur_utilisée": { - "modified": "2019-07-12T07:47:30.131Z", - "contributors": [ - "SphinxKnight", - "Golga", - "vava", - "teoli", - "FredB" - ] - }, - "Web/CSS/Valeurs_et_unités_CSS": { - "modified": "2019-04-06T13:14:19.030Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/WebKit_Extensions": { - "modified": "2019-10-07T02:42:25.089Z", - "contributors": [ - "Lo_h", - "SphinxKnight", - "ExE-Boss", - "Goofy", - "louuis" - ] - }, - "Web/CSS/align-content": { - "modified": "2020-10-15T21:30:37.361Z", - "contributors": [ - "SphinxKnight", - "teoli", - "JackNUMBER", - "fscholz", - "Sebastianz", - "Goofy", - "Dexter_Deter" - ] - }, - "Web/CSS/align-items": { - "modified": "2020-10-15T21:39:37.167Z", - "contributors": [ - "SphinxKnight", - "rolf39" - ] - }, - "Web/CSS/align-self": { - "modified": "2020-10-15T21:45:37.829Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/all": { - "modified": "2020-10-15T21:45:31.166Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/alpha-value": { - "modified": "2019-10-29T08:59:32.213Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/angle": { - "modified": "2020-10-15T21:08:35.880Z", - "contributors": [ - "SphinxKnight", - "dxsp", - "Sebastianz", - "Prinz_Rana", - "fscholz", - "teoli", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/angle-percentage": { - "modified": "2020-10-15T22:14:23.636Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/animation": { - "modified": "2020-10-15T21:08:29.411Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "teoli", - "Sebastianz", - "gudoy", - "tregagnon", - "Delapouite", - "FredB", - "trevorh" - ] - }, - "Web/CSS/animation-delay": { - "modified": "2020-10-15T21:08:26.081Z", - "contributors": [ - "SphinxKnight", - "Mr21", - "teoli", - "Sebastianz", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/animation-direction": { - "modified": "2020-10-15T21:04:49.473Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Sebastianz", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/animation-duration": { - "modified": "2020-10-15T21:09:29.304Z", - "contributors": [ - "lhapaipai", - "SphinxKnight", - "teoli", - "Sebastianz", - "FredB" - ] - }, - "Web/CSS/animation-fill-mode": { - "modified": "2020-10-15T21:08:35.038Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Sebastianz", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/animation-iteration-count": { - "modified": "2020-10-15T21:08:37.214Z", - "contributors": [ - "lhapaipai", - "SphinxKnight", - "verdy_p", - "teoli", - "Sebastianz", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/animation-name": { - "modified": "2020-10-15T21:08:32.798Z", - "contributors": [ - "SphinxKnight", - "Ramzi2892", - "teoli", - "Sebastianz", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/animation-play-state": { - "modified": "2020-10-15T21:08:35.700Z", - "contributors": [ - "SphinxKnight", - "ThreadElric", - "teoli", - "Sebastianz", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/animation-timing-function": { - "modified": "2020-10-15T21:08:36.973Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "teoli", - "Sebastianz", - "coets", - "FredB", - "tregagnon" - ] - }, - "Web/CSS/appearance": { - "modified": "2020-10-15T21:15:48.651Z", - "contributors": [ - "escattone", - "SphinxKnight", - "ExE-Boss", - "wbamberg", - "AymDev", - "teoli", - "wakka27", - "ksad", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/attr()": { - "modified": "2020-11-04T08:51:39.350Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "mrstork", - "prayash", - "enogael", - "teoli", - "tregagnon", - "FredB", - "matteodelabre", - "philippe97" - ] - }, - "Web/CSS/auto": { - "modified": "2019-03-24T00:14:22.694Z", - "contributors": [ - "goofy_bz", - "louuis", - "teoli", - "FredB", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/CSS/backdrop-filter": { - "modified": "2020-10-15T21:45:16.620Z", - "contributors": [ - "SphinxKnight", - "Colisan" - ] - }, - "Web/CSS/backface-visibility": { - "modified": "2020-10-15T21:08:31.865Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "ethertank", - "tregagnon" - ] - }, - "Web/CSS/background": { - "modified": "2020-10-15T21:08:39.389Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "FredB", - "teoli", - "tregagnon", - "Yuichiro", - "BenoitL", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/background-attachment": { - "modified": "2020-10-15T21:08:33.405Z", - "contributors": [ - "SphinxKnight", - "kustolovic", - "teoli", - "ShamsGolap", - "FredB", - "tregagnon", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/background-blend-mode": { - "modified": "2020-10-15T21:30:51.492Z", - "contributors": [ - "SphinxKnight", - "LukyVj", - "mrstork", - "Sebastianz", - "J.DMB", - "YoruNoHikage" - ] - }, - "Web/CSS/background-clip": { - "modified": "2020-10-15T21:09:30.832Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/background-color": { - "modified": "2020-10-15T21:08:20.811Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Sebastianz", - "ksad", - "FredB", - "tregagnon", - "Yuichiro", - "Fredchat", - "Mgjbot", - "Nathymig", - "Boly38", - "Kyodev" - ] - }, - "Web/CSS/background-image": { - "modified": "2020-10-15T21:08:35.762Z", - "contributors": [ - "SphinxKnight", - "jgil83000", - "Tactless7", - "wizAmit", - "magikmanu", - "fscholz", - "teoli", - "FredB", - "tregagnon", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/background-origin": { - "modified": "2020-10-15T21:09:26.607Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/background-position": { - "modified": "2020-10-15T21:08:28.344Z", - "contributors": [ - "SphinxKnight", - "kantoche", - "Goofy", - "mrstork", - "teoli", - "enogael", - "FredB", - "tregagnon", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/background-position-x": { - "modified": "2020-10-15T21:45:43.001Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/background-position-y": { - "modified": "2020-10-15T21:45:41.534Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/background-repeat": { - "modified": "2020-10-15T21:08:24.169Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "technolabtips", - "louuis", - "teoli", - "FredB", - "tregagnon", - "Nathymig", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/background-size": { - "modified": "2020-10-15T21:08:32.072Z", - "contributors": [ - "SphinxKnight", - "Prinz_Rana", - "fscholz", - "teoli", - "FredB", - "claudepache", - "tregagnon" - ] - }, - "Web/CSS/basic-shape": { - "modified": "2020-10-15T21:46:24.284Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/blend-mode": { - "modified": "2020-10-15T21:32:22.353Z", - "contributors": [ - "SphinxKnight", - "Nolwennig", - "GeoffreyC.", - "fscholz" - ] - }, - "Web/CSS/block-size": { - "modified": "2020-10-15T21:45:10.040Z", - "contributors": [ - "SphinxKnight", - "amazingphilippe" - ] - }, - "Web/CSS/border": { - "modified": "2020-10-15T21:08:26.155Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "vava", - "teoli", - "ksad", - "FredB", - "tregagnon", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/border-block": { - "modified": "2020-10-15T22:10:54.566Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-block-color": { - "modified": "2020-10-15T22:10:56.045Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-block-end": { - "modified": "2020-10-15T21:45:11.203Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-end-color": { - "modified": "2020-10-15T21:45:08.326Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-end-style": { - "modified": "2020-10-15T21:45:07.749Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-end-width": { - "modified": "2020-10-15T21:45:07.994Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-start": { - "modified": "2020-10-15T21:45:09.987Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-start-color": { - "modified": "2020-10-15T21:45:06.536Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-start-style": { - "modified": "2020-10-15T21:45:07.141Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-start-width": { - "modified": "2020-10-15T21:45:08.997Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/border-block-style": { - "modified": "2020-10-15T22:11:05.093Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-block-width": { - "modified": "2020-10-15T22:11:02.717Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-bottom": { - "modified": "2020-10-15T21:12:33.513Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "Golmote", - "ksad", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-bottom-color": { - "modified": "2020-10-15T21:08:17.967Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "ksad", - "FredB", - "tregagnon", - "Yuichiro", - "Nathymig", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-bottom-left-radius": { - "modified": "2020-10-15T21:09:26.046Z", - "contributors": [ - "SphinxKnight", - "Prinz_Rana", - "Sebastianz", - "teoli", - "ksad", - "FredB", - "Yuichiro", - "Fredchat" - ] - }, - "Web/CSS/border-bottom-right-radius": { - "modified": "2020-10-15T21:09:24.108Z", - "contributors": [ - "SphinxKnight", - "Prinz_Rana", - "Sebastianz", - "teoli", - "ksad", - "FredB", - "Yuichiro", - "Fredchat" - ] - }, - "Web/CSS/border-bottom-style": { - "modified": "2020-10-15T21:12:44.728Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-bottom-width": { - "modified": "2020-10-15T21:10:09.492Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-collapse": { - "modified": "2020-10-15T21:16:01.217Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/border-color": { - "modified": "2020-10-15T21:12:51.249Z", - "contributors": [ - "SphinxKnight", - "begmans", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/border-end-end-radius": { - "modified": "2020-10-15T22:13:15.093Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-end-start-radius": { - "modified": "2020-10-15T22:13:15.935Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-image": { - "modified": "2020-10-15T21:19:08.857Z", - "contributors": [ - "SphinxKnight", - "teoli", - "pl6025", - "FredB", - "PetiPandaRou", - "openjck", - "Jeremie" - ] - }, - "Web/CSS/border-image-outset": { - "modified": "2020-10-15T21:45:07.479Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-image-repeat": { - "modified": "2020-10-15T21:45:07.940Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-image-slice": { - "modified": "2020-10-15T21:45:08.549Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-image-source": { - "modified": "2020-10-15T21:20:04.870Z", - "contributors": [ - "SphinxKnight", - "wizAmit", - "teoli", - "FredB", - "PetiPandaRou" - ] - }, - "Web/CSS/border-image-width": { - "modified": "2020-10-15T21:20:03.679Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "PetiPandaRou" - ] - }, - "Web/CSS/border-inline": { - "modified": "2020-10-15T22:10:55.949Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-color": { - "modified": "2020-10-15T22:10:55.459Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-end": { - "modified": "2020-10-15T21:45:09.637Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-end-color": { - "modified": "2020-10-15T21:45:06.629Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-end-style": { - "modified": "2020-10-15T21:45:06.083Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-end-width": { - "modified": "2020-10-15T21:45:06.227Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-start": { - "modified": "2020-10-15T21:45:09.428Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-start-color": { - "modified": "2020-10-15T21:45:05.240Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-start-style": { - "modified": "2020-10-15T21:45:06.115Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-start-width": { - "modified": "2020-10-15T21:45:04.477Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-style": { - "modified": "2020-10-15T22:10:57.659Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-inline-width": { - "modified": "2020-10-15T22:11:00.439Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-left": { - "modified": "2020-10-15T21:12:37.709Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-left-color": { - "modified": "2020-10-15T21:12:49.527Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-left-style": { - "modified": "2020-10-15T21:12:37.629Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-left-width": { - "modified": "2020-10-15T21:12:47.533Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Fredchat" - ] - }, - "Web/CSS/border-radius": { - "modified": "2020-10-15T21:28:07.970Z", - "contributors": [ - "SphinxKnight", - "someone", - "Prinz_Rana", - "teoli", - "Qu3tzalify" - ] - }, - "Web/CSS/border-right": { - "modified": "2020-10-15T21:12:26.680Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "Yuichiro", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-right-color": { - "modified": "2020-10-15T21:12:46.785Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-right-style": { - "modified": "2020-10-15T21:12:38.190Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-right-width": { - "modified": "2020-10-15T21:12:51.216Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-spacing": { - "modified": "2020-10-15T21:16:01.215Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "L2o", - "teoli", - "Chealer", - "simonrenoult", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-start-end-radius": { - "modified": "2020-10-15T22:13:16.127Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-start-start-radius": { - "modified": "2020-10-15T22:13:16.075Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/border-style": { - "modified": "2020-10-15T21:12:31.333Z", - "contributors": [ - "SphinxKnight", - "begmans", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/border-top": { - "modified": "2020-10-15T21:12:31.816Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "Yuichiro", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/border-top-color": { - "modified": "2020-10-15T21:12:47.503Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-top-left-radius": { - "modified": "2020-10-15T21:09:14.310Z", - "contributors": [ - "SphinxKnight", - "Titouan", - "Sebastianz", - "teoli", - "ksad", - "FredB", - "Yuichiro", - "Fredchat" - ] - }, - "Web/CSS/border-top-right-radius": { - "modified": "2020-10-15T21:09:22.219Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "ksad", - "FredB", - "Fredchat" - ] - }, - "Web/CSS/border-top-style": { - "modified": "2020-10-15T21:12:48.569Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-top-width": { - "modified": "2020-10-15T21:12:47.537Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/border-width": { - "modified": "2020-10-15T21:10:07.340Z", - "contributors": [ - "SphinxKnight", - "Hinato15", - "teoli", - "FredB", - "Yuichiro", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/bottom": { - "modified": "2020-10-15T21:16:33.323Z", - "contributors": [ - "SphinxKnight", - "WhiteMoll", - "fscholz", - "teoli", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev", - "Elodouwen" - ] - }, - "Web/CSS/box-align": { - "modified": "2020-10-15T21:18:10.666Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/box-decoration-break": { - "modified": "2020-10-15T21:39:24.954Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/box-direction": { - "modified": "2020-10-15T21:18:11.464Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/box-flex": { - "modified": "2020-10-15T21:18:07.577Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/box-flex-group": { - "modified": "2020-10-15T21:45:38.209Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/box-lines": { - "modified": "2020-10-15T21:45:33.444Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/box-ordinal-group": { - "modified": "2020-10-15T21:45:25.640Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/box-orient": { - "modified": "2020-10-15T21:16:50.386Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/box-pack": { - "modified": "2020-10-15T21:18:09.298Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/box-shadow": { - "modified": "2020-10-15T21:09:23.643Z", - "contributors": [ - "SphinxKnight", - "Bidjit", - "teoli", - "skinnyfoetusboy", - "Goofy", - "FredB" - ] - }, - "Web/CSS/box-sizing": { - "modified": "2020-10-15T21:24:49.409Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "Mr21", - "pldz", - "lehollandaisvolant", - "Sebastianz", - "teoli", - "jsilvestre", - "tregagnon", - "FredB" - ] - }, - "Web/CSS/break-after": { - "modified": "2020-10-15T21:44:47.797Z", - "contributors": [ - "SphinxKnight", - "edspeedy" - ] - }, - "Web/CSS/break-before": { - "modified": "2020-10-15T21:44:48.986Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/break-inside": { - "modified": "2020-10-15T21:44:48.451Z", - "contributors": [ - "bershanskiy", - "SphinxKnight", - "edspeedy" - ] - }, - "Web/CSS/calc()": { - "modified": "2020-11-04T09:09:07.893Z", - "contributors": [ - "chrisdavidmills", - "ludivinepoussier", - "SphinxKnight", - "mborges", - "L2o", - "mrstork", - "prayash", - "teoli", - "nhoizey", - "nicodel", - "tregagnon", - "FredB" - ] - }, - "Web/CSS/caption-side": { - "modified": "2020-10-15T21:15:41.669Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "Sheppy", - "teoli", - "FredB", - "BenoitL", - "*.Har(d)t" - ] - }, - "Web/CSS/caret-color": { - "modified": "2020-10-15T21:51:25.881Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/clamp()": { - "modified": "2020-11-05T09:58:32.959Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/clear": { - "modified": "2020-10-15T21:18:05.718Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "J.DMB", - "louuis", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/clip": { - "modified": "2020-10-15T21:15:46.162Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "Valacar", - "Elethiomel", - "Fredchat" - ] - }, - "Web/CSS/clip-path": { - "modified": "2020-10-15T21:26:12.097Z", - "contributors": [ - "brunostasse", - "SphinxKnight", - "guv3n", - "teoli", - "Philippe_Lambotte" - ] - }, - "Web/CSS/color": { - "modified": "2020-10-15T21:15:41.703Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "louuis", - "Golmote", - "FredB", - "philippe97", - "Mgjbot", - "BenoitL", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/color-adjust": { - "modified": "2020-10-15T22:07:37.043Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/column-count": { - "modified": "2020-10-15T21:20:32.539Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/column-fill": { - "modified": "2020-10-15T21:20:32.258Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Munto", - "Sebastianz", - "teoli", - "FredB", - "Delapouite" - ] - }, - "Web/CSS/column-gap": { - "modified": "2020-10-15T21:20:34.750Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/column-rule": { - "modified": "2020-10-15T21:20:34.908Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/column-rule-color": { - "modified": "2020-10-15T21:20:38.875Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/column-rule-style": { - "modified": "2020-10-15T21:20:38.835Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/column-rule-width": { - "modified": "2020-10-15T21:20:37.812Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/column-span": { - "modified": "2020-10-15T21:20:33.008Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "louuis", - "teoli", - "FredB" - ] - }, - "Web/CSS/column-width": { - "modified": "2020-10-15T21:20:31.296Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/columns": { - "modified": "2020-10-15T21:20:34.997Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "louuis", - "teoli", - "FredB" - ] - }, - "Web/CSS/conic-gradient()": { - "modified": "2020-11-05T10:00:17.716Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "AlainGourves" - ] - }, - "Web/CSS/contain": { - "modified": "2020-10-15T21:47:58.553Z", - "contributors": [ - "SphinxKnight", - "ebrehault", - "vdesdoigts" - ] - }, - "Web/CSS/content": { - "modified": "2020-10-15T21:09:16.938Z", - "contributors": [ - "SphinxKnight", - "HerveRenault", - "teoli", - "Sebastianz", - "FredB" - ] - }, - "Web/CSS/counter()": { - "modified": "2020-11-09T07:18:11.964Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/counter-increment": { - "modified": "2020-10-15T21:17:58.093Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "Fredchat", - "VincentN" - ] - }, - "Web/CSS/counter-reset": { - "modified": "2020-10-15T21:14:15.574Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "fscholz", - "Fredchat", - "VincentN" - ] - }, - "Web/CSS/counter-set": { - "modified": "2020-10-15T22:20:18.195Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/counters()": { - "modified": "2020-11-09T07:19:24.761Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/cross-fade()": { - "modified": "2020-11-09T07:22:14.922Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/cursor": { - "modified": "2020-10-15T21:12:05.631Z", - "contributors": [ - "SphinxKnight", - "Grahack", - "mrstork", - "Sebastianz", - "teoli", - "Golmote", - "FredB", - "loranger", - "Julien.stuby", - "Mgjbot", - "Fredchat", - "Kyodev", - "Sheppy" - ] - }, - "Web/CSS/custom-ident": { - "modified": "2019-08-05T13:45:05.582Z", - "contributors": [ - "SphinxKnight", - "Krenair", - "teoli", - "FredB" - ] - }, - "Web/CSS/dimension": { - "modified": "2020-10-15T22:14:27.905Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/direction": { - "modified": "2020-10-15T21:16:36.245Z", - "contributors": [ - "SphinxKnight", - "ncoden", - "Sebastianz", - "teoli", - "ksad", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/display": { - "modified": "2020-10-15T21:15:53.886Z", - "contributors": [ - "johannpinson", - "SphinxKnight", - "cdjoubert", - "NemoNobobyPersonne", - "Baptistou", - "jwhitlock", - "friendofweb", - "ThibautMln", - "jean-pierre.gay", - "renoirb", - "Sebastianz", - "teoli", - "Golmote", - "FredB", - "Mgjbot", - "BenoitL", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/display-box": { - "modified": "2020-10-15T22:10:05.031Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/display-inside": { - "modified": "2020-10-15T22:09:59.712Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/display-internal": { - "modified": "2020-10-15T22:10:02.353Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/display-legacy": { - "modified": "2020-10-15T22:10:07.242Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/display-listitem": { - "modified": "2020-10-15T22:10:07.777Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/display-outside": { - "modified": "2020-10-15T22:10:04.504Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/element()": { - "modified": "2020-11-10T11:06:03.387Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/empty-cells": { - "modified": "2020-10-15T21:09:02.588Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/env()": { - "modified": "2020-11-10T11:09:42.633Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter": { - "modified": "2020-10-15T21:21:38.971Z", - "contributors": [ - "escattone", - "SphinxKnight", - "aziaziazi", - "Sebastianz", - "Prinz_Rana", - "teoli", - "emersion", - "wakka27", - "flexbox", - "FredB", - "thenew" - ] - }, - "Web/CSS/filter-function": { - "modified": "2019-04-26T03:07:50.831Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/blur()": { - "modified": "2020-11-05T09:45:36.368Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/brightness()": { - "modified": "2020-11-05T09:57:14.227Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/contrast()": { - "modified": "2020-11-09T07:20:47.447Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/drop-shadow()": { - "modified": "2020-11-10T10:58:25.362Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/grayscale()": { - "modified": "2020-11-10T11:18:37.733Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/hue-rotate()": { - "modified": "2020-11-16T08:50:37.620Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/invert()": { - "modified": "2020-11-16T08:55:25.015Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/opacity()": { - "modified": "2020-11-16T09:07:46.418Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/saturate()": { - "modified": "2020-11-30T10:11:43.128Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/sepia()": { - "modified": "2020-11-30T10:24:25.787Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/filter-function/url": { - "modified": "2019-04-06T11:57:29.213Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/fit-content": { - "modified": "2020-10-15T21:50:10.072Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/flex": { - "modified": "2020-10-15T21:19:44.037Z", - "contributors": [ - "julienw", - "Thyme1152", - "SphinxKnight", - "Hartesic", - "sylvainpolletvillard", - "fscholz", - "Sebastianz", - "Mahan91", - "teoli", - "Golmote", - "FredB", - "Delapouite", - "lalop", - "rd6137" - ] - }, - "Web/CSS/flex-basis": { - "modified": "2020-10-15T21:44:13.576Z", - "contributors": [ - "SphinxKnight", - "JonathanMM", - "kristofbc" - ] - }, - "Web/CSS/flex-direction": { - "modified": "2020-10-15T21:26:06.082Z", - "contributors": [ - "SphinxKnight", - "robiseb", - "Goofy", - "fscholz", - "Sebastianz", - "teoli", - "Golmote", - "PifyZ" - ] - }, - "Web/CSS/flex-flow": { - "modified": "2020-10-15T21:40:46.682Z", - "contributors": [ - "SphinxKnight", - "jmpp" - ] - }, - "Web/CSS/flex-grow": { - "modified": "2020-10-15T21:29:35.886Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "mondayking" - ] - }, - "Web/CSS/flex-shrink": { - "modified": "2020-10-15T21:44:15.655Z", - "contributors": [ - "SphinxKnight", - "hvanhonacker", - "tifabien" - ] - }, - "Web/CSS/flex-wrap": { - "modified": "2020-10-15T21:42:48.548Z", - "contributors": [ - "SphinxKnight", - "lhapaipai", - "YoruNoHikage", - "stephaniehobson", - "ss-bb" - ] - }, - "Web/CSS/flex_value": { - "modified": "2020-10-15T21:50:03.779Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/float": { - "modified": "2020-10-15T21:14:08.559Z", - "contributors": [ - "SphinxKnight", - "tnga", - "fscholz", - "teoli", - "FredB", - "Mgjbot", - "Nathymig", - "Elethiomel", - "Fredchat" - ] - }, - "Web/CSS/font": { - "modified": "2020-10-15T21:15:25.017Z", - "contributors": [ - "yvisherve", - "SphinxKnight", - "edspeedy", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/font-family": { - "modified": "2020-10-15T21:16:01.425Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Sheppy", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/font-feature-settings": { - "modified": "2020-10-15T21:19:34.721Z", - "contributors": [ - "SphinxKnight", - "Krenair", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/font-kerning": { - "modified": "2020-10-15T21:38:55.741Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "B_M" - ] - }, - "Web/CSS/font-language-override": { - "modified": "2020-10-15T21:44:15.835Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/font-optical-sizing": { - "modified": "2020-10-15T22:05:43.637Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/font-size": { - "modified": "2020-10-15T21:16:35.611Z", - "contributors": [ - "yaaax", - "JNa0", - "SphinxKnight", - "Kocal", - "Bringdal", - "fscholz", - "teoli", - "Fredchat", - "louuis", - "FredB", - "anthony.gaidot", - "Mgjbot", - "Kyodev" - ] - }, - "Web/CSS/font-size-adjust": { - "modified": "2020-10-15T21:15:30.021Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "BenoitL", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/font-smooth": { - "modified": "2020-10-15T21:44:12.301Z", - "contributors": [ - "SphinxKnight", - "Kerumen" - ] - }, - "Web/CSS/font-stretch": { - "modified": "2020-11-30T11:20:47.071Z", - "contributors": [ - "Moyogo", - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "GrCOTE7", - "FredB", - "Valacar", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/font-style": { - "modified": "2020-10-15T21:15:34.339Z", - "contributors": [ - "n3wborn", - "SphinxKnight", - "teoli", - "FredB", - "Mgjbot", - "Domif", - "Fredchat" - ] - }, - "Web/CSS/font-synthesis": { - "modified": "2020-10-30T07:13:04.039Z", - "contributors": [ - "JNa0", - "SphinxKnight" - ] - }, - "Web/CSS/font-variant": { - "modified": "2020-10-15T21:15:18.085Z", - "contributors": [ - "SphinxKnight", - "B_M", - "fscholz", - "Gibus", - "Sebastianz", - "Igro", - "teoli", - "FredB", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/font-variant-alternates": { - "modified": "2020-10-15T21:44:15.520Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/font-variant-caps": { - "modified": "2020-10-29T08:39:50.937Z", - "contributors": [ - "JNa0", - "SphinxKnight" - ] - }, - "Web/CSS/font-variant-east-asian": { - "modified": "2020-10-15T21:44:08.241Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/font-variant-ligatures": { - "modified": "2020-10-15T21:39:41.117Z", - "contributors": [ - "SphinxKnight", - "nfriedli" - ] - }, - "Web/CSS/font-variant-numeric": { - "modified": "2020-10-15T21:44:06.991Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/font-variant-position": { - "modified": "2020-10-15T21:43:55.206Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/font-variation-settings": { - "modified": "2020-10-15T21:52:12.257Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/font-weight": { - "modified": "2020-10-15T21:15:14.602Z", - "contributors": [ - "SphinxKnight", - "ygarbage", - "fscholz", - "Sebastianz", - "teoli", - "tregagnon", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/frequency": { - "modified": "2020-10-15T21:24:47.689Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "fscholz", - "teoli", - "FredB", - "Goofy" - ] - }, - "Web/CSS/frequency-percentage": { - "modified": "2020-10-15T22:14:25.485Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/gap": { - "modified": "2020-10-15T22:05:45.614Z", - "contributors": [ - "JNa0", - "SphinxKnight" - ] - }, - "Web/CSS/gradient": { - "modified": "2020-10-15T21:46:27.099Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid": { - "modified": "2020-10-15T21:43:57.613Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-area": { - "modified": "2020-10-15T21:43:57.849Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-auto-columns": { - "modified": "2020-10-15T21:43:52.496Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-auto-flow": { - "modified": "2020-10-15T21:45:27.360Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-auto-rows": { - "modified": "2020-10-15T21:43:57.525Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-column": { - "modified": "2020-10-15T21:44:00.007Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-column-end": { - "modified": "2020-10-15T21:43:52.597Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-column-gap": { - "modified": "2020-10-15T21:43:57.480Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-column-start": { - "modified": "2020-10-15T21:43:52.983Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-row": { - "modified": "2020-10-15T21:43:47.449Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-row-end": { - "modified": "2020-10-15T21:43:54.687Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-row-start": { - "modified": "2020-10-15T21:43:46.372Z", - "contributors": [ - "SphinxKnight", - "Goofy" - ] - }, - "Web/CSS/grid-template": { - "modified": "2020-10-15T21:43:56.133Z", - "contributors": [ - "SphinxKnight", - "BenJ-R" - ] - }, - "Web/CSS/grid-template-areas": { - "modified": "2020-10-15T21:43:51.408Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-template-columns": { - "modified": "2020-10-15T21:43:47.170Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/grid-template-rows": { - "modified": "2020-10-15T21:43:51.505Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/hanging-punctuation": { - "modified": "2020-10-15T21:54:18.228Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/height": { - "modified": "2020-10-15T21:15:21.230Z", - "contributors": [ - "SphinxKnight", - "MaxEvron", - "fscholz", - "Sebastianz", - "teoli", - "dabus", - "FredB", - "Mgjbot", - "Aurelgadjo", - "Fredchat" - ] - }, - "Web/CSS/hyphens": { - "modified": "2020-10-15T21:09:12.598Z", - "contributors": [ - "SphinxKnight", - "Menkid", - "Sebastianz", - "SJW", - "teoli", - "MorganeH", - "FredB" - ] - }, - "Web/CSS/image": { - "modified": "2020-10-15T21:08:52.732Z", - "contributors": [ - "SphinxKnight", - "jsx", - "slayslot", - "mrstork", - "fscholz", - "teoli", - "FredB", - "Goofy" - ] - }, - "Web/CSS/image()": { - "modified": "2020-11-16T08:52:05.684Z", - "contributors": [ - "chrisdavidmills", - "escattone", - "SphinxKnight", - "estelle", - "ExE-Boss" - ] - }, - "Web/CSS/image-orientation": { - "modified": "2020-10-15T21:19:41.469Z", - "contributors": [ - "SphinxKnight", - "prayash", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/image-set()": { - "modified": "2020-11-16T08:53:24.499Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/ime-mode": { - "modified": "2020-10-15T21:16:34.560Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "BenoitL" - ] - }, - "Web/CSS/inherit": { - "modified": "2020-10-15T21:16:37.390Z", - "contributors": [ - "SphinxKnight", - "teoli", - "cdromain", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/initial": { - "modified": "2020-10-15T21:16:37.376Z", - "contributors": [ - "SphinxKnight", - "adrien-gueret", - "nhoizey", - "teoli", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/initial-letter": { - "modified": "2020-10-15T21:43:46.301Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/initial-letter-align": { - "modified": "2020-10-15T21:43:51.948Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/inline-size": { - "modified": "2020-10-15T21:43:58.068Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/inset": { - "modified": "2020-10-15T22:10:58.848Z", - "contributors": [ - "Yukulele.", - "SphinxKnight" - ] - }, - "Web/CSS/inset-block": { - "modified": "2020-10-15T22:11:00.485Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/inset-inline": { - "modified": "2020-10-15T22:11:01.666Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/integer": { - "modified": "2020-10-15T21:04:03.191Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "fscholz", - "teoli", - "FredB", - "tregagnon", - "Goofy" - ] - }, - "Web/CSS/isolation": { - "modified": "2020-10-15T21:43:45.017Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/justify-content": { - "modified": "2020-10-15T21:41:40.322Z", - "contributors": [ - "NemoNobobyPersonne", - "SphinxKnight", - "YoannR.", - "ChristopheBoucaut" - ] - }, - "Web/CSS/justify-items": { - "modified": "2020-10-15T21:52:49.461Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/justify-self": { - "modified": "2020-10-15T21:52:50.877Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/left": { - "modified": "2020-10-15T21:14:12.510Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "tcit" - ] - }, - "Web/CSS/length": { - "modified": "2020-10-15T21:15:22.701Z", - "contributors": [ - "SphinxKnight", - "emmanuelclement", - "Simplexible", - "fscholz", - "teoli", - "wakka27", - "tregagnon", - "Goofy", - "FredB", - "BenoitL", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/length-percentage": { - "modified": "2020-10-15T22:14:28.822Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/letter-spacing": { - "modified": "2020-10-15T21:08:58.951Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "hugo42", - "teoli", - "FredB" - ] - }, - "Web/CSS/line-break": { - "modified": "2020-10-15T21:37:07.983Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "Yvain" - ] - }, - "Web/CSS/line-height": { - "modified": "2020-10-15T21:15:28.749Z", - "contributors": [ - "SphinxKnight", - "gharel", - "Nashella", - "teoli", - "Sebastianz", - "Hell_Carlito", - "jadecrea", - "Havano", - "remjie", - "Fredchat", - "FredB", - "BenoitL" - ] - }, - "Web/CSS/line-height-step": { - "modified": "2020-10-15T21:56:21.204Z", - "contributors": [ - "SphinxKnight", - "kodliber" - ] - }, - "Web/CSS/linear-gradient()": { - "modified": "2020-11-16T08:57:11.795Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "edspeedy", - "Javarome", - "lhapaipai", - "Guillaume.Wulpes", - "Simplexible", - "wizAmit", - "slayslot", - "prayash", - "Nazcange", - "nicofrand", - "teoli", - "Golmote", - "tregagnon", - "FredB", - "thenew" - ] - }, - "Web/CSS/list-style": { - "modified": "2020-10-15T21:15:56.797Z", - "contributors": [ - "SphinxKnight", - "malenki", - "Sebastianz", - "louuis", - "teoli", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/list-style-image": { - "modified": "2020-10-15T21:15:55.198Z", - "contributors": [ - "SphinxKnight", - "Hinato15", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/list-style-position": { - "modified": "2020-10-15T21:16:01.140Z", - "contributors": [ - "SphinxKnight", - "teoli", - "fscholz", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/list-style-type": { - "modified": "2020-10-15T21:16:00.197Z", - "contributors": [ - "SphinxKnight", - "GregMorel", - "fscholz", - "Goofy", - "teoli", - "Sebastianz", - "FredB", - "Mgjbot", - "ethertank", - "Fredchat", - "Kyodev", - "VincentN" - ] - }, - "Web/CSS/margin": { - "modified": "2020-10-15T21:10:35.628Z", - "contributors": [ - "nathsou", - "SphinxKnight", - "guirip", - "mrstork", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner", - "tcit" - ] - }, - "Web/CSS/margin-block": { - "modified": "2020-10-15T22:10:58.480Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/margin-block-end": { - "modified": "2020-10-15T21:43:50.805Z", - "contributors": [ - "SphinxKnight", - "Goofy" - ] - }, - "Web/CSS/margin-block-start": { - "modified": "2020-10-15T21:43:45.525Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/margin-bottom": { - "modified": "2020-10-15T21:10:36.296Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/margin-inline": { - "modified": "2020-10-15T22:11:03.669Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/margin-inline-end": { - "modified": "2020-10-15T21:18:24.194Z", - "contributors": [ - "SphinxKnight", - "teoli", - "J.DMB", - "louuis", - "FredB", - "VincentN", - "Fredchat" - ] - }, - "Web/CSS/margin-inline-start": { - "modified": "2020-10-15T21:18:22.766Z", - "contributors": [ - "SphinxKnight", - "teoli", - "louuis", - "FredB", - "VincentN", - "Fredchat" - ] - }, - "Web/CSS/margin-left": { - "modified": "2020-10-15T21:10:37.744Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/margin-right": { - "modified": "2020-10-15T21:10:35.139Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/margin-top": { - "modified": "2020-10-15T21:10:41.432Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/margin-trim": { - "modified": "2020-10-15T22:11:07.350Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask": { - "modified": "2020-10-15T21:43:53.941Z", - "contributors": [ - "SphinxKnight", - "LTerrier" - ] - }, - "Web/CSS/mask-border": { - "modified": "2019-04-07T09:00:35.499Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask-border-mode": { - "modified": "2019-04-07T09:04:43.048Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask-border-outset": { - "modified": "2019-04-06T16:09:39.252Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask-border-repeat": { - "modified": "2019-04-06T16:09:31.479Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask-border-slice": { - "modified": "2019-04-06T16:09:23.034Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask-border-source": { - "modified": "2019-04-06T16:08:52.761Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask-border-width": { - "modified": "2019-04-06T16:08:41.957Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/mask-clip": { - "modified": "2020-10-15T21:44:07.704Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-composite": { - "modified": "2020-10-15T21:44:09.144Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-image": { - "modified": "2020-10-15T21:45:26.294Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-mode": { - "modified": "2020-10-15T21:45:26.649Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-origin": { - "modified": "2020-10-15T21:45:26.109Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-position": { - "modified": "2020-10-15T21:45:24.708Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-repeat": { - "modified": "2020-10-15T21:45:24.759Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-size": { - "modified": "2020-10-15T21:45:21.752Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/mask-type": { - "modified": "2020-10-15T21:43:42.404Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/max()": { - "modified": "2020-11-16T09:02:34.879Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/max-block-size": { - "modified": "2020-10-15T21:43:44.853Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/max-height": { - "modified": "2020-10-15T21:15:55.797Z", - "contributors": [ - "ldvc", - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/max-inline-size": { - "modified": "2020-10-15T21:43:33.488Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/max-width": { - "modified": "2020-10-15T21:16:38.615Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/min()": { - "modified": "2020-11-16T09:04:19.879Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/min-block-size": { - "modified": "2020-10-15T21:43:26.727Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/min-height": { - "modified": "2020-10-15T21:16:02.253Z", - "contributors": [ - "Derek", - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "Grsmto", - "Delapouite", - "tregagnon", - "Mgjbot", - "Fredchat" - ] - }, - "Web/CSS/min-inline-size": { - "modified": "2020-10-15T21:43:22.753Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/min-width": { - "modified": "2020-10-15T21:16:36.385Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/CSS/minmax()": { - "modified": "2020-11-16T09:06:07.004Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "HerveRenault", - "lp177" - ] - }, - "Web/CSS/mix-blend-mode": { - "modified": "2020-10-15T21:37:54.397Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "LukyVj", - "Sebastianz", - "Hell_Carlito" - ] - }, - "Web/CSS/none": { - "modified": "2019-03-18T21:17:42.214Z", - "contributors": [ - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/normal": { - "modified": "2019-03-24T00:11:40.284Z", - "contributors": [ - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/number": { - "modified": "2020-10-15T21:15:34.930Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "louuis", - "teoli", - "FredB", - "tregagnon", - "Goofy", - "BenoitL" - ] - }, - "Web/CSS/object-fit": { - "modified": "2020-10-15T21:40:35.077Z", - "contributors": [ - "uniuc", - "SphinxKnight", - "LauJi", - "PifyZ" - ] - }, - "Web/CSS/object-position": { - "modified": "2020-10-15T21:43:24.887Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/offset": { - "modified": "2020-10-15T21:43:23.702Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/offset-anchor": { - "modified": "2020-10-15T22:24:05.493Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/offset-distance": { - "modified": "2020-10-15T21:43:21.224Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/offset-path": { - "modified": "2020-10-15T21:43:23.613Z", - "contributors": [ - "SphinxKnight", - "a-mt" - ] - }, - "Web/CSS/offset-position": { - "modified": "2020-10-15T22:34:44.413Z", - "contributors": [ - "cdoublev" - ] - }, - "Web/CSS/offset-rotate": { - "modified": "2020-10-15T21:43:21.156Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/opacity": { - "modified": "2020-10-15T21:09:09.094Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/order": { - "modified": "2020-10-15T21:43:22.198Z", - "contributors": [ - "cdoublev", - "SphinxKnight", - "tzilliox" - ] - }, - "Web/CSS/orphans": { - "modified": "2020-10-15T21:09:04.253Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "djacquel" - ] - }, - "Web/CSS/outline": { - "modified": "2020-10-15T21:09:11.603Z", - "contributors": [ - "erwanjugand", - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "wakka27", - "FredB", - "Blackhole", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/outline-color": { - "modified": "2020-10-15T21:08:56.862Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/outline-offset": { - "modified": "2020-10-15T21:08:49.087Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "fscholz", - "Sebastianz", - "teoli", - "Manumanu", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/outline-style": { - "modified": "2020-10-15T21:09:08.315Z", - "contributors": [ - "johannpinson", - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/outline-width": { - "modified": "2020-10-15T21:09:11.670Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/overflow": { - "modified": "2020-10-15T21:08:56.186Z", - "contributors": [ - "SphinxKnight", - "fdnhkj", - "mapiki", - "matsumonkie", - "Sebastianz", - "scaillerie", - "teoli", - "FredB" - ] - }, - "Web/CSS/overflow-anchor": { - "modified": "2020-10-15T22:10:01.845Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/overflow-anchor/Guide_ancrage_défilement": { - "modified": "2020-10-15T22:17:58.241Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/overflow-block": { - "modified": "2020-10-15T22:17:59.313Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/overflow-inline": { - "modified": "2020-10-15T22:17:57.651Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/overflow-wrap": { - "modified": "2020-10-15T21:20:31.219Z", - "contributors": [ - "SphinxKnight", - "anisometropie", - "patrickfournier", - "fscholz", - "Sebastianz", - "PofMagicfingers", - "teoli", - "BiAiB", - "philippe97", - "FredB", - "Delapouite" - ] - }, - "Web/CSS/overflow-x": { - "modified": "2020-10-15T21:21:34.563Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "tregagnon", - "Delapouite", - "Igro" - ] - }, - "Web/CSS/overflow-y": { - "modified": "2020-10-15T21:21:35.151Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "enogael", - "FredB", - "tregagnon", - "Delapouite", - "Igro" - ] - }, - "Web/CSS/overscroll-behavior": { - "modified": "2020-10-15T22:01:11.932Z", - "contributors": [ - "SphinxKnight", - "brunostasse" - ] - }, - "Web/CSS/overscroll-behavior-x": { - "modified": "2020-10-15T22:01:15.043Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/overscroll-behavior-y": { - "modified": "2020-10-15T22:01:11.740Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/padding": { - "modified": "2020-10-15T21:10:34.387Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/padding-block": { - "modified": "2020-10-15T22:11:17.883Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/padding-block-end": { - "modified": "2020-10-15T21:43:04.401Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/padding-block-start": { - "modified": "2020-10-15T21:43:04.242Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/padding-bottom": { - "modified": "2020-10-15T21:10:37.788Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/padding-inline": { - "modified": "2020-10-15T22:11:15.316Z", - "contributors": [ - "Loliwe", - "SphinxKnight" - ] - }, - "Web/CSS/padding-inline-end": { - "modified": "2020-10-15T21:18:26.917Z", - "contributors": [ - "SphinxKnight", - "teoli", - "FredB", - "VincentN", - "Fredchat" - ] - }, - "Web/CSS/padding-inline-start": { - "modified": "2020-10-15T21:18:27.911Z", - "contributors": [ - "SphinxKnight", - "AmauryH", - "teoli", - "FredB", - "VincentN", - "Fredchat" - ] - }, - "Web/CSS/padding-left": { - "modified": "2020-10-15T21:10:35.530Z", - "contributors": [ - "SphinxKnight", - "warso", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/padding-right": { - "modified": "2020-10-15T21:10:31.706Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/padding-top": { - "modified": "2020-10-15T21:10:29.837Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/page-break-after": { - "modified": "2020-10-15T21:31:45.771Z", - "contributors": [ - "SphinxKnight", - "ncoden", - "Sebastianz", - "gmichard", - "ilaborie" - ] - }, - "Web/CSS/page-break-before": { - "modified": "2020-10-15T21:43:02.913Z", - "contributors": [ - "jibe0123", - "SphinxKnight" - ] - }, - "Web/CSS/page-break-inside": { - "modified": "2020-10-15T21:43:05.193Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/paint()": { - "modified": "2020-11-16T12:34:32.285Z", - "contributors": [ - "JNa0", - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/paint-order": { - "modified": "2020-10-15T22:02:33.903Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/percentage": { - "modified": "2020-10-15T21:15:29.581Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "fscholz", - "teoli", - "FredB", - "tregagnon", - "BenoitL" - ] - }, - "Web/CSS/perspective": { - "modified": "2020-10-15T21:19:38.260Z", - "contributors": [ - "SphinxKnight", - "eviouchka", - "pierretusseau", - "fscholz", - "Sebastianz", - "teoli", - "pl6025", - "FredB" - ] - }, - "Web/CSS/perspective-origin": { - "modified": "2020-10-15T21:20:18.754Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/place-content": { - "modified": "2020-10-15T21:52:51.184Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/place-items": { - "modified": "2020-10-15T21:52:53.357Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/place-self": { - "modified": "2020-10-15T21:52:50.692Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/pointer-events": { - "modified": "2020-10-15T21:22:42.114Z", - "contributors": [ - "SphinxKnight", - "flexbox", - "teoli", - "SiegfriedEhret", - "avetisk" - ] - }, - "Web/CSS/position": { - "modified": "2020-10-15T21:16:08.130Z", - "contributors": [ - "SphinxKnight", - "Loliwe", - "Machou", - "adaedra", - "fscholz", - "Sebastianz", - "cconcolato", - "FredB", - "teoli", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/quotes": { - "modified": "2020-10-15T21:08:51.774Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/radial-gradient()": { - "modified": "2020-11-18T14:42:17.846Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "PetiPandaRou", - "teoli", - "philippe97", - "FredB", - "Jeansebastien.ney" - ] - }, - "Web/CSS/ratio": { - "modified": "2020-10-15T21:21:46.974Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB" - ] - }, - "Web/CSS/repeat()": { - "modified": "2020-11-18T14:44:25.185Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/repeating-conic-gradient()": { - "modified": "2020-11-18T14:49:14.177Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/repeating-linear-gradient()": { - "modified": "2020-11-18T14:45:56.794Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "wizAmit", - "prayash", - "bfn", - "teoli", - "FredB" - ] - }, - "Web/CSS/repeating-radial-gradient()": { - "modified": "2020-11-18T14:47:29.838Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "a-mt" - ] - }, - "Web/CSS/resize": { - "modified": "2020-10-15T21:19:06.332Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/resolution": { - "modified": "2020-10-15T21:24:52.090Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "fscholz", - "J.DMB", - "louuis", - "teoli", - "FredB" - ] - }, - "Web/CSS/revert": { - "modified": "2020-10-15T21:42:54.151Z", - "contributors": [ - "SphinxKnight", - "Zefling" - ] - }, - "Web/CSS/right": { - "modified": "2020-10-15T21:08:54.080Z", - "contributors": [ - "SphinxKnight", - "Prinz_Rana", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "Delapouite" - ] - }, - "Web/CSS/rotate": { - "modified": "2020-10-15T22:02:45.073Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/row-gap": { - "modified": "2020-10-15T22:05:44.066Z", - "contributors": [ - "SphinxKnight", - "JNa0" - ] - }, - "Web/CSS/ruby-align": { - "modified": "2020-10-15T21:43:02.784Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/ruby-position": { - "modified": "2020-10-15T21:42:41.711Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scale": { - "modified": "2020-10-15T22:02:41.753Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-behavior": { - "modified": "2020-10-15T21:42:38.519Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin": { - "modified": "2020-10-15T22:11:29.331Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-block": { - "modified": "2020-10-15T22:11:26.331Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-block-end": { - "modified": "2020-10-15T22:11:24.840Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-block-start": { - "modified": "2020-10-15T22:11:27.968Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-bottom": { - "modified": "2020-10-15T22:11:27.109Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-inline": { - "modified": "2020-10-15T22:11:27.758Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-inline-end": { - "modified": "2020-10-15T22:11:29.215Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-inline-start": { - "modified": "2020-10-15T22:11:31.365Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-left": { - "modified": "2020-10-15T22:11:32.305Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-right": { - "modified": "2020-10-15T22:11:31.609Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-margin-top": { - "modified": "2020-10-15T22:11:25.637Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding": { - "modified": "2020-10-15T22:11:29.445Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-block": { - "modified": "2020-10-15T22:11:28.191Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-block-end": { - "modified": "2020-10-15T22:11:29.968Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-block-start": { - "modified": "2020-10-15T22:11:29.801Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-bottom": { - "modified": "2020-10-15T22:11:30.415Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-inline": { - "modified": "2020-10-15T22:11:26.827Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-inline-end": { - "modified": "2020-10-15T22:11:26.380Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-inline-start": { - "modified": "2020-10-15T22:11:30.209Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-left": { - "modified": "2020-10-15T22:11:32.055Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-right": { - "modified": "2020-10-15T22:11:31.603Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-padding-top": { - "modified": "2020-10-15T22:11:27.462Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-snap-align": { - "modified": "2020-10-15T22:11:32.358Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-snap-coordinate": { - "modified": "2020-10-15T21:42:48.115Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-snap-destination": { - "modified": "2020-10-15T21:42:40.512Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-snap-points-x": { - "modified": "2020-10-15T21:42:45.133Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/scroll-snap-points-y": { - "modified": "2020-10-15T21:42:38.109Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/CSS/scroll-snap-stop": { - "modified": "2020-10-15T22:10:03.086Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-snap-type": { - "modified": "2020-10-15T21:42:50.969Z", - "contributors": [ - "SphinxKnight", - "jide" - ] - }, - "Web/CSS/scroll-snap-type-x": { - "modified": "2020-10-15T21:42:38.724Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scroll-snap-type-y": { - "modified": "2020-10-15T21:42:39.974Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/scrollbar-color": { - "modified": "2020-10-15T22:10:04.861Z", - "contributors": [ - "SphinxKnight", - "lp177" - ] - }, - "Web/CSS/scrollbar-width": { - "modified": "2020-10-15T22:10:07.959Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/shape": { - "modified": "2020-10-15T21:46:30.260Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/shape-box": { - "modified": "2019-03-23T22:32:55.011Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/shape-image-threshold": { - "modified": "2020-10-15T21:42:37.534Z", - "contributors": [ - "SphinxKnight", - "Zefling" - ] - }, - "Web/CSS/shape-margin": { - "modified": "2020-10-15T21:42:48.010Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/shape-outside": { - "modified": "2020-10-15T21:33:45.682Z", - "contributors": [ - "SphinxKnight", - "HTeuMeuLeu", - "teoli", - "Sebastianz", - "lbelavoir" - ] - }, - "Web/CSS/string": { - "modified": "2020-10-15T21:10:36.585Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/symbols()": { - "modified": "2020-11-30T10:29:26.349Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight" - ] - }, - "Web/CSS/tab-size": { - "modified": "2020-10-15T21:19:02.503Z", - "contributors": [ - "SphinxKnight", - "Prinz_Rana", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/table-layout": { - "modified": "2020-10-15T21:19:02.718Z", - "contributors": [ - "SphinxKnight", - "bsitruk", - "emmanuelclement", - "fscholz", - "Sebastianz", - "teoli", - "b_b", - "FredB", - "ethertank" - ] - }, - "Web/CSS/text-align": { - "modified": "2020-10-15T21:15:12.893Z", - "contributors": [ - "n3wborn", - "SphinxKnight", - "SpaVec", - "NicolasGoudry", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/text-align-last": { - "modified": "2020-10-15T21:19:07.972Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "fvignals", - "teoli", - "FredB" - ] - }, - "Web/CSS/text-combine-upright": { - "modified": "2020-10-15T21:42:38.110Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-decoration": { - "modified": "2020-10-15T21:17:58.514Z", - "contributors": [ - "Maxi-MenuBestOfPlus", - "SphinxKnight", - "Sebastianz", - "teoli", - "316k", - "FredB", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/text-decoration-color": { - "modified": "2020-10-15T21:08:48.730Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "fscholz", - "teoli", - "FredB" - ] - }, - "Web/CSS/text-decoration-line": { - "modified": "2020-10-15T21:19:04.173Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/text-decoration-skip": { - "modified": "2020-10-15T21:47:35.040Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-decoration-skip-ink": { - "modified": "2020-10-15T21:59:08.170Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-decoration-style": { - "modified": "2020-10-15T21:19:03.614Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/text-decoration-thickness": { - "modified": "2020-10-15T22:24:05.293Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-emphasis": { - "modified": "2020-10-15T21:43:05.328Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-emphasis-color": { - "modified": "2020-10-15T21:41:37.102Z", - "contributors": [ - "SphinxKnight", - "webdif" - ] - }, - "Web/CSS/text-emphasis-position": { - "modified": "2020-10-15T21:41:37.345Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-emphasis-style": { - "modified": "2020-10-15T21:41:36.302Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-indent": { - "modified": "2020-10-15T21:08:57.783Z", - "contributors": [ - "SphinxKnight", - "neurone12000", - "Prinz_Rana", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/text-justify": { - "modified": "2020-10-15T21:53:58.739Z", - "contributors": [ - "SphinxKnight", - "Deraw-", - "Joel-Costamagna" - ] - }, - "Web/CSS/text-orientation": { - "modified": "2020-10-15T21:41:37.989Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-overflow": { - "modified": "2020-10-15T21:09:08.503Z", - "contributors": [ - "Ryanfarrah25", - "SphinxKnight", - "dackmin", - "Guillaume-Heras", - "Sebastianz", - "PifyZ", - "LukyVj", - "teoli", - "FredB" - ] - }, - "Web/CSS/text-rendering": { - "modified": "2020-10-15T21:08:21.121Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "webdif", - "teoli", - "FredB", - "hsablonniere", - "Manu1400" - ] - }, - "Web/CSS/text-shadow": { - "modified": "2020-10-15T21:11:21.315Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "BadFox", - "BenoitL" - ] - }, - "Web/CSS/text-size-adjust": { - "modified": "2020-10-15T21:41:38.977Z", - "contributors": [ - "SphinxKnight", - "Goofy" - ] - }, - "Web/CSS/text-transform": { - "modified": "2020-10-15T21:08:51.025Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "sylozof", - "teoli", - "FredB", - "Matouche" - ] - }, - "Web/CSS/text-underline-offset": { - "modified": "2020-10-15T22:21:50.660Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/text-underline-position": { - "modified": "2020-10-15T21:21:32.888Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/time": { - "modified": "2020-10-15T21:04:47.409Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Prinz_Rana", - "fscholz", - "FredB", - "teoli", - "tregagnon" - ] - }, - "Web/CSS/time-percentage": { - "modified": "2020-10-15T22:14:23.852Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/timing-function": { - "modified": "2020-10-15T21:46:31.385Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/top": { - "modified": "2020-10-15T21:19:40.106Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB", - "ethertank", - "DavidWalsh" - ] - }, - "Web/CSS/touch-action": { - "modified": "2020-10-15T21:41:20.063Z", - "contributors": [ - "daformat", - "SphinxKnight" - ] - }, - "Web/CSS/transform": { - "modified": "2020-10-15T21:19:05.910Z", - "contributors": [ - "SphinxKnight", - "Prinz_Rana", - "Sebastianz", - "Sheppy", - "teoli", - "FredB", - "lmorchard" - ] - }, - "Web/CSS/transform-box": { - "modified": "2020-10-15T21:41:17.907Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/transform-function": { - "modified": "2020-10-15T21:42:33.342Z", - "contributors": [ - "SphinxKnight", - "AntoineTohan", - "mrstork" - ] - }, - "Web/CSS/transform-function/matrix()": { - "modified": "2020-11-16T08:59:24.432Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "stephane-tessier" - ] - }, - "Web/CSS/transform-function/matrix3d()": { - "modified": "2020-11-16T09:01:09.677Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "Sebastianz" - ] - }, - "Web/CSS/transform-function/perspective()": { - "modified": "2020-11-16T09:10:28.191Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "mrstork" - ] - }, - "Web/CSS/transform-function/rotate()": { - "modified": "2020-11-19T16:05:47.321Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "goofy_mdn", - "prayash" - ] - }, - "Web/CSS/transform-function/rotate3d()": { - "modified": "2020-11-19T16:07:17.057Z", - "contributors": [ - "chrisdavidmills", - "GuiBret", - "SphinxKnight", - "Sebastianz", - "prayash" - ] - }, - "Web/CSS/transform-function/rotateX()": { - "modified": "2020-11-19T16:08:58.335Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "prayash" - ] - }, - "Web/CSS/transform-function/rotateY()": { - "modified": "2020-11-19T16:09:55.866Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "prayash" - ] - }, - "Web/CSS/transform-function/rotateZ()": { - "modified": "2020-11-30T10:07:33.024Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "prayash" - ] - }, - "Web/CSS/transform-function/scale()": { - "modified": "2020-11-30T10:15:36.688Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "Halkeand", - "Loliwe", - "Sebastianz" - ] - }, - "Web/CSS/transform-function/scale3d()": { - "modified": "2020-11-30T10:19:17.844Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "DavidDx", - "Sebastianz" - ] - }, - "Web/CSS/transform-function/scaleX()": { - "modified": "2020-11-30T10:20:33.117Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "Sebastianz" - ] - }, - "Web/CSS/transform-function/scaleY()": { - "modified": "2020-11-30T10:21:46.233Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "Sebastianz" - ] - }, - "Web/CSS/transform-function/scaleZ()": { - "modified": "2020-11-30T10:23:37.630Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "Sebastianz" - ] - }, - "Web/CSS/transform-function/skew()": { - "modified": "2020-11-30T10:25:40.996Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "prayash" - ] - }, - "Web/CSS/transform-function/skewX()": { - "modified": "2020-11-30T10:27:10.768Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "Ramzi2892", - "prayash" - ] - }, - "Web/CSS/transform-function/skewY()": { - "modified": "2020-11-30T10:28:12.012Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "prayash" - ] - }, - "Web/CSS/transform-function/translate()": { - "modified": "2020-11-30T10:30:22.993Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "mrstork" - ] - }, - "Web/CSS/transform-function/translate3d()": { - "modified": "2020-11-30T12:56:47.640Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "ThreadElric", - "mrstork" - ] - }, - "Web/CSS/transform-function/translateX": { - "modified": "2019-04-06T11:48:19.824Z", - "contributors": [ - "SphinxKnight", - "mrstork" - ] - }, - "Web/CSS/transform-function/translateY()": { - "modified": "2020-11-30T13:01:02.374Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "mrstork" - ] - }, - "Web/CSS/transform-function/translateZ()": { - "modified": "2020-11-30T13:02:52.702Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "mrstork" - ] - }, - "Web/CSS/transform-origin": { - "modified": "2020-10-15T21:19:06.049Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "Prinz_Rana", - "Sebastianz", - "antograssiot", - "teoli", - "FredB" - ] - }, - "Web/CSS/transform-style": { - "modified": "2020-10-15T21:19:45.597Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/transition": { - "modified": "2020-10-15T21:20:31.652Z", - "contributors": [ - "SphinxKnight", - "ovaxio", - "sztan", - "fscholz", - "Sebastianz", - "J.DMB", - "louuis", - "teoli", - "FredB" - ] - }, - "Web/CSS/transition-delay": { - "modified": "2020-10-15T21:19:58.171Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/transition-duration": { - "modified": "2020-10-15T21:20:14.863Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/transition-property": { - "modified": "2020-10-15T21:20:09.909Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "Sebastianz", - "teoli", - "gudoy", - "FredB" - ] - }, - "Web/CSS/transition-timing-function": { - "modified": "2020-10-15T21:20:09.412Z", - "contributors": [ - "SphinxKnight", - "mrstork", - "fscholz", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/translate": { - "modified": "2020-10-15T22:02:43.081Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/translation-value": { - "modified": "2019-04-06T11:47:12.242Z", - "contributors": [ - "SphinxKnight", - "J.DMB", - "teoli", - "louuis" - ] - }, - "Web/CSS/unicode-bidi": { - "modified": "2020-10-15T21:10:25.144Z", - "contributors": [ - "SphinxKnight", - "trouba", - "Sebastianz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/unset": { - "modified": "2020-10-15T21:40:50.115Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/url": { - "modified": "2020-10-15T21:10:36.777Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "FredB", - "ThePrisoner" - ] - }, - "Web/CSS/url()": { - "modified": "2020-10-15T22:20:27.752Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/user-modify": { - "modified": "2020-10-15T21:43:01.040Z", - "contributors": [ - "SphinxKnight", - "NicolasT" - ] - }, - "Web/CSS/user-select": { - "modified": "2020-10-15T21:28:08.010Z", - "contributors": [ - "SphinxKnight", - "Sheppy", - "Fredchat", - "teoli", - "louuis" - ] - }, - "Web/CSS/valeur_reelle": { - "modified": "2019-04-06T12:16:17.195Z", - "contributors": [ - "SphinxKnight", - "louuis", - "teoli", - "FredB" - ] - }, - "Web/CSS/valeur_résolue": { - "modified": "2019-04-06T13:07:44.816Z", - "contributors": [ - "SphinxKnight", - "xdelatour" - ] - }, - "Web/CSS/var()": { - "modified": "2020-10-15T21:42:32.805Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/CSS/vertical-align": { - "modified": "2020-10-15T21:17:57.980Z", - "contributors": [ - "SphinxKnight", - "vlakoff", - "Loliwe", - "Sebastianz", - "teoli", - "FredB", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/visibility": { - "modified": "2020-10-15T21:18:07.321Z", - "contributors": [ - "patrickfournier", - "SphinxKnight", - "Sebastianz", - "Hell_Carlito", - "vava", - "teoli", - "tregagnon", - "FredB", - "Kyodev", - "Fredchat" - ] - }, - "Web/CSS/white-space": { - "modified": "2020-10-15T21:19:07.297Z", - "contributors": [ - "SphinxKnight", - "nykola", - "fscholz", - "teoli", - "claudepache", - "FredB", - "nonos" - ] - }, - "Web/CSS/widows": { - "modified": "2020-10-15T21:19:18.585Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB" - ] - }, - "Web/CSS/width": { - "modified": "2020-10-15T21:16:34.721Z", - "contributors": [ - "cdoublev", - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "Mgjbot", - "BenoitL", - "Fredchat", - "Kyodev" - ] - }, - "Web/CSS/will-change": { - "modified": "2020-10-15T21:38:00.394Z", - "contributors": [ - "cdoublev", - "Marc.V", - "SphinxKnight", - "Sebastianz", - "PRASS95" - ] - }, - "Web/CSS/word-break": { - "modified": "2020-10-15T21:20:32.265Z", - "contributors": [ - "SphinxKnight", - "Sylfare", - "PifyZ", - "teoli", - "fscholz", - "Sebastianz", - "louuis", - "FredB" - ] - }, - "Web/CSS/word-spacing": { - "modified": "2020-10-15T21:09:07.377Z", - "contributors": [ - "SphinxKnight", - "Prinz_Rana", - "fscholz", - "Sebastianz", - "teoli", - "Goofy", - "louuis", - "FredB" - ] - }, - "Web/CSS/writing-mode": { - "modified": "2020-10-15T21:23:45.445Z", - "contributors": [ - "SphinxKnight", - "YoruNoHikage", - "L2o", - "teoli", - "FredB" - ] - }, - "Web/CSS/z-index": { - "modified": "2020-10-15T21:08:18.747Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "teoli", - "FredB", - "tregagnon", - "Fredchat", - "Kyodev", - "Lapinkiller" - ] - }, - "Web/CSS/zoom": { - "modified": "2020-10-15T21:45:23.245Z", - "contributors": [ - "SphinxKnight", - "BenMorel", - "JayPanoz" - ] - }, - "Web/CSS/Élément_remplacé": { - "modified": "2019-04-06T13:08:03.406Z", - "contributors": [ - "SphinxKnight", - "Loliwe", - "teoli", - "Halfman", - "FredB" - ] - }, - "Web/Démos_de_technologies_open_web": { - "modified": "2019-03-18T20:44:11.081Z", - "contributors": [ - "goofy_mdn", - "xavierjs", - "qwincy_p" - ] - }, - "Web/EXSLT": { - "modified": "2019-01-17T10:26:33.088Z", - "contributors": [ - "ExE-Boss", - "BenoitL", - "Mgjbot" - ] - }, - "Web/EXSLT/exsl": { - "modified": "2019-01-16T15:20:55.825Z", - "contributors": [ - "ExE-Boss", - "teoli", - "Jeremie", - "tregagnon", - "Anonymous" - ] - }, - "Web/EXSLT/exsl/node-set": { - "modified": "2019-01-16T15:43:16.875Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/EXSLT/exsl/object-type": { - "modified": "2019-03-23T23:51:29.001Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/math": { - "modified": "2019-01-16T15:25:32.670Z", - "contributors": [ - "ExE-Boss", - "teoli", - "Jeremie", - "tregagnon", - "Anonymous" - ] - }, - "Web/EXSLT/math/highest": { - "modified": "2019-03-23T23:51:27.731Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/math/lowest": { - "modified": "2019-03-23T23:51:32.457Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/math/min": { - "modified": "2019-03-23T23:50:33.876Z", - "contributors": [ - "ExE-Boss", - "Dralyab", - "jackblack", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/set": { - "modified": "2019-01-16T15:22:46.319Z", - "contributors": [ - "ExE-Boss", - "Jeremie", - "Anonymous" - ] - }, - "Web/EXSLT/set/difference": { - "modified": "2019-03-23T23:50:39.871Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/set/distinct": { - "modified": "2019-03-23T23:50:37.743Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/set/has-same-node": { - "modified": "2019-03-23T23:50:40.804Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/set/intersection": { - "modified": "2019-03-23T23:50:32.370Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/set/leading": { - "modified": "2019-03-23T23:50:41.424Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/set/trailing": { - "modified": "2019-03-23T23:50:41.695Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/str": { - "modified": "2019-01-16T15:24:44.465Z", - "contributors": [ - "ExE-Boss", - "Jeremie", - "Anonymous" - ] - }, - "Web/EXSLT/str/concat": { - "modified": "2019-03-24T00:12:37.407Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Fredchat", - "Mgjbot" - ] - }, - "Web/EXSLT/str/split": { - "modified": "2019-03-23T23:50:37.644Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/EXSLT/str/tokenize": { - "modified": "2019-03-23T23:50:34.788Z", - "contributors": [ - "ExE-Boss", - "SphinxKnight", - "Mgjbot", - "Fredchat" - ] - }, - "Web/Events": { - "modified": "2020-09-03T05:30:03.906Z", - "contributors": [ - "Voulto", - "cendrars59", - "wbamberg", - "Alain20100", - "ebear", - "linedubeth", - "AlainRinder" - ] - }, - "Web/Events/DOMContentLoaded": { - "modified": "2020-10-15T21:40:06.593Z", - "contributors": [ - "Watilin", - "fscholz", - "zede-master", - "Gastonite", - "Shinze", - "jmh" - ] - }, - "Web/Events/abort": { - "modified": "2019-04-30T14:03:20.605Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/abort_(ProgressEvent)": { - "modified": "2019-03-23T22:24:38.520Z", - "contributors": [ - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/afterprint": { - "modified": "2019-03-23T22:24:13.216Z", - "contributors": [ - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/animationend": { - "modified": "2019-03-23T22:24:25.318Z", - "contributors": [ - "edspeedy", - "Kalwyn" - ] - }, - "Web/Events/animationiteration": { - "modified": "2019-03-23T22:24:12.393Z", - "contributors": [ - "Kalwyn" - ] - }, - "Web/Events/animationstart": { - "modified": "2019-03-23T22:24:27.835Z", - "contributors": [ - "Kalwyn" - ] - }, - "Web/Events/audioprocess": { - "modified": "2019-03-18T21:01:00.247Z", - "contributors": [ - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/beforeprint": { - "modified": "2020-11-25T15:13:28.637Z", - "contributors": [ - "Wixonic", - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/beforeunload": { - "modified": "2020-01-22T07:04:02.410Z", - "contributors": [ - "julienc", - "wbamberg", - "Pierre.Fauconnier", - "Kalwyn" - ] - }, - "Web/Events/complete": { - "modified": "2019-03-18T21:01:07.959Z", - "contributors": [ - "fscholz", - "David_B", - "Kalwyn" - ] - }, - "Web/Events/compositionend": { - "modified": "2020-10-15T21:50:42.611Z", - "contributors": [ - "tbetous", - "wbamberg", - "Kalwyn" - ] - }, - "Web/Events/compositionstart": { - "modified": "2019-04-30T13:48:11.171Z", - "contributors": [ - "wbamberg", - "Kalwyn" - ] - }, - "Web/Events/compositionupdate": { - "modified": "2019-04-30T13:48:17.939Z", - "contributors": [ - "wbamberg", - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/copy": { - "modified": "2019-03-23T22:22:48.922Z", - "contributors": [ - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/ended_(Web_Audio)": { - "modified": "2019-03-18T21:16:53.303Z", - "contributors": [ - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/error": { - "modified": "2019-03-23T22:21:21.432Z", - "contributors": [ - "fscholz", - "loella16", - "Kalwyn" - ] - }, - "Web/Events/focusin": { - "modified": "2019-03-23T22:20:35.765Z", - "contributors": [ - "fscholz", - "Kalwyn" - ] - }, - "Web/Events/focusout": { - "modified": "2019-03-23T22:22:45.276Z", - "contributors": [ - "fscholz", - "Kalwyn", - "Behrouze" - ] - }, - "Web/Events/load": { - "modified": "2019-03-18T20:54:13.374Z", - "contributors": [ - "fscholz", - "Watilin", - "SphinxKnight", - "SaShimy", - "ebear", - "jmh" - ] - }, - "Web/Events/pagehide": { - "modified": "2019-03-18T21:31:42.222Z", - "contributors": [ - "Watilin" - ] - }, - "Web/Events/pageshow": { - "modified": "2019-03-23T22:44:21.347Z", - "contributors": [ - "Watilin", - "fscholz", - "jmh" - ] - }, - "Web/Events/readystatechange": { - "modified": "2019-03-23T22:44:19.958Z", - "contributors": [ - "fscholz", - "cedeber", - "jmh" - ] - }, - "Web/Events/transitionend": { - "modified": "2020-10-15T21:58:39.030Z", - "contributors": [ - "Voulto", - "fscholz", - "dominiquevilain" - ] - }, - "Web/Events/unload": { - "modified": "2019-04-30T14:26:18.615Z", - "contributors": [ - "wbamberg", - "CptGerV", - "florent.vaucelle" - ] - }, - "Web/Guide": { - "modified": "2020-04-12T14:16:39.360Z", - "contributors": [ - "ele-gall-ac-mineducation", - "tristantheb", - "SphinxKnight", - "Leticiak37", - "demangejeremy", - "EloD10", - "axel8591", - "SaintCyr", - "Hydr0s", - "Fredchat", - "Caudralys", - "teoli", - "fama25", - "ethertank", - "tregagnon", - "Sheppy" - ] - }, - "Web/Guide/AJAX": { - "modified": "2020-06-08T12:58:09.722Z", - "contributors": [ - "Maxi-MenuBestOfPlus", - "CyrilKrylatov", - "SphinxKnight", - "chrisdavidmills", - "Arkhall", - "Nothus", - "tregagnon", - "arena", - "Mgjbot", - "Summit677", - "Fredchat", - "BenoitL", - "Neumann", - "Chbok", - "VincentN", - "Dria" - ] - }, - "Web/Guide/AJAX/Communauté": { - "modified": "2019-01-16T16:10:44.992Z", - "contributors": [ - "chrisdavidmills", - "Fredchat", - "Mgjbot", - "VincentN", - "Chbok" - ] - }, - "Web/Guide/AJAX/Premiers_pas": { - "modified": "2020-05-07T07:49:40.639Z", - "contributors": [ - "grandoc", - "VictorLequin", - "Watilin", - "GregMorel", - "CyrilKrylatov", - "chrisdavidmills", - "Jibec", - "P_MO", - "arena", - "Mgjbot", - "Fredchat", - "Rbories", - "BenoitL", - "Cbi1net", - "Rodolphe", - "Chbok", - "VincentN", - "Taken", - "Oumar", - "Diskostu" - ] - }, - "Web/Guide/API": { - "modified": "2019-03-23T23:08:38.035Z", - "contributors": [ - "SphinxKnight", - "demangejeremy", - "shing0608" - ] - }, - "Web/Guide/API/Gamepad": { - "modified": "2019-03-23T23:08:49.794Z", - "contributors": [ - "matteodelabre", - "Goofy", - "jessmania" - ] - }, - "Web/Guide/API/WebRTC": { - "modified": "2019-03-23T23:07:44.484Z", - "contributors": [ - "wordsbybird" - ] - }, - "Web/Guide/API/WebRTC/WebRTC_architecture": { - "modified": "2019-03-23T23:07:50.082Z", - "contributors": [ - "Goofy", - "wordsbybird" - ] - }, - "Web/Guide/API/WebRTC/WebRTC_basics": { - "modified": "2020-11-22T05:39:33.506Z", - "contributors": [ - "tonybengue", - "amineSsa", - "wordsbybird" - ] - }, - "Web/Guide/Audio_and_video_delivery": { - "modified": "2019-03-23T22:00:15.299Z", - "contributors": [ - "chrisdavidmills", - "a-mt" - ] - }, - "Web/Guide/Audio_and_video_delivery/Live_streaming_web_audio_and_video": { - "modified": "2019-03-18T20:51:45.799Z", - "contributors": [ - "chrisdavidmills", - "a-mt" - ] - }, - "Web/Guide/Audio_and_video_delivery/buffering_seeking_time_ranges": { - "modified": "2019-03-18T20:51:45.442Z", - "contributors": [ - "chrisdavidmills", - "a-mt" - ] - }, - "Web/Guide/Audio_and_video_manipulation": { - "modified": "2019-03-23T22:00:16.201Z", - "contributors": [ - "chrisdavidmills", - "a-mt" - ] - }, - "Web/Guide/DOM": { - "modified": "2020-08-30T07:19:22.993Z", - "contributors": [ - "Voulto", - "tregagnon", - "Sheppy" - ] - }, - "Web/Guide/DOM/Events": { - "modified": "2020-08-30T07:20:46.985Z", - "contributors": [ - "Voulto", - "Sheppy" - ] - }, - "Web/Guide/DOM/Events/Creating_and_triggering_events": { - "modified": "2020-10-15T21:40:07.710Z", - "contributors": [ - "tristantheb", - "loella16", - "csblo", - "yasakura_", - "jmh" - ] - }, - "Web/Guide/DOM/Events/Les_données_d_orientation_et_de_mouvement_expliquées": { - "modified": "2019-03-18T21:41:00.371Z", - "contributors": [ - "loella16" - ] - }, - "Web/Guide/DOM/Events/Touch_events": { - "modified": "2020-10-15T21:23:44.732Z", - "contributors": [ - "ebear", - "wbamberg", - "quentin.lamamy", - "nmonceyron", - "Goofy", - "SphinxKnight" - ] - }, - "Web/Guide/DOM/Events/Touch_events/Gérer_à_la_fois_événement_tactile_et_événement_de_la_souris": { - "modified": "2019-03-18T21:33:21.001Z", - "contributors": [ - "CharlotteW" - ] - }, - "Web/Guide/DOM/Events/evenement_medias": { - "modified": "2019-03-23T22:20:46.809Z", - "contributors": [ - "Hell_Carlito", - "jucrouzet" - ] - }, - "Web/Guide/DOM/Manipuler_historique_du_navigateur": { - "modified": "2019-03-23T23:36:51.472Z", - "contributors": [ - "Watilin", - "Outlivier", - "loella16", - "JoJoMimosa", - "zessx", - "tregagnon", - "CapFlow", - "Beaver", - "pparidans" - ] - }, - "Web/Guide/DOM/Manipuler_historique_du_navigateur/Example": { - "modified": "2019-03-23T23:32:28.258Z", - "contributors": [ - "tregagnon", - "matteodelabre" - ] - }, - "Web/Guide/DOM/Using_full_screen_mode": { - "modified": "2019-03-23T23:28:29.789Z", - "contributors": [ - "wbamberg", - "loella16", - "Gaelliss", - "kiux", - "warpdesign", - "Rudloff" - ] - }, - "Web/Guide/Graphics": { - "modified": "2019-03-23T23:29:27.864Z", - "contributors": [ - "tonybengue", - "Patrice-Koumar", - "Goofy", - "tregagnon", - "darnuria" - ] - }, - "Web/Guide/Graphics/Dessiner_avec_canvas": { - "modified": "2019-03-23T23:59:59.422Z", - "contributors": [ - "emersion", - "Laurent_Lyaudet", - "Delapouite", - "tregagnon", - "Nairod", - "BenoitL", - "Chbok", - "Mgjbot", - "Pitux" - ] - }, - "Web/Guide/HTML/Astuces_de_création_de_pages_HTML_à_affichage_rapide": { - "modified": "2020-07-16T22:22:32.522Z", - "contributors": [ - "tbazin", - "rfc791", - "tregagnon", - "ethertank", - "rgkdev", - "shgz", - "Shz" - ] - }, - "Web/Guide/HTML/Catégories_de_contenu": { - "modified": "2020-03-31T11:01:50.986Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "loella16", - "marie-ototoi", - "tregagnon", - "xaky" - ] - }, - "Web/Guide/HTML/Formulaires": { - "modified": "2020-07-16T22:20:56.659Z", - "contributors": [ - "BAHLOUL_Farouk", - "Dralyab", - "klenzo", - "Porkepix", - "Orkrum", - "diomabb", - "SphinxKnight", - "Goofy", - "tregagnon", - "FredB" - ] - }, - "Web/Guide/HTML/Formulaires/Advanced_styling_for_HTML_forms": { - "modified": "2020-07-16T22:21:34.205Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Apparence_des_formulaires_HTML": { - "modified": "2020-07-16T22:21:30.990Z", - "contributors": [ - "Dralyab", - "Goofy", - "tregagnon", - "FredB" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_construire_des_widgets_de_formulaires_personnalisés": { - "modified": "2020-07-16T22:21:55.892Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_construire_des_widgets_de_formulaires_personnalisés/Example_3": { - "modified": "2020-07-16T22:21:59.707Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_construire_des_widgets_de_formulaires_personnalisés/Example_4": { - "modified": "2020-07-16T22:22:00.018Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_construire_des_widgets_de_formulaires_personnalisés/Example_5": { - "modified": "2020-07-16T22:22:00.342Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_construire_des_widgets_de_formulaires_personnalisés/Exemple_1": { - "modified": "2020-07-16T22:21:58.979Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_construire_des_widgets_de_formulaires_personnalisés/Exemple_2": { - "modified": "2020-07-16T22:21:59.361Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_structurer_un_formulaire_HTML": { - "modified": "2020-07-16T22:21:11.591Z", - "contributors": [ - "Dralyab", - "Lotfire", - "efazenda", - "Sheppy", - "tregagnon", - "FredB" - ] - }, - "Web/Guide/HTML/Formulaires/Comment_structurer_un_formulaire_HTML/Exemple": { - "modified": "2020-07-16T22:21:17.064Z", - "contributors": [ - "Dralyab", - "elseydi", - "tregagnon", - "FredB" - ] - }, - "Web/Guide/HTML/Formulaires/Envoyer_et_extraire_les_données_des_formulaires": { - "modified": "2020-07-16T22:21:26.847Z", - "contributors": [ - "Dralyab", - "ChristianR25", - "Bam92", - "ben391", - "Thorium90", - "teoli", - "rebeccachaix" - ] - }, - "Web/Guide/HTML/Formulaires/HTML_forms_in_legacy_browsers": { - "modified": "2020-07-16T22:22:03.313Z", - "contributors": [ - "Dralyab", - "eli.g" - ] - }, - "Web/Guide/HTML/Formulaires/Les_blocs_de_formulaires_natifs": { - "modified": "2020-07-16T22:21:20.212Z", - "contributors": [ - "Rififia", - "Dralyab", - "efazenda", - "tregagnon", - "FredB" - ] - }, - "Web/Guide/HTML/Formulaires/Mon_premier_formulaire_HTML": { - "modified": "2020-11-20T03:07:01.051Z", - "contributors": [ - "SphinxKnight", - "tiluc", - "BAHLOUL_Farouk", - "mikeleyeti", - "Dralyab", - "DineshMv", - "teoli", - "Sheppy", - "jean-pierre.gay", - "Goofy", - "ChaaSof", - "FredB", - "Mozinet", - "tregagnon" - ] - }, - "Web/Guide/HTML/Formulaires/Mon_premier_formulaire_HTML/Exemple": { - "modified": "2020-07-16T22:21:08.230Z", - "contributors": [ - "Dralyab", - "tregagnon", - "FredB" - ] - }, - "Web/Guide/HTML/Formulaires/Property_compatibility_table_for_form_widgets": { - "modified": "2020-07-16T22:21:39.980Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Sending_forms_through_JavaScript": { - "modified": "2020-07-16T22:22:01.597Z", - "contributors": [ - "Dralyab" - ] - }, - "Web/Guide/HTML/Formulaires/Validation_donnees_formulaire": { - "modified": "2020-07-16T22:21:50.526Z", - "contributors": [ - "ariasuni", - "Dralyab", - "SphinxKnight", - "HereComesJuju" - ] - }, - "Web/Guide/HTML/HTML5": { - "modified": "2019-11-06T04:21:55.272Z", - "contributors": [ - "Awebsome", - "teoli", - "tregagnon", - "leoetlino", - "Flaburgan", - "DavidWalsh", - "vigia122", - "MatthieuMaler", - "rd6137", - "Dwchiang", - "BenoitL" - ] - }, - "Web/Guide/HTML/HTML5/Liste_des_éléments_HTML5": { - "modified": "2019-03-23T23:39:45.493Z", - "contributors": [ - "LiliTha", - "tregagnon", - "teoli", - "regisg27", - "Fredchat", - "MatthieuMaler" - ] - }, - "Web/Guide/HTML/Liens_email": { - "modified": "2020-10-27T03:22:58.763Z", - "contributors": [ - "SphinxKnight", - "cristianxhaca199", - "OhNiice" - ] - }, - "Web/Guide/Mobile": { - "modified": "2019-03-23T23:29:36.868Z", - "contributors": [ - "wakka27", - "BenoitL" - ] - }, - "Web/Guide/Performance": { - "modified": "2019-03-23T23:28:31.959Z", - "contributors": [ - "superfrenchboy", - "teoli", - "Sheppy" - ] - }, - "Web/Guide/User_input_methods": { - "modified": "2019-03-23T22:00:16.721Z", - "contributors": [ - "chrisdavidmills", - "a-mt" - ] - }, - "Web/Guide/Using_FormData_Objects": { - "modified": "2019-03-23T23:02:24.025Z", - "contributors": [ - "pierreadrienbuisson", - "jean-pierre.gay" - ] - }, - "Web/HTML": { - "modified": "2020-05-09T13:47:36.411Z", - "contributors": [ - "SphinxKnight", - "facebook", - "tristantheb", - "NicolasCELLA", - "NerOcrO", - "tonybengue", - "Goofy", - "KhalilSnaake", - "Aminelahlou", - "CLEm", - "daniel35310", - "Gibus", - "krischamp", - "julia31", - "jsx", - "teoli", - "jalu78", - "DamienBertrand", - "wakka27", - "Luejni", - "nicoo", - "PetiPandaRou", - "Junipa", - "msherefel", - "claudepache", - "tregagnon", - "Saydev", - "FredB", - "BenoitL", - "ThePrisoner", - "abc222", - "david-suisse", - "Shz", - "xaky", - "fscholz", - "Mgjbot", - "Chbok", - "Planche", - "Takenbot" - ] - }, - "Web/HTML/Appliquer_des_couleurs": { - "modified": "2019-05-09T08:27:28.339Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs": { - "modified": "2019-08-05T13:35:34.698Z", - "contributors": [ - "SphinxKnight", - "louuis", - "msherefel", - "tregagnon", - "FredB" - ] - }, - "Web/HTML/Attributs/autocomplete": { - "modified": "2020-10-30T09:19:41.790Z", - "contributors": [ - "xel1045", - "Thosquey", - "fx-kuntz-dw", - "SphinxKnight", - "klnjmm" - ] - }, - "Web/HTML/Attributs/pattern": { - "modified": "2020-12-02T04:01:31.109Z", - "contributors": [ - "SphinxKnight", - "roxaneprovost" - ] - }, - "Web/HTML/Attributs_universels": { - "modified": "2020-10-15T21:07:20.352Z", - "contributors": [ - "SphinxKnight", - "xxDukeMCxx", - "Loliwe", - "wakooka", - "claudepache", - "louuis", - "msherefel", - "tregagnon", - "mistyrouge", - "Shz", - "xaky" - ] - }, - "Web/HTML/Attributs_universels/accesskey": { - "modified": "2020-10-15T21:33:33.820Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "guillaumev" - ] - }, - "Web/HTML/Attributs_universels/autocapitalize": { - "modified": "2020-10-15T22:02:11.899Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/class": { - "modified": "2020-10-15T21:33:47.181Z", - "contributors": [ - "SphinxKnight", - "vazyvite" - ] - }, - "Web/HTML/Attributs_universels/contenteditable": { - "modified": "2020-10-15T21:33:48.879Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/contextmenu": { - "modified": "2020-10-15T21:33:49.445Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/data-*": { - "modified": "2020-10-15T21:33:48.787Z", - "contributors": [ - "SphinxKnight", - "ClementRocket", - "dashdashzako", - "olange" - ] - }, - "Web/HTML/Attributs_universels/dir": { - "modified": "2020-10-15T21:33:54.030Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/draggable": { - "modified": "2020-10-15T21:33:51.496Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/dropzone": { - "modified": "2020-10-15T21:33:33.621Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "Goofy", - "guillaumev" - ] - }, - "Web/HTML/Attributs_universels/hidden": { - "modified": "2020-10-15T21:33:54.525Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/id": { - "modified": "2020-10-15T21:33:53.408Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/inputmode": { - "modified": "2020-10-15T22:11:16.049Z", - "contributors": [ - "regseb", - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/is": { - "modified": "2020-10-15T22:01:11.769Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/itemid": { - "modified": "2020-10-15T21:43:26.402Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/itemprop": { - "modified": "2020-10-15T21:43:28.895Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/itemref": { - "modified": "2020-10-15T21:43:27.145Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/itemscope": { - "modified": "2020-10-15T21:43:32.087Z", - "contributors": [ - "SphinxKnight", - "dFegnoux" - ] - }, - "Web/HTML/Attributs_universels/itemtype": { - "modified": "2020-10-15T21:43:29.485Z", - "contributors": [ - "SphinxKnight", - "ferdi_" - ] - }, - "Web/HTML/Attributs_universels/lang": { - "modified": "2020-10-15T21:33:54.262Z", - "contributors": [ - "SphinxKnight", - "gfc" - ] - }, - "Web/HTML/Attributs_universels/slot": { - "modified": "2020-10-15T21:51:35.355Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/spellcheck": { - "modified": "2020-10-15T21:33:50.764Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/style": { - "modified": "2020-10-15T21:33:51.867Z", - "contributors": [ - "SphinxKnight", - "Morgan-jarry" - ] - }, - "Web/HTML/Attributs_universels/tabindex": { - "modified": "2020-10-15T21:33:53.441Z", - "contributors": [ - "SphinxKnight", - "ggrossetie", - "Le_suisse", - "Goofy" - ] - }, - "Web/HTML/Attributs_universels/title": { - "modified": "2020-10-15T21:33:33.266Z", - "contributors": [ - "SphinxKnight", - "babsolune", - "Goofy", - "guillaumev" - ] - }, - "Web/HTML/Attributs_universels/translate": { - "modified": "2020-10-15T21:33:34.133Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "guillaumev" - ] - }, - "Web/HTML/Attributs_universels/x-ms-acceleratorkey": { - "modified": "2019-08-05T13:42:31.573Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Attributs_universels/x-ms-format-detection": { - "modified": "2019-08-05T13:38:52.259Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Contenu_editable": { - "modified": "2019-04-20T23:42:36.501Z", - "contributors": [ - "tregagnon", - "SphinxKnight" - ] - }, - "Web/HTML/Element": { - "modified": "2019-06-20T13:53:53.330Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "RolandOnGitHub", - "Loliwe", - "unpeudetout", - "tregagnon", - "OlivierBaudry", - "BlackSheep", - "BenoitL", - "Lomalarch", - "jackblack", - "Shz", - "xaky", - "teoli", - "Mgjbot" - ] - }, - "Web/HTML/Element/Button": { - "modified": "2020-10-15T21:14:16.152Z", - "contributors": [ - "yannbertrand", - "SphinxKnight", - "vvvaleee", - "grandoc", - "Chealer", - "marie-ototoi", - "arnaudb", - "FredB", - "tregagnon", - "ethertank", - "teoli" - ] - }, - "Web/HTML/Element/Fieldset": { - "modified": "2020-10-15T21:14:14.734Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "teoli", - "ethertank" - ] - }, - "Web/HTML/Element/Form": { - "modified": "2020-10-15T21:14:20.837Z", - "contributors": [ - "SphinxKnight", - "Hirevo", - "edspeedy", - "Jack_Duthen", - "msherefel", - "Goofy", - "wakooka", - "tregagnon", - "teoli", - "jswisher" - ] - }, - "Web/HTML/Element/Heading_Elements": { - "modified": "2020-11-02T08:01:39.577Z", - "contributors": [ - "ylerjen", - "SphinxKnight", - "marie-ototoi", - "Bat", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/HTML/Element/Img": { - "modified": "2020-10-15T21:23:10.312Z", - "contributors": [ - "tristantheb", - "Yukulele.", - "SphinxKnight", - "Chomchaum", - "jgil83000", - "codemmousse", - "Yves_ASTIER", - "Hell_Carlito", - "hostalerye", - "FranckCo", - "louuis", - "Alexfrits", - "msherefel", - "tregagnon", - "olibre", - "Goofy" - ] - }, - "Web/HTML/Element/Input": { - "modified": "2020-10-15T21:14:16.017Z", - "contributors": [ - "SphinxKnight", - "VictorLequin", - "Flop", - "Dridou", - "SimonArruti", - "lionel", - "marie-ototoi", - "nicofrand", - "wakka27", - "Flaburgan", - "jbeuh", - "arnaudbienner", - "msherefel", - "tregagnon", - "teoli" - ] - }, - "Web/HTML/Element/Input/button": { - "modified": "2020-10-15T21:37:46.494Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "dreizn", - "Bat", - "Goofy" - ] - }, - "Web/HTML/Element/Input/checkbox": { - "modified": "2020-10-15T21:39:40.574Z", - "contributors": [ - "Jamelkol", - "a-carvallo", - "SphinxKnight", - "LaurentBarbareau", - "euZebe", - "FanJiyong", - "ctjhoa", - "AnthonyMaton" - ] - }, - "Web/HTML/Element/Input/color": { - "modified": "2020-10-15T21:34:25.198Z", - "contributors": [ - "Jamelkol", - "SphinxKnight", - "nicofrand", - "josephcab" - ] - }, - "Web/HTML/Element/Input/date": { - "modified": "2020-10-15T21:39:48.210Z", - "contributors": [ - "Flaburgan", - "SphinxKnight", - "Lodec", - "P45QU10U", - "mliatt", - "doriangillet", - "marie-ototoi", - "Bat" - ] - }, - "Web/HTML/Element/Input/datetime": { - "modified": "2019-04-04T15:45:35.933Z", - "contributors": [ - "SphinxKnight", - "Antoine-Demailly", - "marie-ototoi", - "KylianLM" - ] - }, - "Web/HTML/Element/Input/datetime-local": { - "modified": "2020-10-28T11:18:38.925Z", - "contributors": [ - "nbtetreault", - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/email": { - "modified": "2020-10-15T21:55:52.405Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/file": { - "modified": "2020-10-15T21:54:07.371Z", - "contributors": [ - "brunostasse", - "masonlouchart", - "SphinxKnight", - "PhilippePerret", - "gnoxr", - "daufinsyd" - ] - }, - "Web/HTML/Element/Input/hidden": { - "modified": "2020-10-15T21:55:51.697Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/image": { - "modified": "2020-10-15T21:43:35.571Z", - "contributors": [ - "Jamelkol", - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/month": { - "modified": "2020-10-15T21:56:34.329Z", - "contributors": [ - "SphinxKnight", - "loganblangenois" - ] - }, - "Web/HTML/Element/Input/number": { - "modified": "2020-10-15T21:55:45.586Z", - "contributors": [ - "SphinxKnight", - "nbrdx", - "Louis-PhilippeTrempe" - ] - }, - "Web/HTML/Element/Input/password": { - "modified": "2020-10-15T21:43:36.452Z", - "contributors": [ - "SphinxKnight", - "CAILAC-Maxime" - ] - }, - "Web/HTML/Element/Input/radio": { - "modified": "2020-10-15T21:55:43.403Z", - "contributors": [ - "SphinxKnight", - "FanJiyong" - ] - }, - "Web/HTML/Element/Input/range": { - "modified": "2020-10-15T21:55:44.797Z", - "contributors": [ - "SphinxKnight", - "jerominejournet" - ] - }, - "Web/HTML/Element/Input/reset": { - "modified": "2020-10-15T21:55:53.083Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/search": { - "modified": "2020-10-15T21:55:52.204Z", - "contributors": [ - "SphinxKnight", - "lionralfs" - ] - }, - "Web/HTML/Element/Input/submit": { - "modified": "2020-10-15T21:56:12.673Z", - "contributors": [ - "SphinxKnight", - "cabalpit" - ] - }, - "Web/HTML/Element/Input/tel": { - "modified": "2020-11-24T06:34:33.505Z", - "contributors": [ - "Superkooka", - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/text": { - "modified": "2020-10-15T21:57:28.394Z", - "contributors": [ - "SphinxKnight", - "Keyhaku" - ] - }, - "Web/HTML/Element/Input/time": { - "modified": "2020-10-15T21:57:37.801Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/url": { - "modified": "2020-10-15T21:57:06.539Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/Input/week": { - "modified": "2020-10-15T21:57:06.373Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/Keygen": { - "modified": "2020-10-15T21:14:21.658Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "msherefel", - "tregagnon", - "teoli" - ] - }, - "Web/HTML/Element/Label": { - "modified": "2020-10-15T21:14:20.293Z", - "contributors": [ - "SphinxKnight", - "colindefais", - "marie-ototoi", - "tregagnon", - "teoli" - ] - }, - "Web/HTML/Element/Legend": { - "modified": "2020-10-15T21:14:17.910Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli" - ] - }, - "Web/HTML/Element/Meter": { - "modified": "2020-10-15T21:14:20.481Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "teoli" - ] - }, - "Web/HTML/Element/Optgroup": { - "modified": "2020-10-15T21:14:18.536Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "ethertank", - "teoli" - ] - }, - "Web/HTML/Element/Option": { - "modified": "2020-10-15T21:14:23.462Z", - "contributors": [ - "Jamelkol", - "SphinxKnight", - "stevenremot", - "tregagnon", - "teoli" - ] - }, - "Web/HTML/Element/Progress": { - "modified": "2020-10-15T21:14:19.837Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "Goofy", - "ethertank", - "teoli" - ] - }, - "Web/HTML/Element/Shadow": { - "modified": "2020-10-15T21:39:46.549Z", - "contributors": [ - "SphinxKnight", - "jean-pierre.gay" - ] - }, - "Web/HTML/Element/Source": { - "modified": "2020-10-15T21:11:10.814Z", - "contributors": [ - "SphinxKnight", - "Hell_Carlito", - "Goofy", - "louuis", - "FredB", - "tregagnon", - "mekal" - ] - }, - "Web/HTML/Element/Textarea": { - "modified": "2020-10-15T21:14:21.148Z", - "contributors": [ - "SphinxKnight", - "lulu5239", - "kagagnon", - "wakka27", - "emagnier", - "tregagnon", - "teoli" - ] - }, - "Web/HTML/Element/a": { - "modified": "2020-11-06T11:21:23.131Z", - "contributors": [ - "CCR-G", - "arkhi", - "mathildebuenerd", - "SphinxKnight", - "Miraty", - "NerOcrO", - "Banban", - "marie-ototoi", - "teoli", - "msherefel", - "tregagnon", - "Goofy", - "ethertank", - "DavidWalsh", - "FredB", - "autodidactie", - "BenoitL" - ] - }, - "Web/HTML/Element/abbr": { - "modified": "2020-10-15T21:20:25.117Z", - "contributors": [ - "SphinxKnight", - "grandoc", - "marie-ototoi", - "fscholz", - "msherefel", - "tregagnon", - "Pandark", - "Fredchat" - ] - }, - "Web/HTML/Element/acronym": { - "modified": "2020-10-15T21:23:09.919Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/address": { - "modified": "2020-10-15T21:21:12.040Z", - "contributors": [ - "SphinxKnight", - "MisterDaFunk", - "edspeedy", - "marie-ototoi", - "tregagnon", - "msherefel", - "laparn" - ] - }, - "Web/HTML/Element/applet": { - "modified": "2020-10-15T21:23:12.907Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/area": { - "modified": "2020-10-15T21:23:17.179Z", - "contributors": [ - "SphinxKnight", - "sp00m", - "tregagnon" - ] - }, - "Web/HTML/Element/article": { - "modified": "2020-10-15T21:20:54.261Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "Hell_Carlito", - "jumperparis", - "marie-ototoi", - "louuis", - "teoli", - "tregagnon", - "SwordArMor" - ] - }, - "Web/HTML/Element/aside": { - "modified": "2020-10-15T21:20:52.000Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "marie-ototoi", - "tregagnon", - "msherefel", - "SwordArMor" - ] - }, - "Web/HTML/Element/audio": { - "modified": "2020-10-15T21:05:01.673Z", - "contributors": [ - "SphinxKnight", - "MisterDaFunk", - "Brah0um", - "Goofy", - "EnzDev", - "marie-ototoi", - "WSH", - "louuis", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/b": { - "modified": "2020-10-15T21:13:13.517Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "msherefel", - "tregagnon", - "Goofy", - "ethertank", - "Shz" - ] - }, - "Web/HTML/Element/base": { - "modified": "2020-10-15T21:23:10.852Z", - "contributors": [ - "SphinxKnight", - "eduleboss", - "teoli", - "louuis", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/basefont": { - "modified": "2020-10-15T21:23:31.867Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "tregagnon" - ] - }, - "Web/HTML/Element/bdi": { - "modified": "2020-10-15T21:23:16.145Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "Delapouite" - ] - }, - "Web/HTML/Element/bdo": { - "modified": "2020-10-15T21:23:20.744Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/bgsound": { - "modified": "2020-10-15T21:23:34.219Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/big": { - "modified": "2020-10-15T21:23:57.237Z", - "contributors": [ - "SphinxKnight", - "Daniel005", - "Goofy", - "tregagnon" - ] - }, - "Web/HTML/Element/blink": { - "modified": "2020-10-15T21:23:48.718Z", - "contributors": [ - "SphinxKnight", - "teoli", - "cgrimal", - "tregagnon" - ] - }, - "Web/HTML/Element/blockquote": { - "modified": "2020-10-15T21:20:42.040Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "marie-ototoi", - "tregagnon", - "teoli", - "regisg27" - ] - }, - "Web/HTML/Element/body": { - "modified": "2020-10-15T21:13:11.999Z", - "contributors": [ - "SphinxKnight", - "PhilippeV", - "begmans", - "msherefel", - "tregagnon", - "Shz", - "ethertank" - ] - }, - "Web/HTML/Element/br": { - "modified": "2020-10-15T21:13:11.891Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "louuis", - "tregagnon", - "ethertank", - "Shz" - ] - }, - "Web/HTML/Element/canvas": { - "modified": "2020-10-15T21:11:31.038Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "emersion", - "tregagnon", - "lumiru", - "Shahor", - "xaky" - ] - }, - "Web/HTML/Element/caption": { - "modified": "2020-10-15T21:23:14.688Z", - "contributors": [ - "SphinxKnight", - "Valbou", - "_pierrick_", - "tregagnon" - ] - }, - "Web/HTML/Element/center": { - "modified": "2020-10-15T21:23:55.900Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/cite": { - "modified": "2020-10-15T21:23:18.545Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "louuis", - "AnthonyMaton", - "tregagnon" - ] - }, - "Web/HTML/Element/code": { - "modified": "2020-10-15T21:13:10.410Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "Nadra", - "tregagnon", - "ethertank", - "xaky" - ] - }, - "Web/HTML/Element/col": { - "modified": "2020-10-15T21:23:13.154Z", - "contributors": [ - "SphinxKnight", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/colgroup": { - "modified": "2020-10-15T21:23:21.879Z", - "contributors": [ - "SphinxKnight", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/command": { - "modified": "2020-10-15T21:20:20.685Z", - "contributors": [ - "SphinxKnight", - "JNa0", - "tregagnon", - "DirtyVader" - ] - }, - "Web/HTML/Element/content": { - "modified": "2020-10-15T21:26:28.598Z", - "contributors": [ - "SphinxKnight", - "Mylainos" - ] - }, - "Web/HTML/Element/data": { - "modified": "2020-10-15T21:23:14.238Z", - "contributors": [ - "lespacedunmatin", - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/datalist": { - "modified": "2020-10-15T21:14:21.726Z", - "contributors": [ - "SphinxKnight", - "msherefel", - "Zefling", - "tregagnon", - "Goofy", - "Delapouite", - "ethertank", - "teoli" - ] - }, - "Web/HTML/Element/dd": { - "modified": "2020-10-15T21:23:15.318Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/del": { - "modified": "2020-10-15T21:23:25.321Z", - "contributors": [ - "THE_PHOENIX", - "SphinxKnight", - "Goofy", - "thomas.g", - "tregagnon" - ] - }, - "Web/HTML/Element/details": { - "modified": "2020-10-15T21:20:52.346Z", - "contributors": [ - "SphinxKnight", - "bhenbe", - "marie-ototoi", - "Elanis", - "louuis", - "msherefel", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/HTML/Element/dfn": { - "modified": "2020-10-15T21:23:19.445Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/dialog": { - "modified": "2020-10-15T21:29:25.711Z", - "contributors": [ - "SphinxKnight", - "J.DMB", - "KkFalse2", - "louuis" - ] - }, - "Web/HTML/Element/dir": { - "modified": "2020-10-15T21:23:54.346Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/div": { - "modified": "2020-10-15T21:20:48.669Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "teoli", - "dhar" - ] - }, - "Web/HTML/Element/dl": { - "modified": "2020-10-15T21:23:31.779Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/dt": { - "modified": "2020-10-15T21:23:25.261Z", - "contributors": [ - "SphinxKnight", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/element": { - "modified": "2020-10-15T21:26:29.511Z", - "contributors": [ - "SphinxKnight", - "JNa0", - "teoli", - "louuis", - "ylerjen" - ] - }, - "Web/HTML/Element/em": { - "modified": "2020-10-15T21:20:54.814Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "Goofy", - "tregagnon", - "teoli", - "regisg27" - ] - }, - "Web/HTML/Element/embed": { - "modified": "2020-10-15T21:23:16.484Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/figcaption": { - "modified": "2020-10-15T21:20:53.877Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "tregagnon", - "bertrandkeller" - ] - }, - "Web/HTML/Element/figure": { - "modified": "2020-10-15T21:23:12.610Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/font": { - "modified": "2020-10-15T21:23:56.298Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "tregagnon" - ] - }, - "Web/HTML/Element/footer": { - "modified": "2020-10-15T21:20:42.960Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "ksad", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/HTML/Element/frame": { - "modified": "2020-10-15T21:24:02.752Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/frameset": { - "modified": "2020-10-15T21:24:06.498Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/head": { - "modified": "2020-10-15T21:20:23.173Z", - "contributors": [ - "SphinxKnight", - "louuis", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/HTML/Element/header": { - "modified": "2020-10-15T21:20:52.453Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "marie-ototoi", - "msherefel", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/HTML/Element/hgroup": { - "modified": "2020-10-15T21:23:14.998Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "marie-ototoi", - "tregagnon", - "Goofy" - ] - }, - "Web/HTML/Element/hr": { - "modified": "2020-10-15T21:22:24.865Z", - "contributors": [ - "jakfils", - "SphinxKnight", - "PhilippeV", - "louuis", - "Fredchat", - "tregagnon", - "zizielmehdi" - ] - }, - "Web/HTML/Element/html": { - "modified": "2020-10-15T21:20:11.083Z", - "contributors": [ - "SphinxKnight", - "kingseak", - "goofy_bz", - "Fredchat", - "tregagnon", - "Shonda" - ] - }, - "Web/HTML/Element/i": { - "modified": "2020-10-15T21:23:26.221Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "louiscarrese", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/iframe": { - "modified": "2020-10-15T21:23:33.826Z", - "contributors": [ - "quadristan", - "SphinxKnight", - "ThCarrere", - "loella16", - "guillaumegarcia13", - "PxlCtzn", - "marie-ototoi", - "shinigami35", - "msherefel", - "tregagnon" - ] - }, - "Web/HTML/Element/image": { - "modified": "2020-10-15T21:27:06.857Z", - "contributors": [ - "SphinxKnight", - "teoli", - "msherefel" - ] - }, - "Web/HTML/Element/ins": { - "modified": "2020-10-15T21:23:18.858Z", - "contributors": [ - "SphinxKnight", - "wakka27", - "tregagnon" - ] - }, - "Web/HTML/Element/isindex": { - "modified": "2020-10-15T21:24:06.247Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/kbd": { - "modified": "2020-10-15T21:23:28.702Z", - "contributors": [ - "SphinxKnight", - "duduindo", - "loversun5", - "edspeedy", - "marie-ototoi", - "wakka27", - "tregagnon" - ] - }, - "Web/HTML/Element/li": { - "modified": "2020-10-15T21:23:31.636Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "NemoNobobyPersonne", - "tregagnon" - ] - }, - "Web/HTML/Element/link": { - "modified": "2020-10-15T21:17:06.340Z", - "contributors": [ - "devscipline", - "SphinxKnight", - "antlio", - "Fredchat", - "louuis", - "tregagnon", - "BenoitL", - "Mgjbot" - ] - }, - "Web/HTML/Element/listing": { - "modified": "2020-10-15T21:24:01.189Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/main": { - "modified": "2020-10-15T21:24:00.758Z", - "contributors": [ - "SphinxKnight", - "NicolasGraph", - "tonybengue", - "edspeedy", - "marie-ototoi", - "louuis", - "tregagnon", - "Goofy", - "Delapouite", - "mistyrouge" - ] - }, - "Web/HTML/Element/map": { - "modified": "2020-10-15T21:23:23.856Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/mark": { - "modified": "2020-10-15T21:23:12.856Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "wakka27", - "tregagnon" - ] - }, - "Web/HTML/Element/marquee": { - "modified": "2020-10-15T21:24:09.275Z", - "contributors": [ - "SphinxKnight", - "jilljenn", - "tregagnon", - "RaphaelGoetter", - "mistyrouge" - ] - }, - "Web/HTML/Element/menu": { - "modified": "2020-10-15T21:23:12.040Z", - "contributors": [ - "SphinxKnight", - "Dralyab", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/menuitem": { - "modified": "2020-10-15T21:24:26.748Z", - "contributors": [ - "SphinxKnight", - "JNa0", - "tregagnon", - "Delapouite" - ] - }, - "Web/HTML/Element/meta": { - "modified": "2020-10-15T21:23:56.046Z", - "contributors": [ - "SphinxKnight", - "jumperparis", - "tregagnon" - ] - }, - "Web/HTML/Element/multicol": { - "modified": "2020-10-15T21:27:07.686Z", - "contributors": [ - "SphinxKnight", - "msherefel" - ] - }, - "Web/HTML/Element/nav": { - "modified": "2020-10-15T21:23:13.672Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "ZanyMonk", - "tregagnon" - ] - }, - "Web/HTML/Element/nextid": { - "modified": "2020-10-15T21:51:55.717Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/nobr": { - "modified": "2020-10-15T21:23:31.399Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/noembed": { - "modified": "2020-10-15T21:27:10.600Z", - "contributors": [ - "SphinxKnight", - "msherefel" - ] - }, - "Web/HTML/Element/noframes": { - "modified": "2020-10-15T21:24:04.283Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/noscript": { - "modified": "2020-10-15T21:21:52.581Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "morgan37" - ] - }, - "Web/HTML/Element/object": { - "modified": "2020-10-15T21:23:58.336Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/ol": { - "modified": "2020-10-15T21:23:26.938Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "wakka27", - "tregagnon" - ] - }, - "Web/HTML/Element/output": { - "modified": "2020-10-15T21:13:39.223Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "davidbourguignon", - "trevorh", - "ethertank", - "teoli" - ] - }, - "Web/HTML/Element/p": { - "modified": "2020-10-15T21:13:10.399Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "ethertank", - "Shz" - ] - }, - "Web/HTML/Element/param": { - "modified": "2020-10-15T21:23:29.882Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/picture": { - "modified": "2020-10-15T21:29:55.087Z", - "contributors": [ - "SphinxKnight", - "alegout", - "welcoMattic", - "watsab", - "YoruNoHikage", - "J.DMB", - "Goofy", - "nicoo" - ] - }, - "Web/HTML/Element/plaintext": { - "modified": "2020-10-15T21:24:07.076Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/pre": { - "modified": "2020-10-15T21:23:59.375Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/q": { - "modified": "2020-10-15T21:23:31.357Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon" - ] - }, - "Web/HTML/Element/rb": { - "modified": "2020-10-15T22:11:33.941Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/rp": { - "modified": "2020-10-15T21:22:20.484Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "fkhannouf" - ] - }, - "Web/HTML/Element/rt": { - "modified": "2020-10-15T21:22:24.227Z", - "contributors": [ - "SphinxKnight", - "wakka27", - "tregagnon", - "fkhannouf" - ] - }, - "Web/HTML/Element/rtc": { - "modified": "2020-10-15T21:43:35.076Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Element/ruby": { - "modified": "2020-10-15T21:22:22.572Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "tregagnon", - "fkhannouf" - ] - }, - "Web/HTML/Element/s": { - "modified": "2020-10-15T21:23:30.879Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "louuis", - "tregagnon" - ] - }, - "Web/HTML/Element/samp": { - "modified": "2020-10-15T21:23:30.682Z", - "contributors": [ - "SphinxKnight", - "louuis", - "tregagnon" - ] - }, - "Web/HTML/Element/script": { - "modified": "2020-10-15T21:23:07.650Z", - "contributors": [ - "SphinxKnight", - "madarche", - "opii93", - "tregagnon", - "Goofy" - ] - }, - "Web/HTML/Element/section": { - "modified": "2020-10-15T21:20:52.155Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "maelito", - "tregagnon", - "nicolasrenon", - "teoli", - "SwordArMor" - ] - }, - "Web/HTML/Element/select": { - "modified": "2020-10-15T21:13:44.147Z", - "contributors": [ - "SphinxKnight", - "tolbon10", - "FanJiyong", - "jajm", - "tregagnon", - "Julien STUBY", - "teoli", - "Julien.stuby" - ] - }, - "Web/HTML/Element/slot": { - "modified": "2020-10-15T21:51:52.129Z", - "contributors": [ - "SphinxKnight", - "tidiview", - "JNa0" - ] - }, - "Web/HTML/Element/small": { - "modified": "2020-10-15T21:23:53.489Z", - "contributors": [ - "SphinxKnight", - "Tifloz", - "nicoo", - "thomas.g", - "tregagnon" - ] - }, - "Web/HTML/Element/spacer": { - "modified": "2020-10-15T21:24:00.250Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/span": { - "modified": "2020-10-15T21:23:30.889Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/strike": { - "modified": "2020-10-15T21:24:10.841Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/strong": { - "modified": "2020-10-15T21:23:55.822Z", - "contributors": [ - "SphinxKnight", - "emmanuelclement", - "tregagnon" - ] - }, - "Web/HTML/Element/style": { - "modified": "2020-10-15T21:21:50.821Z", - "contributors": [ - "SphinxKnight", - "mathisaillot", - "tregagnon", - "Goofy", - "Matouche" - ] - }, - "Web/HTML/Element/sub": { - "modified": "2020-10-15T21:23:55.023Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/summary": { - "modified": "2020-10-15T21:20:21.472Z", - "contributors": [ - "yannicka", - "SphinxKnight", - "Elanis", - "louuis", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/HTML/Element/sup": { - "modified": "2020-10-15T21:23:23.579Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/table": { - "modified": "2020-10-15T21:20:58.076Z", - "contributors": [ - "SphinxKnight", - "Akyrish", - "Erwann", - "tregagnon", - "fkhannouf", - "fabien.canu@gmail.com" - ] - }, - "Web/HTML/Element/tbody": { - "modified": "2020-10-15T21:23:54.755Z", - "contributors": [ - "SphinxKnight", - "Brah0um", - "Twikito", - "Kerumen", - "Fredchat", - "ferncoder", - "tregagnon" - ] - }, - "Web/HTML/Element/td": { - "modified": "2020-10-15T21:23:58.861Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "ethertank" - ] - }, - "Web/HTML/Element/template": { - "modified": "2020-10-15T21:26:28.663Z", - "contributors": [ - "SphinxKnight", - "Mr21", - "Yopadd", - "P45QU10U", - "Fredchat", - "ylerjen" - ] - }, - "Web/HTML/Element/tfoot": { - "modified": "2020-10-15T21:23:55.010Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/th": { - "modified": "2020-10-15T21:23:59.571Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/thead": { - "modified": "2020-10-15T21:23:59.573Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/time": { - "modified": "2020-10-15T21:23:13.248Z", - "contributors": [ - "SphinxKnight", - "DylannCordel", - "Loliwe", - "Golmote", - "louuis", - "tregagnon" - ] - }, - "Web/HTML/Element/title": { - "modified": "2020-10-15T21:20:27.725Z", - "contributors": [ - "SphinxKnight", - "ksad", - "tregagnon", - "ThePrisoner" - ] - }, - "Web/HTML/Element/tr": { - "modified": "2020-10-15T21:23:58.043Z", - "contributors": [ - "SphinxKnight", - "RolandOnGitHub", - "tregagnon" - ] - }, - "Web/HTML/Element/track": { - "modified": "2020-10-15T21:23:11.969Z", - "contributors": [ - "SphinxKnight", - "dashdashzako", - "tregagnon", - "Jeremie", - "Goofy" - ] - }, - "Web/HTML/Element/tt": { - "modified": "2020-10-15T21:24:09.875Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/u": { - "modified": "2020-10-15T21:24:01.049Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi", - "ksad", - "tregagnon" - ] - }, - "Web/HTML/Element/ul": { - "modified": "2020-10-15T21:20:25.987Z", - "contributors": [ - "SphinxKnight", - "Bat", - "tregagnon", - "teoli", - "fabien.canu@gmail.com" - ] - }, - "Web/HTML/Element/var": { - "modified": "2020-10-15T21:23:33.057Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Element/video": { - "modified": "2020-10-15T21:14:19.475Z", - "contributors": [ - "SphinxKnight", - "supergonzales", - "Grivel-l", - "loella16", - "projer", - "Chbok", - "sami.boukortt", - "theotix", - "tregagnon", - "teoli", - "mekal", - "BenoitL" - ] - }, - "Web/HTML/Element/wbr": { - "modified": "2020-10-15T21:23:56.480Z", - "contributors": [ - "SphinxKnight", - "floustier", - "cdr", - "louuis", - "tregagnon", - "teoli", - "Omnilaika02" - ] - }, - "Web/HTML/Element/xmp": { - "modified": "2020-10-15T21:24:08.638Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Formats_date_heure_HTML": { - "modified": "2019-07-21T04:39:30.291Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/HTML/Images_avec_le_contrôle_d_accès_HTTP": { - "modified": "2019-04-04T15:03:02.054Z", - "contributors": [ - "SphinxKnight", - "Lotfire", - "tregagnon" - ] - }, - "Web/HTML/Index": { - "modified": "2019-01-16T18:47:13.379Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/HTML/Introduction_to_HTML5": { - "modified": "2019-03-24T00:07:20.983Z", - "contributors": [ - "Goofy", - "Bringdal", - "tregagnon", - "xaky" - ] - }, - "Web/HTML/Microdonnées": { - "modified": "2019-07-30T02:49:00.444Z", - "contributors": [ - "SphinxKnight", - "Emmanuel.KWENE" - ] - }, - "Web/HTML/Optimizing_your_pages_for_speculative_parsing": { - "modified": "2019-04-25T14:12:18.324Z", - "contributors": [ - "SphinxKnight", - "loella16", - "langlchr" - ] - }, - "Web/HTML/Précharger_du_contenu": { - "modified": "2020-10-15T21:55:30.755Z", - "contributors": [ - "nhoizey", - "SphinxKnight", - "Goofy" - ] - }, - "Web/HTML/Quirks_Mode_and_Standards_Mode": { - "modified": "2019-05-21T08:04:30.230Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "ICBreakerLA", - "Jeremie", - "trevorh", - "Mgjbot", - "BenoitL" - ] - }, - "Web/HTML/Reference": { - "modified": "2019-09-09T07:17:11.858Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "ts-informatique_Grenoble" - ] - }, - "Web/HTML/Reglages_des_attributs_CORS": { - "modified": "2020-10-15T21:22:58.182Z", - "contributors": [ - "SphinxKnight", - "benjaminclot", - "wakka27", - "tregagnon" - ] - }, - "Web/HTML/Sections_and_Outlines_of_an_HTML5_document": { - "modified": "2020-04-07T04:00:20.055Z", - "contributors": [ - "n3wborn", - "mathildebuenerd", - "ledenis", - "JNa0", - "edspeedy", - "Pols12", - "efazenda", - "Phklrz", - "Mathieu_deLauniere", - "Havano", - "Fredchat", - "wakka27", - "jessmania", - "ferncoder", - "SphinxKnight", - "tregagnon", - "Blancdememoire", - "FredB" - ] - }, - "Web/HTML/Types_de_lien": { - "modified": "2020-10-15T21:26:15.592Z", - "contributors": [ - "SphinxKnight", - "cdr", - "louuis", - "jcbita" - ] - }, - "Web/HTML/Utilisation_d'audio_et_video_en_HTML5": { - "modified": "2019-03-24T00:01:44.822Z", - "contributors": [ - "nhoizey", - "SphinxKnight", - "emersion", - "tregagnon", - "Nigel_Sheldon", - "BenoitL", - "Nukeador" - ] - }, - "Web/HTML/Utiliser_Application_Cache": { - "modified": "2020-10-15T21:07:42.579Z", - "contributors": [ - "Qouagga", - "SphinxKnight", - "Surfoo", - "personnel", - "cdromain", - "Gillespie59", - "Tioneb", - "bvauchelle", - "teoli", - "michaelch", - "rd6137", - "whoshallsucceed" - ] - }, - "Web/HTML/Utiliser_DASH_avec_les_vidéos_en_HTML": { - "modified": "2020-02-21T13:42:34.237Z", - "contributors": [ - "Sroucheray", - "SphinxKnight", - "Spharian", - "nicoo" - ] - }, - "Web/HTML/microformats": { - "modified": "2019-07-21T06:21:36.960Z", - "contributors": [ - "SphinxKnight", - "marie-ototoi" - ] - }, - "Web/HTML/Éléments_en_bloc": { - "modified": "2019-06-18T12:22:20.386Z", - "contributors": [ - "SphinxKnight", - "KhalilSnaake", - "Bat41", - "wakka27" - ] - }, - "Web/HTML/Éléments_en_ligne": { - "modified": "2019-04-06T13:04:18.081Z", - "contributors": [ - "SphinxKnight", - "KhalilSnaake", - "numahell", - "wakka27" - ] - }, - "Web/HTTP": { - "modified": "2019-03-24T19:16:00.917Z", - "contributors": [ - "louisgrasset", - "nolanrigo", - "SphinxKnight", - "Alpha", - "amouillard", - "Hell_Carlito", - "eagleusb", - "dattaz", - "jswisher" - ] - }, - "Web/HTTP/Aperçu": { - "modified": "2020-12-01T09:26:27.617Z", - "contributors": [ - "Louis-Aime", - "nolanrigo", - "SphinxKnight", - "Alpha", - "marie-ototoi", - "Hell_Carlito", - "dattaz" - ] - }, - "Web/HTTP/Authentication": { - "modified": "2019-03-18T21:33:04.626Z", - "contributors": [ - "marcpicaud" - ] - }, - "Web/HTTP/Basics_of_HTTP": { - "modified": "2019-03-23T22:24:52.804Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "ftoulouse", - "cissoid" - ] - }, - "Web/HTTP/Basics_of_HTTP/Choisir_entre_les_URLs_www_sans_www": { - "modified": "2019-03-18T21:44:23.409Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "unpeudetout" - ] - }, - "Web/HTTP/Basics_of_HTTP/Data_URIs": { - "modified": "2020-10-15T21:59:04.672Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "chanaysavoyen" - ] - }, - "Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP": { - "modified": "2020-01-18T14:19:52.795Z", - "contributors": [ - "Yovach", - "AntoineJT", - "SphinxKnight", - "Alpha", - "interfacteur", - "Tiplouf" - ] - }, - "Web/HTTP/Basics_of_HTTP/Identifier_des_ressources_sur_le_Web": { - "modified": "2019-03-18T21:41:54.222Z", - "contributors": [ - "SphinxKnight", - "Alpha" - ] - }, - "Web/HTTP/Basics_of_HTTP/MIME_types": { - "modified": "2020-01-02T06:41:24.716Z", - "contributors": [ - "guillaumegarcia13", - "SphinxKnight", - "Alpha", - "strattadb" - ] - }, - "Web/HTTP/Basics_of_HTTP/MIME_types/Common_types": { - "modified": "2020-05-29T10:51:11.998Z", - "contributors": [ - "khalyomede", - "chrisdavidmills", - "smalesys", - "ptbrowne", - "kabanon", - "SphinxKnight", - "Alpha", - "NathanB" - ] - }, - "Web/HTTP/Basics_of_HTTP/URLs_de_type_ressource": { - "modified": "2019-03-18T21:40:41.905Z", - "contributors": [ - "SphinxKnight", - "Alpha" - ] - }, - "Web/HTTP/CORS": { - "modified": "2020-10-15T21:24:42.448Z", - "contributors": [ - "gpartenet", - "caro3801", - "robin850", - "gloucklegnou", - "p_amok", - "SphinxKnight", - "correction2", - "parmentf", - "scips", - "damiencaselli", - "gierschv", - "ebear", - "Ltrlg", - "dattaz", - "nlaug", - "cguillemette", - "Zzortell", - "fmasy", - "patboens" - ] - }, - "Web/HTTP/CORS/Errors": { - "modified": "2020-08-30T07:40:45.129Z", - "contributors": [ - "Voulto", - "AdminXVII", - "Maxim10", - "nchevobbe" - ] - }, - "Web/HTTP/CORS/Errors/CORSAllowOriginManquant": { - "modified": "2020-06-10T11:05:53.160Z", - "contributors": [ - "jcletousey", - "efreja", - "TheWildHealer" - ] - }, - "Web/HTTP/CORS/Errors/CORSAllowOriginNeCorrespondPas": { - "modified": "2020-09-04T07:20:46.938Z", - "contributors": [ - "sevarg" - ] - }, - "Web/HTTP/CORS/Errors/CORSDesactive": { - "modified": "2019-03-18T21:23:02.654Z", - "contributors": [ - "SphinxKnight", - "ViveLesFrites" - ] - }, - "Web/HTTP/CORS/Errors/CORSNAPasRéussi": { - "modified": "2019-05-08T11:52:53.417Z", - "contributors": [ - "audricschiltknecht", - "hellosct1", - "NicolasGraph", - "Triple_B" - ] - }, - "Web/HTTP/CORS/Errors/CORSRequestNotHttp": { - "modified": "2020-09-23T06:10:15.688Z", - "contributors": [ - "ssgl", - "Maxim10" - ] - }, - "Web/HTTP/CSP": { - "modified": "2020-10-15T21:53:12.526Z", - "contributors": [ - "SphinxKnight", - "lhapaipai", - "valimero", - "AntoineGrandchamp", - "David-5-1" - ] - }, - "Web/HTTP/Cache": { - "modified": "2019-07-11T20:27:10.018Z", - "contributors": [ - "ThCarrere", - "dragon38800", - "Watilin", - "SphinxKnight", - "blety" - ] - }, - "Web/HTTP/Compression": { - "modified": "2020-10-29T12:16:50.940Z", - "contributors": [ - "JNa0", - "lyrixx", - "SphinxKnight", - "Alpha" - ] - }, - "Web/HTTP/Content_negotiation": { - "modified": "2019-08-20T15:39:14.536Z", - "contributors": [ - "bbonnin" - ] - }, - "Web/HTTP/Cookies": { - "modified": "2020-02-26T11:00:52.742Z", - "contributors": [ - "michivi", - "ThCarrere", - "guillaumebouhier", - "bodingar", - "gpartenet", - "antoineneff", - "a-mt", - "SphinxKnight", - "antoineroux", - "tomcodes" - ] - }, - "Web/HTTP/Detection_du_navigateur_en_utilisant_le_user_agent": { - "modified": "2019-03-23T23:13:53.553Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "macmorning", - "lmahistre", - "KevinLACIRE" - ] - }, - "Web/HTTP/FAQ_sur_le_préchargement_des_liens": { - "modified": "2019-03-23T23:46:22.581Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "cdromain", - "jigs12", - "wakka27", - "BenoitL", - "Fredchat", - "Kyodev", - "Bellerophon" - ] - }, - "Web/HTTP/Feature_Policy": { - "modified": "2020-11-02T18:21:06.120Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers": { - "modified": "2020-11-11T18:57:53.286Z", - "contributors": [ - "JNa0", - "SphinxKnight", - "Alpha", - "loella16", - "shadok", - "vbardales" - ] - }, - "Web/HTTP/Headers/Accept": { - "modified": "2020-10-15T21:56:10.549Z", - "contributors": [ - "SphinxKnight", - "ji-sser", - "gmebarthe" - ] - }, - "Web/HTTP/Headers/Accept-Charset": { - "modified": "2020-10-15T22:15:05.344Z", - "contributors": [ - "dragon38800" - ] - }, - "Web/HTTP/Headers/Accept-Encoding": { - "modified": "2020-10-15T21:51:43.001Z", - "contributors": [ - "martinec", - "SphinxKnight", - "guillaumefenollar", - "Athorcis", - "PlayeurZero" - ] - }, - "Web/HTTP/Headers/Accept-Language": { - "modified": "2020-10-15T21:55:18.930Z", - "contributors": [ - "SphinxKnight", - "alexlur", - "NemoNobobyPersonne", - "tuili" - ] - }, - "Web/HTTP/Headers/Access-Control-Allow-Methods": { - "modified": "2020-10-15T22:15:56.084Z", - "contributors": [ - "GabrielHautclocq" - ] - }, - "Web/HTTP/Headers/Access-Control-Allow-Origin": { - "modified": "2020-10-15T21:56:38.218Z", - "contributors": [ - "superhoang", - "Derek", - "ekamil", - "SphinxKnight", - "loganblangenois" - ] - }, - "Web/HTTP/Headers/Access-Control-Request-Headers": { - "modified": "2020-10-15T21:53:12.034Z", - "contributors": [ - "SphinxKnight", - "Yves_ASTIER" - ] - }, - "Web/HTTP/Headers/Age": { - "modified": "2020-10-15T22:02:48.318Z", - "contributors": [ - "SphinxKnight", - "Gildwolf" - ] - }, - "Web/HTTP/Headers/Allow": { - "modified": "2019-03-18T20:37:27.890Z", - "contributors": [ - "GabrielHautclocq" - ] - }, - "Web/HTTP/Headers/Authorization": { - "modified": "2020-04-21T21:30:05.105Z", - "contributors": [ - "jalik", - "SphinxKnight", - "aboufeta" - ] - }, - "Web/HTTP/Headers/Cache-Control": { - "modified": "2020-10-15T21:53:16.283Z", - "contributors": [ - "darahak", - "hellosct1", - "SphinxKnight", - "LeoColomb", - "arthurwhite", - "David-5-1" - ] - }, - "Web/HTTP/Headers/Connection": { - "modified": "2020-10-15T22:22:48.365Z", - "contributors": [ - "SphinxKnight", - "rm3121", - "jedepaepe" - ] - }, - "Web/HTTP/Headers/Content-Disposition": { - "modified": "2020-10-15T21:53:43.308Z", - "contributors": [ - "xavieralt", - "A-312", - "ntoniazzi", - "PropreCity", - "SphinxKnight", - "califat" - ] - }, - "Web/HTTP/Headers/Content-Encoding": { - "modified": "2020-10-15T22:30:11.583Z", - "contributors": [ - "SphinxKnight", - "yohannlog" - ] - }, - "Web/HTTP/Headers/Content-Language": { - "modified": "2020-11-13T06:29:58.431Z", - "contributors": [ - "Rigaudie", - "PropreCity" - ] - }, - "Web/HTTP/Headers/Content-Length": { - "modified": "2020-10-15T21:53:18.388Z", - "contributors": [ - "SphinxKnight", - "David-5-1" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy": { - "modified": "2020-10-29T21:03:19.803Z", - "contributors": [ - "JNa0", - "bershanskiy", - "Oliboy50", - "SphinxKnight", - "loella16" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy-Report-Only": { - "modified": "2020-10-29T21:31:20.453Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/base-uri": { - "modified": "2020-10-29T13:38:32.493Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content": { - "modified": "2020-10-29T12:54:23.475Z", - "contributors": [ - "JNa0", - "borisschapira" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/child-src": { - "modified": "2020-10-29T09:57:45.781Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/connect-src": { - "modified": "2020-10-29T09:55:55.458Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/default-src": { - "modified": "2020-10-29T16:25:12.176Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/font-src": { - "modified": "2020-10-29T09:55:38.668Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/form-action": { - "modified": "2020-10-29T20:27:48.387Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/frame-ancestors": { - "modified": "2020-10-29T16:35:08.171Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/frame-src": { - "modified": "2020-10-29T09:55:09.630Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/img-src": { - "modified": "2020-10-29T09:54:24.946Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/manifest-src": { - "modified": "2020-10-29T12:42:47.792Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/media-src": { - "modified": "2020-10-29T09:53:30.177Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/navigate-to": { - "modified": "2020-11-05T08:46:21.988Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/object-src": { - "modified": "2020-10-29T12:50:10.529Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/plugin-types": { - "modified": "2020-10-29T15:18:48.722Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/prefetch-src": { - "modified": "2020-11-05T16:09:39.274Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/referrer": { - "modified": "2020-10-29T16:54:20.565Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/report-to": { - "modified": "2020-10-29T20:39:05.871Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/report-uri": { - "modified": "2020-10-29T20:45:38.126Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/require-sri-for": { - "modified": "2020-10-29T16:42:06.606Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for": { - "modified": "2020-10-29T16:19:21.052Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/sandbox": { - "modified": "2020-10-29T20:06:19.233Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/script-src": { - "modified": "2020-10-29T12:43:56.366Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/script-src-attr": { - "modified": "2020-10-29T12:35:52.897Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/script-src-elem": { - "modified": "2020-10-29T12:34:59.878Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/style-src": { - "modified": "2020-10-29T09:46:24.734Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/style-src-attr": { - "modified": "2020-10-29T12:25:30.302Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/style-src-elem": { - "modified": "2020-10-29T12:25:15.261Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/trusted-types": { - "modified": "2020-10-29T16:00:54.309Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests": { - "modified": "2020-10-29T13:15:02.277Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Security-Policy/worker-src": { - "modified": "2020-10-29T09:42:30.203Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Content-Type": { - "modified": "2020-10-15T21:53:18.899Z", - "contributors": [ - "SphinxKnight", - "Goofy" - ] - }, - "Web/HTTP/Headers/DNT": { - "modified": "2020-10-15T22:00:03.018Z", - "contributors": [ - "SphinxKnight", - "egavard" - ] - }, - "Web/HTTP/Headers/Date": { - "modified": "2020-10-15T22:07:34.830Z", - "contributors": [ - "Machou" - ] - }, - "Web/HTTP/Headers/ETag": { - "modified": "2020-10-15T22:03:25.682Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/HTTP/Headers/Expires": { - "modified": "2020-10-15T21:57:22.458Z", - "contributors": [ - "l-vo", - "SphinxKnight", - "GuiBret" - ] - }, - "Web/HTTP/Headers/Feature-Policy": { - "modified": "2020-11-11T14:08:38.730Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Feature-Policy/accelerometer": { - "modified": "2020-11-16T09:05:43.541Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Host": { - "modified": "2020-10-15T21:58:12.642Z", - "contributors": [ - "SphinxKnight", - "ji-sser", - "alpyr" - ] - }, - "Web/HTTP/Headers/If-Modified-Since": { - "modified": "2020-10-15T21:59:18.518Z", - "contributors": [ - "SphinxKnight", - "ericlemerdy" - ] - }, - "Web/HTTP/Headers/If-None-Match": { - "modified": "2020-10-15T21:59:26.960Z", - "contributors": [ - "SphinxKnight", - "ekougs" - ] - }, - "Web/HTTP/Headers/Last-Modified": { - "modified": "2020-10-15T21:58:33.304Z", - "contributors": [ - "lyrixx", - "SphinxKnight", - "NemoNobobyPersonne" - ] - }, - "Web/HTTP/Headers/Location": { - "modified": "2020-10-15T22:30:32.588Z", - "contributors": [ - "romch007" - ] - }, - "Web/HTTP/Headers/Origin": { - "modified": "2020-10-15T22:04:41.950Z", - "contributors": [ - "Watilin" - ] - }, - "Web/HTTP/Headers/Referer": { - "modified": "2020-10-15T21:59:09.222Z", - "contributors": [ - "SphinxKnight", - "rmonnier" - ] - }, - "Web/HTTP/Headers/Referrer-Policy": { - "modified": "2020-11-03T04:53:54.794Z", - "contributors": [ - "JNa0" - ] - }, - "Web/HTTP/Headers/Serveur": { - "modified": "2020-10-15T22:01:27.985Z", - "contributors": [ - "SphinxKnight", - "codingk8", - "WanFoxOne" - ] - }, - "Web/HTTP/Headers/Set-Cookie": { - "modified": "2020-10-15T22:30:32.422Z", - "contributors": [ - "WolfVic", - "Voulto", - "Arzak656", - "claudepache" - ] - }, - "Web/HTTP/Headers/Set-Cookie/SameSite": { - "modified": "2020-10-15T22:30:31.847Z", - "contributors": [ - "SphinxKnight", - "Pierstoval" - ] - }, - "Web/HTTP/Headers/Tk": { - "modified": "2020-10-15T22:34:21.355Z", - "contributors": [ - "alexetgus" - ] - }, - "Web/HTTP/Headers/Trailer": { - "modified": "2020-10-15T21:51:11.752Z", - "contributors": [ - "SphinxKnight", - "PlayeurZero" - ] - }, - "Web/HTTP/Headers/Vary": { - "modified": "2020-10-15T22:00:47.806Z", - "contributors": [ - "Laurent_Lyaudet", - "gloucklegnou", - "SphinxKnight", - "mrudelle" - ] - }, - "Web/HTTP/Headers/WWW-Authenticate": { - "modified": "2019-03-18T20:52:28.323Z", - "contributors": [ - "PamProg", - "Synkied", - "SphinxKnight", - "yereby" - ] - }, - "Web/HTTP/Headers/X-Content-Type-Options": { - "modified": "2020-10-15T22:20:53.756Z", - "contributors": [ - "tchioubak", - "LaChips", - "ClementWebDesigner" - ] - }, - "Web/HTTP/Headers/X-Frame-Options": { - "modified": "2020-10-15T21:56:45.798Z", - "contributors": [ - "DeusExNihilo", - "SphinxKnight", - "rdavaillaud", - "tran-simon", - "Selbahc", - "emassip", - "PropreCity", - "petitj", - "callmemagnus", - "aymericsorek", - "mmahouachi" - ] - }, - "Web/HTTP/Index": { - "modified": "2019-03-23T22:26:53.499Z", - "contributors": [ - "tonybengue", - "SphinxKnight", - "xdelatour" - ] - }, - "Web/HTTP/Méthode": { - "modified": "2020-10-15T21:52:12.802Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "MandelV", - "mercuryseries", - "dattaz" - ] - }, - "Web/HTTP/Méthode/CONNECT": { - "modified": "2020-10-15T21:53:58.732Z", - "contributors": [ - "SphinxKnight", - "Badacadabra", - "dattaz" - ] - }, - "Web/HTTP/Méthode/DELETE": { - "modified": "2019-03-23T22:13:09.265Z", - "contributors": [ - "SphinxKnight", - "Badacadabra", - "dattaz" - ] - }, - "Web/HTTP/Méthode/GET": { - "modified": "2020-10-15T21:53:59.909Z", - "contributors": [ - "a-mt", - "SphinxKnight", - "Badacadabra", - "dattaz" - ] - }, - "Web/HTTP/Méthode/HEAD": { - "modified": "2020-10-15T21:53:59.078Z", - "contributors": [ - "SphinxKnight", - "Badacadabra", - "dattaz" - ] - }, - "Web/HTTP/Méthode/OPTIONS": { - "modified": "2020-10-15T22:00:53.161Z", - "contributors": [ - "Yukulele.", - "SphinxKnight", - "lucien.bill" - ] - }, - "Web/HTTP/Méthode/PATCH": { - "modified": "2020-02-06T06:05:29.587Z", - "contributors": [ - "humantool", - "PaulDuxblah", - "SphinxKnight", - "ThreadElric", - "Hennek" - ] - }, - "Web/HTTP/Méthode/POST": { - "modified": "2020-10-15T21:54:00.053Z", - "contributors": [ - "FlorianHatat", - "slumbering", - "SphinxKnight", - "macmorning", - "placaist", - "Badacadabra", - "dattaz" - ] - }, - "Web/HTTP/Méthode/PUT": { - "modified": "2019-03-23T22:13:06.866Z", - "contributors": [ - "SphinxKnight", - "Badacadabra", - "dattaz" - ] - }, - "Web/HTTP/Méthode/TRACE": { - "modified": "2020-10-15T22:29:59.662Z", - "contributors": [ - "alexetgus", - "tristantheb" - ] - }, - "Web/HTTP/Redirections": { - "modified": "2020-03-17T12:32:04.893Z", - "contributors": [ - "n3wborn", - "bbonnin" - ] - }, - "Web/HTTP/Requêtes_conditionnelles": { - "modified": "2019-07-27T21:23:45.889Z", - "contributors": [ - "ThCarrere" - ] - }, - "Web/HTTP/Resources_and_specifications": { - "modified": "2019-08-17T16:02:26.455Z", - "contributors": [ - "bbonnin" - ] - }, - "Web/HTTP/Session": { - "modified": "2019-03-23T22:06:49.321Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "klenzo" - ] - }, - "Web/HTTP/Status": { - "modified": "2020-08-30T05:52:57.122Z", - "contributors": [ - "devweb157", - "SphinxKnight", - "Axnyff", - "Badacadabra", - "Bromind", - "fscholz" - ] - }, - "Web/HTTP/Status/100": { - "modified": "2020-10-15T21:51:44.583Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/101": { - "modified": "2019-03-23T22:16:44.467Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/103": { - "modified": "2020-10-15T22:21:12.084Z", - "contributors": [ - "SphinxKnight", - "neophnx" - ] - }, - "Web/HTTP/Status/200": { - "modified": "2020-10-15T21:51:47.097Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/201": { - "modified": "2020-10-15T21:51:48.335Z", - "contributors": [ - "ylerjen", - "TimotheAlbouy", - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/202": { - "modified": "2019-03-23T22:16:56.182Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/203": { - "modified": "2019-03-23T22:16:33.634Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/204": { - "modified": "2020-10-15T21:51:50.995Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/205": { - "modified": "2019-03-23T22:16:50.696Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/206": { - "modified": "2020-10-15T21:51:55.335Z", - "contributors": [ - "AnthonySendra", - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/300": { - "modified": "2019-06-01T05:27:25.381Z", - "contributors": [ - "Rififia", - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/301": { - "modified": "2020-10-15T21:52:13.453Z", - "contributors": [ - "ledahulevogyre", - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/302": { - "modified": "2020-10-15T21:52:06.149Z", - "contributors": [ - "vulcaryn", - "SphinxKnight", - "louisfischer", - "dattaz" - ] - }, - "Web/HTTP/Status/303": { - "modified": "2020-11-09T07:52:41.898Z", - "contributors": [ - "martialseron", - "SphinxKnight", - "ADTC", - "dattaz" - ] - }, - "Web/HTTP/Status/304": { - "modified": "2020-10-15T21:52:19.799Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/307": { - "modified": "2020-10-15T21:52:20.929Z", - "contributors": [ - "myobis", - "adrizein", - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/308": { - "modified": "2020-10-15T21:52:25.426Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/400": { - "modified": "2019-03-23T22:16:59.097Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/401": { - "modified": "2020-10-15T21:52:30.923Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/402": { - "modified": "2020-10-15T22:21:51.787Z", - "contributors": [ - "Rififia", - "rafipiccolo" - ] - }, - "Web/HTTP/Status/403": { - "modified": "2020-10-15T21:52:27.600Z", - "contributors": [ - "reivaxy", - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/404": { - "modified": "2020-10-15T21:52:28.956Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "dattaz" - ] - }, - "Web/HTTP/Status/405": { - "modified": "2019-03-23T22:16:59.786Z", - "contributors": [ - "newick", - "lucien.bill", - "tititou36", - "SphinxKnight", - "arthurwhite", - "dattaz" - ] - }, - "Web/HTTP/Status/406": { - "modified": "2020-10-15T21:52:43.789Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/407": { - "modified": "2020-10-15T21:52:43.422Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/408": { - "modified": "2019-03-23T22:16:30.693Z", - "contributors": [ - "SphinxKnight", - "VictorGiroud", - "dattaz" - ] - }, - "Web/HTTP/Status/409": { - "modified": "2019-03-23T22:16:31.226Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/410": { - "modified": "2020-10-15T21:52:43.256Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "dattaz" - ] - }, - "Web/HTTP/Status/411": { - "modified": "2019-03-23T22:16:31.489Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/412": { - "modified": "2020-10-15T21:52:44.154Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/413": { - "modified": "2019-03-23T22:16:25.449Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/414": { - "modified": "2019-03-23T22:16:30.303Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/415": { - "modified": "2019-03-23T22:16:17.725Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/416": { - "modified": "2020-10-15T21:52:44.490Z", - "contributors": [ - "SphinxKnight", - "PGeffriaud", - "dattaz" - ] - }, - "Web/HTTP/Status/417": { - "modified": "2019-03-23T22:16:23.253Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/418": { - "modified": "2020-10-15T22:01:58.002Z", - "contributors": [ - "dzamlo", - "sblondon", - "SphinxKnight", - "Alpha" - ] - }, - "Web/HTTP/Status/422": { - "modified": "2019-03-18T21:33:59.059Z", - "contributors": [ - "theophilechevalier" - ] - }, - "Web/HTTP/Status/425": { - "modified": "2020-10-15T22:11:22.211Z", - "contributors": [ - "Akarys" - ] - }, - "Web/HTTP/Status/426": { - "modified": "2019-03-23T22:16:23.564Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/428": { - "modified": "2019-03-23T22:16:18.491Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/429": { - "modified": "2019-03-23T22:16:27.928Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/431": { - "modified": "2019-03-23T22:16:18.973Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/451": { - "modified": "2020-10-15T21:52:49.692Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/500": { - "modified": "2020-10-15T21:52:49.526Z", - "contributors": [ - "SphinxKnight", - "Alpha", - "dattaz" - ] - }, - "Web/HTTP/Status/501": { - "modified": "2020-10-15T21:52:47.942Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/502": { - "modified": "2020-10-15T21:52:48.291Z", - "contributors": [ - "SphinxKnight", - "pinnotjaque", - "dattaz" - ] - }, - "Web/HTTP/Status/503": { - "modified": "2020-10-15T21:52:49.235Z", - "contributors": [ - "SphinxKnight", - "pinnotjaque", - "dattaz" - ] - }, - "Web/HTTP/Status/504": { - "modified": "2020-10-15T21:52:48.211Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/505": { - "modified": "2019-03-23T22:16:21.878Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/HTTP/Status/506": { - "modified": "2020-09-15T14:40:07.564Z", - "contributors": [ - "ungarscool1" - ] - }, - "Web/HTTP/Status/507": { - "modified": "2020-09-15T14:35:14.118Z", - "contributors": [ - "ungarscool1" - ] - }, - "Web/HTTP/Status/508": { - "modified": "2020-11-10T12:22:56.051Z", - "contributors": [ - "endermctv", - "ungarscool1" - ] - }, - "Web/HTTP/Status/510": { - "modified": "2020-01-30T04:13:14.901Z", - "contributors": [ - "SphinxKnight", - "flippo007" - ] - }, - "Web/HTTP/Status/511": { - "modified": "2019-03-23T22:16:30.847Z", - "contributors": [ - "SphinxKnight", - "dattaz" - ] - }, - "Web/JavaScript": { - "modified": "2020-06-10T08:48:58.868Z", - "contributors": [ - "SphinxKnight", - "tristantheb", - "a-mt", - "LCaba49", - "loella16", - "kdex", - "mapiki", - "teoli", - "ronasita22", - "jeromepasquelin", - "Avent", - "julia31", - "jsx", - "jalu78", - "DamienBertrand", - "tregagnon", - "ylerjen", - "senshu", - "DocMcBrown", - "tchevalier", - "Goofy", - "darnuria", - "Sroucheray", - "matteodelabre", - "fscholz", - "ILJR", - "cv075", - "Mgjbot", - "BenoitL", - "Fredchat", - "Verruckt", - "Chbok", - "Quarkcool", - "Jean-Yves Cronier", - "Anonymous", - "Mario" - ] - }, - "Web/JavaScript/A_propos": { - "modified": "2020-03-12T19:36:54.184Z", - "contributors": [ - "SphinxKnight", - "Dralyab", - "Gasperowicz", - "tregagnon", - "teoli", - "Jeremie", - "Delapouite", - "fscholz", - "Mgjbot", - "BenoitL", - "Extra-Nitro", - "VincentN" - ] - }, - "Web/JavaScript/Caractère_énumérable_des_propriétés_et_rattachement": { - "modified": "2020-03-12T19:39:48.844Z", - "contributors": [ - "SphinxKnight", - "Ehstrali" - ] - }, - "Web/JavaScript/Closures": { - "modified": "2020-03-14T03:08:28.899Z", - "contributors": [ - "smeden-lod", - "PhilippePerret", - "SphinxKnight", - "Lamri", - "mbeaudru", - "Mongenet", - "opii93", - "bassam", - "DeepFriedSeagull", - "cosmith", - "teoli", - "Florentsuc", - "zanz" - ] - }, - "Web/JavaScript/Concurrence_et_boucle_des_événements": { - "modified": "2020-07-16T10:21:17.789Z", - "contributors": [ - "robinsimonklein", - "SphinxKnight", - "mikaoelitiana", - "necraidan", - "teoli" - ] - }, - "Web/JavaScript/Gestion_de_la_mémoire": { - "modified": "2020-03-12T19:38:42.822Z", - "contributors": [ - "SphinxKnight", - "elWombator", - "Banban", - "opii93", - "316k", - "Goofy", - "ntrillaud", - "teoli" - ] - }, - "Web/JavaScript/Guide": { - "modified": "2020-03-12T19:36:21.976Z", - "contributors": [ - "SphinxKnight", - "teoli", - "delislejm", - "Ame_Nomade", - "BenoitL" - ] - }, - "Web/JavaScript/Guide/Apropos": { - "modified": "2020-03-12T19:38:04.895Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "teoli", - "P45QU10U", - "Goofy", - "tregagnon", - "favdb31" - ] - }, - "Web/JavaScript/Guide/Boucles_et_itération": { - "modified": "2020-10-23T05:00:54.986Z", - "contributors": [ - "Monstercrunch", - "SphinxKnight", - "Cotiga", - "abvll", - "SteelCode94", - "breJcharAff", - "zakaila", - "Hell_Carlito", - "AnthonyMaton", - "tregagnon" - ] - }, - "Web/JavaScript/Guide/Collections_avec_clés": { - "modified": "2020-03-12T19:40:57.260Z", - "contributors": [ - "deadikus", - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Collections_indexées": { - "modified": "2020-07-03T13:43:37.770Z", - "contributors": [ - "GDFtj", - "SphinxKnight", - "bgondy", - "JeffD", - "ludwin", - "QuentinPerez" - ] - }, - "Web/JavaScript/Guide/Contrôle_du_flux_Gestion_des_erreurs": { - "modified": "2020-03-12T19:38:47.675Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "Wizhou", - "Ostefanini", - "Gueusette", - "tregagnon", - "teoli" - ] - }, - "Web/JavaScript/Guide/Expressions_et_Opérateurs": { - "modified": "2020-03-12T19:38:41.114Z", - "contributors": [ - "SphinxKnight", - "DeltaEvo", - "jsx", - "Gueusette", - "Goofy", - "tregagnon", - "teoli", - "s3dm" - ] - }, - "Web/JavaScript/Guide/Expressions_régulières": { - "modified": "2020-06-13T05:36:13.747Z", - "contributors": [ - "yanns1", - "SphinxKnight", - "fgeorges", - "pastr", - "pascallothar", - "VincentGuinaudeau", - "Gueusette", - "teoli", - "Goofy" - ] - }, - "Web/JavaScript/Guide/Expressions_régulières/Assertions": { - "modified": "2020-03-12T19:49:10.031Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Expressions_régulières/Classes_de_caractères": { - "modified": "2020-10-15T22:17:44.815Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Expressions_régulières/Groupes_et_intervalles": { - "modified": "2020-03-12T19:49:07.623Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Expressions_régulières/Limites": { - "modified": "2020-03-12T19:49:08.903Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Expressions_régulières/Quantificateurs": { - "modified": "2020-03-12T19:49:05.025Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Expressions_régulières/Échappement_propriétés_Unicode": { - "modified": "2020-03-12T19:49:07.596Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Fonctions": { - "modified": "2020-08-31T09:00:32.522Z", - "contributors": [ - "SphinxKnight", - "codingk8", - "fredrun14", - "Wizhou", - "Youssef-Belmeskine", - "bxlxd", - "Gueusette", - "abe30", - "tregagnon", - "DeepFriedSeagull", - "teoli", - "Goofy" - ] - }, - "Web/JavaScript/Guide/Formatage_du_texte": { - "modified": "2020-03-12T19:40:53.485Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "loicfrance", - "NemoNobobyPersonne" - ] - }, - "Web/JavaScript/Guide/Introduction": { - "modified": "2020-03-12T19:40:53.803Z", - "contributors": [ - "CmdCourgette", - "SphinxKnight", - "tonybengue", - "Nopias", - "Arnaudettes", - "tregagnon" - ] - }, - "Web/JavaScript/Guide/JavaScript_Overview": { - "modified": "2020-03-12T19:38:04.487Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "firdaws", - "P45QU10U", - "Goofy", - "simokla" - ] - }, - "Web/JavaScript/Guide/Le_modèle_objet_JavaScript_en_détails": { - "modified": "2020-07-03T14:11:44.605Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "jsfez", - "jjperuzzi", - "Faegy", - "P45QU10U", - "gpartenet", - "Yves_ASTIER", - "QuentinPerez", - "teoli", - "darul75", - "tinou98", - "mssa.ndiaye", - "npichon", - "e.begovic" - ] - }, - "Web/JavaScript/Guide/Le_protocole_itérateur_historique": { - "modified": "2020-03-12T19:40:23.053Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Modules": { - "modified": "2020-10-15T22:20:28.070Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Métaprogrammation": { - "modified": "2020-07-03T14:15:24.280Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Guide/Nombres_et_dates": { - "modified": "2020-03-12T19:40:56.844Z", - "contributors": [ - "SphinxKnight", - "Halkeand", - "Gueusette", - "tregagnon" - ] - }, - "Web/JavaScript/Guide/Objets_élémentaires_JavaScript": { - "modified": "2020-03-12T19:39:12.743Z", - "contributors": [ - "JyTosTT", - "wbamberg", - "SphinxKnight", - "Goofy", - "teoli" - ] - }, - "Web/JavaScript/Guide/Retours_sur_héritage": { - "modified": "2019-05-16T15:02:53.512Z", - "contributors": [ - "wbamberg", - "Tloque", - "SphinxKnight", - "darul75", - "teoli" - ] - }, - "Web/JavaScript/Guide/Types_et_grammaire": { - "modified": "2020-03-12T19:38:45.258Z", - "contributors": [ - "SphinxKnight", - "fredrun14", - "diassynthesis", - "Toguro_O", - "JivaHard", - "Wizhou", - "tonybengue", - "jti77", - "loella16", - "Iwazaru", - "LaurelineP", - "edspeedy", - "k-kercode", - "inseo", - "bl4n", - "slopesneves", - "FerdinandPiette", - "tregagnon", - "teoli", - "P45QU10U", - "Goofy" - ] - }, - "Web/JavaScript/Guide/Utiliser_le_JSON_natif": { - "modified": "2020-03-12T19:39:16.956Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Guide/Utiliser_les_objets": { - "modified": "2020-11-29T05:17:59.419Z", - "contributors": [ - "TCarrere", - "lchaudat", - "chrisdavidmills", - "SphinxKnight", - "thebaba98", - "jpcote", - "jlguenego", - "ThibautMln", - "Jean-MariePETIT", - "tcoppin", - "QuentinPerez", - "P45QU10U", - "teoli", - "e.begovic" - ] - }, - "Web/JavaScript/Guide/Utiliser_les_promesses": { - "modified": "2020-07-03T14:12:15.848Z", - "contributors": [ - "nrdAio", - "SphinxKnight", - "codingk8", - "nolanrigo", - "Bellice", - "xvw", - "madarche" - ] - }, - "Web/JavaScript/Guide/iterateurs_et_generateurs": { - "modified": "2020-07-03T14:14:56.497Z", - "contributors": [ - "SphinxKnight", - "ferjul17", - "Gabriel8819", - "bankair", - "P45QU10U", - "teoli", - "goofy_bz", - "n1k0" - ] - }, - "Web/JavaScript/Guide/Égalité_en_JavaScript": { - "modified": "2020-03-12T19:39:10.978Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Héritage_et_chaîne_de_prototypes": { - "modified": "2020-03-12T19:38:39.687Z", - "contributors": [ - "SphinxKnight", - "yacim", - "fredrun14", - "grandoc", - "Kearny", - "elWombator", - "Hell_Carlito", - "Daynvheur", - "jacomyal", - "darul75", - "teoli" - ] - }, - "Web/JavaScript/Introduction_à_JavaScript_orienté_objet": { - "modified": "2020-03-12T19:39:16.946Z", - "contributors": [ - "GregMorel", - "F-Andre", - "SphinxKnight", - "kdex", - "LaurentBarbareau", - "vanz", - "Grimar29", - "Veltarn", - "kai23", - "Goofy" - ] - }, - "Web/JavaScript/Introduction_à_l_utilisation_de_XPath_avec_JavaScript": { - "modified": "2019-06-18T08:36:11.928Z", - "contributors": [ - "SphinxKnight", - "loella16", - "chrisdavidmills", - "v-Stein", - "Laurent_Lyaudet", - "joseph2rs", - "Jeremie", - "Julien.stuby", - "Mgjbot", - "BenoitL", - "Celelibi", - "Fredchat" - ] - }, - "Web/JavaScript/JavaScript_technologies_overview": { - "modified": "2020-03-12T19:39:28.831Z", - "contributors": [ - "SphinxKnight", - "Yopadd", - "Bpruneau", - "tregagnon", - "teoli", - "duthen", - "PanPan", - "DocMcBrown", - "delislejm", - "goofy_bz" - ] - }, - "Web/JavaScript/Language_Resources": { - "modified": "2020-03-12T19:37:01.767Z", - "contributors": [ - "SphinxKnight", - "zatamine", - "teoli", - "Delapouite", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Les_différents_tests_d_égalité": { - "modified": "2020-03-12T19:39:18.857Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "Durev", - "ferdi_", - "Bringdal", - "juliensoret", - "teoli" - ] - }, - "Web/JavaScript/Performance_les_dangers_liés_à_la_modification_de_Prototype": { - "modified": "2019-04-08T13:06:24.098Z", - "contributors": [ - "SphinxKnight", - "MaloJaffre", - "bbouvier" - ] - }, - "Web/JavaScript/Reference": { - "modified": "2020-03-12T19:35:39.919Z", - "contributors": [ - "SphinxKnight", - "BenoitL", - "teoli", - "Fredchat", - "tregagnon", - "fscholz", - "LaBoumerde", - "AbrahamT", - "Mortys", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/A_propos": { - "modified": "2020-03-12T19:38:26.136Z", - "contributors": [ - "SphinxKnight", - "teoli", - "pchantry", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Classes": { - "modified": "2020-10-15T21:33:49.394Z", - "contributors": [ - "rachid.chihabi", - "SphinxKnight", - "GregMorel", - "unflores", - "rgranger", - "blackholegalaxy", - "Yukulele." - ] - }, - "Web/JavaScript/Reference/Classes/Class_fields": { - "modified": "2020-10-15T22:22:47.138Z", - "contributors": [ - "NemoNobobyPersonne", - "pwizla", - "ati0ns", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Classes/Private_class_fields": { - "modified": "2020-10-15T22:33:35.342Z", - "contributors": [ - "NemoNobobyPersonne", - "N0wan", - "yohannlog" - ] - }, - "Web/JavaScript/Reference/Classes/constructor": { - "modified": "2020-10-15T21:33:51.548Z", - "contributors": [ - "fbessou", - "SphinxKnight", - "MathieuDebit" - ] - }, - "Web/JavaScript/Reference/Classes/extends": { - "modified": "2020-10-15T21:33:51.793Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Classes/static": { - "modified": "2020-10-15T21:33:57.179Z", - "contributors": [ - "SphinxKnight", - "mohabigmeech", - "AnthonyMelique", - "ericallard0" - ] - }, - "Web/JavaScript/Reference/Erreurs": { - "modified": "2020-03-12T19:43:16.869Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Already_has_pragma": { - "modified": "2020-03-12T19:43:49.056Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Array_sort_argument": { - "modified": "2020-03-12T19:43:29.325Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Bad_octal": { - "modified": "2020-03-12T19:43:47.808Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Bad_radix": { - "modified": "2020-03-12T19:43:18.378Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Bad_regexp_flag": { - "modified": "2020-03-12T19:45:52.553Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Bad_return_or_yield": { - "modified": "2020-03-12T19:43:56.672Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Called_on_incompatible_type": { - "modified": "2020-03-12T19:46:40.456Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Cant_access_lexical_declaration_before_init": { - "modified": "2020-03-12T19:46:21.502Z", - "contributors": [ - "SphinxKnight", - "ggrossetie" - ] - }, - "Web/JavaScript/Reference/Erreurs/Cant_access_property": { - "modified": "2020-03-12T19:48:15.165Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Cant_assign_to_property": { - "modified": "2020-03-12T19:48:57.544Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Cant_define_property_object_not_extensible": { - "modified": "2020-03-12T19:45:52.583Z", - "contributors": [ - "SphinxKnight", - "litelite" - ] - }, - "Web/JavaScript/Reference/Erreurs/Cant_delete": { - "modified": "2020-03-12T19:43:48.215Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Cant_redefine_property": { - "modified": "2020-03-12T19:45:59.065Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Cyclic_object_value": { - "modified": "2020-03-12T19:45:49.963Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Dead_object": { - "modified": "2020-03-12T19:45:57.909Z", - "contributors": [ - "richie3366", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Delete_in_strict_mode": { - "modified": "2020-03-12T19:45:50.173Z", - "contributors": [ - "beamop", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Deprecated_String_generics": { - "modified": "2020-03-12T19:45:39.563Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Deprecated_caller_or_arguments_usage": { - "modified": "2020-03-12T19:43:40.831Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Deprecated_expression_closures": { - "modified": "2020-03-12T19:45:40.291Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Deprecated_octal": { - "modified": "2020-03-12T19:45:53.860Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Deprecated_source_map_pragma": { - "modified": "2020-03-12T19:43:43.631Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Deprecated_toLocaleFormat": { - "modified": "2020-03-12T19:45:38.629Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Equal_as_assign": { - "modified": "2020-03-12T19:43:42.883Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/For-each-in_loops_are_deprecated": { - "modified": "2020-03-12T19:44:39.857Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Getter_only": { - "modified": "2020-03-12T19:45:50.129Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Identifier_after_number": { - "modified": "2020-03-12T19:45:56.141Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Illegal_character": { - "modified": "2020-03-12T19:46:00.923Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Invalid_array_length": { - "modified": "2020-03-12T19:43:20.852Z", - "contributors": [ - "SphinxKnight", - "tonybengue" - ] - }, - "Web/JavaScript/Reference/Erreurs/Invalid_assignment_left-hand_side": { - "modified": "2020-03-12T19:43:59.619Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Invalid_const_assignment": { - "modified": "2020-03-12T19:45:37.434Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Invalid_date": { - "modified": "2020-03-12T19:45:38.265Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Invalid_for-in_initializer": { - "modified": "2020-03-12T19:45:50.514Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Invalid_for-of_initializer": { - "modified": "2020-03-12T19:45:51.256Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/JSON_bad_parse": { - "modified": "2020-03-12T19:43:46.835Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Malformed_URI": { - "modified": "2020-03-12T19:45:53.291Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Malformed_formal_parameter": { - "modified": "2020-03-12T19:43:17.827Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_bracket_after_list": { - "modified": "2020-03-12T19:43:54.108Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_colon_after_property_id": { - "modified": "2020-03-12T19:46:02.035Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_curly_after_function_body": { - "modified": "2020-03-12T19:45:56.628Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_curly_after_property_list": { - "modified": "2020-03-12T19:43:58.429Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_formal_parameter": { - "modified": "2020-03-12T19:45:53.116Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_initializer_in_const": { - "modified": "2020-03-12T19:45:37.106Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_name_after_dot_operator": { - "modified": "2020-03-12T19:45:54.386Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_parenthesis_after_argument_list": { - "modified": "2020-03-12T19:43:59.290Z", - "contributors": [ - "SphinxKnight", - "emmanuelvacher", - "Gibus" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_parenthesis_after_condition": { - "modified": "2020-03-12T19:45:56.158Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Missing_semicolon_before_statement": { - "modified": "2020-03-12T19:43:58.142Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/More_arguments_needed": { - "modified": "2020-03-12T19:44:02.076Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Negative_repetition_count": { - "modified": "2020-03-12T19:43:13.388Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/No_non-null_object": { - "modified": "2020-03-12T19:45:58.566Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/No_properties": { - "modified": "2020-03-12T19:43:47.939Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/No_variable_name": { - "modified": "2020-03-12T19:45:49.859Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Non_configurable_array_element": { - "modified": "2020-03-12T19:46:18.632Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Not_a_codepoint": { - "modified": "2020-03-12T19:43:19.797Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Not_a_constructor": { - "modified": "2020-03-12T19:44:02.243Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Not_a_function": { - "modified": "2020-03-12T19:43:45.379Z", - "contributors": [ - "SphinxKnight", - "JNa0" - ] - }, - "Web/JavaScript/Reference/Erreurs/Not_defined": { - "modified": "2020-03-12T19:43:40.640Z", - "contributors": [ - "SphinxKnight", - "miraha" - ] - }, - "Web/JavaScript/Reference/Erreurs/Precision_range": { - "modified": "2020-03-12T19:43:21.725Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Property_access_denied": { - "modified": "2020-03-12T19:43:45.225Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Read-only": { - "modified": "2020-03-12T19:43:16.839Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Redeclared_parameter": { - "modified": "2020-03-12T19:44:04.910Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Reduce_of_empty_array_with_no_initial_value": { - "modified": "2020-03-12T19:47:46.197Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Reserved_identifier": { - "modified": "2020-03-12T19:45:51.965Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Resulting_string_too_large": { - "modified": "2020-03-12T19:43:19.426Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Stmt_after_return": { - "modified": "2020-03-12T19:43:18.104Z", - "contributors": [ - "benoit75005", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Strict_Non_Simple_Params": { - "modified": "2020-03-12T19:44:51.680Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Too_much_recursion": { - "modified": "2020-03-12T19:43:56.896Z", - "contributors": [ - "SphinxKnight", - "jcletousey" - ] - }, - "Web/JavaScript/Reference/Erreurs/Typed_array_invalid_arguments": { - "modified": "2020-03-12T19:45:50.257Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Undeclared_var": { - "modified": "2020-03-12T19:43:41.533Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Undefined_prop": { - "modified": "2020-03-12T19:43:44.123Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Unexpected_token": { - "modified": "2020-03-12T19:43:47.541Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Unexpected_type": { - "modified": "2020-03-12T19:43:40.812Z", - "contributors": [ - "SphinxKnight", - "application2000" - ] - }, - "Web/JavaScript/Reference/Erreurs/Unnamed_function_statement": { - "modified": "2020-03-12T19:45:49.862Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Unterminated_string_literal": { - "modified": "2020-03-12T19:44:00.298Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/Var_hides_argument": { - "modified": "2020-03-12T19:43:42.245Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/in_operator_no_object": { - "modified": "2020-03-12T19:46:02.738Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/invalid_right_hand_side_instanceof_operand": { - "modified": "2020-03-12T19:47:32.144Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Erreurs/is_not_iterable": { - "modified": "2020-03-12T19:47:59.033Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Fonctions": { - "modified": "2020-10-15T21:24:00.741Z", - "contributors": [ - "Voltariuss", - "SphinxKnight", - "elWombator", - "Banban", - "BNedry", - "teoli", - "P45QU10U", - "fscholz", - "Delapouite" - ] - }, - "Web/JavaScript/Reference/Fonctions/Définition_de_méthode": { - "modified": "2020-10-15T21:30:50.358Z", - "contributors": [ - "SphinxKnight", - "kdex", - "Banban", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Fonctions/Fonctions_fléchées": { - "modified": "2020-10-15T21:29:13.123Z", - "contributors": [ - "SphinxKnight", - "JNa0", - "Sagiliste", - "SherlockStd", - "mcorteel", - "paaacman", - "Buzut", - "tdd", - "warpdesign", - "BenoitEsnard", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Fonctions/Valeurs_par_défaut_des_arguments": { - "modified": "2020-10-15T21:28:33.576Z", - "contributors": [ - "SphinxKnight", - "theevann", - "hugohil", - "masseuro", - "Chealer", - "fscholz", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Fonctions/arguments": { - "modified": "2020-10-15T21:24:29.177Z", - "contributors": [ - "SphinxKnight", - "gpartenet", - "Vixys", - "Marco105", - "fscholz", - "teoli", - "Laurent_Lyaudet" - ] - }, - "Web/JavaScript/Reference/Fonctions/arguments/@@iterator": { - "modified": "2020-10-15T21:42:30.383Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Fonctions/arguments/callee": { - "modified": "2020-10-15T21:15:56.913Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL", - "Bellerophon", - "Chbok" - ] - }, - "Web/JavaScript/Reference/Fonctions/arguments/length": { - "modified": "2020-10-15T21:16:01.164Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL", - "Bellerophon" - ] - }, - "Web/JavaScript/Reference/Fonctions/get": { - "modified": "2020-10-15T21:11:19.453Z", - "contributors": [ - "SphinxKnight", - "cavalor", - "BenoitL", - "titouandk", - "fscholz", - "teoli", - "Jeremie", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Fonctions/paramètres_du_reste": { - "modified": "2020-10-15T21:29:10.789Z", - "contributors": [ - "yasakura_", - "SphinxKnight", - "allipierre", - "Bringdal", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Fonctions/set": { - "modified": "2020-10-15T21:11:19.798Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "Jeremie", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames": { - "modified": "2020-10-15T22:33:06.475Z", - "contributors": [ - "JNa0", - "romulocintra" - ] - }, - "Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/DisplayNames": { - "modified": "2020-10-15T22:33:04.699Z", - "contributors": [ - "JNa0" - ] - }, - "Web/JavaScript/Reference/Grammaire_lexicale": { - "modified": "2020-10-15T21:29:48.383Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Instructions": { - "modified": "2020-10-15T21:11:24.453Z", - "contributors": [ - "chrisdavidmills", - "SphinxKnight", - "juestzmichael", - "fscholz", - "teoli", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Instructions/Vide": { - "modified": "2020-10-15T21:30:54.634Z", - "contributors": [ - "SphinxKnight", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Instructions/async_function": { - "modified": "2020-10-15T21:50:22.490Z", - "contributors": [ - "SphinxKnight", - "AlmouattazT", - "mathieuLrt", - "Osilos", - "JulienPradet", - "v-Stein" - ] - }, - "Web/JavaScript/Reference/Instructions/bloc": { - "modified": "2020-10-15T21:11:18.992Z", - "contributors": [ - "SphinxKnight", - "teoli", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Instructions/break": { - "modified": "2020-10-15T21:11:19.977Z", - "contributors": [ - "SphinxKnight", - "teoli", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Instructions/class": { - "modified": "2020-10-15T21:33:59.371Z", - "contributors": [ - "SphinxKnight", - "GabrielHautclocq" - ] - }, - "Web/JavaScript/Reference/Instructions/const": { - "modified": "2020-10-15T21:11:19.395Z", - "contributors": [ - "SphinxKnight", - "Fournux", - "gudoy", - "fscholz", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Instructions/continue": { - "modified": "2020-10-15T21:11:18.752Z", - "contributors": [ - "SphinxKnight", - "Ryanfarrah25", - "teoli", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Instructions/debugger": { - "modified": "2020-10-15T21:11:18.196Z", - "contributors": [ - "SphinxKnight", - "sir-kain", - "fscholz", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Instructions/default": { - "modified": "2020-10-15T21:39:25.638Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Instructions/do...while": { - "modified": "2020-10-15T21:11:18.026Z", - "contributors": [ - "jdvauguet", - "SphinxKnight", - "teoli", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Instructions/export": { - "modified": "2020-10-15T21:24:21.794Z", - "contributors": [ - "SphinxKnight", - "cdoublev", - "cquezel", - "coughinbach", - "NemoNobobyPersonne", - "kuashe", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/for": { - "modified": "2020-10-15T21:24:26.742Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/for-await...of": { - "modified": "2020-10-15T22:11:20.751Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Instructions/for...in": { - "modified": "2020-10-15T21:24:25.858Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "Eight-Ball", - "vava", - "Kyojin", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/for...of": { - "modified": "2020-10-15T21:24:26.881Z", - "contributors": [ - "SphinxKnight", - "ericGuyaderBerger", - "thibaultboursier", - "Swarmpan", - "jfrag", - "marie-ototoi", - "fscholz", - "senshu" - ] - }, - "Web/JavaScript/Reference/Instructions/function": { - "modified": "2020-10-15T21:24:24.783Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/function*": { - "modified": "2020-10-15T21:27:53.565Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "risq" - ] - }, - "Web/JavaScript/Reference/Instructions/if...else": { - "modified": "2020-10-15T21:24:26.186Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/import": { - "modified": "2020-10-15T21:24:28.177Z", - "contributors": [ - "SphinxKnight", - "lhapaipai", - "NemoNobobyPersonne", - "gpenissard", - "madarche", - "Hartesic", - "kdex", - "Yukulele.", - "ylerjen", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/import.meta": { - "modified": "2020-10-15T22:06:37.821Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Instructions/label": { - "modified": "2020-10-15T21:24:24.295Z", - "contributors": [ - "SphinxKnight", - "darul75", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/let": { - "modified": "2020-10-15T21:25:01.187Z", - "contributors": [ - "javascriptdezero", - "SphinxKnight", - "Tilatti", - "franzludilabel", - "mbrehin", - "tanjun", - "kdex", - "doom-fr", - "teoli", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Instructions/return": { - "modified": "2020-10-15T21:16:56.693Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Instructions/switch": { - "modified": "2020-10-15T21:25:06.411Z", - "contributors": [ - "SphinxKnight", - "WonJunior", - "oliv06", - "Goofy", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/throw": { - "modified": "2020-10-15T21:05:28.313Z", - "contributors": [ - "SphinxKnight", - "Wazarr94", - "PifyZ", - "teoli", - "Delapouite", - "Sheppy", - "Findel" - ] - }, - "Web/JavaScript/Reference/Instructions/try...catch": { - "modified": "2020-10-15T21:25:04.331Z", - "contributors": [ - "SphinxKnight", - "P45QU10U", - "Palisanka", - "MathRobin", - "Twidi", - "teoli", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Instructions/var": { - "modified": "2020-10-15T21:25:05.879Z", - "contributors": [ - "javascriptdezero", - "SphinxKnight", - "Toinane", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/while": { - "modified": "2020-10-15T21:25:04.095Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Instructions/with": { - "modified": "2020-10-15T21:25:01.861Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Les_protocoles_iteration": { - "modified": "2020-03-12T19:39:18.697Z", - "contributors": [ - "SphinxKnight", - "kdex", - "syntaxucre", - "Goofy", - "Nfroidure", - "teoli" - ] - }, - "Web/JavaScript/Reference/Littéraux_gabarits": { - "modified": "2020-10-15T21:31:15.226Z", - "contributors": [ - "AntoineJT", - "SphinxKnight", - "matthieupetel", - "0x010C", - "frioult", - "yactouat", - "NemoNobobyPersonne", - "HollyPony", - "edspeedy", - "kdex", - "JVirant", - "pmdhaussy", - "Bat" - ] - }, - "Web/JavaScript/Reference/Mots_réservés": { - "modified": "2019-03-24T00:10:19.603Z", - "contributors": [ - "06Minazuki", - "teoli", - "SphinxKnight", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux": { - "modified": "2020-03-12T19:36:17.945Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "ltearno", - "BenoitL", - "teoli", - "AbrahamT", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/AggregateError": { - "modified": "2020-10-15T22:31:39.551Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array": { - "modified": "2020-10-15T21:06:55.877Z", - "contributors": [ - "jeremymouzin", - "SphinxKnight", - "gloucklegnou", - "a-mt", - "edspeedy", - "Johanny", - "Lotfire", - "maxdow", - "PulsarBlow", - "teoli", - "milouse", - "fscholz", - "tregagnon", - "fkhannouf", - "dwogsi", - "LaBoumerde", - "petitphp", - "AbrahamT", - "Manu1400", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/@@iterator": { - "modified": "2020-10-15T21:32:00.777Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/@@species": { - "modified": "2020-10-15T21:44:52.317Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/@@unscopables": { - "modified": "2020-10-15T21:44:45.304Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/Array": { - "modified": "2020-10-15T22:31:39.523Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/concat": { - "modified": "2020-10-15T21:17:19.754Z", - "contributors": [ - "mathildebuenerd", - "SphinxKnight", - "Koroeskohr", - "edspeedy", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/copyWithin": { - "modified": "2020-10-15T21:28:07.794Z", - "contributors": [ - "SphinxKnight", - "VincentCharpentier", - "goofy_bz", - "ferncoder" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/entries": { - "modified": "2020-10-15T21:27:16.960Z", - "contributors": [ - "golngaz", - "SphinxKnight", - "BenoitEsnard", - "teoli", - "quentin.lamamy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/every": { - "modified": "2020-10-15T21:16:43.603Z", - "contributors": [ - "SphinxKnight", - "teoli", - "maxdow", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/fill": { - "modified": "2020-10-15T21:28:08.106Z", - "contributors": [ - "SphinxKnight", - "sixertoy", - "Fredchat", - "ferncoder" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/filter": { - "modified": "2020-10-15T21:26:02.980Z", - "contributors": [ - "SphinxKnight", - "PhilippePerret", - "Johann-S", - "Optarion", - "marie-ototoi", - "jcreigno", - "Lcfvs", - "teoli", - "Exirel", - "vinyll", - "galymn" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/find": { - "modified": "2020-10-15T21:28:09.268Z", - "contributors": [ - "SphinxKnight", - "warpdesign", - "kdex", - "goofy_bz", - "Fredchat", - "ferncoder" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/findIndex": { - "modified": "2020-10-15T21:27:45.311Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/flat": { - "modified": "2020-10-15T22:01:55.243Z", - "contributors": [ - "Baptistou", - "SphinxKnight", - "antant", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/flatMap": { - "modified": "2020-10-15T22:02:17.228Z", - "contributors": [ - "Baptistou", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/forEach": { - "modified": "2020-10-15T21:25:32.887Z", - "contributors": [ - "SphinxKnight", - "beumsk", - "Mr21", - "opii93", - "maxailloud", - "gaelb", - "teoli", - "XenonDeele", - "galymn", - "antham" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/from": { - "modified": "2020-10-15T21:29:07.650Z", - "contributors": [ - "SphinxKnight", - "Acen1991" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/includes": { - "modified": "2020-10-15T21:30:41.127Z", - "contributors": [ - "SphinxKnight", - "AdrienAtHome", - "MetaAnr", - "EtiennePY", - "rougepied", - "ghusse", - "vision-4", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/indexOf": { - "modified": "2020-10-15T21:21:07.609Z", - "contributors": [ - "SphinxKnight", - "Nothus", - "teoli", - "quentin.lamamy", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/isArray": { - "modified": "2020-10-15T21:27:06.801Z", - "contributors": [ - "SphinxKnight", - "jdvauguet", - "kirisakow", - "Steve-Nzr", - "tym", - "teoli", - "quentin.lamamy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/join": { - "modified": "2020-10-15T21:26:44.950Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "hellsingblack" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/keys": { - "modified": "2020-10-15T21:27:15.242Z", - "contributors": [ - "SphinxKnight", - "teoli", - "quentin.lamamy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/lastIndexOf": { - "modified": "2020-10-15T21:21:14.899Z", - "contributors": [ - "lespacedunmatin", - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/length": { - "modified": "2020-10-15T21:26:47.857Z", - "contributors": [ - "jeremymouzin", - "SphinxKnight", - "SBEN", - "andrea11", - "teoli", - "greygjhart" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/map": { - "modified": "2020-10-15T21:16:43.810Z", - "contributors": [ - "SphinxKnight", - "IbrahimSassi", - "edspeedy", - "Ryanfarrah25", - "said026", - "nielk", - "ZeSeb", - "teoli", - "shitsod", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/of": { - "modified": "2020-10-15T21:26:53.760Z", - "contributors": [ - "SphinxKnight", - "xXDarioXx", - "teoli", - "quentin.lamamy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/pop": { - "modified": "2020-10-15T21:26:02.895Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "teoli", - "tregagnon", - "PifyZ" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/prototype": { - "modified": "2020-10-15T21:26:50.016Z", - "contributors": [ - "SphinxKnight", - "gloucklegnou", - "teoli", - "greygjhart" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/push": { - "modified": "2020-10-15T21:26:49.987Z", - "contributors": [ - "mathildebuenerd", - "SphinxKnight", - "maximeag", - "JeanFavreau", - "teoli", - "gsanson" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/reduce": { - "modified": "2020-10-15T21:26:40.462Z", - "contributors": [ - "yorick-dumet", - "SphinxKnight", - "MSOConsulting", - "gloucklegnou", - "Haroon24", - "jilljenn", - "korosakikun", - "arguiot", - "Pandalousie", - "rbinsztock", - "dupontdenis", - "foucdeg", - "nkokla", - "adamhesim", - "cloughy", - "marie-ototoi", - "Xartok", - "matteodelabre", - "teoli", - "Batmat", - "Exirel" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/reduceRight": { - "modified": "2020-10-15T21:26:44.433Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Exirel" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/reverse": { - "modified": "2020-10-15T21:17:28.453Z", - "contributors": [ - "SphinxKnight", - "hihuz", - "nkokla", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/shift": { - "modified": "2020-10-15T21:26:14.469Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "Pihemde", - "teoli", - "gsanson", - "soyuka" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/slice": { - "modified": "2020-10-15T21:17:22.236Z", - "contributors": [ - "SphinxKnight", - "PhilippePerret", - "P45QU10U", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/some": { - "modified": "2020-10-15T21:16:43.566Z", - "contributors": [ - "SphinxKnight", - "BorisNaguet", - "benjaminW78", - "teoli", - "tregagnon", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/sort": { - "modified": "2020-10-15T21:17:21.712Z", - "contributors": [ - "Giildo", - "SphinxKnight", - "Belle85", - "Halkeand", - "toto-le-pirate", - "Ltrlg", - "P45QU10U", - "bfn", - "teoli", - "Goofy", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/splice": { - "modified": "2020-10-15T21:20:43.177Z", - "contributors": [ - "Cirediallo", - "barroij", - "SphinxKnight", - "elgamine", - "PierreDmyy", - "gregstone", - "sebjean", - "zoom", - "VictorLequin", - "dcamilleri", - "lespacedunmatin", - "Elarcis", - "CLEm", - "teoli", - "tregagnon", - "WSH", - "goofy_bz" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/toLocaleString": { - "modified": "2020-10-15T21:27:22.000Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/toSource": { - "modified": "2020-10-15T21:17:29.057Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/toString": { - "modified": "2020-10-15T21:17:20.067Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/unshift": { - "modified": "2020-10-15T21:17:22.122Z", - "contributors": [ - "SphinxKnight", - "Pandalousie", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Array/values": { - "modified": "2020-10-15T21:30:42.817Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ArrayBuffer": { - "modified": "2020-10-15T21:09:26.619Z", - "contributors": [ - "SphinxKnight", - "BenoitEsnard", - "Jeremie", - "warpdesign", - "teoli", - "tregagnon", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/@@species": { - "modified": "2020-10-15T21:44:52.685Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/byteLength": { - "modified": "2020-10-15T21:29:55.674Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/isView": { - "modified": "2020-10-15T21:29:54.795Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/prototype": { - "modified": "2020-10-15T21:29:56.629Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/slice": { - "modified": "2020-10-15T21:29:55.560Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/AsyncFunction": { - "modified": "2020-10-15T21:50:19.728Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/AsyncFunction/prototype": { - "modified": "2020-10-15T21:50:20.188Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics": { - "modified": "2020-10-15T21:43:02.596Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/add": { - "modified": "2020-10-15T21:42:58.119Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/and": { - "modified": "2020-10-15T21:42:58.821Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/compareExchange": { - "modified": "2020-10-15T21:42:58.503Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/exchange": { - "modified": "2020-10-15T21:43:01.150Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/isLockFree": { - "modified": "2020-10-15T21:43:02.726Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/load": { - "modified": "2020-10-15T21:42:59.834Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/notify": { - "modified": "2020-10-15T21:42:59.331Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/or": { - "modified": "2020-10-15T21:42:58.746Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/store": { - "modified": "2020-10-15T21:42:59.524Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/sub": { - "modified": "2020-10-15T21:42:59.630Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/wait": { - "modified": "2020-10-15T21:42:59.013Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Atomics/xor": { - "modified": "2020-10-15T21:43:00.311Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt": { - "modified": "2020-10-15T22:12:28.729Z", - "contributors": [ - "SphinxKnight", - "sarahgp" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt/asIntN": { - "modified": "2020-10-15T22:17:33.198Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt/asUintN": { - "modified": "2020-10-15T22:17:30.722Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt/prototype": { - "modified": "2020-10-15T22:12:26.325Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt/toLocaleString": { - "modified": "2020-10-15T22:20:26.529Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt/toString": { - "modified": "2020-10-15T22:20:24.664Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt/valueOf": { - "modified": "2020-10-15T22:20:24.533Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigInt64Array": { - "modified": "2020-10-15T22:20:27.074Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/BigUint64Array": { - "modified": "2020-10-15T22:20:27.506Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Boolean": { - "modified": "2020-10-15T21:10:16.073Z", - "contributors": [ - "QuentinR", - "SphinxKnight", - "madarche", - "ycintre", - "BenoitEsnard", - "teoli", - "Goofy", - "tregagnon", - "Jeremie", - "LaBoumerde", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Boolean/prototype": { - "modified": "2020-10-15T21:15:22.913Z", - "contributors": [ - "SphinxKnight", - "npichon", - "tregagnon", - "teoli", - "Jeremie", - "Delapouite", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Boolean/toSource": { - "modified": "2020-10-15T21:27:16.458Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Boolean/toString": { - "modified": "2020-10-15T21:26:54.585Z", - "contributors": [ - "SphinxKnight", - "Enevevet", - "teoli", - "tregagnon", - "quentin.lamamy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Boolean/valueOf": { - "modified": "2020-10-15T21:27:17.527Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView": { - "modified": "2020-10-15T21:29:58.170Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/buffer": { - "modified": "2020-10-15T21:29:57.315Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/byteLength": { - "modified": "2020-10-15T21:29:57.009Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/byteOffset": { - "modified": "2020-10-15T21:29:53.882Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getBigInt64": { - "modified": "2020-10-15T22:20:24.788Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getBigUint64": { - "modified": "2020-10-15T22:20:26.008Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getFloat32": { - "modified": "2020-10-15T21:29:57.781Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getFloat64": { - "modified": "2020-10-15T21:30:01.113Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getInt16": { - "modified": "2020-10-15T21:30:00.676Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getInt32": { - "modified": "2020-10-15T21:30:00.745Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getInt8": { - "modified": "2020-10-15T21:30:00.981Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getUint16": { - "modified": "2020-10-15T21:30:01.014Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getUint32": { - "modified": "2020-10-15T21:30:01.203Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/getUint8": { - "modified": "2020-10-15T21:30:02.259Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/prototype": { - "modified": "2020-10-15T21:29:57.016Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setBigInt64": { - "modified": "2020-10-15T22:20:26.386Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setBigUint64": { - "modified": "2020-10-15T22:20:26.869Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setFloat32": { - "modified": "2020-10-15T21:30:01.968Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setFloat64": { - "modified": "2020-10-15T21:30:01.693Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setInt16": { - "modified": "2020-10-15T21:30:01.886Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setInt32": { - "modified": "2020-10-15T21:30:01.950Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setInt8": { - "modified": "2020-10-15T21:30:02.761Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setUint16": { - "modified": "2020-10-15T21:30:02.932Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setUint32": { - "modified": "2020-10-15T21:30:03.206Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/DataView/setUint8": { - "modified": "2020-10-15T21:30:03.029Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date": { - "modified": "2020-10-15T21:10:15.879Z", - "contributors": [ - "SphinxKnight", - "Rigaudie", - "necraidan", - "JulienBertacco", - "madarche", - "jyloup", - "noriam", - "sebastienserre", - "teoli", - "Goofy", - "tregagnon", - "LaBoumerde", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/@@toPrimitive": { - "modified": "2020-10-15T21:39:20.661Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/UTC": { - "modified": "2020-10-15T21:16:54.441Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getDate": { - "modified": "2020-10-15T21:17:24.897Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getDay": { - "modified": "2020-10-15T21:17:31.291Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getFullYear": { - "modified": "2020-10-15T21:17:23.917Z", - "contributors": [ - "edspeedy", - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getHours": { - "modified": "2020-10-15T21:16:26.282Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getMilliseconds": { - "modified": "2020-10-15T21:16:20.630Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getMinutes": { - "modified": "2020-10-15T21:17:24.950Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getMonth": { - "modified": "2020-10-15T21:17:27.143Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getSeconds": { - "modified": "2020-10-15T21:17:23.294Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getTime": { - "modified": "2020-10-15T21:17:23.998Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getTimezoneOffset": { - "modified": "2020-10-15T21:26:59.830Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCDate": { - "modified": "2020-10-15T21:26:54.962Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCDay": { - "modified": "2020-10-15T21:27:01.688Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCFullYear": { - "modified": "2020-10-15T21:26:58.501Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCHours": { - "modified": "2020-10-15T21:26:51.252Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCMilliseconds": { - "modified": "2020-10-15T21:27:07.959Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCMinutes": { - "modified": "2020-10-15T21:26:54.190Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCMonth": { - "modified": "2020-10-15T21:26:53.924Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getUTCSeconds": { - "modified": "2020-10-15T21:27:13.434Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/getYear": { - "modified": "2020-10-15T21:17:22.042Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/now": { - "modified": "2020-10-15T21:24:17.054Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Goofy", - "Delapouite" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/parse": { - "modified": "2020-10-15T21:16:58.585Z", - "contributors": [ - "JNa0", - "SphinxKnight", - "gudoy", - "Aminelahlou", - "zefrog", - "teoli", - "Goofy", - "tregagnon", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/prototype": { - "modified": "2020-10-15T21:15:25.178Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "teoli", - "tregagnon", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setDate": { - "modified": "2020-10-15T21:27:13.007Z", - "contributors": [ - "SphinxKnight", - "guilhem-pujol", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setFullYear": { - "modified": "2020-10-15T21:27:13.969Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setHours": { - "modified": "2020-10-15T21:27:13.599Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setMilliseconds": { - "modified": "2020-10-15T21:27:13.229Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setMinutes": { - "modified": "2020-10-15T21:27:17.878Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setMonth": { - "modified": "2020-10-15T21:27:13.435Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setSeconds": { - "modified": "2020-10-15T21:27:13.364Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setTime": { - "modified": "2020-10-15T21:27:14.067Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setUTCDate": { - "modified": "2020-10-15T21:27:14.050Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setUTCFullYear": { - "modified": "2020-10-15T21:27:14.373Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setUTCHours": { - "modified": "2020-10-15T21:27:14.117Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setUTCMilliseconds": { - "modified": "2020-10-15T21:27:15.319Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setUTCMinutes": { - "modified": "2020-10-15T21:27:15.201Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setUTCMonth": { - "modified": "2020-10-15T21:27:14.657Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setUTCSeconds": { - "modified": "2020-10-15T21:27:15.585Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/setYear": { - "modified": "2020-10-15T21:27:18.964Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toDateString": { - "modified": "2020-10-15T21:27:17.686Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toGMTString": { - "modified": "2020-10-15T21:27:18.821Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toISOString": { - "modified": "2020-10-15T21:27:16.901Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toJSON": { - "modified": "2020-10-15T21:27:15.987Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toLocaleDateString": { - "modified": "2020-10-15T21:27:19.231Z", - "contributors": [ - "SphinxKnight", - "petosorus", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toLocaleString": { - "modified": "2020-10-15T21:27:19.378Z", - "contributors": [ - "SphinxKnight", - "vava", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toLocaleTimeString": { - "modified": "2020-10-15T21:27:19.075Z", - "contributors": [ - "SphinxKnight", - "vava", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toSource": { - "modified": "2020-10-15T21:27:17.217Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toString": { - "modified": "2020-10-15T21:27:18.466Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toTimeString": { - "modified": "2020-10-15T21:27:18.536Z", - "contributors": [ - "SphinxKnight", - "mlbrgl", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/toUTCString": { - "modified": "2020-10-15T21:27:16.521Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Date/valueOF": { - "modified": "2020-10-15T21:24:17.644Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error": { - "modified": "2020-11-11T07:34:32.605Z", - "contributors": [ - "madarche", - "SphinxKnight", - "PhilippePerret", - "edspeedy", - "HelloEdit", - "NemoNobobyPersonne", - "gouroujo", - "teoli", - "Goofy", - "tregagnon", - "fscholz", - "rd6137" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/Stack": { - "modified": "2020-10-15T21:27:18.706Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/columnNumber": { - "modified": "2020-10-15T21:27:17.412Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Goofy", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/fileName": { - "modified": "2020-10-15T21:27:27.112Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/lineNumber": { - "modified": "2020-10-15T21:27:20.066Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/message": { - "modified": "2020-10-15T21:27:20.134Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/name": { - "modified": "2020-10-15T21:27:18.722Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/prototype": { - "modified": "2020-10-15T21:27:19.966Z", - "contributors": [ - "Thebarda", - "SphinxKnight", - "teoli", - "Goofy", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/toSource": { - "modified": "2020-10-15T21:27:20.298Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Error/toString": { - "modified": "2020-10-15T21:27:18.952Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/EvalError": { - "modified": "2020-10-15T21:27:25.607Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/EvalError/prototype": { - "modified": "2020-10-15T21:27:20.266Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Float32Array": { - "modified": "2020-10-15T21:07:00.034Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Float64Array": { - "modified": "2020-10-15T21:30:11.484Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function": { - "modified": "2020-10-15T21:09:29.700Z", - "contributors": [ - "SphinxKnight", - "darul75", - "teoli", - "tregagnon", - "LaBoumerde", - "Sheppy", - "rat", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/apply": { - "modified": "2020-10-15T21:26:56.787Z", - "contributors": [ - "SphinxKnight", - "Birssan", - "Superdrac7", - "saeraphin", - "rbecheras", - "darul75", - "dirakkk", - "adriens", - "peb85", - "teoli", - "jmpp" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/arguments": { - "modified": "2020-10-15T21:27:20.892Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/bind": { - "modified": "2020-10-15T21:27:41.401Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "mfcochauxlaberge", - "P45QU10U", - "jacomyal", - "darul75", - "tykayn", - "dirakkk", - "tregagnon", - "teoli", - "flo5589" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/call": { - "modified": "2020-10-15T21:26:54.425Z", - "contributors": [ - "SphinxKnight", - "opii93", - "ksahin", - "Yopai", - "hu9o", - "darul75", - "teoli", - "peb85" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/caller": { - "modified": "2020-10-15T21:14:32.170Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Arzach", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/displayName": { - "modified": "2020-10-15T21:27:20.597Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/length": { - "modified": "2020-10-15T21:14:30.392Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Jeremie", - "Julien STUBY", - "Julien.stuby", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/name": { - "modified": "2020-10-15T21:27:47.349Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/prototype": { - "modified": "2020-10-15T21:14:17.300Z", - "contributors": [ - "SphinxKnight", - "Francoois", - "teoli", - "Jeremie", - "fscholz", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/toSource": { - "modified": "2020-10-15T21:15:30.131Z", - "contributors": [ - "fvignals", - "SphinxKnight", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Function/toString": { - "modified": "2020-10-15T21:15:24.967Z", - "contributors": [ - "SphinxKnight", - "romain.bohdanowicz", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Generator": { - "modified": "2020-10-15T21:32:10.242Z", - "contributors": [ - "SphinxKnight", - "Robinsstudio", - "Javascipt" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Generator/next": { - "modified": "2020-10-15T21:32:57.318Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Generator/return": { - "modified": "2020-10-15T21:32:57.673Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Generator/throw": { - "modified": "2020-10-15T21:32:56.957Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/GeneratorFunction": { - "modified": "2020-10-15T21:32:15.217Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/GeneratorFunction/prototype": { - "modified": "2020-10-15T21:32:11.205Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Infinity": { - "modified": "2020-10-15T21:18:06.071Z", - "contributors": [ - "SphinxKnight", - "techerjeansebastienpro", - "mjarraya", - "jan.roudaut", - "teoli", - "tregagnon", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Int16Array": { - "modified": "2020-10-15T21:30:06.153Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Int32Array": { - "modified": "2020-10-15T21:30:11.336Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Int8Array": { - "modified": "2020-10-15T21:30:11.858Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/InternalError": { - "modified": "2020-10-15T21:27:45.940Z", - "contributors": [ - "SphinxKnight", - "HubertGruniaux", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/InternalError/prototype": { - "modified": "2020-10-15T21:27:47.341Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl": { - "modified": "2020-10-15T21:27:56.279Z", - "contributors": [ - "JNa0", - "daformat", - "Louis-Aime", - "Utopiad", - "SphinxKnight", - "NemoNobobyPersonne", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Collator": { - "modified": "2020-10-15T21:27:54.396Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Collator/compare": { - "modified": "2020-10-15T21:28:03.770Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Collator/prototype": { - "modified": "2020-10-15T21:28:03.767Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Collator/resolvedOptions": { - "modified": "2020-10-15T21:28:03.707Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Collator/supportedLocalesOf": { - "modified": "2020-10-15T21:28:03.803Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat": { - "modified": "2020-10-15T21:27:19.315Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "Elendev", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/format": { - "modified": "2020-10-15T21:28:03.810Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatRange": { - "modified": "2020-04-21T08:50:52.427Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatRangeToParts": { - "modified": "2020-10-15T22:24:17.987Z", - "contributors": [ - "fscholz", - "codedotgs" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatToParts": { - "modified": "2020-10-15T21:44:45.585Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/prototype": { - "modified": "2020-10-15T21:28:04.014Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/resolvedOptions": { - "modified": "2020-10-15T21:28:04.802Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "lsda123453" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/supportedLocalesOf": { - "modified": "2020-10-15T21:28:04.662Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "Nickdouille" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat": { - "modified": "2020-10-15T22:13:54.548Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/format": { - "modified": "2020-10-15T22:20:40.935Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/formatToParts": { - "modified": "2020-10-15T22:21:14.181Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/prototype": { - "modified": "2020-10-15T22:13:56.011Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/resolvedOptions": { - "modified": "2020-10-15T22:21:15.989Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/supportedLocalesOf": { - "modified": "2020-10-15T22:14:23.938Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale": { - "modified": "2020-10-15T22:17:31.687Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/baseName": { - "modified": "2020-10-15T22:20:40.682Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/calendar": { - "modified": "2020-04-22T15:30:07.297Z", - "contributors": [ - "Louis-Aime", - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/caseFirst": { - "modified": "2020-10-15T22:20:42.350Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/collation": { - "modified": "2020-10-15T22:20:43.044Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/hourCycle": { - "modified": "2020-10-15T22:20:46.319Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/language": { - "modified": "2020-10-15T22:20:47.232Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/maximize": { - "modified": "2020-10-15T22:20:47.820Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/minimize": { - "modified": "2020-10-15T22:20:48.165Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/numberingSystem": { - "modified": "2020-10-15T22:20:49.432Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/numeric": { - "modified": "2020-10-15T22:20:50.054Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/prototype": { - "modified": "2020-10-15T22:21:10.788Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/region": { - "modified": "2020-10-15T22:20:53.500Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/script": { - "modified": "2020-10-15T22:20:55.739Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/Locale/toString": { - "modified": "2020-10-15T22:20:51.989Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat": { - "modified": "2020-10-15T21:28:08.411Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "polinux" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/format": { - "modified": "2020-10-15T21:28:08.238Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/formatToParts": { - "modified": "2020-10-15T21:59:08.586Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/prototype": { - "modified": "2020-10-15T21:28:09.446Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/resolvedOptions": { - "modified": "2020-10-15T21:28:08.213Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/supportedLocalesOf": { - "modified": "2020-10-15T21:28:08.002Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules": { - "modified": "2020-10-15T21:59:11.305Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/prototype": { - "modified": "2020-10-15T21:59:10.173Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/resolvedOptions": { - "modified": "2020-10-15T21:59:10.823Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/select": { - "modified": "2020-10-15T21:59:10.578Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/supportedLocalesOf": { - "modified": "2020-10-15T21:59:09.739Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat": { - "modified": "2020-10-15T22:12:26.525Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/format": { - "modified": "2020-10-15T22:13:09.435Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/formatToParts": { - "modified": "2020-10-15T22:13:09.354Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/prototype": { - "modified": "2020-10-15T22:13:09.144Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/resolvedOptions": { - "modified": "2020-10-15T22:14:27.937Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "goofy_mdn" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/supportedLocalesOf": { - "modified": "2020-10-15T22:13:14.833Z", - "contributors": [ - "fscholz", - "SphinxKnight", - "goofy_mdn" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Intl/getCanonicalLocales": { - "modified": "2020-10-15T21:45:48.918Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/JSON": { - "modified": "2020-10-15T21:24:57.042Z", - "contributors": [ - "tristantheb", - "cyrilbois", - "SphinxKnight", - "Cornos", - "Loliwe", - "teoli", - "wakka27", - "Sheppy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/JSON/parse": { - "modified": "2020-10-15T21:27:29.177Z", - "contributors": [ - "cyrilbois", - "SphinxKnight", - "Eric-ciccotti", - "edspeedy", - "Nolwennig", - "KacyLuzzardi", - "marie-ototoi", - "raphael0202", - "WSH", - "teoli", - "DCK" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/JSON/stringify": { - "modified": "2020-10-15T21:24:56.231Z", - "contributors": [ - "SphinxKnight", - "ArnaudBuchholz", - "benoitdubuc", - "smalesys", - "JM-D", - "Nolwennig", - "Lotfire", - "mdarse", - "raphpell", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map": { - "modified": "2020-10-15T21:27:51.341Z", - "contributors": [ - "innocenzi", - "SphinxKnight", - "ariasuni", - "HelloEdit", - "GodefroyClair", - "kdex", - "Pragmateek", - "lionel", - "Goofy", - "Ltrlg", - "Youle", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/@@iterator": { - "modified": "2020-10-15T21:32:15.453Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/@@species": { - "modified": "2020-10-15T21:36:32.002Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/@@toStringTag": { - "modified": "2020-10-15T21:37:58.832Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/clear": { - "modified": "2020-10-15T21:27:50.323Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/delete": { - "modified": "2020-10-15T21:27:49.784Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/entries": { - "modified": "2020-10-15T21:27:49.172Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/forEach": { - "modified": "2020-10-15T21:27:50.745Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/get": { - "modified": "2020-10-15T21:27:49.108Z", - "contributors": [ - "tomderudder", - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/has": { - "modified": "2020-10-15T21:27:49.912Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/keys": { - "modified": "2020-10-15T21:27:50.316Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/prototype": { - "modified": "2020-10-15T21:27:50.561Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/set": { - "modified": "2020-10-15T21:27:50.400Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/size": { - "modified": "2020-10-15T21:27:52.803Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Map/values": { - "modified": "2020-10-15T21:27:55.939Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math": { - "modified": "2020-10-15T21:20:01.725Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "fred.wang", - "guymage", - "rm1720" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/E": { - "modified": "2020-10-15T21:17:17.359Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/LN10": { - "modified": "2020-10-15T21:17:16.771Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/LN2": { - "modified": "2020-10-15T21:17:16.639Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/LOG10E": { - "modified": "2020-10-15T21:17:16.810Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/LOG2E": { - "modified": "2020-10-15T21:17:15.620Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/PI": { - "modified": "2020-10-15T21:17:15.595Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/SQRT1_2": { - "modified": "2020-10-15T21:17:15.785Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/SQRT2": { - "modified": "2020-10-15T21:17:17.666Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/abs": { - "modified": "2020-10-15T21:26:38.922Z", - "contributors": [ - "SphinxKnight", - "teoli", - "fred.wang" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/acos": { - "modified": "2020-10-15T21:17:15.426Z", - "contributors": [ - "SphinxKnight", - "VictorLequin", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/acosh": { - "modified": "2020-10-15T21:27:47.280Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/asin": { - "modified": "2020-10-15T21:17:15.077Z", - "contributors": [ - "SphinxKnight", - "francois-travais", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/asinh": { - "modified": "2020-10-15T21:27:49.550Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/atan": { - "modified": "2020-10-15T21:17:14.727Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/atan2": { - "modified": "2020-10-15T21:17:15.462Z", - "contributors": [ - "SphinxKnight", - "Snowirbix", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/atanh": { - "modified": "2020-10-15T21:27:48.469Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/cbrt": { - "modified": "2020-10-15T21:27:47.085Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/ceil": { - "modified": "2020-10-15T21:26:53.449Z", - "contributors": [ - "SphinxKnight", - "forresst", - "teoli", - "latapie.daniel", - "Samuel.Rossille" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/clz32": { - "modified": "2020-10-15T21:27:48.777Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/cos": { - "modified": "2020-10-15T21:17:12.078Z", - "contributors": [ - "SphinxKnight", - "yolenoyer", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/cosh": { - "modified": "2020-10-15T21:27:54.644Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/exp": { - "modified": "2020-10-15T21:17:13.550Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/expm1": { - "modified": "2020-10-15T21:27:52.818Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/floor": { - "modified": "2020-10-15T21:17:14.105Z", - "contributors": [ - "SphinxKnight", - "ludo-g", - "Jeremie", - "teoli", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/fround": { - "modified": "2020-10-15T21:27:50.617Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/hypot": { - "modified": "2020-10-15T21:28:10.732Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/imul": { - "modified": "2020-10-15T21:28:10.111Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/log": { - "modified": "2020-10-15T21:17:13.369Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/log10": { - "modified": "2020-10-15T21:28:11.073Z", - "contributors": [ - "SphinxKnight", - "tifosi" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/log1p": { - "modified": "2020-10-15T21:28:09.901Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/log2": { - "modified": "2020-10-15T21:28:11.259Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/max": { - "modified": "2020-10-15T21:17:13.571Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/min": { - "modified": "2020-10-15T21:17:14.589Z", - "contributors": [ - "SphinxKnight", - "alexandre-janniaux", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/pow": { - "modified": "2020-10-15T21:17:12.838Z", - "contributors": [ - "SphinxKnight", - "vannell", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/random": { - "modified": "2020-10-15T21:17:17.890Z", - "contributors": [ - "grandaolionel", - "NonozgYtb", - "SphinxKnight", - "romain.bohdanowicz", - "BNedry", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev", - "Gorrk" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/round": { - "modified": "2020-10-15T21:26:39.977Z", - "contributors": [ - "SphinxKnight", - "vinc17", - "Akronos", - "teoli", - "Zealot" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/sign": { - "modified": "2020-10-15T21:28:11.432Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/sin": { - "modified": "2020-10-15T21:17:10.279Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev", - "Gorrk" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/sinh": { - "modified": "2020-10-15T21:28:13.308Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/sqrt": { - "modified": "2020-10-15T21:17:12.810Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev", - "Fredchat", - "Gorrk" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/tan": { - "modified": "2020-10-15T21:17:15.624Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev", - "Gorrk" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/tanh": { - "modified": "2020-10-15T21:27:01.331Z", - "contributors": [ - "SphinxKnight", - "teoli", - "quentin.lamamy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Math/trunc": { - "modified": "2020-10-15T21:26:51.743Z", - "contributors": [ - "SphinxKnight", - "Antoinep77", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/NaN": { - "modified": "2020-10-15T21:18:03.362Z", - "contributors": [ - "SphinxKnight", - "Isaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - "teoli", - "tregagnon", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number": { - "modified": "2020-10-15T21:10:12.909Z", - "contributors": [ - "jeremymouzin", - "javascriptdezero", - "SphinxKnight", - "Seebz", - "teoli", - "Jeremie", - "LaBoumerde", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/EPSILON": { - "modified": "2020-10-15T21:27:45.250Z", - "contributors": [ - "SphinxKnight", - "ea1000", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER": { - "modified": "2020-10-15T21:28:11.126Z", - "contributors": [ - "SphinxKnight", - "goofy_bz", - "Fredchat", - "ferncoder" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/MAX_VALUE": { - "modified": "2020-10-15T21:27:44.825Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER": { - "modified": "2020-10-15T21:28:11.837Z", - "contributors": [ - "SphinxKnight", - "fleurdeswift" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/MIN_VALUE": { - "modified": "2020-10-15T21:27:45.417Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/NEGATIVE_INFINITY": { - "modified": "2020-10-15T21:28:13.773Z", - "contributors": [ - "SphinxKnight", - "goofy_bz" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/NaN": { - "modified": "2020-10-15T21:28:13.269Z", - "contributors": [ - "SphinxKnight", - "Fredchat" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/POSITIVE_INFINITY": { - "modified": "2020-10-15T21:28:14.481Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/isFinite": { - "modified": "2020-10-15T21:28:24.774Z", - "contributors": [ - "jeremymouzin", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/isInteger": { - "modified": "2020-10-15T21:28:30.032Z", - "contributors": [ - "lespacedunmatin", - "SphinxKnight", - "Itee" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/isNaN": { - "modified": "2020-10-15T21:28:26.451Z", - "contributors": [ - "SphinxKnight", - "Lcfvs" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/isSafeInteger": { - "modified": "2020-10-15T21:28:26.210Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/parseFloat": { - "modified": "2020-10-15T21:28:31.717Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/parseInt": { - "modified": "2020-10-15T21:28:31.772Z", - "contributors": [ - "SphinxKnight", - "RyDroid", - "tforgione" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/prototype": { - "modified": "2020-10-15T21:28:28.015Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/toExponential": { - "modified": "2020-10-15T21:28:31.727Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/toFixed": { - "modified": "2020-10-15T21:28:28.211Z", - "contributors": [ - "SphinxKnight", - "forresst" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/toLocaleString": { - "modified": "2020-10-15T21:28:28.189Z", - "contributors": [ - "SphinxKnight", - "kinjiro", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/toPrecision": { - "modified": "2020-10-15T21:28:31.119Z", - "contributors": [ - "SphinxKnight", - "edspeedy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/toSource": { - "modified": "2020-10-15T21:28:29.727Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/toString": { - "modified": "2020-10-15T21:28:31.793Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Number/valueOf": { - "modified": "2020-10-15T21:28:28.952Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object": { - "modified": "2020-10-15T21:09:30.794Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "tlgman", - "daformat", - "NemoNobobyPersonne", - "teoli", - "LaBoumerde", - "Sheppy", - "rat", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/assign": { - "modified": "2020-10-15T21:30:06.373Z", - "contributors": [ - "SphinxKnight", - "lespacedunmatin", - "Cobrand", - "naholyr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/constructor": { - "modified": "2020-10-15T21:25:01.923Z", - "contributors": [ - "SphinxKnight", - "lastnico", - "teoli", - "junius_rendel" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/create": { - "modified": "2020-10-15T21:25:01.782Z", - "contributors": [ - "SphinxKnight", - "techerjeansebastienpro", - "edspeedy", - "VictorLequin", - "benoit", - "Exalyon", - "goofy_bz", - "fqueze", - "teoli", - "XenonDeele", - "gplanchat" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/defineGetter": { - "modified": "2020-10-15T21:11:15.754Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "matteodelabre", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/defineProperties": { - "modified": "2020-10-15T21:28:34.360Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/defineProperty": { - "modified": "2020-10-15T21:28:49.804Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "AlainGourves", - "mo0z", - "yboukhata" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/defineSetter": { - "modified": "2020-10-15T21:11:17.941Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "matteodelabre", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/entries": { - "modified": "2020-10-15T21:40:48.589Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/freeze": { - "modified": "2020-10-15T21:28:59.876Z", - "contributors": [ - "issam-gharsallah", - "SphinxKnight", - "ChristopheBoucaut" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/fromEntries": { - "modified": "2020-10-15T22:09:50.512Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptor": { - "modified": "2020-10-15T21:29:00.454Z", - "contributors": [ - "SphinxKnight", - "fscholz", - "stephaniehobson" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptors": { - "modified": "2020-10-15T21:47:14.373Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyNames": { - "modified": "2020-10-15T21:29:01.599Z", - "contributors": [ - "SphinxKnight", - "edspeedy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertySymbols": { - "modified": "2020-10-15T21:28:59.748Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/getPrototypeOf": { - "modified": "2020-10-15T21:28:59.819Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/hasOwnProperty": { - "modified": "2020-10-15T21:26:15.408Z", - "contributors": [ - "SphinxKnight", - "marcdahan", - "hammenm", - "opii93", - "fdnhkj", - "bgondy", - "teoli", - "N.greff" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/is": { - "modified": "2020-10-15T21:29:02.138Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/isExtensible": { - "modified": "2020-10-15T21:29:00.648Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/isFrozen": { - "modified": "2020-10-15T21:29:01.255Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/isPrototypeOf": { - "modified": "2020-10-15T21:15:22.017Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "darul75", - "teoli", - "Jeremie", - "fscholz", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/isSealed": { - "modified": "2020-10-15T21:27:54.879Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/keys": { - "modified": "2020-10-15T21:29:01.084Z", - "contributors": [ - "SphinxKnight", - "antoineneff", - "greberger", - "vava", - "P45QU10U", - "cdr", - "Assitan" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/lookupGetter": { - "modified": "2020-10-15T21:11:19.878Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "matteodelabre", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/lookupSetter": { - "modified": "2020-10-15T21:11:18.331Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "matteodelabre", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/preventExtensions": { - "modified": "2020-10-15T21:29:02.624Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/propertyIsEnumerable": { - "modified": "2020-10-15T21:15:23.474Z", - "contributors": [ - "SphinxKnight", - "opii93", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/proto": { - "modified": "2020-10-15T21:29:03.338Z", - "contributors": [ - "SphinxKnight", - "tlgman", - "tforgione", - "Huntedpix" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/prototype": { - "modified": "2020-10-15T21:15:24.935Z", - "contributors": [ - "SphinxKnight", - "opii93", - "ctjhoa", - "WSH", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/seal": { - "modified": "2020-10-15T21:27:45.673Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/setPrototypeOf": { - "modified": "2020-10-15T21:27:41.346Z", - "contributors": [ - "SphinxKnight", - "42void", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/toLocaleString": { - "modified": "2020-10-15T21:27:27.140Z", - "contributors": [ - "SphinxKnight", - "teoli", - "moust" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/toSource": { - "modified": "2020-10-15T21:15:26.141Z", - "contributors": [ - "SphinxKnight", - "P45QU10U", - "teoli", - "tregagnon", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/toString": { - "modified": "2020-10-15T21:16:50.618Z", - "contributors": [ - "SphinxKnight", - "teoli", - "tregagnon", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/valueOf": { - "modified": "2020-10-15T21:15:39.082Z", - "contributors": [ - "SphinxKnight", - "jti77", - "teoli", - "tregagnon", - "BenoitL", - "MWeiss" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Object/values": { - "modified": "2020-10-15T21:40:47.566Z", - "contributors": [ - "SphinxKnight", - "antoineneff" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise": { - "modified": "2020-10-15T21:27:45.338Z", - "contributors": [ - "SphinxKnight", - "jbdebiasio", - "hellosct1", - "bbouvier", - "VivienZo", - "sammy44nts", - "Mr21", - "toons3000", - "teoli", - "neveldo", - "nicodel", - "Goofy", - "P45QU10U" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/all": { - "modified": "2020-10-15T21:30:06.254Z", - "contributors": [ - "SphinxKnight", - "danyd4n", - "HlodowigRaginwald", - "mehdichamouma", - "Kerumen" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/allSettled": { - "modified": "2020-10-15T22:20:25.837Z", - "contributors": [ - "SphinxKnight", - "lgiraudel" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/any": { - "modified": "2020-11-11T08:33:32.965Z", - "contributors": [ - "JNa0", - "madarche", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/catch": { - "modified": "2020-10-15T21:30:06.196Z", - "contributors": [ - "SphinxKnight", - "LaurentBarbareau", - "axel_chalon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/finally": { - "modified": "2020-10-15T21:58:13.243Z", - "contributors": [ - "SphinxKnight", - "aduh95" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/prototype": { - "modified": "2020-10-15T21:30:11.290Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/race": { - "modified": "2020-10-15T21:30:12.013Z", - "contributors": [ - "SphinxKnight", - "sylv1" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/reject": { - "modified": "2020-10-15T21:30:07.069Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/resolve": { - "modified": "2020-10-15T21:30:07.463Z", - "contributors": [ - "SphinxKnight", - "julienroyer", - "lotfire24", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Promise/then": { - "modified": "2020-10-15T21:30:07.384Z", - "contributors": [ - "SphinxKnight", - "Altefkatr", - "jonatjano", - "hmonglee", - "mchlggnn", - "pablolarvor", - "gaelb" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy": { - "modified": "2020-10-15T21:31:12.209Z", - "contributors": [ - "SphinxKnight", - "Remy_Juanes", - "Watilin", - "lotfire24", - "noopole", - "sd65", - "jmpp", - "jessmania" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler": { - "modified": "2020-10-15T21:32:28.978Z", - "contributors": [ - "Mozinet", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/apply": { - "modified": "2020-10-15T21:32:28.635Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/construct": { - "modified": "2020-10-15T21:32:28.635Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/defineProperty": { - "modified": "2020-10-15T21:32:28.638Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/deleteProperty": { - "modified": "2020-10-15T21:32:28.682Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/get": { - "modified": "2020-10-15T21:32:31.736Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getOwnPropertyDescriptor": { - "modified": "2020-10-15T21:32:29.609Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getPrototypeOf": { - "modified": "2020-10-15T21:32:30.602Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/has": { - "modified": "2020-10-15T21:32:30.568Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/isExtensible": { - "modified": "2020-10-15T21:32:31.408Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/ownKeys": { - "modified": "2020-10-15T21:32:31.494Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/preventExtensions": { - "modified": "2020-10-15T21:32:31.494Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/set": { - "modified": "2020-10-15T21:32:31.923Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/handler/setPrototypeOf": { - "modified": "2020-10-15T21:32:31.782Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Proxy/revocable": { - "modified": "2020-10-15T21:32:31.831Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RangeError": { - "modified": "2020-10-15T21:29:07.869Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RangeError/prototype": { - "modified": "2020-10-15T21:29:08.374Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ReferenceError": { - "modified": "2020-10-15T21:29:30.643Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/ReferenceError/prototype": { - "modified": "2020-10-15T21:29:30.187Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect": { - "modified": "2020-10-15T21:32:38.746Z", - "contributors": [ - "SphinxKnight", - "jlowcs" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/Comparaison_entre_Reflect_et_les_méthodes_Object": { - "modified": "2020-03-12T19:48:58.029Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/apply": { - "modified": "2020-10-15T21:38:00.292Z", - "contributors": [ - "SphinxKnight", - "dcamilleri" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/construct": { - "modified": "2020-10-15T21:37:57.573Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/defineProperty": { - "modified": "2020-10-15T21:37:57.829Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/deleteProperty": { - "modified": "2020-10-15T21:37:56.892Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/get": { - "modified": "2020-10-15T21:38:01.913Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/getOwnPropertyDescriptor": { - "modified": "2020-10-15T21:38:01.346Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/getPrototypeOf": { - "modified": "2020-10-15T21:37:58.755Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/has": { - "modified": "2020-10-15T21:38:01.255Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/isExtensible": { - "modified": "2020-10-15T21:38:01.286Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/ownKeys": { - "modified": "2020-10-15T21:37:57.144Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/preventExtensions": { - "modified": "2020-10-15T21:38:08.070Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/set": { - "modified": "2020-10-15T21:38:07.760Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Reflect/setPrototypeOf": { - "modified": "2020-10-15T21:38:10.277Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp": { - "modified": "2020-10-15T21:09:26.641Z", - "contributors": [ - "SphinxKnight", - "JNa0", - "jersou", - "vava", - "RedGuff", - "NemoNobobyPersonne", - "tregagnon", - "Djiit", - "polinux", - "FremyCompany", - "marcantoinebeaulieu", - "Mr21", - "lovasoa", - "psegalen", - "teoli", - "vvision", - "daniel35310" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/@@match": { - "modified": "2020-10-15T21:44:52.805Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/@@matchAll": { - "modified": "2020-10-15T22:14:45.467Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/@@replace": { - "modified": "2020-10-15T21:44:48.066Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/@@search": { - "modified": "2020-10-15T21:44:53.244Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/@@species": { - "modified": "2020-10-15T21:44:51.787Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/@@split": { - "modified": "2020-11-24T13:07:02.632Z", - "contributors": [ - "jeremymouzin", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/compile": { - "modified": "2020-10-15T21:32:56.057Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/dotAll": { - "modified": "2020-10-15T22:14:46.695Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/exec": { - "modified": "2020-10-15T21:14:40.464Z", - "contributors": [ - "SphinxKnight", - "Automatik", - "teoli", - "Jeremie", - "time132" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/flags": { - "modified": "2020-10-15T21:32:21.191Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/global": { - "modified": "2020-10-15T21:30:44.320Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/ignoreCase": { - "modified": "2020-10-15T21:30:50.130Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/input": { - "modified": "2020-10-15T21:32:55.947Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/lastIndex": { - "modified": "2020-10-15T21:30:40.335Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/lastMatch": { - "modified": "2020-10-15T21:32:55.640Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/lastParen": { - "modified": "2020-10-15T21:32:56.131Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/leftContext": { - "modified": "2020-10-15T21:32:55.797Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/multiline": { - "modified": "2020-10-15T21:30:51.204Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/n": { - "modified": "2020-10-15T21:32:55.961Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/prototype": { - "modified": "2020-10-15T21:30:50.602Z", - "contributors": [ - "SphinxKnight", - "regseb" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/rightContext": { - "modified": "2020-10-15T21:32:57.561Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/source": { - "modified": "2020-10-15T21:30:45.355Z", - "contributors": [ - "SphinxKnight", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/sticky": { - "modified": "2020-10-15T21:30:47.620Z", - "contributors": [ - "SphinxKnight", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/test": { - "modified": "2020-10-31T09:02:08.478Z", - "contributors": [ - "Simsimpicpic", - "mathildebuenerd", - "SphinxKnight", - "J.DMB", - "Tolokoban" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/toSource": { - "modified": "2020-10-15T21:30:50.470Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/toString": { - "modified": "2020-10-15T21:30:46.894Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/RegExp/unicode": { - "modified": "2020-10-15T21:32:57.125Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set": { - "modified": "2020-10-15T21:31:01.191Z", - "contributors": [ - "SphinxKnight", - "SpaVec", - "daformat", - "quentin-sommer", - "vava" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/@@iterator": { - "modified": "2020-10-15T21:32:31.570Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/@@species": { - "modified": "2020-10-15T21:36:31.934Z", - "contributors": [ - "SphinxKnight", - "afidosstar" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/add": { - "modified": "2020-10-15T21:30:47.600Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/clear": { - "modified": "2020-10-15T21:30:47.286Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/delete": { - "modified": "2020-10-15T21:30:45.003Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/entries": { - "modified": "2020-10-15T21:30:46.292Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/forEach": { - "modified": "2020-10-15T21:30:55.712Z", - "contributors": [ - "SphinxKnight", - "olange" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/has": { - "modified": "2020-10-15T21:30:46.596Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/prototype": { - "modified": "2020-10-15T21:30:53.915Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/size": { - "modified": "2020-10-15T21:30:48.070Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Set/values": { - "modified": "2020-10-15T21:30:53.905Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer": { - "modified": "2020-10-15T21:43:05.674Z", - "contributors": [ - "SphinxKnight", - "Peyphour" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/byteLength": { - "modified": "2020-10-15T21:43:03.666Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/prototype": { - "modified": "2020-10-15T21:43:01.477Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/slice": { - "modified": "2020-10-15T21:51:29.666Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String": { - "modified": "2020-10-15T21:09:29.467Z", - "contributors": [ - "SphinxKnight", - "Brack0", - "grandoc", - "LCaba49", - "gabrielvv", - "tregagnon", - "teoli", - "fscholz", - "daniel35310", - "rat" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/@@iterator": { - "modified": "2020-10-15T21:32:22.889Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/anchor": { - "modified": "2020-10-15T21:30:31.793Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/big": { - "modified": "2020-10-15T21:30:35.733Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/blink": { - "modified": "2020-10-15T21:30:36.287Z", - "contributors": [ - "SphinxKnight", - "Goofy", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/bold": { - "modified": "2020-10-15T21:30:34.170Z", - "contributors": [ - "SphinxKnight", - "desjardins", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/charAt": { - "modified": "2020-10-15T21:29:46.896Z", - "contributors": [ - "SphinxKnight", - "josef" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/charCodeAt": { - "modified": "2020-12-03T13:23:16.661Z", - "contributors": [ - "jbdemonte", - "SphinxKnight", - "Halkeand", - "v-Stein", - "Yves_ASTIER" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/codePointAt": { - "modified": "2020-10-15T21:30:53.830Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/concat": { - "modified": "2020-10-27T06:08:24.110Z", - "contributors": [ - "jeremymouzin", - "javascriptdezero", - "SphinxKnight", - "JNa0", - "tregagnon", - "ylerjen" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/endsWith": { - "modified": "2020-10-15T21:30:33.041Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/fixed": { - "modified": "2020-10-15T21:31:00.424Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/fontcolor": { - "modified": "2020-10-15T21:30:53.820Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/fontsize": { - "modified": "2020-10-15T21:31:01.443Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/fromCharCode": { - "modified": "2020-10-15T21:30:44.032Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/fromCodePoint": { - "modified": "2020-10-15T21:31:00.482Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/includes": { - "modified": "2020-10-15T21:29:49.177Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "P45QU10U", - "tregagnon", - "ylerjen" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/indexOf": { - "modified": "2020-10-15T21:21:09.665Z", - "contributors": [ - "Steph", - "SphinxKnight", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/italics": { - "modified": "2020-10-15T21:31:01.549Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/lastIndexOf": { - "modified": "2020-10-30T07:15:23.208Z", - "contributors": [ - "jeremymouzin", - "SphinxKnight", - "Gabriel8819", - "teoli", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/length": { - "modified": "2020-10-15T21:27:40.975Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "ylerjen", - "teoli", - "Goofy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/link": { - "modified": "2020-10-15T21:30:59.830Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/localeCompare": { - "modified": "2020-10-15T21:30:54.922Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/match": { - "modified": "2020-10-15T21:11:26.007Z", - "contributors": [ - "SphinxKnight", - "MathieuDerelle", - "babolivier", - "teoli", - "Jeremie", - "Yannickcr", - "Julien.stuby" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/matchAll": { - "modified": "2020-10-15T22:15:52.865Z", - "contributors": [ - "javascriptdezero", - "SphinxKnight", - "nkokla" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/normalize": { - "modified": "2020-10-15T21:30:50.829Z", - "contributors": [ - "SphinxKnight", - "chraiet", - "darul75" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/padEnd": { - "modified": "2020-10-15T21:44:49.558Z", - "contributors": [ - "SphinxKnight", - "javascriptdezero" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/padStart": { - "modified": "2020-10-15T21:44:49.740Z", - "contributors": [ - "SphinxKnight", - "javascriptdezero", - "Tikoati", - "demougin2u" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/prototype": { - "modified": "2020-10-15T21:14:12.465Z", - "contributors": [ - "SphinxKnight", - "ylerjen", - "Pihemde", - "teoli", - "Jeremie", - "fscholz", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/raw": { - "modified": "2020-10-15T21:31:01.889Z", - "contributors": [ - "edspeedy", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/repeat": { - "modified": "2020-10-15T21:30:33.221Z", - "contributors": [ - "SphinxKnight", - "ea1000", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/replace": { - "modified": "2020-10-15T21:26:51.883Z", - "contributors": [ - "tristantheb", - "SphinxKnight", - "nkokla", - "lpoujade", - "NemoNobobyPersonne", - "MathieuDerelle", - "callmemagnus", - "lbesson", - "davidbourguignon", - "Grahack", - "tregagnon", - "virg", - "teoli", - "XenonDeele" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/replaceAll": { - "modified": "2020-12-02T07:08:18.366Z", - "contributors": [ - "jeremymouzin", - "FlorianCassayre", - "jolan4589" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/search": { - "modified": "2020-10-15T21:30:33.106Z", - "contributors": [ - "SphinxKnight", - "MathieuDerelle", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/slice": { - "modified": "2020-10-15T21:30:33.271Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "Goofy", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/small": { - "modified": "2020-10-15T21:30:54.174Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/split": { - "modified": "2020-12-06T08:42:17.058Z", - "contributors": [ - "cdoublev", - "SphinxKnight", - "lockee14", - "matthieukern", - "mleduque", - "AlainRinder", - "teoli", - "P45QU10U" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/startsWith": { - "modified": "2020-10-15T21:30:32.482Z", - "contributors": [ - "SphinxKnight", - "cold sun", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/strike": { - "modified": "2020-10-15T21:31:02.610Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/sub": { - "modified": "2020-10-15T21:30:43.014Z", - "contributors": [ - "SphinxKnight", - "scaillerie" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/substr": { - "modified": "2020-10-15T21:14:46.254Z", - "contributors": [ - "SphinxKnight", - "NemoNobobyPersonne", - "teoli", - "Jeremie", - "Julien.stuby" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/substring": { - "modified": "2020-10-15T21:30:05.833Z", - "contributors": [ - "SphinxKnight", - "GMOUDOND", - "tregagnon", - "ylerjen" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/sup": { - "modified": "2020-10-15T21:30:41.357Z", - "contributors": [ - "SphinxKnight", - "scaillerie" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/toLocaleLowerCase": { - "modified": "2020-10-15T21:30:50.733Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/toLocaleUpperCase": { - "modified": "2020-10-15T21:30:54.093Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/toLowerCase": { - "modified": "2020-10-15T21:27:42.074Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "teoli", - "ilaborie" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/toSource": { - "modified": "2020-10-15T21:31:02.897Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/toString": { - "modified": "2020-10-15T21:30:34.655Z", - "contributors": [ - "SphinxKnight", - "a-mt", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/toUpperCase": { - "modified": "2020-10-15T21:28:31.678Z", - "contributors": [ - "SphinxKnight", - "tregagnon", - "fscholz", - "jrenouard" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/trim": { - "modified": "2020-10-15T21:24:45.220Z", - "contributors": [ - "SphinxKnight", - "teoli", - "yeraz", - "customcommander", - "ferncoder", - "Goofy", - "sylvain_floury" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/trimEnd": { - "modified": "2020-10-15T21:30:56.114Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/trimStart": { - "modified": "2020-10-15T21:31:00.551Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/String/valueOf": { - "modified": "2020-10-15T21:30:32.562Z", - "contributors": [ - "SphinxKnight", - "tregagnon" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol": { - "modified": "2020-10-15T21:29:09.934Z", - "contributors": [ - "edspeedy", - "Oursin", - "SphinxKnight", - "fscholz", - "mo0z", - "kdex" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/@@toPrimitive": { - "modified": "2020-10-15T21:39:19.910Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/asyncIterator": { - "modified": "2020-10-15T22:15:01.539Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/description": { - "modified": "2020-10-15T22:09:50.256Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/for": { - "modified": "2020-10-15T21:29:09.806Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/hasInstance": { - "modified": "2020-10-15T21:47:20.267Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/isConcatSpreadable": { - "modified": "2020-10-15T21:45:47.711Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/iterator": { - "modified": "2020-10-15T21:34:15.916Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/keyFor": { - "modified": "2020-10-15T21:29:09.872Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/match": { - "modified": "2020-10-15T21:34:18.720Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/matchAll": { - "modified": "2020-10-15T22:17:43.902Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/prototype": { - "modified": "2020-10-15T21:29:11.196Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/replace": { - "modified": "2020-10-15T21:44:55.824Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/search": { - "modified": "2020-10-15T21:44:55.602Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/species": { - "modified": "2020-10-15T21:36:33.119Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/split": { - "modified": "2020-10-15T21:44:56.230Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/toPrimitive": { - "modified": "2020-10-15T21:39:22.081Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/toSource": { - "modified": "2020-10-15T21:29:09.350Z", - "contributors": [ - "SphinxKnight", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/toString": { - "modified": "2020-10-15T21:29:09.566Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/toStringTag": { - "modified": "2020-10-15T21:49:44.540Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/unscopables": { - "modified": "2020-10-15T21:44:45.309Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Symbol/valueOf": { - "modified": "2020-10-15T21:29:10.554Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/SyntaxError": { - "modified": "2020-10-15T21:11:19.086Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Delapouite", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/SyntaxError/prototype": { - "modified": "2020-10-15T21:11:18.913Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypeError": { - "modified": "2020-10-15T21:26:09.521Z", - "contributors": [ - "SphinxKnight", - "teoli", - "ylerjen" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypeError/prototype": { - "modified": "2020-10-15T21:30:50.829Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray": { - "modified": "2020-10-15T21:31:18.925Z", - "contributors": [ - "SphinxKnight", - "petitcoeur" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/@@iterator": { - "modified": "2020-10-15T21:32:05.207Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/@@species": { - "modified": "2020-10-15T21:44:51.861Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/BYTES_PER_ELEMENT": { - "modified": "2020-10-15T21:31:12.170Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/buffer": { - "modified": "2020-10-15T21:31:15.412Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/byteLength": { - "modified": "2020-10-15T21:31:13.833Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/byteOffset": { - "modified": "2020-10-15T21:31:16.158Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/copyWithin": { - "modified": "2020-10-15T21:31:16.765Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/entries": { - "modified": "2020-10-15T21:32:02.431Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/every": { - "modified": "2020-10-15T21:32:07.464Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/fill": { - "modified": "2020-10-15T21:32:03.890Z", - "contributors": [ - "SphinxKnight", - "Yukulele." - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/filter": { - "modified": "2020-10-15T21:33:31.610Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/find": { - "modified": "2020-10-15T21:32:05.828Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/findIndex": { - "modified": "2020-10-15T21:32:03.803Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/forEach": { - "modified": "2020-10-15T21:32:38.147Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/from": { - "modified": "2020-10-15T21:32:21.675Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/includes": { - "modified": "2020-10-15T21:32:05.187Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/indexOf": { - "modified": "2020-10-15T21:32:07.987Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/join": { - "modified": "2020-10-15T21:32:01.873Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/keys": { - "modified": "2020-10-15T21:32:05.619Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/lastIndexOf": { - "modified": "2020-10-15T21:32:06.704Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/length": { - "modified": "2020-10-15T21:31:14.753Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/map": { - "modified": "2020-10-15T21:33:32.057Z", - "contributors": [ - "FloppyJunior", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/name": { - "modified": "2020-10-15T21:31:15.709Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/of": { - "modified": "2020-10-15T21:32:16.877Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/prototype": { - "modified": "2020-10-15T21:31:18.776Z", - "contributors": [ - "SphinxKnight", - "cdr" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/reduce": { - "modified": "2020-10-15T21:32:06.374Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/reduceRight": { - "modified": "2020-10-15T21:32:05.774Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/reverse": { - "modified": "2020-10-15T21:32:05.214Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/set": { - "modified": "2020-10-15T21:31:14.730Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/slice": { - "modified": "2020-10-15T21:33:33.653Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/some": { - "modified": "2020-10-15T21:32:05.983Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/sort": { - "modified": "2020-10-15T21:42:29.526Z", - "contributors": [ - "SphinxKnight", - "Yomguithereal" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/subarray": { - "modified": "2020-10-15T21:31:15.849Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/toLocaleString": { - "modified": "2020-10-15T21:49:44.979Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/toString": { - "modified": "2020-10-15T21:49:44.009Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/TypedArray/values": { - "modified": "2020-10-15T21:32:08.869Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/URIError": { - "modified": "2020-10-15T21:31:09.986Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/URIError/prototype": { - "modified": "2020-10-15T21:31:09.956Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Uint16Array": { - "modified": "2020-10-15T21:31:18.975Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Uint32Array": { - "modified": "2020-10-15T21:31:18.901Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Uint8Array": { - "modified": "2020-10-15T21:31:19.942Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/Uint8ClampedArray": { - "modified": "2020-10-15T21:31:19.160Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakMap": { - "modified": "2020-10-15T21:30:53.509Z", - "contributors": [ - "SphinxKnight", - "316k", - "Spotinux" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakMap/clear": { - "modified": "2020-10-15T21:30:46.863Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakMap/delete": { - "modified": "2020-10-15T21:31:00.196Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakMap/get": { - "modified": "2020-10-15T21:31:00.520Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakMap/has": { - "modified": "2020-10-15T21:30:54.325Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakMap/prototype": { - "modified": "2020-10-15T21:30:49.753Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakMap/set": { - "modified": "2020-10-15T21:30:51.262Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakSet": { - "modified": "2020-10-15T21:31:01.850Z", - "contributors": [ - "SphinxKnight", - "edspeedy" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakSet/add": { - "modified": "2020-10-15T21:31:00.397Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakSet/clear": { - "modified": "2020-10-15T21:30:59.712Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakSet/delete": { - "modified": "2020-10-15T21:31:01.743Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakSet/has": { - "modified": "2020-10-15T21:31:01.138Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WeakSet/prototype": { - "modified": "2020-10-15T21:31:01.804Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly": { - "modified": "2020-10-15T21:51:49.502Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/CompileError": { - "modified": "2020-10-15T21:52:19.327Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Global": { - "modified": "2020-10-15T22:09:51.143Z", - "contributors": [ - "Voulto", - "fscholz", - "SphinxKnight", - "sideshowbarker" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Global/prototype": { - "modified": "2020-10-15T22:09:50.879Z", - "contributors": [ - "fscholz", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance": { - "modified": "2020-10-15T21:52:19.575Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/exports": { - "modified": "2020-10-15T21:52:20.506Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/prototype": { - "modified": "2020-10-15T21:52:20.376Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/LinkError": { - "modified": "2020-10-15T21:52:20.645Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory": { - "modified": "2020-10-15T21:52:20.618Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory/buffer": { - "modified": "2020-10-15T21:52:20.680Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory/grow": { - "modified": "2020-10-15T21:52:20.328Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory/prototype": { - "modified": "2020-10-15T21:52:20.707Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module": { - "modified": "2020-10-15T21:51:45.857Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/customSections": { - "modified": "2020-10-15T21:52:20.338Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/exports": { - "modified": "2020-10-15T21:52:21.568Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/imports": { - "modified": "2020-10-15T21:52:21.616Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/prototype": { - "modified": "2020-10-15T21:52:24.010Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/RuntimeError": { - "modified": "2020-10-15T21:52:23.811Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table": { - "modified": "2020-10-15T21:52:22.381Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/get": { - "modified": "2020-10-15T21:52:23.456Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/grow": { - "modified": "2020-10-15T21:52:21.173Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/length": { - "modified": "2020-10-15T21:52:22.116Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/prototype": { - "modified": "2020-10-15T21:52:21.568Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/set": { - "modified": "2020-10-15T21:52:22.914Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/compile": { - "modified": "2020-10-15T21:52:23.421Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/compileStreaming": { - "modified": "2020-10-15T21:58:30.533Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/instantiate": { - "modified": "2020-10-15T21:52:23.620Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/instantiateStreaming": { - "modified": "2020-10-15T21:58:30.104Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/WebAssembly/validate": { - "modified": "2020-10-15T21:52:22.760Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/decodeURI": { - "modified": "2020-10-15T21:11:18.823Z", - "contributors": [ - "SphinxKnight", - "alepee", - "teoli", - "Jeremie", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/decodeURIComponent": { - "modified": "2020-10-15T21:11:20.323Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/encodeURI": { - "modified": "2020-10-15T21:11:19.121Z", - "contributors": [ - "SphinxKnight", - "Hartesic", - "arnaud.wixiweb", - "LorisG", - "teoli", - "Jeremie", - "Delapouite", - "matteodelabre" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/encodeURIComponent": { - "modified": "2020-10-15T21:17:24.673Z", - "contributors": [ - "SphinxKnight", - "tdraier", - "fscholz", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/escape": { - "modified": "2020-10-15T21:31:15.173Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/eval": { - "modified": "2020-10-15T21:13:54.788Z", - "contributors": [ - "tristantheb", - "yohannroussel", - "SphinxKnight", - "kiux", - "teoli", - "Jeremie", - "Tiller", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/globalThis": { - "modified": "2020-10-15T22:14:26.077Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/isFinite": { - "modified": "2020-10-15T21:16:54.332Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/isNaN": { - "modified": "2020-10-15T21:14:14.296Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "teoli", - "Jeremie", - "Piopier", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/null": { - "modified": "2020-10-15T21:27:56.698Z", - "contributors": [ - "SphinxKnight", - "benjamin-chevillon", - "teoli" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/parseFloat": { - "modified": "2020-10-15T21:16:59.325Z", - "contributors": [ - "SphinxKnight", - "VictorLequin", - "ben-barbier", - "forresst", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/parseInt": { - "modified": "2020-10-15T21:16:53.832Z", - "contributors": [ - "SphinxKnight", - "julienc", - "nop", - "Iwazaru", - "darul75", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/undefined": { - "modified": "2020-10-15T21:18:05.602Z", - "contributors": [ - "SphinxKnight", - "begmans", - "tregagnon", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/unescape": { - "modified": "2020-10-15T21:31:14.074Z", - "contributors": [ - "SphinxKnight", - "ea1000" - ] - }, - "Web/JavaScript/Reference/Objets_globaux/uneval": { - "modified": "2020-10-15T21:31:15.431Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Opérateurs": { - "modified": "2020-10-15T21:08:27.970Z", - "contributors": [ - "SphinxKnight", - "yasakura_", - "BuonOmo", - "BenoitL", - "teoli", - "Goofy", - "dwogsi", - "Mortys" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Addition": { - "modified": "2020-10-15T22:32:56.339Z", - "contributors": [ - "Voulto", - "ktherage" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Addition_avec_assignement": { - "modified": "2020-11-25T15:41:30.595Z", - "contributors": [ - "Wixonic" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Affecter_par_décomposition": { - "modified": "2020-10-15T21:28:13.934Z", - "contributors": [ - "Voltariuss", - "AntoineJT", - "mathildebuenerd", - "SphinxKnight", - "flawyte", - "db0sch", - "YugzLess", - "jMoulis", - "nicolas-zozol", - "blackfox", - "cdr" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Assignement": { - "modified": "2020-11-25T16:20:19.574Z", - "contributors": [ - "Wixonic" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Groupement": { - "modified": "2020-10-15T21:27:45.620Z", - "contributors": [ - "SphinxKnight", - "thomasgodart", - "teoli" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Initialisateur_objet": { - "modified": "2020-10-15T21:30:44.875Z", - "contributors": [ - "SphinxKnight", - "Johann-S", - "techerjeansebastienpro", - "Alain20100" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_conditionnel": { - "modified": "2020-10-15T21:18:09.974Z", - "contributors": [ - "SphinxKnight", - "emmanuelgautier", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_delete": { - "modified": "2020-10-15T21:12:05.788Z", - "contributors": [ - "Protectator", - "SphinxKnight", - "Mahabarata", - "edspeedy", - "yasakura_", - "teoli", - "Jeremie", - "gregoiredavid", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_function": { - "modified": "2020-10-15T21:16:53.494Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_in": { - "modified": "2020-10-15T21:18:03.771Z", - "contributors": [ - "SphinxKnight", - "darksabrefr", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_new": { - "modified": "2020-10-15T21:15:46.170Z", - "contributors": [ - "SphinxKnight", - "Samath24", - "kocliko", - "teoli", - "Jeremie", - "Mgjbot", - "Gorrk", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_this": { - "modified": "2020-10-15T21:27:58.257Z", - "contributors": [ - "naro-VIII", - "SphinxKnight", - "mbrehin", - "Goofy", - "valla", - "davidbourguignon", - "enguerran", - "teoli" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_typeof": { - "modified": "2020-10-15T21:16:53.262Z", - "contributors": [ - "javascriptdezero", - "SphinxKnight", - "jsx", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_virgule": { - "modified": "2020-10-15T21:16:32.035Z", - "contributors": [ - "SphinxKnight", - "Treyone", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/L_opérateur_void": { - "modified": "2020-10-15T21:16:56.249Z", - "contributors": [ - "SphinxKnight", - "svvac", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Nullish_coalescing_operator": { - "modified": "2020-11-11T08:53:19.207Z", - "contributors": [ - "JNa0", - "SphinxKnight", - "nkokla" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Optional_chaining": { - "modified": "2020-11-11T08:53:02.571Z", - "contributors": [ - "JNa0", - "nkokla", - "joellord", - "forresst", - "necraidan", - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Opérateurs_arithmétiques": { - "modified": "2020-10-15T21:17:24.593Z", - "contributors": [ - "Valentin", - "SphinxKnight", - "PhilippePerret", - "alexisdelee", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Opérateurs_binaires": { - "modified": "2020-10-15T21:18:05.662Z", - "contributors": [ - "SphinxKnight", - "pastr", - "mizhac", - "id-ismail", - "Sroucheray", - "bsitruk", - "thePivottt", - "titouandk", - "teoli", - "Jeremie", - "Kyodev", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Opérateurs_d_affectation": { - "modified": "2020-10-15T21:18:11.144Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "Anquez", - "Behrouze", - "Goofy", - "teoli", - "Jeremie", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Opérateurs_de_chaînes": { - "modified": "2019-03-23T23:48:45.315Z", - "contributors": [ - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Opérateurs_de_comparaison": { - "modified": "2020-10-15T21:18:03.910Z", - "contributors": [ - "Watilin", - "SphinxKnight", - "pierreferry", - "lionel-kahan", - "teoli", - "Jeremie", - "Kyodev", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Opérateurs_de_membres": { - "modified": "2020-10-15T21:16:58.418Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "teoli", - "Jeremie", - "Mgjbot", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Opérateurs_logiques": { - "modified": "2020-10-15T21:17:22.011Z", - "contributors": [ - "SphinxKnight", - "Darkilen", - "teoli", - "Jeremie", - "Mgjbot", - "Kyodev", - "BenoitL" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Précédence_des_opérateurs": { - "modified": "2020-03-12T19:38:23.841Z", - "contributors": [ - "SphinxKnight", - "edspeedy", - "vaidd4", - "kylekatarnls", - "teoli", - "Blackhole" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Syntaxe_décomposition": { - "modified": "2020-11-27T12:19:15.200Z", - "contributors": [ - "jmpp", - "mathildebuenerd", - "SphinxKnight", - "edspeedy" - ] - }, - "Web/JavaScript/Reference/Opérateurs/Tube": { - "modified": "2020-10-15T21:59:06.221Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Opérateurs/async_function": { - "modified": "2020-10-15T21:50:21.927Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Opérateurs/await": { - "modified": "2020-10-15T21:50:26.961Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Opérateurs/class": { - "modified": "2020-10-15T21:33:48.722Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Opérateurs/function*": { - "modified": "2020-10-15T21:31:58.380Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Opérateurs/instanceof": { - "modified": "2020-10-15T21:22:06.497Z", - "contributors": [ - "rjab.ghassen", - "musixone", - "SphinxKnight", - "teoli", - "a5er", - "Automatik", - "Slagt" - ] - }, - "Web/JavaScript/Reference/Opérateurs/new.target": { - "modified": "2020-10-15T21:37:39.321Z", - "contributors": [ - "SphinxKnight", - "blackfox" - ] - }, - "Web/JavaScript/Reference/Opérateurs/super": { - "modified": "2020-10-15T21:33:56.214Z", - "contributors": [ - "SphinxKnight", - "Optarion", - "jcalixte" - ] - }, - "Web/JavaScript/Reference/Opérateurs/yield": { - "modified": "2020-10-15T21:29:38.167Z", - "contributors": [ - "WilliamDASILVA", - "SphinxKnight", - "germinolegrand", - "NemoNobobyPersonne", - "lqpinoo", - "necraidan", - "Justkant" - ] - }, - "Web/JavaScript/Reference/Opérateurs/yield*": { - "modified": "2020-10-15T21:32:04.935Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Reference/Strict_mode": { - "modified": "2020-03-12T19:38:43.336Z", - "contributors": [ - "SphinxKnight", - "pastr", - "Nothus", - "Laurent_Lyaudet", - "kdex", - "boessel", - "Bpruneau", - "WSH", - "krazygit", - "onra87", - "fscholz", - "teoli", - "jessmania", - "Automatik", - "Munto" - ] - }, - "Web/JavaScript/Reference/Strict_mode/Passer_au_mode_strict": { - "modified": "2020-03-12T19:39:22.597Z", - "contributors": [ - "SphinxKnight", - "Laurent_Lyaudet", - "Bpruneau", - "fscholz" - ] - }, - "Web/JavaScript/Reference/Virgules_finales": { - "modified": "2020-10-15T21:51:41.115Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/JavaScript/Shells": { - "modified": "2020-03-12T19:35:39.467Z", - "contributors": [ - "SphinxKnight", - "teoli", - "Goofy", - "wakka27", - "ziyunfei", - "julienw" - ] - }, - "Web/JavaScript/Structures_de_données": { - "modified": "2020-07-03T14:40:14.994Z", - "contributors": [ - "GDFtj", - "jpcote", - "SphinxKnight", - "Titome", - "michelc", - "BEHOUBA", - "Palisanka", - "Havano", - "tym", - "Fredchat", - "teoli", - "ferncoder", - "bfn" - ] - }, - "Web/JavaScript/Tableaux_typés": { - "modified": "2020-10-15T21:27:32.382Z", - "contributors": [ - "SphinxKnight", - "rockshappy", - "rouflak", - "teoli" - ] - }, - "Web/JavaScript/Une_réintroduction_à_JavaScript": { - "modified": "2020-07-28T02:45:40.027Z", - "contributors": [ - "Gcob", - "SphinxKnight", - "takman1", - "yoanmalie", - "pimpin", - "elWombator", - "mbrehin", - "ecolinet", - "arthurlacoste", - "Goofy", - "kdex", - "TheoDardel", - "kai23", - "teoli", - "tregagnon", - "Laurent_Lyaudet", - "palmsnipe", - "XiBe", - "Sheppy", - "quentinbdx", - "JackPotte", - "Boa", - "Mgjbot", - "Ame Nomade", - "El riiico", - "BenoitL", - "Fredchat" - ] - }, - "Web/JavaScript/guide_de_demarrage": { - "modified": "2019-03-23T23:12:53.783Z", - "contributors": [ - "SphinxKnight", - "316k", - "laurentChin" - ] - }, - "Web/Manifest": { - "modified": "2020-07-07T17:00:42.988Z", - "contributors": [ - "yannbertrand", - "chrisspb", - "Goofy", - "mlcdf", - "loella16", - "Luwangel", - "JeffD" - ] - }, - "Web/Manifest/theme_color": { - "modified": "2020-10-15T22:26:29.306Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/MathML": { - "modified": "2020-11-16T12:48:00.196Z", - "contributors": [ - "JNa0", - "fred.wang", - "SphinxKnight" - ] - }, - "Web/MathML/Attribute": { - "modified": "2020-11-16T12:58:45.165Z", - "contributors": [ - "JNa0", - "Fredchat", - "Delapouite", - "SphinxKnight" - ] - }, - "Web/MathML/Attribute/Valeurs": { - "modified": "2019-03-23T22:41:04.847Z", - "contributors": [ - "xdelatour" - ] - }, - "Web/MathML/Authoring": { - "modified": "2020-11-16T13:43:13.167Z", - "contributors": [ - "JNa0", - "florimond.alemps", - "fred.wang", - "Goofy" - ] - }, - "Web/MathML/Element": { - "modified": "2020-11-16T13:26:48.036Z", - "contributors": [ - "JNa0", - "tregagnon", - "SphinxKnight" - ] - }, - "Web/MathML/Element/maction": { - "modified": "2019-03-23T23:29:11.950Z", - "contributors": [ - "SphinxKnight" - ] - }, - "Web/MathML/Element/math": { - "modified": "2020-10-15T21:24:02.886Z", - "contributors": [ - "tristantheb", - "tregagnon", - "SphinxKnight" - ] - }, - "Web/MathML/Element/menclose": { - "modified": "2019-03-23T23:28:57.107Z", - "contributors": [ - "fred.wang", - "Delapouite", - "SphinxKnight" - ] - }, - "Web/MathML/Element/merror": { - "modified": "2019-03-23T23:29:00.856Z", - "contributors": [ - "Delapouite", - "SphinxKnight" - ] - }, - "Web/MathML/Element/mfenced": { - "modified": "2020-10-15T21:23:45.763Z", - "contributors": [ - "tristantheb", - "fred.wang", - "Delapouite", - "SphinxKnight" - ] - }, - "Web/MathML/Element/mfrac": { - "modified": "2019-03-23T23:29:03.213Z", - "contributors": [ - "fred.wang", - "Delapouite", - "SphinxKnight" - ] - }, - "Web/MathML/Element/mglyph": { - "modified": "2020-10-15T21:23:58.877Z", - "contributors": [ - "SphinxKnight", - "Delapouite", - "Goofy" - ] - }, - "Web/MathML/Element/mi": { - "modified": "2019-03-23T23:29:00.435Z", - "contributors": [ - "Delapouite", - "SphinxKnight" - ] - }, - "Web/MathML/Element/mover": { - "modified": "2019-03-23T23:20:28.812Z", - "contributors": [ - "Goofy", - "fred.wang" - ] - }, - "Web/MathML/Element/msub": { - "modified": "2020-10-15T22:21:32.420Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/MathML/Element/munder": { - "modified": "2019-03-23T23:20:27.966Z", - "contributors": [ - "fred.wang" - ] - }, - "Web/MathML/Element/munderover": { - "modified": "2020-10-15T21:26:39.645Z", - "contributors": [ - "tristantheb", - "fred.wang" - ] - }, - "Web/MathML/Exemples": { - "modified": "2019-03-23T23:13:37.199Z", - "contributors": [ - "teoli", - "flexy4" - ] - }, - "Web/MathML/Exemples/Dériver_la_Formule_Quadratique": { - "modified": "2019-03-23T22:30:54.520Z", - "contributors": [ - "SphinxKnight", - "Damiaou", - "Vestibule" - ] - }, - "Web/MathML/Exemples/MathML_Theoreme_de_Pythagore": { - "modified": "2020-11-16T13:48:58.713Z", - "contributors": [ - "JNa0", - "Vestibule", - "Powlow" - ] - }, - "Web/MathML/Index": { - "modified": "2019-01-16T22:05:50.107Z", - "contributors": [ - "xdelatour" - ] - }, - "Web/Media": { - "modified": "2019-03-18T21:32:54.694Z", - "contributors": [ - "tonybengue" - ] - }, - "Web/Media/Formats": { - "modified": "2020-02-08T13:22:06.570Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/Media/Formats/Questions_sur_le_soutien": { - "modified": "2020-02-08T13:23:17.232Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/Media/Formats/Types_des_images": { - "modified": "2020-02-10T17:42:22.049Z", - "contributors": [ - "tristantheb" - ] - }, - "Web/Performance": { - "modified": "2019-12-19T10:00:18.648Z", - "contributors": [ - "chrisdavidmills" - ] - }, - "Web/Performance/Budgets_de_performance": { - "modified": "2020-11-10T08:58:27.096Z", - "contributors": [ - "Voulto" - ] - }, - "Web/Performance/How_browsers_work": { - "modified": "2019-12-19T10:00:31.657Z", - "contributors": [ - "chrisdavidmills", - "estelle" - ] - }, - "Web/Progressive_web_apps": { - "modified": "2020-04-26T14:49:45.824Z", - "contributors": [ - "Mozinet", - "hellosct1", - "brandonlazarre", - "chrisdavidmills", - "tonybengue", - "enguerran", - "loella16", - "Hell_Carlito", - "JeffD" - ] - }, - "Web/Progressive_web_apps/Adaptative": { - "modified": "2019-03-18T20:52:18.105Z", - "contributors": [ - "chrisdavidmills", - "Hell_Carlito", - "JeffD" - ] - }, - "Web/Progressive_web_apps/App_structure": { - "modified": "2020-08-05T10:07:41.167Z", - "contributors": [ - "Khylias", - "tdufranne", - "poum" - ] - }, - "Web/Progressive_web_apps/Chargement": { - "modified": "2019-11-10T21:06:38.811Z", - "contributors": [ - "poum" - ] - }, - "Web/Progressive_web_apps/Identifiable": { - "modified": "2019-03-18T20:52:18.657Z", - "contributors": [ - "chrisdavidmills", - "Hell_Carlito", - "JeffD" - ] - }, - "Web/Progressive_web_apps/Independante_du_reseau": { - "modified": "2019-03-18T20:52:17.306Z", - "contributors": [ - "chrisdavidmills", - "Hell_Carlito", - "JeffD", - "Goofy" - ] - }, - "Web/Progressive_web_apps/Installable": { - "modified": "2019-03-18T20:52:18.292Z", - "contributors": [ - "chrisdavidmills", - "Hell_Carlito", - "JeffD" - ] - }, - "Web/Progressive_web_apps/Installable_PWAs": { - "modified": "2020-05-31T18:38:21.807Z", - "contributors": [ - "poum" - ] - }, - "Web/Progressive_web_apps/Introduction": { - "modified": "2019-09-19T07:57:58.235Z", - "contributors": [ - "Kuzcoo" - ] - }, - "Web/Progressive_web_apps/Offline_Service_workers": { - "modified": "2020-11-28T08:40:27.578Z", - "contributors": [ - "mandie33", - "floreengrad", - "kgrandemange", - "Lmzd", - "poum" - ] - }, - "Web/Progressive_web_apps/Partageable": { - "modified": "2019-03-18T20:52:18.465Z", - "contributors": [ - "chrisdavidmills", - "Gibus", - "JeffD" - ] - }, - "Web/Progressive_web_apps/Progressive": { - "modified": "2019-03-18T20:52:17.884Z", - "contributors": [ - "chrisdavidmills", - "Hell_Carlito", - "JeffD" - ] - }, - "Web/Progressive_web_apps/Re-engageable": { - "modified": "2019-03-18T20:52:17.700Z", - "contributors": [ - "chrisdavidmills", - "Hell_Carlito", - "JeffD" - ] - }, - "Web/Progressive_web_apps/Relancer_Via_Notifications_Push": { - "modified": "2020-05-31T18:38:21.859Z", - "contributors": [ - "poum" - ] - }, - "Web/Progressive_web_apps/Securisee": { - "modified": "2019-03-18T20:52:17.484Z", - "contributors": [ - "chrisdavidmills", - "Gibus", - "JeffD" - ] - }, - "Web/Progressive_web_apps/ajouter_a_lecran_daccueil_a2hs": { - "modified": "2019-03-18T20:32:38.719Z", - "contributors": [ - "SphinxKnight", - "brouillon", - "chrisdavidmills", - "LaNamandine" - ] - }, - "Web/Reference": { - "modified": "2020-04-10T02:52:59.247Z", - "contributors": [ - "SphinxKnight", - "ScarabIG", - "smeden-lod", - "tonybengue", - "Nothus", - "mg1", - "PanPan", - "naar" - ] - }, - "Web/Reference/API": { - "modified": "2019-03-23T23:15:29.222Z", - "contributors": [ - "CoulibalyZieSidiki", - "SphinxKnight", - "teoli", - "yvesd", - "Goofy", - "hanyrold" - ] - }, - "Web/SVG": { - "modified": "2020-02-08T12:31:46.566Z", - "contributors": [ - "tristantheb", - "AbdelElMansari", - "Tresmollo", - "unpeudetout", - "marie-ototoi", - "nicodel", - "SphinxKnight", - "teoli", - "Delapouite", - "darnuria", - "Jeremie", - "MsTeshi", - "marc971", - "gemy_c", - "fscholz", - "BenoitL", - "Fredchat", - "Kyodev", - "Duarna", - "Verruckt", - "Chbok", - "Mgjbot", - "Jorolo", - "Anonymous" - ] - }, - "Web/SVG/Application_d_effets_SVG_a_du_contenu_HTML": { - "modified": "2019-03-23T22:34:17.290Z", - "contributors": [ - "vermotr" - ] - }, - "Web/SVG/Attribute": { - "modified": "2019-03-18T20:39:37.299Z", - "contributors": [ - "a-mt", - "Frigory", - "marie-ototoi", - "teoli", - "Delapouite", - "Blackhole", - "ethertank" - ] - }, - "Web/SVG/Attribute/Conditional_Processing": { - "modified": "2020-10-15T22:11:03.231Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/Core": { - "modified": "2020-10-15T22:10:56.108Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/Events": { - "modified": "2020-10-15T22:10:52.662Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/Presentation": { - "modified": "2020-10-15T22:11:15.381Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/Styling": { - "modified": "2020-10-15T22:10:54.819Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/accent-height": { - "modified": "2019-03-23T22:21:03.889Z", - "contributors": [ - "SphinxKnight", - "daimebag" - ] - }, - "Web/SVG/Attribute/clip-path": { - "modified": "2020-10-15T22:11:30.678Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/color": { - "modified": "2020-10-15T22:11:30.261Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/cx": { - "modified": "2019-03-23T23:31:20.118Z", - "contributors": [ - "a-mt", - "teoli", - "Blackhole" - ] - }, - "Web/SVG/Attribute/cy": { - "modified": "2019-03-23T23:31:21.093Z", - "contributors": [ - "a-mt", - "teoli", - "Blackhole" - ] - }, - "Web/SVG/Attribute/d": { - "modified": "2019-07-21T08:22:01.775Z", - "contributors": [ - "JNa0", - "cdoublev", - "AntoineTohan", - "mknx", - "Tolokoban2" - ] - }, - "Web/SVG/Attribute/dx": { - "modified": "2019-03-23T22:03:37.098Z", - "contributors": [ - "a-mt", - "dattaz" - ] - }, - "Web/SVG/Attribute/dy": { - "modified": "2019-03-18T21:22:22.282Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/fill": { - "modified": "2020-10-15T22:11:05.869Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/fill-opacity": { - "modified": "2020-10-15T22:11:05.147Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/fill-rule": { - "modified": "2020-10-15T22:11:05.485Z", - "contributors": [ - "davidwerbrouck", - "a-mt" - ] - }, - "Web/SVG/Attribute/height": { - "modified": "2019-03-23T22:07:31.508Z", - "contributors": [ - "AlexisColin" - ] - }, - "Web/SVG/Attribute/in": { - "modified": "2019-03-18T21:22:14.241Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/mask": { - "modified": "2020-10-15T22:16:06.957Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/SVG/Attribute/points": { - "modified": "2020-02-04T12:32:34.025Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/SVG/Attribute/preserveAspectRatio": { - "modified": "2019-03-18T21:22:57.126Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/seed": { - "modified": "2019-03-23T22:07:14.284Z", - "contributors": [ - "AlexisColin" - ] - }, - "Web/SVG/Attribute/stroke": { - "modified": "2020-10-15T21:56:30.225Z", - "contributors": [ - "a-mt", - "AlexisColin" - ] - }, - "Web/SVG/Attribute/stroke-dasharray": { - "modified": "2020-10-15T21:56:31.583Z", - "contributors": [ - "a-mt", - "AlexisColin" - ] - }, - "Web/SVG/Attribute/stroke-dashoffset": { - "modified": "2020-10-15T22:10:57.575Z", - "contributors": [ - "Nicolapps", - "a-mt" - ] - }, - "Web/SVG/Attribute/stroke-linecap": { - "modified": "2020-10-15T22:11:04.507Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/stroke-linejoin": { - "modified": "2020-10-15T22:11:04.638Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/stroke-miterlimit": { - "modified": "2020-10-15T22:11:03.140Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/stroke-opacity": { - "modified": "2020-10-15T22:11:06.016Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/stroke-width": { - "modified": "2020-10-15T22:11:05.550Z", - "contributors": [ - "AinaBeryl", - "a-mt" - ] - }, - "Web/SVG/Attribute/style": { - "modified": "2020-10-15T22:11:06.053Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Attribute/text-anchor": { - "modified": "2019-03-23T22:32:39.192Z", - "contributors": [ - "PierreGuyot", - "tonybengue", - "CLEm" - ] - }, - "Web/SVG/Attribute/transform": { - "modified": "2019-12-04T16:27:51.754Z", - "contributors": [ - "SphinxKnight", - "Dimitri-web" - ] - }, - "Web/SVG/Attribute/viewBox": { - "modified": "2019-03-23T22:45:10.877Z", - "contributors": [ - "JosephMarinier", - "Frigory", - "Acen1991", - "ylerjen" - ] - }, - "Web/SVG/Attribute/width": { - "modified": "2019-03-23T22:07:27.903Z", - "contributors": [ - "AlexisColin" - ] - }, - "Web/SVG/Attribute/x": { - "modified": "2019-03-23T22:21:00.230Z", - "contributors": [ - "SphinxKnight", - "daimebag" - ] - }, - "Web/SVG/Element": { - "modified": "2020-02-08T11:58:35.321Z", - "contributors": [ - "tristantheb", - "Arzak656", - "Dralyab", - "Sebastianz", - "teoli", - "gemy_c" - ] - }, - "Web/SVG/Element/a": { - "modified": "2020-10-15T21:30:14.070Z", - "contributors": [ - "a-mt", - "sblondon", - "Sebastianz", - "SphinxKnight", - "teoli", - "Barbrousse" - ] - }, - "Web/SVG/Element/altGlyph": { - "modified": "2019-03-18T21:15:56.588Z", - "contributors": [ - "Sebastianz", - "SphinxKnight", - "Barbrousse" - ] - }, - "Web/SVG/Element/altGlyphDef": { - "modified": "2019-03-23T23:04:57.212Z", - "contributors": [ - "Sebastianz", - "SphinxKnight", - "Barbrousse" - ] - }, - "Web/SVG/Element/altGlyphItem": { - "modified": "2019-03-23T23:04:57.962Z", - "contributors": [ - "Sebastianz", - "SphinxKnight", - "Barbrousse" - ] - }, - "Web/SVG/Element/animate": { - "modified": "2020-10-15T21:31:45.459Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "bperel", - "fscholz", - "Barbrousse" - ] - }, - "Web/SVG/Element/animateColor": { - "modified": "2020-10-15T21:31:44.928Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "Barbrousse" - ] - }, - "Web/SVG/Element/animateMotion": { - "modified": "2020-10-15T21:31:47.363Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "Barbrousse" - ] - }, - "Web/SVG/Element/animateTransform": { - "modified": "2020-10-15T21:20:56.345Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "teoli", - "TPXP" - ] - }, - "Web/SVG/Element/circle": { - "modified": "2020-10-15T21:09:33.643Z", - "contributors": [ - "EloD10", - "Sebastianz", - "SphinxKnight", - "teoli", - "tregagnon", - "gemy_c" - ] - }, - "Web/SVG/Element/clipPath": { - "modified": "2020-10-15T22:11:31.108Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/defs": { - "modified": "2019-03-23T22:26:29.285Z", - "contributors": [ - "sansourcil", - "eloi-duwer", - "Sebastianz", - "Nothus" - ] - }, - "Web/SVG/Element/desc": { - "modified": "2020-10-15T21:34:39.299Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "B_M", - "Goofy" - ] - }, - "Web/SVG/Element/ellipse": { - "modified": "2020-09-29T06:35:14.424Z", - "contributors": [ - "cdoublev", - "wbamberg", - "Sebastianz", - "SphinxKnight", - "teoli", - "tregagnon", - "gemy_c" - ] - }, - "Web/SVG/Element/feBlend": { - "modified": "2020-10-15T22:12:16.605Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feColorMatrix": { - "modified": "2020-10-15T22:12:13.564Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feComponentTransfer": { - "modified": "2020-10-15T22:12:14.922Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feComposite": { - "modified": "2020-10-15T22:12:16.930Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feConvolveMatrix": { - "modified": "2020-10-15T22:12:18.458Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feDiffuseLighting": { - "modified": "2020-10-15T22:12:15.916Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feDisplacementMap": { - "modified": "2020-10-15T22:12:17.332Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feDistantLight": { - "modified": "2020-10-15T22:12:08.109Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feDropShadow": { - "modified": "2020-10-15T22:12:12.290Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feFlood": { - "modified": "2020-10-15T22:11:42.213Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feFuncA": { - "modified": "2020-10-15T22:12:15.038Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feFuncB": { - "modified": "2020-10-15T22:12:15.581Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feFuncG": { - "modified": "2020-10-15T22:12:14.655Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feFuncR": { - "modified": "2020-10-15T22:12:16.404Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feGaussianBlur": { - "modified": "2020-10-15T22:12:13.052Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feImage": { - "modified": "2020-10-15T22:11:41.220Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feMerge": { - "modified": "2020-10-15T22:12:14.023Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feMergeNode": { - "modified": "2020-10-15T22:12:13.616Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feMorphology": { - "modified": "2020-10-15T22:12:09.662Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feOffset": { - "modified": "2020-10-15T22:12:04.038Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/fePointLight": { - "modified": "2020-10-15T22:12:16.781Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feSpecularLighting": { - "modified": "2020-10-15T22:12:15.374Z", - "contributors": [ - "AlainGourves", - "a-mt" - ] - }, - "Web/SVG/Element/feSpotLight": { - "modified": "2020-10-15T22:12:13.699Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feTile": { - "modified": "2020-10-15T22:12:06.142Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/feTurbulence": { - "modified": "2020-10-15T22:12:10.250Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/filter": { - "modified": "2020-10-15T22:12:14.867Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/foreignObject": { - "modified": "2020-10-15T21:28:38.917Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "marie-ototoi", - "J.DMB", - "Goofy", - "akira86" - ] - }, - "Web/SVG/Element/g": { - "modified": "2020-10-15T21:30:19.332Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "teoli", - "J.DMB", - "fscholz", - "ylerjen" - ] - }, - "Web/SVG/Element/hkern": { - "modified": "2019-03-23T23:04:56.306Z", - "contributors": [ - "Sebastianz", - "SphinxKnight", - "Barbrousse" - ] - }, - "Web/SVG/Element/image": { - "modified": "2020-11-09T05:16:20.671Z", - "contributors": [ - "Lucas-C", - "Sebastianz", - "SphinxKnight", - "teoli", - "Nicronics", - "Goofy" - ] - }, - "Web/SVG/Element/line": { - "modified": "2019-03-23T23:15:29.052Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "SphinxKnight", - "Fredchat", - "iainm" - ] - }, - "Web/SVG/Element/linearGradient": { - "modified": "2020-10-15T22:11:05.477Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/marker": { - "modified": "2020-10-15T22:11:33.513Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/mask": { - "modified": "2020-10-15T21:45:31.463Z", - "contributors": [ - "a-mt", - "ylerjen", - "Sebastianz", - "SphinxKnight" - ] - }, - "Web/SVG/Element/metadata": { - "modified": "2020-10-15T22:12:14.200Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/mpath": { - "modified": "2020-10-15T22:12:17.500Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/path": { - "modified": "2020-10-15T21:09:41.993Z", - "contributors": [ - "ventilateur.ventilateur", - "Gauths", - "Sebastianz", - "SphinxKnight", - "teoli", - "tregagnon", - "gemy_c" - ] - }, - "Web/SVG/Element/pattern": { - "modified": "2020-11-04T12:50:59.879Z", - "contributors": [ - "cdoublev", - "wbamberg", - "Sebastianz", - "SphinxKnight", - "thomas-huguenin" - ] - }, - "Web/SVG/Element/polygon": { - "modified": "2020-10-15T21:56:31.856Z", - "contributors": [ - "Arzak656", - "AlexisColin" - ] - }, - "Web/SVG/Element/polyline": { - "modified": "2019-03-23T22:39:44.292Z", - "contributors": [ - "SphinxKnight", - "Sebastianz", - "Crocmagnon" - ] - }, - "Web/SVG/Element/radialGradient": { - "modified": "2019-03-23T22:07:50.374Z", - "contributors": [ - "AlexisColin", - "Gauths" - ] - }, - "Web/SVG/Element/rect": { - "modified": "2020-10-15T21:09:37.460Z", - "contributors": [ - "EloD10", - "Sebastianz", - "SphinxKnight", - "Nfroidure", - "teoli", - "tregagnon", - "gemy_c" - ] - }, - "Web/SVG/Element/stop": { - "modified": "2020-10-15T22:17:23.569Z", - "contributors": [ - "cdoublev" - ] - }, - "Web/SVG/Element/style": { - "modified": "2019-03-23T22:40:42.582Z", - "contributors": [ - "Sebastianz", - "teoli", - "GrosMocassin" - ] - }, - "Web/SVG/Element/svg": { - "modified": "2019-03-23T22:23:41.325Z", - "contributors": [ - "ferdi_", - "khalyomede" - ] - }, - "Web/SVG/Element/switch": { - "modified": "2020-10-15T21:28:19.111Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "J.DMB", - "loic" - ] - }, - "Web/SVG/Element/symbol": { - "modified": "2020-10-15T22:12:40.814Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Element/text": { - "modified": "2019-03-23T22:57:14.491Z", - "contributors": [ - "Sebastianz", - "GrandSchtroumpf", - "SphinxKnight", - "ylerjen", - "B_M" - ] - }, - "Web/SVG/Element/title": { - "modified": "2020-10-15T21:34:41.922Z", - "contributors": [ - "a-mt", - "Sebastianz", - "SphinxKnight", - "Goofy", - "B_M" - ] - }, - "Web/SVG/Element/tspan": { - "modified": "2019-03-23T22:28:46.810Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "GrandSchtroumpf" - ] - }, - "Web/SVG/Element/use": { - "modified": "2019-03-23T22:26:29.130Z", - "contributors": [ - "yank7", - "Wismill", - "Nothus" - ] - }, - "Web/SVG/Index": { - "modified": "2019-01-16T21:57:35.980Z", - "contributors": [ - "xdelatour" - ] - }, - "Web/SVG/SVG_animation_with_SMIL": { - "modified": "2019-08-24T09:55:45.297Z", - "contributors": [ - "JNa0", - "a-mt", - "fscholz", - "tonybengue" - ] - }, - "Web/SVG/SVG_en_tant_qu_image": { - "modified": "2019-03-29T09:03:13.544Z", - "contributors": [ - "SphinxKnight", - "a-mt", - "Barbrousse" - ] - }, - "Web/SVG/Sources_compatibilite": { - "modified": "2019-03-23T23:05:05.046Z", - "contributors": [ - "tonybengue", - "B_M", - "Barbrousse" - ] - }, - "Web/SVG/Tutoriel": { - "modified": "2019-03-24T00:14:42.932Z", - "contributors": [ - "a-mt", - "teoli", - "PetiPandaRou", - "Mgjbot", - "Fredchat", - "Duarna" - ] - }, - "Web/SVG/Tutoriel/Contenu_embarque_SVG": { - "modified": "2019-03-23T23:16:11.402Z", - "contributors": [ - "a-mt", - "Jean-MariePETIT" - ] - }, - "Web/SVG/Tutoriel/Découpages_et_masquages": { - "modified": "2019-03-24T00:14:44.808Z", - "contributors": [ - "a-mt", - "parmentf", - "teoli", - "PetiPandaRou" - ] - }, - "Web/SVG/Tutoriel/Fills_and_Strokes": { - "modified": "2019-03-18T21:23:38.637Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Tutoriel/Formes_de_base": { - "modified": "2019-03-23T23:50:51.657Z", - "contributors": [ - "a-mt", - "Watilin", - "parmentf", - "Jean-MariePETIT", - "teoli", - "tregagnon", - "PetiPandaRou" - ] - }, - "Web/SVG/Tutoriel/Gradients": { - "modified": "2019-03-18T21:23:33.431Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Tutoriel/Introduction": { - "modified": "2019-03-24T00:14:10.761Z", - "contributors": [ - "a-mt", - "marecord", - "parmentf", - "teoli", - "PetiPandaRou", - "Fredchat", - "Duarna", - "Mgjbot" - ] - }, - "Web/SVG/Tutoriel/Introduction_à_SVG_dans_HTML": { - "modified": "2019-06-17T09:44:07.955Z", - "contributors": [ - "AlainGourves", - "chrisdavidmills", - "benjaminabel", - "BenoitL", - "Chbok" - ] - }, - "Web/SVG/Tutoriel/Motifs": { - "modified": "2019-03-18T21:17:06.419Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Tutoriel/Paths": { - "modified": "2019-09-10T13:49:14.936Z", - "contributors": [ - "blomki", - "lhapaipai", - "a-mt", - "Watilin" - ] - }, - "Web/SVG/Tutoriel/Positionnement": { - "modified": "2019-03-24T00:14:10.641Z", - "contributors": [ - "LennyObez", - "Jean-MariePETIT", - "teoli", - "PetiPandaRou", - "Goofy" - ] - }, - "Web/SVG/Tutoriel/Premiers_pas": { - "modified": "2019-03-24T00:03:59.091Z", - "contributors": [ - "sayabiws", - "Hell_Carlito", - "SphinxKnight", - "marie-ototoi", - "parmentf", - "benjaminabel", - "teoli", - "PetiPandaRou", - "Goofy", - "AlexisMetaireau", - "mulliezj", - "fscholz", - "Fredchat", - "Duarna", - "Mgjbot" - ] - }, - "Web/SVG/Tutoriel/SVG_Image_Tag": { - "modified": "2019-03-23T22:39:52.558Z", - "contributors": [ - "a-mt", - "jti77", - "MrIglou" - ] - }, - "Web/SVG/Tutoriel/Texts": { - "modified": "2019-03-18T21:23:21.700Z", - "contributors": [ - "a-mt" - ] - }, - "Web/SVG/Tutoriel/Tools_for_SVG": { - "modified": "2019-03-23T22:53:22.704Z", - "contributors": [ - "a-mt", - "Goofy", - "marie-ototoi" - ] - }, - "Web/SVG/Tutoriel/Transformations_de_base": { - "modified": "2019-03-24T00:14:43.788Z", - "contributors": [ - "a-mt", - "loella16", - "bastienmoulia", - "teoli", - "tregagnon", - "PetiPandaRou" - ] - }, - "Web/SVG/Tutoriel/filtres": { - "modified": "2019-04-20T15:46:39.301Z", - "contributors": [ - "tombosoadimitrie", - "a-mt" - ] - }, - "Web/SVG/Tutoriel/polices_SVG": { - "modified": "2019-03-23T22:39:39.513Z", - "contributors": [ - "a-mt", - "jti77", - "enogael", - "Cyril-Levallois" - ] - }, - "Web/Security": { - "modified": "2019-09-10T16:34:32.729Z", - "contributors": [ - "SphinxKnight", - "bldesign.ch", - "CarlosAvim", - "Tom_D", - "goofy_bz", - "marumari" - ] - }, - "Web/Security/Public_Key_Pinning": { - "modified": "2019-03-18T21:11:18.056Z", - "contributors": [ - "totopsy", - "Tom_D", - "Hell_Carlito" - ] - }, - "Web/Security/Referer_header:_privacy_and_security_concerns": { - "modified": "2020-11-02T18:51:04.362Z", - "contributors": [ - "JNa0", - "applicodeur", - "arnaud.wixiweb", - "duduindo", - "Elaxis_" - ] - }, - "Web/Security/Same_origin_policy_for_JavaScript": { - "modified": "2019-10-12T13:42:13.230Z", - "contributors": [ - "GregMorel", - "SphinxKnight", - "Selbahc", - "sblondon", - "rle-mino", - "fabienheureux", - "teoli", - "dwogsi" - ] - }, - "Web/Security/Secure_Contexts": { - "modified": "2019-03-23T22:17:00.806Z", - "contributors": [ - "nobe4" - ] - }, - "Web/Security/Subresource_Integrity": { - "modified": "2019-03-23T22:27:34.272Z", - "contributors": [ - "SphinxKnight", - "nico3333fr" - ] - }, - "Web/Tutoriels": { - "modified": "2020-09-04T03:10:42.961Z", - "contributors": [ - "SphinxKnight", - "ppayet304", - "Maxi-MenuBestOfPlus", - "W1773ND", - "tmpbci", - "xvw", - "rjeannot", - "CarlosAvim", - "CarterMason4", - "marecord", - "JeffD", - "badgohan", - "teoli", - "dayenu", - "Oliviermoz", - "Bat", - "Wlad-Hawaii", - "nelsonkam", - "Antwan_Did", - "PageotD", - "Mutijima", - "hs0ucy", - "Shaker", - "Asaphus", - "tomsihap", - "anthonybt", - "laurent-thuy", - "Info", - "chris.bourdieu", - "AnthonyMaton", - "naar", - "Nesseria" - ] - }, - "Web/Web_Components": { - "modified": "2020-10-09T12:10:17.619Z", - "contributors": [ - "GuillaumeCz", - "jeanremy", - "coldPen", - "Voltariuss", - "ylerjen", - "JNa0", - "wulfy", - "SphinxKnight", - "oritlewski", - "linsolas", - "GtAntoine", - "mknx", - "oussama-jlassi", - "Zecat" - ] - }, - "Web/Web_Components/HTML_Imports": { - "modified": "2020-10-15T22:12:01.555Z", - "contributors": [ - "ledenis", - "ylerjen" - ] - }, - "Web/Web_Components/Using_custom_elements": { - "modified": "2019-03-18T21:38:08.858Z", - "contributors": [ - "NemoNobobyPersonne" - ] - }, - "Web/Web_Components/Using_shadow_DOM": { - "modified": "2020-03-15T20:54:04.062Z", - "contributors": [ - "JNa0" - ] - }, - "Web/Web_Components/Utilisation_des_templates_et_des_slots": { - "modified": "2019-07-27T04:45:38.358Z", - "contributors": [ - "PSthely", - "wiredbug" - ] - }, - "Web/XML": { - "modified": "2020-08-30T07:03:09.579Z", - "contributors": [ - "Voulto", - "tristantheb", - "ExE-Boss" - ] - }, - "Web/XML/Introduction_à_XML": { - "modified": "2019-05-01T21:50:25.192Z", - "contributors": [ - "ExE-Boss", - "Elethiomel", - "Fredchat", - "BenoitL", - "Mgjbot", - "Lbergere" - ] - }, - "Web/XML/xml:base": { - "modified": "2019-05-01T21:49:37.439Z", - "contributors": [ - "ExE-Boss", - "loella16" - ] - }, - "Web/XPath": { - "modified": "2020-06-19T03:44:39.700Z", - "contributors": [ - "Jemmy4s", - "ExE-Boss", - "Fredchat", - "Delapouite", - "fscholz", - "Mgjbot", - "Celelibi", - "Chbok", - "BenoitL" - ] - }, - "Web/XPath/Axes": { - "modified": "2019-03-23T23:54:15.946Z", - "contributors": [ - "ExE-Boss", - "Delapouite", - "Fredchat", - "Mgjbot", - "VincentN" - ] - }, - "Web/XPath/Axes/ancestor": { - "modified": "2019-01-16T16:12:07.983Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/ancestor-or-self": { - "modified": "2019-01-16T16:12:08.969Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/attribute": { - "modified": "2019-01-16T16:11:52.452Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/child": { - "modified": "2019-01-16T16:11:53.728Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/descendant": { - "modified": "2019-01-16T16:11:48.389Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/descendant-or-self": { - "modified": "2019-01-16T16:12:14.349Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/following": { - "modified": "2019-01-16T16:11:54.323Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/following-sibling": { - "modified": "2019-01-16T16:11:48.257Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/namespace": { - "modified": "2019-01-16T16:11:53.220Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/parent": { - "modified": "2019-01-16T16:11:45.464Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/preceding": { - "modified": "2019-01-16T16:11:48.527Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/preceding-sibling": { - "modified": "2019-01-16T16:11:01.463Z", - "contributors": [ - "ExE-Boss", - "Fredchat" - ] - }, - "Web/XPath/Axes/self": { - "modified": "2019-01-16T16:11:01.388Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "Fredchat" - ] - }, - "Web/XPath/Fonctions": { - "modified": "2019-03-23T23:54:16.270Z", - "contributors": [ - "ExE-Boss", - "Fredchat", - "Mgjbot", - "VincentN" - ] - }, - "Web/XPath/Fonctions/boolean": { - "modified": "2019-01-16T15:50:26.737Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/ceiling": { - "modified": "2019-01-16T15:50:21.623Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/concat": { - "modified": "2019-01-16T15:50:21.441Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/contains": { - "modified": "2019-03-23T23:58:27.714Z", - "contributors": [ - "ExE-Boss", - "joseph2rs", - "eleg", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/count": { - "modified": "2019-01-16T15:50:25.794Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/current": { - "modified": "2019-01-16T16:10:44.044Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/document": { - "modified": "2019-01-16T16:10:44.270Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/element-available": { - "modified": "2019-01-16T16:10:46.100Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/false": { - "modified": "2019-01-16T15:50:11.196Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "Laymain", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/floor": { - "modified": "2019-03-23T23:49:20.491Z", - "contributors": [ - "ExE-Boss", - "Fredchat", - "stephaniehobson", - "Mgjbot", - "VincentN" - ] - }, - "Web/XPath/Fonctions/format-number": { - "modified": "2019-01-16T15:28:39.710Z", - "contributors": [ - "ExE-Boss", - "Curieux", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/function-available": { - "modified": "2019-01-16T16:11:01.243Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/generate-id": { - "modified": "2019-01-16T16:11:03.202Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/id": { - "modified": "2019-01-16T15:50:07.997Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/key": { - "modified": "2019-01-16T16:11:09.419Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/lang": { - "modified": "2019-01-16T15:50:16.941Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/last": { - "modified": "2019-01-16T15:50:10.531Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/local-name": { - "modified": "2019-01-16T15:50:02.059Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/name": { - "modified": "2019-01-16T15:50:11.321Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/namespace-uri": { - "modified": "2019-01-16T15:50:06.369Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/normalize-space": { - "modified": "2020-08-05T06:06:47.724Z", - "contributors": [ - "ele-gall-ac-mineducation", - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/not": { - "modified": "2019-01-16T15:50:03.166Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/number": { - "modified": "2019-01-16T15:50:08.363Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/position": { - "modified": "2019-03-18T20:55:34.370Z", - "contributors": [ - "GenjoMoz", - "ExE-Boss", - "Mgjbot", - "Fredchat", - "VincentN" - ] - }, - "Web/XPath/Fonctions/round": { - "modified": "2019-01-16T15:50:06.584Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/starts-with": { - "modified": "2019-01-16T14:54:33.055Z", - "contributors": [ - "ExE-Boss", - "eleg", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/string": { - "modified": "2019-01-16T15:50:09.755Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/string-length": { - "modified": "2019-01-16T15:50:05.325Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/substring": { - "modified": "2019-01-16T15:50:11.468Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/substring-after": { - "modified": "2019-01-16T15:50:03.541Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "BenoitL", - "Fredchat", - "VincentN" - ] - }, - "Web/XPath/Fonctions/substring-before": { - "modified": "2019-01-16T15:50:05.352Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "BenoitL", - "Fredchat", - "VincentN" - ] - }, - "Web/XPath/Fonctions/sum": { - "modified": "2019-01-16T15:50:16.840Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/system-property": { - "modified": "2019-01-16T16:10:22.040Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/translate": { - "modified": "2019-01-16T15:28:29.401Z", - "contributors": [ - "ExE-Boss", - "Curieux", - "Mgjbot", - "ToGGy", - "Fredchat", - "VincentN" - ] - }, - "Web/XPath/Fonctions/true": { - "modified": "2019-01-16T15:50:09.532Z", - "contributors": [ - "ExE-Boss", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Web/XPath/Fonctions/unparsed-entity-url": { - "modified": "2019-01-16T16:10:19.128Z", - "contributors": [ - "ExE-Boss", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT": { - "modified": "2019-03-24T00:02:50.333Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "fscholz", - "Fredchat", - "Verruckt", - "BenoitL", - "Mgjbot", - "Takenbot", - "Chbok" - ] - }, - "Web/XSLT/Element": { - "modified": "2019-03-23T23:45:04.079Z", - "contributors": [ - "ExE-Boss", - "chrisdavidmills", - "Fredchat", - "VincentN" - ] - }, - "Web/XSLT/Element/element": { - "modified": "2019-01-16T16:02:01.198Z", - "contributors": [ - "ExE-Boss", - "chrisdavidmills", - "Fredchat", - "VincentN" - ] - }, - "Web/XSLT/Interface_XSLT_JS_dans_Gecko": { - "modified": "2019-03-23T23:47:47.682Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "Jeremie", - "Mgjbot", - "Kyodev", - "Fredchat" - ] - }, - "Web/XSLT/Interface_XSLT_JS_dans_Gecko/Définition_de_paramètres": { - "modified": "2019-03-23T23:43:55.284Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "Sebastianz", - "Jeremie", - "Fredchat" - ] - }, - "Web/XSLT/Interface_XSLT_JS_dans_Gecko/Exemple_avancé": { - "modified": "2019-03-23T23:43:56.095Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "Sebastianz", - "Jeremie", - "Fredchat" - ] - }, - "Web/XSLT/Interface_XSLT_JS_dans_Gecko/Exemple_basique": { - "modified": "2020-04-03T12:42:05.763Z", - "contributors": [ - "olivierdupon", - "SphinxKnight", - "chrisdavidmills", - "Sebastianz", - "Jeremie", - "Fredchat" - ] - }, - "Web/XSLT/Interface_XSLT_JS_dans_Gecko/Les_liaisons_JavaScript_XSLT": { - "modified": "2019-03-23T23:49:14.126Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "Sebastianz", - "Jeremie", - "Chichille", - "Fredchat" - ] - }, - "Web/XSLT/Interface_XSLT_JS_dans_Gecko/Ressources": { - "modified": "2019-03-23T23:43:56.751Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "chrisdavidmills", - "Sebastianz", - "Jeremie", - "Fredchat" - ] - }, - "Web/XSLT/Paramètres_des_instructions_de_traitement": { - "modified": "2019-03-23T23:44:06.266Z", - "contributors": [ - "chrisdavidmills", - "fscholz", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/Sommaire": { - "modified": "2019-06-17T11:21:18.591Z", - "contributors": [ - "Arzak656" - ] - }, - "Web/XSLT/Transformations_XML_avec_XSLT": { - "modified": "2019-01-16T15:43:09.128Z", - "contributors": [ - "chrisdavidmills", - "Fredchat", - "VincentN" - ] - }, - "Web/XSLT/Transformations_XML_avec_XSLT/Autres_ressources": { - "modified": "2019-03-23T23:51:33.836Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "Fredchat", - "VincentN" - ] - }, - "Web/XSLT/Transformations_XML_avec_XSLT/La_référence_XSLT_XPath_de_Netscape": { - "modified": "2019-01-16T16:11:27.172Z", - "contributors": [ - "chrisdavidmills", - "Fredchat" - ] - }, - "Web/XSLT/Transformations_XML_avec_XSLT/Présentation": { - "modified": "2019-03-23T23:45:10.616Z", - "contributors": [ - "SphinxKnight", - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/Utilisation_de_l'interface_JavaScript_de_Mozilla_pour_les_transformations_XSL": { - "modified": "2019-11-21T00:57:28.537Z", - "contributors": [ - "wbamberg", - "chrisdavidmills", - "teoli", - "Mgjbot", - "BenoitL", - "Fredchat" - ] - }, - "Web/XSLT/apply-imports": { - "modified": "2019-01-16T16:10:20.927Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/apply-templates": { - "modified": "2019-01-16T16:10:22.148Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/attribute": { - "modified": "2019-01-16T16:11:19.258Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/attribute-set": { - "modified": "2019-01-16T16:11:22.221Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/call-template": { - "modified": "2019-01-16T16:10:24.205Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/choose": { - "modified": "2019-01-16T16:11:13.317Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/comment": { - "modified": "2019-01-16T16:11:15.059Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/copy": { - "modified": "2019-01-16T16:11:11.226Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/copy-of": { - "modified": "2019-01-16T16:11:12.711Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/decimal-format": { - "modified": "2019-01-16T16:11:14.248Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/fallback": { - "modified": "2019-01-16T16:10:22.081Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/for-each": { - "modified": "2019-01-16T16:10:14.121Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/if": { - "modified": "2019-03-23T23:44:08.058Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/import": { - "modified": "2019-05-12T02:01:24.974Z", - "contributors": [ - "SphinxKnight", - "T1p0un3t", - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/include": { - "modified": "2019-05-10T04:30:49.369Z", - "contributors": [ - "T1p0un3t", - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/key": { - "modified": "2019-01-16T16:10:13.896Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/message": { - "modified": "2019-01-16T16:10:13.942Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/namespace-alias": { - "modified": "2019-01-16T16:10:13.922Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/number": { - "modified": "2019-03-23T23:44:07.848Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/otherwise": { - "modified": "2019-01-16T16:09:54.989Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/output": { - "modified": "2019-01-16T16:09:52.885Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/param": { - "modified": "2019-01-16T16:09:53.847Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/preserve-space": { - "modified": "2019-01-16T16:10:07.363Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/processing-instruction": { - "modified": "2019-01-16T16:09:56.661Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/sort": { - "modified": "2019-01-16T16:02:11.967Z", - "contributors": [ - "chrisdavidmills", - "Fredchat", - "VincentN" - ] - }, - "Web/XSLT/strip-space": { - "modified": "2019-01-16T16:09:55.845Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/stylesheet": { - "modified": "2019-01-16T16:09:51.775Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/template": { - "modified": "2019-01-16T16:07:47.679Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/text": { - "modified": "2019-03-23T23:44:38.020Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/transform": { - "modified": "2019-01-16T16:11:22.367Z", - "contributors": [ - "chrisdavidmills", - "Fredchat" - ] - }, - "Web/XSLT/value-of": { - "modified": "2019-03-23T23:44:42.898Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/variable": { - "modified": "2019-01-16T16:09:06.502Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/when": { - "modified": "2019-01-16T16:09:01.761Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "Web/XSLT/with-param": { - "modified": "2019-01-16T16:07:34.980Z", - "contributors": [ - "chrisdavidmills", - "VincentN", - "Fredchat" - ] - }, - "WebAPI": { - "modified": "2019-03-23T23:28:30.598Z", - "contributors": [ - "wbamberg", - "fscholz", - "SphinxKnight" - ] - }, - "WebAPI/Detecting_device_orientation": { - "modified": "2019-03-23T23:28:22.437Z", - "contributors": [ - "mgagnon555", - "a-mt", - "tregagnon", - "Fredchat", - "FredB", - "achraf", - "darnuria" - ] - }, - "WebAPI/Network_Information": { - "modified": "2020-10-15T21:24:14.258Z", - "contributors": [ - "Arzak656", - "SphinxKnight" - ] - }, - "WebAPI/Pointer_Lock": { - "modified": "2019-03-23T23:28:21.431Z", - "contributors": [ - "3xr", - "a-mt", - "fscholz", - "polpoy", - "aymericbeaumet", - "nathsou", - "kipcode66", - "Delapouite" - ] - }, - "WebAPI/Proximity": { - "modified": "2019-03-23T23:28:24.540Z", - "contributors": [ - "SphinxKnight" - ] - }, - "WebAPI/Utiliser_les_événéments_de_luminosité": { - "modified": "2019-03-23T23:28:29.463Z", - "contributors": [ - "Goofy", - "SphinxKnight" - ] - }, - "WebAssembly": { - "modified": "2019-03-23T22:14:12.769Z", - "contributors": [ - "sylv1", - "dattaz", - "SphinxKnight" - ] - }, - "WebAssembly/C_to_wasm": { - "modified": "2019-10-28T10:12:05.168Z", - "contributors": [ - "WhiteMoll", - "benerone", - "NerOcrO", - "baviereteam", - "ClementNerma" - ] - }, - "WebAssembly/Concepts": { - "modified": "2020-01-14T03:35:30.904Z", - "contributors": [ - "SphinxKnight", - "lionelquellery", - "NerOcrO", - "mael-jarnole", - "benerone", - "Keuklar", - "Mo-la-machette", - "arthurwhite" - ] - }, - "WebAssembly/Exported_functions": { - "modified": "2019-06-18T16:22:08.093Z", - "contributors": [ - "BenoitDel" - ] - }, - "WebAssembly/Loading_and_running": { - "modified": "2019-06-18T08:32:36.065Z", - "contributors": [ - "BenoitDel" - ] - }, - "WebAssembly/Understanding_the_text_format": { - "modified": "2020-11-08T19:45:23.458Z", - "contributors": [ - "duduindo", - "lassana.drame.avenir", - "SphinxKnight", - "neilbryson", - "afauroux", - "marcpicaud" - ] - }, - "WebAssembly/Using_the_JavaScript_API": { - "modified": "2020-02-29T07:32:23.744Z", - "contributors": [ - "Sibian2019", - "BenoitDel", - "SphinxKnight", - "nvana", - "si0ls", - "dattaz" - ] - }, - "WebRTC": { - "modified": "2019-03-23T23:34:26.249Z", - "contributors": [ - "J.DMB", - "Goofy", - "AbrahamT", - "Hub", - "Blancdememoire" - ] - }, - "WebRTC/Introduction": { - "modified": "2019-03-23T23:34:02.335Z", - "contributors": [ - "mmkmou", - "Hub" - ] - }, - "WebRTC/MediaStream_API": { - "modified": "2020-10-15T21:25:08.658Z", - "contributors": [ - "SphinxKnight", - "GenjoMoz", - "JonathanMM", - "AbrahamT" - ] - }, - "WebRTC/Prendre_des_photos_avec_la_webcam": { - "modified": "2019-03-23T23:34:23.933Z", - "contributors": [ - "teoli", - "yluom", - "peb85", - "Hub" - ] - }, - "WebRTC/communication-de-pair-a-pair-avec-WebRTC": { - "modified": "2019-03-23T23:24:59.049Z", - "contributors": [ - "AbrahamT" - ] - }, - "XHTML": { - "modified": "2019-03-23T23:46:04.645Z", - "contributors": [ - "loella16", - "Mgjbot", - "BenoitL", - "Takenbot", - "Bpruneau" - ] - }, - "XMLSerializer": { - "modified": "2019-03-23T23:46:38.004Z", - "contributors": [ - "Delapouite", - "Mgjbot", - "Fredchat", - "VincentN", - "Chbok" - ] - }, - "XPCOM/Liaisons_de_langage/Objet_Components": { - "modified": "2019-04-18T20:34:34.205Z", - "contributors": [ - "wbamberg", - "jmh" - ] - }, - "XPCOM/Reference/Standard_XPCOM_components": { - "modified": "2019-04-18T20:35:41.986Z", - "contributors": [ - "wbamberg", - "jmh" - ] - }, - "XSLTProcessor": { - "modified": "2019-01-16T16:07:52.523Z", - "contributors": [ - "VincentN", - "Fredchat" - ] - }, - "XSLT_dans_Gecko": { - "modified": "2019-03-23T23:44:00.502Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "VincentN", - "Fredchat" - ] - }, - "XSLT_dans_Gecko/Différences_entre_les_navigateurs": { - "modified": "2019-03-23T23:49:52.590Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "XSLT_dans_Gecko/Exemple_basique": { - "modified": "2019-03-23T23:49:47.376Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "XSLT_dans_Gecko/Génération_de_HTML": { - "modified": "2019-03-23T23:51:13.681Z", - "contributors": [ - "wbamberg", - "Sebastianz", - "Sheppy", - "Ultrafil", - "Mgjbot", - "VincentN", - "Fredchat" - ] - }, - "Zoom_pleine_page": { - "modified": "2019-03-23T23:50:05.576Z", - "contributors": [ - "wbamberg", - "Mgjbot", - "BenoitL", - "Sys" - ] - }, - "inset-block-end": { - "modified": "2020-10-15T21:43:23.981Z", - "contributors": [ - "SphinxKnight", - "rachelandrew" - ] - }, - "inset-block-start": { - "modified": "2020-10-15T21:43:23.193Z", - "contributors": [ - "SphinxKnight", - "rachelandrew" - ] - }, - "inset-inline-end": { - "modified": "2020-10-15T21:43:21.489Z", - "contributors": [ - "SphinxKnight", - "rachelandrew" - ] - }, - "inset-inline-start": { - "modified": "2020-10-15T21:43:20.633Z", - "contributors": [ - "SphinxKnight", - "rachelandrew" - ] - }, - "toSource": { - "modified": "2019-03-24T00:05:25.191Z", - "contributors": [ - "wbamberg", - "Potappo", - "BenoitL" - ] - }, - "toString": { - "modified": "2019-03-23T23:46:06.612Z", - "contributors": [ - "wbamberg", - "teoli", - "BenoitL" - ] - }, - "À_propos_du_Document_Object_Model": { - "modified": "2019-03-23T23:53:23.967Z", - "contributors": [ - "Delapouite", - "Mgjbot", - "BenoitL", - "Jorolo" - ] - } -} \ No newline at end of file diff --git "a/files/fr/acc\303\250s_s\303\251curis\303\251_au_contenu_dom_depuis_le_chrome/index.html" "b/files/fr/acc\303\250s_s\303\251curis\303\251_au_contenu_dom_depuis_le_chrome/index.html" deleted file mode 100644 index dbc21ca4a5..0000000000 --- "a/files/fr/acc\303\250s_s\303\251curis\303\251_au_contenu_dom_depuis_le_chrome/index.html" +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Accès sécurisé au contenu DOM depuis le chrome -slug: Accès_sécurisé_au_contenu_DOM_depuis_le_chrome -tags: - - DOM - - Extensions - - Sécurité - - XPCNativeWrapper -translation_of: Mozilla/Tech/Xray_vision ---- -

-

-

Introduction

-

Les applications et les extensions scriptant des interfaces DOM sur du contenu non fiable (une page Web) doivent être prudentes et s'assurer que les informations utilisées proviennent bien de l'API DOM et non de propriétés JavaScript ou de fonctions getter et setter (accesseur/mutateur) redéfinies par une page malveillante. Firefox 1.0.3 et Mozilla 1.7.7 rendent la tâche plus difficile aux pages Web essayant de tromper les applications XUL en s'assurant que lorsque du JavaScript chrome accède à une propriété ou méthode DOM sur un objet, il obtiendra bien la propriété ou méthode DOM plutôt que la redéfinition faite par la page Web. Firefox 1.5 propose une solution plus générale qui est activée par défaut ; les extensions doivent explicitement le demander pour pouvoir effectuer des accès DOM non sûrs. -

Il n'y a que deux manières « correctes » pour le code chrome d'accéder au DOM du contenu : l'accès direct et l'utilisation explicite de XPCNativeWrapper. En particulier, l'astuce __proto__ couramment utilisée n'est sûre dans aucune version (voir « Exemples à ne PAS suivre » ci-dessous). -

La table suivante rassemble les propriétés de sécurité des deux méthodes « correctes » : -

- - - - - - - - -
- Accès direct - XPCNativeWrapper explicite -
Firefox 1.0.2 et antérieur - non sécurisé - sécurisé -
Firefox 1.0.3 et postérieur (1.0.x) - sécurisé lorsqu'il est certain que la propriété existe - sécurisé -
Firefox 1.5 - sécurisé avec xpcnativewrappers=yes (qui est le réglage par défaut) - sécurisé -
-

Accès direct

-

Les scripts conçus pour s'exécuter uniquement dans Firefox 1.0.3 et les versions 1.0.x plus récentes ou qui utilisent xpcnativewrappers=yes dans Firefox 1.5 ou plus récent peuvent simplement appeler : -

-
return contentWindow.document.title == contentWindow.getSelection();
-
-

L'accès direct est sécurisé dans Firefox 1.0.3 (et les versions 1.0.x suivantes) dans la mesure où l'objet a la garantie de bénéficier de la propriété ou de la méthode accédée par sa déclaration IDL. Par exemple, foo.nodeType est sûr si vous avez l'assurance que foo est de type Node, et foo.getSelection() est sûr si foo ne peut être qu'un objet window. Il peut être complexe d'y arriver -- par exemple, nsIDOMNSHTMLDocument a une méthode open(), mais nsIDOMXULDocument n'en a pas, par conséquent utiliser document.open() n'est PAS sûr dans Firefox 1.0.3, étant donné que document peut être un document XUL. Dans de tels cas, vous pouvez utiliser l'opérateur instanceof pour déterminer si vous avez un objet implémentant une interface IDL donnée (nsIDOMNSHTMLDocument dans ce cas précis). -

Dans Firefox 1.5, l'accès direct est toujours sûr, sauf si votre extension utilise le paramètre xpcnativewrappers=no dans son fichier manifest. Si ce paramètre n'est pas défini, l'utilisation de XPCNativeWrapper est implicite. -

-

Utilisation explicite de XPCNativeWrapper

-
var winWrapper = new XPCNativeWrapper(contentWindow,
-                                      'document', 'getSelection()');
-var docWrapper = new XPCNativeWrapper(winWrapper.document, 'title');
-return docWrapper.title == winWrapper.getSelection();
-
-

Notez que cet exemple utilise deux wrappers pour obtenir window.document.title, un wrapper pour obtenir la propriété document de l'objet window, et un wrapper pour obtenir la propriété title du document. -

L'utilisation de XPCNativeWrapper est sûre dans toutes les versions de Firefox, mais rend le code plus difficile à lire et vous devez faire attention à envelopper tous les objets DOM. -

Pour plus d'informations sur cette syntaxe, consultez l'entrée sur XPCNativeWrapper de la MozillaZine KnowledgeBase. -

-

À propos de XPCNativeWrapper

-

XPCNativeWrapper est une manière d'envelopper un objet de manière à ce que son accès par du code privilégié soit sûr. -

Il y a deux façons d'utiliser XPCNativeWrapper. L'ancienne est de l'appeler explicitement. La nouvelle manière, xpcnativewrappers=yes, est disponible à partir de Firefox 1.5 et ses pré-versions Deer Park alpha et beta. -

-

Exemples à ne PAS suivre

-

MAUVAIS dans Firefox 1.0.2 et antérieur, car un script pourrait redéfinir l'accesseur nodeType : -

-
return targetNode.nodeType == 1;
-
-

MAUVAIS dans Firefox 1.0.2 et antérieur, car un script pourrait redéfinir getSelection : -

-
return contentWindow.getSelection();
-
-

MAUVAIS dans toutes les versions. Certains développeurs mal conseillés ont utilisé cette astuce dans le passé. Des scripts peuvent redéfinir getSelection dans d'anciennes versions et cela ne fonctionne plus du tout dans Firefox 1.0.3 et Mozilla 1.7.7 : -

-
return contentWindow.__proto__.getSelection.call(contentWindow);
-
-

MAUVAIS dans Firefox 1.0.2 et antérieur, car un script pourrait redéfinir le second accesseur même si le premier est sûr : -

-
var winWrapper = new XPCNativeWrapper(contentWindow, 'document');
-// accéder à contentWindow.document est à présent sûr, mais récupérer .title du
-// document obtenu ne l'est toujours pas.
-return winWrapper.document.title;
-
-

MAUVAIS dans les versions antérieurs à Firefox 1.5, car les scripts peuvent définir document.open pour les documents non-HTML, qui n'ont pas la fonction DOM document.open : -

-
return contentWindow.document.open();
-
-


-

-
-
-{{ languages( { "en": "en/Safely_accessing_content_DOM_from_chrome", "ja": "ja/Safely_accessing_content_DOM_from_chrome", "pl": "pl/Bezpieczny_dost\u0119p_do_sk\u0142adnik\u00f3w_DOM_z_poziomu_chrome" } ) }} diff --git a/files/fr/adding_extensions_using_the_windows_registry/index.html b/files/fr/adding_extensions_using_the_windows_registry/index.html deleted file mode 100644 index 84c3b7f215..0000000000 --- a/files/fr/adding_extensions_using_the_windows_registry/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Ajouter des extensions en utilisant le Registre Windows -slug: Adding_Extensions_using_the_Windows_Registry -tags: - - Add-ons - - Extensions - - Plugins - - Windows Registry -translation_of: >- - https://extensionworkshop.com/documentation/publish/signing-and-distribution-overview/ ---- -

Introduction

- -

Ce document explique comment installer des extensions pour Firefox et Thunderbird en passant par le Registre Windows. Ce mécanisme est pensé pour faciliter l'enregistrement d'extensions par des installeurs tiers.

- -

Installation

- -

L'installation s'effectue en écrivant une entrée dans le Registre Windows, il y a deux possibillités :

- -
HKEY_CURRENT_USER\Software\Vendeur\Nom\Extensions
-HKEY_LOCAL_MACHINE\Software\Vendeur\Nom\Extensions
-
- -

Vendeur et Nom sont les valeurs retournées par les propriétés de nsIXULAppInfo. Dans les produits de Mozilla, Vendeur et "Mozilla" et Nom est le nom du produit (Firefox, Thunderbird), ex :

- -
HKEY_CURRENT_USER\Software\Mozilla\Firefox\Extensions
-HKEY_CURRENT_USER\Software\Mozilla\Thunderbird\Extensions
- -

Ou sous Windows 7/x64 :

- -
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Firefox\Extensions
-HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Thunderbird\Extensions
- -

L'ID de l'extension doit être utilisée comme nom de l'entrée de Registre. L'entrée de Registre doit être du type REG_SZ et sa valeur doit être le chemin absolu du dossier contenant l'extension (la location du XPI décompressé). Par exemple, pour installer l'extension décrite dans l'article de Création d'une Extension il faut créer l'entrée de registre ayant pour nom sample@foo.net et pour valeur c:\extensions\monExtension.

- -

Après avoir créé l'entrée de registre, Firefox ou Thunderbird se rendra compte du changement au prochain lancement. La modification des entrées de Registre alors que Thunderbird ou Firefox est lancé ne comporte pas de risque.

- -

Si les mêmes extensions apparaîssent dans HKEY_CURRENT_USER et HKEY_LOCAL_MACHINE ce sera l'extension contenue dans HKEY_CURRENT_USER qui sera utilisée. Si l'extension apparaît également dans le dossier du profil de l'utilisateur (après une installation manuelle), elle prendra le dessus de n'importe quelle instance trouvée dans le Registre.

- -

Désinstallation

- -

Les extensions installées avec le Registre  Windows peuvent être simplement désinstallées en supprimant l'entrée de Registre y correspondant. Après la suppression, Firefox ou Thunderbird se rendront compte du changement au prochain lancement. La suppression des clés de Registre alors que Thunderbird ou Firefox est lancé ne comporte pas de risque.

- -

Mise à jour

- -

Firefox ne se rend pas automatiquement compte des changements de install.rdf car il vérifie la date de modification du répertoire de l'extension avant de vérifier install.rdf. Il est possible de contourner le problème en supprimant et recréant le répertoire ou en modifiant la date de modification.

- -

Plugins

- -

Avec Windows 7 et Firefox 9.0 (d'autres cas possibles) le fonctionnement des plugins est quelque peu différent.

- -

L'installation se fait en créant une des deux entrées suivantes :

- -
HKEY_CURRENT_USER\Software\MozillaPlugins\plugin-id
-HKEY_LOCAL_MACHINE\Software\MozillaPlugins\plugin-id
-
- -

Sur un Windows 64 bits :

- -
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MozillaPlugins\plugin-id
- -

plugin-id correspond à l'id de l'extension (contenue dans install.rdf), en suivant l'exemple précédant : sample@foo.net

- -

Note : Il semblerait que les plugins soient chargés depuis tous les types de clé de registre.

- -

La clé de Registre doit avoir comme valeur nommée Path de type REG_SZ contenant un chemin absolu vers le DLL du plugin. La clé peut avoir des valeurs supplémentaires, comme Description, ProductName, Vendor et GeckoVersion.

- -

Voir aussi

- - - -

{{ languages( { "zh-cn": "cn/Adding_Extensions_using_the_Windows_Registry", "zh-tw": "zh_tw/\u4ee5_Windows_\u767b\u9304\u78bc\u5b89\u88dd\u64f4\u5145\u5957\u4ef6", "ja": "ja/Adding_Extensions_using_the_Windows_Registry" } ) }}

diff --git "a/files/fr/ajout_de_fournisseurs_de_donn\303\251es_de_protection_anti-phishing/index.html" "b/files/fr/ajout_de_fournisseurs_de_donn\303\251es_de_protection_anti-phishing/index.html" deleted file mode 100644 index 29fcc7d120..0000000000 --- "a/files/fr/ajout_de_fournisseurs_de_donn\303\251es_de_protection_anti-phishing/index.html" +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Ajout de fournisseurs de données de protection anti-phishing -slug: Ajout_de_fournisseurs_de_données_de_protection_anti-phishing -translation_of: Mozilla/Adding_phishing_protection_data_providers ---- -

La technologie de protection anti-phishing permet à Firefox de protéger l'utilisateur en comparant les URL visitées à une liste noire de sites contrefaits connus, et en l'avertissant lorsqu'il visite l'un de ces sites.

-

Installer un nouveau fournisseur de données

-

Pour installer un fournisseur de données de protection, il faut définir un ensemble de préférences détaillant celui-ci.

-

Chaque fournisseur possède un numéro d'identification unique, et le numéro 0 est attribué au fournisseur par défaut fourni avec Firefox. Lors de l'installation d’un nouveau fournisseur, vous devrez choisir le plus petit numéro suivant disponible.

-

Pour trouver quel est ce numéro, vous pouvez construire une boucle récupérant la valeur de la préférence browser.safebrowsing.provider.N.name en incrémentant N jusqu'à obtenir une valeur nulle. Il vous suffit alors d'employer N.

-

Vous pouvez trouver des exemples sur la façon de lire et écrire les préférences dans l'article sur l'ajout des préférences à une extension (à traduire de en:Adding preferences to an extension ).

-

 

-

Préférences indispensables

-
browser.safebrowsing.provider.idnum.name
Un nom humainement lisible du fournisseur d’accès.
-
-
browser.safebrowsing.provider.idnum.keyURL
Une URL qui renvoie une clé privée pour le chiffrement des autres requêtes.
-
-
browser.safebrowsing.provider.idnum.lookupURL
L'URL servant à vérifier que les URL visitées ne sont pas sur la liste noire. Les requêtes qui lui sont adressées doivent être chiffrées avec la clé privée renvoyée par keyURL.
-
-

Préférences optionnelles

-
browser.safebrowsing.provider.idnum.reportURL
Une URL utilisée pour signaler au fournisseur quand un utilisateur visite un site pratiquant le phishing, et s'il tient compte de la mise en garde ou l'ignore.
-
-
browser.safebrowsing.provider.idnum.updateURL
Une URL employée pour demander une liste à jour des sites contrefaits. Le serveur fournit soit une liste entière, soit des mises à jour incrémentielles pour actualiser les tables du client.
-
-
browser.safebrowsing.provider.idnum.reportGenericURL
Actuellement inutilisée ; destinée au signalement des problèmes en rapport avec le service de protection contre le phishing.
-
-
browser.safebrowsing.provider.idnum.reportErrorURL
L'URL vers laquelle l'utilisateur est dirigé pour rapporter un site signalé à tort comme un site contrefait.
-
-
browser.safebrowsing.provider.idnum.reportPhishURL
L'URL vers laquelle l'utilisateur est dirigé pour rapporter un site contrefait qui n’est pas détecté par le système de protection.
-
-

Détermination du fournisseur de données utilisé actuellement

-

Si vous devez déterminer le numéro d'ID du fournisseur de données anti-phishing employé actuellement, vous pouvez lire la valeur de la préférence browser.safebrowsing.dataProvider.

-

 

- -

{{ languages( { "en": "en/Adding_phishing_protection_data_providers", "es": "es/A\u00f1adir_datos_para_la_protecci\u00f3n_anti-phishing", "it": "it/Aggiungere_fornitori_di_dati_anti-phishing", "ja": "ja/Adding_phishing_protection_data_providers", "pl": "pl/Dodawanie_dostawc\u00f3w_danych_ochrony_przed_phishingiem", "zh-tw": "zh_tw/\u65b0\u589e\u507d\u9020\u7db2\u7ad9\u6e05\u55ae\u4f86\u6e90" } ) }}

diff --git "a/files/fr/am\303\251liorations_css_dans_firefox_3/index.html" "b/files/fr/am\303\251liorations_css_dans_firefox_3/index.html" deleted file mode 100644 index a67b479961..0000000000 --- "a/files/fr/am\303\251liorations_css_dans_firefox_3/index.html" +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Améliorations CSS dans Firefox 3 -slug: Améliorations_CSS_dans_Firefox_3 -tags: - - CSS - - Firefox 3 -translation_of: Mozilla/Firefox/releases/3/CSS_improvements ---- -
{{FirefoxSidebar}}

{{ Fx_minversion_header(3) }}

- -

Firefox 3 offre un certain nombres d'améliorations dans son implémentation de CSS. Bien que tous ces changements soient documentés sur les pages appropriées de la documentation, cet article fournit un aperçu de leur ensemble afin que les développeurs puissent facilement découvrir de quoi il s'agit.

- - - -

Voir également

- - - -
 
- -

{{ languages( { "en": "en/CSS_improvements_in_Firefox_3", "es": "es/Mejoras_CSS_en_Firefox_3", "ja": "ja/CSS_improvements_in_Firefox_3", "pl": "pl/Poprawki_CSS_w_Firefoksie_3" } ) }}

diff --git "a/files/fr/am\303\251liorations_du_gestionnaire_de_t\303\251l\303\251chargement_dans_firefox_3/index.html" "b/files/fr/am\303\251liorations_du_gestionnaire_de_t\303\251l\303\251chargement_dans_firefox_3/index.html" deleted file mode 100644 index 68076a453e..0000000000 --- "a/files/fr/am\303\251liorations_du_gestionnaire_de_t\303\251l\303\251chargement_dans_firefox_3/index.html" +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Améliorations du gestionnaire de téléchargement dans Firefox 3 -slug: Améliorations_du_gestionnaire_de_téléchargement_dans_Firefox_3 -tags: - - Firefox 3 - - Gestionnaire_de_téléchargement -translation_of: Archive/Mozilla/Download_Manager_improvements_in_Firefox_3 ---- -

{{ Fx_minversion_header(3) }} -Firefox 3 offre différentes améliorations au gestionnaire du téléchargement permettant notamment d'ajouter plusieurs écouteurs de progression en même temps, d'utiliser l'API Storage pour la gestion de données ou encore de reprendre des téléchargements interrompus. En outre, il est possible d'étendre ou de remplacer l'interface du gestionnaire de téléchargement en implémentant la nouvelle interface {{ Interface("nsIDownloadManagerUI") }}. -

{{ Note("Ces changements nécessiteront quelques modifications légères du code utilisant le gestionnaire de téléchargement ; quelques méthodes ont des subi des modifications mineures.") }} -

-

Interfaces du gestionnaire de téléchargement

-
{{ Interface("nsIDownloadManager") }} -
Donne aux applications et extensions un accès au gestionnaire de téléchargement leur permettant d'ajouter et de retirer des fichiers de la liste de téléchargement, d'obtenir des informations concernant des téléchargements passés ou présents et de demander d'être notifiées de la progression des téléchargements. -
{{ Interface("nsIDownload") }} -
Décrit un fichier dans la file de téléchargement ; ces fichiers peuvent êtres en attente de téléchargement, en cours de téléchargement ou avoir été complètement téléchargés. -
{{ Interface("nsIDownloadProgressListener") }} -
Les applications et extensions qui implémentent cette interface peuvent être averties de changements d'état dans les téléchargements. -
{{ Interface("nsIDownloadManagerUI") }} -
Implémentez cette interface pour remplacer ou étendre l'interface utilisateur du gestionnaire de téléchargement. -
-

Autres documents sur le gestionnaire de téléchargement

-
Préférences du gestionnaire de téléchargement -
Cet article liste les préférences utilisées par le gestionnaire de téléchargement ainsi que leurs valeurs par défaut. -
Schéma du gestionnaire de téléchargement -
Cet article décrit le format de base de données utilisé pour conserver des informations concernant chaque téléchargement. -
-

Exemples

-
Surveillance de téléchargements -
Un exemple montrant comment utiliser les nouvelles API du gestionnaire de téléchargement pour créer une fenêtre de journal des téléchargements affichant tous les téléchargements passés et présents ainsi que leur état, leurs dates de début et de fin, les vitesses de téléchargement, etc. Montre aussi comment utiliser l'API Storage. -
-


-


-

-
-
-{{ languages( { "en": "en/Download_Manager_improvements_in_Firefox_3", "es": "es/Mejoras_en_el_administrador_de_descargas_en_Firefox_3", "ja": "ja/Download_Manager_improvements_in_Firefox_3" } ) }} diff --git a/files/fr/api_du_toolkit/index.html b/files/fr/api_du_toolkit/index.html deleted file mode 100644 index d146276570..0000000000 --- a/files/fr/api_du_toolkit/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: API du toolkit -slug: API_du_toolkit -tags: - - API_du_toolkit - - Extensions - - Themes - - XULRunner -translation_of: Mozilla/Tech/Toolkit_API ---- -

 

- -

La boîte à outils Mozilla Toolkit est un ensemble d'interfaces de programmation (API) construites sur Gecko et fournissant des services avancés aux applications XUL. Ces services comprennent :

- - - -

Références officielles

- -

-

-

- -

Voir aussi

- -

Les pages suivantes, pour les développeurs, contiennent des exemples et abordent le détail de sujets particuliers :

- - diff --git "a/files/fr/api_du_toolkit/r\303\251f\303\251rences_officielles/index.html" "b/files/fr/api_du_toolkit/r\303\251f\303\251rences_officielles/index.html" deleted file mode 100644 index be69382dbd..0000000000 --- "a/files/fr/api_du_toolkit/r\303\251f\303\251rences_officielles/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Références officielles -slug: API_du_toolkit/Références_officielles -translation_of: Mozilla/Tech/Toolkit_API/Official_References ---- -

Official References. Do not add to this list without contacting Benjamin Smedberg. Note that this page is included from the pages listed below. NdT : cette page doit rester en phase avec sa jumelle anglaise Toolkit API:Official References

- diff --git "a/files/fr/apprendre/confidentialit\303\251_int\303\251grit\303\251_et_disponibilit\303\251/index.html" "b/files/fr/apprendre/confidentialit\303\251_int\303\251grit\303\251_et_disponibilit\303\251/index.html" deleted file mode 100644 index ad4bbca21b..0000000000 --- "a/files/fr/apprendre/confidentialit\303\251_int\303\251grit\303\251_et_disponibilit\303\251/index.html" +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: 'Confidentialité, intégrité et disponibilité' -slug: Apprendre/Confidentialité_intégrité_et_disponibilité -tags: - - Beginner - - Security - - Tutorial -translation_of: 'Archive/Security/Confidentiality,_Integrity,_and_Availability' ---- -
{{IncludeSubnav("/fr/Apprendre")}}
-
-

Cet article aborde les objectifs majeurs qu'on retrouve en sécurité : la confidentialité, l'intégrité et la disponibilité.

-
- - - - - - - - - - - - -
Prérequis :Il n'y a pas de prérequis pour cet article.
Objectifs :Vous apprendrez les concepts de confidentialité, d'intégrité et de disponibilité et comment ceux-ci peuvent affecter les données et les systèmes.
- -

En sécurité de l'information, le modèle classique définit trois objectifs : maintenir la confidentialité, l'intégrité et la disponibilité des données. Chacun de ces objectifs porte sur un aspect différent de protection des informations.

- -

Pédagogie active

- -

Il n'y a, pour le moment, pas d'éléments de pédagogie active pour cette section. Vous pouvez néanmoins contribuer.

- -

Aller plus loin

- -

La confidentialité

- -

La confidentialité correspond à la protection des informations afin que celles-ci ne soient pas accessibles pour des personnes ou entités non-autorisées. Autrement dit, seules les personnes autorisées doivent pouvoir accéder aux données sensibles. Prenons par exemple les données de votre compte bancaire. Vous devriez pouvoir y accéder, cela ne fait aucun doute, les employés de la banque qui traitent avec vous ont également besoin d'y accéder mais en dehors de ces personnes, nul autre ne devrait pouvoir y accéder. Échouer à conserver cettte confidentialité signifie que quelqu'un qui n'aurait pas du accéder aux données a réussi à le faire. Cet accès peut avoir été accidentel ou intentionnel. Un tel échec est généralement appelé « faille » ou « brêche » et, généralement, il n'existe pas de solution pour empêcher à l'intrus de consulter les données auxquelles il a eu accès. Une fois qu'un secret a été révélé, il n'est plus possible de le cacher à nouveau. Si les informations de votre compte en banque sont publiées sur un site web public, tout le monde pourra avoir accès à ces données et il sera impossible d'effacer ce qui aura été consulté de la mémoire des personnes, de notes écrites, de captures d'écrans… De nos jours, la plupart des incidents de sécurités rapportés dans les médias sont dus à des échecs en termes de confidentialité.

- -

Pour résumer, une faille dans la confidentialité signifique que quelqu'un a eu accès à des informations alors qu'il n'aurait pas du pouvoir y accéder.

- -

L'intégrité

- -

L'intégrité correspond au fait de s'assurer de l'authenticité des informations auxquelles on accède :  les informations ne doivent pas avoir été modifiées et doivent provenir d'une source sûre. Prenons l'exemple d'un site web sur lequel vous vendez des produits. Si un attaquant peut acheter des produits sur votre site et modifier les prix des produits, il pourra acheter n'importe quoi à n'importe quel prix. Il y aurait donc une faille d'intégrité car les informations (ici le prix d'un produit) ont été modifiées sans votre autorisation. Un autre scénario où on peut observer une telle faille d'intégrité peut être le suivant : vous essayez de vous connecter à un site web et un attaquant malveillant intercepte les communications entre vous et le « vrai » site pour vous rediriger vers un autre site web. Dans ce cas, c'est la source d'information qui n'est pas sûre et c'est pour cette raison qu'on a une faille d'intégrité.

- -

La disponibilité

- -

La disponibilité signifie que les informations peuvent être consultées par les utilisateurs autorisés.

- -

Prochaines étapes

- - diff --git "a/files/fr/apprendre/contr\303\264les_de_s\303\251curit\303\251/index.html" "b/files/fr/apprendre/contr\303\264les_de_s\303\251curit\303\251/index.html" deleted file mode 100644 index fee809e1c8..0000000000 --- "a/files/fr/apprendre/contr\303\264les_de_s\303\251curit\303\251/index.html" +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Contrôles de sécurité -slug: Apprendre/Contrôles_de_sécurité -tags: - - Beginner - - Security - - Tutorial -translation_of: Archive/Security/Controls ---- -

{{draft}}

- -
-

Cet article aborde les contrôles de sécurité : leurs différentes catégories, pourquoi ils sont toujours pertinents ainsi que leurs différentes faiblesses.

-
- - - - - - - - - - - - -
Prérequis :Vous devez au préalable connaître les objectifs majeurs en termes de sécurité, ce qu'est une vulnérabilité et ce qu'est une menace.
Objectifs :Apprendre ce qu'est un contrôle de sécurité et comment une combinaison de contrôles de sécurité permet de protéger des données et des systèmes.
- -

Les données sensibles doivent être protégées afin qu'elles ne souffrent pas d'un défaut de confidentialité, d'integrité ou de disponibilité. Les mesures de protection (aussi appelées « contrôles de sécurité ») se distinguent en deux catégories. Tout d'abord, les faiblesses d'un système doivent être corrigées. Si un système possède une faille connue qu'un attaquant peut exploiter, le système doit être mis à jour afin que la vulnérabilité soit retirée ou réduite. Ensuite, le système ne doit offrir que les fonctionnalités nécessaires à chaque utilisateur autorisé, personne ne doit pouvoir utiliser des fonctionnalités dont il n'a pas besoin. C'est ce qu'on appelle les moindres privilèges.  Limiter les fonctionnalités accessibles et résoudre les failles connues visent un même but : fournir le minimum de chances à un attaquant pour entrer dans un système.

- -

Pédagogie active

- -

Il n'y a pas encore de matériau interactif pour cet article. N'hésitez pas à contribuer.

- -

Aller plus loin

- -

Il existe trois types de contrôles de sécurité :

- - - -

Ces trois types de contrôles sont nécessaires afin d'obtenir une sécurité robuste. Ainsi, une règle de sécurité relève d'un contrôle de gestion mais est implémentée par des personnes (contrôle opérationnel) et des systèmes (contrôle technique). Prenons l'exemple du hameçonnage. Une entreprise peut décider d'avoir des règles afin que les utilisateurs ne visitent pas de sites web malveillants. Les contrôles de sécurité contre le hameçonnage incluent : des contrôles de gestion pour définir la règle à suivre, des contrôles techniques pour surveiller le contenu des e-mails et des sites web visités et des contrôles opérationnels en formant les utilisateurs afin que ceux-ci réalisent quand ils font face à une tentative de hameçonnage.

- -

La mise en place de contrôles de sécurité a généralement un inconvénient : les systèmes soumis aux contrôles sont moins pratiques voire plus difficiles à utiliser. Lorsque l'utilisabilité pose problème, de nombreux utilisateurs contourneront les contrôles de sécurité. Par exemple, si les mots de passe doivent être longs et complexes, les utilisateurs pourraient être amenés à les écrire sur des notes. Trouver le bon équilibre entre sécurité, utilisabilité et fonctionnalité est un défi complexe à relever mais qu'il est nécessaire de résoudre convenablement.

- -

Un autre principe fondamental des contrôles de sécurité consiste à utiliser plusieurs couches de sécurité. Des données sensibles peuvent par exemple être stockées sur un serveur protégé par différents contrôles : un pare-feu réseau, un pare-feu interne et des correctifs liés au système d'exploitation. Avoir plusieurs couches de sécurité permet de  parer au cas où une couche ne fonctionne pas ou ne permet pas de contrevenir à une menace donnée. Généralement, c'est une bonne idée que d'utiliser une combinaison de contre-mesures entre le réseau et le serveur et de contre-mesures internes au serveur.

diff --git a/files/fr/apprendre/les_menaces/index.html b/files/fr/apprendre/les_menaces/index.html deleted file mode 100644 index 5246dc91af..0000000000 --- a/files/fr/apprendre/les_menaces/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Threats -slug: Apprendre/Les_menaces -tags: - - Beginner - - Learn - - Security - - Tutorial -translation_of: Archive/Security/Threats ---- -

{{draft}}

- -
-

Cet article aborde les menaces en sécurité informatique, il explique ce qu'elles sont et comment elles peuvent affecter le trafic réseau.

-
- - - - - - - - - - - - -
Prérequis :Vous devez au préalable connaître les objectifs majeurs en termes de sécurité et savoir ce qu'est une vulnérabilité.
Objectifs :Apprendre ce qu'est une menace au sens informatique et comment les menaces peuvent affecter le trafic réseau.
- -

Une menace correspond à toute circonstance ou événement qui peut impacter négativement des données ou des systèmes à cause d'un accès non-autorisé, d'une destruction (partielle ou totale), d'une divulgation ou de la modification d'informations. Cela peut aussi être un déni de service. Les menaces peuvent impliquer des acteurs intentionnels (par exemple un attaquant qui souhaite accéder à des informations sur un serveur) ou accidentels  (par exemple un administrateur qui oublie de désactiver le compte d'un ancien employé).  Les menaces peuvent être locales (un employé mécontent par exemple) ou éloignées (un attaquant à distance sur un autre continent).

- -

Pédagogie active

- -

Il n'existe pas encore de matériau interactif pour cet article. N'hésitez pas à contribuer.

- -

Aller plus loin

- -

La source d'une menace est la cause d'une menace : cela peut être une attaque physique ou informatique, une erreur humaine, un dysfonctionnement d'un matériel ou d'un logiciel de l'entreprise ou un dysfonctionnement extérieur à l'entreprise. Un événement de menace correspond à un événement ou a une situation initiée ou causée par la source et qui peut potentiellement entraîner un impact dommageable.

- -

De nombreuses menaces sont rendues possibles à causes d'erreurs : des bugs dans des systèmes d'exploitation ou dans des applications ou encore des erreurs causées par les acteurs humains qui utilisent les systèmes.

- -

Le trafic réseau transite par de nombreux ordinateurs intermédiaires : des routeurs, d'autres réseaux non sécurisés comme des points d'accés WiFi. Pour ces raisons, le trafic réseau peut parfois être intercepté par un tiers. Les menaces qui visent le trafic réseau peuvent prendre l'une des formes suivantes :

- - - -

Prochaines étapes

- - diff --git "a/files/fr/apprendre/les_vuln\303\251rabilit\303\251s/index.html" "b/files/fr/apprendre/les_vuln\303\251rabilit\303\251s/index.html" deleted file mode 100644 index 07af041fe4..0000000000 --- "a/files/fr/apprendre/les_vuln\303\251rabilit\303\251s/index.html" +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Les vulnérabilités -slug: Apprendre/Les_vulnérabilités -tags: - - Beginner - - Learn - - Security -translation_of: Archive/Security/Vulnerabilities ---- -

{{draft}}

- -
-

Dans cet article, nous abordons les vulnérabilités : ce qu'elles sont et pourquoi elles sont présentes dans chaque système.

-
- - - - - - - - - - - - -
Prérequis :Vous devriez connaître au préalable les trois objectifs majeurs de la sécurité.
Objectifs :Apprendre ce qu'est une vulnérabilité et comment elle peut affecter des données et/ou des systèmes.
- -

Une vulnérabilité est une faiblesse d'un système qui peut être exploitée de façon négative pour compromettre la confidentialité, l'intégrité ou la disponibilité d'un système et/ou de des données. Il existe de nombreuses méthodes pour catégoriser les vulnérabilités. Dans cet article, nous les classerons dans trois grands groupes : les erreurs logicielles, les erreurs de configuration des systèmes de sécurité et la mauvaise utilisation d'une fonctionnalité d'un logiciel. Ces catégories sont décrites ci-après.

- -

Pédagogie active

- -

Il n'y a, pour le moment, pas d'élément de pédagogie active pour cette section. Vous pouvez néanmoins contribuer.

- -

Aller plus loin

- -

Les différentes catégories de vulnérabilités

- -

Une vulnérabilité liée à une erreur logicielle est causée par une erreur, non-intentionnelle, lors de la conception ou du développement du logiciel. Par exemple, cela peut être une erreur de validation lorsqu'un utilisateur saisit quelque chose à entrer dans le logiciel, dans ce cas, un utilisateur mal-intentionné pourrait concevoir des chaînes de caractères ou des valeurs spécifiques pour attaquer le système. Un autre exemple peut être une situation de compétition qui permettrait à un attaquant d'effectuer une action avec des privilèges qu'il n'aurait pas dû avoir.

- -

Une vulnérabilité liée à une erreur de configuration des éléments de sécurité est un cas où la sécurité d'un logiciel est compromise à cause du logiciel lui-même. Par exemple, un système d'exploitation peut permettre à un utilisateur de contrôler qui peut accéder à quels fichiers en fonction de ses privilèges, généralement le système d'exploitation fournira donc une application qui permet d'activer ou de désactiver certains privilèges ou certains contrôles. Une vulnérabilité de ce type apparaît quand un des réglages de la configuration impacte négativement la sécurité du logiciel.

- -

Une vulnérabilité liée à une mauvaise utilisation d'une fonctionnalité logicielle apparaît quand un logoiciel offre une certaine méthode permettant de compromettre la sécurité d'un système. Ces vulnérabilités proviennent généralement d'une hypothèse de confiance, prise lors du développement du logiciel, qui peut être mise à défaut lors de l'utilisation du logiciel. Par exemple, un client de courrier électronique peut disposer d'une fonctionnalité pour afficher les e-mails qui contiennent du HTML. Un attaquant pourrait donc créer un courrier électronique qui contient des liens qui soient tout à fait « sains » en apparence mais qui redirigent en fait vers un site mal intentionné. Ici, l'hypothèse de confiance consiste à penser qu'avec cette fonctionnalité de rendu HTML, un utilisateur ne recevra pas d'e-mails mal intentionnés ou qu'il ne cliquera pas sur ces liens.

- -

Ces vulnérabilités liées à l'utilisation du logiciel apparaissent lors de la conception du logiciel ou d'un de ses composants. Les hypothèses de confiance peuvent avoir été explicites (par exemple, un concepteur est conscient de telle faiblesse en termes de sécurité et estime qu'une option séparée sera plus efficace). Cependant, la plupart du temps, ces hypothèses sont implicites : créer une fonctionnalité sans évaluer les risques que celle-ci introduit, l'évolution du logiciel ou d'un protocole au cours du temps... Le protocole Address Resolution Protocol (ARP en anglais ou protocole de résolution des adresses) fait par exemple « confiance » au sens où il ne vérifie pas que l'association fourni dans les réponses reçues entre l'adresse Media Access Control (MAC) et l'adresse Internet Protocol (IP). L'ARP garde en cache ces informations pour fournir un service qui permettra aux différents appareils d'un réseau local de s'envoyer des données. Toutefois, un attaquant pourrait générer de faux messages ARP afin d'« empoisonner » les tableaux ARP d'un système et ainsi déclencher un déni de service ou une attaque « de l'homme du milieu ». Le protocole ARP a été standardisé 25 ans auparavant, les menaces ont grandement évolué depuis et c'est pourquoi les hypothèses de confiance sur lesquelles le protocole a été conçu ne seraient plus d'actualité aujourd'hui.

- -

Cela peut s'avérer difficile de différencier les vulnérabilités de ce dernier type au regard des deux premiers. Une faille d'un logiciel et une mauvaise utilisation d'un logiciel peuvent tous les deux provenir d'erreurs lors de la conception du logiciel. Cependant, les failles logicielles ont un impact purement négatif alors que les vulnérabilités liées à la mauvaise utilisation d'un logiciel proviennent de fonctionnalités supplémentaires.

- -

On peut également parfois confondre cette dernière catégorie avec la seconde. La différence principale est qu'une vulnérabilité liée à une mauvaise utilisation du logiciel aura un réglage qui active/désactive une fonctionnalité entière et ne concerne pas uniquement la sécurité. En revanche, pour une vulnérabilité liée à la configuration, un réglage équivalent n'impactera que la sécurité du logiciel. Si on dispose par exemple d'un réglage permettant de désactiver l'affichage HTML des e-mails, cela aura un impact sur la sécurité et sur une fonctionnalité du client mail : une vulnérabilité liée à ce réglage serait donc une vulnérabilité liée à une mauvaise utilisation du logiciel. En revanche, une vulnérabilité liée à un réglage qui permet de désactiver la sécurité anti-hameçonnage (quelque chose qui ne concerne que la sécurité) serait une vulnérabilité liée à un défaut de configuration.

- -

La présence de vulnérabilités

- -

Aucun système n'est parfaitement sécurisé. Chaque système possède des vulnérabilités. À un instant donné, un système peut éventuellement être épargné de failles de sécurité logicielles connues mais les problèmes de configuration ou de mauvaise utilisation sont toujours présents. La mauvaise utilisation de fonctionnalités est inhérente au logiciel car chaque fonctionnalité repose sur des hypothèses de confiance qui peuvent être mises en défaut. Les défauts de configuration sont également inévitables pour deux raisons. Premièrement, la plupart des réglages de sécurité permettent d'augmenter la sécurité mais réduisent d'autres fonctionnalités : utiliser les réglages les plus stricts en termes de sécurité conduiraient donc parfois à un logiciel peu (voire pas du tout) utilisable. Deuxièmement, de nombreux réglages de sécurité ont un impact à la fois positif et négatif sur la sécurité. On peut ici prendre l'exemple du nombre d'essais maximum pour saisir un mot de passe avant de verrouiller le compte utilisateur. Si on fixe ce seuil à 1, on obtient une sécurité maximale contre les attaques qui consistent à essayer différents mots de passe mais les utilisateurs légitimes n'auraient pas le droit à l'erreur. Cela pourrait également permettre à un attaquant de mener une attaque de déni de serveice contre certains utilisateurs en effectuant une tentative de connexion sur leurs comptes.

- -

La somme de toutes ces vulnérabilités potentielles, qu'elles soient liées à des défauts de configuration, à une mauvaise utilisation du logiciel ou à des failles techniques dans son code, font donc qu'on peut avoir des dizaines (voire centaines) de vulnérabilités pour un système donné à un instant donné. Il est probable que les caractéristiques de ces vulnérabilités varient grandement : certaines seront faciles à exploiter tandis que d'autres ne pourront être exploitées que si une conjonction de conditions très improbables se produit. Une vulnérabilité peut fournir un accès administrateur à un système alors qu'une autre pourrait ne donner qu'un accès en lecture à un fichier sans importance. En fin de compte, une organisation a besoin de savoir :

- - diff --git a/files/fr/apprendre/ssl_et_tls/index.html b/files/fr/apprendre/ssl_et_tls/index.html deleted file mode 100644 index dc7c7eb50a..0000000000 --- a/files/fr/apprendre/ssl_et_tls/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: SSL et TLS -slug: Apprendre/SSL_et_TLS -tags: - - Security - - Tutorial -translation_of: Archive/Security/SSL_and_TLS ---- -

{{draft}}

- -

Les protocoles Secure Sockets Layer (SSL) (ou Couche de sockets sécurisée) et Transport Layer Security (TLS) (ou Couche de transport sécurisée) sont des protocoles universellement acceptés pour l'établissement de communications authentifiées et chiffrées entre des clients d'une part et des serveurs d'autre part. L'authentification liée au serveur et celle liée au client utilisent toutes les deux SSL/TLS.

- -

SSL/TLS utilise un système de combinaison entre une clé publique et un chiffrement à clé symétrique. Le chiffrement par clé symétrique est beaucoup plus rapide qu'un chiffrement par clé publique mais le chiffrement par clé publique permet d'utiliser de meilleures techniques d'authentification Une « session » SSL/TLS commence donc toujours par un échange de message qu'on appellera l'établissement de liaison (handshake est le terme communément employé en anglais). Cet établissement de liaison permet au serveur de s'authentifier envers le client en utilisant des techniques basées sur des algorithmes à clé publique, cela permet ensuite au client et au serveur de coopérer pour créer des clés symétriques afin de chiffrer/déchiffrer rapidement les messages échangées pendant la session.

- -

Ces deux protocoles supportent différents algorithmes de chiffrement pour différentes opérations : l'authentification entre le serveur et le client, la transmission de certificats, l'établissement de clés de sessions. Les clients et serveurs peuvent supporter différents algorithmes de chiffrement. Une des fonctionnalités de l'établissement de liaison est la détermination du meilleur algorithme de chiffrement, supporté par le serveur et par le  client. C'est cet algorithme qui sera ensuite utilisé pour les opérations listées juste avant.

- -

Les algorithmes utilisés pour échanger des clés, comme RSA ou la cryptographie sur courbes elliptiques (ECC pour Elliptic Curve Cryptography en anglais) déterminent la façon dont le client et le serveur calculent les clés symétriques à utiliser pendant la session SSL/TLS. Le protocole SSL repose principalement sur des ensembles d'algorithmes qui incluent RSA alors que TLS, plus moderne supporte à la fois RSA et des algorithmes d'ECC.

- -
-

Note : La sécurité de clés RSA dépend de sa longueur et de la capacité de calcul des ordinateurs. À l'heure actuelle, il est recommandé d'utiliser un clé RSA longue de 2048 bits. Bien que de nombreux serveurs web continuent d'utiliser des clés de 1024 bits, il serait préférable de passer à 2048 bits. Pour les ordinateurs 64 bits, des clés encore plus fortes devraient être utilisées (3072 ou 4096 bits par exemple).

-
- -

Étant donné que certaines infrastructures de clés publiques utilisent encore RSA avant de migrer vers d'autres systèmes cryptographiques comme ECC, les serveurs devraient, dans la mesure du possible, continuer à supporter RSA.

- -

Les suites de chiffrement supportées par RSA

- -

Les suites de chiffrement communément supportées et qui utilisent un échange de clés basé sur RSA comportent généralement :

- - - -

Utiliser les courbes elliptiques pour la cryptographie

- -

La cryptographie sur courbes elliptiques (ou Elliptic Curve Cryptography, ECC en anglais) est un système qui utilise les courbes elliptiques afin de créer des clés pour chiffrer des données. ECC permet d'avoir des clés de chiffrement plus fortes et également plus courtes que celles utilisées avec RSA. Cela fait qu'ECC est plus rapide et plus efficace, en termes d'implémentation, par rapport à RSA.

- -

ECC dispose donc de plusieurs avantages par rapport à RSA. Un des désavantages d'ECC est qu'il est, pour l'instant, moins largement supporté que RSA.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bits de sécuritéLongueur de clé RSALongueur de clé ECC
Comparaison de la force des algorithmes RSA et ECC
801024160-223
1122048224-255
1283072256-383
1927860384-511
25615360512+
- -

Les informations de ce tableau proviennent du National Institute of Standards and Technology (NIST). Pour plus d'informations, se référer à http://csrc.nist.gov/publications/nistpubs/800-57/SP800-57-Part1.pdf.

- -

Pour plus d'informations sur ECC, voir également la RFC 4492 (et notamment la section 5.6.1 et le tableau 2).

- -

Une excellente ressource, disponible en français, pour comprendre SSL/TLS est la conférence de Benjamin Sonntag réalisée dans le cadre d'Il était une fois Internet (CC BY-SA).

diff --git "a/files/fr/apprendre/s\303\251curit\303\251_tcp_ip/index.html" "b/files/fr/apprendre/s\303\251curit\303\251_tcp_ip/index.html" deleted file mode 100644 index 12c1d0177e..0000000000 --- "a/files/fr/apprendre/s\303\251curit\303\251_tcp_ip/index.html" +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Sécurité TCP/IP -slug: Apprendre/Sécurité_TCP_IP -tags: - - Beginner - - Networking - - Security - - Tutorial -translation_of: Archive/Security/TCP_IP ---- -

{{draft}}

- -

TCP/IP est très largement utilisé afin de transmettre les communications sur le réseau. Les communications TCP/IP se composent de quatre couches qui fonctionnent ensemble. Lorsqu'un utilisateur souhaite transférer des données sur un/des réseau(x), les données sont passées de la couche la plus haute à la couche la plus basse et chaque couche ajouter des informations. À chaque niveau, l'unité logique qui est manipulée est généralement composées d'un en-tête et d'une charge utile. La charge utile correspond à l'information passée depuis la couche précédente. L'en-tête contient des informations spécifiques à la couche courante (telles que les adresses utilisées). Au niveau de la couche applicative, la charge utile correspond aux données transmises. La couche la plus basse envoie les différentes données via le réseau physique. Une fois arrivée à destination, les données repassent vers les couches les plus hautes. En résumé, les données produites par une couche sont encapsulées dans un conteneur plus grand dans la couche inférieure. Les quatres couches qui permettent à TCP/IP de fonctionner sont présentées ci-après, de la plus haute à la plus basse :

- - - -

Des contrôles de sécurité existent pour chaque couche du modèle TCP/IP. Comme vu précédemment, les données sont passées de la couche la plus haute vers la couche la plus basse, chaque couche ajoutant des informations. C'est pour cela que les contrôles de sécurité effectués par une couche ne bénéficient pas aux couches inférieures car celles-ci effectuent des opérations dont les couches supérieures ne sont pas conscientes. Voici quelques contrôles de sécurité mis en œuvre par chaque couche :

- - - -

Vu qu'ils permettent de protéger les données des applications sans qu'il soit nécessaire de les modifier, les contrôles de la couche réseau sont les plus utilisés pour sécuriser les communications entre différents réseaux partagés tels qu'Internet. Les contrôles de la couche réseau fournissent une solution qui couvre les données des différentes applications et les informations IP. Cependant, dans de nombreux cas, des contrôles à d'autres niveaux seront plus pertinents. Ainsi, si une seule application doit être protégée, des contrôles au niveau du réseau pourraient être excessifs. Les protocoles de contrôle de la couche de transport comme SSL/TLS sont communément utilisés pour sécuriser les communications d'applications basées sur HTTP (bien que ces protocoles permettent également de sécuriser des communications SMTP, POP, IMAP, FTP, etc.). Les principaux navigateurs web supportent tous TLS et il n'est donc pas nécessaire d'installer un logiciel client ou de configurer quoi que ce soit pour utiliser ce protolce. Pour chaque niveau, les contrôles offrent des avantages et des fonctionnalités qu'il est impossible de retrouver aux autres niveaux.

- -

SSL/TLS est le contrôle de sécurité le plus utilisé au niveau de la couche de transport. Selon l'implémentation et la configuration de SSL/TLS, ce dernier peut fournir les protections suivantes :

- - diff --git a/files/fr/archive/add-ons/api_de_restauration_de_session/index.html b/files/fr/archive/add-ons/api_de_restauration_de_session/index.html deleted file mode 100644 index dfae935362..0000000000 --- a/files/fr/archive/add-ons/api_de_restauration_de_session/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: API de restauration de session -slug: Archive/Add-ons/API_de_restauration_de_session -tags: - - Extensions -translation_of: Archive/Add-ons/Session_store_API ---- -

Firefox 2 introduit la sauvegarde de session, une nouvelle fonctionnalité qui permet aux extensions de sauvegarder et restaurer des données entre différentes sessions de Firefox. Une API simple permet aux extensions d'accéder à cette fonctionnalité. -

Un des cas où l'utilisation de cette fonctionnalité peut être cruciale pour une extension est que Firefox 2 permet à l'utilisateur d'annuler la fermeture des onglets. Pour récupérer proprement l'état de votre extension lorsqu'un onglet est restauré, celle-ci doit utiliser la méthode setTabValue() de l'API de sauvegarde de session pour enregistrer toutes les données devant pouvoir être restaurées par la suite, puis appeler la méthode getTabValue() pour récupérer ces données lorsque l'onglet est restauré. -

L'API de sauvegarde de session est implémentée en utilisant l'interface nsISessionStore. -

-

Savoir quand restaurer

-

Chaque fois que Firefox est sur le point de restaurer un onglet, un événement de type SSTabRestoring est généré. Si votre extension doit pouvoir restaurer des données lorsqu'un onglet est récupéré, vous pouvez mettre en place un listener comme ceci : -

-
function myExtensionHandleRestore(aEvent) {
-  Components.classes["@mozilla.org/consoleservice;1"].
-             getService(Components.interfaces.nsIConsoleService).
-             logStringMessage("Restauration d'onglets");
-};
-
-document.addEventListener("SSTabRestoring", myExtensionHandleRestore, false);
-
-

Il vous suffit de remplacer le contenu de la fonction myExtensionHandleRestore() avec vos propres actions à effectuer lorsque l'onglet est récupéré. Dans cet exemple, l'interface nsIConsoleService sert à afficher un message dans la console JavaScript. -

Cet événement est généré juste avant que l'onglet ne soit récupéré. Un événement de type SSTabRestored est déclenché à chaque fois qu'un onglet a fini d'être récupéré. -

-

Le processus de restauration de session

-

La séquence exacte d'événements qui surviennent lorsqu'une session est en cours de restauration est la suivante : -

-
  1. Un état de session est sur le point d'être restauré. Cela peut se faire au démarrage ou en réponse à une annulation de fermeture d'onglet, puisque les sessions d'onglets fermés sont récupérées onglet par onglet. -
  2. De nouvelles fenêtres sont ouvertes si nécessaire (une pour chaque fenêtre qui a été sauvegardée dans l'enregistrement de session), les cookies et la liste des onglets récemment fermés sont restaurés. -
-

Ensuite, les étapes suivantes sont lancées pour chaque onglet récupéré : -

-
  1. Soit un onglet existant est réutilisé, soit un nouvel onglet est créé. Dans ce dernier cas, un événement TabOpen est généré. -
  2. Les attributs XUL persistants de l'onglet (ceux dus aux appels de persistTabAttribute()) et les permissions sont restaurés. -
  3. L'événement SSTabRestoring est généré. -
  4. L'onglet reçoit l'indication de l'URL à afficher. -
  5. Lorsque la page est chargée, les champs de saisie et les barres de défilement sont restaurés. -
  6. Finalement, l'événement SSTabRestored est généré. -
-

Si vous voulez définir des permissions ou manipuler un onglet récupéré avant que la page y soit chargée, vous devrez surveiller SSTabRestoring. Si vous voulez faire une action après le chargement de la page, vous devrez surveiller SSTabRestored. -

Ces deux événements sont générés systématiquement pour chaque onglet récupéré. Vous pouvez déterminer quel onglet est concerné par la récupération grâce au champ originalTarget de l'événement. -

Il n'y a pas vraiment de moyen pour déterminer quand le dernier onglet a été récupéré à moins de déterminer combien d'onglets doivent être récupérés puis de compter le nombre d'événements SSTabRestored. -

-

Utilisation de l'API de restauration de session

-

Cette section propose quelques exemples simples sur l'emploi de l'API de restauration de session. -

-

Sauvegarder une valeur avec un onglet

-

Le code suivant permet d'attacher un couple clef/valeur à un onglet de telle façon que lorsque l'onglet est récupéré, ce couple le soit également. -

-
 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
-                             getService(Components.interfaces.nsISessionStore);
- var currentTab = getBrowser().selectedTab;
- var dataToAttach = "Je veux attacher ceci";
- ss.setTabValue(currentTab, "key-name-here", dataToAttach);
-
-

Ce code définit une valeur de dataToAttach à la clef "key-name-here". La donnée peut être n'importe quel objet JavaScript. -

-

Lire une valeur sauvegardée

-

Vous pouvez lire une valeur associée à un onglet n'importe quand (que l'onglet soit ou non dans un processus de récupération) en utilisant le code suivant : -

-
 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
-                             getService(Components.interfaces.nsISessionStore);
- var currentTab = getBrowser().selectedTab;
- var retrievedData = ss.getTabValue(currentTab, "key-name-here");
-
-

Après l'exécution de ce code, la variable retrievedData contient la valeur sauvegardée correspondante à la clef "key-name-here". La variable retrievedData est indéfinie (undefined) si aucune valeur correspondant à cette clef n'a été sauvegardée. -

-

Effacer une valeur associée à un onglet

-

Pour effacer une valeur d'un onglet, vous pouvez utiliser un code similaire à celui-ci : -

-
 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
-                             getService(Components.interfaces.nsISessionStore);
- var currentTab = getBrowser().selectedTab;
- deleteTabValue(currentTab, "key-name-here");
-
-

Remarques

-

Les fonctions de restauration et de lecture des valeurs d'une fenêtre fonctionnent exactement comme les fonctions pour les onglets portant des noms similaires. -

-

Voir également

-

nsISessionStore -

diff --git "a/files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/index.html" "b/files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/index.html" deleted file mode 100644 index 1be4236d13..0000000000 --- "a/files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/index.html" +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Développement de modules complémentaires -slug: Archive/Add-ons/Développement_de_modules_complémentaires -translation_of: Archive/Add-ons/Developing_add-ons ---- -

Les logiciels basés sur Mozilla sont typiquement extensibles au travers de modules complémentaires. Trois principaux types de modules existent : les extensions, les thèmes et les plugins. Cette page vous aidera à trouver les informations dont vous aurez besoin pour créer des modules complémentaires pour Firefox, Thunderbird ou d'autres logiciels basés sur la plateforme Mozilla, ainsi que pour les distribuer.

- - - - - - - - - - -
-

Modules complémentaires

-
-
-
- Soumettre un module complémentaire sur AMO
-
- Fournit des informations pour les développeurs de modules afin de les aider à empaqueter et délivrer leur modules. Ces informations concernent notamment addons.mozilla.org, le site de distribution de modules de Mozilla.
-
- Extensions
-
- Les extensions ajoutent de nouvelles fonctionnalités à des applications Mozilla comme Firefox, SeaMonkey et Thunderbird. Cela peut aller d'un simple bouton de barre d'outils à une toute nouvelle fonctionnalité.
-
- Plugins
-
- Informations sur la manière de créer des plugins, des composants binaires permettant aux logiciels basés sur Mozilla d'afficher du contenu non gérés nativement.
-
-
-
-
- Thèmes
-
- Les thèmes permettent aux utilisateurs de personnaliser l'apparence de leur interface dans les applications basées sur Mozilla.
-
- Plugins de moteurs de recherche
-
- Firefox permet d'utiliser des plugins de moteurs de recherche, avec lesquels le champ de recherche peut gérer différents moteurs de recherche.
-
- La plateforme Mozilla
-
- Informations concernant la plateforme Mozilla, toutes ses technologies et API, ainsi que la manière de les utiliser dans vos propres projets.
-
-
-

 

diff --git a/files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html b/files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html deleted file mode 100644 index 146f12cc47..0000000000 --- a/files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Gestion de suggestions dans les plugins de recherche -slug: Archive/Add-ons/Gestion_de_suggestions_dans_les_plugins_de_recherche -tags: - - Plugins - - Plugins_de_recherche -translation_of: Archive/Add-ons/Supporting_search_suggestions_in_search_plugins ---- -

MozSearch offre la gestion des suggestions de recherche ; au fur et à mesure que l'utilisateur saisit des caractères dans la barre de recherche, Firefox 2 demande à l'URL spécifiée par le plugin de lui fournir des suggestions de recherche. -

Une fois la liste récupérée, elle est affiche dans une liste déroulante en dessous de la barre de recherche, permettant à l'utilisateur de sélectionner une des propositions s'il le souhaite. S'il continue à ajouter des caractères, de nouvelles suggestions sont demandées au moteur de recherche, puis utilisées pour rafraîchir la liste précédente. -

Les plugins de recherche Yahoo et Google inclus dans Firefox 2 utilisent la suggestion de recherche. -

-

Implémenter le support de la suggestion dans le plugin de recherche

-

Pour offrir des suggestions de recherche, un plugin doit comporter un élément <Url> supplémentaire dont l'attribut type vaut "application/x-suggestions+json". (Cela signifie que le plugin d'un moteur de recherche offrant des suggestions de recherche contient deux éléments <Url>, l'autre étant l'URL de recherche text/html principale.) -

Par exemple, le plugin de recherche Yahoo contient l’élément <Url> suivant : -

-
<Url type="application/x-suggestions+json" template="http://ff.search.yahoo.com/gossip?output=fxjson&command={searchTerms}"/>
-
-

Si l'utilisateur entre « fir » dans la barre de recherche, puis fait une pause, Firefox remplace {searchTerms} par « fir » et contacte cette URL : -

-
<Url type="application/x-suggestions+json" template="http://ff.search.yahoo.com/gossip?output=fxjson&command=fir"/>
-
-

Les résultats sont utilisés pour créer la liste de la boite de suggestion. -

Consultez la page de création d'un plugin MozSearch pour plus de détails sur l’implémentation d’un plugin de recherche. -

-

Implémenter le support des suggestions de recherche sur le serveur

-

La plus grande partie du travail de la suggestion de recherche se passe du coté du serveur. Si vous êtes concepteur de site Web et que vous désirez proposer des suggestions de recherche, vous devez prévoir la possibilité de renvoyer des suggestions correspondant à un terme de recherche avec la Notation JSON (en) (JavaScript Object Notation). -

Quand le navigateur désire obtenir une liste de correspondances possibles pour un terme recherché, il envoie une requête HTTP GET à l'URL spécifiée dans l'élément <Url>. -

Votre serveur doit alors décider des suggestions à faire en utilisant le moyen qu'il jugera adéquat, puis construire un JSON composé d'au minimum deux, et au maximum quatre éléments : -

-
chaîne de recherche -
Le premier élément du JSON est le terme de recherche qui a été communiqué au serveur. Cela permet à Firefox de vérifier que les suggestions correspondent au terme de recherche actuel. -
-
liste de suggestions -
Un tableau des termes de recherche suggérés. Le tableau est placé entre crochets. Par exemple : <tt>["terme 1", "terme 2", "terme 3", "terme 4"]</tt> -
-
descriptions -
Cet élément optionnel est un tableau de descriptions correspondant à chacun des éléments de la liste de suggestions. Il peut s'agir de n'importe quelle information supplémentaire que le moteur de recherche désire voir affichée par le navigateur, comme nombre de résultats disponibles pour une suggestion. -
-
Les descriptions ne sont pas supportées dans Firefox 2, et sont ignorées lorsqu’elles sont spécifiées.
-
URL spécifiques associées à des requêtes -
Cet élément optionnel est un tableau d'URL alternatives pour chacune des suggestions de la liste de suggestions. Par exemple, si pour une suggestion donnée vous préférez donner un lien vers une carte plutôt qu'une simple page de résultats de recherche, vous pouvez retourner une URL vers une carte dans ce tableau. -
-
Si vous ne spécifiez pas d'URL spécifique pour un élément de la liste de suggestions, c'est la requête par défaut, décrite par l’élément <Url> dans la description XML du plugin, qui sera employée. -
-
Les URL associées à des requêtes ne sont pas supportées dans Firefox 2, et sont ignorées lorsqu'elles sont spécifiées.
-

Ainsi, si le terme de recherche est « fir », et si vous ne désirez renvoyer ni les descriptions, ni les URL associées aux requêtes, vous pouvez renvoyer le JSON suivant : -

-
["fir", ["firefox", "first choice", "mozilla firefox"]]
-
-

Remarquez que dans cet exemple, seules la chaîne de recherche et la liste de suggestions sont spécifiées, et les éléments optionnels sont négligés. -

Votre liste de suggestions peut comporter autant d'éléments que vous le souhaitez, mais elle devrait être limitée à une longueur raisonnable étant donné que l'affichage doit être rafraîchi au fur et à mesure que l'utilisateur compose son terme de recherche. Enfin, notez que vous êtes entièrement libre quant à la méthode que vous employez pour sélectionner les suggestions à envoyer. -

-
-
diff --git a/files/fr/archive/add-ons/index.html b/files/fr/archive/add-ons/index.html deleted file mode 100644 index d1851bd7ee..0000000000 --- a/files/fr/archive/add-ons/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Add-ons -slug: Archive/Add-ons -translation_of: Archive/Add-ons ---- -

In progress. Archived add-ons documentation.

- -

diff --git "a/files/fr/archive/add-ons/installation_d_extensions_et_de_th\303\250mes_depuis_une_page_web/index.html" "b/files/fr/archive/add-ons/installation_d_extensions_et_de_th\303\250mes_depuis_une_page_web/index.html" deleted file mode 100644 index 3d0300b2a6..0000000000 --- "a/files/fr/archive/add-ons/installation_d_extensions_et_de_th\303\250mes_depuis_une_page_web/index.html" +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Installation d'extensions et de thèmes depuis une page Web -slug: Archive/Add-ons/Installation_d_extensions_et_de_thèmes_depuis_une_page_Web -tags: - - Extensions - - Themes -translation_of: Archive/Add-ons/Installing_Extensions_and_Themes_From_Web_Pages ---- -

Il existe de nombreuses façons d'installer des extensions et des thèmes depuis des pages Web, parmi lesquelles un lien direct vers les fichiers XPI et l'utilisation de l'objet InstallTrigger.

-

Les auteurs d'extensions et de pages Web sont encouragés à utiliser la méthode décrite ci-dessous pour installer des fichiers XPI, c'est celle qui est la plus agréable pour l'utilisateur.

-

Exemple de script Web

-
<script type="application/x-javascript">
-<!--
-function install (aEvent)
-{
-  var params = {
-    "Foo": { URL: aEvent.target.href,
-             IconURL: aEvent.target.getAttribute("iconURL"),
-             Hash: aEvent.target.getAttribute("hash"),
-             toString: function () { return this.URL; }
-    }
-  };
-  InstallTrigger.install(params);
-
-  return false;
-}
--->
-</script>
-
- <a href="http://www.example.com/foo.xpi"
-   iconURL="http://www.example.com/foo.png"
-   hash="sha1:28857e60d043447c5f4550853f2d40770b326a13"
-   onclick="return install(event);">Installer l'extension</a>
- 
-
-

Examinons ce code pièce par pièce. L'élément HTML <a> est le lien d'installation. L'attribut href contient un lien direct vers le fichier XPI de l'extension, c'est ce qui sera affiché dans la barre d'adresse lorsque le pointeur survole le lien. Les visiteurs peuvent enregistrer le fichier XPI sur leur disque facilement en cliquant dessus et en choisissant « Enregistrer sous… »

-

Lorsqu'on clique sur le lien, il appelle la fonction install en passant l'objet d'évènement en paramètre.

-

L'installation crée d'abord un bloc de paramètres :

-
var params = {
-  "Foo": { URL: aEvent.target.href,
-           IconURL: aEvent.target.getAttribute("iconURL"),
-           Hash: aEvent.target.getAttribute("hash"),
-           toString: function () { return this.URL; }
-};
-
-

Ceci spécifie le nom (Foo) à afficher dans le dialogue de confirmation, l'URL où trouver l'extension (qui, souvenez-vous, est l'attribut href du lien), l'URL de l'icône à afficher dans le dialogue de confirmation, une empreinte de contrôle du fichier xpi (pour protéger contre les téléchargements corrompus), et une fonction toString qui permettra à ce code de fonctionner avec les versions 0.8 et antérieures de Firefox. Vous pouvez également utiliser l'ancien style de bloc de paramètres ({ "Foo": aEvent.target.href  }) si vous le désirez et que vous n'avez pas d'icône à afficher dans le dialogue de confirmation.

-

InstallTrigger.install est ensuite appelée pour installer l'élément défini dans le bloc de paramètres.

-
return false;
-
-

Cette dernière partie est la plus importante : la fonction d'installation doit renvoyer false afin que, lorsqu'on clique sur le lien, seul le script soit exécuté et le href du lien ne soit pas chargé dans le navigateur. Si vous oubliez cette étape, l'utilisateur risque de voir deux dialogues d'installation, étant donné que vous avez effectivement invoqué deux requêtes d'installation : une avec InstallTrigger et l'autre en essayant de charger directement le fichier XPI.

-

Paramètres disponibles pour l'objet d'installation

-

La méthode InstallTrigger.install accepte un objet JavaScript en paramètre, dont plusieurs propriétés seront utilisées au cours de l'installation.

-

URL

-

La propriété URL spécifie l'adresse URL du fichier XPI à installer. Cette propriété est obligatoire.

-

IconURL

-

La propriété IconURL indique une icône à utiliser dans le dialogue d'installation. Cette propriété est facultative. Si aucune icône n'est spécifiée, l'icône par défaut sera utilisée, habituellement une pièce de puzzle verte. L'icône peut être dans n'importe quel format d'image accepté par Firefox, et doit être d'une taille de 32×32 pixels.

-

Hash

-

La propriété Hash spécifie une empreinte cryptographique du contenu du fichier XPI. Celle-ci est utilisée pour vérifier le fichier téléchargé, pour empêcher d'installer, par exemple, un fichier corrompu servi par un serveur de téléchargement miroir. Toute fonction de hachage supportée par nsICryptoHash peut être utilisée. L'empreinte est spécifiée de la manière fonction de hachage:empreinte de contrôle, par exemple, sha1:28857e60d043447c5f4550853f2d40770b326a13.

-

toString()

-

La propriété toString() devrait renvoyer l'URL du fichier XPI, pour la compatibilité avec les versions de Firefox antérieures à 1.0, et d'autres applications comme Seamonkey.

-

Thèmes

-

À peu près tout ce qui est décrit ci-dessus s'applique également aux thèmes, sauf qu'il faut utiliser la fonction installChrome. Comme beaucoup de sites installaient des extensions en donnant un lien direct vers un fichier XPI en se reposant sur la gestion de contenu interne au navigateur pour invoquer la fenêtre de confirmation, certains procèdent (incorrectement) de même pour les fichiers JAR de thèmes et se demandent pourquoi ils ne sont pas détectés et installés automatiquement. En fait, XPI est une extension spécifique à Mozilla, et ce format peut donc être géré de façon spéciale, mais ce n'est pas le cas de JAR. Tous les fichiers .jar ne sont pas des thèmes pour Firefox, donc si vous cliquez sur un lien vers un .jar vous verrez un dialogue d'enregistrement de fichier. Pour cette raison, vous devriez toujours utiliser l'API InstallTrigger pour installer des thèmes.

-

Une note à propos d'updateEnabled()

-

InstallTrigger expose une fonction appelée updateEnabled que certains peuvent être tentés d'appeler avant InstallTrigger.install. Ce n'est pas nécessaire étant donné que l'installation appelle elle-même updateEnabled en interne. De plus, l'appel à updateEnabled peut causer des problèmes si votre site de distribution n'est pas dans la liste blanche de l'utilisateur, parce que Firefox affiche le message « Installation bloquée » uniquement lorsque installChrome est appelé, ou lorsqu'un fichier XPI est chargé. Donc, si vous avez du code qui ressemble à ceci :

-
if (InstallTrigger.updateEnabled())
-  InstallTrigger.install({"MonExtension": "foo.xpi"});
-
-

… et que votre site n'est pas dans la liste blanche, lorsque l'utilisateur déclenchera ce code, updateEnabled renverra false étant donné que votre site n'est pas dans la liste autorisée, et puisque c'est updateEnabled qui a fait ce constat et pas une demande d'installation, l'utilisateur ne verra rien du tout se produire.

-

Par conséquent, vous devriez uniquement utiliser updateEnabled pour afficher du contenu dans la page pour avertir l'utilisateur que l'installation est désactivée, ou que votre site n'est pas dans la liste blanche, et ne pas le placer dans le chemin de code menant à l'installation.

-

(* de toute manière, ceci ne doit pas vous empêcher de développer des systèmes d'installation plus ambitieux, cette documentation est uniquement fournie comme un guide dans l'espoir que la plupart des distributeurs d'extensions l'utiliseront. Elle se comporte en effet bien dans la plupart des cas.)

-

diff --git a/files/fr/archive/add-ons/paquetage_multi_extensions/index.html b/files/fr/archive/add-ons/paquetage_multi_extensions/index.html deleted file mode 100644 index 946292425d..0000000000 --- a/files/fr/archive/add-ons/paquetage_multi_extensions/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Paquetage multi extensions -slug: Archive/Add-ons/Paquetage_multi_extensions -tags: - - API_du_toolkit - - Extensions -translation_of: Archive/Add-ons/Multiple_Item_Packaging ---- -
-

From the release of Firefox 53, multiple item extension packages are no longer supported and will not load. As a consequence, these packages are no longer accepted by AMO.

-
- -

Un paquetage multi extensions fournit la possibilité de conditionner plusieurs paquets installables qui peuvent alors être chargés et installés par un utilisateur, ou fournis pré-empaquetés avec une application ou un programme externe. Chaque paquetage multi extensions doit utiliser un fichier install.rdf et a les mêmes exigences et possibilités qu'une extension, à l'exception de ce qui suit :

- -

Si l'utilisateur installe une version précédente de l'extension, il n'existe aucun moyen de le prévenir ni de l'en empêcher.

- -

 

- -

Structure d'un paquetage multi extensions

- -

La structure d'un paquetage multi extensions est la forme simplifiée d'un paquet installable et requiert un fichier avec l'extension .xpi. Un paquetage multi extensions peut contenir aussi bien des extensions (fichiers .xpi) que des thèmes (fichiers .jar). La structure de base est indiquée ci-dessous:

- -
/install.rdf                        Manifeste d'installation
-/extension1.xpi                     Extension
-/extension2.xpi                     Extension
-/theme1.jar                         Theme
-/theme2.jar                         Theme
-...
-
- -

Le gestionnaire d'extension lira le manifeste d'installation pour déterminer si c'est un paquetage multi extensions et démarrera alors automatiquement l'installation de chaque paquet qu'il contient. Aucun autre fichiers, hormis le manifeste d'installation et les fichiers .jar ou .xpi, ne sera extrait ni utilisé.

- -

install.rdf

- -

Un paquetage multi extensions n'a pas les mêmes obligations qu'une extension pour son manifeste d'installation. Les seuls éléments requis sont em:id, em:targetApplication, et em:type.

- -

Pour que les gestionnaires d'extensions de Firefox et Thunderbird 1.5 déterminent la nature du paquetage multi extensions, l'élément em:type spécifié dans votre install.rdf doit être à 32 et indiqué comme <em:type NC:parseType="Integer">32</em:type>. L'espace de nommage XML xmlns:NC="http://home.netscape.com/NC-rdf#" doit aussi être déclaré dans votre install.rdf comme indiqué ci-dessous:

- -
...
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:NC="http://home.netscape.com/NC-rdf#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <!-- nsIUpdateItem type for a Multiple Item Package -->
-    <em:type NC:parseType="Integer">32</em:type>
-...
- -

Pour les gestionnaires d'extensions de Firefox et Thunderbird 2.0, vous pouvez utiliser la précédente syntaxe ou <em:type>32</em:type> comme indiqué ci-dessous:

- -
...
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <!-- nsIUpdateItem type for a Multiple Item Package -->
-    <em:type>32</em:type>
-...
- -

En spécifiant em:targetApplication, l'élément minVersion indiqué doit être l'élément minVersion le plus élevé et l'élément maxVersion indiqué doit être l'élément maxVersion le plus bas de tous les paquets installables par le paquetage multi extensions pour l'élément em:targetApplication. Sinon chaque paquet incompatible ne sera pas installé, à moins qu'un test de compatibilité découvre une information de compatibilité mise à jour qui le rendrait compatible.

- -

Installation

- -

L'installation peut être effectuée en utilisant les méthodes existantes pour les extensions/thèmes et la même interface utilisateur est employée pour un paquetage multi extensions (les paquets contenus dans le paquetage multi extensions ne seront pas listés). Cela permet aussi d'afficher l'information de signature pour le paquetage multi extensions.

- -

Si un gestionnaire (le gestionnaire d'extensions/thèmes par exemple) est affiché après le chargement du paquetage multi extensions, le gestionnaire affichera chaque paquet contenu dans celui-ci, de la même manière que si l'utilisateur avait choisi d'installer plusieurs paquets simultanément. Le gestionnaire n'affichera pas le paquetage multi extensions dans la liste des paquets, un fois le chargement terminé du paquetage multi extensions.

- -

Références officielles de l'API du toolkit

- -

Official References. Do not add to this list without contacting Benjamin Smedberg. Note that this page is included from the pages listed below. So: Don't Add Breadcrumbs! -

-

diff --git "a/files/fr/archive/add-ons/t\303\251l\303\251charger_du_json_et_du_javascript_dans_une_extension/index.html" "b/files/fr/archive/add-ons/t\303\251l\303\251charger_du_json_et_du_javascript_dans_une_extension/index.html" deleted file mode 100644 index bdc5b7d9b5..0000000000 --- "a/files/fr/archive/add-ons/t\303\251l\303\251charger_du_json_et_du_javascript_dans_une_extension/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Télécharger du JSON et du JavaScript dans une extension -slug: Archive/Add-ons/Télécharger_du_JSON_et_du_JavaScript_dans_une_extension -tags: - - AJAX - - Extensions -translation_of: Archive/Add-ons/Downloading_JSON_and_JavaScript_in_extensions ---- -

Une pratique courante utilisée par de nombreuses extensions est d'utiliser XMLHttpRequest ou un mécanisme similaire pour charger du code JavaScript ou des données au format JSON depuis un site distant. Le contenu récupéré est ensuite interprété avec la fonction eval(). Cette pratique est dangereuse, et une extension qui l'utiliserait ne pourrait pas franchir l'étape de la revue de code pour être hébergée sur le site AMO

-

Cette pratique est dangereuse car le code ainsi interprété obtient les mêmes droits que l'extension, c'est à dire qu'il a un accès complet au chrome, donc à la machine de l'utilisateur, sur laquelle il peut faire ce qu'il veut. L'extension n'a aucun moyen de s'assurer que le site à partir duquel elle récupère du code ou des données n'a pas été piraté, et que le code récupéré est sans danger. AMO prend ce risque très au sérieux.

-

Il existe heureusement un moyen de contourner ce problème.

-

Télécharger du JSON

-

Pour interpréter des données formatées en JSON, les développeurs ne devraient pas utiliser eval() mais plutôt une des méthodes indiquées sur cette page. Ces méthodes protègent contre du code malicieux, par exemple en garantissant que l'object JSON ne contient que des propriétés, et qu'aucune de ses éventuelles fonctions ne sera exécutée. Pour décoder du JSON, utilisez une fonction faite pour ça, pas eval() !

-

Télécharger du JavaScript

-

Il arrive que du code JavaScript soit téléchargé d'un serveur distant et exécuté dans l'extension. Par exemple si le développeur veut que son extension soit toujours à jour, et ne pas faire appel au mécanisme de mise à jour à chaque modification de code. Dans ce cas, le code téléchargé devrait être exécuté dans un bac à sable pour protéger l'extension et la machine sur laquelle elle s'exécute.

-

Pour exécuter ce code dans un environnement protégé, il faut faire appel au composant Components.utils.evalInSandbox(). Le code JavaScript est exécuté dans un bac à sable avec tous les objets "sûrs" avec lesquels il doit communiquer. Cette méthode n'est cependant pas sans danger, et les développeurs devraient lire attentivement la documentation pour s'assurer que le code non sûr ne risque pas de sortir de ce contexte protégé

-

diff --git "a/files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/index.html" "b/files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/index.html" deleted file mode 100644 index ab057e896c..0000000000 --- "a/files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/index.html" +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: 'Versions d''une extension, mise à jour et compatibilité' -slug: 'Archive/Add-ons/Versions_extension,_mise_à_jour_et_compatibilité' -tags: - - Extensions -translation_of: 'Archive/Add-ons/Extension_Versioning,_Update_and_Compatibility' ---- -

Versions d'un module

- -

Les modules doivent spécifier leurs versions en utilisant le Format de version du toolkit. Il s'agit approximativement d'une chaîne de caractères découpée par des points, comme par exemple :

- - - -
Note : Avant Firefox 1.5, un format de version plus basique était utilisé : major.minor.release.build[+] où seuls des chiffres étaient permis. Le format de version du toolkit gère la numérotation des versions de Firefox mais il permet une plus grande flexibilité.
- -

Comment les applications déterminent la compatibilité

- -

Lors de l'installation de modules, les applications regardent les entrées de targetApplication dans le fichier install.rdf du module. L'id de cette entrée doit correspondre exactement à l'id de l'application. De plus, les valeurs minVersion et maxVersion de cette entrée doivent former un intervalle comprenant la version de l'application.

- -

Si l'application possède une entrée targetApplication pour une version incompatible, elle tentera alors d'obtenir des informations de mise à jour à partir de l'updateURL du module.

- -

Si le fichier install.rdf contient des entrées targetPlatform, la plateforme devant faire tourner l'application doit y être listée. Dans le cas contraire, l'installation sera refusée.

- -

-

Note concernant Firefox 3

-

Dans des applications basées sur Gecko 1.9, vous pouvez également utiliser une entrée targetApplication avec une id toolkit@mozilla.org, et des valeurs minVersion et maxVersion qui correspondent à la version du toolkit faisant tourner l'application. Cela vous permet que d'installer votre module sur n'importe quelle application basée sur ce toolkit.

-

- -

Passer outre les tests de compatibilité

- -

Pour des besoins de tests, vous pouvez dire à l'application d'ignorer quelque peu les vérifications de compatibilité lors de l'installation de modules. Créez simplement une préférence booléenne extensions.checkCompatibility avec la valeur false.

- -
Note : Avant Firefox 1.5, la préférence app.extensions.version servait à outrepasser la version que l'application croyait pouvoir installer normalement.
- -

Choix de minVersion et maxVersion

- -

minVersion et maxVersion doivent spécifier la plage de versions de l'application sur laquelle vous avez fait des tests. En particulier, vous ne devriez jamais spécifier un maxVersion plus grand que la version actuelle de l'application, puisque vous ne connaissez pas les modifications possibles à venir des API et de l'interface utilisateur. Avec la mise à jour de compatibilité, il n'est pas nécessaire de fournir une version entière nouvelle de l'extension simplement pour augmenter son maxVersion.

- -

Pour la valeur maxVersion, il est généralement permis d'utiliser un * à la place de la version mineure de l'application supportée, par exemple 2.0.0.* signifiera que vous supporterez toutes les mises à jour mineures de la version 2.

- -

N'allez pas imaginer que * dans une version représente n'importe quelle version. Le * représente en fait un nombre infiniment grand et n'a réellement un sens que lorsqu'il est utilisé dans maxVersion. Si vous l'utilisez dans minVersion, vous n'obtiendrez pas le résultat escompté.

- -

Vérification automatique des mises à jour de modules

- -

Les applications vont vérifier périodiquement les mises à jour à installer des modules en récupérant le fichier updateURL. L'information renvoyée peut servir à prévenir l'utilisateur d'une mise à jour d'un module, aussi bien qu'indiquer à l'application qu'il existe des nouvelles versions d'applications compatibles avec ce module.

- -

Mise à jour de compatibilité

- -

Pendant la phase de vérification automatique, les applications examinent à la fois s'il existe des nouvelles versions et des mises à jour de compatibilité concernant la version installée d'un module. Cela signifie que votre manifeste de mise à jour contient une entrée pour la version actuellement installée du module, et l'entrée targetApplication spécifie un maxVersion plus grand, l'application utilisera cette valeur à la place de celle spécifiée dans le fichier install.rdf du module. De ce fait, des modules qui étaient désactivés car incompatibles peuvent s'activer, et des modules qui ne s'installaient normalement pas peuvent être installés.

- -

Format RDF de mise à jour

- -

Si vous hébergez l'updateURL de votre module vous-même, vous devrez alors retourner l'information de version dans un format RDF. Vous trouverez ci dessous un exemple de manifeste de mise à jour. Il liste les informations de 2 différentes versions de l'extension ayant pour id foobar@developer.mozilla.org. Les versions incluses sont 2.2 et 2.5, et chacune d'elles définit une compatibilité avec les versions de 1.5 à 2.0.0.* de Firefox. Pour la version 2.2, un lien https de mise à jour est employé tandis que pour la version 2.5, c'est un lien régulier http avec un hash pour vérifier le fichier récupéré.

- -

Il est important de récupérer correctement l'attribut about du RDF:Description initial. Cette information précisera de quel type de module il s'agit :

- - - -

Dans chacun des exemples qui vont suivre, la séquence des versions au sein de l'élément <RDF:Seq> est significative, les versions plus récentes devant être présentées après les versions plus anciennes. Il n'est pas nécessaire de lister toutes les versions intermédiaires si la dernière version est fournie.

- -
<?xml version="1.0" encoding="UTF-8"?>
-
-<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <!-- Cette ressource de description inclut toutes les informations de mise à jour
-       et de compatibilité pour un unique module ayant l'id foobar@developer.mozilla.org.
-       Vous pouvez lister plusieurs informations de module dans un même fichier RDF. -->
-  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org">
-    <em:updates>
-      <RDF:Seq>
-
-        <!-- Chaque li est une version différente du même module -->
-        <RDF:li>
-          <RDF:Description>
-            <em:version>2.2</em:version> <!-- Ceci est le numéro de version du module -->
-
-            <!-- Un targetApplication pour chacune des applications avec laquelle le module est compatible -->
-            <em:targetApplication>
-              <RDF:Description>
-                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-                <em:minVersion>1.5</em:minVersion>
-                <em:maxVersion>2.0.0.*</em:maxVersion>
-
-                <!-- Ceci est l'emplacement de téléchargement du module -->
-                <em:updateLink>https://www.mysite.com/foobar2.2.xpi</em:updateLink>
-
-                <!-- Une page décrivant les nouveautés de la mise à jour -->
-                <em:updateInfoURL>http://www.mysite.com/updateinfo2.2.xhtml</em:updateInfoURL>
-              </RDF:Description>
-            </em:targetApplication>
-          </RDF:Description>
-        </RDF:li>
-
-        <RDF:li>
-          <RDF:Description>
-            <em:version>2.5</em:version>
-            <em:targetApplication>
-              <RDF:Description>
-                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-                <em:minVersion>1.5</em:minVersion>
-                <em:maxVersion>2.0.0.*</em:maxVersion>
-                <em:updateLink>http://www.mysite.com/foobar2.5.xpi</em:updateLink>
-                <em:updateHash>sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6</em:updateHash>
-              </RDF:Description>
-            </em:targetApplication>
-          </RDF:Description>
-        </RDF:li>
-
-      </RDF:Seq>
-    </em:updates>
-
-    <!-- Une signature est nécessaire seulement si votre module inclut un updateKey dans
-         son fichier install.rdf. -->
-    <em:signature>MIGTMA0GCSqGSIb3DQEBBQUAA4GBAMO1O2gwSCCth1GwYMgscfaNakpN40PJfOWt
-                  ub2HVdg8+OXMciF8d/9eVWm8eH/IxuxyZlmRZTs3O5tv9eWAY5uBCtqDf1WgTsGk
-                  jrgZow1fITkZI7w0//C8eKdMLAtGueGfNs2IlTd5P/0KH/hf1rPc1wUqEqKCd4+L
-                  BcVq13ad</em:signature>
-  </RDF:Description>
-</RDF:RDF>
-
- -

Certaines personnes préfèrent le format alternatif suivant (notez que beaucoup d'informations ont été retirées de cet exemple par souci de clarté) :

- -
<?xml version="1.0" encoding="UTF-8"?>
-
-<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <!-- Cette ressource de description inclut toutes les informations de mise à jour
-       et de compatibilité pour un unique module ayant l'id foobar@developer.mozilla.org.
-       Vous pouvez lister plusieurs informations de module dans un même fichier RDF. -->
-  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org">
-    <em:updates>
-      <RDF:Seq>
-        <!-- L'attribut resource pointe vers une entrée RDF:Description correspondante
-             plus bas. L'uri peut être ce que vous voulez -->
-        <RDF:li resource="urn:mozilla:extension:foobar@developer.mozilla.org:2.2"/>
-        <RDF:li resource="urn:mozilla:extension:foobar@developer.mozilla.org:2.5"/>
-      </RDF:Seq>
-    </em:updates>
-    <em:signature>MIGTMA0GCSqGSIb3DQEBBQUAA4GBAMO1O2gwSCCth1GwYMgscfaNakpN40PJfOWt
-                  ub2HVdg8+OXMciF8d/9eVWm8eH/IxuxyZlmRZTs3O5tv9eWAY5uBCtqDf1WgTsGk
-                  jrgZow1fITkZI7w0//C8eKdMLAtGueGfNs2IlTd5P/0KH/hf1rPc1wUqEqKCd4+L
-                  BcVq13ad</em:signature>
-  </RDF:Description>
-
-  <!-- Ceci représente la même description qu'avec le li de l'exemple précédent -->
-  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org:2.2">
-    <em:version>2.2</em:version>
-
-    <!-- suppression du contenu ici -->
-
-  </RDF:Description>
-
-  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org:2.5">
-    <em:version>2.5</em:version>
-
-    <!-- suppression du contenu ici -->
-
-  </RDF:Description>
-
-</RDF:RDF>
-
- -

Fournir des détails sur les mises à jour

- -

- -

En général

- -

Il est possible de fournir à l'utilisateur quelques détails sur les nouveautés d'une mise à jour d'un module. Ils seront visibles lorsque l'utilisateur reçoit une notification de mise à jour et devraient lui permettre d'avoir un aperçu rapide des nouvelles fonctionnalités et des problèmes de sécurité résolus.

- -

Pour réaliser cela, vous devez ajouter une entrée updateInfoURL à votre manifeste de mise à jour (voir l'exemple plus haut). La page à cette URL sera récupérée et affichée à l'utilisateur. Puisqu'elle est affichée en dehors du contexte d'une page Web normale, son contenu est énormément assaini, ce qui signifie qu'il n'y a pas beaucoup d'options de formatage disponibles et les scripts et images ne sont pas autorisés.

- - - -

À l'intérieur des listes, utilisez les balises habituelles li pour chaque item.

- -

À l'intérieur des balises h1, h2, h3, p et li, vous pouvez utiliser :

- - - -

La page d'information récupérée doit pour l'instant être totalement valide en XHTML, et doit être servie avec le type MIME application/xhtml+xml.

- -

Vous pouvez ajouter %APP_LOCALE% dans votre updateInfoURL si vous désirez que les informations de locale soient fournis dans l'URL — ceci permet de personnaliser le texte selon la locale de l'utilisateur. Vous pouvez également utiliser les autres chaînes de substitution gérées par updateURL, bien qu'elles soient probablement moins utiles.

- -

Ce que voit l'utilisateur

- -

Le contenu de updateInfoURL sera affiché pour l'utilisateur dans la page des modules complémentaires, dans une liste des mises à jour disponibles. L'utilisateur peut ensuite cliquer sur le bouton Afficher les informations et verra celles-ci sur le côté droit. (notez que l'intitulé du bouton devient Masquer les informations)

- -

Image:Example_updateInfoURL2.png

- -

Mises à jour sécurisées

- -

- -

Gecko 1.9 dispose d'un processus supplémentaire destiné à protéger les utilisateurs contre les attaques de l'homme du milieu ainsi que pendant des mises à jour de modules. Dans le fichier install.rdf du module déjà installé, updateURL doit être défini d'une des façons suivantes :

- - - -

Lorsque vous spécifier une updateKey dans install.rdf, vous devez inclure une signature numérique dans le manifeste de mise à jour ou l'information sera rejetée.

- -

Dans le manifeste de mise à jour délivré par updateURL, updateLink doit être défini d'une des façons suivantes :

- - - -

Toutes les entrées du manifeste de mise à jour qui ne respectent pas ces deux exigences seront ignorées lors de la vérification des nouvelles versions.

- -

Notez que les liens https vers des sites ayant des certificats invalides ou qui redirigent les requêtes vers des sites http échoueront également pour les cas update.rdf et updateLink

- -

Hachages de mise à jour

- -

Afin de vérifier l'intégrité du XPI téléchargé, vous devez fournir une entrée updateHash en même temps que le lien updateLink. Il s'agit d'un hachage généré à partir des données du fichier selon l'un des algorithmes gérés (sha1, sha256, sha384 et sha512). Dans Firefox 3, si la valeur updateLink n'est pas https le hachage doit être fait à l'aide d'un des membres de la famille d'algorithmes sha. L'algorithme de hachage utilisé est placé en préfixe de la chaîne de caractères et séparé par « : ».

- -
  <em:updateHash>sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6</em:updateHash>
-
- -

Note : La valeur de updateHash, doit commencer par la chaîne de l'algorithme de hachage, une erreur courante est d'effacer le préfixe en mettant à jour la valeur de updateHash : sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6

- -

Une erreur est affichée lorsque le hachage d'un fichier téléchargé diffère de son hachage spécifié.

- -

Différents outils peuvent être utilisés pour générer des hachages :

- -

De nombreuses variantes d'Unix fournissent sha1sum, sha256sum et ainsi de suite. Les utilisateurs de Windows peuvent utiliser HashTab pour une utilisation interactive (hors script de compilation). On pensera aussi aux outils GNU pour Windows (en dehors des classiques comme Cygwin), qui peuvent servir en utilisation non interactive :

- -
sha1sum FICHIER
-
- -

On peut encore citer md5deep, qui est multiplateforme :

- -
sha1deep FICHIER
-
- -

OpenSSL peut également générer des hachages :

- -
openssl sha1 FICHIER
-
- -

Sous Windows, HashTab peut servir d'extension au shell… un clic droit vous donnera des valeurs de hachage pour n'importe quel fichier.

- -

De plus, un bug d'amélioration est ouvert pour ajouter une génération automatique de hachages pour les fichiers XPI à l'outil McCoy.

- -

Enfin, tous les langages (de script) populaires offrent cette fonctionnalité, par exemple : Python, Perl: CPAN Digest, PHP.

- -

Signature de manifestes de mise à jour

- -

- -

Si vous souhaitez servir votre RDF de mise à jour depuis un serveur http classique, les applications basées sur Gecko 1.9 auront besoin que vous signez numériquement le manifeste de mise à jour pour garantir que l'information n'est pas altérée entre le moment où vous l'avez créée et celui où les applications la récupèrent. L'outil McCoy doit être utilisé pour signer le RDF de mise à jour.

- -

Les détails techniques du mécanisme de signature dépasse le cadre de ce document, toutefois les bases sont les suivantes :

- -
Première étape — à faire une seule fois, avant de publier le module
- -

L'objectif et d'ajouter updateKey au fichier install.rdf.

- -

L'auteur du module crée une paire de clés cryptée RSA publique/privée.

- -

La partie publique de la clé est encodée en DER et encodée en base 64, puis ajoutée au fichier install.rdf du module dans l'entrée updateKey.

- -
Deuxième étape — à faire à chaque modification du fichier « update.rdf »
- -

L'objectif est de définir la valeur de signature dans update.rdf.

- -

Lorsque l'auteur crée le fichier rdf de mise à jour, un outil sert à le signer en utilisant la partie privée de la clé. Plus simplement, l'information de mise à jour est convertie en chaîne de caractères, puis hachée par un algorithme sha512 et le hachage obtenu est signé grâce à la clé privée. La donnée résultante est encodée en DER, puis encodée en base 64 pour être inclue dans update.rdf et comme une entrée de signature.

- -

Débogage et résolution de problèmes

- -

Les mécanismes de mise à jour peuvent envoyer des informations à la console, et afficher différentes informations pouvant vous aider à résoudre un problème. Pour activer l'affichage des messages :

- -
    -
  1. Définissez la valeur de extensions.logging.enabled à true (en utilisant l'URL about:config).
  2. -
  3. Lancez Firefox en ligne de commande avec l'option -console
  4. -
- -

Si vous rencontrez des problèmes, examinez la sortie en console pour l'id de votre extension, et regardez si des erreurs ont été enregistrées.

diff --git a/files/fr/archive/apps/advanced_topics/index.html b/files/fr/archive/apps/advanced_topics/index.html deleted file mode 100644 index dd21392e76..0000000000 --- a/files/fr/archive/apps/advanced_topics/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Sujets avancés -slug: Archive/Apps/Advanced_topics -tags: - - Applications - - Firefox OS - - Mobile -translation_of: Archive/Apps/Advanced_topics ---- -

Ces articles vous donnerons plus d'informations sur des sujets plus avancés concernant les applications Web.

- -
-
-

Documentation sur l'architecture des applications

- -
-
Architectures des Applications Web
-
Vue d'ensemble de l'architecture à la base du design et de l'implémentation d'un projet d'applications Web.
-
Spécificités de la plateforme pour l'installation d'une application
-
Il y a quelques différences dans la façon dont les applications web sont installées selon les diverses plateformes qui les supportent; cette article va vous aider à les comprendre.
-
Applications Web pour Android
-
Informations à propos de l'installation et du test d'une applications Web sur un appareil Android.
-
- -

Autre documentation

- -
-
Créer une plateforme de téléchargement d'applications en ligne
-
Informations utiles si vous voulez créer votre propre marché d'application en ligne pour vendre et distribuer des applications Web.
-
- -

Tout Voir...

-
- -
-

Tools for app developers
- -
Technology reference documentation
- -
Getting help from the community
-

If you still aren't sure how to do what you're trying to get done, feel free to join the conversation!

- -

Don't forget about the netiquette...

-
-
- -

 

diff --git a/files/fr/archive/apps/index.html b/files/fr/archive/apps/index.html deleted file mode 100644 index 10bb499435..0000000000 --- a/files/fr/archive/apps/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Apps -slug: Archive/Apps -translation_of: Archive/Apps ---- -

In progress. This page includes archived content for Apps, including obsolete web app content, Firefox OS app-related content, etc.

- -

diff --git "a/files/fr/archive/b2g_os/add-ons/d\303\251velopper_des_add-ons_pour_firefox_os/index.html" "b/files/fr/archive/b2g_os/add-ons/d\303\251velopper_des_add-ons_pour_firefox_os/index.html" deleted file mode 100644 index 0f7f9ab464..0000000000 --- "a/files/fr/archive/b2g_os/add-ons/d\303\251velopper_des_add-ons_pour_firefox_os/index.html" +++ /dev/null @@ -1,357 +0,0 @@ ---- -title: Développer des modules pour B2G OS -slug: Archive/B2G_OS/Add-ons/Développer_des_add-ons_pour_Firefox_OS -tags: - - Apps - - CSS - - Extensions - - Firefox OS - - JavaScript - - Manifeste - - Modules - - personnalisations -translation_of: Archive/B2G_OS/Add-ons/Developing_B2G_OS_add-ons ---- -

- -

Les modules sont un concept bien connu dans le monde des navigateurs web, et ce concept a été ajouté à Firefox OS. Un module Firefox OS unique peut étendre les fonctionalités d'une ou plusieurs applications, voire toutes les applications, en incluant les applications système. Cet article est un guide pour la création de votre propre module Firefox OS, avec des conseils, des astuces, et des informations à prendre en compte.

- -
-

Note: Les modules Firefox OS utilisent le système d'extensions WebExtensionns, qui est largement basé sur les extensions de Chrome/Blink, donnant de nombreux avantages sur la façon dont les modules sont créés en terme d'interopérabilité et de fonctionalités. Pour en savoir plus, gardez un œil sur notre documentation grandissante sur WebExtensions.

-
- -
-

Important : Les modules ne sont disponibles que sur Firefox OS 2.5+, et vous aurez besoin d'un nouveau build installé sur votre téléphone pour être sûr que vous avez un support pour le débogage d'extensions dans WebIDE, etc. Soyez sûr d'avoir mis à jour avec le dernier build (2015-27-08 ou plus) sur votre téléphone développeur avant de commencer à développer des modules Firefox OS.

-
- -

Développer des modules

- -

Les modules sont des paquets composés de Javascipt, CSS, et d'autres assets. Cependant, ils ne sont pas autonomes. À la place, le manifeste du module inclut des fonctionnalités spéciales qui définissent les applications auxquelles appliquer le module. Quand les applications sont lancées sur un appareil Firefox OS qui a un module installé, le module est injecté dans l'application qui concorde avec le modèle spécifié dans le champ du fichier manifest.json.

- -

Les modules Firefox OS utilisent les mêmes syntaxe et structure dans leur code que la nouvelle école de modules Firefox utilisant l'API WebExtensions, qui est basée sur le modèle d'extensions de Chrome.

- -

Un exemple simple

- -

Pour comprendre les bases des modules Firefox OS, nous allons présenter un simple exemple qui ajoute une bannière a l'application système, sur laquelle on peut cliquer pour la cacher.

- -

firefox os screenshot showing add-on banner

- -

C'est vraiment basique et trivial, mais cela vous donnera ce qu'il faut pour commencer. Vous pouvez regarder le code de l'exemple sur Github, et installer le module sur votre appareil Firefox OS en clonant le dépôt localement, puis en utilisant WebIDE (voir la section Testing your add-on using WebIDE.) Vous pouvez distribuer le module en utilisant le Marketplace Firefox.

- -

Sachez qu'un module Firefox OS peut faire bien plus que ce qui est listé ici. La documentation de WebExtensions comportera plus d'informations au fil du temps.

- -

L'anatomie d'un module Firefox OS

- -

Dans cette partie, nous allons parcourir le contenu du dépôt du module d'exemple, en expliquant chaque élément. La structure des dossiers ressemble à ça :

- - - -

manifest.json

- -

Remarquez qu'il y a deux fichiers de manifeste dans notre dossier d'exemple de module. Le premier, manifest.json, suit la structure de manifeste Chrome, et est placé dans l'archive extensions.zip avec le CSS, le Javascript et l'icône compris dans le module. Il peut contenir une large palette d'instructions (voir Chrome Manifest File Format), mais pour le moment nous allons nous concentrer sur une petite partie :

- -
{
-  "manifest_version": 1,
-  "name": "Add-on banner",
-  "description": "Firefox OS add-on example",
-  "version": "1.0",
-  "author": "Chris Mills",
-  "content_scripts": [{
-    "matches": ["app://system.gaiamobile.org/index.html"],
-    "css": ["css/style.css"],
-    "js": ["js/index.js"]
-  }],
-  "icons": {
-    "128": "/icons/128.png"
-  }
-}
- -

La plupart de ces champs sont assez explicites, mais nous allons voir les derniers.

- -

Tout d'abord, le champ content_scripts désigne le code qui sera injecté dans les applications sur lesquelles le module est appliqué, en fournissant le chemin des fichiers CSS et Javascript dans les champs css et js. Le champ matches contient un modèle qui spécifie dans quelles applications le code sera injecté. Ce modèle peut prendre différentes formes (voir Chrome Match Patterns), mais pour l'instant nous spécifions simplement app://system.gaiamobile.org/index.html, ce qui affecte uniquement l'application système. Vous pourriez l'appliquer à toutes les applications en utilisant app://*/*.

- -
-

Note : Vous pouvez désigner plusieurs scripts et feuilles de styles en incluant simplement plusieurs éléments dans les tableaux, par exemple "css": ["css/style.css", "css/more.css"].

-
- -
-

Note : Firefox OS ne supporte pas le mot-clé de Chrome <all_urls>.

-
- -

En bas du manifeste nous avons inclus le champ icons, voir la section suivante pour plus d'infos à ce sujet.

- -

update.webapp

- -
-

Note : Vous n'avez pas besoin du manifeste .webapp si vous voulez soumettre un module au Marketplace Firefox, simplement du fichier .zip

-
- -

Le manifeste update.webapp est un manifeste de style Firefox OS, ce qui est sensiblement équivalent à un mini manifeste d'application empaquetée (voir Auto-publication d'applications empaquetées.)

- -

Notre update.webapp ressemblera à ça :

- -
{
-  "name" : "Add-on banner",
-  "description": "Firefox OS add-on example",
-  "developer": { "name": "Chris Mills" },
-  "package_path": "extension.zip",
-  "icons": {
-    "128": "/icons/128.png"
-  }
-}
- -

Encore une fois, ceci est assez explicite.

- -

Le champ le plus important ici est probablement package_path, qui référence l'archive qui contient l'extension.

- -

Vous remarquerez que le champ icons est inclus ici de la même façon que dans manifest.json, update.webapp est le seul endroit où vous avez besoin des informations d'icônes pour le moment, mais nous vous recommendons de les inclure dans les deux au cas où cela deviendrait nécessaire. Le champ icons dirige vers l'icône du module pour être utilisé dans l'application Paramètres de Gaia.

- -

Inclure une icône

- -

Vous devez inclure au moins une icône et la référencer dans votre manifeste, autrement le manifeste ne sera pas validé. Voir la section de référence des icônes de Manifeste pour plus d'informations. 

- -

CSS

- -
-

Important : A cause du bug 1179536, injecter des feuilles de styles ailleurs que dans l'application système est impossible, cela fonctionnera tout de même pour ce tutoriel car le module n'affecte que l'application système, mais pour ajouter des règles de style à une autre application ou page web vous aurez besoin de modifier le style en utilisant JavaScript.

-
- -

Il n'y a rien de spécial à propos du CSS dans cet exemple. La seule chose à garder à l'esprit est de faire attention aux noms de classe et sélecteurs de votre module pour ne pas entrer en conflit avec le CSS de/des application(s).

- -

Par exemple, nous avons enveloppé notre bannière d'exemple dans une <div> avec la classe fxos-banner. Mais vous pourriez tout aussi bien utiliser votre propre code pour votre nom de classe.

- -

JavaScript

- -

Encore une fois, le ficher JavaScript qui fait fonctionner le module ne contient aucune fonctionnalité spéciale (voir le code source JavaScript sur Github). Il est injecté dans l'applicaction avec le CSS spécifié dans le fichier manifest.json.

- -
-

Note : Le code du module est injecté à chaque fois qu'une application qui est référencée par le modèle du manifest.json est lancé. Il est aussi injecté quand les modules sont activés. Quand le module est injecté par le lancement de l'application, tous les fichiers du module sont injectés dans l'application avant que quoi que ce soit dans l'app ne soit initialisé, en incluant le DOM. C'est au développeur du module de gérer les différents cas de lancement (injection immédiate contre injection au lancement), il y a plus d'informations plus bas.

-
- -

Plusieurs autres points sont abordés plus bas.

- -

L'objet window

- -

Les modules ne partagent qu'une représentation du contenu de window. En conséquence, tout ce qui est enregistré dans l'objet window par un module est indisponible dans le code de l'application. Cependant, tout ce qui est dans l'objet window par le code de l'application est disponible aux modules. Le DOM est accessible comme d'habitude.

- -

Injection DOM

- -

Vous pouvez utiliser les APIs JavaScript pour manipuler le DOM de l'application.

- -

Injecter du code au bon moment

- -

Vous devez être prudent pour gérer correctement les cas où un module est injecté dans une application après qu'elle ait été chargée. Un tel scénario peut se produire quand une application est déjà lancée et qu'un module qui la concerne est activé. Dans ce cas, un gestionnaire window.onload ne fonctionnera pas parce que l'événement DOMContentLoaded s'est déjà produit.

- -

Pour l'instant, il n'existe pas de bonne solution à ce problème. En attendant, nous conseillons de vérifier si le DOM a été chargé ou non avant de définir un callback DOMContentLoaded. Ce modèle est utilisé dans la démo :

- -
// En cas d'injection dans une appli déjà lancée au moment où
-// l'appli a été activée, l'initialiser simplement.
-if (document.documentElement) {
-  initialize();
-}
-
-// Sinon, nous devons attendre que le DOM soit prêt avant de
-// lancer l'initialisation car les modules sont en général (toujours ?)
-// injectés *avant* que `document.documentElement` ne soit défini.
-else {
-  window.addEventListener('DOMContentLoaded', initialize);
-}
-
-function initialize() {
-  // ...
-}
-
- -

Empêcher les injections multiples

- -

Enfin, pour empêcher un module d'être injecté à plusieurs reprises dans une instance unique d'application, nous devons vérifier si votre module est déjà présent ou non, de cette manière :

- -
function initialize() {
-  if (document.querySelector('.fxos-banner')) {
-    // Déjà injectée, annulation.
-    return;
-  } else {
-    var body = document.querySelector('body');
-    var fxosBanner = document.createElement('div');
-    fxosBanner.classList.add('fxos-banner');
-    var bannerText = document.createElement('p');
-    var closeBtn = document.createElement('button');
-
-    fxosBanner.appendChild(bannerText);
-    fxosBanner.appendChild(closeBtn);
-    body.appendChild(fxosBanner);
-
-    closeBtn.textContent = 'X';
-    bannerText.textContent = 'Waouh, vous avez une extension installée !';
-
-    closeBtn.onclick = function() {
-      fxosBanner.parentNode.removeChild(fxosBanner);
-    }
-  }
-}
-
- -

Ici donc, nous faisons usage de if (document.querySelector('.fxos-banner')) pour vérifier si la bannière d'exemple existe déjà. Dans l'affirmative, nous quittons la fonction. Si ce n'est pas le cas, la méthode querySelector() renvoie alors null, et nous exécutons le bloc de code qui crée la bannière.

- -

Fonctions de gestion des applis dans les modules

- -

Toutes les fonctions Apps et Mgmt se comportent avec les modules de la même façon qu'avec les applications. Notez cependant qu'elles ne sont disponibles pour les modules que lorsque ces derniers sont injectés dans une application certifiée possédant la permission webapps-manager spécifiée dans le manifeste.

- -

En plus de ces fonctions, un callback onenabledstatechange est exposé aux modules qui sont activés et désactivés. Comme cet événement est déclenché pour tous les modules, il vous faut vérifier lequel d'entre-eux a été activé/désactivé avant de procéder à toute initialisation ou nettoyage.

- -
navigator.mozApps.mgmt.addEventListener('enabledstatechange', function(event) {
-  var app = event.application;
-  if (app.manifestURL === 'https://origin.of.manifest/manifest.webapp') {
-    var wasEnabled = app.enabled;
-    // faire quelque chose de cette information
-  }
-});
-
- -
-

Important :  En raison du bogue 1214155, il n'est pas possible d'ajouter le gestionnaire d'événement enabled state via navigator.mozApps.mgmt.onenabledstatechange = function() {...} : vous devez utiliser la méthode addEventListener comme mentionné ci-dessus.

-
- -

extension.zip

- -
-

Note : Le fichier extension.zip a été laissé dans le dépôt de démo principalement dans un but d'illustration ; la façon dont fonctionne le système est ainsi claire. En réalité, vous n'avez pas besoin d'inclure le zip dans votre répertoire car WebIDE va le générer à votre place lorsque vous installerez le module.

-
- -

L'archive extension.zip contient le code de l'extension et est référencée dans le champ update.webapp package_path — C'est ainsi que Gecko trouve le code à installer. Archivés à l'intérieur, vous trouverez :

- - - -

Le fichier manifest.json se trouve donc à l'intérieur de l'archive et sert à faire référence aux fichiers à injecter et à spécifier quelles sont les applications à affecter.

- -

Tester votre module avec WebIDE

- -

L'outil WebIDE de Mozilla est disponible par défaut dans Firefox pour ordinateur. Pour s'en servir afin d'installer des modules sur votre téléphone, suivez les étapes énumérées ci-dessous :

- -
    -
  1. Assurez-vous d'avoir installé Firefox 43 ou plus récent (il s'agissait de Nightly au moment de la rédaction de cet article). Les modules ne sont pas pris en charge par WebIDE avant cette version.
  2. -
  3. Ouvrez votre navigateur puis l'outil WebIDE (cliquez sur le bouton WebIDE ou allez dans le menu Outils > Développement web > WebIDE.)
  4. -
  5. Vérifiez que le débogage distant est activé sur votre téléphone (Paramètres > Développeur > Définissez "Débogage via USB " sur "ADB et outils de développement".)
  6. -
  7. Branchez votre téléphone sur votre ordinateur avec un câble USB. Vérifiez que vous n'avez pas branché d'autres téléphones en même temps.
  8. -
  9. Dans l'interface de WebIDE, choisissez l'option Sélectionner l'environnement puis sélectionnez votre téléphone, celui-ci devant être listé dans la catégorie Périphériques USB.
  10. -
  11. À ce stade, votre téléphone devrait afficher une demande Autoriser la connexion de débogage USB ?. Choisissez Autoriser.
  12. -
  13. Sélectionnez l'option Ouvrir une application puis choisissez Ouvrir une application empaquetée...
  14. -
  15. Dans le sélecteur de fichiers qui apparaît, naviguez jusqu'au répertoire qui contient votre fichier de manifeste update.webapp et cliquez sur Ouvrir.
  16. -
  17. En supposant qu'il n'y ait aucun avertissement ni erreur, vous pouvez installer votre module sur votre appareil en cliquant sur le bouton "Lecture" situé au centre (Installer et lancer.)
  18. -
  19. Pour voir le module en action, activez-le en choisissant Paramètres > Modules > Module exemple > basculez la case à cocher en haut.
  20. -
- -

Déboguer les modules

- -

Il faut noter qu'à cause du bug 1185464 il n'est pas possible pour l'instant de déboguer les modules avec WebIDE.

- -

Paramètres du module

- -

Vous pouvez contrôler les modules de votre téléphone en allant dans Paramètres > Modules ; vous trouverez à cet endroit une liste de vos modules installés et vous pourrez voir plus d'informations sur chacun d'eux en tapant sur l'entrée correspondante.

- -

firefox os screenshot showing a list of installed add-ons in the settings appinformation screen for an individual addon, with a list of apps this add-on affects, and controls to disable and delete the add-on

- -

Activer/désactiver et supprimer des modules

- -

Par défaut, les modules sont activés après leur installation s'ils sont installés depuis le Marketplace Firefox. Par contre, lorsqu'ils sont installés via WebIDE, ils sont désactivés par défaut.

- -

Vous avez la possibilité d'activer/désactiver des modules manuellement par l'intermédiaire de la case à cocher qui se trouve en haut de la page individuelle du module (accessible dans Paramètres > Modules), ou par programmation en utilisant la fonction navigator.mozApps.mgmt.setEnabled() (voir cet exemple d'utilisation de setEnabled() sur Github.)

- -

Vous pouvez supprimer totalement un module en tapant le bouton Supprimer qui se trouve sur les pages individuelles des applications.

- -

Permissions

- -

Les modules héritent toutes leurs permissions depuis leur application hôte. Demander des permissions dans le manifeste du module (voir update.webapp) n'aura aucun effet et n'exposera au module aucune API qui n'est pas disponible dans l'application hôte.

diff --git a/files/fr/archive/b2g_os/add-ons/index.html b/files/fr/archive/b2g_os/add-ons/index.html deleted file mode 100644 index f09b9d9a97..0000000000 --- a/files/fr/archive/b2g_os/add-ons/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Modules B2G OS -slug: Archive/B2G_OS/Add-ons -tags: - - Add-ons - - Apps - - Extensions - - Firefox OS - - customizations -translation_of: Archive/B2G_OS/Add-ons ---- -

- -
-

Note : Les modules B2G OS sont basés sur l'API WebExtensions qui est également prise en charge par Firefox pour ordinateur à partir de la version 42 et qui se base sur les APIs des extensions utilisées dans Chrome et Opera.

-
- -

Prérequis

- -

Pour commencer à développer des extensions, vous devez suivre les étapes ci-dessous pour effectuer la configuration.

- -

 

- -

1. Activer le débogage USB

- -

 

- -

Dans l'application Paramètres de l'appareil, sélectionnez Développeurs > Débogage via USB > ADB et outils de développement.  Vous devriez maintenant pouvoir déboguer les applications installées avec WebIDE, soit via un câble USB, soit en Wifi (câble USB non requis.)

- -

3. Configurer WebIDE

- -

L'outil WebIDE est un composant de Firefox et peut être utilisé pendant le développement pour installer des modules sur votre téléphone — voir Tester votre module avec WebIDE pour plus d'informations.

- -

Voir aussi

- -

Développer

- - - -

 

- -

Contribuer

- - diff --git a/files/fr/archive/b2g_os/api/alarm_api/index.html b/files/fr/archive/b2g_os/api/alarm_api/index.html deleted file mode 100644 index 8a71386e21..0000000000 --- a/files/fr/archive/b2g_os/api/alarm_api/index.html +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Alarm API -slug: Archive/B2G_OS/API/Alarm_API -translation_of: Archive/B2G_OS/API/Alarm_API ---- -

{{DefaultAPISidebar("Alarm API")}}{{Non-standard_Header}}

- -

The Alarm API allows applications to schedule actions to be run in the future. For example, some applications like alarm-clock, calendar or auto-update might need to utilize the Alarm API to trigger particular device behaviors at specified time points.

- -

By itself, the Alarm API just allows to schedule alarms. An alarm is dispatched to applications through the System Message API, so applications which want to react to alarms have to register themselves to the alarm messages.

- -

Alarms are set using the {{DOMxRef("Navigator.mozAlarms")}} object which is an instance of the {{DOMxRef("MozAlarmsManager")}} interface.

- -
-

Note: The term alarm in the Alarms API is not the same as an alarm used by the Clock app. The Alarms API wakes up applications, the Clock wakes up humans. The Clock uses the Alarm API to be notified when the time is right to wake up humans.

-
- -

Schedule alarms

- -

The first things to do when using alarm is to schedule alarms. There are two kind of alarms based on the respect of the time zone. In both case it's done using the {{DOMxRef("MozAlarmsManager.add()")}} method.

- -
-

Note: If an alarm is not targeted at a specific application, the system will dispatch all the alarms to all the applications listening for alarms.

-
- -
-

Note: You need to use the same URL for setting and receiving an alarm. For example, If you invoke navigator.mozAlarms.add() on foo.html or index.html?foo=bar, but have { "alarm": "/index.html" } in your manifest messages field, you'll never receive the alarm.

-
- -

Alarms ignoring time zones

- -

Those kind of alarms is dispatched based on the local time of the device. If the user of the device changes its time zone, the alarm will be dispatched based on the new time zone. For example, if a user is in Paris and sets an alarm that should be dispatched at 12 PM CET (Central European Time) and that user travels to San Francisco, the alarm will be dispatched at 12 PM PDT (Pacific Daylight Time).

- -
// This the date to schedule the alarm
-var myDate  = new Date("May 15, 2012 16:20:00");
-
-// This is arbitrary data pass to the alarm
-var data    = {
-  foo: "bar"
-}
-
-// The "ignoreTimezone" string is what make the alarm ignoring it
-var request = navigator.mozAlarms.add(myDate, "ignoreTimezone", data);
-
-request.onsuccess = function () {
-  console.log("The alarm has been scheduled");
-};
-
-request.onerror = function () {
-  console.log("An error occurred: " + this.error.name);
-};
- -

Alarms honoring time zones

- -

Those kind of alarms are dispatched based on the time in the time zone that defines when the alarm has been scheduled. If for some reason, the user of the device changes its time zone the alarm will be dispatched based on the original time zone. For example, if a user is in Paris and set an alarm that should be dispatched at 12pm CET (Central European Time) and if that user travel to San Francisco, the alarm will be dispatched at 3 AM PDT (Pacific Daylight Time).

- -
// This the date to schedule the alarm
-var myDate  = new Date("May 15, 2012 16:20:00");
-
-// This is arbitrary data pass to the alarm
-var data    = {
-  foo: "bar"
-}
-
-// The "honorTimezone" string is what make the alarm honoring it
-var request = navigator.mozAlarms.add(myDate, "honorTimezone", data);
-
-request.onsuccess = function () {
-  console.log("The alarm has been scheduled");
-};
-
-request.onerror = function () {
-  console.log("An error occurred: " + this.error.name);
-};
- -

Managing alarms

- -

Once an alarm is scheduled, it's still possible to manage it.

- -

The {{DOMxRef("MozAlarmsManager.getAll()")}} method will return the complete list of alarms currently scheduled by the application. This list is an Array of {{anch("mozAlarm")}} objects.

- -

mozAlarm

- -

{{page("/en-US/docs/Web/API/MozAlarmsManager.getAll","mozAlarm")}}

- -
var request = navigator.mozAlarms.getAll();
-
-request.onsuccess = function () {
-  this.result.forEach(function (alarm) {
-    console.log('Id: ' + alarm.id);
-    console.log('date: ' + alarm.date);
-    console.log('respectTimezone: ' + alarm.respectTimezone);
-    console.log('data: ' + JSON.stringify(alarm.data));
-  });
-};
-
-request.onerror = function () {
-  console.log("An error occurred: " + this.error.name);
-};
- -

The {{DOMxRef("MozAlarmsManager.remove")}} method is used to unschedule an existing alarm.

- -
var alarmId;
-
-// Set an alarm and store it's id
-var request = navigator.mozAlarms.add(new Date("May 15, 2012 16:20:00"), "honorTimezone");
-
-request.onsuccess = function () {
-  alarmId = this.result;
-}
-
-// ...
-
-// Later on, removing the alarm if it exists
-if (alarmId) {
-  navigator.mozAlarms.remove(alarmId);
-}
- -

Handling alarms

- -

Any application can react when an alarm is dispatched by the system. In order to be able to handle any alarms, an application must register itself as an alarm handler. This is done through the System Messaging API in two steps:

- -

First, the applications must include alarm to the messages property of its application manifest with the URL to the document which registers the callback function to be used when an alarm is dispatched.

- -
"messages": [
-  { "alarm": "/index.html" }
-]
- -

Second, the application must bind a callback function with the alarm message. This is done using the {{DOMxRef("Navigator.mozSetMessageHandler()")}} method. This callback function will receive a {{Anch("mozAlarm")}} object containing the data attached to the alarm.

- -
navigator.mozSetMessageHandler("alarm", function (mozAlarm) {
-  alert("alarm fired: " + JSON.stringify(mozAlarm.data));
-});
- -

If an application wants to know if there is a pending alarm at the system level, it's possible to use the {{DOMxRef("Navigator.mozHasPendingMessage()")}} method with the value alarm.

- -
navigator.mozHasPendingMessage("alarm"); 
- -

Permissions for the Alarm API

- -

Please note that while the Alarm API is not privileged or certified, you should still include permissions and messages entries in your manifest.webapp file when including it in an installable open Web app.

- -
{
-  "permissions": {
-    "alarms": {
-      "description": "Required to schedule alarms"
-    }
-  },
-  "messages": [
-    { "alarm": "/index.html" }
-  ]
-}
- -

Specifications

- - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName("Alarm API")}}{{Spec2("Alarm API")}}Initial specification.
- -

Browser compatibility

- -

Supported in Firefox OS 1.0.1.

- -

See also

- - diff --git a/files/fr/archive/b2g_os/api/api_contacts/index.html b/files/fr/archive/b2g_os/api/api_contacts/index.html deleted file mode 100644 index 01422c1af0..0000000000 --- a/files/fr/archive/b2g_os/api/api_contacts/index.html +++ /dev/null @@ -1,272 +0,0 @@ ---- -title: API Contacts -slug: Archive/B2G_OS/API/API_Contacts -tags: - - API - - B2G - - Contact - - Contacts - - Firefox OS - - Guide -translation_of: Archive/B2G_OS/API/Contacts_API ---- -

-

Non standard
- Cette fonctionnalité n'est pas en voie de standardisation au W3C, mais elle est supportée par la plateforme Firefox OS. Bien que son implémentation puisse changer dans le futur et qu'elle n'est pas largement supportée par les différents navigateurs, elle est utilisable pour du code dédié aux applications Firefox OS.

-

- -

-

Cette API est disponible sur Firefox OS pour des applications privilégiées ou certifiées seulement.

-

- -

Résumé

- -

L'API Contacts fournit une interface simple pour gérer les contacts des utilisateurs enregistrés dans le carnet d'adresses du système. Un cas pratique typique de l'API Contacts est l'implémentation d'une application de gestion de carnet d'adresses.

- -
-

Note : Comme les informations personnelles des contacts utilisateurs constituent des données sensibles, seules les applications certifiées et privilégiées sont autorisées à accéder à cette API. L'utilisation des Activités Web pour déléguer les opérations sur les contacts est préconisée pour les autres applications.

-
- -

Gestion des contacts

- -

Les contacts enregistrés dans le carnet d'adresses du système sont accessibles par l'intermédiaire de la propriété navigator.mozContacts, elle-même étant une instance de l'interface ContactManager.

- -

Ajout d'un contact

- -

La création d'une nouvelle entrée dans le carnet d'adresses du système se fait en deux étapes :

- -
    -
  1. Instanciez un nouvel objet mozContact et remplissez toutes les propriétés nécéssaires. L'interface mozContact définit toutes les propriétés possibles pour un contact donné. Ces propriétés sont essentiellement les mêmes que celles définies dans la spécification vCard 4.0, avec les exceptions suivantes : -
      -
    • L'attribut vCard N est divisé en cinq propriétés : familyName, givenName, additionalName, honorificPrefix, honorificSuffix
    • -
    • L'attribut vCard FN a été renommé name
    • -
    • L'attribut vCard GENDER est divisé en deux propriétés : sex, genderIdentity
    • -
    • Faîtes attention : la plupart des propriétés sont des tableaux. Firefox v1.3 vérifie cela de manière bien plus stricte et par conséquent du code qui fonctionnait avec Firefox v1.2 peut ne plus s'exécuter avec Firefox v1.3 à cause de ça.
    • -
    -
  2. -
  3. Utilisez la méthode ContactManager.save() avec l'objet contact comme premier paramètre. La méthode renvoie un DOMRequest pour conserver une trace de la réussite ou de l'échec de l'opération d'enregistrement.
  4. -
- -
// première méthode : définir les propriétés directement
-var person = new mozContact();
-person.givenName  = ["John"];
-person.familyName = ["Doe"];
-person.nickname   = ["No kidding"];
-
-// seconde méthode : utilisation d'un objet
-var contactData = {
-  givenName: ["John"],
-  familyName: ["Doe"],
-  nickname: ["No kidding"]
-};
-
-var person = new mozContact(contactData); // Firefox OS 1.3 prend un paramètre pour initialiser l'objet
-if ("init" in person) {
-  // Firefox OS 1.2 et précédents utilisent une méthode "init" pour initialiser l'objet
-  person.init(contactData);
-}
-
-// enregistre le nouveau contact
-var saving = navigator.mozContacts.save(person);
-
-saving.onsuccess = function() {
-  console.log('nouveau contact enregistré');
-  // Cela actualise la personne telle qu'elle est enregistrée
-  // Elle comporte son ID interne unique
-  // Notez que saving.result est null ici
-};
-
-saving.onerror = function(err) {
-  console.error(err);
-};
-
- -

Recherche d'un contact

- -

Deux méthodes permettent de récupérer un contact depuis le carnet d'adresses du système :

- - - -

Les deux méthodes attendent un paramètre qui est un objet défiinissant les options de filtres et de tri. ContactManager.getAll n'accepte que les options de tri. Ces dernières sont :

- - - -

Et les options de filtre :

- - - -

find renvoie un objet DOMRequest et getAll retourne un objet DOMCursor pour connaître la réussite ou l'échec d'une recherche.

- -

Si la recherche réussit, son résultat est disponible dans la propriété DOMRequest.result, soit dans un tableau d'objets mozContact pour find, soit dans un unique objet mozContact pour getAll. Pour obtenir le résultat suivant dans la liste obtenue avec getAll, appelez la méthode continue() du curseur.

- -
var options = {
-  filterValue : "John",
-  filterBy    : ["givenName","name","nickName"],
-  filterOp    : "contains",
-  filterLimit : 1,
-  sortBy      : "familyName",
-  sortOrder   : "ascending"
-}
-
-var search = navigator.mozContacts.find(options);
-
-search.onsuccess = function() {
-  if (search.result.length === 1) {
-    var person = search.result[0];
-    console.log("Trouvé :" + person.givenName[0] + " " + person.familyName[0]);
-  } else {
-    console.log("Désolé, il n'y a pas de tel contact.")
-  }
-};
-
-search.onerror = function() {
-  console.warn("Aïe ! Quelque chose ne va pas, aucun résultat !");
-};
-
-var allContacts = navigator.mozContacts.getAll({sortBy: "familyName", sortOrder: "descending"});
-
-allContacts.onsuccess = function(event) {
-  var cursor = event.target;
-  if (cursor.result) {
-    console.log("Trouvé : " + cursor.result.givenName[0] + " " + cursor.result.familyName[0]);
-    cursor.continue();
-  } else {
-    console.log("Pas d'autre contact");
-  }
-};
-
-allContacts.onerror = function() {
-  console.warn("Quelque chose s'est mal passée ! :(");
-};
-
- -

Mise à jour d'un contact

- -

Lors de l'obtention d'un contact par l'intermédiaire de find() ou de getAll() (ou après un appel réussi à save() pour un nouveau contact), celui-ci se voit attribuer des méta-données :

- - - -

Actualiser un contact revient globalement à modifier les valeurs de ses propriétés puis à l'enregistrer via un appel à la méthode save().

- -
-

Note : À chaque fois qu'un contact est ajouté, mis à jour ou supprimé, un événement contactchange est déclenché afin d'avoir un suivi de tous les changements apportés au carnet d'adresses du système. Cet événement peut être géré avec la propriété ContactManager.oncontactchange.

-
- -

Suppression d'un contact

- -

Un appel à la méthode ContactManager.remove() va tout simplement supprimer l'objet mozContact qui lui a été transmis.

- -

Dans certains cas limites, il est aussi possible de se débarrasser de tous les contacts. Pour cela, utilisez ContactManager.clear(). Soyez prudent lors de l'appel de cette méthode ; il n'est pas possible de revenir en arrière.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaire
Contacts Manager API
La définition de 'Contacts Manager API' dans cette spécification.
Obsolete 
vCard Format SpecificationIETF RFCRFC 6350
- -

Compatibilité des navigateurs

- -

Nous convertissons les données de compatibilité dans un format JSON. - Ce tableau de compatibilité utilise encore l'ancien format - car nous n'avons pas encore converti les données qu'il contient. - Vous pouvez nous aider en contribuant !

- -
- - -

- -
- - - - - - - - - - - - - - - - - - - -
CaractéristiqueChromeFirefox (Gecko)Internet ExplorerOperaSafari
support basiquePas de supportPas de supportPas de supportPas de supportPas de support
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
CaractéristiqueAndroidChrome pour AndroidFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari Mobile
basic supportPas de supportPas de support18.01.1Pas de supportPas de supportPas de support
-
- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/api/bluetoothstatuschangedevent/index.html b/files/fr/archive/b2g_os/api/bluetoothstatuschangedevent/index.html deleted file mode 100644 index 8474dbd5f8..0000000000 --- a/files/fr/archive/b2g_os/api/bluetoothstatuschangedevent/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: BluetoothStatusChangedEvent -slug: Archive/B2G_OS/API/BluetoothStatusChangedEvent -translation_of: Archive/B2G_OS/API/BluetoothStatusChangedEvent ---- -

{{ apiref("Bluetooth API") }}

- -

{{ non-standard_header() }}

- -

{{ B2GOnlyHeader2('certified') }}

- -

Sommaire

- -

L'API BluetoothStatusChangedEvent donne accès aux informations de modification du statut de l'équipement Bluetooth.

- -

Une modification du statut a lieu lorsqu'un des évènements suivants est détecté :

- - - -

Interface overview

- -
interface BluetoothStatusChangedEvent: Event
-{
-  readonly attribute DOMString address;
-  readonly attribute boolean status;
-};
- -

Properties

- -
-
{{domxref("BluetoothStatusChangedEvent.address")}} {{readonlyinline}}
-
A string representing the address of the device for which the status has changed in the Bluetooth micro-network.
-
{{domxref("BluetoothStatusChangedEvent.status")}} {{readonlyinline}}
-
A boolean representing the current status of the connection. It can be enabled (true) or disabled (false).
-
- -

Methods

- -

None.

- -

Specification

- -

Not part of any specification yet. It should be discussed as part of the W3C's System Applications Working Group.

- -

See also

- - diff --git a/files/fr/archive/b2g_os/api/callevent/index.html b/files/fr/archive/b2g_os/api/callevent/index.html deleted file mode 100644 index 9b140224a9..0000000000 --- a/files/fr/archive/b2g_os/api/callevent/index.html +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: CallEvent -slug: Archive/B2G_OS/API/CallEvent -translation_of: Archive/B2G_OS/API/CallEvent ---- -

- -

-

Non standard
- Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

-

- -

-

Cette API est disponible sur Firefox OS pour des applications internes seulement.

-

- -

L'interface CallEvent de l'API Web Téléphony représente les événements liés aux appels téléphoniques.

- -

Propriétés

- -
-
CallEvent.call Lecture seule
-
Un objet TelephonyCall représantant l'appel à l'origine de l'événement.
-
- -

Examples

- -
// Telephony object
-var tel = navigator.mozTelephony;
-
-// Receive a call
-tel.onincoming = function(e) {
-  var incomingCall = e.call;
-
-  // Answer the call
-  incomingCall.answer();
-};
- -

Specifications

- - - - - - - - - - - - - - - - -
SpecificationStatusComment
Web TelephonyProjetDraft
- -

Browser compatibility

- -

For obvious reasons, support is primarily expected on mobile browsers.

- -

Nous convertissons les données de compatibilité dans un format JSON. - Ce tableau de compatibilité utilise encore l'ancien format - car nous n'avons pas encore converti les données qu'il contient. - Vous pouvez nous aider en contribuant !

- -
- - -

- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic supportPas de supportPas de supportPas de supportPas de supportPas de support
-
- -
- - - - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)Firefox OS (Gecko)IE MobileOpera MobileSafari Mobile
Basic supportPas de support12.0 (12.0)1.0.1Pas de supportPas de supportPas de support
-
- -

See also

- - diff --git a/files/fr/archive/b2g_os/api/data_store_api/index.html b/files/fr/archive/b2g_os/api/data_store_api/index.html deleted file mode 100644 index 8eabb360a4..0000000000 --- a/files/fr/archive/b2g_os/api/data_store_api/index.html +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: Data Store API -slug: Archive/B2G_OS/API/Data_Store_API -tags: - - API - - Certified - - Firefox OS - - Interface - - Non-standard - - Obsolete - - Reference - - WebAPI -translation_of: Archive/B2G_OS/API/Data_Store_API ---- -
-
-

Non-standard
- Cette fonctionnalité ne fait pas partie des normes actuelles du W3C, mais elle est prise en charge sur la plate-forme Firefox OS. Bien que les implémentations puissent changer à l'avenir et qu'il ne soit pas largement pris en charge par les navigateurs, il convient pour une utilisation dans le code dédié aux applications Firefox OS.

-
- -
-

Cette API est disponible sur Firefox OS pour les applications internes uniquement.

-
-
- -
-

L'API Data Store fournit un mécanisme de stockage puissant et flexible que les applications Firefox OS peuvent utiliser pour stocker et partager des données. Il s’agit en fait d’un magasin intermédiaire permettant à plusieurs applications de partager des données entre elles rapidement, efficacement et en toute sécurité, malgré les différences entre les structures de données des API, les formats, etc.

-
- -

Concepts et usages

- -

L'API Data Store a été créée pour permettre à plusieurs applications Firefox OS, avec des structures de données et des mécanismes de stockage potentiellement différents, de créer, de maintenir et de partager efficacement les mêmes objets de données entre elles. Chaque application peut ensuite importer les données dans sa propre base IndexedDB locale pour indexer en fonction de leurs besoins en matière de requête. Cela n'est toutefois pas nécessaire et vous pouvez simplement écrire directement dans le magasin de données de l'API du magasin de données.

- -
-

Note: Pour plus d'informations concernant le fonctionnement de l'API Data Store avec des exemples, consultez notre article Utiliser l'API Data Store.

-
- -
-

Note: L'API Data Store est disponible dans Web Workers, à partir de Firefox 32 (Firefox OS 2.0; voir bug 949325.)

-
- -

Il y a plusieurs raisons d'utiliser cette API, comme :

- - - -

Chaque data store appartient à une application spécifique (comme spécifié par le champ datastores-owned dans le manifeste de l'application - voir Manifest_fields, ci-dessous). Cette propriété donne à l'application le droit de remplir le data store et de déclarer si le magasin de données est readonly (ce qui signifie que les autres applications ne peuvent lire que les données) ou readwrite (ce qui signifie que d'autres applications peuvent modifier les données ainsi que les lire.) Les autres applications peuvent accéder à un data store en le nommant dans le champ datastores-access de son manifeste. 

- -

Lorsqu'une application souhaite accéder à un data store, elle doit appeler Navigator.getDataStores(). La valeur résultante de cette méthode est un objet Promise qui sera résolu avec un tableau d'objets DataStore. À partir de ces objets DataStore, l'application peut lire et modifier des valeurs à l'aide de différentes méthodes du DataStore telles que DataStore.get() et DataStore.insert().

- -
-

Note: L'API Data Store n'impose pas pour le moment de limitations sur l'espace de stockage. Cela sera surement changé dans un futur proche.

-
- -

Gestion du changement et résolution des conflits

- -

Quand plusieurs applications effectuent des changements dans un data store, cela peut créer des conflits. Cependant, toutes les modifications effectuées ( en utilisant DataStore.update(), DataStore.add(), reçoivent un revisionId, un UUID reçu dans l'évenement change est déclenché chaque fois qu'une opération est effectuée sur le data store par une application ayant accès à celui-ci. Cela peut être lu à partir de la propriété DataStore.revisionId

- -

La propriété revisionId peut être incluse en tant que paramètre facultatif dans les méthodes DataStore.add(), DataStore.put(), DataStore.remove(), DataStore.clear(), and DataStore.sync(). Elles utilisent essentiellement revisionId pour éviter les conflit - l'opération est annulée si cette revisionId n'est pas la dernière connue par le data store (c'est-à-dire si une autre application a apporté une modification plus récente).

- -

Lorsque l'événement change est déclenché, il reçoit un objet DataStoreChangeEvent, donnant à l'application l'accès à:

- - - -

Quand une application veut savoir ce qui a changé, elle peut le faire en demandant le "delta" entre le dernier revisionId et l'actuel. Cela s'effectue avec la méthode DataStore.sync() . Vous pouvez autoriser votre application à gérer les changements des données en utilisant sync() lors du démarage de l'application et onchange en lui passant lerevisionId actuel pour vérifier de nouveau.

- -

Filtrage des donnée

- -

Comme indiqué ci-dessus, l'API Data Store n'est pas responsable du filtrage des données ni de la création d'index. Au lieu de cela, elle laisse cela au mécanisme de stockage local de l'application (généralement  IndexedDB); L'API Data Store permet simplement de mettre à jour les index locaux, via l'objet DataStoreCursor, créé lors de l'appel de sync().

- -

Champs du manifest

- -

Le manifest propriétaire du data store DOIT inclure le champ datastores pourrevendiquer la propriété, par exemple :

- -
"datastores-owned": {
-  "myData": {
-    "access": "readwrite",
-    "description": "mon data store"
-  }
-}
-
- -

Vous pouvez inclure différentes propriétés pour représenter différents data stores, et chacun peut utiliser readonly/readwrite pour spécifier si le data store peut être lu / modifié par d'autres applications. Une description est également incluse pour décrire le data store.

- -

Les autres application qui veulent accèder au data store mais qui ne leur appartient pas doivent inclure le champdatastores-access , par exemple :

- -
"datastores-access": {
-  "myData": {
-    "access": "readonly",
-    "description": "Lire et modifier mon data store"
-  }
-}
-
- -

Sans ce champ, la réponse par défaut est "no access". Encore, plusieurs propriétées peuvent être incluses si vous voulez accèder à plusieurs data stores, et un accès readonly ou readwrite peut être mis pour déclarer le type d'accès dont l'application a besoin.

- -

En termes de permissions, le propriétaire du data store gagne toujours contre les applications tières. Si le propriétaire déclare "readonly": true dans le manifest, toutes les applications tières seront readonly, même si elles déclarent "access": "readwrite" dans leur manifest. Bien sûr, cela n’est pas très utile si le propriétaire autorise la modification du magasin de données par des applications tierces. Pour le moment, Data Store est une API certifiée. Il est probable que les privilèges reviendront à la finalisation du modèle de sécurité.

- -
-

Note: Rappelez-vous également que dans de tels cas, vous devez utiliser le champ type de votre manifeste pour déclarer explicitement que votre application est une application interne / certifiée : "type": "certified".

-
- -

Interfaces de l'API Data Store

- -

L'API Data Store contient les interfaces suivantes :

- -
-
DataStore
-
L'interface DataStore représente  un ensemble de données récupérées, et inclut des propriétés standards pour accèder au nom du store, le propriétaire, etc. mais aussi des méthodes pour lire, modifier et syncroniser les données, et le gestionnaire d'évenements  onchange pour réagire aux changements dans les données.
-
DataStoreCursor
-
Cette interface permet à l'application de parcourir une liste d'objets  DataStoreTask représentant l'historique des changements du data store, pour utiliser lors de la syncronisation des données.
-
DataStoreChangeEvent
-
Cette interface représente l'évenement lié à un enregistrement changé dans le data store, par exemple elle est renvoyée une fois qu'une modification est effectuée et que l'événement change est déclenché (voir DataStore.onchange pour le gestionnaire), à utiliser lors de la synchronisation de modifications individuelles.
-
DataStoreTask
-
Cette interface représente un enregistrement changé dans le data store quand  est utilisé pour parcourir l'historique des modifications du data store.
-
- -

Exemples

- -

Nous avons écrit quelques exemples qui vont ensemble, pour expliquer comment différentes applications peuvent avoir différents usages du même data store :

- - - -

Continuez à vous référer à ces exemples et lisez Utilisation de l'API Data Store pour des explications et des exemples de code.

- -
-

Note: Sachez que pour tester des exemples de magasin de données, vous devez vous assurer que vos applications sont internes / certifiées (voir ci-dessus pour les champs de manifeste nécessaires) et utilisez App Manager ou WebIDE pour simuler un environnement dans lequel une application interne / certifiée peut être exécutée. Suivez ces liens pour savoir comment faire cela en utilisant chaque outil: App Manager: Debugger les applications certifiées et WebIDE: Debugger les applications certifiées.

-
- -

Caractéristiques

- - - - - - - - - - - - - - -
CaractéristiquesStatutCommentaires
API Data StoreBrouillon
- - - -

La discussion concernant la création de cette API a eu lieu dans diverses listes de diffusion Mozilla et ailleurs. Vous trouverez un résumé de la discussion et d'autres indications sur le Wiki de Mozilla. Pour plus d'informations et de questions, envoyez un courrier à la liste de diffusion dev-webapi.

- -

Compatibilité

- -
Supporté dans Firefox OS 1.0.1.
- -
Disponible dans web workers dans Firefox OS 2.0.
- -

Voir aussi

- - - - diff --git a/files/fr/archive/b2g_os/api/domapplication/index.html b/files/fr/archive/b2g_os/api/domapplication/index.html deleted file mode 100644 index 59dc92f290..0000000000 --- a/files/fr/archive/b2g_os/api/domapplication/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: App -slug: Archive/B2G_OS/API/DOMApplication -tags: - - API Apps - - Apps -translation_of: Archive/B2G_OS/API/DOMApplication ---- -

-

Non standard
- Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

-

- -

Dans l'API JavaScript Open Web Apps, un objet App est un objet JavaScript qui représente une application qui a été, ou pourrait être, installée par l'utilisateur.

- -

Propriétés

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NomDescriptionType
manifestL'instance actuellement stockée du manifeste de l'application.object
manifestURLOù le manifeste a été trouvé.string
originL'origine de l'application (protocole, hôte, et numéro du port facultatif). Par exemple : http://example.comstring
installOriginL'origine du site qui a déclenché l'installation de l'application.string
installTimeQuand a été installée l'application. Généré à partir de Date().getTime(), représentant le nombre de millisecondes depuis le 1er janvier 1970 à minuit.integer
receiptsUn objet contenant un tableau d'un ou plusieurs reçus. Chaque reçu est une chaîne de caractères. Si il n'y a aucun reçu, sa valeur est null.object ou null
- -

Méthodes

- - - - - - - - - - - - - - - - - - - - - - -
MéthodeDescription
launch()Lance l'application. Ne renvoie aucune valeur.
uninstall()Désinstalle l'application, inclus la suppression des ressources locales. Une confirmation par l'utilisateur peut être nécessaire. Renvoie un objet pendingUninstall.
checkForUpdate()Pour les applications empaquetées. Vérifie si l'application empaquetée a été mise à jour. Renvoie un objet DOMRequest.
- -

Exemple d'un objet App

- -
{
-  manifest: {
-    name: "Add-on Builder",
-    default_locale: "en",
-    installs_allowed_from: [
-      "https://apps-preview-dev.example.com/",
-      "https://apps-preview.example.com/"
-    ],
-    description: "Add-on Builder makes it easy to write, build and test Firefox extensions using common web technologies.",
-    version: "0.9.16.1",
-    developer: {
-      url: "https://builder.addons.mozilla.org/",
-      name: "Mozilla Flightdeck Team"
-    }
-  },
-  origin: "https://builder-addons-dev.example.com",
-  installTime: 1321986882773,
-  installOrigin: "https://apps-preview-dev.example.com",
-  receipts: ["h0dHBzOi8v (la majorité du reçu a été supprimée) Tg2ODtkUp"]
-}
diff --git a/files/fr/archive/b2g_os/api/domrequest/error/index.html b/files/fr/archive/b2g_os/api/domrequest/error/index.html deleted file mode 100644 index 97e50b6908..0000000000 --- a/files/fr/archive/b2g_os/api/domrequest/error/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: DOMRequest.error -slug: Archive/B2G_OS/API/DOMRequest/error -tags: - - DOM -translation_of: Archive/B2G_OS/API/DOMRequest/error ---- -
- -

This property can contain error information in a DOMError object.

- -

Note: This feature is available in Web Workers.

- -

Syntax

- -
var errorname = request.error.name;
-
- -

Where request is a DOMRequest object. This gets the name of the error. See DOMError for the error types.

- -

Specifications

- -

Not part of any current specification.

- -

Browser compatibility

- -

Supported in Firefox 13.
- Available in workers in Firefox 41.

- -

See also

- - diff --git a/files/fr/archive/b2g_os/api/domrequest/index.html b/files/fr/archive/b2g_os/api/domrequest/index.html deleted file mode 100644 index 6fb4e8f968..0000000000 --- a/files/fr/archive/b2g_os/api/domrequest/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: DOMRequest -slug: Archive/B2G_OS/API/DOMRequest -tags: - - DOM - - Référence_du_DOM_Gecko -translation_of: Archive/B2G_OS/API/DOMRequest ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Un objet DOMRequest représente une opération en cours. Il fournit des callbacks qui sont appelés quand l'operation est finit, ainsi qu'une reférence au résultat de l'opération. Une méthode DOM qui initie une opération se poursuivant au cours du temps, retounera un objet DOMRequest que vous pouvez surveiller pour connaitre le déroulement de l'opération

-

Attributs

-
-
- {{ domxref("DOMRequest.onsuccess") }}
-
- Pour définir un callback à appeler quand l'opération représentée par DOMRequest est terminée
-
- {{ domxref("DOMRequest.onerror") }}
-
- Pour définir un callback qui sera appelé si une erreur survient pendant le déroulement de l'opération.
-
- {{ domxref("DOMRequest.readyState") }}
-
- Une chaîne de caractère indiquant si l'opération tourne toujours. Sa valeur est soit "done" ou "pending".
-
- {{ domxref("DOMRequest.result") }}
-
- Le résultat de l'opération.
-
- {{ domxref("DOMRequest.error") }}
-
- Information de l'erreur, si présent.
-
-

Exemple

-

Un exemple de l'utilisation des propriétés onsuccess, onerror, result et error de l'objet DOMRequest.

-
var pending = navigator.mozApps.install(manifestUrl);
-pending.onsuccess = function () {
-  // Enregistre l'objet App renvoyé
-  var appRecord = this.result;
-  alert('Installation réussie !');
-};
-pending.onerror = function () {
-  // Affiche le nom de l'erreur
-  alert('Installation échouée, erreur : ' + this.error.name);
-};
-
-

Compatibilité des navigateurs

-

{{ CompatibilityTable() }}

-
- - - - - - - - - - - - - - - - - - - -
FonctionChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support de base{{ CompatUnknown() }}{{ CompatGeckoDesktop("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-
- - - - - - - - - - - - - - - - - - - - - -
FonctionAndroidChrome pour AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support de base{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatGeckoMobile("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-

Spécification

-

Ne fait actuellement partie d'aucune spécification

diff --git a/files/fr/archive/b2g_os/api/domrequest/onerror/index.html b/files/fr/archive/b2g_os/api/domrequest/onerror/index.html deleted file mode 100644 index 81160a27cb..0000000000 --- a/files/fr/archive/b2g_os/api/domrequest/onerror/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: DOMRequest.onerror -slug: Archive/B2G_OS/API/DOMRequest/onerror -tags: - - DOM - - Référence_du_DOM_Gecko -translation_of: Archive/B2G_OS/API/DOMRequest/onerror ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Résumé

-

Cette propriété renseigne la fonction de callback à appeler quand un {{ domxref("DOMRequest") }} échoue.

-

Syntaxe

-
requete.onerror = fonction;
-
-

requete est un objet {{ domxref("DOMRequest") }} et fonction est une fonction JavaScript à éxecuter quand la requête ne parvient pas à se terminer sans problème.

-

Spécification

-

Ne fait actuellement partie d'aucune spécification.

-

Compatibilité des navigateurs

-

{{ CompatibilityTable() }}

-
- - - - - - - - - - - - - - - - - - - -
FonctionChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support de base{{ CompatUnknown() }}{{ CompatGeckoDesktop("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-
- - - - - - - - - - - - - - - - - - - - - -
FonctionAndroidChrome pour AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support de base{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatGeckoMobile("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-

Voir aussi

- diff --git a/files/fr/archive/b2g_os/api/domrequest/onsuccess/index.html b/files/fr/archive/b2g_os/api/domrequest/onsuccess/index.html deleted file mode 100644 index 454fb8e72a..0000000000 --- a/files/fr/archive/b2g_os/api/domrequest/onsuccess/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: DOMRequest.onsuccess -slug: Archive/B2G_OS/API/DOMRequest/onsuccess -tags: - - DOM - - Référence_du_DOM_Gecko -translation_of: Archive/B2G_OS/API/DOMRequest/onsuccess ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Résumé

-

Cette propriété renseigne la fonction de callback à appeler quand un {{ domxref("DOMRequest") }} se termine sans problème.

-

Syntaxe

-
requete.onsuccess = fonction;
-
-

requete est un objet {{ domxref("DOMRequest") }} et fonction est une fonction JavaScript à executer quand le requête se termine sans problème.

-

Spécification

-

Ne fait actuellement partie d'aucune spécification.

-

Compatibilité des navigateurs

-

{{ CompatibilityTable() }}

-
- - - - - - - - - - - - - - - - - - - -
FonctionChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support de base{{ CompatUnknown() }}{{ CompatGeckoDesktop("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-
- - - - - - - - - - - - - - - - - - - - - -
FonctionAndroidChrome pour AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support de base{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatGeckoMobile("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-

Voir aussi

- diff --git a/files/fr/archive/b2g_os/api/domrequest/readystate/index.html b/files/fr/archive/b2g_os/api/domrequest/readystate/index.html deleted file mode 100644 index 15e22601a4..0000000000 --- a/files/fr/archive/b2g_os/api/domrequest/readystate/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: DOMRequest.readyState -slug: Archive/B2G_OS/API/DOMRequest/readyState -tags: - - DOM - - Référence_du_DOM_Gecko -translation_of: Archive/B2G_OS/API/DOMRequest/readyState ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Résumé

-

Cette propriété est une chaîne de caractères indiquant si une opération {{ domxref("DOMRequest") }} a fini, ou pas, de s'éxecuter.

-

Syntaxe

-
var etat = requete.readyState;
-
-

requete est un objet {{ domxref("DOMRequest") }}.

-

Cette propriété est en lecture seul.

-

Valeur renvoyée

-

La valeur renvoyé est une chaîne de caractères JavaScript dont le contenu est "done" si l'opération est finie ou "pending" si elle ne l'est pas.

-

Spécification

-

Ne fait actuellement partie d'aucune spécification.

-

Compatibilité des navigateurs

-

{{ CompatibilityTable() }}

-
- - - - - - - - - - - - - - - - - - - -
FonctionChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support de base{{ CompatUnknown() }}{{ CompatGeckoDesktop("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-
- - - - - - - - - - - - - - - - - - - - - -
FonctionAndroidChrome pour AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support de base{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatGeckoMobile("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-

Voir aussi

- diff --git a/files/fr/archive/b2g_os/api/domrequest/result/index.html b/files/fr/archive/b2g_os/api/domrequest/result/index.html deleted file mode 100644 index 73efc17722..0000000000 --- a/files/fr/archive/b2g_os/api/domrequest/result/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: DOMRequest.result -slug: Archive/B2G_OS/API/DOMRequest/result -tags: - - DOM - - Référence_du_DOM_Gecko -translation_of: Archive/B2G_OS/API/DOMRequest/result ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Résumé

-

Cette propriété fournit la valeur de résultat pour l'opération d'un {{ domxref("DOMRequest") }}.

-

Syntaxe

-
var resultat = requete.result;
-
-

requête est un objet {{ domxref("DOMRequest") }}.

-

Valeur renvoyée

-

La valeur renvoyée est un objet JavaScript représentant le résultat de l'opération.

-

Spécification

-

Ne fait actuellement partie d'aucune spécification.

-

Compatibilité des navigateurs

-

{{ CompatibilityTable() }}

-
- - - - - - - - - - - - - - - - - - - -
FonctionChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support de base{{ CompatUnknown() }}{{ CompatGeckoDesktop("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-
- - - - - - - - - - - - - - - - - - - - - -
FonctionAndroidChrome pour AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support de base{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatGeckoMobile("13.0") }}{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
-

Voir aussi

- diff --git a/files/fr/archive/b2g_os/api/index.html b/files/fr/archive/b2g_os/api/index.html deleted file mode 100644 index 7706d81bd4..0000000000 --- a/files/fr/archive/b2g_os/api/index.html +++ /dev/null @@ -1,831 +0,0 @@ ---- -title: APIs de B2G OS -slug: Archive/B2G_OS/API -tags: - - API - - B2G API - - api de b2g os -translation_of: Archive/B2G_OS/API ---- -

B2G OS utilise les API Web standards

- -

-A -B -C -D -E -F -G -H -I - - -K -L -M -N -O -P - - -R -S -T -U -V -W -X - - - - - -

diff --git a/files/fr/archive/b2g_os/api/l10n_api/index.html b/files/fr/archive/b2g_os/api/l10n_api/index.html deleted file mode 100644 index 3b1c9850ed..0000000000 --- a/files/fr/archive/b2g_os/api/l10n_api/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: L10n API -slug: Archive/B2G_OS/API/L10n_API -tags: - - API - - 'API:Mozilla Extensions' - - Aperçu - - Firefox OS - - I10n - - Non-standard - - Reference -translation_of: Archive/B2G_OS/API/L10n_API ---- - - -
-

Brouillon
- Cette page n'est pas complète.

-
- -
-

Non-standard
- Cette fonctionnalité ne fait pas partie des standards actuels du W3C, mais elle est prise en charge sur la plate-forme Firefox OS. Bien que les implémentations puissent changer à l'avenir et qu'il ne soit pas largement pris en charge par les navigateurs, il convient pour une utilisation dans du code dédié aux applications Firefox OS.

-
- - - -

Interfaces

- -
- -
diff --git a/files/fr/archive/b2g_os/api/navigator/addidleobserver/index.html b/files/fr/archive/b2g_os/api/navigator/addidleobserver/index.html deleted file mode 100644 index 54e7fd998e..0000000000 --- a/files/fr/archive/b2g_os/api/navigator/addidleobserver/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Navigator.addIdleObserver() -slug: Archive/B2G_OS/API/Navigator/addIdleObserver -translation_of: Archive/B2G_OS/API/Navigator/addIdleObserver ---- -

{{ non-standard_header() }}

-

{{ B2GOnlyHeader2('certified') }}

-

Résumé

-
-
- Cette méthode est utilisée pour ajouter un observateur qui va vérifier si l'utilisateur est inactif et agira en conséquence. Une fois l'observateur ajouté, il est possible de le retirer avec {{domxref("window.navigator.removeIdleObserver","navigator.removeIdleObserver")}}.
-
-  
-
-

Syntaxe

-
navigator.addIdleObserver(IdleObserver);
-

Paramètres

-
-
- IdleObserver
-
-
-
- Un objet avec des propriétés spécifiques à gérer si l'utilisateur est inactif ou non ; cf {{anch("IdleObserver")}} ci-dessous.
-
-
-
-

IdleObserver

-

IdleObserver est un objet contenant les trois propriétés suivantes :

-
-
- time
-
- Le temps (exprimé en secondes) avant que l'utilisateur soit considéré comme inactif.
-
- onidle
-
- Une fonction appelée lorsque l'utilisateur est considéré comme inactif.
-
- onactive
-
- Une fonction appelée lorsque l'utilisateur redevient actif.
-
-

Exemple

-
var myObserver = {
-  time: 10,
-  onidle: function () {
-    console.log("L'utilisateur est inactif depuis 10 secondes");
-  },
-  onactive: function () {
-    console.log("L'utilisateur est actif de nouveau");
-  }
-}
-
-navigator.addIdleObserver(myObserver);
-
-

Spécification

-

Ne fait encore partie d'aucune spécification ; Toutefois, cette API sera discutée au W3C dans le cadre de la System Applications Working Group.

-

Voir aussi

- diff --git a/files/fr/archive/b2g_os/api/navigator/index.html b/files/fr/archive/b2g_os/api/navigator/index.html deleted file mode 100644 index c98f922aeb..0000000000 --- a/files/fr/archive/b2g_os/api/navigator/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Navigator (Firefox OS extensions) -slug: Archive/B2G_OS/API/Navigator -tags: - - API - - Firefox OS - - Interface - - Navigator - - Non-standard - - TopicStub -translation_of: Archive/B2G_OS/API/Navigator ---- -

L'interface Navigator représente l'état et l'identité de l'agent utilisateur. Il permet aux scripts de l'interroger et de s'enregistrer pour effectuer certaines activités. Cette page représente la liste des propriétés et des méthodes ajoutées à Navigator sur les appareils Firefox OS. Pour obtenir la liste des propriétés des méthodes disponibls sur tous les sites Web, consultez Navigator.

- -

Un objet Navigator peut être récupéré à l'aide de la propriété Window.navigator en lecture seule.

- - - -
-
window.navigator.mozApps
-
Renvoie un objet Apps que vous pouvez utiliser pour installer, gérer et contrôler des Open Web Apps dans le navigateur.
-
diff --git a/files/fr/archive/b2g_os/api/navigator/mozapps/index.html b/files/fr/archive/b2g_os/api/navigator/mozapps/index.html deleted file mode 100644 index 6b1d9283bc..0000000000 --- a/files/fr/archive/b2g_os/api/navigator/mozapps/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: window.navigator.mozApps -slug: Archive/B2G_OS/API/Navigator/mozApps -tags: - - API Apps - - Apps -translation_of: Archive/B2G_OS/API/Navigator/mozApps ---- -

(fr translation)

- -

-

Non standard
- Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

-

- -

Résumé

- -

Renvoie un objet Apps que vous pouvez utiliser pour installer, gérer et contrôler des Open Web Apps dans le navigateur.

- -

Syntaxe

- -
var apps = window.navigator.mozApps;
-
- -

Spécification

- -

Ne fait partie d'aucune spécification. Implementé dans Gecko suite au bug 697383.

- -

Compatibilité des navigateurs

- -

Nous convertissons les données de compatibilité dans un format JSON. - Ce tableau de compatibilité utilise encore l'ancien format - car nous n'avons pas encore converti les données qu'il contient. - Vous pouvez nous aider en contribuant !

- -
- - -

- -
- - - - - - - - - - - - - - - - - - - -
FonctionChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support de base---11.0 (11.0)---------
-
- -
- - - - - - - - - - - - - - - - - - - -
FonctionAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support de base---11.0 (11.0)---------
-
- -

 

diff --git a/files/fr/archive/b2g_os/api/navigator/requestwakelock/index.html b/files/fr/archive/b2g_os/api/navigator/requestwakelock/index.html deleted file mode 100644 index b9cf1367d4..0000000000 --- a/files/fr/archive/b2g_os/api/navigator/requestwakelock/index.html +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: window.navigator.requestWakeLock -slug: Archive/B2G_OS/API/Navigator/requestWakeLock -tags: - - B2G - - Firefox OS - - Non Standard - - Power Management - - WebAPI -translation_of: Archive/B2G_OS/API/Navigator/requestWakeLock ---- -

{{ non-standard_header() }}

-

Résumé

-

Cette méthode est utilisée pour faire une requête de blocage de mise en veille de n'importe quelle ressource de l'appareil. Elle renvoie un objet {{ anch("MozWakeLock") }} utilisable pour garder une trace ou libérer le verrou de blocage.

-

Syntaxe

-
var lock = window.navigator.requestWakeLock(resourceName);
-
-
-
- resourceName
-
- Une chaîne de caractères représentant le nom de la ressource à verrouiller. Gaia utilise trois noms de ressources basiques : screen, cpu et wifi. Cependant toute application certifiée peut exposer de nouvelles ressources.
-
-

Valeur

-

navigator.requestWakeLock retourne un objet {{anch("MozWakeLock")}} qu'il est nécessaire d'utiliser pour libérer le verrou.

-
-

Note : quand la fenêtre qui a requis un ou plusieurs verrou est fermée ou supprimée, tout verrou impliqué est implicitement libéré. Une libération manuelle n'est pas nécessaire.

-
-

MozWakeLock

-
interface MozWakeLock
-{
-  readonly attribute DOMString topic
-
-  void unlock();
-}
-
-
- topic
-
- La chaîne de caractères contenant le nom de la ressource à verrouiller.
-
- unlock
-
- Une fonction qui doit être appelée pour libérer le verrou. Si plusieurs verrous ont été requis, chacun d'entre eux doit être libéré individuellement.
-
-
-

Note : appeler la méthode unlock sur un verrou déjà  libéré lancera une erreur de type : NS_ERROR_DOM_INVALID_STATE_ERR.

-
-

Exemple

-
var lock = window.navigator.requestWakeLock('screen');
-
-window.addEventListener('unload', function () {
-    lock.unlock();
-});
-

Spécification

-

Cette API ne fait partie d'aucune spécification.

-

Voir aussi

- diff --git a/files/fr/archive/b2g_os/api/nfc_api/index.html b/files/fr/archive/b2g_os/api/nfc_api/index.html deleted file mode 100644 index 8d6e16ffb4..0000000000 --- a/files/fr/archive/b2g_os/api/nfc_api/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: NFC API -slug: Archive/B2G_OS/API/NFC_API -tags: - - API - - Firefox OS - - NFC - - Non-standard - - Reference -translation_of: Archive/B2G_OS/API/NFC_API ---- - - -
-

Non-standard
- Cette fonctionnalité ne fait pas partie des normes actuelles du W3C, mais elle est prise en charge sur la plate-forme Firefox OS. Bien que les implémentations puissent changer à l'avenir et qu'il ne soit pas largement pris en charge par les navigateurs, il convient pour une utilisation dans le code dédié aux applications Firefox OS.

-
- -
-

Cette API est disponible sur Firefox OS pour les applications privilégiées ou certifiées uniquement.

-
- -
-

L'API NFC (Near Field Communication) est utilisée pour échanger des données entre des appareils mobiles compatibles NFC ou des balises NFC en les touchant ensemble.

-
- -

Présentation

- -

Vous accédez à l'ensemble des fonctionnalités NFC via la propriété Navigator.mozNfc , ce qui vous permet de retourner un objet MozNFC sur lequel vous pouvez effectuer d'autres opérations.

- -

Permissions

- -

Les applications privilégiées qui souhaitent utiliser l'API NFC doivent demander l'autorisation NFC dans leur manifeste d'application. Firefox 2.2+ permet l'utilisation de la technologie NFC dans des applications privilégiées. Pour les versions anterieures, il n'est disponible que pour les applications certifiées.

- -
"permission": {
-  "nfc":{}
-}
- -

L'API NFC prend en charge trois modes d'opération définis dans le forum NFC.

- -

Mode Lecture/Écriture

- -

Ce mode peut être utilisé pour lire / écrire des balises NFC via l'interface MozNFCTag à l'aide de MozNDEFRecord, ou pour communiquer avec la balise NFC en envoyant / recevant une commande APDU.

- -

Mode Pair à Pair

- -

Ce mode est utilisé pour partager du contenu avec un autre périphérique NFC via l'interface MozNFCPeer .

- -

Card Emulation Mode

- -

Ce mode permet d'émuler le périphérique NFC en tant que balise NFC. Ce mode est principalement utilisé dans les paiements NFC.

- -

À partir de Firefox OS v2.2, seulement Secure Element-based Card Emulation est supporté.

- -

Enregistrement NDEF

- -

NDEF (NFC Data Exchange Format) est le format de données commun défini dans le forum NFC. En utilisant NDEF, une application peut oppérer sur MozNFCTag si la balise est compatible avec NFC Forum Tag, ou peut échanger des données avec MozNFCPeer.

- -

En savoir plus : MozNDEFRecord.

- -

Event Dispatching 

- -

Pour les événements NFC Tag ou NFC Peer, la priorité est d’envoyer d’abord ces événements à l’application de premier plan (décidé par l’application Système). Si l'application de premier plan ne peut pas traiter l'événement, l'événement sera à nouveau redistribué vers l'application System. L'application System lancera les applications en appelant MozActivity.

- -

Vous pouvez trouver plus de détails sur l’utilisation de NFC dans Firefox OS dans Utiliser l'API NFC.

- -

Interfaces NFC

- -
-
MozNDEFRecord
-
Structure NDEF (NFC Data Exchange Format) pour les données liées à NFC.
-
MozNFC
-
Objet Navigateur haut niveau pour les opérations NFC.
-
MozNFCTag
-
Objet NFC utilisé pour manipuler des données sur des balises.
-
- -
-
MozNFCPeer
-
Objet NFC utilisé pour manipuler des données sur des périphériques.
-
- -

Caractéristiques

- -

L'implémentation NFC dans Gecko suit les caracteristiques du Forum NFC.

- -

Compatibilité

- -

Supporté dans Firefox OS 1.0.
- Disponible dans les applications privilégiées à partir de Firefox OS 2.2.

- -

Voir aussi

- - - - diff --git a/files/fr/archive/b2g_os/api/udpsocket/index.html b/files/fr/archive/b2g_os/api/udpsocket/index.html deleted file mode 100644 index b9ade8c1c7..0000000000 --- a/files/fr/archive/b2g_os/api/udpsocket/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: UDPSocket -slug: Archive/B2G_OS/API/UDPSocket -translation_of: Archive/B2G_OS/API/UDPSocket ---- -

- -

-

Non standard
- Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

-

- -

-

Cette API est disponible sur Firefox OS pour des applications privilégiées ou certifiées seulement.

-

- -

Exemple d'appel de l'API

- -
var SSDP_PORT = 1900;
-var SSDP_ADDRESS = "239.255.255.250";
-var SSDP_DISCOVER_MX = 2;
-var SEARCH_TARGET = "urn:schemas-upnp-org:service:ContentDirectory:1";
-
-var SSDP_DISCOVER_PACKET =
-    "M-SEARCH * HTTP/1.1\r\n" +
-    "HOST: " + SSDP_ADDRESS + ":" + SSDP_PORT + "\r\n" +
-    "MAN: \"ssdp:discover\"\r\n" +
-    "MX: " + SSDP_DISCOVER_MX + "\r\n" +
-    "ST: " + SEARCH_TARGET + "\r\n" +
-    "\r\n";
-
-var searchSocket = new UDPSocket({
-    loopback: true
-});
-
-searchSocket.joinMulticastGroup(SSDP_ADDRESS);
-
-searchSocket.onmessage = function (e) {
-
-    var msg = String.fromCharCode.apply(null, new Uint8Array(e.data));
-
-    console.log(msg);
-};
-
-searchSocket.opened.then(function() {
-
-    searchSocket.send(SSDP_DISCOVER_PACKET, SSDP_ADDRESS, SSDP_PORT);
-
-    setTimeout(function () { searchSocket.close(); }, SSDP_DISCOVER_MX * 1000);
-});
- -

Exemple de manifeste

- -
{
-  "name": "My App",
-  "launch_path": "/index.html",
-  "icons": {
-  },
-  "developer": {
-  },
-  "type": "privileged",
-  "permissions": {
-    "udp-socket": { "description": "Required to do any UDP" }
-  },
-  "default_locale": "en"
-}
diff --git a/files/fr/archive/b2g_os/api/wake_lock_api/index.html b/files/fr/archive/b2g_os/api/wake_lock_api/index.html deleted file mode 100644 index 122d994ab9..0000000000 --- a/files/fr/archive/b2g_os/api/wake_lock_api/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Wake Lock API -slug: Archive/B2G_OS/API/Wake_Lock_API -tags: - - Firefox OS - - Non-standard - - Overview - - TopicStub - - Wake Lock API -translation_of: Archive/B2G_OS/API/Wake_Lock_API ---- - - -
-

Non standard
- Cette fonctionnalité n'est pas en voie de standardisation au W3C, mais elle est supportée par la plateforme Firefox OS. Bien que son implémentation puisse changer dans le futur et qu'elle n'est pas largement supportée par les différents navigateurs, elle est utilisable pour du code dédié aux applications Firefox OS.

-
- - - -

L' API Wake Lock permet de verrouiller n'importe quelle ressource de l'appareil. Cela signifie que vous pouvez empêcher cette ressource de devenir indisponible tant que votre application détient un verrou pour cette ressource. Par exemple, une application d'enregistrement vocal peut obtenir un verrouillage pour garder l'écran allumé pendant l'enregistrement afin de pouvoir donner à l'utilisateur un retour visuel prouveur indiquant que l'enregistrement est en cours.

- -

Gaia utilise trois noms de ressources de base qui peuvent être utilisés comme sujet: écran, cpu, et wifi, mais toute application certifié peut exposer de nouvelles ressources.

- -

Références

- -
-
Navigator.requestWakeLock()
-
Verrouillez une ressource.
-
MozWakeLock
-
Interface représentant une serrure et permettant de les gérer, en en gardant une trace, et en donnant la possibilité de la libérer.
-
- -

Exemple

- -

Garder l'écran allumé

- -

Toute application peut choisir de garder l'écran allumé pendant son exécution. Pour ce faire, l'application doit obtenir un verrou pour la ressource écran lorsqu'elle est initialisée.

- -
var lock = window.navigator.requestWakeLock('screen');
-
- -

Les développeurs d'applications doivent être responsables et réfléchir soigneusement à la question de savoir s'ils doivent garder l'écran allumé. Le risque de réclamer le verrou est que les utilisateurs peuvent oublier de fermer l'application lorsqu'ils ont fini de l'utiliser, ce qui peut entraîner une augmentation significative de l'utilisation de la batterie. Si vous n'êtes pas certain que l'obtention du verrouillage de l'écran ait du sens dans tous les scénarios, il serait judicieux de fournir l'option d'activer ou de désactiver l'option de verrouillage d'écran dans les paramètres de l'application.

- -

Si vous ne relâchez pas du tout le verrouillage de l'écran, il sera à nouveau obtenu à partir de votre application lorsqu'il passe en arrière-plan ou lorsque l'application se termine. Cependant, il existe certains scénarios où vous devez libérer vous-même le verrouillage de l'écran, par exemple lorsque l'utilisateur désactive l'option dans les paramètres ou lorsque l'application n'exécute pas la tâche qui nécessitait que l'écran reste allumé. Dans ces scénarios, il vous suffit d'appeler la méthode unlock() pour libérer le verrou.

- -
lock.unlock();
- -

Le verrouillage de réveil de l'écran est actuellement disponible pour les applications hébergées et packagées exécutées sur la plate-forme Firefox OS.

- -

Spécification

- -

Ne fait partie d'aucune spécification

- -

Voir également

- - diff --git a/files/fr/archive/b2g_os/api/wake_lock_api/keeping_the_geolocation_on_when_the_application_is_invisible/index.html b/files/fr/archive/b2g_os/api/wake_lock_api/keeping_the_geolocation_on_when_the_application_is_invisible/index.html deleted file mode 100644 index f6ffe5ed9d..0000000000 --- a/files/fr/archive/b2g_os/api/wake_lock_api/keeping_the_geolocation_on_when_the_application_is_invisible/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Garder la main sur la géolocalisation même si l'application n'est plus visible -slug: >- - Archive/B2G_OS/API/Wake_Lock_API/Keeping_the_geolocation_on_when_the_application_is_invisible -tags: - - Firefox OS - - Guide - - Non-standard - - Wake Lock API - - Web -translation_of: >- - Archive/B2G_OS/API/Wake_Lock_API/Keeping_the_geolocation_on_when_the_application_is_invisible ---- -

- -

-

Non standard
- Cette fonctionnalité n'est pas en voie de standardisation au W3C, mais elle est supportée par la plateforme Firefox OS. Bien que son implémentation puisse changer dans le futur et qu'elle n'est pas largement supportée par les différents navigateurs, elle est utilisable pour du code dédié aux applications Firefox OS.

-

- -

-

Cette API est disponible sur Firefox OS pour des applications internes seulement.

-

- -

Une application Firefox OS peut continuer à utiliser le service de géolocalisation alors même qu'elle n'est plus visible. Ceci peut être obtenu via un appel à MozWakeLock conjointement avec watchPosition() de cette façon, l'application pourra continuer à utiliser le GPS bien que n'étant plus au premier plan.

- -
-

Toute application désirant conserver l'accès au service de géolocalisation alors que l'écran est éteint ou que cette application se retrouve en arrière plan, doit obtenir un verrou spécial avant de ne plus être visible.

-
- -

Pour obtenir un tel verrou, il suffit d'appeler la méthode Navigator.requestWakeLock() avec l'argument 'gps'.

- -
var lock = window.navigator.requestWakeLock('gps');
-
- -

Ici, les développeurs d'applications portent une lourde responsabilté. Ils doivent être certains des raisons pour lesquelles ils ont besoin du service de géolocalisation et surtout savoir quand l'arrêter. Le risque, avec ce verrou, vient de ce que les utilisateurs de votre application peuvent très bien oublier de fermer l'appli lorsqu'ils ont fini de l'utiliser - ce qui se soldera par une diminution importante de la charge de la batterie, inutilement. Si vous n'êtes pas certain à 100 % que l'obtention d'un verrou de géolocalisation est gérable dans tous les cas de figure, alors vous devez proposer une option pour activer ou désactiver ce verrou de géolocalisation dans les paramètres de votre appli.

- -

Si vous ne libérez pas du tout votre verrou de géolocalisation, il sera automatiquement libéré lorsque votre appli se terminera. Cependant il y a de nombreux cas où vous pouvez libérer ce verrou vous-même - notamment lorsque l'utilisateur désactive cette option dans vos paramètres applicatifs, ou encore lorsque votre appli ne requiert plus d'utiliser la géolocalisation. Pour libérer le verrou, vous appelez unlock() qui est la méthode prévue :

- -
lock.unlock();
- -

Les verrous de géolocalisation sont disponibles, à la fois dans les applis hébergées et les applis packagées - au sens de la plateforme Firefox.

- -

Example

- -
var id, target, options;
-var wakeLock;
-
-function success(pos) {
-  var crd = pos.coords;
-
-  if (target.latitude === crd.latitude && target.longitude === crd.longitude) {
-    console.log('Congratulations, you reached the target');
-    navigator.geolocation.clearWatch(id);
-    wakeLock.unlock();
-  }
-}
-
-function error(err) {
-  console.warn('ERROR(' + err.code + '): ' + err.message);
-}
-
-target = {
-  latitude : 0,
-  longitude: 0
-};
-
-options = {
-  enableHighAccuracy: false,
-  timeout: 5000,
-  maximumAge: 0
-};
-
-wakeLock = window.navigator.requestWakeLock('gps');
-id = navigator.geolocation.watchPosition(success, error, options);
-
- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/api/window/index.html b/files/fr/archive/b2g_os/api/window/index.html deleted file mode 100644 index b4383e7590..0000000000 --- a/files/fr/archive/b2g_os/api/window/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Window (extensions Firefox OS) -slug: Archive/B2G_OS/API/Window -tags: - - API - - Firefox OS - - Interface - - Navigator - - Non-standard -translation_of: Archive/B2G_OS/API/Window ---- -

- -

L'interface Window représente une fenêtre contenant un document DOM. Cette page expose la liste des propriétés et méthodes ajoutées à Window sur les appareils Firefox OS. Pour la liste des propriétés et méthodes disponibles pour tous les sites Web, consultez Window.

- -

Propriétés

- -
-
Window.onmoztimechange
-
Contient le gestionnaire d'événement à appeler lorsque l'événement moztimechange est envoyé.
-
- -

Méthodes

- -

Il n'y a aucune méthode spécifique à Firefox OS pour l'interface Window.

diff --git a/files/fr/archive/b2g_os/automated_testing/configurer_marionette/index.html b/files/fr/archive/b2g_os/automated_testing/configurer_marionette/index.html deleted file mode 100644 index 8ae67abda9..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/configurer_marionette/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Configurer Marionette pour Firefox OS -slug: Archive/B2G_OS/Automated_testing/Configurer_Marionette -tags: - - Firefox OS - - Guide -translation_of: 'https://marionette-client.readthedocs.io/en/latest/' ---- -

Configurer le client Marionette

- -

Le client Marionette est un package Python avec lequel vous pouvez exécuter des tests Marionette : à la fois des tests Python et des tests de WebAPI JavaScript. Vous allez avoir besoin de configurer ceci sur votre machine avant de pouvoir l'utiliser.

- -

Pour y parvenir, vous devez cloner un arbre Gecko ; soit l'arbre Gecko dans un clone Firefox OS, soit un clone Gecko autonome (par exemple, mozilla-central). Par exemple, supposons que c'est la première fois que vous clonez un arbre Gecko :

- -

Installez tout d'abord Mercurial, si ce n'est déjà fait. Voici comment vous pouvez faire sur Mac si vous avez Homebrew d'installé. Les autres gestionnaires de package seront différents :

- -

$ brew install mercurial

- -

Déplacez-vous dans votre répertoire de travail (par exemple ~/code) et tapez la ligne suivante pour commencer le processus de clonage :

- -

$ hg clone http://hg.mozilla.org/mozilla-central/ $GECKO_DIR

- -

... où $GECKO_DIR peut être n'importe quel nom valide de répertoire, par exemple mozilla-central. Cette étape va prendre un peu de temps (environ 10 minutes avec une connexion rapide).

- -

Voir assi Compiler et installer Firefox OS pour plus de détails sur la façon de configurer un environnement de compilation Firefox OS et faire un pull du code.

- -
$ cd $GECKO_DIR/testing/marionette/client
-
-$ python setup.py develop
- -

Il est recommandé d'utiliser un environnement virtuel virtualenv. Configuration rapide de virtualenv :

- -

$ pip install virtualenv

- -

$ virtualenv $MARIONETTE_ENV

- -

Encore une fois, $MARIONETTE_ENV peut être n'importe quel nom valide de répertoire. Maintenant vous devriez être capable d'exécuter les étapes ci-dessus mais dans le nouvel environnement avec :

- -
$ cd $GECKO_DIR/testing/marionette/client
-
-$ $MARIONETTE_ENV/bin/python setup.py develop
- -

Pour vérifier que Marionette est installé :

- -
$ $MARIONETTE_ENV/bin/python
->>> from marionette import Marionette
- -

Voir aussi Exécuter des tests Marionette pour plus d'informations sur la façon d'exécuter des tests après avoir configuré Marionette.

diff --git a/files/fr/archive/b2g_os/automated_testing/endurance/index.html b/files/fr/archive/b2g_os/automated_testing/endurance/index.html deleted file mode 100644 index dc39c6ae1d..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/endurance/index.html +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Endurance tests -slug: Archive/B2G_OS/Automated_testing/Endurance -translation_of: Archive/B2G_OS/Automated_testing/Endurance ---- -
-

Important: Les tests d'endurance Gaia-ui ne sont plus utilisés - voir bug 1117144 - cette page est maintenu seulement pour la valeur historique. Vous devriez regarder nos tests MTBF place.

-
- -
-

Le but de nos tests d'endurance est de vérifier Firefox OS et la stabilité de l'application Gaia et de détecter des fuites de mémoire, en effectuant de multiples itérations de cas d'utilisation communes. Les tests d'endurance Gaia-IU sont en cours d'exécution dans l'ombre, tandis que d'autres types de tests d'endurance sont actuellement en développement (et seront ajoutés ici quand ils serontt mis en ligne). Cet article explique comment ces tests fonctionnent, et comment les exécuter.

-
- -

Les tests d'endurance Gaia-IU sont une suite de tests de Firefox OS construits au-dessus du cadre Gaiatest (Tests de l'IU Gaia). Les tests s'exécutent sur de vrais dispositifs de Firefox OS, et utilisent Marionette pour  conduire l'IU de l'appareil.

- -

Comme mentionné ci-dessus, les tests d'endurance Gaia-IU vérifie  le dispositif Firefox OS et la stabilité de l'application Gaia  en effectuant plusieurs itérations de cas d'utilisation communes. Des exemples de ces cas d'utilisation comprennent l'ajout d'un contact dans le carnet d'adresses, d'ajouter un événement au calendrier, l'envoi d'un message SMS, ouvrant le navigateur Firefox et la navigation sur un site spécifique.

- -

As well as verifying Gaia application functionality under numerous iterations, the endurance tests also perform device-side "checkpoints" after every N number of iterations. This checkpoint currently consists of recording the device’s B2G process RSS memory use value. By logging these results over time and comparing them across commits and builds, we can to detect any sudden changes in B2G memory consumption that may occur during the various test scenarios.

- -

Running the tests

- -
-

Note: The Gaia-UI Endurance tests and framework source code can be found in the "v1-train" branch of the Mozilla Github Gaia repository.

-
- -

Let's go through the steps required to set up the Gaia-UI Endurance test environment and run the tests on your local machine and Firefox OS device.

- -
-

WARNING: Running the Gaia-UI Endurance Tests will result in data being ERASED from the Firefox OS device, including data on the device’s microSD card. Therefore, if there is any data on your Firefox OS device and microSD card that you wish to keep, be sure to back it up first before running the Gaia-UI Endurance Tests. Consider yourself warned!

-
- -

Prerequisites

- - - -

If you are on Ubuntu, you need to check that it is configured to support the USB connection to the Firefox OS device. To verify this, connect the device to your computer via USB, open a terminal and enter the adb logcat command to see if it connects.

- -
-

Note: To start with, the Firefox OS device should not be connected to your computer. You will be told when to connect it in the steps below.

-
- -

Step 1: Clone the Gaia repository

- -

The Gaia-UI Endurance Tests are located in the Mozilla Github Gaia repository. Assuming that you haven’t done so already, the first step is to clone that repo:

- -
git clone https://github.com/mozilla-b2g/gaia.git
- -

You may want to go grab a coffee and come back in five minutes.

- -

Step 2: Run the GaiaTest setup

- -

The Gaia-UI Endurance tests are built upon the GaiaTest framework (which uses Marionette). The next step is to run the setup script to install GaiaTest and all of the required dependencies. You may wish to create a new virtual environment to use with the Gaia-UI Endurance Tests. If you don’t, you may need to use sudo while running the setup command. In your terminal, type:

- -
cd gaia/tests/python/gaia-ui-tests
-python setup.py develop
- -

Step 3: Set test vars and acknowledge risks

- -

GaiaTest uses a special file to set certain variables that are required for test configuration. For example, to tell the device which WiFi network it should use. Before running the Gaia-UI Endurance Tests, you must setup the test vars file. Make a copy of the gaia/tests/python/gaia-ui-tests/gaiatest/testvars_template.json file in the same location (call it what you like) and edit it:

- - - -

As mentioned in the warning above, running the Gaia-UI Endurance tests will result in data being erased from the Firefox OS device and microSD card. This is to ensure that the tests start cleanly each time. For example, running a test on a device that already has 10,000 contacts will have very different memory value results vs running the same test on a device with no existing contacts. In order to run the tests, you must acknowledge that you are aware of this data loss risk.

- -

To acknowledge the risks, add the following entry to your testvars file as the first entry in the list: "acknowledged_risks": true.

- -
-

Note: If the risks are not acknowledged in the testvars file, the tests will not run.

-
- -

Step 4: Connect the device to WiFi

- -

Next, power on your Firefox OS device. After it boots up, go into the Wifi settings then manually select and connect to the Wifi network that you want the device to use for the tests. Ensure the Wifi settings confirm that the device is connected to Wifi before continuing.

- -

Step 5: Connect to USB and ADB Forward the Device

- -

Attach the Firefox OS device to your computer via USB.

- -
-

Note: If you’re using an Ubuntu VM, after attaching the device ensure the VM sees the device and connects to it; in the VM select VM > Removable Devices > Your Device > Connect and wait for the device to connect to the VM.

-
- -

Now tell adb to forward the device port to GaiaTest using the following command:

- -
adb forward tcp:2828 tcp:2828
- -
-

Note: If you are using the Firefox OS Leo device, you must first tell ADB to be the root user, like so:

- -
adb root
-adb forward tcp:2828 tcp:2828
-
- -

Step 6: Run a Test

- -

Now you’re ready to actually try running a test. To run the add_contact endurance test, with a single iteration, use the following commands:

- -
cd gaia/tests/python/gaia-ui-tests
-gaiatest --type=b2g --address=localhost:2828 --testvars=mytestvars.json --iterations=1 --checkpoint=1 --restart gaiatest/tests/endurance/test_endurance_add_contact.py
- -

If you get a “connection refused” error it means the device USB connection didn’t work; just repeat the device connection and try again.

- -

The Firefox OS device b2g process should now restart, then the add_contact endurance test will run with a single iteration. If you watch the Firefox OS device, you’ll see the device UI being manipulated by Marionette. After the test finishes, a memory checkpoint will be performed.

- -
-

Note: The Gaia-UI Endurance tests now grab the Firefox OS device’s b2g process RSS value for the memory use checkpoint (it used to be the V-SIZE value.)

-
- -

The test result will be displayed in the terminal window. Note that this result doesn’t include the b2g process memory value; this value is stored in a text file that was created at the time of the checkpoint in the checkpoints directory. To see the resulting b2g process, open this file. This "suite_summary" file will contain the average b2g process memory use (RSS) value, averaged from all of the test checkpoints (in our example there was only one checkpoint anyway).

- -

There are two other files present in the checkpoints folder:

- - - -

Command Line Options

- -

Here is a description of the GaiaTest command line options that you can use when running the Gaia-UI Endurance Test(s):

- - - -

As an example, to run the add_contact test and have it perform 100 test case iterations, grabbing a device memory checkpoint after every 10 iterations, and restarting the b2g process before the test begins, you would use the following command line:

- -
gaiatest --type=b2g --address=localhost:2828 --testvars=mytestvars.json --iterations=100 --checkpoint=10 --restart gaiatest/tests/endurance/test_endurance_add_contact.py
- -

If you wish to run the entire Gaia-UI Endurance test suite, instead of specifying a single test on the command line, just point to the manifest file for the test name, like this:

- -
gaiatest --type=b2g --address=localhost:2828 --testvars=mytestvars.json --iterations=1 --checkpoint=1 --restart gaiatest/tests/endurance/manifest.ini
- -

However, note that running the entire test suite, with 100 iterations of each test (and a checkpoint after every 10 iterations) takes approximately 16 hours.

- -

Now you should be all set and have the Gaia-UI Endurance Tests up and running on your local machine/device.

- -

Contributing to the project

- -

If you have any questions about the Firefox OS Endurance tests or are interested in contributing to this important automation development effort, feel free to contact us in the Mozilla #automation IRC channel.

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/index.html deleted file mode 100644 index 92bef3f84c..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Gaia UI Tests Introduction -slug: Archive/B2G_OS/Automated_testing/gaia-ui-tests -tags: - - B2G - - Build documentation - - Firefox OS - - Gaia - - Guide - - Mobile - - Testing - - TopicStub - - gaia-ui-test - - gaiatest -translation_of: Archive/B2G_OS/Automated_testing/gaia-ui-tests ---- -
-

Suivant »

-
- - - -
-

Gaia-ui-tests est la suite de tests Mozilla, qui permet de tester le rendu final de l'interface utilisateur pour Gaia, l'interface utilisateur de Firefox OS. Tous les tests sont écrits en Python avec un peu de JavaScript utilisé pour interagir avec les API Firefox OS. Cette série d'articles explique comment configurer l'environnement pour écrire et lancer des tests.

-
- -

Gaia-ui-tests utilise Gaiatest, un package Python basé autour de Marionette. Gaiatest est concu pour réunir, les cibles HTML, les appels Marionette, et les appels API pour une communication et un fonctionnement inter-opérable. Marionette est basé sur le standard W3C développé pour le Selenium WebDriver une interface de programmation pour l'automatisation du navigateur. Si vous avez déjà utilisé WebDriver ainsi que des objets de page/application auparavant, alors l'utilisation de Marionette et gaiatest vous paraitront facile.

- -

Démarrer avec Gaia UI tests

- -

Pour ceux qui désirent débuter avec les tests automatisés sur Gaia/Firefox OS, nous avons une séries de tutoriels, qui vous aideront de zéro, jusqu'à écrire vos propres tests. Une fois que vous aurez achevé ce tutoriel, vous aurez assez de connaissance en tests Firefox OS et Marionette, pour contribuer aux tests Mozilla. Il est fortement recommandé de suivre l'ensemble de ce tutoriel, si vous souhaitez devenir contributeur.

- -
-
Partie 1: Bien commencer avec Marionette et Firefox OS
-
Cet article couvre l'installation des outils nécessaire pour démarrer avec les tests, comme le Bureau B2G, Python et Marionette.
-
Partie 2 : Interactions de base avec Firefox OS via l'utilisation de Marionette
-
Un apperçu des commandes de base, que vous utiliserez, pour manipuler Firefox OS avec Marionette.
-
Partie 3 : Améliorer notre code pour en faire un test réutilisable
-
Pour continuer, dans cet article, nous allons assembler quelques commandes de base dans un test simple, à l'intérieur d'un fichier Python, afin qu'ils puissent tous être gérés comme une seule entité.
-
Partie 4 : Réutiliser des commandes pour configurer Firefox OS
-
Ici, nous allons déplacer certaines des commandes, dans les méthodes de Python, pour promouvoir la réutilisation du code.
-
Partie 5 : Introduction à un exécuteur de tests
-
Un lanceur de test est un élément central de toute bonne suite de tests, vous permettant d'exécuter de multiples tests, et d'obtenir un rapport et des résultats globaux. Dans cet article, nous allons explorer les bases du lanceur unittest de Python.
-
Partie 6: Utiliser des tuples, et la classe By de Marionette
-
Cette fois, nous expliquons comment réduire encore la duplication de code, en stockant les localisateurs répétées dans tuples et simplifiant la syntaxe avec la classe By de Marionette.
-
Partie 7 : Écrire vos propres tests
-
Maintenant, les bases sont derrière vous, et il est temps de commencer à écrire vos propres tests! Nous vous donnons ici quelques recommandations d'outils pour vous faciliter le travail, et proposons des tests pour vous exercer à en écrire.
-
Partie 8 : Utiliser une classe base
-
Dans son état actuel, notre fichier de test contient tout le code du lanceur de test. Ceci va bien pour le moment, mais dès que vous commencez à exécuter de nombreux fichiers de test, cela signifie beaucoup de doublons. Ici, nous résolvons ce problème, en faisant abstraction du code du lanceur de test, dans une classe Python séparée.
-
Partie 9 : Réduire le code dupliqué avec des objets app
-
Comme amélioration finale à la maintenabilité du code, dans cet article, nous explorons le code d'abstraction, qui gère l'interaction avec les applications spécifiquent à Firefox OS, dans des objets d'applications Python.
-
- -

Sujets avancés

- -

Une fois que vous possédez les bases pour écrire et lancer des tests, vous pourriez vouloir avancer pour des travaux avec plus d'implications ou plus avancés, comme lancer la suite de tests complète gaia-ui-tests, ou connecter l'énergie résultante de la suite d'un test.

- -
-
Lancer le gaia-ui-tests
-
Des guides pour lancer la suite gaia-ui-tests sur des vrais périphériques Firefox OS et Le Bureau B2G dans diverses configurations.
-
- -

Voir aussi

- -

Repo principal Gaia-ui-tests

- -

Questions/Commentaires/Préoccupations

- -

Ce projet est à un stade d'avancement précoce, et vos retours d'expérience sont grandement appréciés :

- - diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_1_marionette_firefox_os_commencer/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_1_marionette_firefox_os_commencer/index.html deleted file mode 100644 index 6747a2a1dc..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_1_marionette_firefox_os_commencer/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: 'Partie 1: Bien commencer avec Marionette et Firefox OS' -slug: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_1_Marionette_Firefox_OS_commencer -tags: - - Automatisation - - interface utilisateur -translation_of: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_1_Marionette_Firefox_OS_start ---- -

-

« PrécédentSuivant »

-

- -
-

Cette série de tutoriels a pour objectif de vous familiariser avec l'écriture et l'exécution des tests automatisés de l'interface utilisateur pour Firefox OS en utilisant Marionette, un package d'automatisation qui tourne sur votre ordinateur. Marionette publie des commandes pour exécuter des tests sur les plateformes basées sur Gecko. Cet article va vous faire parcourir plus particulièrement la configuration que vous devez effectuer avant d'exécuter des tests.

-
- -

La série de tutoriels va parcourir les concepts de l'automatisation de tests et aussi vous familiariser au travail avec Firefox OS (y compris le très utile outil de test B2G Desktop) et Marionette. Occasionnellement, nous présenterons quelques défis pour vous encourager à explorer vos propres solutions.

- -
-

Note : le tutoriel n'est pas spécifique aux produits de Mozilla ; par exemple, si vous développez une application HTML5, vous pouvez utiliser ce tutoriel pour constuire un framework de tests.

-
- -

Logiciels requis pour ce tutoriel

- -

Au cours de ce tutoriel, nous allons installer et utiliser les logiciels suivants :

- - - -

Python et pip

- -

Des systèmes d'exploitation comme Linux auront Python déjà préinstallé. Avant d'installer Python, vérifiez qu'il n'est pas déjà installé. Depuis une ligne de commande ou un terminal, exécutez :

- -
python --version
- -

Toute version de Python 2.6.x ou 2.7.x est valable pour ce tutoriel. Si vous n'avez pas Python 2.7 d'installé, vous pouvez trouver l'installeur sur le site de téléchargement de Python.

- -

Pip est utilisé pour installer les outils Python et nous en avons besoin pour installer Marionette. Vous pouvez vérifier si pip est installé en saisissant pip dans votre terminal ou votre ligne de commande. Pour installer pip, suivez les instructions dans la documentation pip.
-  

- -

Bureau B2G

- -

Le client de bureau B2G vous permet d'exécuter Gaia — l'interface utilisateur de Firefox OS — et les applications Firefox OS sur un bureau d'ordinateur. Le client de bureau possède certaines limites — il n'émule pas le matériel de l'appareil comme l'appareil photo, la batterie, etc. — mais il sera parfait pour les sujets de ce tutoriel. Allez, installons-le maintenant.

- -

Téléchargez la dernière version du bureau B2G depuis le site Firefox Nightly (voir Desktop Boot2Gecko, en bas). Dès que le bureau B2G est téléchargé, extraire les contenus dans un dossier sur votre ordinateur. Pour démarrer le simulateur Firefox OS exécutez le fichier script b2g approprié à votre système d'exploitation :

- - - -

Dès que l'application démarre, vous devriez voir une fenêtre similaire à celle-ci :

- -

A welcome screen for Firefox OS - says welcome in multiple languages

- -

Suivez les étapes de Premier Usage jusqu'à arriver sur l'écran d'accueil Firefox OS. Notez que vous pouvez émuler les boutons du téléphone en utilisant les commandes clavier suivantes, qui peuvent être parfois utiles (par exemple, appuyer sur Home pour éviter que le téléphone ne se mette en veille).

- - - - - - - - - - - - - - - - - - - - - - - - - - -
-

 

-
-

Clavier Windows/Linux

-
-

Clavier Mac OS

-
-

Bouton Home

-
-

Home

-
-

Fn + flèche gauche

-
-

Bouton Power

-
-

Fin

-
-

Fn + flèche droite

-
-

Volume haut/bas

-
-

Haut/Bas de page

-
-

Fn+ flèche haut/bas

-
- -

À cette étape, vous pouvez laisser ouvert le bureau B2G et mettre la fenêtre de coté. Maintenant nous allons terminer le travail en installant Marionette.

- -

Marionette

- -

Marionette est constitué de deux parties ; le client — qui fonctionne sur votre ordinateur — et le serveur — qui fonctionne à l'intérieur de Firefox OS. Le serveur Marionette, comme un marionnettiste, peut contrôler directement Firefox OS.

- -

marionette architecture showing marionette server inside Firefox OS and marionette client on its own outside

- -

Puisque nous utilisons le client bureau B2G, le serveur Marionette est préinstallé (cela est aussi vrai quand vous utilisez une compilation préconfigurée de Firefox OS sur un appareil réel). Avant toutefois de pouvoir contrôler Firefox OS, nous devons installer le client Marionette sur notre ordinateur. On peut le faire en exécutant la commande suivante dans le terminal :

- -
pip install marionette_client
- -

C'est tout pour le moment. Nous avons tout configuré et sommes prêts à commencer !

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_2_marionette_firefox_os_interactions/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_2_marionette_firefox_os_interactions/index.html deleted file mode 100644 index 04eed2587c..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_2_marionette_firefox_os_interactions/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: >- - Partie 2 : Interactions de base avec Firefox OS via l'utilisation de - Marionette -slug: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_2_Marionette_Firefox_OS_interactions -tags: - - Automatisation - - interface utilisateur -translation_of: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_2_Marionette_Firefox_OS_interactions ---- -

-

« PrécédentSuivant »

-

- -
-

Dans la deuxième partie de notre tutoriel nous allons débuter avec des commandes Marionette simples qui vont nous permettre de contrôler à distance Firefox OS. Même si nous n'allons pas couvrir l'écriture d'un test en intégralité, cet article vous enseigne les fonctionnalités basiques de code que vous pourrez utiliser pour écrire un test. Dans la troisième partie, nous irons plus loin pour faire évoluer ce code en un test réel.

-
- -

Démarrage de Firefox OS

- -

Pour écrire ces tests vous avez besoin d'avoir Firefox OS déjà en cours d'exécution et prêt à recevoir des commandes :

- -
    -
  1. Démarrer le bureau B2G.
  2. -
  3. Désactiver l'écran de verrouillage en utilisant Paramètres > Ecran de verrouillage > décocher verrouiller l'écran.
  4. -
  5. Désactiver la mise en veille de l'écran en changeant le paramètre Paramètres > Affichage > Ecran de veille à jamais.
  6. -
  7. Déplacer la fenêtre sur le côté en attendant les commandes de test.
  8. -
- -

Démarrage de Marionette

- -

Maintenant nous allons démarrer une console Python : allez simplement dans une fenêtre de terminal et tapez la commande python.

- -

Depuis cette console nous pouvons envoyer des commandes au serveur Marionette dans Firefox OS. Après avoir saisi les commandes qui suivent vous devriez voir répondre Firefox OS. Dans la console Python, entrez la commande suivante pour importer la librairie Marionette contenant le code dont nous avons besoin :

- -
from marionette import Marionette
- -

Exécutez maintenant les deux lignes suivantes, qui débutent une session Marionette et le préparent à recevoir des commandes de la part du client :

- -
marionette = Marionette()
-marionette.start_session()
- -

Si vous ne désactivez pas l'écran de verrouillage comme expliqué ci-dessus, vous pouvez déverrouiller l'écran  en ligne de commande, en utilisant :

- -
marionette.execute_script('window.wrappedJSObject.lockScreen.unlock();')
- -

Accès à différents cadres dans Firefox OS

- -

Les applications web dans Firefox OS opèrent dans différents iFrames. Exécuter des applications web dans des cadres séparés leur donnent des conteneurs différents pour la gestion de la sécurité et du visuel (comme une fenêtre). Vous pouvez imaginer que cela fonctionne comme un bac à sable dans lequel l'application s'exécute. Marionette ne peut fonctionner que dans un seul cadre à la fois. Nous avons besoin de Marionette pour passer dans le cadre avec lequel nous voulons interagir.

- -

Le cadre du haut est aussi l'application Système. Toutes les applications et leurs cadres sont des filles de l'application Système. Notre nouvelle session Marionette commence dans le cadre Système mais pour commencer le test nous devons passer dans l'écran d'accueil.

- -

Pour trouver le iFrame, nous devons d'abord l'identifier. Comme Marionette est basée sur l'API WebDriver, elle utilise les mêmes stratégies pour localiser des éléments, donc nous pouvons utiliser une de ces stratégies pour identifier les éléments web de WebDriver. Pour plus d'informations, lire element location strategies.

- -

Dans ce cas, nous allons utiliser le sélecteur CSS div.homescreen iframe pour sélectionner le iFrame de l'écran d'accueil ; la fonction find_element() le prend comme deuxième argument, le premier étant une définition du mécanisme de sélection utilisé pour faire la recherche. Nous allons ensuite stocker ce résultat dans une variable et exécuter la fonction switch_to_frame() avec la variable comme argument. À présent, essayez les deux commandes suivantes :

- -
# Switch context to the homescreen iframe and tap on the Contacts app icon
-home_frame = marionette.find_element('css selector', 'div.homescreen iframe')
-marionette.switch_to_frame(home_frame)
- -
-

Note: Pour plus d'informations et de diagrammes décrivant le changement de cadres, vous pouvez lire Working with iFrames.

-
- -

Ouverture d'une application

- -

OK. Maintenant que nous nous trouvons dans l'application Homescreen nous pouvons cibler les icônes et les cliquer en utilisant la fonction find_element(), combinée avec la fonction tap().

- -
contacts_icon = marionette.find_element('xpath', "//div[@class='icon']//span[contains(text(),'Contacts')]")
-contacts_icon.tap()
- -

Si tout se passe bien, vous devriez maintenant avoir l'application Contacts ouverte, mais nous devons encore passer dans cadre de l'application Contacts pour interagir avec lui, comme nous l'avions fait précédemment avec l'écran d'accueil :

- -
# First, we need to switch context back to the System frame
-marionette.switch_to_frame()
-
-# Now, switch context to the contacts app frame
-contacts_frame = marionette.find_element('css selector', "iframe[data-url*='contacts']")
-marionette.switch_to_frame(contacts_frame)
- -

Passer dans le cadre devrait renvoyer True. Si c'est le cas, c'est super ! Cela signifie que nous sommes dans le contexte de l'application Contacts et que nous sommes prêts à l'utiliser.

- -

Manipulation de l'application

- -

Dans la prochaine étape, nous allons réaliser une tâche de test typique — créer un nouveau contact, lui entrer un nom, et le sauvegarder. Premièrement, nous allons appuyer sur le bouton d'ajout d'un contact :

- -
# Tap [+] to add a new Contact
-marionette.find_element('id', 'add-contact-button').tap()
- -

Maintenant, ajoutons le nom du contact en utilisant les deux commandes suivantes (send_keys() est utilisée pour insérer une valeur dans un élément) :

- -
marionette.find_element('id', 'givenName').send_keys('Foo')
-# Add the contact's surname
-marionette.find_element('id', 'familyName').send_keys('Bar')
- -

À présent, appuyons sur le bouton OK pour sauvegarder le contact :

- -
marionette.find_element('id', 'save-button').tap()
- -

Vous devriez voir un nouveau contact entré dans l'application Contacts. Si c'est le cas, c'est parfait !

- -
-

Note : si ce n'est pas le cas, redémarrez ou tuez l'application Contacts, retournez sur l'écran d'accueil et essayez d'exécuter la tâche de nouveau.

-
- -

Fermeture de votre session Marionette

- -

Pour finir, vous devez fermer votre session Marionette en saisissant la commande suivante :

- -
marionette.delete_session()
- -

Tout cela a bien fonctionné, mais vous ne pouvez pas taper dans une console Python à chaque fois que vous voulez exécuter un test ! Dans la partie 3, nous allons compiler ce script dans un fichier Python que nous pourrons réutiliser à chaque fois que l'on voudra exécuter un test. Nous ajouterons également une ligne pour déterminer si le test a réussi ou échoué.

- -
-

Note : lors de l'écriture des commandes Marionette, vous avez certainement remarqué que l'accès à la structure HTML sous-jacente de l'application est vitale pour comprendre les repères dont vous avez besoin. Partie 7: Ecrire vos propres tests offre quelques ressources utiles pour vous aider sur ce sujet.

-
- -

 

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_3_tests_reutilisables/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_3_tests_reutilisables/index.html deleted file mode 100644 index b053f8cf9b..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_3_tests_reutilisables/index.html +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: 'Partie 3 : Améliorer notre code pour en faire un test réutilisable' -slug: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_3_Tests_reutilisables -tags: - - Firefox OS - - Marionette - - Python - - test -translation_of: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_3_Reusable_tests ---- -

-

« PrécédentSuivant »

-

- -
-

Nous avons appris dans la partie 2 que nous pouvions contrôler de manière simple Firefox OS en utilisant les commandes du client Marionette. Néanmoins, les saisir dans une console Python est aussi lent que fastidieux. L'avantage clé de l'automatisation de tests est son exécution autonome. Nous allons apprendre comment faire cela dans cette partie, en mettant toutes nos commandes dans un fichier Python qui pourra s'exécuter d'un seul coup.

-
- -

Résumé d'un cas de test

- -

Dans la partie 2, nous avons passé les étapes pour exécuter un cas de test typique — ouvrir l'application Contacts et ajouter un nouveau contact :

- -
    -
  1. Déverrouiller Firefox OS (facultatif ; dans la partie 2 nous avons désactivé l'écran de verrouillage manuellement, en conséquence nous ne l'incluerons pas dans le code ci-dessous)
  2. -
  3. Aller dans l'application Contacts
  4. -
  5. Appuyer sur l'icône d'ajout d'un nouveau contact
  6. -
  7. Saisir le nom du contact
  8. -
  9. Appuyer sur OK
  10. -
  11. Attendre et vérifier que le contact est présent
  12. -
- -

Mettre notre test dans un fichier Python

- -

Si nous mettons toutes ces étapes dans un fichier Python, nous pouvons le réutiliser et l'exécuter bien plus rapidement. Créez un nouveau fichier texte nommé test_add_contact.py dans un dossier convenable de votre choix.

- -

Dans ce fichier, entrez les commandes que nous avons vues dans la partie 2, comme listé ci-dessous. Nous utiliserons une structure de classes Python, puisque c'est une bonne pratique et qui plus est elle constitue une bonne base pour construire les étapes à venir de ce tutoriel.

- -
import time
-from marionette import Marionette
-
-class TestContacts:
-
-    def __init__(self):
-        self.test_add_contacts()
-
-    def test_add_contacts(self):
-        # Create the client for this session. Assuming you're using the default port on a Marionette instance running locally
-        self.marionette = Marionette()
-        self.marionette.start_session()
-
-        # Switch context to the homescreen iframe and tap on the contacts icon
-        time.sleep(2)
-        home_frame = self.marionette.find_element('css selector', 'div.homescreen iframe')
-        self.marionette.switch_to_frame(home_frame)
-        contacts_icon = self.marionette.find_element('xpath', "//div[@class='icon']//span[contains(text(),'Contacts')]")
-        contacts_icon.tap()
-
-        # Switch context back to the base frame
-        self.marionette.switch_to_frame()
-        time.sleep(2)
-
-        # Switch context to the contacts app
-        contacts_frame = self.marionette.find_element('css selector', "iframe[data-url*='contacts']")
-        self.marionette.switch_to_frame(contacts_frame)
-
-        # Tap [+] to add a new Contact
-        self.marionette.find_element('id', 'add-contact-button').tap()
-        time.sleep(2)
-
-        # Type name into the fields
-        self.marionette.find_element('id', 'givenName').send_keys('John')
-        self.marionette.find_element('id', 'familyName').send_keys('Doe')
-
-        # Tap done
-        self.marionette.find_element('id', 'save-button').tap()
-        time.sleep(2)
-
-        # Close the Marionette session now that the test is finished
-        self.marionette.delete_session()
-
-if __name__ == '__main__':
-    TestContacts()
-
- -
-

Note : il y a une chose que vous allez remarquer dans le code que nous n'avons pas couverte dans la partie 2 : la fonction Python time.sleep() — cela met le script en pause pour une certaine durée (définie en secondes) avant qu'il ne continue jusqu'à la ligne suivante. Nous avons ajouté ces lignes dans le test automatisé car nous devons simuler l'utilisateur qui, manuellement, appuie sur les boutons, etc. et attendre que Firefox OS effectue les actions qui en résultent. Si nous exécutons le script sans pause, Python effectuera toutes les actions de manière instantanée, mettant probablement le test en échec, puisque Firefox OS n'aurait pas été capable de s'adapter.

-
- -

À présent, nous pouvons lancer le test en allant dans le fichier où le test est enregistré via le terminal et en exécutant la commande suivante :

- -
python test_add_contact.py
- -
-

Note : soyez vigilant par rapport aux règles d'identation de Python. Après avoir copié et collé le code vous devrez probablement tout identer correctement pour qu'il s'exécute. Si vous obtenez une erreur liée à ce point, assurez-vous que tous les niveaux d'indentation sont séparés par une tabulation.

-
- -
-

Note : vous remarquerez également que le nom inséré dans le code ci-dessus est "John Doe", à la différence du nom "Foo Bar" de la partie 2. Nous avons fait ce changement dans le code pour qu'il puisse ajouter avec succès un autre contact. Si vous essayez d'ajouter un contact avec le même nom, Firefox OS vous alertera sur le doublon de contacts. Pour l'instant, la meilleure façon de répéter l'exécution du test est d'aller dans l'interface de Firefox OS et de supprimer manuellement le contact avant chaque exécution.

-
- -

Ajouter une assertion

- -

L'élément qui manque toujours dans notre test, qui est important dans les tests automatisés, est une assertion — un rapport ou mesure pour déterminer si Firefox OS a atteint l'état que nous voulions qu'il atteigne ou si le test est un succès. Nous allons régler ce problème en ajoutant du code pour vérifier si le nouveau contact est présent dans l'application.
-  
- Juste avant la ligne # Close the Marionette session… ajoutez dans ce code, en s'assurant qu'il est indenté au même niveau que les autres lignes de la classe :

- -
# Now let's find the contact item and get its text
-contact_name = self.marionette.find_element('css selector', 'li.contact-item:not([data-group$="ice"]) p').text
-assert contact_name == 'John Doe'
- -

Supprimez l'ancien contact et essayer d'exécuter de nouveau le test, avec la commande suivante :

- -
python test_add_contact.py
- -

Si cela s'exécute correctement, alors nous avons un test qui fonctionne !

- -
-

Note : si l'assertion échoue, assurez-vous que le précédent contact 'Foo Bar' n'existe plus. Le sélecteur CSS avant l'assertion prend en compte le premier contact de la liste (cela pourrait être visible en appelant print "Contact name: %s" % contact_name avant l'appel de l'assertion).

-
- -
-

Note : l'assertion n'apparaîtra pas pour faire quelque chose, mais les assertions sont très importantes quand nous commençons à utiliser des exécuteurs de tests, comme présenté dans la Partie 5: Présentation d'un exécuteur de tests. Les exécuteurs de test comme unittest utilisent les assertions pour vérifier si les tests ont été réalisés avec succès ou non, et ensuite retournent les résultats de ces tests (OK ou FAIL.)

-
- -

Note sur le timing

- -

Une des choses les plus difficiles à gérer en écrivant un test automatisé est le timing. Si le test passe à l'étape suivant avant que Firefox OS n'effectue la précédente, alors nous allons probablement avoir un échec du test.
-  
- Comme mentionné ci-dessus, dans l'exemple de code que nous avons ajouté, la commande time.sleep(x) résout ce problème. Pourtant, utiliser time.sleep(x) n'est pas une bonne pratique. Utiliser une temporisation codée en dur peut faire que le test va s'exécuter trop longtemps ou pas assez. Le dernier cas est le pire ; il donnera des résultats de tests faux négatifs — ce qui signifie un test qui remonte un échec quand en réalité l'application fonctionne parfaitement mais se comporte de manière plus lente que ce que le test espérait.

- -

Dans la partie suivante, nous aborderons l'abstraction de certains points du test vers des fonctions Pythons distinctes,  et remplacerons les fonctions sleep() par les temporisations dynamiques appropriées.

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_4_reutiliser_commandes_firefox_os_configuration/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_4_reutiliser_commandes_firefox_os_configuration/index.html deleted file mode 100644 index c19b0fe951..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_4_reutiliser_commandes_firefox_os_configuration/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: 'Partie 4 : Réutiliser des commandes pour configurer Firefox OS' -slug: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_4_Reutiliser_commandes_Firefox_OS_configuration -tags: - - Automatisation - - B2G - - Firefox OS - - Gaia - - Marionette - - Python - - interface utilisateur - - test -translation_of: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_4_Reusing_commands_Firefox_OS_setup ---- -

-

« PrécédentSuivant »

-

- -
-

Dans les parties 2 et 3 nous avons écrit un test qui fonctionne, mais si nous voulions réinitialiser son état (par exemple en tuant les applications ouvertes) avant d'exécuter le test, nous devions le faire manuellement. Ceci est un peu fastidieux, nous devrions donc automatiser ce point ! Dans cette partie, nous allons voir comment faire cela en éclatant des bouts de code dans des méthodes Python distinctes que nous pourrons réutiliser.

-
- -

Réinitialisation automatique

- -

Avant de réaliser une exécution de test typique, nous aurons probablement besoin de déverrouiller l'écran de verrouillage de Firefox OS et tuer toutes les applications en cours d'exécution. Regardons de plus près comment faire.

- -

Déverrouiller l'écran de verrouillage

- -

Avant d'aller plus loin, activez l'écran de verrouillage de nouveau avec Paramètres > Écran de verrouillage > Verrouiller l'écran, si ce n'est pas déjà fait.

- -

Ajoutez la méthode Python suivante dans votre fichier test_add_contact.py, juste dans la classe :

- -
def unlock_screen(self):
-    self.marionette.execute_script('window.wrappedJSObject.lockScreen.unlock();')
- -

Cette méthode va désormais déverrouiller Firefox OS quand elle sera appelée. Maintenant, appelons-la dans notre test en ajoutant les lignes suivantes sous la ligne self.marionette.start_session() :

- -
# Unlock the screen
-self.unlock_screen()
- -

Tuer toute application ouverte

- -

Maintenant nous allons ajouter une méthode dans notre code pour tuer toutes les applications ouvertes. Cela ressemble à ceci :

- -
    def kill_all(self):
-        self.marionette.switch_to_frame()
-        self.marionette.execute_async_script("""
-             // Kills all running apps, except the homescreen.
-             function killAll() {
-               let manager = window.wrappedJSObject.appWindowManager;
-
-               let apps = manager.getApps();
-               for (let id in apps) {
-                 let origin = apps[id].origin;
-                 if (origin.indexOf('verticalhome') == -1) {
-                   manager.kill(origin);
-                 }
-               }
-             };
-             killAll();
-             // return true so execute_async_script knows the script is complete
-             marionetteScriptFinished(true);
-            """)
- -

Ajoutez ceci juste après la méthode unlock_screen que nous avons ajoutée dans la section précédente.

- -

Puis, ajoutez les lignes suivantes pour exécuter ceci pour le reste du test ; ajoutez ceci juste après la ligne self.unlock_screen() :

- -
# kill all open apps
-self.kill_all()
- -

Maintenant, essayez de laisser l'application Contacts ouverte après la dernière exécution du test et retournez à l'écran de verrouillage avant d'exécuter le test de nouveau. En plus du déverrouillage de l'écran, l'application Contacts ouverte sera automatiquement tuée avant d'exécuter de nouveau le test, donc son état n'affectera pas le test que vous êtes en train d'exécuter. Ce point est important pour la fiabilité sur le long terme de notre exécution de test.

- -

Exécutez de nouveau le test plusieurs fois et visualisez si tout fonctionne et si Firefox OS est réinitialisé proprement.

- -

Attentes dynamiques

- -

Dans la partie 3, nous avons mentionné l'importance des attentes dynamiques. Marionette possède des attentes comme WebDriver/Selenium2, avec une syntaxe particulière qui ressemble à celle-ci :

- -
from marionette_driver import Wait
-
-# Wait until element is displayed
-Wait(self.marionette).until(lambda m: m.find_element('id', 'element_id').is_displayed())
- -

Ce code attendra jusqu'à ce que l'élément spécifié soit affiché. À ce moment, nous savons que nous sommes prêts à interagir avec lui. Essayons d'utiliser cette construction de code dans notre test.

- -

Tout d'abord, incluez la ligne importée Wait, juste après les lignes d'import existantes :

- -
from marionette_driver
- import Wait
- -

À présent, nous pouvons remplacer la deuxième fonction time.sleep(2) après avoir pressé l'icone Contacts (juste après la ligne self.marionette.switch_to_frame()) avec une méthode Wait() qui attendra jusqu'à ce que le cadre Contacts soit affiché :

- -
Wait(self.marionette).until(lambda m: m.find_element('css selector', "iframe[data-url*='contacts']").is_displayed())
- -

Quand nous appuyons sur le symbole + pour commencer la création d'un nouveau contact, nous voulons attendre que le formulaire d'ajout de contact soit complètement visible. Le bouton OK (sauvegarder) est la chose suivante que nous devons presser, nous allons donc attendre d'être mis en position avant de continuer. Remplacez la troisième fonction time.sleep(2) par la ligne suivante :

- -
Wait(self.marionette).until(lambda m: m.find_element('id', 'save-button').location['y']== 0)
- -

Dans cet exemple, nous attendons que le bouton OK soit déplacé en haut de l'écran ; cet élément sera visible en de nombreux points suite à l'animation, mais la postition d'arrêt finale est la position la plus sûre à attendre.

- -

Nous pouvons également attendre les éléments qui ne doivent pas être affichés. Après avoir appuyé sur OK, nous attendons que le bouton OK soit caché en utilisant une méthode Wait() similaire avec une négation, avant d'exécuter le reste du code. Remplacez la quatrième et dernière fonction time.sleep(2) avec ce qui suit :

- -
Wait(self.marionette).until(lambda m: not m.find_element('id', 'save-button').is_displayed())
- -

SI votre test est bon, alors c'est super ! Nous avons réalisé un test plus modulaire et fiable. Dans la partie 5, nous vous familiariserons à l'utilisation d'un exécuteur de tests.

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_5_introduction_executeur_tests/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_5_introduction_executeur_tests/index.html deleted file mode 100644 index bd8ea4f19a..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_5_introduction_executeur_tests/index.html +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: 'Partie 5 : Introduction à un exécuteur de tests' -slug: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_5_Introduction_executeur_tests -tags: - - Automatisation - - B2G - - Firefox OS - - Gaia - - Marionette - - Python - - interface utilisateur - - tests -translation_of: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_5_Introducing_a_test_runner ---- -

-

« PrécédentSuivant »

-

- -
-

Jusqu'ici tout va bien, mais nous avons toujours traité un seul test. Quand on teste une réelle application web il peut y avoir des centaines de cas de tests, et nous ne voulons certainement pas exécuter chacun d'eux manuellement. Dans un tel scénario, nous devons utiliser un exécuteur de tests pour trouver et exécuter les tests à pour nous. C'est le sujet de cet article.

-
- -

Exécuteurs de tests

- -

Un exécuteur de tests fournit la bonne base pour un framework de test réel. Il est conçu pour exécuter des tests, des étiquettes de tests avec des attributs (annotations), fournir du reporting et bien d'autres fonctionnalités encore. Il existe de nombreux exécuteurs de tests Python disponibles, mais dans notre cas, nous allons utiliser le unittest de Python puisqu'il est simple, efficace et inclus dans le package Python (comme cela nous n'avons pas besoin d'installer quoi que ce soit).

- -

En général on sépare les tests en 3 sections standard : setUp(), tests, et tearDown(), typique pour une configuration d'exécuteur de tests.
-  
- Les méthodes setUp() et tearDown() sont exécutées automatiquement pour chaque test et contiennent respectivement :

- - - -

La partie test de la configuration est le code que vous voulez exécuter pour le test en cours. Regardons maintenant comment nous pouvons appliquer cela au test que nous avons construit dans les parties 2 à 4.

- -

Exécuter test_add_contact.py avec unittest

- -

Pour utiliser unittest nous devons tout d'abord importer unittest : ajoutez la ligne suivante en dessous de vos autres lignes d'import :

- -
import unittest
- -

Ensuite, nous devons créer un exécuteur de tests. Pour faire cela, nous allons faire hériter la classe TestContacts de la classe unittest.Testcase ; mettez à jour votre ligne class comme suit :

- -
class TestContacts(unittest.TestCase):
- -

Nous devons également supprimer ceci :

- -
    def __init__(self):
-        self.test_add_contacts()
- -

L'initialisation du test sera gérée à la place par unittest, ainsi nous ne devons pas le gérer nous-mêmes. A la fin du code, remplacez ce qui suit :

- -
if __name__ == '__main__':
-    TestContacts()
- -

par :

- -
if __name__ == '__main__':
-    unittest.main()
- -

Ensuite, nous devons créer une méthode setUp(self): dans notre classe TestContacts et insérer les étapes suivantes :

- -
    -
  1. Instancier Marionette et démarrer une session Marionette
  2. -
  3. Déverrouiller l'écran
  4. -
  5. Tuer les applications ouvertes
  6. -
  7. Charger l'application Contacts
  8. -
- -

La méthode devrait ressembler au code ci-dessous. Vous devrez supprimer les lignes identiques qui sont déjà dans test_add_contacts.

- -
    def setUp(self):
-         # Create the client for this session. Assuming you're using the default port on a Marionette instance running locally
-        self.marionette = Marionette()
-        self.marionette.start_session()
-
-        # Unlock the screen
-        self.unlock_screen()
-
-        # kill all open apps
-        self.kill_all()
-
-        # Switch context to the homescreen iframe
-        time.sleep(2)
-        home_frame = self.marionette.find_element('css selector', 'div.homescreen iframe')
-        self.marionette.switch_to_frame(home_frame)
- -

Maintenant passons à la méthode tearDown(self). A l'intérieur de celle-ci nous devons ajouter le code pour fermer la session Marionette. La méthode devrait ressembler à ceci :

- -
    def tearDown(self):
-        # Close the Marionette session now that the test is finished
-        self.marionette.delete_session()
-
- -

Encore une fois, n'oubliez pas de supprimer les lignes identiques dans test_add_contacts.

- -

Manitenant essayez d'exécuter le test exactement comme vous l'avez fait précédemment. Vous allez voir que vous obtenez un rapport de succès et d'échecs. Ceci est un des avantages d'utiliser un exécuteur de tests comme unittest ou py.test.

- -
-

Note : Si vous êtes bloqués, il existe de nombreux guides d'utilisation de unittest sur Internet. Nous recommandons http://selenium-python.readthedocs.org/en/latest/getting-started.html et http://assertselenium.com/2013/10/07/getting-started-with-python-webdriver/. Ils sont pour Python et WebDriver mais sont tout de même appropriés.

-
- -

Code de référence

- -

Pour référence, notre code final à cette étape ressemble à celui-ci :

- -
import time
-from marionette import Marionette
-from marionette_driver import Wait
-import unittest
-
-
-class TestContacts(unittest.TestCase):
-
-    def unlock_screen(self):
-        self.marionette.execute_script('window.wrappedJSObject.lockScreen.unlock();')
-
-    def kill_all(self):
-        self.marionette.switch_to_frame()
-        self.marionette.execute_async_script("""
-             // Kills all running apps, except the homescreen.
-             function killAll() {
-               let manager = window.wrappedJSObject.AppWindowManager;
-
-               let apps = manager.getApps();
-               for (let id in apps) {
-                 let origin = apps[id].origin;
-                 if (origin.indexOf('verticalhome') == -1) {
-                   manager.kill(origin);
-                 }
-               }
-             };
-             killAll();
-             // return true so execute_async_script knows the script is complete
-             marionetteScriptFinished(true);
-            """)
-
-    def setUp(self):
-         # Create the client for this session. Assuming you're using the default port on a Marionette instance running locally
-        self.marionette = Marionette()
-        self.marionette.start_session()
-
-        # Unlock the screen
-        self.unlock_screen()
-
-        # kill all open apps
-        self.kill_all()
-
-        # Switch context to the homescreen iframe and tap on the contacts icon
-        time.sleep(2)
-        home_frame = self.marionette.find_element('css selector', 'div.homescreen iframe')
-        self.marionette.switch_to_frame(home_frame)
-
-
-    def test_add_contacts(self):
-        contacts_icon = self.marionette.find_element('xpath', "//div[@class='icon']//span[contains(text(),'Contacts')]")
-        contacts_icon.tap()
-
-        # Switch context back to the base frame
-        self.marionette.switch_to_frame()
-        Wait(self.marionette).until(lambda m: m.find_element('css selector', "iframe[data-url*='contacts']").is_displayed())
-
-        # Switch context to the contacts app
-        contacts_frame = self.marionette.find_element('css selector', "iframe[data-url*='contacts']")
-        self.marionette.switch_to_frame(contacts_frame)
-
-        # Tap [+] to add a new Contact
-        self.marionette.find_element('id', 'add-contact-button').tap()
-        Wait(self.marionette).until(lambda m: m.find_element('id', 'save-button').location['y']== 0)
-
-        # Type name into the fields
-        self.marionette.find_element('id', 'givenName').send_keys('John')
-        self.marionette.find_element('id', 'familyName').send_keys('Doe')
-
-        # Tap done
-        self.marionette.find_element('id', 'save-button').tap()
-        Wait(self.marionette).until(lambda m: not m.find_element('id', 'save-button').is_displayed())
-
-    def tearDown(self):
-        # Close the Marionette session now that the test is finished
-        self.marionette.delete_session()
-
-if __name__ == '__main__':
-    unittest.main()
-
-
diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_6_marionette_classe_by/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_6_marionette_classe_by/index.html deleted file mode 100644 index 85b1c5451b..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_6_marionette_classe_by/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: 'Partie 6: Utiliser des tuples, et la classe By de Marionette' -slug: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_6_Marionette_classe_By -tags: - - Automatisation - - B2G - - Firefox OS - - Gaia - - Marionette - - Python - - interface utilisateur - - tests -translation_of: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_6_Marionette_By_class ---- -

 

-

« PrécédentSuivant »

-

- -
-

Jusqu'à présent dans notre code, nous avons utilisé de nombreux repères pour trouver des éléments spécifiques, que ce soit des applications (iFrames) ou des parties d'applications. De plus, nous avons écrit les repères directement dans le code et en conséquence, dupliqué du code. Pour améliorer la situation par la suite, une bonne pratique est d'abstraire ces repères dans des variables tuples Python pour ensuite les réutiliser. Dans cet article, nous allons vous montrer comment faire.

-
- -

Les tuples et la classe By de Marionette

- -

Considérons comme exemple le repère que nous avons utilisé pour localiser le iFrame de l'application Contacts :

- -
'css selector', "iframe[data-url*='contacts']"
- -

Nous utilisons ce repère à la fois quand on attend l'affichage du cadre et quand on passe à l'intérieur de ce dernier. Pour rendre les choses plus simples, on peut stocker ceci dans une variable (il faut aussi iomporter By) :

- -
from marionette import By
-
-_contacts_frame_locator = (By.CSS_SELECTOR, "iframe[data-url*='contacts']")
- -

La classe By de Marionette fournit un court-circuit pour accéder aux techiques de repérage comme id, le sélecteur CSS... Comme précédemment, on saisit l'élément en utilisant le sélecteur et ensuite on le stocke dans une variable tuple CSS. Si l'HTML (et le repère) change, alors il est plus facile de simplement mettre à jour la variable une fois, plutôt que de réaliser les changements aux deux endroits. Pour utiliser ce tuple, il faut l'inclure dans la méthode find_element() comme suit :

- -
self.marionette.find_element(*self._contacts_frame_locator)
- -
-

Note : * — dans ce contexte — est du code Python pour dépiler la liste d'arguments ; cela sépare le tuple d'origine en deux arguments que nous devons passer dans find_element(). Pour plus d'informations et d'exemples, lire Unpacking argument lists dans la documentation Python.

-
- -

Un autre exemple de tuple, qui repère via l'attribut id :

- -
_add_contact_button_locator = (By.ID, 'add-contact-button')
- -

Utilisation de tuples et By dans notre test Contacts

- -

Maintenant il est temps de réduire la duplication dans notre cas de test test_add_contact.py en déplaçant les repères hors du test vers le périmètre de la classe TestContacts où ils peuvent être partagés. Nous allons vous montrer comment substituer un couple de repères et laisser le reste comme exercice pour le lecteur.

- -

D'abord vous devez vous assurer d'importer By, en mettant la ligne suivante au début de votre code :

- -
from marionette import By
- -

Maintenant nous pouvons ajouter nos tuples en haut de la classe TestContacts ; ajoutez les lignes suivantes juste en dessous de la ligne class TestContacts(unittest.TestCase) :

- -
_contacts_frame_locator = (By.CSS_SELECTOR, "iframe[data-url*='contacts']")
-_save_button_locator = (By.ID, "save-button")
-
- -

Désormais, vous pouvez parcourir votre code et remplacer toutes les instances de

- -
find_element('id', 'save-button')
- -

par

- -
find_element(*self._save_button_locator)
- -

et toutes les instances de

- -
find_element('css selector', "iframe[data-url*='contacts']")
- -

avec

- -
find_element(*self._contacts_frame_locator)
- -

Et c'est tout pour le moment. Nous sommes sûrs que vous allez déjà voir les bénéfices de cette réutilisation de code, même dans cet exemple simple. La technique commence à devenir particulièrement efficace dès que vous commencez à écrire des tests plus complexes qui peuvent utiliser le même repère 5, 10 ou 20 fois.

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_7_ecrire_vos_propres_tests/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_7_ecrire_vos_propres_tests/index.html deleted file mode 100644 index 77a0cda65b..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_7_ecrire_vos_propres_tests/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: 'Partie 7 : Ecrire vos propres tests' -slug: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_7_Ecrire_vos_propres_tests -tags: - - interface utilisateur -translation_of: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_7_Writing_your_own_tests ---- -

-

« PrécédentSuivant »

-

- -
-

Jusqu'à présent nous vous avons donné la plupart des outils et informations dont vous avez besoin pour commencer à écrire vos propres tests automatisés sur Firefox OS,  avec suffisamment d'étapes à suivre pour vous permettre de démarrer rapidement. Dans cette partie nous allons vous lâcher, en vous fournissant des ressources et idées, et ensuite en vous encourageant à faire votre propre chemin. Ici, nous allons vous pousser à écrire vos propres tests - profitez-en !

-
- -

Ressources

- -

Les ressources suivantes seront utiles quand vous commencerez à construire vos propres tests unitaires.

- - - -

Idées pour des nouveaux tests et des modifications de tests

- -

Cette section vous fournir un peu d'idées pour vous lancer.

- -

Modifier test_add_contact.py

- -

Commençons par modifier le test sur lequel nous avons déjà travaillé :

- -
    -
  1. Faire que le contact testé ait un nom unique à chaque fois.
  2. -
  3. Supprimer tous les contacts dans l'étape setUp().
  4. -
  5. Réveiller l'écran avant le déverrouillage.
  6. -
- -

Maintenant ajoutons une nouvelle méthode de test. Vous pouvez l'appeler comme vous le souhaitez du moment qu'elle commence par test_. Ce test réalise les choses suivantes :

- -
    -
  1. Ouvrez Contacts.
  2. -
  3. Créez un contact avec un nom différent de celui créé dans le premier test.
  4. -
  5. Entrez de nouveau dans le mode édition du contact.
  6. -
  7. Ajoutez une Société.
  8. -
  9. Appuyez sur OK.
  10. -
  11. Vérifiez que l'entreprise est listée.
  12. -
- -

Maintenant quand vous exécutez le fichier test, les deux tests vont s'exécuter. Nous nous rapprochons de la force de l'automatisation de tests - la capacité d'exécuter une série de tests de manière automatique et de remonter les résultats !

- -

D'autres idées nouvelles de tests

- - - -

 

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_8_utiliser_une_classe_base/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_8_utiliser_une_classe_base/index.html deleted file mode 100644 index 6529777ae6..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_8_utiliser_une_classe_base/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: 'Partie 8 : Utiliser une classe base' -slug: >- - Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_8_Utiliser_une_classe_base -tags: - - Automatisation -translation_of: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_8_Using_a_base_class ---- -

-

« PrécédentSuivant »

-

- -
-

À présent vous avez des tests multiples et vous sentez probablement que vous avez bien progressé. Pourtant, il existe d'autres manières d'améliorer encore l'efficacité de votre code — vous pouvez remarquer que vous avez dû jusqu'ici inclure les méthodes setUp() et tearDown() dans chaque fichier de test, au fur et à mesure de notre progression. Si vous avez plusieurs douzaines de tests alors il y a beaucoup de duplication de code ! Dans cet article, nous allons regarder comment mettre le code setUp()/tearDown() commun à tous les tests dans une classe TestBase, qui peut ainsi être importée dans chaque fichier de test.

-
- -

test_base.py

- -

Pour commencer, créez un nouveau fichier nommé test_base.py, dans le même dossier que vos cas de tests existants.

- -

Ensuite, déplacez vos déclarations relatives à la configuration commune (unittest, Marionette et time) dans le fichier, avec une classe TestBase contenant les méthodes setUp() et tearDown(), et les fonctions d'aide communes (comme unlock_screen()). Le fichier devrait ressembler à cela :

- -
import time
-import unittest
-from marionette import Marionette
-
-
-class TestBase(unittest.TestCase):
-
-    def unlock_screen(self):
-        self.marionette.execute_script('window.wrappedJSObject.lockScreen.unlock();')
-
-    def kill_all(self):
-        self.marionette.switch_to_frame()
-        self.marionette.execute_async_script("""
-             // Kills all running apps, except the homescreen.
-             function killAll() {
-               let manager = window.wrappedJSObject.AppWindowManager;
-
-               let apps = manager.getApps();
-               for (let id in apps) {
-                 let origin = apps[id].origin;
-                 if (origin.indexOf('verticalhome') == -1) {
-                   manager.kill(origin);
-                 }
-               }
-             };
-             killAll();
-             // return true so execute_async_script knows the script is complete
-             marionetteScriptFinished(true);
-            """)
-
-    def setUp(self):
-         # Create the client for this session. Assuming you're using the default port on a Marionette instance running locally
-        self.marionette = Marionette()
-        self.marionette.start_session()
-
-        # Unlock the screen
-        self.unlock_screen()
-
-        # kill all open apps
-        self.kill_all()
-
-        # Switch context to the homescreen iframe and tap on the contacts icon
-        time.sleep(2)
-        home_frame = self.marionette.find_element('css selector', 'div.homescreen iframe')
-        self.marionette.switch_to_frame(home_frame)
-
-
-    def tearDown(self):
-        # Close the Marionette session now that the test is finished
-        self.marionette.delete_session()
-
- -

Mettre à jour vos fichiers de test

- -

Avec la création de votre fichier test_base.py, vous devez importer TestBase dans vos fichiers de test, et les classes de test doivent être changées pour étendre la classe TestBase :

- -
import unittest
-from marionette import Wait
-from marionette import By
-from test_base import TestBase
-
-class TestContacts(TestBase):
-
-    def test(self):
-        # Tests in here
-
-if __name__ == '__main__':
-    unittest.main()
- -

Essayez d'exécuter votre fichier de test de nouveau.

- -

Vous ne devriez pas voir de grande différence maintenant mais si vous avez des douzaines ou des centaines de tests, cela économise beaucoup de code dupliqué.

diff --git a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_9_objets_app/index.html b/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_9_objets_app/index.html deleted file mode 100644 index aecb44aec1..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/gaia-ui-tests/partie_9_objets_app/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: 'Partie 9 : Réduire le code dupliqué avec des objets app' -slug: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Partie_9_objets_app -tags: - - Automatisation -translation_of: Archive/B2G_OS/Automated_testing/gaia-ui-tests/Part_9_app_objects ---- -

-

« Précédent

-

- -
-

Dans l'automatisation de tests nous utilisons souvent les objets app pour abstraire le code. Cela réduit la duplication de code et de repères. Si nous avons besoin de changer une section de code commune, nous pouvons la changer juste dans un seul objet app, plutôt que d'avoir à la modifier dans 10 ou 20 fichiers de test. Cet article donne les bases de l'utilisation des objets app.

-
- -

Objets app : bien démarrer

- -

L'objet app est une classe Python qui contient des méthodes et des propriétés qui représentent les actions sur une page. Regardons comment nous pouvons utiliser ceci dans un exemple théorique.

- -

homepage.py

- -

Voici un cadre que nous pouvons utiliser pour l'app Homepage avec un peu de pseudo-code.

- -
class Homepage:
-        __init__(self, marionette):
-                # Marionette is passed in so that the object can use it
-                self.marionette = marionette
-
-        def switch_to_homepage_frame(self):
-                # Code for switching to System then to Homepage frame
-
-        def tap_contacts_icon(self):
-                # Code to tap the icon
-                # Switch to Contacts frame
-                # Now we return the Contacts app object as it has focus
-                from contacts import Contacts
-                return Contacts(self.marionette)
- -

contacts.py

- -

Et voici ce que nous pouvons utiliser pour l'app Contacts, avec encore du pseudo-code.

- -
class Contacts:
-        _new_contact_button = (By.ID, ‘id’)
-
-        def tap_new_contact(self):
-                # Tap new contact icon
-                # Wait for event
-
-        def type_given_name(self, name_string):
-                # element.send_keys(name_string)
- -

test_contacts.py

- -

Pour comprendre comment cela fonctionne dans le contexte d'un test, voici un exemple rapide qui utilise la classe Homepage :

- -
from homepage import Homepage
-
-def test_add_contact(self):
-        homepage = Homepage(self.marionette)
-        homepage.switch_to_homepage_frame()
-
-contacts = homepage.tap_contacts_icon()
-contacts.tap_new_contact()
- -

Mettre à jour vos tests

- -

À partir de cela, nous voudrions vous pousser à mettre à jour tous vos fichiers de test pour utiliser le nouveau système d'objets app.

- -

C'est une tâche difficile si vous n'êtes pas familier avec les structures de classes Python, vous aurez peut-être besoin de consulter quelques livres pour avoir des références et des exemples de code.

- -

Quand vous aurez fini, idéalement vous aurez une séparation claire entre les fichiers de test :

- -
    -
  1. TestBase contiendra les méthodes setUp() et tearDown()
  2. -
  3. Les objets app contiendront les interactions et repères des pages
  4. -
  5. Vos fichiers de test contiendront uniquement les étapes de test.
  6. -
- -

Bonne chance !

diff --git a/files/fr/archive/b2g_os/automated_testing/index.html b/files/fr/archive/b2g_os/automated_testing/index.html deleted file mode 100644 index 5ec736aa4d..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Test automatisé pour Firefox OS -slug: Archive/B2G_OS/Automated_testing -translation_of: Archive/B2G_OS/Automated_testing ---- -

- -
-

Vu que Firefox OS est en cours de développement, et que le support pour le nouveau matériel est à venir dans un futur proche, il est important de savoir comment le tester. Cette page présente des articles qui fournissent des informations concernant différents aspects pour le test de Firefox OS, ainsi que l’exécution des tests, l’automatisation, le suivi et l'établissemenr de rapports des résultats.

-
- -

Premiers pas

- -
-
Exécuter des tests sur Firefox OS: un guide pour les développeurs
-
-

Un guide rapide, pour les développeurs, pour commencer à exécuter les tests. C’est d’ici que vous devez commencer si vous n’êtes pas confirmés dans l’exécution des tests Mozilla et les systèmes d’automatisation. Si vous l’êtes, vous aurez probablement une idée sur les tests que vous devez exécuter et comment procéder, et vous pouvez aller directement aux guides plus détaillées ci-dessous. 

-
-
- -

Les tests Gaia

- -

Ces articles couvrent les suites de test primaires destinées à mettre Gaia à l’épreuve.

- -
-
Tests d'interface utilisateur Gaia
-
Tests Python des interactions et caractéristiques de l’interface utilisateur Gaia.
-
Tests d'intégration Gaia
-
Tests d’intégration JavaScript pour Gaia, basés sur Marionette.
-
Tests unitaires Gaia
-
Tests unitaires sans interaction avec l'interface utilisateur; écrits en JavaScript, et non basés sur Mrionette.
-
Tests de performance Gaia
-
Mesure des performance de l'application Gaia en se basant sur une instrumentation interne. The testing harness is in-tree.
-
Raptor: Outils de mesure de performance pour Gaia
-
Raptor est un outil qui permet de mesurer la performance spécifique à Firefox OS, qui à pour ambition d'améliorer les outils de test de performance existants.
-
B2GPerf
-
Mesure la performance d'applications Gaia, basé sur une cuisine interne.
-
Eideticker
-
Donne des mesures de performance d'applications Gaia, en se basant sur des captures d'écran.
-
Tests MTBF
-
Durée moyenne avant panne(Mean Time Between Failure). Suite de tests lancés sur un périphérique pendant une longue période, essayant de trouver des problèmes de disponibilité de Gaia et de stabilité. (Actuellement, il est dans les mains de l'équipe Qualité à Taiwan et reste un framework de test en développement)
-
- -

Les tests B2G

- -

Les tests ci-dessous couvrent différents faisceaux d'essai qui permettent de tester de nombreux aspect et fonctionnalités de B2G.

- -
-
Mochitests
-
Tests fonctionnels et d'API, basés sur HTML et JavaScript. Les tests n'interagissent pas avec Gaia.
-
Reftests
-
Test d'exactitude des rendus des tests Gecko.
-
WebAPI tests
-
Tests des WebAPI Gecko, en se basant sur JavaScript. La majorité de ces tests exigent un émulateur.
-
xpcshell tests
-
Tests 'sans tête' (headless) des API XPCOM de Gecko.
-
Tests cppunit
-
Tests unitaires C++ 'sans tête' (headless).
-
- -

Supporting documentation

- -

Cette section, apporte des liens, sur quelques-unes des technologies de support, sur lesquels les tests Mozilla s'appuient, et pour lesquels vous voudrez surement en savoir plus.

- -
-
Marionette
-
Un conducteur de test à distance, basé sur Selenium.
-
Outils JavaScript Marionette
-
Basés sur node.js ils permettent de lancer des tests sur Marionette.
-
Client Python Marionette
-
Un client Python pour lancer des tests sur Marionette.
-
Try server
-
Serveur de Mozilla permettant de tester les correctifs avant de les intégrer dans le répertoire central. Voir aussi le TryChooser Syntax Builder.
-
- -
-

A noter: Si vous souhaitez lancer Marionette sur une compilation pour la production (pour lancer les tests d'intégration de gaia, gaia-ui-tests, etc.), vous pouvez installer Marionette comme une extension (cela fonctionne pour l'instant uniquement sur les compilations en version 1.3, mais le support sera bientôt plus étendu.)

-
- -

Intégration continue et rapport des résultats

- -

Les articles suivants couvrent les mécanismes d'intégration continue et d'établissement de rapports des résultats utilisés par Mozilla afin de sauvegarder et interpréter les données de test.

- -
-
Treeherder
-
Comprendre les tests et compilations lancées sur Treeherder.
-
Raptor
-
Visualisation des tests de performance lancés avec l'outil Raptor.
-
Datazilla [déprécié]
-
Comprendre quels tests de performances sont rapportés sur Tableau de bord Datazilla, et qu'est ce qu'ils mesurent.
-
Graphe de test d'exécution
-
Un graphe montrant quels tests ont été exécutés - sur quels appareils et quand - et quelles sont les plateformes supportées par chaque test.
-
diff --git a/files/fr/archive/b2g_os/automated_testing/marionette_pour_python_interactif/index.html b/files/fr/archive/b2g_os/automated_testing/marionette_pour_python_interactif/index.html deleted file mode 100644 index 729263087f..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/marionette_pour_python_interactif/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Marionette pour du Pyhton interactif -slug: Archive/B2G_OS/Automated_testing/Marionette_pour_Python_interactif -translation_of: Archive/B2G_OS/Automated_testing/Marionette_for_interactive_Python ---- -

Ce tutoriel suppose que vous avez configuré Marionette pour B2G.

- -

Ouvrez un terminal et lancez Python pour obtenir l'invite interactive :

- -

$ python

- -

Depuis l'invite interactive, exécutez les commandes nécessaire pour invoquer une session Marionette de manière interactive :

- -

>>> from marionette import Marionette
- >>> marionette = Marionette('localhost', 2828)
- >>> marionette.start_session()
-  u'session-b2g'

- -

Ici, nous voyons que le système renvoie qu'une session Marionette est en cours d'exécution.

- -

- -

La commande "marionette.execute_script()" peut intégrer des commandes JavaScript, qui peuvent ensuite s'exécuter sur une plateforme B2G. En utilisant ceci, nous pouvons voir quels éléments DOM renvoient des objets HTMLElement ainsi que les attributs et méthodes disponibles :

- -

>>> marionette.execute_script("return navigator.battery;")
- {u'onlevelchange': None, u'level': 0.91, u'dischargingTime': None, u'onchargingchange': None, u'ondischargingtimechange': None, u'onchargingtimechange': None, u'chargingTime': None, u'charging': True}
- >>> marionette.execute_script("return navigator.battery.level;")
- 0.91
- >>> marionette.execute_script("return navigator.geolocation;")
- {}
- >>> marionette.execute_script("return navigator.mozSms;")
- {u'onreceived': None, u'ondelivered': None, u'onsent': None}

- -

- -

Vous pouvez parcourir l'arbre DOM en utilisant cette technique pour évaluer quels objets, méthode et attributs sont disponibles.

- -

Tester la téléphonie basique de manière interactive

- -

Vous pouvez tester de manière interactive la téléphonie de base avec Marionette.  L'exemple suivant nécessite deux téléphones en état de fonctionnement, chacun ayant sa carte sim. L'un d'eux est notre Galaxy SII, avec B2G en cours d'exécution.

- -

Lancez une session Marionette interactive  et transférez le port :

- -

$ adb forward tcp:2828 tcp:2828
- $ python
- >>> from marionette import Marionette
- >>> marionette = Marionette('localhost', 2828)
- >>> marionette.start_session()
- u'5-b2g

- -

À présent, deux approches sont possibles avec Marionette.  L'une d'elles est un peu plus Pythonesque :

- -

>>> marionette.set_context("chrome")
- True
- >>> marionette.execute_script("return navigator.mozTelephony;")
- >>> num =
- >>> marionette.execute_script("return navigator.mozTelephony.dial('%d');" % num)

- -

Ou la seconde approche qui repose plus sur du JS (embarqué dans marionette.execute_script() ) Remarquez les guillemets autour de la variable JS nombre :

- -

>>> marionette.set_context("chrome")
- True
- >>> marionette.execute_script("""
- ... var num = ""
- ... return navigator.mozTelephony.dial(num);
- ... """)
- {}

- -

Nous allons essayer la première approche :

- -

- -

Ceci démarre un appel téléphonique, dont la sortie peut être contrôlée dans $adb logcat

- -

diff --git a/files/fr/archive/b2g_os/automated_testing/mtbf_tests/index.html b/files/fr/archive/b2g_os/automated_testing/mtbf_tests/index.html deleted file mode 100644 index 8f624687ac..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/mtbf_tests/index.html +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: MTBF tests -slug: Archive/B2G_OS/Automated_testing/MTBF_tests -translation_of: Archive/B2G_OS/Automated_testing/MTBF_tests ---- -
-

Les essais de MTBF sont une suite de tests de Firefox OS construits au-dessus du framework  Gaiatest (Tests IU Gaia) . Les tests effectués sur de vrais dispositifs de Firefox OS, et utilisent Marionette pour conduire l'interface utilisateur de l'appareil. Ces tests sont conçus pour mesurer la stabilité / fiabilité de l'application, et de remplacer les tests d'endurance Gaia maintenant abandonnées.

-
- -

Mean time between failures (MTBF) is the predicted elapsed time between inherent failures of a system during operation. MTBF can be calculated as the arithmetic mean (average) time between failures of a system. The MTBF is typically part of a model that assumes the failed system is immediately repaired (mean time to repair, or MTTR), as a part of a renewal process. This is in contrast to the mean time to failure (MTTF), which measures average time to failures with the modeling assumption that the failed system is not repaired (infinite repair time).

- -

Current Environment & Setup

- -

MTBF tests are run by automation; the test suite collects general test cases like send sms, email, set alarm, etc., and executes them to emulate typical user behavior.  Right now we have more than 10 Firefox OS phones concurrently running tests in our test lab.

- -

How often are the tests run?

- -

MTBF is purposed to test on versions or branches with 0 functional failures.  it runs when everything passes in our smoke tests; the testing code should be in the Aurora (next release) branch.

- -

Where can I see the results?

- -

MTBF is still being developed and you can mail us for an early report (try the dev-b2g or dev-gaia mailing lists).  You can set up the necessary environment to run the tests yourself and generate your own reports by following the below steps.

- -

Running the tests

- -

Let's go through the steps required to set up the Gaia-UI MTBF test environment and run the tests on your local machine and Firefox OS device.

- -

Prerequisites

- - - -

If you are on Ubuntu, you need to check that it is configured to support the USB connection to the Firefox OS device. To verify this, connect the device to your computer via USB, open a terminal and enter the adb logcat command to see if it connects. If not, you may need to set up a udev rule for the device.

- -
-

Note: At the point where you start running through the following steps, the Firefox OS device should not be connected to your computer. You will be told when to connect it in the steps below.

-
- -

Step 1: Clone the MTBF-Driver repository from Mozilla-TWQA

- -

The Gaia-UI MTBF Tests are located in the Mozilla Github Gaia repository. Assuming that you haven’t done so already, the first step is to clone that repo:

- -
git clone https://github.com/Mozilla-TWQA/MTBF-Driver.git
- -

You may want to go get a coffee and come back in five minutes. Furthermore, you can get all the branches and try to switch to the current MTBF branch (e.g. master or v1.4+.) In this case, master matches the current master branch Gaia, and v1.4+ matches the v1.4/v1.3 branch Gaia.

- -

Step 2: Run the GaiaTest setup

- -

The Gaia-UI MTBF tests are built upon the GaiaTest framework (which uses Marionette). The next step is to run the setup script to install GaiaTest and all of the required dependencies. You may wish to create a new virtual environment to use with the Gaia-UI MTBF Tests. If you don’t, you may need to use sudo while running the setup command. In your terminal, type:

- -
cd MTBF-Driver
-python setup.py develop
- -

Step 3: Get memory tools if you need them

- -

To access the memory tools, find them in the tools directory in the B2G repo. If you've not already got this, clone it from Github like so (this is also a large download):

- -
git clone https://github.com/mozilla-b2g/B2G.git
- -

You should copy the tools folder into the MTBF-Driver/mtbf_drivers directory.

- -

Step 4: Set test vars and acknowledge risks

- -

GaiaTest uses a special file to set certain variables that are required for test configuration, for example to tell the device which WiFi network it should use. Before running the Gaia-UI MTBF Tests, you must set up the test vars file. Make a copy of the gaia/tests/python/gaia-ui-tests/gaiatest/testvars_template.json file in its existing location (rename it to something memorable) and edit it:

- - - -

Running the Gaia-UI MTBF tests will result in data being erased from the Firefox OS device and microSD card. This is to ensure that the tests start cleanly each time. For example, running a contacts test on a device that already has 10,000 contacts will have very different memory value results compared to running the same test on a device with no existing contacts. In order to run the tests, you must acknowledge that you are aware of this data loss risk. You should also backup any data you don't want to lose.

- -

To acknowledge the risks, add the following entry to your testvars file as the first field in the list: "acknowledged_risks": true.

- -
-

Note: If the risks are not acknowledged in the testvars file, the tests will not run.

-
- -

Step 5: Connect to USB and ADB Forward the Device

- -

Attach the Firefox OS device to your computer via USB.

- -
-

Note: If you’re using an Ubuntu VM, after attaching the device ensure the VM sees the device and connects to it; in the VM select VM > Removable Devices > Your Device > Connect and wait for the device to connect to the VM.

-
- -

Now tell adb to forward the device port to GaiaTest using the following command:

- -
adb forward tcp:2828 tcp:2828
- -
-

Note: If you are using the Firefox OS Leo device, you must first tell ADB to be the root user, like so:

- -
adb root
-adb forward tcp:2828 tcp:2828
-
- -

Step 6: Run a Test

- -

Now you’re ready to actually try running a test. Use the following commands:

- -
cd {MTBF Driver Folder}
-MTBF_TIME=1d MTBF_CONF=conf/local.json mtbf --address=localhost:2828 --testvars=mytestvars.json
- -

We can parse the MTBF_TIME by d(ay), h(our), or m(inute).

- -

If you get a “connection refused” error it means the device USB connection didn’t work; just repeat the device connection and try again.

- -

The Firefox OS device b2g process should now restart, then the specified test will run with a single iteration. If you watch the Firefox OS device, you’ll see the device UI being manipulated by Marionette. After the test finishes, a memory checkpoint will be performed.

- -
-

Note: The Gaia-UI MTBF tests now grab the Firefox OS device’s b2g process RSS value for the memory use checkpoint (it used to be the V-SIZE value.)

-
- -

The test result will be displayed in the terminal window. Note that this result doesn’t include the b2g process memory value; this value is stored in a text file, created at the time of the checkpoint in the checkpoints directory. To see the resulting b2g process, open this file. This "suite_summary" file will contain the average b2g process memory use (RSS) value, averaged from all the test checkpoints (in our example there was only one checkpoint.)

- -

There are two other files present in the checkpoints folder (assuming the test run was the "add contact" test):

- - - -

Step 7: Using Variables and Config Files

- -

We use envrionment variable MTBF_TIME for running duration.  The other one is MTBF_CONF which refers to json file, specific runner options include test case repository and list.  A normal config file should look like 

- -
{
-  "memory_report": false,
-  "logcat": true,
-  "overall_status": true,
-  "b2g_status": true,
-  "get_event": true,
-  "rootdir": "tests/mtbf",
-  "workspace": "/tmp/workspace",
-  "manifest_prefix": "mtbf",
-  "archive": "output",
-  "runlist": "runlist/all.list",
-  "level": 4
-}
- - - -

Contributing to the project

- -

If you have any questions about the Firefox OS MTBF tests or are interested in contributing to this important automation development effort, feel free to contact us at wachen@mozilla.com

- -

How to migrate test cases from Gaia-ui-tests

- -

This section provides a guide to migrating tests between gaia-ui tests and MTBF.

- -

Step 1: Rename

- - - -

Step 2: Add

- - - -

Step 3: Principles

- - - -

Step 4: About apps

- -
    -
  1. apps > mtbf_apps if needed.
  2. -
  3. Import original apps.
  4. -
  5. Add __init__() and any functions you need.
  6. -
- -

Step 5: After you have finished

- -
    -
  1. Test each test case using Test full suite > Test full suite with shuffle
  2. -
  3. Check PEP8 errors
  4. -
  5. Use a pull request to add your test cases to the main repo! Do not push directly.
  6. -
diff --git a/files/fr/archive/b2g_os/automated_testing/reftests/index.html b/files/fr/archive/b2g_os/automated_testing/reftests/index.html deleted file mode 100644 index 6bab5de637..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/reftests/index.html +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: Firefox OS reftests -slug: Archive/B2G_OS/Automated_testing/Reftests -tags: - - B2G - - Firefox OS - - Tests automatiques -translation_of: Archive/B2G_OS/Automated_testing/Reftests ---- -
-

Les tests de référence (ou reftests), sont des tests simples qui comparent, deux rendus d'interface utilisateur, d'une application web séparément (Des éléments HTML, par exemple) pour vérifier si ils sont identiques ou non. Cet article vous fournit tout ce que vous devez savoir pour lancer la suite reftests de Mozilla sur B2G. Pour en savoir plus sur reftests, lisez Créer des tests unitaires basés sur reftest (Ressource en anglais).

-
- -

Prérequis pour lancer reftests

- -

Vous pouvez lancer reftests sur B2G. Il est principalement essayé sur l'émulateur, mais en théorie doit fonctionner tout aussi bien sur des appareils. Dans cet article $B2G_HOME fait référence au clone du dépôt B2G. Vous trouverez ci-dessous ce que vous aurez besoin de compiler ou paramétrer, avant de pouvoir essayer de lancer les reftests B2G.

- -
-

Si vous obtenez ce stacktrace pendant que vous jouez les reftests:

- -

ImportError: cannot import name expected

- -
File "gecko-dev/objdir-b2g-ics-emulator/_tests/reftest/runreftestb2g.py", line 16, in <module>
- -
    from b2g_desktop import run_desktop_reftest
- -
File "Projects/gecko-dev/objdir-b2g-ics-emulator/_tests/reftest/b2g_desktop.py", line 14, in <module>
- -
     from marionette import Marionette, expected
- -
 
- -
Ceci est un bogue connu sur https://bugzilla.mozilla.org/show_bug.cgi?id=1114474#c7
-
- -

Build B2G for the target you're testing

- -

Regular B2G build instructions apply — no need for any special build options.

- -

The B2G config that you will be using (what you pass to ./config.sh) will probably be emulator as that is what reftests are typically run on. Before building B2G for the emulator config, pay special attention to the Emulator build issues section in the Firefox OS build prerequisites page.

- -

As usual, make sure adb is in your path and that it successfully connects to your running emulator or device. Try adb devices to make sure it is working ok.

- -

Running reftests

- -

Having satisfied the above prerequisites, you can then run reftests using one of the following sets of terminal commands.

- -

For the emulator

- -

Use mach:

- -
cd $B2G_HOME
-​./mach reftest-remote
- -

This will run all reftests. If you want to run a specific reftest, do the following:

- -
cd $B2G_HOME
-./mach reftest-remote relative/path/from/B2G/to/reftest.list
- -

For a real device

- -

Running reftests on a device is not officially supported yet. One problem is that most devices don't support the minimum required resolution (800x1000) for many of the tests. But if you want to try anyway, you should be able to do so using the following steps:

- -
cd $B2G_HOME/objdir-gecko
-make package-tests
-source _virtualenv/bin/activate
-cd dist/test-package-stage/reftest
-python runreftestb2g.py --b2gpath $B2G_HOME --xre-path /path/to/dir/containing/desktop/xpcshell --ignore-window-size relative/path/from/B2G/objdir-gecko/to/reftest.list
- -

Running crashtests

- -

To run crashtests, do the following:

- -
cd $B2G_HOME
-​./mach crashtest-remote
- -

This will run all crashtests. If you want to run a specific crashtest, do the following:

- -
cd $B2G_HOME
-./mach reftest-remote relative/path/from/B2G/to/crashtests.list
- -

Running jsreftests

- -

JSReftests are not officially supported yet. See bug 972870 for progress updates on adding jsreftests to mach.

- -

Running reftest with non-default options

- -

You can optionally add --total-chunks and --this-chunks arguments as you would with regular desktop reftests. Use:

- -
mach help reftest-remote
- -

for a full list of supported arguments.

- -

Running reftest with a downloaded emulator

- -

If you've built B2G for another config (like otoro) and want to run the tests on an emulator, you can do so without building an emulator yourself. Just download the latest trunk arm emulator and do the following:

- -
pip install marionette-client
-python runreftestb2g.py --emulator arm --b2gpath path/to/emulator --xre-path /path/to/dir/containing/desktop/xpcshell --ignore-window-size --emulator-res 800x1000 <path_to_reftest_manifest>
- -

Running reftest with a downloaded emulator and downloaded tests.zip package

- -

If you want to run reftests against a downloaded emulator and a downloaded tests.zip package, you should extract them both.

- -

Then run the following commands:

- -
cd $TESTS_ZIP_DIR/mozbase
-python setup_development.py
-cd $TESTS_ZIP_DIR/marionette
-python setup.py develop
-cd $TESTS_ZIP_DIR/reftest
-python runreftestb2g.py --emulator arm --b2gpath $EMULATOR_DIR --xre-path /path/to/dir/containing/desktop/xpcshell --ignore-window-size --emulator-res 800x1000 <path_to_reftest_manifest>
- -
-

Note: For best results, you should perform the above steps using a Python virtualenv.

-
- -

Troubleshooting

- -

The following sections provide some answers to common problems encountered when trying to use reftests.

- -

I can't build the emulator!

- -

If you have trouble building B2G in the emulator config, check out the Emulator build issues section in the Firefox OS build prerequisites page.

- -

Check that your B2G build/emulator works and that ADB can connect to it

- -

First check that your B2G build runs normally. If this is an emulator build, then ./run-emulator.sh should work: it should start up the emulator and boot B2G inside it. If it doesn't, get the log from adb logcat and ask for help. If ADB fails to connect to the running emulator, make sure that you have no other (Android or B2G) devices connected, and try passing in the -e option to tell adb to focus on the emulator:

- -
adb logcat -e
- -

Once you have verified that your B2G build/emulator works normally and that ADB can connect to it, the next step is to verify that your xpcshell desktop executable runs normally. If you built B2G for a real device and ADB can't connect to it, check out Connecting a Firefox OS device to the desktop.

- -
-

Note: None of the errors below should occur if you are using mach. If you have problems with mach, please file a bug under Testing/Reftest and CC :ahal

-
- -

Check that you can run your desktop xpcshell executable

- -

The python runreftestb2g.py command line above will try to run xpcshell on your desktop with the path specified by the --xre-path argument. Check that running xpcshell from the current directory with this relative path actually works.

- -

For example, suppose that your command line contains:

- -
--xre-path /hack/mozilla-central/objdir/dist/bin
- -

Try running this from the same directory as you want to run python runreftestb2g.py from:

- -
$ /hack/mozilla-central/objdir/dist/bin/xpcshell
- -

This should land you in a special-looking shell like this:

- -
js>
- -

If this fails with an error message complaining about being unable to find or load certain shared libraries, like this

- -
/hack/mozilla-central/objdir/dist/bin/xpcshell: error while loading shared libraries: libxul.so: cannot open shared object file: No such file or directory
- -

then you need to set the right environment variable so that it looks for these libraries in the same directory. On Linux, you would set LD_LIBRARY_PATH to the same directory as you want to pass as --xre-path. For example, this should work:

- -
LD_LIBRARY_PATH=/hack/mozilla-central/objdir/dist/bin /hack/mozilla-central/objdir/dist/bin/xpcshell
- -

On Mac OSX, the environment variable to set is DYLD_LIBRARY_PATH.

- -

Check that reftest can find httpd.js

- -

If reftest still fails to run — returning early with an error — the next most likely cause of trouble is it failing to find certain files that it needs to load. The first file that it could fail to find is httpd.js. Typically, the reason why it would not find it is that you accidentally built xpcshell with --disable-tests. So, make sure that the path you pass to --xre-path does contain a httpd.js file under the components subdirectory.

- -

This is good:

- -
$ find /hack/mozilla-central/objdir/dist/bin/ -name httpd.js
-/hack/mozilla-central/objdir/dist/bin/components/httpd.js
-/hack/mozilla-central/objdir/dist/bin/modules/commonjs/sdk/test/httpd.js
- -

This is bad (was caused by --disable-tests):

- -
$ find /hack/mozilla-central/objdir/dist/bin/ -name httpd.js
-/hack/mozilla-central/objdir/dist/bin/modules/commonjs/sdk/test/httpd.js
- -

Check that you didn't forget to make package-tests

- -

Forgetting the make package-tests step described above would certainly explain why nothing works.

- -

Check that you passed a correct relative path to the reftest.list

- -

The final argumant in the command line running reftest is the relative/path/from/B2G/objdir-gecko/to/reftest.list. This must be a relative path from the B2G/objdir-gecko directory to a reftest.list file under it. So check that a reftest.list file is actually present there! If it isn't, compare your command line to the sample command line below, and/or check that you didn't forget to make package-tests as explained above.

- -

Sample command line:

- -
$ LD_LIBRARY_PATH=/hack/mozilla-central/objdir/dist/bin python runreftestb2g.py --b2gpath /hack/b2g/B2G/ --xre-path /hack/mozilla-central/objdir/dist/bin  --ignore-window-size --emulator arm --emulator-res 800x1000 tests/layout/reftests/css-gradients/reftest.list
- -

Here, we are running only the css-gradients directory of reftests.

diff --git a/files/fr/archive/b2g_os/automated_testing/test_execution_chart/index.html b/files/fr/archive/b2g_os/automated_testing/test_execution_chart/index.html deleted file mode 100644 index f01bb8274f..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/test_execution_chart/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Tableau d'exécution des tests -slug: Archive/B2G_OS/Automated_testing/Test_Execution_Chart -translation_of: Archive/B2G_OS/Automated_testing/Test_Execution_Chart ---- -

- -
-

Il y a différentes plate-formes B2G actuellement utilisées par les développeurs. Le tableau des exécutions de tests montre quels sont les outils de tests supportés pour chaque plate-forme, ainsi que les plate-formes actuellement utilisées pour l'intégration en continu.

-
- -

Légende

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Outil de testversion b2g pour bureauémulateur b2gversions pour appareils
b2gperfNNS J
eidetickerNNS
tests d'intégration gaiaS Trtbdtbd
tests ui gaiaS T TrNS J
tests unitaires gaiaS T TrNN
tests émulateur webapiNS TN
mochitestsSS TS
reftestsNS TN
tests xpcshellNS TN
- -

 

diff --git a/files/fr/archive/b2g_os/automated_testing/tests_cppunit/index.html b/files/fr/archive/b2g_os/automated_testing/tests_cppunit/index.html deleted file mode 100644 index 3f833b952f..0000000000 --- a/files/fr/archive/b2g_os/automated_testing/tests_cppunit/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Tests Cppunit -slug: Archive/B2G_OS/Automated_testing/Tests_Cppunit -tags: - - Automatisation - - cppunit - - tests -translation_of: Archive/B2G_OS/Automated_testing/Cppunit_Tests ---- -
-

Les tests Cppunit, sont des tests unitaires sans tête (headless) Gecko C++. Vous pouvez lancer les tests Cppunit sur B2G; dans cet article, nous verrons comment les réaliser. Actuellement, les tests sont effectués principalement sur l'émulateur, mais devrait en théorie fonctionner aussi bien sur les appareils.

-
- -
-

A noter: Dans cet article, $B2G_HOME fait référence au clone du dépôt B2G.

-
- -

À la dur

- -

Actuellement, il n'y a pas de commande mach pour lancer les tests cppunit, alors nous sommes cantonnés à les lancer "à la dur".

- -

Prérequis

- - - -

Lancer les tests

- -

Vous pouvez alors lancer les tests xpcshell en démarrant d'abord un émulateur puis en exécutant les commandes suivante:

- -
cd $B2G_HOME/objdir-gecko
-make package-tests
-cd dist/test-stage/cppunittests
-python remotecppunittests.py --xre-path $B2G_HOME/objdir-gecko/dist/bin --adbpath $ADB_PATH --dm_trans=adb --addEnv LD_LIBRARY_PATH=/vendor/lib:/system/lib:/system/b2g <test1> <test2> ...
diff --git a/files/fr/archive/b2g_os/b2g_os_architecture/index.html b/files/fr/archive/b2g_os/b2g_os_architecture/index.html deleted file mode 100644 index 0b01d8807d..0000000000 --- a/files/fr/archive/b2g_os/b2g_os_architecture/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Architecture de B2G OS -slug: Archive/B2G_OS/B2G_OS_Architecture -tags: - - Architecture B2G OS - - B2G - - B2G OS -translation_of: Archive/B2G_OS/Architecture ---- -

Cet article détaille l'architecture de B2G OS

- -
-

B2G OS est constitué de trois couches :

- -
    -
  1. Gaia
  2. -
  3. Gecko
  4. -
  5. Gonk
  6. -
- -

Gaia

- -

Gaia est l'interface utilisateur ; elle comporte les applications systèmes telles que téléphone, SMS, Horloge, Agenda qui sont réalisées en HTML, CSS et Javascript.

- -

Code source : https://github.com/mozilla-b2g/gaia

- -

Gecko

- -

Gecko est le moteur de rendu web qui affiche et traite HTML, CSS et Javascript et qui implémente divers composants chrome:// et API Web.

- -

Code source : https://github.com/mozilla/gecko-dev

- -

-
- -

Gonk

- -

Gonk se compose du noyau Android, de la couche d'abstraction matérielle HAL (Hardware Abstraction Layer) et des pilotes de périphériques.

diff --git a/files/fr/archive/b2g_os/bluetooth_api/index.html b/files/fr/archive/b2g_os/bluetooth_api/index.html deleted file mode 100644 index b9c49720fe..0000000000 --- a/files/fr/archive/b2g_os/bluetooth_api/index.html +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: L'API Web Bluetooth -slug: Archive/B2G_OS/Bluetooth_API -tags: - - API - - B2G - - Non-standard - - WebAPI -translation_of: Archive/B2G_OS/Bluetooth_API ---- -
-

Non standard
- Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

-
-

Cette API est disponible sur Firefox OS pour des applications internes seulement.

-
- -

L'API WebBluetooth permet à une application web de se connecter à des périphériques Bluetooth. C'est une API complètement expérimentale et non-standard, elle n'est actuellement disponible que pour les applications certifiées. Cependant, il y a de bonnes raisons d'avoir une telle API disponible ; cette question sera examinée dans le cadre du groupe de travail des applications système du W3C .

- -
-

Remarque: Les développeurs d'applications qui souhaitent envoyer des données à un périphérique Bluetooth peuvent utiliser share activity. Cette activity permet seulement le partage d'images, d'audio, de vidéo et de contenu vCard.

-
- -

Aperçu de l'API

- -

Le principal point d'entrée de l'API est la propriété Navigator.mozBluetooth qui retourne un objet BluetoothManager.

- -

Interfaces de base

- -

Les interfaces suivantes fournissent une application avec les fonctionnalités de base Bluetooth

- -
-
BluetoothManager
-
Permet l'accès à tous les adaptateurs Bluetooth disponibles sur l'appareil. Des adaptateurs sont l'interface de connexion pour connecter un autre périphérique Bluetooth à l'appareil actuel.
-
BluetoothAdapter
-
Utilisé pour traiter toutes les opérations demandées par les réseaux Bluetooth.
-
BluetoothClassOfDevice
-
Fournit identifiant / informations d'un périphérique Bluetooth distant, disponible au stade recherche.
-
BluetoothDevice
-
Fournit des informations concernant un périphérique Bluetooth distant.
-
BluetoothDiscoveryHandle
-
Utilisé pour notifier à l'application en cours de la découverte d'un périphérique Bluetooth distant.
-
BluetoothPairingHandle
-
Contient les fonctionnalités nécessaires pour achever une opération de connexion, y compris les clés d'accès, et les mécanismes pour répondre aux codes PIN saisis par l'utilisateur et confirmer des codes d'authentification.
-
BluetoothPairingListener
-
Définit les gestionnaires d'événements déclenchés pour différentes opérations d'appariement.
-
- -

Interfaces Gatt

- -

Les interfaces suivantes permettent à Firefox OS de communiquer avec les services basés sur Gatt (Generic Attribute Profile) sur les périphériques distants Smart/LE(intelligent/basse énergie).

- -
-
BluetoothGatt
-
Handles de communications initiales et de connexions avec les services Gatt.
-
BluetoothGattServer
-
Fournit des fonctionnalités serveur Bluetooth GATT pour permettrent la création de services et caractéristiques Bluetooth Smart/LE.
-
BluetoothGattService
-
Représente un service fourni par un serveur GATT, y compris la définition du service, la liste des services inclus, et la liste des caractéristiques de ce service.
-
BluetoothGattCharacteristic
-
Représente une caractéristique de service GATT, qui comprend la définition de la caractéristique, la valeur des propriétés et les informations de configuration, et la liste de descripteurs qui fournissent des informations connexes.
-
BluetoothGattDescriptor
-
Représente un descripteur GATT, qui contient des informations connexes sur une valeur caractéristique.
-
- -

Interfaces d'événements Bluetooth

- -

Ces objets représentent différents événements ayant lieu au sein d'une interaction Bluetooth.

- -
-
BluetoothAdapterEvent
-
Donne accès à l'objet BluetoothAdapter et à son adresse comme paramètre d'un gestionnaire d'événement adapteradded ou adapterremoved (voir BluetoothManager.onadapteradded et BluetoothManager.onadapterremoved).
-
BluetoothAttributeEvent
-
Permet d'accéder à des attributs modifiés et à leurs nouvelles valeurs par le paramètre attributechanged du gestionnaires d'événements (y compris BluetoothManager.onattributechanged, BluetoothAdapter.onattributechanged et BluetoothDevice.onattributechanged ).
-
BluetoothDeviceEvent
-
Fournit un accès à un périphérique trouvé/apparié (BluetoothDevice) ou à l'adresse ou à un dispositif non apparié comme paramètre d'un gestionnaire d'événement devicefound, devicepaired ou deviceunpaired.
-
BluetoothGattCharacteristicEvent
-
Fournit un accès à une mise à jour BluetoothGattCharacteristic comme paramètre du gestionnaire BluetoothGatt.oncharacteristicchanged, lorsque l'événement characteristicchanged est déclenché.
-
BluetoothLeDeviceEvent
-
Permet d'accéder à un objet BluetoothDevice de LE, à sa valeur RSSI et son annonce d'enregistrement, par le paramètre d'un gestionnaire d'événement devicefound (voir BluetoothDiscoveryHandle.ondevicefound).
-
BluetoothPairingEvent
-
Permet d'accéder à un nom de dispositif et à l'objet BluetoothPairingHandle requis pour l'association de périphériques (incluant par exemple BluetoothPairingListener.ondisplaypasskeyreq et BluetoothPairingListener.onenterpincodereq).
-
- -

Les messages du système

- -

Comme certaines actions de périphériques distants peuvent nécessiter le réveil d'une application pour les manipuler, il y a plusieurs messages système liés à Bluetooth:

- - - -
-

Note : une application peut réagir à ces messages en les demandant dans son fichier manifeste et en utilisant la fonction navigator.mozSetMessageHandler() pour définir un gestionnaire de messages.

-
- -

Interfaces obsolètes

- -
-
BluetoothStatusChangedEvent
-
Fournit un accès à l'information concernant tout changement d'état d'un périphérique Bluetooth.
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationStatutCommentaires
Web BluetoothProjetBrouillon. Ne fait partie d'aucune spécification à l'heure actuelle. Doit être discuté avec le W3C's System Applications Working Group.
- -

Compatibilité des navigateurs

- -

Nous convertissons les données de compatibilité dans un format JSON. - Ce tableau de compatibilité utilise encore l'ancien format - car nous n'avons pas encore converti les données qu'il contient. - Vous pouvez nous aider en contribuant !

- -
- - -
- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Support simplePas de supportPas de supportPas de supportPas de supportPas de support
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidAndroid WebviewFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome for Android
Bluetooth 'v2' supportPas de supportPas de supportPas de support2.1Pas de supportPas de supportPas de supportPas de support
Bluetooth initial support: BluetoothManager, BluetoothAdapter, BluetoothDevice, BluetoothDeviceEvent, BluetoothStatusChangedEventPas de supportPas de supportPas de support1.0.1Pas de supportPas de supportPas de supportPas de support
-
- -

Notes de compatibilité

- - - -

Voir aussi

- - - -

 

- -

 

diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/chirimen_faq/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/chirimen_faq/index.html deleted file mode 100644 index ec8a0fcd1a..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/chirimen_faq/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: FAQ CHIRIMEN -slug: Archive/B2G_OS/Board_guide/CHIRIMEN/CHIRIMEN_FAQ -tags: - - Boot to Gecko - - CBC - - MozOpenHard -translation_of: Archive/B2G_OS/Board_guide/CHIRIMEN/CHIRIMEN_FAQ ---- -

FAQ sur CHIRIMEN

- -

 

- -

déplacée vers : https://chirimen.org/docs/en/FAQ.html

diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/index.html deleted file mode 100644 index 7bb603c9f4..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/index.html +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: CHIRIMEN -slug: Archive/B2G_OS/Board_guide/CHIRIMEN -translation_of: Archive/B2G_OS/Board_guide/CHIRIMEN ---- -

- -
-

Une communauté de Mozilla Factory, appelée "MozOpenHard Project", est en train de développer une puissante carte développeur sous B2G (version OSS de Firefox OS) avec des APIs Web pour le contrôle du matériel (I2C et GPIO). L'environnement qui comporte aussi bien le matériel que le logiciel est appelé CHIRIMEN. Il est en cours de développement et n'est pas encore prêt pour être commercialisé.

-
- -
-

Note : La version japonaise de cette page est actualisée en premier.

-
- -

À propos de CHIRIMEN

- -

CHIRIMEN est un environnement de développement pour contrôler des périphériques physiques, comme des capteurs et des actionneurs, qui utilisent des technologies Web. C'est le terme fourre-tout pour à la fois l'ordinateur monocarte et son logiciel.

- -

Le paquet contient le matériel de l'ordinateur monocarte, le logiciel Boot to Gecko le faisant fonctionner et la version des APIs de bas-niveau telles que WebGPIO et WebI2C qui peuvent contrôler les capteurs et périphériques grâce à JavaScript. Il a été développé par la communauté MozOpenHard au Japon et le nom de code CHIRIMEN lui a été donné.

- -

Le code du matériel et du logiciel de CHIRIMEN sera bientôt rendu open source.

- -

FAQ

- -

Obtenir une carte

- -
-
Carte assemblée
-
Il n'est pas possible pour l'instant d'acheter cette carte, elle est toujours en développement. Il est prévu que le prix soit inférieur à 50 dollars.
-
Code source du matériel et du logiciel
-
Il est en cours de préparation pour être distribué au public en open source. 
-
Comment obtenir l'image de l'OS
-
Voir cette page.
-
- -

Guide de démarrage rapide

- -

Voir la page d'accueil démarrage rapide

- -

Spécifications de l'appareil

- -

Vous trouverez plus d'informations sur les spécifications de l'appareil sur notre page de spécifications des téléphones et appareils.

- -

Matériel

- - - -

EditDépôt

- - diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/os_image/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/os_image/index.html deleted file mode 100644 index 83bebc0961..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/os_image/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Comment obtenir l'image de l'OS -slug: Archive/B2G_OS/Board_guide/CHIRIMEN/OS_Image -translation_of: Archive/B2G_OS/Board_guide/CHIRIMEN/OS_Image ---- -

Comment obtenir l'image de l'OS

- -

Cette section donne les instructions pour mettre à jour B2G sur votre carte CHIRIMEN.
-
- voir aussi https://github.com/MozOpenHard/CHIRIMEN/wiki/Setup

- -
-

À FAIRE : écrire les instructions.

-
diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/basic_startup/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/basic_startup/index.html deleted file mode 100644 index 9d948af50b..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/basic_startup/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Section Mise en route -slug: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/basic_startup -tags: - - CHIRIMEN -translation_of: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/basic_startup ---- -

Page déplacée sur chirimen.org.

diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/board_connectors/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/board_connectors/index.html deleted file mode 100644 index 7e720fd668..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/board_connectors/index.html +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: Disposition des connecteurs -slug: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/board_connectors -tags: - - CHIRIMEN - - Connecteurs -translation_of: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/board_connectors ---- -

Cette section présente la disposition des connecteurs et des interrupteurs d'un ordinateur monocarte CHIRIMEN. 

- -

Disposition des connecteurs

- -

chirimen_board_front

- -

chirimen_board_back

- -
    -
  1. USB OTG
    - Port USB de type MicroUSB Type B utilisé pour brancher l'ordinateur hôte pour les développements.
  2. -
  3. Connecteur vidéo de type Micro HDMI
    - Connecteur pour brancher un moniteur vidéo HDMI.
  4. -
  5. USB UART
    - Ce connecteur n'est pas utilisé dans de nombreux cas. Le signal produit par le Soc et en provenance du port UARTx est sorti ici converti en USB.
  6. -
  7. Entrée alimentation 5V
    - C'est un connecteur pour l'alimentation de 5V avec un diamètre externe de 2, 5 mm.
  8. -
  9. USB HOST
    - Port USB Type A pour brancher un adaptateur réseau, un périphérique de pointage etc.
  10. -
  11. Interrupteur du mode de récupération
    - Interrupteur essentiellement utilisé lors de la mise à jour d'un système d'exploitation.
  12. -
  13. CN1 (Connecteur1)
    - C'est un groupe de broches d'entrées/sorties à usage générique constituant un point central où sont collectés les signaux tels que GPIO, I2C, émetteur-récepteur universel synchrone-asynchrone et SPI. Se référer au chapitre suivant pour la signification de chaque broche de ce connecteur.
  14. -
  15. CN2  (Connecteur2)
    - C'est un autre groupe de broches d'entrées/sorties à usage générique.
  16. -
  17. Slot Micro SD
    - C'est un slot MicroSD. Il n'est pas supporté par le système d'exploitation à la date de février 2016.
  18. -
- -

Brochage de l'interface E/S à usage générique

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 CN1 (Connecteur1) CN2 (Connecteur2)
NuméroDescription Description
1GND GND
2I2C-2 SDA GND
3I2C-2 SCL GND
4UART-3 RX GND
5UART-3 TX Sortie audio G
6ADC-0 in Sortie audio D
7SPI-0 CS Entrée audio G
8SPI-0 CLK Entrée audio D
9SPI-0 RX GND audio
10SPI-0 TX PWM-0
11SPI-1 CS I2C-0 SCL
12SPI-1 CLK I2C-0 SDA
13SPI-1 RX UART-0 TX
14SPI-1 TX UART-0 RX
15GND GPIO-6 A1
16VCC 3.3V Power ON
17VCC 3.3V GND
18VCC 5V VSYS 5V
diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/dev_windows/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/dev_windows/index.html deleted file mode 100644 index 7d08b3bd7f..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/dev_windows/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Version Windows de la section Préparation de l'environnement de développement -slug: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/dev_windows -tags: - - CHIRIMEN - - Firefox WebIDE -translation_of: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/dev_windows ---- -

Page déplacée vers chirimen.org.

diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/firmware_update_guide_for_windows/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/firmware_update_guide_for_windows/index.html deleted file mode 100644 index 85a13a85d4..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/firmware_update_guide_for_windows/index.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Guide de mise à jour du firmware pour windows -slug: >- - Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/firmware_update_guide_for_windows -tags: - - CHIRIMEN - - Windows -translation_of: >- - Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide/firmware_update_guide_for_windows ---- -

Page déplacée vers chrimen.org.

diff --git a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/index.html b/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/index.html deleted file mode 100644 index 86434da533..0000000000 --- a/files/fr/archive/b2g_os/board_guide/chirimen/quick_start_guide/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Guide de démarrage rapide CHIRIMEN -slug: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide -translation_of: Archive/B2G_OS/Board_guide/CHIRIMEN/Quick_start_guide ---- -

Pour débuter avec CHIRIMEN, consultez nos guides de démarrage rapide :  

- - - -

Note : Les articles sans lien sont en cours de réalisation.

diff --git a/files/fr/archive/b2g_os/board_guide/index.html b/files/fr/archive/b2g_os/board_guide/index.html deleted file mode 100644 index 1bb20aff0a..0000000000 --- a/files/fr/archive/b2g_os/board_guide/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Guide des cartes Firefox OS -slug: Archive/B2G_OS/Board_guide -tags: - - Cartes - - Firefox OS -translation_of: Archive/B2G_OS/Board_guide ---- -
-

Cette section contient des informations à destination des développeurs, en rapport avec des téléphones spécifiques sous Firefox OS — à la fois des appareils développeurs et utilisateurs. Des informations génériques sont disponibles pour Compiler et installer Firefox OS et Développer Firefox OS. Veuillez vous y rendre pour construire et installer la plate-forme à partir de zéro. Les développeurs en possession de téléphones particuliers peuvent cependant trouver les articles suivants utiles.

-
- -

Informations sur les cartes développeur

- -

Les cartes ci-dessous sont spécialement destinées aux développeurs qui veulent expérimenter Firefox OS, en développant des applications ou en contribuant au système d'exploitation lui-même. 

- -
-
Raspberry Pi
-
Cet article contient des informations sur le Raspberry Pi avec Firefox OS.
-
CHIRIMEN
-
Cet article contient des informations sur la carte de développement Firefox OS CHIRIMEN.
-
- -

Informations générales sur Firefox OS

- -
-
Données sur les téléphones Firefox OS
-
Dans cet article sont listés les différents téléphones Firefox OS disponibles accompagnés d'informations telles que leurs noms de code, leur disponibilité et leurs caractéristiques matérielles spécifiques.
-
Caractéristiques des appareils
-
Cette page recense les caractéristiques matérielles classiques sous Firefox OS et les configurations matérielles minimales requises.
-
Dépannage
-
Cet article propose des astuces pour résoudre les problèmes les plus couramment rencontrés en utilisant Firefox OS.
-
Bonnes pratiques pour appareils de référence ouverts
-
Un ensemble de bonnes pratiques que nous considérons comme devant être recommandées pour tout appareil de référence ouvert disponible. Tous les appareils de référence Firefox OS récents ont respecté ces pratiques.
-
diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/appareils_compatibles/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/appareils_compatibles/index.html deleted file mode 100644 index 8eb4bbec5a..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/appareils_compatibles/index.html +++ /dev/null @@ -1,360 +0,0 @@ ---- -title: Appareils compatibles -slug: Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/Appareils_compatibles -tags: - - Téléphones B2G OS - - Téléphones supportés par B2G OS -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/Compatible_Devices ---- -
-

Installez facilement B2G OS sur votre appareil avec B2G installer - un module Firefox.

-
- -
-

Note : Chaque appareil a sous son nom la cible de construction recommandée (voir nom de code ou surnom). Par exemple, pour compiler pour le Nexus 6, utilisez ./build.sh nexus-6-l. Les noms de code des appareils sont donnés directement par les fabricants. Vous pouvez les trouver dans le fichier build.prop d'une ROM stock.

-
- -

Appareils de développement

- -

Ce sont les appareils de référence officiels pour le développement de B2G OS.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Image
Nom
- (version Android)
Z3 Compact (Kitkat)
- Plate-forme Sony Shinano
Z3 (Kitkat)
- Plate-forme Sony Shinano
Flame (Kitkat)
Nom de codearies-kkleo-kkflame-kk
Build et instructions d'installationhttps://discourse.mozilla-community.org/t/building-b2g-os-for-aries-z3c/8082 https://discourse.mozilla-community.org/t/flame-builds/8548
Disponible dans B2G InstallerOuiNonOui
- -

Appareils supportés par la communauté

- -

Ces appareils sont pris en charge grâce aux efforts de la communauté. N'hésitez pas à y contribuer !

- -
-

La fréquence de distribution des builds peut fortement varier selon le nombre de mainteneurs et le temps disponible.

-
- -

Appareils fonctionnels

- -

Ces appareils disposent de builds pour faire tourner B2G OS :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Image
Nom
- (version Android)
ZTE Open CNexus 5WileyFox SwiftFairphone 2
Nom de codeopenc-fr / openc-ebay   
Build et instructions d'installationhttps://discourse.mozilla-community.org/t/zte-open-c/8402/ -

https://discourse.mozilla-community.org/t/test-b2gos-on-nexus-5/9405/1

-
  -

https://discourse.mozilla-community.org/t/fairphone-2-build/8641/
- https://discourse.mozilla-community.org/t/fairphone-2-support-for-b2g-installer-landed/8334

-
Disponible dans B2G Installer -

Non

- -

(mais un buildbot est disponible)

-
OuiOuiPas pour l'instant, mais presque terminé. La version avec blob fonctionne.
- -

Travaux en cours

- -

Le support de ces appareils est en cours :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Image 
Nom
- (version Android)
E3
- Plate-forme Sony Yukon
Z1 Compact (Lollipop)
- Plate-forme Sony Rhine
Xiaomi Redmi 1S
Nom de codeflamingo-lamami-larmani
Build et instructions d'installationhttps://discourse.mozilla-community.org/t/b2g-os-flamingo-sony-xperia-e3-builds/8361https://discourse.mozilla-community.org/t/support-for-amami-xperia-z1c-building-debugging-providing-builds/8348https://discourse.mozilla-community.org/t/wip-xiaomi-redmi-1s-hongmi-1s/10273
État du supportBloqué, problème avec les outils de flashageTout début des tests de compilationTests préliminaires de compilation
- -

Appareils sur lesquels un portage est envisageable

- -

Voici une liste (non exhaustive) d'appareils sur lesquels un portage est éventuellement possible, grâce à la disponibilité de version AOSP ou Cyanogen Mod, ou parce qu'ils fonctionnaient sous Firefox OS jusqu'à la version 2.6.

- -
-

Note : Pour l'instant, il n'existe aucun portage pour ces téléphones mais la construction de B2G OS est possible. Voir la section Comment compiler pour plus d'informations. N'hésitez pas à maintenir ces builds.

-
- -

Appareils Nexus

- -

Ces appareils sont (presque) automatiquement supportés par B2G OS car ceux sont les appareils de référence de Google pour AOSP.

- - - - - - - - - - - - - - - - -
Nexus 6Nexus 4
  
- -

Appareils Sony

- -

Ces appareils bénéficient de l'initiative Open Devices de Sony Mobile dont le but est de supporter dans AOSP tous les appareils Xperia modernes.

- -

Ils sont construits sur une base AOSP Lollipop.

- -
-

À l'heure actuelle, le support de l'appareil photo est absent de la plupart des appareils Sony. Cela est tributaire des travaux en cours des développeurs de Sony.
- Là aussi, nous avons besoin de contributeurs pour maintenir ces portages.

-
- -

Les appareils dont le support B2G OS est à venir ne sont pas listés ici.

- -

Plate-forme Sony Shinano

- - - - - - - - - - - - - - - - - - - - - - -
 
Z3 Z3 Tablet CompactZ2
leo-l scorpion-lsirius-l
- -
-
- -

Plate-forme Sony Rhine

- -
-

Les appareils Rhine étant dotés d'une puce NFC ancienne, cette fonctionnalité est actuellement absente. Voir le bogue 1226720 Nous avons besoin de contributeurs pour maintenir ces portages.

-
- - - - - - - - - - - - - -
Z1
honami-l
- -

Plate-forme Sony Yukon

- - - - - - - - - - - - - - - - - - - -
T2 UltraT3M2
tianchi-lseagull-leagle-l
- -

Appareils CyanogenMod supportés

- -

Voici des dragons ! (à compléter)

- -

Anciens appareils

- -

Certains anciens appareils ne sont plus maintenus par la communauté mais il est encore possible pour des bénévoles de les garder en vie (Ouais Open-Source !). N'hésitez pas à contacter l'équipe qui travaillait dessus auparavant pour avoir de l'aide.

- -

Pour l'instant, aucun appareil n'est présent ici.

- -

Appareils obsolètes

- -
-

Oubliez le support de ces appareils si vous disposez de l'un d'eux.

-
- -

Plusieurs vieux appareils ne sont plus maintenus sous B2G OS, et aucune communauté n'est là pour les garder en vie. La situation actuelle de ces appareils est inconnue ce qui signifie que les principales branches de B2G OS ne pourront sans doute pas être compilées dessus.

- - - - - - - - - - - - - - - - - - - - - - -
Geeksphone PeakGeeksphone KeonZTE OpenTCL Fire
peakkeoninarihamachi
- - - - - - - - - - - - - - - - - - - - - - -
Samsung Galaxy S2Galaxy NexusNexus SNexus S 4G
galaxy-s2galaxy-nexusnexus-snexus-s-4g
- - - - - - - - - - - - - - - - - - - - - - -
Foxconn InFocusVia VixenPandaboardRaspberry Pi
flatfishvixenpandaboardrpi
diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_build_variables_reference_sheet/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_build_variables_reference_sheet/index.html deleted file mode 100644 index 4b4f08fc2f..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_build_variables_reference_sheet/index.html +++ /dev/null @@ -1,261 +0,0 @@ ---- -title: Variable de référence pour les builds B2G -slug: >- - Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/B2G_Build_Variables_Reference_Sheet -tags: - - B2G - - Commandes - - Compilation - - Firefox OS - - Gaia - - Gecko - - Références(2) - - Variables -translation_of: >- - Archive/B2G_OS/Building_and_installing_B2G_OS/B2G_Build_Variables_Reference_Sheet ---- -

Cet article fournit une référence pour toutes les variables des builds B2G, les builds Gaia et les builds Gecko et les commandes dont vous pouvez avoir besoin durant des opérations relative à la compilation de Firefox OS.

- -

B2G build

- -

Variables

- -
-
Example
-
xxx
-
- -

Commandes

- -
-
./repo sync
-
xxx
-
./config.sh
-
xxx
-
- -

Gaia build

- -

Variables

- -

Voir le Gaia MakeFile pour la définition de toutes ces variables.

- -
-
ADB
-
xxx
-
APP
-
Certaines commandes peuvent agir sur tout gaia ou seulement sur une seule application. Cette variable d'environnement défini si l'on veut qu'une commande agisse sur une app seulement, et si c'est le cas, sur laquelle.
-
GAIA_DIR
-
xxx
-
PROFILE_DIR
-
xxx
-
PROFILE_FOLDER
-
Cela défini le dossier où le profil sera généré. Par défaut il est défini à gaia/profile pour les profils normaux et gaia/profile-debug pour les profils DEBUG=1 profils (voir plus loin.)
-
COREWEBAPPS_DIR
-
xxx
-
SCHEME
-
xxx
-
GAIA_DOMAIN
-
xxx
-
DEBUG
-
Lorsque la valeur est à 1, les profils généreés peuvent être utilisés avec Firefox desktop ou le simulator Firefox OS (B2G Desktop): DEBUG=1 DESKTOP=0 make.
- Il inclut l'extension httpd.js et les préférences de configurations pour accèder aux applications en utilisant app://<appname>.gaiamobile.org/. Quelques applications sont connues pour fonctionner ainsi, notamment l'application SMS.
-
LOCAL_DOMAINS
-
xxx
-
DESKTOP
-
Cela inclus un set d'extensions dans le profil DEBUG pour permettre aux applications systèmes de Gaia d'être chargées dans Firefox. Cela ne fonctionne plus bien et est obsolète en faveur de Mulet. La valeur par defaut est mise à 1 lorsque DEBUG=1 est utilisé, mais vous pouvez vouloir le désactiver du fait de son non fonctionnement.
- Prenez des précautions car cela ne fonctionne pas aussi avec le Simulator Firefox OS (B2G Desktop).
-
DEVICE_DEBUG
-
Active une expérience plus developer-friendly : active le debuggage adb avec les devtools, désactive le lock screen et active les préférences pour permettre de debugger les applications certifiées.
-
NO_LOCK_SCREEN
-
xxx
-
SCREEN_TIMEOUT
-
Lorsque la valeur est à 0, cette préférence désactive le timeout de l'écran.
-
SYSTEM
-
xxx
-
GAIA_PORT
-
xxx
-
GAIA_LOCALES_PATH
-
xxx
-
GAIA_INSTALL_PARENT
-
xxx
-
LOCALES_FILE
-
xxx
-
GAIA_KEYBOARD_LAYOUTS
-
xxx
-
GAIA_KEYBOARD_DOWNLOADABLE_LAYOUTS
-
xxx
-
GAIA_KEYBOARD_ENABLE_USER_DICT
-
xxx
-
LOCALE_BASEDIR
-
xxx
-
BUILD_APP_NAME
-
Essentiellement un alias pour APP (voir plus haut).
-
PRODUCTION
-
Crée des builds productions (à la place d'une build ingénieur); L'id de l'app Facebook et d'autres id d'applications productions sont utilisées dedans. Sinon make production fonctionnera
-
GAIA_OPTIMIZE
-
Lorsque la valeur est mise à 1 cela active les étapes d'optimisations lorsqu'on compile Gaia comme la minification du code JS. Toutes les applications gaia ne sont pas affectées par cela, tant que la fonction est opt-in.
-
GAIA_DEVICE_TYPE
-
xxx
-
GAIA_DEV_PIXELS_PER_PX
-
Définis la densité de pixels pour l'appareil visé. Cela affecte les images et/ou les vidéos qui sont copiées dans la build. La valeur par défaut est à 1, mais les appareils avec des spécifications plus haute - par exemple le  Flame doivent utiliser une valeur de 1.5. C'est aliasé comme GAIA_DPPX.
-
DOGFOOD
-
Active les build Dogfood gaia.
-
MOZILLA_OFFICIAL
-
Lorsque la valeur n'est pas à 0, une build Mozilla-branded sera produite. La valeur par défaut est à 0.
-
GAIA_DEFAULT_LOCALE
-
xxx
-
GAIA_PRETRANSLATE
-
xxx
-
GAIA_CONCAT_LOCALES
-
xxx
-
GAIA_DISTRIBUTION_DIR
-
Utilisez cela pour spéficier une Gaia customisée; voir le Market customizations guide pour plus détails.
-
GAIA_APPDIRS
-
xxx
-
GAIA_ALLAPPDIRS
-
xxx
-
GAIA_MEMORY_PROFILE
-
xxx
-
NOFTU
-
Lorsque la valeur est à 1, cela met la préférence pour déactiver le FTU.
-
REMOTE_DEBUGGER
-
xxx
-
TARGET_BUILD_VARIANT
-
xxx
-
SETTINGS_PATH
-
xxx
-
FTU_PING_URL
-
xxx
-
KEYBOARD_LAYOUTS_PATH
-
xxx
-
CONTACTS_IMPORT_SERVICES_PATH
-
xxx
-
EMAIL_SERVICES_PATH
-
xxx
-
STAGE_DIR
-
xxx
-
GAIA_APP_TARGET
-
xxx
-
BUILD_DEBUG
-
xxx
-
VARIANT_PATH
-
xxx
-
REBUILD
-
xxx
-
P
-
xxx
-
VERBOSE
-
xxx
-
RAPTOR
-
Active les marques de performances en mesurant et sortant les meta-données dans le logcat. Utilisation : RAPTOR=1 make reset-gaia
-
SHARE_PERF_USAGE
-
xxx
-
DEFAULT_KEYBOAD_SYMBOLS_FONT
-
xxx
-
DEFAULT_GAIA_ICONS_FONT
-
xxx
-
MOZ_APPROX_LOCATION
-
Utilisez cela pour activer le panneau vie privée, par défaut la valeur est à off sauf dans les build ingénieur.
-
- -

Commandes

- -

La suite est une liste d'abreviations des commandes les plus utilisées dont vous aurez besoin. Une liste plus détaillée peut être trouvée dans Gaia make options reference.

- -
-
make
-
Construit uniquement le profil.
-
make reset-gaia
-
Supprime le profil précédent et installe un nouveau profil Gaia.
-
make install-gaia
-
Install Gaia par dessus sans rien supprimer.
-
make production
-
Fait la même chose que PRODUCTION=1 make reset-gaia.
-
make clean
-
Supprime le profil généré.
-
make really-clean
-
Supprime le profil généré et le dossier de xul-runner; vous devez utiliser cela seulement quand tout est cassé.
-
- -

Gecko build

- -

Variables

- -
-
B2G_DEBUG
-
xxx
-
VARIANT
-
Spéficie les variantes de gecko que vous voulez compiler. Les types valides sont listés ci-dessous:
-
- - - - - - - - - - - - - - - - -
eng -

Ceci est le flag par défaut. Un make est la même chose que make eng.

- -
    -
  • Installe les modules tagger avec: eng, debug, user, et/ou development.
  • -
  • Installe les modules non-APK qui n'ont pas de tags spéficiés.
  • -
  • Installe les APK selon les fichiers de définition du produit, en plus des tagger APK.
  • -
  • ro.secure=0
  • -
  • ro.debuggable=1
  • -
  • ro.kernel.android.checkjni=1
  • -
  • adb est activé par defaut.
  • -
  • marionette est activé
  • -
  • Ne possède pas les notifications de mise à jour par défaut ( B2G_UPDATER=1 est activé )
  • -
-
user -

Ceci est le flag attendu pour une release final.

- -
    -
  • Installe les modules tagger avec user.
  • -
  • Installe les modules non-APK qui n'ont pas de tags spéficiés.
  • -
  • Installe les APK selon les fichiers de définition du produit, les tags sont ignorés pour les modules APK.
  • -
  • ro.secure=1
  • -
  • ro.debuggable=0
  • -
  • adb est désactivé par défaut.
  • -
  • Optimise par défaut
  • -
-
userdebug make userdebug -

La même chose que user, excepté:

- -
    -
  • Installe aussi les modules tagger avec debug.
  • -
  • ro.debuggable=1
  • -
  • adb est activé par défaut.
  • -
  • marionette est activé
  • -
-
- -
-

Note: Cette table est inspirée par la table Android Build Variants .

-
- -

Commandse

- -
-
./build.sh buildsymbols
-
Crée une build symbols pour debugger; voir Uploading symbols to Mozilla's symbol server.
-
./build.sh gecko-update-full
-
Crée un fichier mar OTA; voir Firefox OS update packages.
-
./build.sh gecko-update-fota
-
Crée un mar/zip FOTA basé sur des fichiers qui contiennent seulement un sous-ensemble de fichiers et de dossiers; see Firefox OS update packages.
-
./build.sh gecko-update-fota-full
-
Crée un mar/zip FOTA basé sur les fichiers; voir Firefox OS update packages.
-
./build.sh gecko-update-fota-fullimg
-
Crée un mar/zip FOTA basé sur les partitions; voir Firefox OS update packages.
-
diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_installer_add-on/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_installer_add-on/index.html deleted file mode 100644 index 35dcacb05d..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_installer_add-on/index.html +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: Module complémentaire B2G installer -slug: Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/B2G_installer_add-on -tags: - - B2G - - B2G installer - - Installation - - Module complémentaire - - blobfree -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/B2G_installer_add-on ---- -

- -

Le module complémentaire B2G installer contribue à résoudre un problème de longue date : l'impossibilité de redistribuer des builds du système complet à cause des blobs (composants propriétaires.) Cet article détaille comment le module fonctionne et comment l'installer.

- -
-

Important : Ce module complémentaire en est encore à un stade expérimental et il a besoin d'un mainteneur. À l'heure actuelle, il est conseillé de ne l'utiliser qu'avec un appareil que vous savez comment reflasher en cas de problème. Il n'est supporté que sur Linux (32 et 64 bits) et OSX (64 bits) pour l'instant.

-
- -
-

Important : En ce  qui concerne la première version de ce module, il est important de comprendre que ses objectifs sont en réalité de prendre en charge le cas pratique de base suivant : flasher B2G sur un appareil supporté, fonctionnant sous le système Android (ou CyanogenMod). La gestion des mises à jour de B2G et l'obtention des Blobs à partir d'une source autre que l'appareil lui-même ne sont pas (encore) abordées.

-
- -

Construire une distribution sans blob

- -

Une solution au problème cité plus haut consiste à produire une distribution dite sans blob ou "blobfree" (voir le bug 1175934) qui englobe tout ce qui est nécessaire pour la compilation d'un appareil :

- - - -

Une telle distribution sans blob peut être construite en spécifiant la cible |blobfree| make lors de la compilation de B2G :

- -
$ ./build.sh blobfree
- -
-

Note : Plus de détails là-dessus figurent dans la section blobfree de la page sur la compilation de B2G.

-
- -

Le module complémentaire B2G installer simplifie l'installation de ce type de distribution.

- -

Ajout du support d'un nouvel appareil

- -

Pour rendre un nouvel appareil disponible dans le module lorsque l'utilisateur branche un appareil compatible, quelques étapes sont requises :

- -
    -
  1. Assurez-vous que la génération d'une distribution sans blob est prise en charge par votre appareil. Vérifiez la section blobfree de la page Compiler B2G.
  2. -
  3. Dès lors que votre appareil dispose de ce support, vous pouvez faire en sorte qu'il soit disponible à partir du module. Tout d'abord, clonez le dépôt des builds.
  4. -
  5. Enregistrez un bogue dans Bugzilla pour le composant Firefox OS :: B2GInstaller.
  6. -
  7. Enrichissez builds.json avec les informations relatives à votre nouvel appareil.
  8. -
  9. Envoyez un PR sur Github, joignez-le au bogue que vous avez créé et faîtes une demande de review :gerard-majax.
  10. -
- -

Le fichier builds.json contient un tableau d'objets, chacun décrivant un appareil compatible. Ces objets possèdent les propriétés suivantes :

- - - -
-

Note : Chaque propriété Android ou variable Fastboot peut être comparée soit avec une chaîne de caractères (égalité stricte) soit avec un tableau (égalité stricte avec une des valeurs du tableau.)

-
- -

Installation

- -

Pour installer le module complémentaire B2G installer, il faut suivre ces étapes :

- - - -

Vous pouvez également faire usage d'une machine virtuelle préconçue sous la forme d'un paquet OVA. Elle offre une installation prête à l'emploi de B2G Installer qui prend en charge certains appareils automatiquement (udev, etc. déjà configurés.) Voir le bug 1204482 pour plus de détails.

- -
https://drive.google.com/file/d/0B8Ju6ek0Knd6aE5RdUkwTnlUTjQ/view?usp=sharing
-SHA1: 9cbf309fa48eb73d983150e6aab21f7facb4f327
- -

Utilisation

- -
    -
  1. Lorsque le module complémentaire démarre, il télécharge builds.json depuis Github pour obtenir la liste des builds disponibles. Il est toujours possible d'utiliser un fichier zip local.
  2. -
  3. Branchez votre appareil en USB et attendez qu'il soit détecté par le module.
  4. -
  5. Après que l'appareil ait été détecté comme étant supporté, une liste des builds sera proposée.
  6. -
  7. Sélectionnez le build que vous voulez, cliquez sur Flash et patientez.
  8. -
- -

Captures d'écran

- -

Quand aucun appareil n'est branché :

- -

First page, no device plugged

- -

Quand un build est sélectionné :

- -

Device plugged in and detected

- -

Lors du flashage d'un appareil :

- -

Device plugged in and flashing a device

- -

Données

- -

Dans le but d'améliorer le module, nous collectons certaines données lorsqu'il est utilisé. Le principal objectif est de s'assurer que le module fonctionne correctement chez tout le monde. Nous collectons également des données pour savoir quels appareils intéressent les utilisateurs, de manière à ajuster les builds supportés en conséquence. Aucun pistage n'est fait.

- -

Nous envoyons deux pings de télémétrie externes pour collecter ces données :

- - - -

Hacking

- - - -

À FAIRE

- -
    -
  1. Sortir de la branche mozilla-central pour la compilation. Cela va sans doute imposer la réécriture des tests avec autre chose que mochitests.
  2. -
  3. Convertir moz.build en Makefile pour la construction des outils.
  4. -
  5. Prendre en charge des sources externes de blobs (nécessaire pour gérer les cas de mise à jour).
  6. -
diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_os_update_packages/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_os_update_packages/index.html deleted file mode 100644 index 021099552f..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/b2g_os_update_packages/index.html +++ /dev/null @@ -1,534 +0,0 @@ ---- -title: Créer et appliquer des paquets de mise à jour B2G OS -slug: Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/B2G_OS_update_packages -tags: - - B2G OS - - FOTA - - Firefox OS - - Gaia - - Mise à jour - - OTA - - Paquets -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/B2G_OS_update_packages ---- -

- -
-

Si vous souhaitez permettre aux utilisateurs de B2G OS de mettre à jour facilement la version de leur système sur leurs appareils, vous devez leur créer un paquet de mise à jour qu'ils puissent utiliser. Cet article décrit les différents types de paquets disponibles pour les mises à jour et détaille la construction du paquet, l'hébergement des mises à jour (et comment le système scrute les mises à jour disponibles), ainsi que l'application et la vérification de ces mises à jour.

-
- -

Créer et appliquer une mise à jour se divise en quatre étapes :

- -
    -
  1. Construire des paquets de mise à jour incrémentale à partir d'ancienne(s) version(s) vers une nouvelle version compilée sur un hôte.
  2. -
  3. Rechercher le bon paquet de mise à jour à télécharger sur le client.
  4. -
  5. Télécharger la mise à jour.
  6. -
  7. Appliquer la mise à jour aux fichiers existants sur l'appareil.
  8. -
- -

Chacune de ces étapes est abordée ci-dessous.

- -
-

Note : Il existe un certain nombre d'outils pratiques pour construire et tester les mises à jour système de Firefox OS, disponibles dans b2g/tools/update-tools.

-
- -

Prérequis

- -

Pour construire et appliquer des mises à jour, vous devez vous assurer que votre build dispose de l'updater et des outils de mise à jour associés. Par défaut, ceux-ci ne sont présents que dans les variantes userdebug et user. Vous pouvez néanmoins forcer leur construction en ajoutant la ligne suivante dans votre fichier .userconfig :

- -
export B2G_UPDATER=1
- -

Pour signer les paquets de mise à jour, vous aurez besoin d'installer un environnement d'exécution Java (JRE) ou le kit de développement logiciel Java (JDK), et d'avoir la commande java accessible via le path par défaut.

- -

Types de mise à jour

- -

Il existe deux types de mise à jour à connaître : FOTA (Firmware Over-The-Air) et OTA Gecko/Gaia (Over-The-Air). Voyons les différences qu'il y a entre les deux.

- -

Mises à jour FOTA

- -

Le système B2G OS entier peut être actualisé via les mises à jour FOTA, la technologie sous-jacente qui est commune avec le projet Android. Parmi les emplacements du disque dur du téléphone qui peuvent être modifiés par les mises à jour FOTA figurent la partition système, le noyau, le modem en bande de base, l'image de recovery utilisée pour la mise à jour, ou tout autre fichier présent sur l'appareil.

- -

B2G OS ne dépend pas d'un client FOTA en particulier, une API que nous appelons librecovery constituant une interface d'abstraction. Néanmoins, nous recommandons l'utilisation du client de recovery GOTA (voir plus bas pour plus de détails), et le texte présent se base sur le fait que GOTA est utilisé.

- -

Les paquets de mise à jour FOTA consistent essentiellement en un fichier nommé update.zip. Ce paquet est constitué des éléments suivants

- - - -

Ce format et l'ensemble des fichiers sont identiques à ceux utilisés pour les mises à jour Android normales, excepté que B2G OS encapsule en plus le paquet update.zip dans un wrapper mar (MAR signifie Mozilla ARchive). Ce wrapper mar offre un degré supplémentaire de vérification, ce qui est expliqué plus bas.

- -

Mises à jour OTA Gecko/Gaia

- -

Autrement, il est possible de ne mettre à jour sur un appareil B2G OS que les fichiers de Gecko et Gaia, à travers un mécanisme que nous appelons mises à jour OTA Gecko/Gaia. L'ensemble des fichiers de Gecko et Gaia — ce qui comprend le cœur exécutif de Gecko et l'interface utilisateur de l'appareil — se trouve dans le répertoire /system/b2g de l'appareil. Il s'agit du seul répertoire auquel les mises à jour OTA peuvent apporter des modifications.

- -

Les mises à jour OTA Gecko/Gaia utilisent la même technologie que celle mise en œuvre pour mettre à jour le navigateur web Firefox pour ordinateur de bureau. Un peu comme les paquets FOTA update.zip abordés plus haut, les mises à jour OTA consistent en un fichier MAR contenant un ensemble de diffs binaires et de nouveaux fichiers nécessaires à la mise à jour du client vers une version plus récente du logiciel.

- -

Le client Gecko vérifie l'intégrité des MARs qu'il a téléchargés, ces derniers pouvant être signés par plusieurs parties.

- -

Pourquoi avoir deux technologies de mise à jour ?

- -

Les mises à jour OTA ne sont pas aussi complètes que les FOTA, mais elles sont beaucoup plus ergonomiques et simples à appliquer, et elles correspondront mieux à vos besoins concernant les mises à jour :

- - - -

Bien sûr, s'il vous faut actualiser des fichiers autres que ceux de Gecko/Gaia, vous n'aurez pas d'autre choix que de passer par un paquet FOTA complet.

- -

Voyons à présent la suite avec l'examen du processus de construction du paquet.

- -

Construire des paquets de mise à jour

- -

La construction des mises à jour est le processus consistant à générer les fichiers nécessaires à la mise à jour des clients B2G OS d'une version X du logiciel vers une nouvelle version Y. Le paquet de mise à jour requis pour le client dépend des fichiers qui ont été modifiés entre la version X et la version Y.

- - - -

Pour générer un paquet de mise à jour incrémentale (que ce soit pour des mises à jour FOTA ou OTA Gecko/Gaia), nos outils nécessitent la construction complète de la version X et de la version Y. Une construction complète signifie que le paquet intègre tous les fichiers nécessaires au flashage d'un client. Lorsque nous produisons une construction complète pour la version X, nous ne savons pas quelle sera la future version vers laquelle il faudra effectuer la mise à jour de la version X . C'est pour cette raison que les paquets FOTA et les paquets Gecko/Gaia complets doivent être construits pour chaque version. Cela permet de générer aussi bien une mise à jour OTA Gecko/Gaia incrémentale qu'une mise à jour FOTA incrémentale si besoin, entre la version X et toutes les versions futures.

- -

Schématiquement, le processus de construction d'un mise à jour ressemble à ceci :

- -
    -
  1. Avec le logiciel version X - -
      -
    • Générer un fichier MAR OTA Gecko/Gaia complet du contenu de /system/b2g.
    • -
    • Générer une archive zip des fichiers cibles pour la mise à jour FOTA complète, éventuellement signée, pour les partitions de l'appareil. Le zip des fichiers cibles est référencé plus bas sous le nom DEVICE-target_files-$VARIANT.$USER.zip, c'est un zip contenant les fichiers pour mettre à jour les répertoires du téléphone, dont SYSTEM/, BOOT/, etc. Un fichier FOTA complet update.zip peut être produit à partir du zip des fichiers cibles.
    • -
    -
  2. -
  3. Avec le logiciel version Y -
      -
    • Générer un fichier MAR OTA Gecko/Gaia complet du contenu de /system/b2g.
    • -
    • Générer une archive zip des fichiers cibles pour la mise à jour FOTA complète, éventuellement signée, pour les partitions de l'appareil. Le zip des fichiers cibles est référencé plus bas sous le nom DEVICE-target_files-$VARIANT.$USER.zip, c'est un zip contenant les fichiers pour mettre à jour les répertoires du téléphone, dont SYSTEM/, BOOT/, etc. Un fichier FOTA complet update.zip peut être produit à partir du zip des fichiers cibles.
    • -
    -
  4. -
  5. Si seuls des fichiers de /system/b2g ont changé, générer un fichier MAR pour une mise à jour OTA Gecko/Gaia incrémentale de la version X vers la version Y.
  6. -
  7. Sinon, générer un fichier FOTA incrémental update.zip de la version X vers la version Y. Intégrer cette mise à jour FOTA incrémentale update.zip dans un fichier MAR pour le distribuer auprès du client B2G.
  8. -
  9. Signer les paquets comme cela est requis pour les autorisations de distribution.
  10. -
- -

Les sous-sections ci-dessous décrivent comment utiliser les outils de B2G pour implémenter chacune de ces étapes.

- -
-

Note : les étapes ci-après supposent que vous avez déjà mis en place un environnement de compilation b2g à l'emplacement $b2g. Les commandes ci-dessous font référence au script $b2g/build.sh mais make peut tout aussi bien être utilisé.

-
- -

Générer un fichier MAR complet de mise à jour OTA Gecko/Gaia

- -

Pour générer un MAR de mise à jour OTA complète à partir de la dernière compilation de b2g réussie (e.g. que vous avez compilée vous-même), vous devez invoquer la cible gecko-update-full. Pour placer le MAR dans $b2g/objdir-gecko/dist/b2g-update/b2g-gecko-update.mar, utilisez les commandes suivantes :

- -
$ cd $b2g
-$ ./build.sh gecko-update-full
-$ cp objdir-gecko/dist/b2g-update/b2g-gecko-update.mar <destination>
-
- -

Générer un fichier MAR de mise à jour FOTA complète

- -

Pour générer un MAR de mise à jour FOTA complète à partir de la dernière compilation de b2g réussie (e.g. que vous avez compilée vous-même), vous devez invoquer la cible gecko-update-fota-full. Cela intègre le contenu de la partition /system dans sa totalité. Voici les commandes dont vous avez besoin :

- -
$ cd $b2g
-$ ./build.sh gecko-update-fota-full
-
- -

Un fichier ZIP sera généré ($PRODUCT_OUT/fota/full/update.zip) ainsi qu'un fichier MAR ($PRODUCT_OUT/fota-$TARGET_DEVICE-update-full.mar). Le fichier ZIP peut être utilisé directement avec adb sideload, tandis que le MAR est prévu pour être distribué de la même manière que tout autre paquet de mise à jour.

- -

Générer un fichier MAR de mise à jour FOTA plus un paquet de recovery

- -

Depuis Firefox OS 2.2 (mi-avril et après) nous avons ajouté une nouvelle cible pour make, elle peut être appelée ainsi :

- -
$ cd $b2g
-$ ./build.sh gecko-update-fota-fullimg
- -

Elle est utilisée pour produire un paquet de recovery constituant un dump du jeu d'images de partitions. Le jeu par défaut est contrôlé par la variable B2G_FOTA_FULLIMG_PARTS, définie dans gonk-misc/Android.mk (parmi la plupart des autres nouvelles fonctionnalités vues plus bas.) Il s'agit d'une chaîne de caractères utilisant l'espace comme séparateur, listant les instances mountpoint:image à inclure. La valeur par défaut est "/boot:boot.img /system:system.img /recovery:recovery.img /cache:cache.img".

- -

Avec tout ça, nous avons également introduit quelques nouvelles variables d'environnement pour contrôler la production de deux autres cibles make — gecko-update-fota et gecko-update-fota-full :

- - - -
-

Note : Toutes ces nouvelles fonctionnalités reposent fortement sur la disponibilité d'un fichier recovery.fstab correct fourni pour l'appareil concerné.

-
- -

Générer un fichier MAR de mise à jour FOTA Gecko/Gaia partielle

- -

Une mise à jour FOTA partielle utilise le même mécanisme que pour celles complètes, mais par défaut, seuls sont inclues les mises à jour Gecko/Gaia, tout comme une mise à jour OTA normale. Des fichiers supplémentaires autres que ceux de Gecko/Gaia peuvent aussi être intégrés (tels que des polices de caractères).

- -

La logique derrière la génération d'un paquet de mise à jour FOTA partielle est principalement conditionnée par des problèmes de licence : lors de la construction d'un paquet de mise à jour FOTA complet, la partition système entière (au moins) sera intégrée. Elle peut comporter des blobs que vous n'êtes pas autorisé à redistribuer. Cependant, comme la distribution de MAR est utile et que Gecko/Gaia eux-mêmes sont des logiciels libres, il n'y a aucune raison pour que nous ne puissions pas être en mesure de les distribuer de cette façon. Une FOTA partielle permet de ne mettre à jour qu'un sous-ensemble du système. Dans un tel scénario, une mise à jour OTA pourrait être employée à la place, mais cela aurait un coût : les mises à jour OTA ont besoin d'assez d'espace sur la partition système pour contenir à la fois les fichiers Gecko/Gaia existants et les fichiers de mise à jour décompressés. Une mise à jour FOTA partielle ne possède pas cette contrainte car elle écrase les fichiers existants par ceux de la mise à jour.

- -

Pour créer une mise à jour FOTA partielle à partir de la dernère compilation de b2g réussie (e.g. que vous avez compilée vous-même), invoquez la cible gecko-update-fota avec les commandes suivantes :

- -
$ cd $b2g
-$ ./build.sh gecko-update-fota
-
- -

Elles vont générer un fichier ZIP ($PRODUCT_OUT/fota/partial/update.zip) et un fichier MAR ($PRODUCT_OUT/fota-$TARGET_DEVICE-update.mar). Le fichier ZIP peut être utilisé directement avec adb sideload, tandis que le fichier MAR est destiné à être distribué de la même manière que tout autre paquet de mise à jour.

- -

La construction peut être contrôlée par un certain nombre de variables d'environnement, les plus utiles d'entre-elles sont documentées ci-dessous :

- - - - - - - - - - - - - - - - - - - - - - -
VariableSignification
$B2G_FOTA_DIRSListe des répertoires à inclure dans la mise à jour, séparés par des espaces. system/b2g par défaut.
$TARGET_UPDATE_BINARYBinaire utilisé pour exécuter le script Edify à l'intérieur du paquet. Si aucun binaire n'est spécifié, un updater binaire pré-construit issu de ICS sera utilisé.
$FOTA_FINGERPRINTSListe d'empreintes Android, séparées par des virgules, avec lesquelles faire les contrôles. Le cas pratique est la possibilité de distribuer des paquets de mise à jour Gecko/Gaia par-dessus un système de base Gonk sous contrôle qu'il ne nous est pas possible de distribuer légalement. Par exemple, les builds communautaires de l'Open C les utilisent.
- -
-

Note : Un ensemble complet de ces variables est défini dans le fichier Android.mk du répertoire gonk-misc ; remarquez que $FOTA_FINGERPRINTS est utilisé dans notre outil update_tools.py.

-
- -

Générer une archive zip des fichiers cibles pour une mise à jour FOTA complète

- -

Invoquez la cible target-files-package pour construire un zip des fichiers cibles qui pourra servir à générer des mises à jour FOTA tant complète qu'incrémentale. Le zip des fichiers cibles peut aussi être signé avec des clés personnalisées pour garantir que seules les mises à jour FOTA en provenance de sources connues  puissent être installées. Après signature des fichiers cibles, toutes les images et mises à jour (OTA aussi) doivent à nouveau être générées pour obtenir les clés insérées.

- -
-

Note : Le zip des fichiers cibles est généré à l'emplacement out/target/product/$DEVICE/obj/PACKAGING/target_files_intermediates/$DEVICE-target_files-$VARIANT.$USER.zip

-
- -

Cette étape est réalisée par les commandes suivantes :

- -
$ cd $b2g
-$ ./build.sh target-files-package
-$ cp out/target/product/$DEVICE/obj/PACKAGING/target_files_intermediates/$DEVICE-target_files-$VARIANT.$USER.zip <destination>
-
- -

Les valeurs des variables dans les commandes listées ci-dessus doivent être remplies comme suit :

- - - - - - - - - - - - - - - - - - - - - - -
VariableSignification
$DEVICENom de l'appareil pour le produit AOSP
$VARIANTeng, user, ou userdebug
$USERLe nom d'utilisateur du build
- -

Signer le zip des fichiers cibles d'une FOTA complète

- -

Les distributions correctes devraient en principe être signées par des clés personnalisées connues uniquement du vendeur. Grâce à l'introduction de cette couche de sécurité supplémentaire, le fait de posséder de telles clés empêchera l'installation de mises à jour FOTA dont la source est inconnue. Pour que cela fonctionne, les images flashées sur un appareil doivent inclure les clés publiques tandis que les mises à jour doivent être signées avec les clés privées correspondantes. 

- -

La première étape consiste à générer des clés personnalisées et à les stocker en lieu sûr. Android Open Source Project dispose d'un script pour générer ces clés. Pour une compatibilité totale, récupérez ce script depuis la branche correspondant à la version de Gonk présente sur l'appareil en question. La version pour la branche master se trouve ici.

- -

Plusieurs clés sont requises — créez-les avec les commandes suivantes. releasekey est la clé à utiliser pour signer les paquets de mise à jour FOTA.

- -
$ development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
-$ development/tools/make_key platform '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
-$ development/tools/make_key shared '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
-$ development/tools/make_key media '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
-
- -

Une fois les clés présentes, le fichier zip des fichiers cibles peut être signé par l'emploi des commandes suivantes. Elles vont insérer les clés publiques et modifier les propriétés du build pour refléter le fait qu'il ait été signé.

- -
$ cd $b2g
-$ ./build/tools/releasetools/sign_target_files_apks \
-  --default_key_mappings $RELEASEKEY_FOLDER \
-  --replace_ota_keys \
-  --signapk_path prebuilts/sdk/tools/lib/signapk.jar \
-  $UNSIGNED_TARGET_FILES_ZIP \
-  $SIGNED_TARGET_FILES_ZIP
- -

Les valeurs des variables présentes dans les commandes listées plus haut doivent être remplies de la manière qui suit :

- - - - - - - - - - - - - - - - - - - - - - -
VariableSignification
$RELEASEKEY_FOLDERLe chemin du dossier contenant les clés personnalisées
$UNSIGNED_TARGET_FILES_ZIPLe zip des fichiers cibles FOTA à signer.
$SIGNED_TARGET_FILES_ZIPLe zip des fichiers cibles FOTA qui doit être généré
- -

Générer un fichier MAR de mise à jour OTA incrémentale

- -

Dans cet exemple, nous supposons générer une mise à jour du logiciel version X vers la version Y. L'emplacement du fichier MAR de l'OTA Gecko/Gaia complète compilé à partir du logiciel version X en suivant les instructions ci-dessus sera appelé $MAR_X par la suite. ll peut s'agir d'un chemin sur le serveur de compilation comme /home/build/b2g/versions/X/update.mar. De manière similaire, l'emplacement du MAR complet compilé à partir de la version Y sera appelé $MAR_Y.

- -

L'outil build-gecko-mar.py va générer un fichier MAR de mise à jour OTA Gecko/Gaia incrémental en utilisant $MAR_X et $MAR_Y. La destination du fichier généré sera appelée $GENERATED_INCREMENTAL_MAR_X_Y. Utilisez les commandes suivantes pour cette étape :

- -
$ cd $b2g
-$ ./tools/update-tools/build-gecko-mar.py --from $MAR_X --to $MAR_Y $GENERATED_INCREMENTAL_MAR_X_Y
-
- -

Générer une archive zip de mise à jour FOTA incrémentale

- -

Dans cet exemple, nous supposons générer une mise à jour du logiciel version X vers la version Y. L'emplacement du zip cible pour la FOTA complète construite à partir du logiciel version X en utilisant les instructions ci-dessus sera appelé $TARGET_FILES_X par la suite. Il peut s'agir d'un chemin sur un serveur de compilation comme /home/build/b2g/versions/X/target_files.zip. De manière similaire, l'emplacement du zip cible pour la FOTA complète construite à partir de la version Y sera appelé $TARGET_FILES_Y.

- -

L'outil build/tools/releasetools/ota_from_target_files va générer un fichier FOTA update.zip incrémental en se servant de $TARGET_FILES_X et de $TARGET_FILES_Y. La destination de ce fichier intermédiaire sera appelée $INTERMEDIATE_FOTA_UPDATE_FOTA_X_Y.

- -

Après la génération de ce update.zip, la dernière étape sera de l'encapsuler dans un MAR pour le livrer au client B2G. L'outil tools/update-tools/build-fota-mar.p effectue cette opération. La destination où générer le fichier sera appelée $GENERATED_INCREMENTAL_FOTA_X_Y.

- -

Utilisez les commandes suivantes pour achever cette étape  :

- -
$ cd $b2g
-$ ./build/tools/releasetools/ota_from_target_files -v \
-    --incremental_from $TARGET_FILES_X \
-    --signapk_path prebuilts/sdk/tools/lib/signapk.jar \
-    --package_key $FOTA_SIGNING_KEY \
-    $TARGET_FILES_Y \
-    $INTERMEDIATE_FOTA_UPDATE_FOTA_X_Y
-$ ./tools/update-tools/build-fota-mar.py $INTERMEDIATE_FOTA_UPDATE_FOTA_X_Y --output=$GENERATED_INCREMENTAL_FOTA_X_Y
-
- -

Les valeurs des variables employées dans les commandes listées ci-dessus devraient être remplies de la manière suivante :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VariableMeaning
$TARGET_FILES_XLe zip des fichiers cibles FOTA pour la version X
$TARGET_FILES_YLe zip des fichers cibles FOTA pour la version Y
$INTERMEDIATE_FOTA_UPDATE_FOTA_X_YUn fichier update.zip temporaire à partir duquel générer un MAR
$GENERATED_INCREMENTAL_FOTA_X_YLe zip destination de la mise à jour incrémentale encapsulé dans un fichier MAR pour être livré aux clients
$FOTA_SIGNING_KEYChemin vers le préfixe d'une clé privée et d'un certificat public destinés à signer le fichier update zip. $FOTA_SIGNING_ZIP.pk8 et $FOTA_SIGNING_ZIP.x509.pem doivent tous deux être présents sur le système de fichiers. Si $TARGET_FILES_X n'est pas signé, cette option peut être omise ; la clé de test par défaut sera alors récupérée. Dans le cas où $TARGET_FILES_X est une clé personnalisée, se référer à la section pour la signature du zip des fichiers cibles pour savoir comment la créer, et ne pas oublier de signer $TARGET_FILES_Y.
- -

Hébergement des mises à jour et recherche de nouvelles versions côté client

- -

Les clients B2G OS scrutent les mises à jour en récupérant et analysant un manifeste de mise à jour : update.xml. Les clients B2G OS sont configurés pour rechercher des mises à jour sur des serveurs spécifiques — ils interrogent un chemin construit spécialement sur le serveur. HTTPS est le protocole recommandé pour être utilisé par le client pour interroger le serveur, cependant, HTTP est aussi pris en charge. Le serveur et le chemin consultés par les clients peuvent être modifiés par la livraison aux clients existants d'une mise à jour qui change le code de scrutation.

- -

Dans les exemples ci-dessous, nous estimerons que les mises à jour sont hébergées sur le serveur updates.b2g.com.

- -

L'URL scrutée par le client contient habituellement les paramètres suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamètreExplication
PRODUCT_MODELLe nom du modèle d'appareil. C'est la valeur ro.product.model de la base de données des propriétés de B2G.
CHANNELLe "canal" de mise à jour. Il est utile pour les tests : les serveurs peuvent être configurés pour héberger, par exemple, les canaux "nightly", "beta", et "release".
VERSIONLa version du logiciel du client. Par exemple, "18.0.2".
BUILD_IDUn ID unique, comme un horodatage, configuré pour une compilation en particulier.
- -

Le client Firefox utilise les valeurs de son hôte de mise à jour configuré et de ces valeurs pour construire une URL à interroger pendant l'exécution. La structure est la suivante :

- -
https://aus4.mozilla.org/update/3/%PRODUCT%/%VERSION%/%BUILD_ID%/%PRODUCT_DEVICE%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml
- -

Un exemple réel d'une telle URL est comme ceci :

- -
https://aus4.mozilla.org/update/3/B2G/37.0a1/20141214040212/flame/en-US/nightly-b2g37/Boot2Gecko%202.2.0.0-prerelease%20%28SDK%2019%29/default/default/update.xml?force=1
- -

Si le serveur renvoie "404 Not Found" en réponse à la requête du client, cela signifie qu'aucune mise à jour n'est disponible. S'il renvoie "200" et un fichier de manifeste, alors c'est qu'une mise à jour peut être disponible. Le manifeste décrit la version nouvellement disponible ; autrement dit, celle vers laquelle le client peut être mis à jour. Voici un exemple de manifeste :

- -
<?xml version="1.0"?>
-<updates>
-  <update type="major" appVersion="19.0" version="19.0" extensionVersion="19.0" buildID="20121210123456"
-          licenseURL="http://www.mozilla.com/test/sample-eula.html"
-          detailsURL="http://www.mozilla.com/test/sample-details.html"
-          isOSUpdate="true">
-    <patch type="partial" URL="https://updates.b2g.com/release/unagi1/18.0/20121203123456/update.mar"
-           hashFunction="SHA512" hashValue="5111e033875752b7d9b32b4795152dea5ef954cb8a9d4a602dd19a923b464c43521287dcb5781faf3af76e6dc5e8a3dd9c13edea18c1f2c8f3bd89e17d103d6f"
-           size="41901319"/>
-  </update>
-</updates>
-
- -

Il suit le même schéma que le manifeste de compilation B2G (voir le format updates.xml pour plus de détails). Les champs du manifeste décrivent :

- - - -
-

Note : Il existe un script utile de mise à jour disponible sur build-update-xml.py, lequel, à partir d'un fichier MAR donné, construit un fichier B2G OS update.xml pour test.

-
- -
-

Note : L'appareil du client ou l'utilisateur peut choisir de refuser une mise à jour.

-
- -
-

Note :  isOSUpdate="true" est requis pour les mises à jour FOTA mais pas pour les OTA.

-
- -

En utilisant le mécanisme décrit plus haut, les serveurs peuvent héberger des paquets de mise à jour pour que tout client avec une ancienne version puisse passer à une nouvelle version. Ou alors, ils peuvent héberger uniquement un "historique linéaire de mises à jour" à partir duquel les clients peuvent se mettre à jour via un chemin unique.

- -

Les détails de l'interaction entre les serveurs de compilation et l'hôte de mise à jour dépassent pour l'instant la portée de ce document. Elle est très grandement dépendante de l'environnement de production. Vous pouvez trouver quelques détails supplémentaires sur notre page de wiki Software Update.

- -

Vérifier et appliquer les mises à jour

- -

Après qu'un client B2G OS ait détecté avec succès une mise à jour (ce qui est fait depuis le système lui-même), téléchargé celle-ci et vérifié l'intégrité du paquet de mise à jour téléchargé, l'étape finale est d'appliquer la mise à jour.

- -

La première chose dans l'application d'une mise à jour est la vérification de la signature embarquée dans les paquets MAR (voir Generating an incremental FOTA update zip sur la façon dont elles sont créées). Cela est réalisé par le client B2G OS lui-même après le contrôle de l'intégrité du paquet téléchargé. Le code utilisé pour cette tâche est le même que ce soit pour les mises à jour FOTA ou pour celles OTA Gecko/Gaia.

- -
-

Note : Ce n'est pas le fichier MAR qui est signé : c'est le fichier zip FOTA empaqueté dans le MAR qui est signé par build/tools/releasetools/ota_from_target_file. La signature de la mise à jour FOTA fonctionne de la même manière que sur Android ; si vous lancez simplement le script sans spécifier de clé, il utilisera les clés développeurs build/target/product/security/testkeys.*. Ça ne pose pas de problème pour des tests, mais lorsque vous créez une véritable mise à jour vous aurez besoin d'une clé sécurisée — i.e. une que personne d'autre ne connaît. Comme l'appareil va également vérifier cette signature avant d'appliquer le patch, les images initiales de l'appareil doivent elles aussi contenir la clé.

-
- -
-

Note : Les clés mentionnées plus haut se trouvent dans les systèmes de compilation d'Android ; nous les avons dupliquées sur notre dépot platform_build.

-
- -

Après la vérification des signatures, le processus d'application d'une mise à jour diverge selon le type de mise à jour, OTA Gecko/Gaia ou FOTA. À ce stade, voyons les différences entre les deux.

- -

Appliquer des mises à jour OTA Gecko/Gaia

- -

Le client B2G OS applique celles-ci grâce à l'utilisation du binaire updater. Il fait partie de la distribution Gecko et son code est le même que celui utilisé pour mettre à jour la version de bureau de Firefox. Comme cela a été décrit précédemment, la mise à jour est appliquée pendant que le client B2G OS continue de fonctionner normalement. Pendant l'application des mises à jour, les utilisateurs sont toujours en mesure de passer des appels ou d'en recevoir, de lancer des applications, de naviguer sur le web etc.

- -

Les détails spécifiques au binaire updater dépassent le cadre de ce document mais il fonctionne approximativement de cette manière :

- - - -

Après le redémarrage du processus b2g, l'utilisateur bénéficiera de la nouvelle version du logiciel client B2G.

- -

Appliquer des mises à jour FOTA

- -

Elles sont appliquées par le client FOTA. Le client Gecko se "débarrasse" de la mise à jour en appelant l'API librecovery qui se chargera de l'appliquer. Ce qui arrive après cette étape est spécifique à chaque client FOTA.

- -

Dans l'implémentation de librecovery utilisée par le client GOTA, l'application du paquet de mise à jour téléchargé est planifiée et des commandes particulières sont mises en file d'attente pour le client de recovery. librecovery redémarre ensuite l'appareil en mode recovery. Le client recovery lance ensuite le script de mise à jour situé dans le fichier update.zip pour mettre à jour les fichiers et les partitions si nécessaire. Le client de recovery peut avoir besoin de redémarrer plusieurs fois afin de mettre à jour tous les fichiers.

- -

Après le redémarrage final, l'appareil fonctionnera avec la nouvelle version du logiciel client B2G OS.

diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/compiler_pour_le_flame_sur_os_x/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/compiler_pour_le_flame_sur_os_x/index.html deleted file mode 100644 index 263c6b7e7c..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/compiler_pour_le_flame_sur_os_x/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Compiler Firefox OS pour le Flame sur Mac OS X -slug: >- - Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/Compiler_pour_le_Flame_sur_OS_X -tags: - - Documentation de compilation - - Firefox OS - - Flame - - Guide - - Mac OS X -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/Building_for_Flame_on_OS_X ---- -

Cet article donne les instructions sur la façon de compiler Firefox OS pour les appareils Flame en utilisant un système Mac OS X comme plate-forme de compilation.

- -
Note : Ce guide part du principe que le célèbre gestionnaire de paquets Homebrew est installé. Si ce n'est pas le cas, vous allez devoir soit l'installer, soit installer un gestionnaire de paquets équivalent et apprendre à vous en servir.
- -

Préparation de l'environnement de compilation

- -

La première étape consiste à installer les prérequis pour la compilation comme d'habitude. Installez ensuite binutils afin que la commande objdump soit disponible pour les builds de débogage :

- -
brew install binutils
- -

Créez une image disque en utilisant le système de fichiers journalisé et sensible à la casse HFS+ puis montez l'image avec les commandes suivantes.

- -
hdiutil create -volname 'firefoxos' -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/firefoxos.sparseimage
-open ~/firefoxos.sparseimage
-cd /Volumes/firefoxos/
- -
-

Note : Comme l'image est créée en tant qu'image de type "sparse", seuls les blocs du disque réellement utilisés prendront de l'espace disque sur le support physique. Cela signifie qu'une image de 40 Go, comme celle ci-dessus, ne prendra pas vraiment jusqu'à 40 Go d'espace. Au lieu de ça, elle va croître progressivement au fur et à mesure que vous y écrirez des données.

-
- -

Clonage du dépôt B2G

- -

Évidemment, avant de pouvoir lancer votre première compilation, il est nécessaire de cloner le dépôt B2G. Il est important de noter que cela ne va pas tout récupérer. Seuls le système de construction et les utilitaires de configuration seront obtenus. La quasi-totalité du code proprement dit se trouve dans le principal dépôt Mercurial de Mozilla ; ces fichiers seront rapatriés plus tard lors du processus de configuration.

- -

Pour cloner le dépôt, utilisez git :

- -
git clone git://github.com/mozilla-b2g/B2G.git
- -

Une fois l'opération terminée (ça ne devrait prendre qu'une minute avec une connexion rapide), utilisez cd pour aller dans le répertoire B2G :

- -
cd B2G
- -

Configuration de B2G pour le flame

- -

Après avoir récupéré le cœur du système de construction de B2G, vous devez le configurer pour l'appareil sur lequel vous prévoyez de l'installer ; dans le cas présent, il s'agit du "flame". Exécutez la commande suivante depuis le répertoire B2G :

- -
./config.sh flame-kk
- -

C'est à ce moment que la plus grande partie du code sera téléchargée. Le code source faisant environ une quinzaine de giga-octets, le téléchargement va prendre un certain temps même avec une connexion internet rapide. Même avec une bonne connexion haut-débit, cela peut prendre une heure ou davantage.

- -
-

Note : Sérieusement, cela prendra vraiment énormément de temps si vous avez une connexion Internet plutôt lente. Tenez-en compte (ainsi que des coûts de connexion au méga-octet que vous pourriez avoir à payer) avant d'effectuer cette étape.

-
- -

Sauvegarde des fichiers importants de l'appareil

- -

Avant de commencer le processus d'installation, il est important de faire une sauvegarde de certains fichiers clés de l'appareil. Ceux-ci seront nécessaires si vous avez besoin de reflasher l'appareil. 

- -

À ce stade, branchez votre Flame s'il ne l'était pas déjà ; le processus de configuration aura besoin d'y accéder. Utilisez la commande adb devices pour vérifier s'il est connecté :

- -
adb devices -l
-
- -

Seront listés tous les appareils compatibles Android ou B2G connectés. Si le vôtre n'est pas dans la liste, c'est que quelque chose n'est pas connecté correctement.

- -

Après avoir obtenu la confirmation que l'appareil est bien connecté, vous pouvez réaliser la sauvegarde avec les commandes suivantes :

- -
mkdir flame-backup
-cd flame-backup
-adb pull /system system
-adb pull /data data
- -

À noter, si vous compilez pour la première fois, vous pouvez décider de partir sur la version la plus récente de l'image de base du flame ; voir https://developer.mozilla.org//fr/Firefox_OS/Guide_Telephone_Developpeur/Flame/mettre_a_jour_Flame#Flashage_vers_la_dernière_image_(2.5) pour davantage de détails.

- -

Contournement d'un problème de compilation avec Mac OS X

- -

Un problème peut survenir lors de la compilation sur Mac OS X. La communauté Mozilla a conçu une solution pour celui-ci ; elle a été testée sur Mac OS X 10.9.4 "Mavericks."

- -

mkfs.vfat non existant

- -

Il est nécessaire d'installer un port de dosfstools afin de pouvoir utiliser l'image.

- -
brew create https://github.com/sv99/dosfstools-osx.git
- -

Éditez ensuite la formule que brew va utiliser pour construire le logiciel dosfstools :

- -
require "formula"
-
-class Dosfstools < Formula
-  homepage "https://github.com/sv99/dosfstools-osx"
-  url "https://github.com/sv99/dosfstools-osx.git"
-  sha1 ""
-
-  def install
-    system "make", "install"
-  end
-end
-
- -

À présent, vous êtes prêt pour l'installer :

- -
brew install dosfstools
- -

Modification de la configuration pour contourner les bogues

- -

Dans certaines circonstances, des bogues du système de construction peuvent empêcher la compilation sur Mac OS X. Les cas en question sont :

- - - -

Utilisez votre éditeur de texte préféré pour créer un fichier appelé .userconfig dans le répertoire B2G. Le contenu suivant doit être placé à l'intérieur de ce fichier .userconfig :

- -
-
-
# .userconfig for Flame build 14.08.2014
-# osx repo change
-# Bug 1039223 - Build for flame fails complaining of missing dt.img
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1039223
-pushd device/qcom/common/dtbtool
-patch -N << EOF
---- a/dtbtool/dtbtool.c
-+++ b/dtbtool/dtbtool.c
-@@ -616,7 +616,7 @@ int main(int argc, char **argv)
-        extract "qcom,msm-id" parameter
-      */
-     while ((dp = readdir(dir)) != NULL) {
--        if ((dp->d_type == DT_REG)) {
-+        if ((dp->d_type == DT_REG||dp->d_type == DT_UNKNOWN)) {
-             flen = strlen(dp->d_name);
-             if ((flen > 4) &&
-                 (strncmp(&dp->d_name[flen-4], ".dtb", 4) == 0)) {
-EOF
-
-popd
-
-# Bug 1027682 - [Flame][Build] Failed to build on Mac OS X 10.9, elf.h file not found
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1027682
-if [[ ! -e /usr/local/include/elf.h ]]; then
-  cp "${B2G_DIR}/external/elfutils/libelf/elf.h" /usr/local/include
-  echo "Bug 1027682: elf.h copied into /usr/local/include"
-fi
-
-# Disable First Time User experience
-export NOFTU=1
-echo "NOFTU = ${NOFTU}"
-
-# Enable gaia developer mode
-export DEVICE_DEBUG=1
-echo "DEVICE_DEBUG = ${DEVICE_DEBUG}"
-
-# Keeping both debug and non-debug objects
-#export GECKO_PATH=${B2G_DIR}/mozilla-inbound
-echo "GECKO_PATH = ${GECKO_PATH}"
-
-export B2G_DEBUG=1
-echo "B2G_DEBUG = ${B2G_DEBUG}"
-
-#export GECKO_OBJDIR=${GECKO_PATH}/objdir-gonk
-if [[ "${B2G_DEBUG}" != "0" ]]; then
-  export GECKO_OBJDIR=${GECKO_OBJDIR}-debug
-fi
-echo "GECKO_OBJDIR = ${GECKO_OBJDIR}"
- -

Lancement de votre première compilation

- -

Maintenant vous êtes enfin prêt à lancer la compilation ! Lancez-la de la même manière que pour toute autre compilation de Firefox OS :

- -
./build.sh
-
-
diff --git "a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/configurer_votre_premi\303\250re_construction/index.html" "b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/configurer_votre_premi\303\250re_construction/index.html" deleted file mode 100644 index 6840a7f37b..0000000000 --- "a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/configurer_votre_premi\303\250re_construction/index.html" +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Configurer votre première construction -slug: >- - Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/Configurer_votre_première_construction -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/Configure_your_first_build ---- -

Cloner le dépôt B2G

- -

Vous disposez de plusieurs outils utiles pour construire Firefox OS, tous contenus dans un unique dépôt. Téléchargez-les via git pour créer votre répertoire de travail.

- -
git clone git://github.com/mozilla-b2g/B2G.git && cd B2G
- -

Configurer B2G pour votre appareil

- -

Nous devons à présent télécharger le code source. La commande suivante affichera une liste des cibles.

- -
./config.sh
-
- -

Cela montrera une liste d'appareils compatibles. Pour plus d'informations sur les appareils qu'il est possible de construire, se reporter à la page des Appareils Compatibles.

- -
Valid devices to configure are:
-
-* [LEGACY] AOSP Ice Cream Sandwich base
-- emulator
-- emulator-x86
-
-* [LEGACY] AOSP Jellybean base
-- emulator-jb
-- emulator-x86-jb
-- nexus-4
-- flame
-
-* AOSP KitKat base
-- emulator-kk
-- emulator-x86-kk
-- nexus-4-kk
-- nexus-5
-- flame-kk
-- leo-kk    (Z3 KK)
-- aries-kk  (Z3 Compact KK)
-
-* AOSP Lollipop base
-- emulator-l
-- emulator-x86-l
-- nexus-5-l
-- nexus-6-l
-- flame-l
-- leo-l       (Z3 L)
-- aries-l     (Z3 Compact L)
-- scorpion-l  (Z3 Tablet Compact L)
-- sirius-l    (Z2 L)
-- honami-l    (Z1 L)
-- amami-l     (Z1 Compact L)
-- tianchi-l   (T2U L)
-- seagull-l   (T3 L)
-- eagle-l     (M2 L)
-- flamingo-l  (E3 L)
-
- -

Si votre appareil n'est pas (encore) compatible avec B2G, reportez-vous au Guide de portage.

- -

Sélectionnez votre cible en l'ajoutant à la commande ./config.sh. Si vous voyez votre cible plusieurs fois, choisissez la variante en fonction de la base AOSP la plus récente disponible. Par exemple, construire pour le Nexus 5 :

- -
./config.sh nexus-5-l
-
- -

Cela téléchargera beaucoup de données (jusqu'à 20Go), aussi nous vous recommandons d'effectuer cette tâche avant de manger ou même la nuit si vous avez une connexion lente.

- -

Blobs propriétaires

- -

Malheureusement, chaque appareil nécessite un ensemble de blobs propriétaires. Comme le système de construction va les extraire directement depuis votre appareil, vous devez le brancher avant de lancer la construction.

- -

Pour les appareils Nexus et Sony, le processus de construction téléchargera également certains blobs directement depuis Google ou Sony, assurez-vous de bien suivre les instructions affichées à l'écran pour ces modèles ; vous aurez besoin d'accepter un accord de licence.

- -

Construire Firefox OS

- -

Tout ce que vous avez à faire consiste à lancer :

- -
./build.sh
-
- -

Étapes suivantes

- -

Si vous compilez pour l'émulateur, voir Exécuter Firefox OS sur l'émulateur

- -

Si vous compilez pour un appareil, voir Installer Firefox OS sur un appareil

diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/construire_anciennes_branches/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/construire_anciennes_branches/index.html deleted file mode 100644 index 47266ce72f..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/construire_anciennes_branches/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Construire d'anciennes branches -slug: >- - Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/Construire_anciennes_branches -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/Build_legacy_branches ---- -

- -

Les anciennes branches de Firefox OS nécessitent la présence des paquets multi-architectures. Ils ne sont pas installés par défaut sur les systèmes d'exploitation récents. 

- -

Lancez ces commandes pour permettre l'utilisation de l'architecture i386 :

- -
sudo dpkg --add-architecture i386
-sudo apt-get update
- -

Exécutez cette commande pour installer les paquets nécessaires :

- -
sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.7 g++-4.7 g++-4.7-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip ia32-libs libxml2-utils lzop openjdk-7-jdk
-
- -

Utilisez ces commandes pour faire de gcc-4.7 le compilateur par défaut :

- -
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 1
-sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 1
-sudo update-alternatives --set gcc "/usr/bin/gcc-4.7"
-sudo update-alternatives --set g++ "/usr/bin/g++-4.7"
diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/index.html deleted file mode 100644 index 52afc81e6b..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Compiler et installer B2G OS -slug: Archive/B2G_OS/Building_and_installing_Boot_to_Gecko -tags: - - B2G OS - - Build documentation - - Firefox OS -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS ---- -

- -
-

B2G OS étant actuellement développé à un rythme très soutenu et en phase de pré-lancement, le meilleur moyen d'avoir une installation à jour est de le compiler et de l'installer par vous-même. Les articles listés sur cette page vous guideront à travers la compilation et l'installation de B2G OS sur un émulateur ou un appareil compatible, ou l'interface utilisateur Gaia dans le navigateur Firefox.

-
- - - - - - - - -
-

Obtenir et compiler B2G OS

- -
-
Résumé du processus de compilation de B2G OS
-
Compiler et installer B2G OS demande du temps de manière significative, de la bande passante réseau et de la puissance de calcul. Cette page décrit les objectifs du processus de compilation et les étapes de ce processus afin d'aider les utilisateurs en les guidant tout au long du processus.
-
Prérequis pour compiler B2G OS
-
Étapes à effectuer avant de compiler B2G OS pour la première fois.
-
Préparation pour votre première compilation de B2G
-
Avant que vous ne puissiez compiler B2G OS, vous devez cloner le dépôt et configurer votre compilation. Cet article explique comment le faire.
-
Compiler B2G OS
-
Comment compiler B2G OS.
-
Module complémentaire B2G installer
-
Le module complémentaire B2G installer contribue à résoudre le problème de longue date qui empêche de redistribuer des compilations systèmes complètes à cause des blobs (composants propriétaires). Cet article détaille le fonctionnement du module, et comment l'installer.
-
- -

Davantage de ressources de référence

- -
-
Compiler B2G OS sur Mac OS X pour un appareil Flame
-
Un guide rédigé par la communauté, pour compiler B2G OS sur Mac OS X pour l'appareil de référence Flame.
-
Appareils compatibles
-
Une liste officielle des appareils de développement qui supportent B2G OS.
-
Créer et appliquer des paquets de mise à jour B2G OS
-
Ce guide très détaillé explique comment créer des paquets de mise à jour OTA/FOTA, ceux-ci pouvant ensuite être distribués sur les appareils des utilisateurs pour fournir des mises à jour logicielles.
-
Construire et installer des builds communautaires FOTA
-
Un guide de démarrage rapide, rédigé par la communauté,  pour créer et installer des paquets FOTA.
-
Carte de référence des variables de compilation B2G
-
Une référence de toutes les variables de compilations B2G, Gaia et Gecko, et des commandes dont vous pourriez avoir besoin pendant les opérations de compilations relatives à B2G OS.
-
-
-

Installer B2G OS et/ou Gaia

- -
-
Choisir comment exécuter Gaia ou B2G
-
Vous pouvez utiliser Gaia dans B2G, ou vous pouvez exécuter B2G OS sur un appareil mobile ou dans un simulateur pour ordinateur. Ce guide vous aidera à décider quelle est la solution la plus adaptée à vos besoins.
-
Compiler le simulateur B2G OS
-
Un guide pour compiler le simulateur B2G OS ; il vous permet de lancer Gaia et des Web apps dans un environnement basé sur Gecko, sur votre ordinateur de bureau, de manière similaire à un véritable appareil.
-
Utiliser les émulateurs B2G
-
Un guide pour compiler et utiliser les émulateurs B2G OS, et quand utiliser ces émulateurs.
-
Installer B2G OS sur un appareil mobile
-
Comment installer B2G OS sur un vrai appareil mobile.
-
-
- -

 

diff --git a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/mettre_en_place_un_environnement_de_construction/index.html b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/mettre_en_place_un_environnement_de_construction/index.html deleted file mode 100644 index ac146a4572..0000000000 --- a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/mettre_en_place_un_environnement_de_construction/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Mettre en place un environnement de construction -slug: >- - Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/Mettre_en_place_un_environnement_de_construction -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/Establish_a_Build_Environment ---- -
-

Avant de télécharger le code pour construire Firefox OS, vous devez configurer votre système de construction — cette page vous montre comment faire. Actuellement, les distributions Linux 64 bits et OS X peuvent être utilisées.

-
- -

Prérequis pour un environnement de construction sous Linux

- -

Pour compiler sous Linux, vous avez besoin de :

- - - -

Ubuntu 14.04 LTS est testée et recommandée.

- -

Installation des paquets requis

- -
sudo apt-get install git-core gnupg flex bison gperf build-essential \
-     zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
-     lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
-     libgl1-mesa-dev libxml2-utils xsltproc unzip autoconf2.13 lzop
- -

Configuration de l'accès USB

- -

Sur les systèmes Linux, par défaut, un utilisateur normal ne peut pas accéder directement aux périphériques USB. Vous devez configurer des règles udev. Créez un fichier /etc/udev/rules.d/51-android.rules avec la commande suivante :

- -
wget -S -O - https://raw.githubusercontent.com/mozilla-b2g/B2G/master/tools/51-android.rules | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
- -

Les nouvelles règles prendront effet la prochaine fois qu'un périphérique sera branché.

- -

Prérequis pour un environnement de construction sous OS X

- -

Pour compiler sur OS X, vous avez besoin de :

- - - -

Maintenant que vous avez mis en place votre machine de construction, il est temps de Configurer votre première construction.

diff --git "a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/r\303\251sum\303\251_processus_compilation_firefox_os/index.html" "b/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/r\303\251sum\303\251_processus_compilation_firefox_os/index.html" deleted file mode 100644 index bec1671e7d..0000000000 --- "a/files/fr/archive/b2g_os/building_and_installing_boot_to_gecko/r\303\251sum\303\251_processus_compilation_firefox_os/index.html" +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Résumé du processus de compilation de Firefox OS -slug: >- - Archive/B2G_OS/Building_and_installing_Boot_to_Gecko/Résumé_processus_compilation_Firefox_OS -tags: - - Firefox OS - - build - - install -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS/B2G_OS_build_process_summary ---- -
-

Compiler, construire et installer Firefox OS demande du temps, une connexion Internet et de la puissance de calcul. Plusieurs obstacles peuvent poser problème en chemin. Cette page liste les différentes étapes dans leur ensemble pour aider l'utilisateur. Chacune des étapes est traitée par une page distincte, liée depuis cet article.

-
- -
-

Note : Le processus de compilation de Firefox OS contient de nombreuses références à « B2G » ou « Boot2Gecko ». Boot2Gecko était le nom de code original du projet Firefox OS.

-
- -

L'objectif de la compilation : quatre fichiers image

- -

Le but général de la compilation est de construire quatre fichiers, appelés images, qui peuvent être copiés sur un appareil Firefox OS.

- - - - - - - - - - - - - - - - - - - - -
boot.imgLe noyau Linux et l'image d'un système de fichiers racine (root filesystem). Ce dernier fournit un ensemble d'outils Unix de base.
system.imgLe cœur de Firefox OS, avec des fragments de Gonk, la version de Gecko portée et l'exécutable b2g.
userdata.imgLe profil Gecko de l'utilisateur ainsi que les applications web de Gaia pour l'appareil.
recovery.imgUn noyau Linux accompagné d'une image d'un système de fichiers racine (root filesystem) et d'un outil permettant aux utilisateurs de réparer une installation défectueuse.
- -

Une fois que ces quatre images auront été créées, elles pourront être transférées sur l'appareil.

- -

Firefox OS est construit sur le projet Android Open Source Project (AOSP). Les outils AOSP adb et fastboot permettent d'accéder et de manipuler l'appareil de façon efficace. On notera la commande adb reboot-bootloader qui permet de redémarrer un appareil connecté à l'ordinateur et de l'arrêter à l'étape où le chargeur d'amorçage (bootloader) rentre en jeu. Ainsi, on pourra utiliser la commande fastboot flash $partition $image pour copier une image sur une des partitions de l'appareil.

- -

L'image boot.img

- -

L'image d'amorce (boot) boot.img combine un noyau Linux et une partition racine initiale afin de fournir un certain nombre d'outils logiciels de base et le nécessaire pour exécuter le script d'initialisation. Ce script sera copié depuis l'image vers la mémoire de l'appareil pour être utilisé efficacement par ce dernier. C'est ce qu'on appelle un ramdisk. L'image boot.img sera copiée sur la partition 'boot' de l'appareil et les contenus du ramdisk seront visibles à la racine lorsqu'on accédera au système de fichiers lors de l'exécution (par exemple lorsqu'on utilisera adb shell).

- -

L'image de boot permet de définir les permissions de l'utilisateur administrateur (root) dans le fichier default.prop situé à la racine.

- -

Il est aussi possible de modifier des images de boot existantes en inspectant le fichier puis en découpant ce fichier entre le noyau (kernel) et l'image du ramdisk, puis en extrayant les contenus de l'image du ramdisk, en les modifiant avant de ré-assembler l'image du ramdisk et de reconstruire un fichier boot.img fonctionnel. Voir la page Alcatel One Touch Fire Hacking (Mini) Guide (en anglais).

- -

Les images d'amorce peuvent être testées avant d'être installées en les téléchargeant sur l'appareil depuis l'ordinateur (sideloading). L'appareil peut être démarré et on peut faire une pause au niveau du chargeur d'amorçage pour utiliser la commande fastboot boot /un/chemin/vers/boot.img sans avoir installé l'image.

- -

L'image système

- -

L'image système (system.img) fournit le noyau de Firefox OS :

- - - -
-

Voir la page concernant la plate-forme Firefox OS, pour plus de détails sur l'architecture utilisée.

-
- -

L'image système sera copiée sur la partition system et sera visible dans le répertoire /system/ lorsqu'on accédera au système de fichiers lors de l'exécution.

- -
-

Note : L'image système fournit également les blobs binaires pouvant être utilisés par l'appareil, notamment le blob de la RIL (Radio Interface Layer) qui permet de contrôler les composants liés à la communication radio de l'appareil.

-
- -

L'image des données utilisateur

- -

L'image des données utilisateur (userdata.img) fournit les applications Gaia chargées lors de l'exécution.

- -

Cette image sera copiée sur la partition userdata de l'appareil et son contenu pourra être visible depuis le répertoire /data/ lorsque le système de fichiers sera accessible. On retrouvera notamment le dossier /data/b2g/ qui contient le profil Mozilla Gecko de l'utilisateur de l'appareil et le répertoire /data/local/webapps/ qui contient les applications web à la disposition de l'appareil.

- -

L'image de récupération

- -

L'image de récupération/dépannage (recovery.img) contient le même noyau Linux ainsi qu'un ramdisk semblables à ceux présents sur l'image d'amorce (boot). Cependant, l'image de récupération utilise un autre script d'initialisation qui permet à l'utilisateur de pouvoir utiliser des commandes pour dépanner/récupérer l'appareil grâce aux boutons physiques de l'appareil.

- -

Cette image sera copiée sur la partition recovery de l'appareil. Cette partition n'est pas montée dans le système de fichiers lors d'une exécution normale.

- -

Le processus de compilation : préparation, configuration, compilation et installation

- -

L'ensemble de la compilation et de l'installation de Firefox OS se déroule selon quatre étapes :

- - - - - - - - - - - - - - - - - - - - -
La préparationRécupérer les programmes utilisés lors de la compilation comme les compilateurs, les bibliothèques...
La configurationTélécharger le code source qui sera compilé et créer le fichier .configure qui définit les variables d'environnement nécessaires et d'autres valeurs utilisées lors de la compilation.
La compilationCompiler le profil Gecko de l'utilisateur ainsi que les applications Gaia pour l'appareil
L'installationInstaller les fichiers sur l'appareil.
- -

 

- -

La préparation

- -

La préparation initiale permet de s'assurer que l'ordinateur possède bien l'ensemble des outils logiciels nécessaires à la compilation (tels que les compilateurs et les outils de compilation).

- -

Cette étape peut être réalisée manuellement ou grâce à un script. Vous pourrez trouver les informations nécessaires sur la page concernant les prérequis pour construire Firefox OS.

- -
-

Note : Sur les systèmes UNIX (ou proches d'UNIX), il est possible de vérifier la présence d'un logiciel en utilisant la commande which qui prend en argument le nom du programme.

-
- -

La configuration

- -

Le processus de compilation commence au moment où on obtient un exemplaire du code logiciel de Firefox OS (alias B2G), généralement en créant un clone git du projet B2G. Cette étape permettra de récupérer l'ensemble du code source à compiler et de créer un fichier .config qui permet de définir les variables liées à la compilation.

- -

Cette étape est réalisée grâce au script config.sh. Vous pourrez trouver les informations nécessaires sur la page de préparation à la première compilation de B2G.

- -

Le script de configuration prendra en argument le type d'appareil pour lequel compiler. Les noms utilisés ici sont des noms de code liés à l'architecture du processeur (CPU) plutôt que des noms d'appareils spécifiques. Il n'y a, pour le moment, aucun moyen de déterminer quelle version fonctionne sur quel appareil physique. La liste de ces noms de code peut être trouvée ici.

- -

Ce sera également lors de l'étape de configuration qu'on utilisera l'outil repo du projet Android Open Source Project pour télécharger (ou mettre à jour) une copie du code utilisé lors de la compilation. Cet exemplaire sera stocké dans le répertoire .repo/projects. Cette partie de la configuration nécessitera de télécharger beaucoup de données et pourra prendre beaucoup de temps. Cela explique en grande partie pourquoi la configuration, dans son ensemble, prend beaucoup de temps.

- -

La compilation

- -

L'étape de compilation consiste à compiler le code source mis à disposition pour produire les images nécessaires.

- -

Pour exécuter cette étape, on lancera le script build.sh. Vous pourrez trouver toutes les informations nécessaires sur la page dédiée à la compilation de Firefox OS.

- -

Par défaut, l'étape de compilation est effectuée en une fois, de la compilation du projet Android AOSP, en passant par celle du noyau Linux jusqu'aux applications de Gaia. Si jamais la compilation échoue, il peut être compliqué de déterminer laquelle de ces étapes est en cause.

- -

Pour cette raison, il est possible de ne compiler que certaines parties de la pile logicielle concernant Firefox. Ainsi, on peut compiler uniquement Gecko en appelant le script avec le paramètre gecko. On peut faire de même avec le paramètre gaia. Ces composants pourront ensuite être installés séparément sur l'appareil (voir ci-après).

- -

On peut également compiler les fichiers pour créer les images une à une. L'image système, par exemple, peut être construite grâce à la commande ./build.sh out/platform/$target/system.img, avec le paramètre $target étant celui utilisé lors de la configuration.

- -

L'installation

- -

L'installation consiste à envoyer le code compilé sur l'appareil. Cette étape est exécutée grâce au script flash.sh.

- -

Il est possible d'installer (ou de réinstaller) uniquement certains fragments en utilisant un paramètre du script. On peut par exemple installer uniquement Gaia grâce à la commande ./flash.sh gaia.

diff --git a/files/fr/archive/b2g_os/building_b2g_for_qemu_emulator/index.html b/files/fr/archive/b2g_os/building_b2g_for_qemu_emulator/index.html deleted file mode 100644 index 936338ec2a..0000000000 --- a/files/fr/archive/b2g_os/building_b2g_for_qemu_emulator/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Construire B2G pour l'émulateur QEMU -slug: Archive/B2G_OS/Building_B2G_for_QEMU_Emulator -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS ---- -

Obsolète
Cette fonctionnalité est obsolète. Bien qu'encore supportée par des navigateurs, son utilisation est découragée pour tout nouveau projet. Évitez de l'utiliser.

- -

Cet article est obsolète. Voir le guide complet Compiler et installer Firefox OS pour construire Firefox OS.

- -

Il est nécessaire d'avoir déjà configuré votre environnement de construction et cloné les dépôts.

- -

Les étapes suivantes vous permettront de construire - et faire fonctionner - B2G sur votre émulateur.  NE les exécuter PAS en tant que root.

- -

$ cd B2G
- $ make sync

- -

- -

Construisez la configuration pour QEMU :
- $ make config-qemu

- -

Ensuite, construisez la sous-couche gonk puis le système lui-même :
- $ make gonk
- $ make

-
- REMARQUE :   si ./emu.sh - votre émulateur - ne s'exécute pas, vous devez le rendre exécutable :
- $ chmod +x emu.sh
-
- Enfin, lancez l'émulateur :
- $ ./emu.sh

- -

REMARQUE :  Après avoir cloné vos dépôts ou avoir procédé à votre première construction, vous pouvez les nettoyer ("clean") - c'est-à-dire les mettre dans un état où la dernière récupération est identique à un nouveau clone.

- -

Pour faire cela, depuis la racine de votre dépôt :
- $ make sync; git clean -xfd; git submodule foreach "git clean -xfd"
- Ou sinon, vous pouvez essayer :
- $ make mrproper

diff --git a/files/fr/archive/b2g_os/building_the_firefox_os_simulator/index.html b/files/fr/archive/b2g_os/building_the_firefox_os_simulator/index.html deleted file mode 100644 index 3347a9da08..0000000000 --- a/files/fr/archive/b2g_os/building_the_firefox_os_simulator/index.html +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: Compilation du Simulateur Firefox OS -slug: Archive/B2G_OS/Building_the_Firefox_OS_simulator -tags: - - Appareil - - Firefox OS - - Gaia - - Mobile - - simulateur -translation_of: Archive/B2G_OS/Building_the_B2G_OS_simulator ---- -
-

Le simulateur Firefox OS permet d'exécuter Gaia et des applications Web dans un environnement basé sur Gecko, un peu comme sur un véritable appareil. Il n'émule pas la couche matérielle et n'est donc pas adapté aux tests des APIs des appareils, et ce n'est pas une alternative pour faire des tests sur du vrai matériel. Cependant, il comporte plusieurs APIs qui ne sont pas disponibles sur Firefox comme les APIs Contacts et Settings. Il peut par conséquent être utile pendant le développement de votre application, ou lors du travail sur l'interface utilisateur Gaia elle-même. Cet article aborde le téléchargement et la compilation du simulateur Firefox OS ainsi que son utilisation.

-
- -
-

Note : La méthode la plus simple pour utiliser le client Firefox OS pour bureau consiste à installer le module Simulateur Firefox OS via WebIDE. La compilation du simulateur par vous-même n'est pas nécessaire.

-
- -

Téléchargement de la version nocturne

- -

Tout comme les Nocturnes de Firefox, le simulateur Firefox OS (identifié par b2g-) est automatiquement reconstruit chaque jour à partir du code source le plus récent. La dernière version compilée est disponible sur le serveur FTP de Mozilla. Assurez-vous de prendre la dernière version et la bonne archive en fonction de votre système d'exploitation. Cela vous évitera de devoir le compiler vous-même. De plus, vous n'aurez pas à télécharger Gaia non plus.

- -

L'application doit être installée dans un endroit accessible en écriture ; elle a besoin de pouvoir mettre à jour le profil Gaia inclus.

- -

Vous pouvez maintenant vous rendre directement à Exécution du simulateur, sauf si vous souhaitez réellement le compiler vous-même. Vous devrez le faire dans le cas où vous voulez apporter des modifications au code et tester ces modifications.

- -

Compilation du simulateur

- -

La première chose nécessaire est la mise en place un environnement de construction Mozilla standard. Une fois fait, vous pouvez récupérer le code dont vous avez besoin et le configurer pour compiler le client Firefox OS pour ordinateur.

- -

Téléchargement du code pour la première fois

- -

Dans le répertoire où vous voulez placer le code source, clonez le dépôt mozilla-central qui contient l'ensemble de Gecko :

- -
 hg clone http://hg.mozilla.org/mozilla-central
- -

Sinon, vous pouvez télécharger le même code depuis Github :

- -
 git clone https://github.com/mozilla/gecko-dev
- -

Mise à jour du code

- -

Pour les compilations ultérieures, il faut être sûr d'avoir récupéré les dernières modifications :

- -
cd mozilla-central
-hg pull -u
-
- -

ou

- -
cd gecko-dev
-git pull
-
- -

Création de mozconfig

- -

Ensuite, vous devez créer un fichier appelé .mozconfig dans le répertoire mozilla-central pour que le système de construction soit configuré pour compiler le client Boot to Gecko au lieu de Firefox. Ce fichier doit avoir le contenu suivant :

- -
. "$topsrcdir/b2g/config/mozconfigs/common"
-
-mk_add_options MOZ_OBJDIR=../build # This line should be commented if you use gecko-dev or mozilla-central
-mk_add_options MOZ_MAKE_FLAGS="-j9 -s"
-
-ac_add_options --enable-application=b2g
-ac_add_options --disable-libjpeg-turbo
-
-# This option is required if you want to be able to run Gaia's tests
-ac_add_options --enable-tests
-
-# turn on mozTelephony/mozSms interfaces
-# Only turn this line on if you actually have a dev phone
-# you want to forward to. If you get crashes at startup,
-# make sure this line is commented.
-#ac_add_options --enable-b2g-ril
- -

Vous devez également inclure la ligne ENABLE_MARIONETTE=1 dans le fichier si vous souhaitez exécuter Mochitests dans le client B2G pour ordinateur (soit mochitest-b2g-desktop, soit mochitest-plain) ou si vous voulez lancer les tests unitaires Gaia.

- -

Compilation

- -

Vous pouvez à présent construire le client pour ordinateur avec la commande suivante (exécutez-la à l'intérieur du répertoire mozilla-central) :

- -
./mach build
-
- -

Le client compilé sera placé dans le répertoire objdir/dist/bin (en fonction de la valeur de MOZ_OBJDIR spécifiée dans le fichier mozconfig).

- -
-

Note : Si vous avez le moindre problème, commencez par vérifier les dépendances.

-
- -

Téléchargement de Gaia

- -

Par défaut, le simulateur affichera un écran vide car il ne sait pas quelle application web il doit charger au démarrage comme application système. L'ensemble des applications système et celles par défaut qui sont fournies avec Firefox OS — Gaia — doivent être téléchargés.

- -

Pour télécharger Gaia pour la première fois, clonez le dépôt contenant le code source sur GitHub :

- -
git clone https://github.com/mozilla-b2g/gaia
-cd gaia
- -

Pour actualiser une copie de Gaia déjà existante, vous pouvez récupérer les dernières modifications depuis GitHub :

- -
cd gaia
-git pull
-
- -

Création de custom-settings.json

- -

Si vous savez ce que vous faîtes et que vous souhaitez définir des options de configuration, vous pouvez créer le fichier gaia/build/config/custom-settings.json pour les y ajouter, par exemple :

- -
{
-  "lockscreen.enabled": false,
-  "lockscreen.locked": false,
-  "devtools.debugger.remote-enabled": true
-}
- -

Cet exemple est utile pour outrepasser l'écran de verrouillage, ce dernier étant autrement impossible à passer sur ordinateur car il ne peut pas être déverrouillé avec une souris ou un pavé tactile.

- -

Génération d'un profil

- -

Ensuite, nous devons préparer les applications de Gaia pour le simulateur. Cela comprend le fait d'empaqueter les applications Gaia de la même façon que si elles étaient installées sur l'appareil, ainsi que la mise en place des permissions pour les applications systèmes privilégiées. Cela est réalisé par la génération d'un profil. La commande suivante (à lancer dans le dossier de téléchargement de gaia) effectuera  cette tâche :

- -
make DESKTOP_SHIMS=1 NOFTU=1 DEBUG=1
-
- -

Un dossier profile-debug sera créé sous le répertoire gaia. Le nouveau profil contient une extension personnalisée et d'autres éléments de configuration nécessaires au bon fonctionnement de B2G.

- -
-

Note : Il existe actuellement un bogue (bug 1180103) qui fait qu'avec les profils de débogage de Gaia l'écran d'accueil est vide lors de l'exécution avec le Simulateur Firefox OS (depuis WebIDE, ou autre.) Il peut être contourné en compilant avec DEBUG=1 DESKTOP=0 make au lieu de DEBUG=1.

-
- -

Exécution du simulateur

- -

Une fois que vous avez construit le client (ou téléchargé et installé la version nocturne de l'application de bureau) et téléchargé Gaia , vous êtes prêt à lancer le simulateur.

- -

Exécution sous Linux

- -

Pour lancer le simulateur sur Linux en utilisant le profil Gaia qu'il contient, exécutez simplement l'exécutable b2g.  Le binaire se trouve dans l'archive téléchargée plus tôt ou dans le répertoire objdir/dist/bin si vous avez compilé le client vous-même.

- -
b2g -profile gaia/profile-debug
-
- -

Vous pouvez rencontrer des problèmes gênants de rendu. Pour les éviter, ajoutez la ligne suivante dans votre fichier gaia/profile/user.js :

- -
user_pref("layers.acceleration.disabled", true);
-
- -

Exécution sur Mac

- -

Si vous avez téléchargé la version Nocturne, vous pouvez l'exécuter simplement à partir du Finder de manière classique. Les sorties de la console sont visibles en lançant l'utilitaire Console standard fourni avec votre Mac.

- -

Si vous souhaitez spécifier un profil Gaia différent (tel que votre téléchargement Gaia fait plus haut), vous devez ignorer le wrapper b2g et exécuter le binaire b2g. La ligne de commandes est légèrement plus compliquée en raison de l'emplacement du binaire b2g et de l'obligation d'utiliser des chemins absolus pour indiquer le répertoire du profil :

- -
.../B2G.app/Contents/MacOS/b2g-bin -profile /chemin/complet/vers/profile-debug/gaia
-
- -

Exécution sous Windows

- -

Exécuter la version Nocturne sous Windows se résume à lancer b2g.exe. Si vous voulez personnaliser l'exécution, vous pouvez le faire en lançant l'exécutable b2g.exe à la place ; cela contourne le wrapper qu'utilise automatiquement Gaia.

- -

Options de la ligne de commandes

- -

Il y a un certain nombre d'options de ligne de commandes qu'il est possible de préciser afin d'ajuster l'expérience lors de l'utilisation du simulateur. Vous pouvez en obtenir une liste avec l'option -help. Cette section en décrit certaines particulièrement intéressantes.

- -

Configuration de la taille de l'écran

- -

Vous pouvez spécifier la taille de l'écran de l'appareil à simuler avec l'option -screen :

- -
b2g -screen <largeur>x<hauteur>@<ppp>
- -

<largeur>, <hauteur>, et <ppp> sont des paramètres aux noms explicites : la largeur et la hauteur de l'écran en pixels et la résolution en PPP. Voici des exemples concrets :

- -
b2g -screen 320x480
-b2g -screen 320x480@160
-
- -

De manière facultative, il est possible d'indiquer par leur nom des appareils spécifiques pour simuler leurs tailles d'écran et résolutions :

- - - -

Ces appareils préréglés sont définis dans screen.js.

- -

Afin de sélectionner des écrans différents, le chemin du profil doit être spécifié comme ceci :

- -
-

./b2g-bin --profile ./gaia/profile/ --screen=galaxy_tab

-
- -

Ouverture de la console JavaScript

- -

La console JavaScript peut être ouverte lors du lancement du simulateur en l'exécutant à partir de la ligne de commandes avec l'option -jsconsole. Après la compilation, tapez :

- -
.../b2g -jsconsole -profile /chemin/vers/votre/profil
- -

Si vous avez installé la version Nocturne sur un Mac, vous pouvez utiliser ce qui suit :

- -
/Applications/B2G.app/Contents/MacOS/b2g -jsconsole -profile /chemin/vers/votre/profil-debug
- -
-

Note : Sur les versions de production de Firefox OS, la journalisation vers la console (par exemple console.log()) est désactivée par défaut. Pour l'activer, ouvrez les paramètres Développeurs et activez le paramètre Activer la console.

-
- -

Exécution d'une application spécifique au démarrage

- -

Vous pouvez spécifier une application à lancer automatiquement lorsque le simulateur démarre b2g. Son lancement se fera dès que le chargement du reste du système sera terminé. Dans ce but, utilisez simplement l'option -runapp, elle prend comme paramètre le nom de l'application à exécuter. Par exemple :

- -
 .../b2g -profile /chemin/vers/votre/profil-debug/gaia -runapp email
- -
-

Note : Le nom spécifié est normalisé en le convertissant tout en minuscules et en supprimant tous les tirets et espaces. Ce nom normalisé est ensuite comparé aux noms normalisés similaires extraits des manifestes des applications disponibles. Par exemple, le nom de l'application de courriel est actuellement "E-mail", mais -runapp email fonctionnera grâce à cette normalisation.

-
- -

Si vous spécifiez l'option -runapp sans argument, ou avec un argument vide, le simulateur affichera sur votre terminal une liste des applications connues ainsi qu'un bref message informatif.

- -
-

Note : L'utilisation de l'option -runapp a pour effet de bord la désactivation de l'écran de verrouillage et sa non-réactivation. Cela implique de ne pas utiliser cette commande avec un profil sur lequel vous voulez tester l'écran de verrouillage, ou le réactiver manuellement en utilisant Paramètres > Écran de verrouillage. N'hésitez pas à contribuer avec un patch pour modifier ce comportement si c'est un problème.

-
- -

Astuces pratiques

- -

Cette section offre quelques trucs utiles pour utiliser le client de bureau B2G.

- - - -

Dépannage : Écran vide lors du démarrage du simulateur

- -

Lorsque vous démarrez b2g avec b2g -profile gaia/chemin/vers/profil/gaia, un écran vide peut apparaître avec une erreur "Cannot reach app://system.gaiamobile.org". Pour résoudre ce problème, il y a plusieurs choses à vérifier :

- - - -

Étapes suivantes

- -

Maintenant que vous disposez d'une version simulée de Boot to Gecko fonctionnelle, vous pouvez faire des tests, du développement, ou tout autre chose avec :

- - diff --git a/files/fr/archive/b2g_os/choisir_comment_lancer_gaia_ou_b2g/index.html b/files/fr/archive/b2g_os/choisir_comment_lancer_gaia_ou_b2g/index.html deleted file mode 100644 index fac1f61ab1..0000000000 --- a/files/fr/archive/b2g_os/choisir_comment_lancer_gaia_ou_b2g/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Choisir comment exécuter Gaia ou B2G -slug: Archive/B2G_OS/Choisir_comment_lancer_Gaia_ou_B2G -tags: - - B2G - - Compilation - - Gaia -translation_of: Archive/B2G_OS/Choosing_how_to_run_Gaia_or_B2G ---- -

- -

En fonction de vos besoins spécifiques, vous avez un large choix d'options disponibles, à prendre en considération lors d'expérimentations avec Firefox OS ou l'interface utilisateur Gaia. Vous pouvez choisir parmi les options suivantes ; chacune possède ses avantages et ses inconvénients, et certaines sont plus souples que d'autres.

- -

Exécuter B2G sur le bureau

- -

Il est possible de compiler un simulateur de Firefox OS et d'exécuter Gaia sur celui-ci. Ce logiciel est basé sur Firefox, mais propose une expérience semblable à un appareil sur Firefox OS. Actuellement Mozilla fournit des nightly builds de cette application pour les développeurs. Si vous êtes familier avec la construction du code de base de Firefox ou des projets C++ , vous pouvez compiler vous-même cette application.

- -

Avantages

- - - -

Inconvénients

- - - -

Pourquoi exécuter le simulateur B2G ?

- -

C'est une solution convenable pour tester tout en développant. C'est un bon moyen pour obtenir une meilleure idée de la façon dont votre application ou votre code va fonctionner dans un environnement semblable, sans avoir à flasher un téléphone à chaque fois que vous voulez tester quelque chose.

- -
Note: Avant de proposer une application, vous devez absolument le tester sur un véritable appareil !
- -

Variétés de simulateurs

- -

Il y a plusieurs variétés de simulateurs Firefox OS disponibles :

- -
-
Firefox OS Simulator add-on
-
Cette extension est le premier outil pour tester les applications sur Firefox OS et la solution recommandée pour la plupart des utilisateurs. Elle supporte les outils de développement, l'ajout d'applications à l'environement de test...
-
Developer desktop builds
-
Ces compilateurs du simulateur sont des applications stand-alone qui servent principalement d'aide aux développeurs du coeur de Firefox OS, pour vérifier les caractéristiques techniques. 
-
Localizer desktop builds
-
Les compilateurs sont utilisés par les équipes de localisation dans leur travail et pour tester leurs localisations de Firefox OS et des aplications Firefox OS.
-
-

Exécuter B2G sur un émulateur

-
-
Cette solution se situe entre les simulateurs (qui sont seulement des reproductions des plus hauts niveaux de Firefox OS) et l'appareil mobile (qui vous fait bénéficier de l'expérience complète). Par rapport aux simulateurs, les émulateurs exécutent un Firefox OS basé sur un système ARM (l'émulateur x86 étant obsolète) qui reprioduit la quasi-totalité de l'expérience sur téléphone (à l'exception de quelques évènements réseau/radio).
-
- -

Exécuter B2G sur un appareil mobile

- -

La meilleure façon de tester votre travail sur B2G ou Gaia est de compiler puis installer Firefox OS sur un véritable appareil mobile. C'est également le processus le plus compliqué.

- -

Avantages

- - - -

Inconvénients

- - - -

Pourquoi exécuter B2G sur un appareil mobile

- -

Il s'agit, évidemment, de la façon la plus précise pour tester tout code ou tout projet web sur B2G ou Gaia. En testant votre projet sur un véritable appareil mobile, vous pouvez vous assurer que votre projet fonctionne et s'affiche bien et utilise toutes les APIs de l'appareil correctement. De plus, vous devriez toujours tester sur du matériel réel avant d'embarquer du code ; omettre cette étape peut avoir des conséquences imprévues qui peuvent être difficiles à prévoir.

diff --git a/files/fr/archive/b2g_os/compiler/building_an_engineering_build_like_the_ones_publis/index.html b/files/fr/archive/b2g_os/compiler/building_an_engineering_build_like_the_ones_publis/index.html deleted file mode 100644 index 4a600e1eaa..0000000000 --- a/files/fr/archive/b2g_os/compiler/building_an_engineering_build_like_the_ones_publis/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Compiler une version « engineering build officielle » -slug: Archive/B2G_OS/Compiler/Building_an_engineering_build_like_the_ones_publis -translation_of: Archive/B2G_OS/Building#Building_an_official-style_engineering_build ---- -
-

Note éditoriale : Le contenu de cette page a été déplacé vers https://developer.mozilla.org/fr/Firefox_OS/Compiler#Compiler_une_version_«_engineering_build_officielle_».

-
diff --git a/files/fr/archive/b2g_os/compiler/compiler_pour_le_fairphone/index.html b/files/fr/archive/b2g_os/compiler/compiler_pour_le_fairphone/index.html deleted file mode 100644 index 1ebbcaf096..0000000000 --- a/files/fr/archive/b2g_os/compiler/compiler_pour_le_fairphone/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Compiler pour le Fairphone -slug: Archive/B2G_OS/Compiler/Compiler_pour_le_Fairphone -translation_of: Archive/B2G_OS/Building/Building_for_Fairphone ---- -

EXECUTER B2GOS sur FAIRPHONE

- -
Salut à tous les possesseurs de Fairphones !
- Ce site va vous permettre de construire et installer tout
- ce qu'il faut pour faire tourner B2GOS sur un Fairphone !
- -

 

- -

Il comporte :

- -

Les instructions de construction pour OSX
- Les instructions de construction pour Ubuntu 14.4
- Les instructions de construction pour Ubuntu 16.4
- Comment flasher un appareil sans avoir à récupérer le code !

- -

Compiler sur OSX

- -

En raison de calculs faux ou différents pour la somme de contrôle md5, il ne sera pas possible de compiler sur OS X. Mais vous pouvez y aller avec un Linux virtuel !

- -

Compiler sur 14.4.

- -

Enchaîner les commandes suivantes permet d'obtenir une version accélérée du processus.

- -

-> ouvrez un terminal (ctrl, alt et T)

- -

Tapez ces commandes les unes après les autres :

- -
sudo dpkg --add-architecture i386
-sudo dpkg --add-architecture amd64
-sudo apt-get install git
-git config --global user.email " *votreemail@url.tld* "
-git config --global user.name " *votrenomdutilisateur* "
-git config --global color.ui False
- -
Installation
- -
sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-7-jdk nodejs unzip python mercurial && ccache -M 50G && echo $PWD && echo "commanding: git clone git://github.com/mozilla-b2g/B2G.git" && git clone git://github.com/mozilla-b2g/B2G.git && cd B2G && echo $PWD && echo "commanding: ./config.sh fairphone2" && ./config.sh fairphone2 && echo $PWD && echo "commanding: cd .. " && cd .. && echo $PWD && echo "commanding: curl -O http://dl.google.com/android/repository/android-ndk-r11b-linux-x86_64.zip" && curl -O http://dl.google.com/android/repository/android-ndk-r11b-linux-x86_64.zip && echo "commanding: unzip android-ndk-r11b-linux-x86_64.zip -d ~/ -home dir- " && unzip android-ndk-r11b-linux-x86_64.zip -d ~/ && echo $PWD && echo "commanding: curl -O https://nodejs.org/download/release/v4.4.7/node-v4.4.7.tar.gz" && curl -O https://nodejs.org/download/release/v4.4.7/node-v4.4.7.tar.gz && echo "commanding: tar -zxvf node-v4.4.7.tar.gz" && tar -zxvf node-v4.4.7.tar.gz && echo "commanding: cd node-v4.4.7" && cd node-v4.4.7 && echo "commanding: ./configure" && ./configure && echo "commanding: make install" && sudo make install && echo $PWD && echo "commanding: back to B2G folder!" && cd ~/B2G
-
- -

vérifiez ou faites un .userconfig dans le dossier B2G et n'oubliez pas de remplacer le texte en GRAS par votre nom d'utilisateur système :

- -
echo "*** entering .userconfig ***"
-export B2G_ANDROID_NDK_PATH=/home/ÉCRIVEZ ICI VOTRE NOM D'UTILISATEUR SYSTÈME/android-ndk-r11b
-echo "B2G_ANDROID_NDK_PATH=$B2G_ANDROID_NDK_PATH"
-export B2G_DIR=${B2G_DIR:-$(cd $(dirname $0); pwd)}
-echo "B2G_DIR=${B2G_DIR}"
-echo "GECKO_OBJDIR = ${GECKO_OBJDIR}"
-echo "*** exit .userconfig ***"
- -

Si vous souhaitez générer une version pour flasher votre téléphone :

- -
./build.sh
-
- -

Si vous voulez faire une version pour flasher votre téléphone et mettre à jour le build communautaire :

- -
./build.sh blobfree
-
- -

Si vous rencontrez des erreurs et que vous avez besoin d'un log de la compilation :

- -
./build.sh showcommands 2>&1 | tee build.log
-
- -

à chaque fois que vous lancez une nouvelle compilation, nettoyez les répertoires avec ces commandes :

- -
sudo rm -rf out && rm -rf objdir-gecko && rm -rf gaia/profile* && ccache -C
-
- -

 

- -

B2G-Installer pour Fairphone

- -

Vous n'avez pas envie de construire votre propre B2G OS ? Vous pouvez flasher votre appareil avec le module b2g-installer et un build communautaire !

diff --git a/files/fr/archive/b2g_os/compiler/fota_community_builds/index.html b/files/fr/archive/b2g_os/compiler/fota_community_builds/index.html deleted file mode 100644 index 8d3a7eec38..0000000000 --- a/files/fr/archive/b2g_os/compiler/fota_community_builds/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Construire et installer des builds communautaires FOTA -slug: Archive/B2G_OS/Compiler/FOTA_community_builds -tags: - - Firefox OS - - Tutoriel - - build -translation_of: Archive/B2G_OS/Building/FOTA_community_builds ---- -

Cet article peut vous aider à installer des builds communautaires de Firefox OS sur votre téléphone. Les mises à jour "firmware over the air" (FOTA) de l'OS seront activées sur ces versions.

- -

Prérequis

- -

Afin de compiler et installer cette build, vous devez avoir une machine sur laquelle compiler et une machine hôte. Il peut s'agir d'une seule et même machine.

- -

Sur la machine de compilation, il est nécessaire d'avoir tous les logiciels requis pour construire une version destinée au téléphone cible (Prérequis pour construire Firefox OS apporte davantage d'informations).

- -

Tout d'abord, vous devez vérifier l'appareil :

- - - -

Il est possible de construire les versions nocturne, aurora et bêta ; dans ce but, créez simplement 3 dossiers différents : nightly aurora beta (si vous ne souhaitez construire qu'une branche, vous pouvez vous contenter d'un seul répertoire). Nightly est mise à jour chaque nuit, aurora correspond à la dernière version stable et beta à la version qui précède aurora.

- -

En fonction de vos besoins, vous pouvez décider de construire toutes les branches ou seulement une ou deux. Pour chaque branche dont vous avez besoin, suivez les étapes décrites sur cette page. Lorsque vous aurez atteint le paragraphe "Compilation", les instructions seront de nouveau spécifiques selon les branches.

- -

Préparez votre première compilation B2G avec la BRANCHE correcte, comme si vous étiez en train de créer une version pour le téléphone cible. Suivez les instructions de cette page (Se préparer pour la première construction de B2G) jusqu'à la fin de la section "Configurer B2G pour votre appareil".

- -
-

Note : si vous avez un manifeste (xml) spécifique pour config.sh, ouvrez ce fichier et remplacez "master" par le nom de la branche que vous voulez dans les "choses spécifiques de B2G".

-
- -

À présent, votre répertoire de travail devrait être [BRANCH]/B2G/

- -

NE PAS COMPILER POUR L'INSTANT ! 

- -

Il y a encore beaucoup de modifications à faire.

- -

Signatures (seulement pour les appareils Firefox OS par défaut) :

- -

Toutes les ROMs des appareils Firefox OS doivent être signées ; par contre, pour les appareils Android, ce n'est pas obligatoire.

- -

Nous ne pouvons fournir que gecko et gaia ; la mise à jour sera signée pour éviter son installation sur un mauvais téléphone.

- -

Pour cela, vous aurez besoin de la signature de la build racine ; il y a juste à récupérer build.prop depuis le téléphone :

- -
adb pull /system/build.prop
- -

Maintenant, cherchez dans ce fichier la valeur de ro.build.fingerprint ; il s'agit de l'empreinte.

- -

Localisation :

- -

Il est possible de construire une version contenant toutes les locales en ajoutant ce script (langs.sh) dans gaia/locales ou de choisir de ne cloner que certaines langues. Dans ce dernier cas, modifiez gaia/locales/languages_all.json pour que seules les langues clonées ne soient employées #TOVERIF => Compilation multilocale

- -

Si vous compilez pour les branches aurora ou beta, remplacez git checkoutmozillaorg/master par git checkout v2.1 pour aurora et par git checkout v2.0 pour beta dans langs.sh

- -

N'oubliez pas de mettre à jour vos dépôts avant de lancer une nouvelle compilation.

- -

langs.sh :

- -
 #!/bin/sh
-
- set -e
- GIT_ROOT="https://git.mozilla.org/releases/l10n/"
- GIT_PROJ="/gaia.git"
- LANGS=$(json_pp < languages_all.json | grep ':' | cut -d':' -f1 | cut -d'"' -f2)
- for lang in ${LANGS}; do
-     echo "Syncing $lang"
-     if [ ! -d ${lang}/.git/ ]; then
-         echo "No repo for ${lang}, cloning new one"
-         git clone ${GIT_ROOT}${lang}${GIT_PROJ} $lang || true
-     else
-         echo "Updating close for ${lang}"
-     cd ${lang} && (git fetch origin && git checkout origin/master) || true && cd ..
-     fi;
- done;
-
- -

Configuration de la compilation

- -

Il est aussi nécessaire d'avoir un fichier .userconfig pour votre construction :

- -

Créez à la racine de [BRANCH]/B2G/ un fichier nommé .userconfig et collez-y ces lignes :

- -
 export SYSTEM_PARTITION=/dev/block/platform/msm_sdcc.1/by-name/system # to specify the system partition, find info with adb shell cat /proc/mounts
- export DATA_PARTITION=/dev/block/platform/msm_sdcc.1/by-name/userdata # to specify the data partition, find info with adb shell cat /proc/mounts
- export VARIANT=userdebug #to include gaia
- export PRODUCTION=1 #to have a user build
- export B2G_UPDATER=1
- export B2G_UPDATE_CHANNEL=aurora  #to modify [BRANCH]
- export ENABLE_DEFAULT_BOOTANIMATION=true #to have B2G boot animation
- export GAIA_DEV_PIXELS_PER_PX=1.5
- export LOCALE_BASEDIR=locales/ #Languages folder
- export LOCALES_FILE=locales/languages_all.json #all languages for the build
- export GAIA_KEYBOARD_LAYOUTS="$((find gaia/apps/keyboard/js/layouts/*.js | sed -e 's|gaia/apps/keyboard/js/layouts/||g' -e 's/\.js$//g') | tr -s '\r\n' ',' | sed -e 's/,$//g')" #All keyboard, you can change this with keyboard you want
- export GAIA_DEFAULT_LOCALE=fr #languages by default, fr (french) for example
- export B2G_FOTA_DIRS="system/fonts system/b2g" #fira font bug
- export FOTA_FINGERPRINTS="[your fingerprint]"
-
- -

Les variables suivantes devront être éditées :

- - - -

Le texte qui suit le symbole dièse (#) peut être supprimé (y compris le symbole lui-même). Ce sont des commentaires et leur seule raison d'être est d'expliquer à quoi sert la ligne.

- -

Après cela, il faut définir les informations à propos de l'url de mise à jour :

- -
 cd gecko/
- git checkout -b [VERSION NUMBER ou master pour nightly]-local --track mozillaorg/[VERSION NUMBER ou master pour nightly]
- éditez app.update.url dans b2g/app/b2g.js vous pouvez conserver %target% etc.. ou sinon vous pouvez juste avoir quelque chose du genre
- pref("app.update.url", "http://[DOMAIN]/[PHONE NAME]/[BRANCH]/update.xml");
- 
- -

Ensuite, pour appliquer vos modifications, effectuez un commit :

- -
 git commit -a
- Répétez toutes ces étapes avec les différentes branches pour avoir une version beta/aurora/nightly.
- -

La configuration de la compilation est à présent terminée. Toutes les étapes qui suivent devront être répétées à chaque compilation dans chacun des dossiers de branche.

- -

Compilation

- -

La mise en place de la construction d'une (nouvelle) mise à jour est : 

- -
 cd [BRANCH]/B2G/ #pour se placer dans le bon dossier
- git pull # pour actualiser le code du dépôt
- ./repo sync #pour actualiser le code du dépôt pour android et B2G ne pas utiliser l'option -d, le faire supprimerait vos modifications
- cd gaia/locales/ && ./langs.sh && cd ../../ #pour actualiser les langues
-
- ./build.sh # pour construire b2g
- ./build.sh gecko-update-fota # pour construire b2g et gaia dans des fichiers .zip et .mar
-
- BUILDID=$(grep 'BuildID=' objdir-gecko/dist/bin/application.ini | cut -d'=' -f2) # définit la variable buildid
- VERSION=$(grep '\nVersion=' objdir-gecko/dist/bin/application.ini | cut -d'=' -f2) # définit la variable de la version de gecko
- python tools/update-tools/build-update-xml.py -c out/target/product/[PHONE NAME]/fota-[PHONE NAME]-update.mar -O -u http://[DOMAIN]/[PHONE NAME]/[BRANCH]/fota-[PHONE NAME]-update.mar -i $BUILDID -v $VERSION -V $VERSION | tee /var/www/[BRANCH]/update.xml # Modifiez cette commande avec vos informations : chemin correct vers .mar, chemin correct vers .mar dans l'url de update.xml, la commande produira en sortie un fichier update.xml; ce dernier ira sur votre machine hôte, il correspond au fichier appelé par le système pour chercher de nouvelles mises à jour.
- cp out/target/product/[PHONE NAME]/fota-[PHONE NAME]-update.mar /var/www/[BRANCH]/fota-[PHONE NAME]-update.mar #pour déplacer le .mar sur le serveur
- cp out/target/product/[PHONE NAME]/fota/partial/update.zip /var/www/[BRANCH]/update.zip #pour déplacer le .zip sur le serveur
- pushd /var/www/[BRANCH]/ # pour aller dans les fichiers du serveur
- sha1sum $(ls) | tee sha1.checksum #pour avoir un fichier de signature
- popd
-
- -

Si vous souhaitez un bot IRC, vous pouvez utiliser ii ou buildbot. J'ai réalisé un script pour ça ICI (pour plus d'informations sur ce qu'est buildbot, voir http://buildbot.net/ )

- -

Flashez le téléphone et essayez votre build :

- -

Pour installer la version sur un téléphone, suivez simplement ces étapes :

- -
 adb reboot recovery
- -

Dans le recovery, descendez avec le bouton de volume bas pour sélectionner la ligne "apply update from adb", puis appuyez sur le bouton power :

- -
 adb sideload out/target/product/[PHONE NAME]/fota/partial/update.zip
- -

Builds existantes par communauté

- - diff --git a/files/fr/archive/b2g_os/compiler/index.html b/files/fr/archive/b2g_os/compiler/index.html deleted file mode 100644 index 7227ce6ddd..0000000000 --- a/files/fr/archive/b2g_os/compiler/index.html +++ /dev/null @@ -1,442 +0,0 @@ ---- -title: Compiler Firefox OS -slug: Archive/B2G_OS/Compiler -translation_of: Archive/B2G_OS/Building ---- -
-

Une fois que vous avez mis en place votre système de compilation puis récupéré et configuré le code, vous pouvez compiler Boot to Gecko. Ce guide détaille les étapes nécessaires à la compilation.

-
- -

Mettre à jour votre code

- -

Si ce n'est pas la première fois que vous compilez B2G, vous pouvez récupérer la dernière version du code avant de commencer à compiler. Pour ce faire, vous devez mettre à jour les outils B2G ainsi que les dépendances grâce aux commandes suivantes :

- -
git pull
-./repo sync -d
-
- -

L'option -d permet de récupérer les dernières versions (HEAD) des projets Android selon le manifeste de révision (c'est-à-dire la version principale, par défaut, du dépôt). Cette option est pratique si vous avez effectué des modifications mais que vous voulez revenir à l'état de la branche master de façon temporaire. Vos changements seront mis de côté (staged) le répertoire de travail ne sera pas modifié (voir la question Stack Overflow sur ce sujet ou la page de documentation sur la commande repo). Si vous n'avez pas modifié les sources, vous pouvez utiliser :

- -
git pull
-./repo sync
- -

Vous pouvez mettre à jour votre dépôt selon une cible donnée en indiquant son nom :

- -
./repo sync gaia
-
- -

La commande repo possède d'autres options qui peuvent être utilisées. Utilisez la commande repo help pour avoir plus d'informations.

- -

Compiler Boot to Gecko

- -
-

Note : Avant la compilation, vous pouvez utiliser un fichier .userconfig pour personnaliser votre version. Voir la page Personnaliser la version grâce au fichier .userconfig pour plus d'informations.

-
- -

Pour compiler Boot to Gecko, il suffit d'utiliser le script build.sh :

- -
cd B2G
-./build.sh
-
- -

À ce moment, vous pouvez sans doute prendre une autre pause café (voire une sieste si c'est votre première compilation). Pour indication, la compilation dure environ 30 minutes sur un Core i7 avec 8 Go de RAM). Comme expliqué dans la page précédente, si vous utilisez un autre répertoire dans lequel vous avez sauvegardé des fichiers système Android, vous devrez définir la variable d'environnement ANDROIDFS_DIR avant de lancer build.sh.

- -
-

Note : Pour plus d'informations sur l'installation (flashing) d'une nouvelle version sur un téléphone, lire la page Installer Firefox OS sur un appareil mobile.

-
- -

Compiler des modules particuliers

- -

Si vous souhaitez compiler uniquement un certain module, vous pouvez spécifier le nom du module souhaité comme argument du script. Ainsi, si vous souhaitez ne compiler que Gecko, vous pourrez utiliser la commande suivante :

- -
./build.sh gecko
-
- -

Si vous souhaitez ne rafraîchir qu'une seule application, vous pouvez compiler le module gaia et spécifier la variable d'environnement BUILD_APP_NAME avec le nom de l'application :

- -
BUILD_APP_NAME=calendar ./build.sh gaia
- -

Afin d'obtenir une liste des modules que vous pouvez compiler, vous pouvez utiliser la commande suivante :

- -
./build.sh modules
-
- -

Définir le nombre de tâches parallèles

- -

Par défaut, les scripts B2G lancent des tâches parallèles (le nombre de tâches par défaut étant égal au nombre de cœurs plus (+) deux). Le nombre de tâches à lancer en parallèle est défini grâce au paramètre -j de build.sh. Cet argument peut s'avérer utile lorsque vous souhaitez réduire la charge CPU prise par la compilation pour pouvoir faire autre chose. De plus, n'avoir qu'une seule tâche pour la compilation permet d'interpréter beaucoup plus facilement les informations affichées par le script.

- -

Ainsi, pour compiler en utilisant uniquement deux tâches parallèles, vous pouvez utiliser la commande suivante :

- -
./build.sh -j2
-
- -

Le plus souvent, ce paramètre est utilisé pour empêcher toute exécution parallèle. De cette façon, le processus peut être analysé plus simplement. Pour n'avoir qu'une seule tâche, lancer la commande suivante :

- -
./build.sh -j1
-
- -

Compiler une version multilocales

- -

Pour compiler une version avec plusieurs locales, il faut réaliser les étapes suivantes :

- -
    -
  1. Déterminer le fichier de locales à utiliser. Actuellement, ce sont les fichiers locales/languages_dev.json et locales/languages_all.json qui sont utilisés comme fichiers de locales.
  2. -
  3. Cloner les locales adéquates depuis http://hg.mozilla.org/gaia-l10n vers un répertoire. Le répertoire utilisé est gaia-l10n/. Vous pourriez très bien utiliser un répertoire locales/. Vous devrez cloner un dépôt pour chaque locale listée dans le fichier de langues.
  4. -
  5. Dans votre environnement définissez la variable d'environnement LOCALE_BASEDIR avec le chemin absolu du répertoire choisi à l'étape 2. La variable d'environnement LOCALES_FILE doit être définie avec le chemin absolu du répertoire utilisé à l'étape 1.
  6. -
  7. Vous pouvez également définir la variable d'environnement GAIA_DEFAULT_LOCALE si vous souhaitez définir une locale par défaut.
  8. -
- -
cd gaia/locales/
-hg clone https://hg.mozilla.org/releases/gaia-l10n/v1_2/es
- -
Définir les variables d'environnement :
- -
 
- -
export LOCALE_BASEDIR=$PWD/locales
-export LOCALES_FILE=$PWD/locales/languages_dev.json
-export GAIA_DEFAULT_LOCALE=fr
-
- -

Le fichier languages-dev.json peut être remplacé par votre propre fichier mes-langues.json à condition que celui-ci respecte le format suivant (où chaque entrée correspond à une locale clonée dans le répertoire des locales) :

- -
{
-  "en-US"     : "English (US)",
-  "es"        : "Español"
-}
-
- -
-

Depuis la livraison du bug 884752 (en novembre 2013), il est possible d'utiliser la variable d'environnement GAIA_KEYBOARD_LAYOUTS pour ajouter des agencements de clavier.

- -

Voir la fiche du bug : https://bugzilla.mozilla.org/show_bug.cgi?id=884752

- -

Voir des exemples d'agencements: https://github.com/mozilla-b2g/gaia/tree/v1.2/keyboard/layouts

- -

Ainsi, si vous souhaitez ajouter des agencements de clavier pour l'espagnol, l'italien et l'anglais, vous pouvez définir la variable d'environnement de cette façon :

- -
  GAIA_KEYBOARD_LAYOUTS=en,es,it
- -

Vous pouvez alors flasher Gaia sur le téléphone. Connectez le téléphone et vérifiez que le débogage USB est activé dans l'écran Paramètres > Informations > Plus d'informations > Développeurs. Vous n'aurez pas besoin de répéter cette étape. En effet, votre version de Gaia aura le paramètre REMOTE_DEBUGGER à 1. Pour compiler une version multilocales :

- -
 make clean && make production LOCALES_FILE=locales/languages-own.json
- -
-

Si vous souhaitez cloner et/ou mettre à jour l'ensemble des locales prises en charge pour une branche donnée, vous pouvez utiliser ce script.

-
- - -

Compiler une version « engineering build officielle »

- -
-

If this paragraph gets outdated. Please refer to the logs of the Be job in Treeherder to get the latest variables set.

-
- -

Pour compiler une version  « engineering build officielle » comme celles publiées par Mozilla, vous devez utiliser les options suivantes sur votre ligne de commande:

- -
VARIANT=eng MOZILLA_OFFICIAL=1 B2G_SYSTEM_APPS=1 GAIA_OPTIMIZE=1 B2G_UPDATER=1 B2G_UPDATE_CHANNEL=default MOZ_TELEMETRY_REPORTING=1 MOZ_CRASHREPORTER_NO_REPORT=1 LOCALES_FILE=locales/languages_all.json GAIA_KEYBOARD_LAYOUTS=en,pt-BR,es,de,fr,pl,zh-Hans-Pinyin,zh-Hant-Zhuyin,en-Dvorak ./build.sh
- -

Ci-dessous l'explication des paramètres:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VariableExplication
VARIANT=engDéfinition d'une version de type « engineering ». C'est aussi la valeur par défaut.
MOZILLA_OFFICIAL=1Génère une version affichant le logo et la marque Firefox OS. Ne pas utiliser cette option avec des versions que vous souhaitez distribuer. Mozilla se réserve ce droit.
B2G_SYSTEM_APPS=1Installe lest applications dans  le dossier /system/b2g/webapps (au lieu de /data/local/webapps).
GAIA_OPTIMIZE=1Concatène les sources de Gaia.
B2G_UPDATER=1Active les mises à jour quotidienne.
B2G_UPDATE_CHANNEL=defaultLe canal de mises à jour Firefox OS. La valeur «default» pointe vers mozilla-central.
MOZ_TELEMETRY_REPORTING=1Active la Télémétrie permettant de partager les données concernant l'utilisation du téléphone.
MOZ_CRASHREPORTER_NO_REPORT=1Désactive l'interface Firefox Desktop lors d'un crash, so the Gaia reporter only is used.
LOCALES_FILE=locales/languages_all.jsonDéfini les langues disponibles dans Gaia (l'arborescence relative part du dossier de gaia).
GAIA_KEYBOARD_LAYOUTS=en,pt-BR,es,de,fr,pl,zh-Hans-Pinyin,zh-Hant-Zhuyin,en-DvorakDéfini les dispositions de clavier inclues dans Gaia.
- -

Générer une archive système sans aucun blob binaire

- -

Il est possible de générer une archive de système complet sans recourrir à un seul blob binaire, qui peut être utilisée pour convertir un appareil, fonctionnant sous Android, à Firefox OS, en s'affranchissant de l'interdiction de distribution de systèmes contenant des blobs binaires. Cette possibilité doit être développée séparément pour chaque type d'appareil, avec seulement les téléphones Flame et Z3/Z3 Compact supportés initialement.

- -
-

Note: Nous devrions pouvoir le faire pour n'importe quel appareil pour lequel nous générons déjà des systèmes, mais il faut faire des vérifications dans chaque cas avant de pouvoir l'affirmer.

-
- -

Une telle archive est générée à l'aide de l'option suivante :

- -
./build.sh blobfree
- -

Ceci produit une archive zip composé de :

- - - -

Le but de cette archive est d'être utilisée avec l'installeur d'addon B2G (voir bug 1166276.)

- -

Erreurs fréquentes

- -

"Build failed!"

- -

Si vous obtenez le message générique "Build failed" (« la compilation a échoué), vous pouvez essayer de reconnecter votre téléphone à votre ordinateur. Il peut arriver que le volume du téléphone soit démonté du système.

- -
-

Attention, configurer et compiler B2G pour un Keon ne FONCTIONNERA PAS pour Mac. Pour cet appareil, il est nécessaire d'utiliser Linux.

-
- -

Erreurs propres à Mountain Lion

- -
-

1. Si vous compilez sur OS X 10.8 Mountain Lion (Xcode 4.4.1 ou ultérieur) et que vous obtenez l'erreur suivante :

- -
external/qemu/android/skin/trackball.c:130:25: error: 'M_PI' undeclared (first use in this function)
-Éditez le fichier : B2G/external/qemu/Makefile.android et ajoutez le code suivant à la ligne 78: - -
MY_CFLAGS += -DM_PI=3.14159265358979323846264338327950288   #/* B2G_fix: not finding M_PI constant */
-
-
- -
2. Si vous utilisez Mountain Lion et que vous obtenez l'erreur suivante avec ./build.sh :
- -
-
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:797:9: error: too many #pragma options align=reset
- -

Remplacez les occurences de '#pragma options align=reset' par '#pragma pack()' dans le fichier /System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h

-
- -

Undefined symbols "_sqlite3_androidopt_handle_pragma" and "_sqlite3_androidopt_open"

- -

Cette erreur se produit si vous compilez sur OS X 10.7 ou ultérieur avec Xcode 4.5 ou ultérieur. Pour résoudre le problème, appliquez le correctif https://groups.google.com/forum/#!msg/android-building/yAfPyUqCsiQ/7zvICk4GWjYJ au fichier external/sqlite/dist/Android.mk.

- -

KeyedVector.h:193:31: error: indexOfKey was not declared in this scope

- -

Cette erreur se produit lorsque la version de gcc utilisée est trop récente. Installez les versions gcc/g++/g++-multilib. Voir la page personnaliser la version compilée avec le fichier .userconfig pour plus d'informations.

- -
-

Note : Vous pouvez utiliser gcc 4.7.x en apportant de légères modifications. En raison des priorités de développement, les bugs liés à ces modifications ne seront pas corrigés.

-
- -

arm-linux-androideabi-g++: Internal error: Killed (program cc1plus)

- -

Si vous obtenez ce message, cela signifie probablement qu'il manque de la mémoire. Assurez-vous de disposer de suffisamment de mémoire avant de lancer ./build.sh. Si vous disposez de 4 Go, cela devrait suffire.

- -

Erreur « ...is referenced by DSO »

- -

Lors de la compilation de l'émulateur, si vous obtenez « /usr/bin/ld: out/host/linux-x86/obj/EXECUTABLES/triangleCM_intermediates/triangleCM: hidden symbol `_XGetRequest' in out/host/linux-x86/obj/STATIC_LIBRARIES/libSDL_intermediates/libSDL.a(SDL_x11dyn.o) is referenced by DSO ».

- -

Cela peut arriver avec certaines versions de binutils. Si vous utilisez Debian Stable, vous pouvez utiliser le linker gold en installant le paquet binutils-gold. Le linker gold est déjà installé avec binutils mais il n'est pas utilisé par défaut. binutils-gold permet de le passser en linker par défaut.

- -

Si vous obtenez des erreurs de compilation lorsque le système de compilation exécute les tests

- -

Certaines fois (surtout lorsque les outils de compilation et/ou le système sont mis à jour) vous pouvez obtenir certaines erreurs étranges lorsque le script effectue les tests post-compilation :

- -
Generating permissions.sqlite...
-test -d profile || mkdir -p profile
-run-js-command  permissions
-WARNING: permission unknown:offline-app
-WARNING: permission unknown:indexedDB-unlimited
-build/permissions.js:122: NS_ERROR_UNEXPECTED: Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPermissionManager.add]
-make[1]: *** [permissions] Error 3
-make: *** [gaia/profile.tar.gz] Error 2
- -

Pour résoudre ce problème, supprimez le répertoire gaia/xulrunner-sdk avant de récupérer le code :

- -
rm -r gaia/xulrunner-sdk
-
- -

Cette commande permettra de supprimer la version téléchargée, précompilée de XULRunner que le système de compilation récupère automatiquement. Lors de la prochaine compilation, le système téléchargera automatiquement une nouvelle version de XULRunner.

- -

Impossible de récupérer platform/libcore

- -

Si vous essayez de configurer B2G pour Nexus S (./config.sh nexus-s) et que vous obtenez une erreur liée à libcore, cela est dû à un problème avec le git linaro. Pour résoudre ce problèmé, récupérez le manifeste de B2G :

- -
git clone https://github.com/mozilla-b2g/b2g-manifest.git
- -

Puis éditez le fichier nexus-s.xml dans ce dépôt, remplacez l'entrée pour le git linaro avec une référence à l'entrée aosp. Le résultat obtenu devrait ressembler à :

- -
<default revision="refs/tags/android-4.0.4_r1.2"
-              remote="aosp"
-              sync-j="4" />
- -

Effectuez un commit ces modifications (git commit -a) puis modifiez le fichier config.sh dans la branche master du dépôt principal de B2G puis modifiez le pour pointer vers votre fichier de manifeste local (plutôt que celui de Mozilla) avec la commande suivante :

- -
GITREPO=${GITREPO:-"file:///home/path/to/my/b2g-manifest"}
- -

Erreurs clang lors de la compilation avec Xcode 5 sur OS X

- -

Si vous compilez en utilisant Xcode 5 sur OS X 10.8, il est probable que vous rencontriez les erreurs suivantes :

- -
clang: error: argument unused during compilation: '-include system/core/include/arch/darwin-x86/AndroidConfig.h'
-clang: error: argument unused during compilation: '-U DEBUG'
-clang: error: argument unused during compilation: '-U DEBUG'
-clang: error: argument unused during compilation: '-MF out/host/darwin-x86/obj/EXECUTABLES/obbtool_intermediates/Main.d'
-make: *** [out/host/darwin-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
- -

Cela est dû à la modification du compilateur g++ dans le dossier /usr/bin par Xcode 5, ce qui fait planter le processus de compilation. Pour résoudre ce problème, éditer la ligne du fichier build/core/combo/HOST_darwin-x86.mk:

- -
HOST_CXX := g++
- -

en

- -
HOST_CXX := g++-4.7
-ifeq (,$(wildcard /usr/local/bin/g++-4.7))
- HOST_CXX := g++
-endif
- -

Ensuite, désinstaller gcc avec brew (ici, on considère que vous avez utilisé le script de mise en route pour Mac OS, si ce n'est pas le cas, utiliser ce script avant de continuer) :

- -
brew uninstall gcc-4.7
- -

Puis réinstaller gcc avec le support multilib et c++ :

- -
brew install --enable-cxx https://gist.github.com/artlogic/6988658/raw/aeb9d1ea098274ad3f3fe2637b9df7f308a8a120/gcc-4.7.rb
- -

Assurez vous que /usr/local/bin soit bien dans votre PATH. Vous pouvez l'ajouter temporairement à votre PATH grâce à la ligne suivante :

- -
export PATH=/usr/local/bin:$PATH
- -

Pour rendre cette modification permanente, vous pouvez ajouter cette ligne dans le fichier .bash_profile de votre répertoire home.

- -

Une fois que vous avez bien défini votre PATH, assurez-vous de pouvoir lancer chacune d eces commandes :

- -
gcc-4.7 -v
-
-g++-4.7 -v
- -

Si l'une de ces commandes échoue, il faudra peut-être lier de nouveau GCC à brew grâce à la commande suivante :

- -
brew link --overwrite gcc-4.7
- -

Il se peut également que /usr/bin/c++ ne pointe pas vers clang++ alors que ça devrait être le cas avec Xcode 5 installé. Vous pouvez le vérifier en tapant la commande suivante :

- -
ls -l /usr/bin/c++
- -

Le résultat de cette commande devrait ressembler à :

- -
lrwxr-xr-x 1 root admin 7 Sep 19 11:40 /usr/bin/c++ -> clang++
-
- -

Si c++ pointe vers autre chose que vers clang++, il faut mettre à jour avec le lien :

- -
sudo rm /usr/bin/c++
-
-sudo ln -s /usr/bin/clang++ /usr/bin/c++
- -

"system/core/include/log/log.h:38:20: error: stdarg.h: No such file or directory"

- -

Cette erreur peut se produire si vous utilisez 10.6 SDK pour compiler sur Mac OSX 10.10, ou tout autre configuration SDK qui n'est pas supportée par la cible que vous essayer de compiler. Voir bug 1071266 pour plus de détails.

- -

Impossible de récupérer les fichiers depuis le répertoire de sauvegarde

- -

Cela peut arriver lorsque la connexion USB a été interrompue lors de la récupération des données de l'appareil vers l'ordinateur.

- -

Lorsque vous lancez le script, vous obtenez un résultat semblable à celui-là (obtenu pour un Peak) :

- -
Pulling files from ../../../backup-peak
-cat: ../../../backup-peak/system/build.prop: No such file or directory
-Found firmware with build ID
-Pulling "libaudioeq.so"
-cp: cannot stat `../../../backup-peak/system/lib/libaudioeq.so': No such file or directory
-Failed to pull libaudioeq.so. Giving up.
-
-> Build failed! <
-
-Build with |./build.sh -j1| for better messages
-If all else fails, use |rm -rf objdir-gecko| to clobber gecko and |rm -rf out| to clobber everything else.
- -

Pour résoudre ce problème, il n'est pas nécessaire de supprimer les répertoires objdir-gecko et out dans leur intégralité. Il suffit de supprimer le répertoire de sauvegarde avec cette commande) :

- -
$rm -rf backup-peak
- -

Problèmes de compilation pour l'émulateur

- -

Si vous construisez une version d'un émulateur, vous pourrez rencontrer certains problèmes. Les informations détaillées ici permettent d'en résoudre certains.

- -
-

Attention : l'émulateur x86 est plus difficile à installer et n'est pas très bien supporté.

-
- -

Le système de compilation d'un émulateur construit à la fois la version 32 bits et la version 64 bits de l'émulateur. L'émulateur aura besoin d'utiliser OpenGL, cela signifie qu'il vous faudra avoir installé les bibliothèques 32 bits et 64 bits pour OpenGL. Voir la discussion à ce sujet sur le bug 897727.

- -

Deux méthodes permettent de résoudre ce problème :

- -

Première solution : avoir installé les deux bibliothèques OpenGL 32 bits et 64 bits et avoir construit les liens symboliques (symlinks)

- -

Si votre distribution Linux dispose de paquets multilib pour les bibliothèques OpenGL, vous pouvez les installer manuellement. Il vous faudra peut être ajouter manuellement certains liens symboliques.

- -

Par exemple, sur Ubuntu 12.04 LTS x86-64, le paquet libgl1-mesa-dev ne peut pas être installé simultanément pour les versions x86-64 et i386 mais la combinaison de paquets suivante peut être installée :

- -
sudo apt-get install libgl1-mesa-dev libglapi-mesa:i386 libgl1-mesa-glx:i386
- -

Une fois avoir lancé la commande précédente, il vous faudra créer quelques liens symboliques pour que la compilation puisse fonctionner :

- -
sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
-sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
- -

Seconde solution : corriger le dépôt pour que l'émulateur ne soit compilé qu'en 64 bits

- -

Il suffit d'appliquer ce correctif au dépôt git sdk/ situé sous le dépôt B2G. L'émulateur B2G ne sera ainsi compilé qu'en une version 64 bits, ce qui permettra d'éviter tout problème e gestion des bibliothèques pour différentes architectures. Dans tous les cas, l'émulateur 32 bits ne sera pas utilisé sur un système 64 bits. Cette solution est la plus simple à mettre en œuvre (sauf si le patch devient un jour corrompu...).

- -

Prochaines étapes

- -

Une fois la compilation achevée, la suite dépendra de votre cible : un appareil mobile « réel » ou un émulateur. Pour obtenir les informations pertinentes, vous pouvez lire les articles suivants :

- - -
- -

Soumettre des bugs sur B2G/Firefox OS/Gaia

- -

Une fois que votre version de B2G/Firefox OS fonctionne, vous serez en mesure de rapporter des bogues et d'aider à l'amélioration de Firefox OS. Si vous trouvez un bug, vous pouvez le décrire sur Bugzilla, grâce au projet "Firefox OS" en spécifiant bien les éléments de version :

- -
    -
  1. Pour commencer, indiquez le numéro de version majeur, par exemple 1.4.0.0-prerelease. Cette information se trouve dans Paramètres > Informations.
  2. -
  3. Vous pouvez fournir des identifiants de versions plus spécifiques en indiquant les hash correspondant aux dépôt gaia et gecko. Pour obtenir ces informations, vous pouvez utiliser les commanes suivantes : -
    #!/bin/bash
    -(cd gaia;  echo "gaia  $(git rev-parse HEAD)")
    -(cd gecko; echo "gecko $(git rev-parse HEAD)")
    -
  4. -
diff --git a/files/fr/archive/b2g_os/customisation_avec_le_fichier_.userconfig/index.html b/files/fr/archive/b2g_os/customisation_avec_le_fichier_.userconfig/index.html deleted file mode 100644 index b9a23a766d..0000000000 --- a/files/fr/archive/b2g_os/customisation_avec_le_fichier_.userconfig/index.html +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: Customisation avec le fichier .userconfig -slug: Archive/B2G_OS/Customisation_avec_le_fichier_.userconfig -translation_of: Archive/B2G_OS/Customization_with_the_.userconfig_file ---- -
-

Vous pouvez customiser certains aspects du processus de construction en ajoutant un peu de code dans votre source B2G, dans le fichier .userconfig.  Cet article montre ce que l'on peut faire en effectuant ces changements et comment on les réalise.

-
- -

Le fichier .userconfig n'est pas vérifié dans le contrôle du code source, donc vos changements ne seront pas effacés quand vous mettrez a jour votre arbre source. Il a besoin d'être créé dans la base de l'arbre du B2G; qui est dans le même dossier que flash.sh, build.sh, etc... Vous devriez ajouter ceci avant de lancer votre config et de construire vos étapes.

- -

Le fichier .userconfig, s'il existe, est créé de source par le script load-config.sh qui est lui même créé de source par ces scripts : flash.sh, build.sh (Par setup.sh), run-gdb.sh, run-emulator.sh et tools/mach_b2g_bootstrap.py. Le script run-*.sh l'utilise pour déterminer où vous devez avoir Gecko. Le script mach_b2g_boostrap.py est utilisé par toutes commandes mach en rapport avec le B2G.

- -
-

Important : votre fichier .userconfig devrait être à la racine de votre répertoire source de B2G, non pas dans votre répertoire /home !

-
- -

Changer l'arbre source de Gecko

- -

Par defaut, la construction utilise l'arbre source de gecko, qui est cloné d'un autre arbre de source depuis Github. Certaines personnes préfèrent utiliser mozilla-inbound, ou mozilla-central. Pour faire ceci, créez votre clone là où vous le désirez et ajoutez une ligne dans votre .userconfig qui met en place GECKO_PATH, par exemple :

- -
export B2G_DIR=${B2G_DIR:-$(cd $(dirname $0); pwd)}
-echo "B2G_DIR = ${B2G_DIR}"
-
-export GECKO_PATH=${B2G_DIR}/mozilla-inbound
-echo "GECKO_PATH = ${GECKO_PATH}"
-
- -
-

Note : si vous construisez avec un Gecko modifié sue Mac OS X, le dossier mozilla-central doit être dans un fichier système sensible à la casse sinon GECKO_PATH sera ignoré. Vous pouvez vérifier si le fichier système est sensible au majuscules en lançant cette ligne de commande dans un terminal :

- -
echo -n This file system is case->tmp; echo -n in>>TMP; echo sensitive>>tmp; cat tmp
- -

Récupérer B2G_DIR comme fait ci-dessus permet à votre .userconfig de fonctionner sans avoir des chemins d'accès compliqués.

-
- -

Changer les paramètres de Gaia

- -

Parfois, vous aimeriez pouvoir changer les paramètres de Gaia. Par exemple, autoriser adb dans une construction utilisateur.

- -

<!-- cette partie reste à traduire

- -

The gaia Makefile passes in --override build/custom-settings.json when calling build/settings.py, so we can write some bash which will write {"devtools.debugger.remote-enabled": true} into the custom-settings.json file. We try to avoid changing custom-settings.json if we don't need to, so we actually write into custom-settings.json.new and if the contents differ from custom-settings.json then we'll replace it.

- -

-->

- -
export GAIA_PATH=${GAIA_PATH:-$(cd gaia; pwd)}
-export CUSTOM_SETTINGS="${GAIA_PATH}/build/config/custom-settings.json"
-cat > "${CUSTOM_SETTINGS}.new" <<EOF
-{"devtools.debugger.remote-enabled": true}
-EOF
-if [[ -f ${CUSTOM_SETTINGS} ]] && cmp "${CUSTOM_SETTINGS}" "${CUSTOM_SETTINGS}.new" >& /dev/null; then
-  rm "${CUSTOM_SETTINGS}.new"
-else
-  mv "${CUSTOM_SETTINGS}.new" "${CUSTOM_SETTINGS}"
-fi
-
- -

Une autre façon plus simple de configurer consiste à utiliser le fichier build/config/custom-prefs.js présent dans le répertoire de Gaia, c'est-à-dire dans gaia/build/config/custom-prefs.js si vous êtes dans le répertoire B2G. Voir aussi Personnaliser les réglages utilisateurs Gaia.

- -
-

Note:  Currently the build is not smart enough to look in a different directory based on GAIA_PATH.  This is different from how GECKO_PATH behaves.  If you wish to use a separate Gaia clone you can manually run make from that directory.

-
- -

Créer des modèles de builds

- -

Vous pouvez créer plusieurs types de compilations automotiques de Gaia avec la commande make en pramaétrant le fichier .userconfig - cette section dénombre quelques options.

- -
-

Note: You can also set many different build options dynamically at build time by including different options along with the make command when you build. For a complete reference, see our make options reference article.

-
- -

Creating production and engineering builds

- -

To create different production builds (built with the final apps you'd want users to see) and engineering builds (built with additional test apps and other engineering features), you can add the following lines into .userconfig:

- -
PRODUCTION=1
- -

On its own, this creates a production build. This can also be achieved on the fly by setting the production make option.

- -

Alternatively, there are variants, which set various levels of engineering capabilities:

- -
VARIANT=user
-
-VARIANT=userdebug
-
-VARIANT=eng
- -

The differences between these variants are as follows:

- - - -
-

Note: Les deux valeurs user et userdebug impliquent PRODUCTION=1 quand la compilation est faite pour un terminal ou un émulateur.

-
- -
-

Note: make production is really a way to build a user version of Gaia and flash it to the device. Specifying a VARIANT is the way to do this when building for Gaia in Nightly or B2G Desktop.

-
- -

Creating a debug build

- -

To build a debug build, put the following line in your .userconfig file:

- -
export B2G_DEBUG=1
- -

This can be achieved on the fly at build time by including the DEBUG=1 make option.

- -

Creating a profiling build

- -

To enable profiling (for best results with the built-in (SPS) platform profiler), add the following to your .userconfig file then rebuild:

- -
export MOZ_PROFILING=1
- -
-

Important: Do NOT pair with B2G_NOOPT. The results will be meaningless!

-
- -

Disabling the optimizer

- -

To disable the optimizer (which may create builds that are easier to debug), add the following to your .userconfig file then rebuild:

- -
export B2G_NOOPT=1
- -

Disabling First Time User experience

- -

If you build and reflash a lot, going through the First Time User experience constantly can be annoying. You can disable this by adding the following to your .userconfig:

- -
export NOFTU=1
- -

This can be achieved on the fly at build time by including the NOFTU=1 make option.

- -

Enabling Gaia developer mode

- -

If you plan to develop apps or hack gaia, you can automatically set various usefull settings and preferences to ease working with the device. For example, it will automatically enable the remote debugging feature and disable the prompt when an incoming debugging connection starts.

- -

What you need is the following export added to your .userconfig:

- -
export DEVICE_DEBUG=1
- -

Enabling Valgrind

- -

Valgrind is useful for debugging memory or threading issues with your application. For more information on running valgrind, see Debugging B2G using valgrind [en-US].

- -

To use valgrind under B2G, add the following to your .userconfig:

- -
export B2G_VALGRIND=1
- -

Changing the default host compiler

- -

On some recent distributions which use GCC 4.7 or later as the default compiler you will need to specify an older version in order to be able to build, to do so add two lines to your .userconfig file setting the CC and CXX variables to set the alternate C and C++ compilers respectively. For example to set the GCC 4.6 compiler on Ubuntu 12.10 use:

- -
export CC=gcc-4.6
-export CXX=g++-4.6
-
- -

Or if you're using a version built from sources provide the full path to the exectuables:

- -
export CC=/opt/gcc-4.6.4/bin/gcc
-export CXX=/opt/gcc-4.6.4/bin/g++
-
- -

Specifying a custom Gecko object tree location

- -

Once you start changing gecko source trees and other build options, you may want to also modify where your objects get stored (so, for example, all of your debug objects go into a different tree from your non-debug objects). So you might do something like:

- -
export GECKO_OBJDIR=${GECKO_PATH}/objdir-gonk-debug
-
- -

Using ${GECKO_PATH} makes it easy to switch between different gecko trees (eg: central, beta, aurora, etc).

- -

Keeping both debug and non-debug objects

- -

You can use your .userconfig file to switch back and forth between debug and release builds without having to rebuild everything each time!

- -
-
- -
export B2G_DIR=${B2G_DIR:-$(cd $(dirname $0); pwd)}
-echo "B2G_DIR = ${B2G_DIR}"
-
-export GECKO_PATH=${B2G_DIR}/mozilla-inbound
-echo "GECKO_PATH = ${GECKO_PATH}"
-
-export B2G_DEBUG=1
-echo "B2G_DEBUG = ${B2G_DEBUG}"
-
-export GECKO_OBJDIR=${GECKO_PATH}/objdir-gonk
-if [[ "${B2G_DEBUG}" != "0" ]]; then
-  export GECKO_OBJDIR=${GECKO_OBJDIR}-debug
-fi
-if [[ "${GECKO_PATH/*mozilla-inbound*/mozilla-inbound}" == "mozilla-inbound" ]]; then
-  export GECKO_OBJDIR=${GECKO_OBJDIR}-m-i
-fi
-echo "GECKO_OBJDIR = ${GECKO_OBJDIR}"
- -

The echo commands help remind you what your current settings are. To switch between debug and release builds, simply change the value of B2G_DEBUG on line 7.

diff --git a/files/fr/archive/b2g_os/debugging/connecting_a_firefox_os_device_to_the_desktop/index.html b/files/fr/archive/b2g_os/debugging/connecting_a_firefox_os_device_to_the_desktop/index.html deleted file mode 100644 index f96309e2ec..0000000000 --- a/files/fr/archive/b2g_os/debugging/connecting_a_firefox_os_device_to_the_desktop/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Connexion d'un appareil Firefox OS à un ordinateur -slug: Archive/B2G_OS/Debugging/Connecting_a_Firefox_OS_device_to_the_desktop -tags: - - ADB - - Firefox OS -translation_of: Archive/B2G_OS/Debugging/Connecting_a_Firefox_OS_device_to_the_desktop ---- -
-

Ce guide explique comment connecter un appareil Firefox OS à votre ordinateur en USB.

-
- -
-

Note : Si vous souhaitez seulement déboguer des applications sur un appareil Firefox OS et que vous avez Firefox OS 1.2+, le meilleur choix consiste à utiliser WebIDE. Si votre version de Firefox OS est inférieure à 1.2, lisez Préparations pour déboguer sur Firefox OS avec les outils pour Développeur Web de Firefox pour découvrir comment utiliser le débogage distant classique.

-
- -

Configuration de l'appareil

- -

Sur votre appareil Firefox OS (voir la présentation) :

- -
    -
  1. Ouvrez l'application Paramètres, puis Informations sur l'appareil > Plus d'informations > Développeurs.
  2. -
  3. Dans le menu développeurs, cochez "Débogage distant".
  4. -
- -

Configuration de l'ordinateur

- -

Pour connecter un appareil à l'ordinateur, vous devez installer Android Debug Bridge (adb). Remarquez que l'extension ADB Helper (pour utiliser avec WebIDE) intègre déjà adb.

- -

Les instructions pour configurer votre ordinateur sont spécifiques à votre système d'exploitation et sont détaillées au point 3 de "Setting up a Device for Development" sur le site de développement d'Android. Des instructions supplémentaires sont énumérées ci-dessous.

- -

Instructions spécifiques à Mac OS X

- -

Si vous êtes sous Mac OS X, vous avez téléchargé un paquet dont le nom ressemble à adt-bundle-mac-x86_64-20130522. Placez-le dans le dossier Applications afin d'avoir deux répertoires dans /Applications/adt-bundle-mac-x86_64-20130522/ : eclipse et sdk. Éditez ensuite votre ~/.bashrc et ajoutez

- -
export PATH="/Applications/adt-bundle-mac-x86_64-20130522/sdk/platform-tools:$PATH"
- -

(Cela sera pris en compte la prochaine fois que vous démarrerez votre shell). À l'invite du shell, vous pouvez maintenant taper :

- -
adb devices
-
- -

Cela affichera une liste des périphériques connectés de ce genre :

- -
List of devices attached
-AA:BB:A5:B5:AA:BB    device
- -

Instructions spécifiques à Linux

- -

Si vous êtes sous Linux, l'ID (identifiant) vendeur à utiliser pour les appareils Geeksphone Firefox OS est 05c6, votre fichier /etc/udev/rules.d/51-android.rules doit donc contenir une entrée semblable à :

- -
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
- -

Instructions spécifiques à Windows

- -

Vous pouvez télécharger les pilotes Windows du Geeksphone sur le site web de Geeksphone.

- -

Par défaut, Windows 8 ne permet pas l'installation de pilotes non signés. Consultez le tutoriel "Comment installer un pilote non signé sous Windows 8".

- -

Comme Windows XP Édition familiale ne comporte pas tasklist.exe, le Simulateur ne détecte pas le périphérique. Cela peut être résolu en téléchargeant ce fichier depuis le site web ComputerHope et en le plaçant dans le dossier Windows\System32.

- -

Vérification de votre configuration

- -

Après avoir suivi ces instructions, branchez l'appareil sur l'ordinateur avec un câble USB, ouvrez un interpréteur de commandes et tapez "adb devices" (assurez-vous que adb est dans votre path). Votre appareil Firefox OS devrait apparaître dans le résultat de la commande.

diff --git a/files/fr/archive/b2g_os/debugging/index.html b/files/fr/archive/b2g_os/debugging/index.html deleted file mode 100644 index 18edc0b003..0000000000 --- a/files/fr/archive/b2g_os/debugging/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Déboguer sur Firefox OS -slug: Archive/B2G_OS/Debugging -tags: - - AQ - - B2G - - Déboguer - - Firefox OS - - Tester -translation_of: Archive/B2G_OS/Debugging ---- -

Vous pouvez réaliser trois types de débogage sur Firefox OS.

- - - -

Cette page fournit les liens vers les informations utiles sur les différents moyens de déboguer votre code Firefox OS.

- - - - - - - - -
-

Documentation à propos du débogage sur Firefox OS

- -
-
Déboguer des applications Firefox OS dans Firefox pour ordinateur
-
Vous pouvez utiliser Firefox sur ordinateur pour déboguer une bonne partie des applications web. Cet article fournit un guide des fonctionnalités de Firefox utiles dans ce genre de situation.
-
Préparations pour déboguer du code Firefox OS
-
Avant de pouvoir utiliser la plupart des outils intégrés à Firefox pour déboguer du code s'exécutant sur Firefox OS, vous devez faire un peu de configuration. Cet article vous explique ce qu'il faut faire.
-
Utiliser le débogueur
-
Vous pouvez utiliser le débogueur distant de Firefox pour déboguer du code s’exécutant dans Firefox OS sur un appareil avec une connexion partagée (tethered), ou dans le simulateur Firefox OS.
-
Journalisation console sur l'appareil
-
Comment activer la journalisation (log) console sur un appareil Firefox OS, et comment accéder aux journaux créés sur l'appareil pour les analyser sur ordinateur.
-
Utiliser la Console Web distante avec Firefox OS
-
La Console Web distante inclue dans Firefox vous permet de surveiller la sortie console d'un appareil Firefox OS.
-
Paramètres pour développeurs sur les appareils Firefox OS
-
Il y a plusieurs paramètres à destination des développeurs sur Firefox OS. Ce guide explique ce qu'ils font et comment en tirer partis.
-
Déboguer B2G en utilisant gdb
-
Le débogueur populaire gdb peut être utilisé pour déboguer Firefox OS et les applications tournant soit sur un appareil, soit sur un émulateur. Ce guide vous montre comme faire.
-
Déboguer en utilisant le client ordinateur B2G
-
Des fonctionnalités accessibles sur le client ordinateur B2G peuvent aider dans le débogage de vos applications. Découvrez-les dans cet article.
-
Conseils généraux pour déboguer B2G
-
Des conseils généraux qui peuvent s'appliquer à tout débogage sur B2G que vous pourriez réaliser.
-
Personnaliser le script b2g.sh
-
Vous pouvez personnaliser le script b2g.sh pour ajuster les variables d'environnement et ainsi changer le comportement de Gecko.
-
Obtenir des journaux NSPR dans B2G
-
Vous pouvez utiliser les journaux (logs) NSPR pour enregistrer HTTP et autre trafic réseaux.
-
Journalisation HTTP
-
Comment journaliser (log) votre trafic réseau HTTP pour déboguer.
-
- -

Voir tout...

-
-

Obtenir de l'aide de la communautré

- -

Si vous travaillez avec Firefox OS ou développez des applications que vous aimeriez voir fonctionner sur des appareils Firefox OS, des ressources communautaires sont à votre disposition !

- - - -

N'oubliez pas la netiquette pour poser vos questions…

-
- -

 

diff --git a/files/fr/archive/b2g_os/debugging/installer_adb/index.html b/files/fr/archive/b2g_os/debugging/installer_adb/index.html deleted file mode 100644 index 24ed61578e..0000000000 --- a/files/fr/archive/b2g_os/debugging/installer_adb/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Installer et utiliser ADB -slug: Archive/B2G_OS/Debugging/Installer_ADB -translation_of: Archive/B2G_OS/Debugging/Installing_ADB ---- -
-

De nombreux aspects du développement de Firefox OS nécessitent l'installation d'ADB, (Android Debug Bridge). Cet article explique comment faire et propose quelques commandes usuelles et utiles d'ADB.

-
- -

Installer ADB

- -

Vous pouvez installer adb à partir du paquet Android SDK disponible pour Mac, Linux et Windows — allez sur la page Get the Android SDK.

- -

Vous pouvez aussi installer cette extension Firefox, ce qui est plus rapide.

- -

Si vous utilisez la dernière version stable de votre système d'exploitation, alors ADB a de grandes chances d'être maintenu par un membre de la communauté dans les dépôts :

- -

Le résumé suivant (WIP) indique comment télécharger ADB pour les distributions utilisant les dépôts de Debian, Fedora et Archlinux ainsi que pour Mac OS X.

- -

Debian et distributions dérivées (TAILS, *buntu, Elementary OS)

- -
sudo apt-get install android-tools-adb
- -

Fedora 19, 20, 21, et distributions dérivées

- -
sudo yum install android-tools
- -

Archlinux et distributions dérivées

- -
yaourt -S android-tools android-udev
- -

Mac OS X

- -

Vous aurez besoin de Homebrew pour utiliser l'utilitaire adb : brew.sh.

- -

Lancez ensuite la commande suivante :

- -
brew install android-platform-tools
- -

Autre

- -

Si votre distribution ne possède pas les paquets adb (par exemple Ubuntu 12.04 ou Fedora 17/18), vous aurez besoin d'installer le paquet starter Android SDK pour votre plateforme (choisissez l'ADT Bundle, et non pas l'option SDK Tools Only). Puis démarrer le gestionnaire de paquet, $SDK_HOME/tools/android, et utiliser l'interface graphique pour installer "Android SDK Platform-tools".

- -

Regardez où adb est installé (généralement dans usr/bin, et peut être aussi à l'intérieur de adt/platform-tools, selon où vous l'avez installé). Pensez à ajouter ce répertoire à votre PATH. Vous pouvez faire ça en ajoutant la ligne

- -
PATH=$SDK_HOME:$PATH
- -

en remplaçant $SDK_HOME avec l'emplacement du SDK Android, dans votre ~/.bashrc ou équivalent.

- -

Dépannage

- -

Installer les bibliothèques de compatibilité 32 bits

- -

Vous pourrez traiter de données en 32 bits. Si votre système d'exploitation est en 64 bits, cela signifie qu'il vous faudra des bibliothèques de compatibilité 32 bits.

- -

Le résumé ci-dessous (WIP) indique comment les télécharger depuis les dépôts de Debian et Archlinux :

- -

Debian et distributions dérivées (TAILS, *buntu, Elementary OS)

- -
sudo apt-get install ia32-libs
- -

Archlinux et distributions dérivées

- -

Pour intégrer des bibliothèques de compatibilité 32 bits, il faut indiquer à pacman que vous souhaitez les paquets venant de multilib.

- -

Le dépôt multilib devrait être présent par défaut, mais vous pouvez, dans le cas contraire, modifier votre pacman.conf et décommenter ou taper les lignes suivantes :

- -
[multilib]
-
-Include = /etc/pacman.d/mirrorlist
- -

Installez ensuite les paquets lib32-libstdc++5 et lib32-zlib à l'aide de la commande suivante :

- -
yaourt -S lib32-libstdc++5 lib32-zlib
- -

Appareil non listé par 'adb devices'

- -

Si votre appareil n'est pas affiché en tapant 'adb device', cliquez ici pour suivre les étapes de résolutions.

- -

Commandes ADB usuelles

- -

Les sections suivantes expliquent quelques commandes usuelles d'adb.

- -

Redémarrer le processus b2g

- -

b2g est l'équivalent d'une application XULRunner fonctionnant sur le téléphone sur un kernel basé sur Android. Si vous souhaitez le redémarrer, c'est une manière de mettre à zéro l'environnement applicatif sans redémarrer entièrement l'appareil. Vous pouvez faire cela en entrant la commande suivante dans votre terminal en ayant votre appareil connecté à votre ordinateur (ou lorsque le déboggeur est installé) :

- -
adb shell killall b2g
- -

Activer la redirection de port pour le déboggage

- -

Pour activer simplement la redirection de port (par exemple si vous souhaitez utiliser le gestionnaire d'applications pour débogger des applications Firefox OS sur un appareil), entrez la commande suivante dans votre terminal :

- -
adb forward tcp:6000 localfilesystem:/data/local/debugger-socket
- -

Vous aurez besoin de faire ça à chaque fois que le téléphone est redémarré ou débranché puis rebranché. Vous pouvez changer le nombre du socket si nécessaire.

- -

Rediriger des ports à une machine locale

- -

Pour rediriger des ports à une machine locale, vous aurez besoin de télécharger les binaires netcat et ssh, et exécuter les commandes suivantes :

- -
# Ceci est un hack horrible, mais il fonctionne...
-hôte$ adb forward tcp:7979 tcp:6969
-
-# Crée quelques pipes nommés pour faire un netcat bi-directionnel
-téléphone$ mknod readback p
-hôte$ mknod readback p
-
-# cela met en place une connexion utilisable une seule fois pour se connecter à l'hôte
-# écoute sur les ports 6969 et 5959 et redirige toutes les informations entre elles
-téléphone$ ./netcat -l -p 6969 < readback | ./netcat -l -p 5959 > readback
-# connecte au port 7979 (port 6969 sur l'appareil) et le serveur ssh local et redirige toutes les informations entre elles
-hôte$ ./netcat localhost 7979 < readback | ./netcat localhost 22 > readback
-
-# maintenant lorsque nous nous connectons au port 5959 sur le téléphone cela sera comme si nous nous connectons au serveur ssh sur l'hôte
-
-# utilise le reverse netcat pour paramétrer une connexion ssh de retour à l'hôte et redirige le port 9999 sur l'appareil à 'localhost:8000' (cela peut être n'importe quoi comme 'google.com:80')
-téléphone$ ./ssh localhost -p 5959 -L 9999:localhost:8000
- -

Celà redirigera le port 9999 sur l'appareil au port 8000 de l'hôte.

- -

Sinon vous pouvez utiliser un serveur SSH (dropbear et host_key) directement sur l'appareil en entrant les commandes suivantes :

- -
téléphone$ DROPBEAR_PASSWORD=root ./dropbear -p 9000 -F -v -a -r host_key ./dropbear
-hôte$ adb forward tcp:8888 tcp:9000
-# l'authentification avec clé publique à été codée en dur pour fonctionner (assurez-vous que vous avez une clé publique ssh à utiliser)
-hôte$ ssh -vvv root@localhost -p 8888 -R 9999:people.mozilla.org:80
-
- -

Plus de ressources :

- - diff --git a/files/fr/archive/b2g_os/debugging/journalisation_console/index.html b/files/fr/archive/b2g_os/debugging/journalisation_console/index.html deleted file mode 100644 index d20e6ce712..0000000000 --- a/files/fr/archive/b2g_os/debugging/journalisation_console/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Journalisation console sur l'appareil -slug: Archive/B2G_OS/Debugging/Journalisation_console -tags: - - B2G - - Console Web - - Déboguer - - Firefox OS - - Journaliser -translation_of: Archive/B2G_OS/Debugging/On-device_console_logging ---- -

En plus de la possibilité de journaliser vers la console et de lire depuis la Console Web distante, vous pouvez journaliser directement vers le stockage de fichiers de l'appareil, et ensuite récupérer les journaux plus tard depuis votre ordinateur en utilisant l'utilitaire logcat et une connection USB. Cet article explique comment activer la fonctionnalité, comment journaliser, et comment récupérer les journaux.

-

Activer la console sur Firefox OS

-

Les builds de production de Firefox ont la journalisation console (tel que console.log()) désactivée par défaut. Pour la rétablir, ouvrez l'application Paramètres, et ensuite allez dans Informations > Plus d'informations > Développeurs. Dans ce menu, sélectionnez Console activée.

-

Journaliser

-

Une fois que la journalisation est activée, cela marche comme pour Firefox sur ordinateur. Vous utilisez simplement les méthodes de l'objet console pour envoyer du texte vers la console. Par exemple :

-
console.info("Démarrage du matériel foobar !"
-var err = foobar.start();
-if (err) {
-  console.error("--Erreur %d démarrage du matériel foobar !", err);
-}
-
-

Voir console  pour plus de détails sur les fonctionnalités de journalisation qui vous sont offertes.

-

Utiliser logcat

-

Parce que les journaux sont stockés sur l'appareil Firefox OS, et qu'il n'y a pas actuellement d'interface utilisateur pour voir ces journaux sur l'appareil, vous devrez les récupérer depuis un ordinateur pour les analyser. Vous aurez besoin d'utiliser la commande logcat depuis adb, qui fait partie du SDK Android que vous avez peut-être déjà installé lors de votre préparation pour développer pour et sur Firefox OS.

diff --git "a/files/fr/archive/b2g_os/debugging/les_param\303\250tres_d\303\251veloppeurs/index.html" "b/files/fr/archive/b2g_os/debugging/les_param\303\250tres_d\303\251veloppeurs/index.html" deleted file mode 100644 index 43ea1216c8..0000000000 --- "a/files/fr/archive/b2g_os/debugging/les_param\303\250tres_d\303\251veloppeurs/index.html" +++ /dev/null @@ -1,421 +0,0 @@ ---- -title: Paramètres pour développeurs sur Firefox OS -slug: Archive/B2G_OS/Debugging/Les_paramètres_développeurs -tags: - - Déboguer - - Firefox OS -translation_of: Archive/B2G_OS/Debugging/Developer_settings ---- -
-

Caché au fond de l'application Paramètres de Firefox OS, se trouve le panneau Développeurs. Ce panneau offre de nombreuses options qui vous simplifieront le débogage de votre application Open Web et de Firefox OS. Cet article présente les options disponibles et explique comment les utiliser.

-
- -

Le panneau de paramétrage à destination des développeurs est intentionnellement difficile d'accès afin d'éviter aux utilisateurs courants d'activer par erreur des options qui pourraient ralentir leur appareil ou modifier l'affichage.

- -

Dans les versions de Firefox OS 1.4 et suivantes, pour atteindre ce panneau, il faut d'abord l'activer via Paramètres > Informations > Plus d'informations > Cocher "Menu Développeurs". Ensuite ouvrez l'application "Paramètres", et touchez le bouton "Développeurs" (dans la section "Appareil") :

- -

capture d'écran de l'application Paramètres

- -

Ce panneau "Développeurs" ressemble à ceci (Capture d'écran prise sur un ZTE Open C, avec Firefox OS 2.2) :

- -

Capture d'écran du contenu du menu Développeurs

- -

Dans les versions de Firefox OS antérieures à la 1.4, c'est via Paramètres > Informations > Plus d'informations > Développeurs.

- -
-

Important: Ces outils sont puissants mais peuvent provoquer des bugs au cours d'une utilisation classique. Les fonctionnalités connues pour en provoquer ont été désactivées par défaut. Si vous rencontrez des problèmes, essayez de désactiver les fonctionnalités développeur que vous avez activées.

-
- -

Options du panneau Développeurs

- -

Débogage via USB

- -

L'option "Débogage USB" permet le débogage à distance de votre appareil Firefox OS. Ceci permet aussi l'utilisation des commandes ADB. Dans les versions antérieures à la 1.4, il n'y a qu'une case à cocher, à partir de la version 1.4, il y a 3 options disponibles :

- - - -

Outils de développement via Wi-Fi

- -
-

Note: Introduit dans Firefox OS 3.0 et Firefox 39.0 (27 Mars 2015 et ultérieur)

-
- -

Cocher cette case permet de connecter l'appareil Firefox OS à WebIDE -que vous trouverez sur Firefox Bureau- via un réseau Wi-Fi local. Cela vous permettra d'envoyer vos applications sur votre appareil Firefox OS pour les tester facilement. Pour plus de détails, voir Débogage Wi-Fi de  Firefox OS de J. Ryan Stinnett (en anglais).

- -

Nom d'appareil Wi-Fi pour DevTools

- -
-

Note: Introduit dans Firefox OS 3.0 et Firefox 39.0 (27 Mars 2015 et ultérieur)

-
- -

Ce champ texte vous permet de définir le nom sous lequel votre appareil sera identifié par votre réseau Wi-Fi, lorsqu'il sera connecté aux outils de développement (voir paragraphe précédent).

- -

Informations Développeurs

- -

À partir de la version 1.4 de Firefox OS, toucher cette section vous amène dans le panneau "Informations Développeurs":

- -

Contenu du panneau Informations Développeurs

- -

Les 2 premières cases à cocher (toujours actives) sont:

- - - -

Ensuite, il y a l'option "Outils de développement" qui gère l'accès aux options qui se trouvent dessous, chacune contrôlable par une case à cocher:

- - - -

Images par seconde

- -

Activer cette option affiche 3 nombres dans le coin en haut à gauche de l'affichage Firefox OS (voir capture d'écran précédente). Ces valeurs sont une moyenne des résultats récents au sein d'une fenêtre défilant. Ces valeurs sont voulues "instantanées" mais assez précises. Ces nombres sont donc des "déductions":

- - - -

Durée de chargement

- -

Firefox OS possède un outil aidant à la mesure de la durée de chargement, particulièrement la durée du "premier affichage". Les valeurs fournies par l'outil — dans le coin en haut à droite de l'écran (voir capture d'écran précédente) — représentent la durée écoulée entre l'instant de lancement de l'application par l'utilisateur et une estimation du premier instant où l'application s'affiche à l'écran, en millisecondes. Ce nombre est uniquement une estimation de la durée réelle d'affichage et a tendance à la sous estimer. Cependant, faire baisser cette valeur se traduit quasiment toujours par une amélioration de la durée de chargement. Cette valeur peut donc être utile pour mesurer rapidement l'efficacité de travaux d'optimisation.

- -

Mémoire application

- -

Affiche la quantité de mémoire que les différentes catégories sélectionnées utilisent au sein de l'application courante. Par exemple, la capture d'écran ci-dessous n'a que les options Mémoire application et Objets JS de cochées, donc l'indicateur en bas à droite de l'écran montre que l'application Paramètres utilise 1,15MB en objets JS.

- -

Exemple d'activation de l'option Mémoire Application

- -

Accélération graphique

- -

Zones repeintes

- -

Dans ce mode, chaque fois qu'une région de l'écran est peinte par Gecko, Gecko ajoute une couche translucide de couleur aléatoire sur la région. Idéalement, seules les régions de l'écran qui changent visuellement "flasheront" avec une nouvelle couleur. Mais il arrive qu'il y ait plus de régions repeintes que nécessaire, faisant "flasher" de grosses parties de l'écran. Ce symptôme peut indiquer une trop forte mise à jour de l'écran de la part de l'application, ou être le reflet de bogues de Gecko lui-même.

- -

Capture d'écran montrant l'option Zones repeintes en action

- -

Overscrolling

- -

Active ou désactive le comportement des versions 2.1 et ultérieures de Firefox OS qui consiste a étirer l'affichage lorsque l'utilisateur tente de faire défiler la page au delà de la fin puis remet l'affichage à sa taille normale une fois le défilement arrêté, un peu comme le ferait un élastique. Le nom complet de ce comportement est elastic overscroll.

- -

Tuilage (was Layers: Enable tiles)

- -

Introduite à partir de la version 1.4 de Firefox OS, cette fonctionnalité active l'affichage de contenu sur l'écran en petites parties ("tuiles") plutôt que d'afficher tout l'écran d'un seul coup. Ceci est principalement utile pour le travail du service QA impliquant la réduction de l'effet damier et la recherche de fenêtres de régression.

- -

Painting basse précision

- -

Activer cette option fait dessiner à Gecko une version basse précision (floue) du contenu lors d'un défilement vraiment rapide. Ceci est utile parce que plus rapide à dessiner et aide donc à éviter d'afficher des zones blanches (effet damier) lors d'un défilement rapide. Cela ne devrait être visible que temporairement pour l'utilisateur, car le contenu basse précision sera remplacé par le contenu haute précision dès que le défilement s'arrêtera.

- -

Transparence basse précision

- -

Ceci est une option supplémentaire pour le "painting" basse précision qui rend le contenu basse précision à moitié transparent. Ceci rend l'effet un peu plus subtile et moins déroutant pour l'utilisateur.

- -

Composition matérielle (was Enable hardware compositing)

- -

Lorsque cette option est activée, l'appareil utilise son Composeur matériel pour composer les éléments visuels (surfaces) de l'écran.

- -

Dessiner bords du tuilage (was Layers: Draw tile borders)

- -

Ceci est similaire à l'option Dessiner_bords_du_calque, mis à part qu'elle dessine les bords des tuiles individuelles en plus des bords des calques.

- -

Dessiner bords du calque

- -

Lorsque cette option est activée, un bord de couleur vive est ajouté autour des différentes calques affichés à l'écran — très pratique pour investiguer les problèmes de calques.

- -

Une capture d'écran montrant l'effet de l'option Dessiner bord du calque

- -

Informations arbres de calques

- -

Cette option active layers.dump, qui copie l'arbre de calque du composeur dans logcat à chaque image composée à l'écran. Ceci est principalement utile pour travailler sur les performances graphiques de la plate-forme, plutôt que pour du développement web classique.

- -

Information layerscope

- -

Active les traces du layerscope permettant de voir des informations concernant les calques des applications installées sur un PC. Lire Layerscope sur le wiki Mozilla (en anglais) pour avoir plus de détails et savoir comment l'utiliser.

- -

Miniatures: captures d'écran

- -

Dans la vue miniature, active l'affichage de capture d'écran des applications lancées. Sinon, les icônes des applications seront affichés au centre de miniatures vides.

- -

Gestion de la fenêtre

- -

Émuler le bouton Accueil

- -

Crée un bouton Accueil logiciel offrant les mêmes fonctionnalités que son équivalent matériel s'il n'est pas disponible. Cette option existe pour une utilisation future par des appareils qui n'auront probablement pas de bouton Accueil matériel, comme les tablettes.

- -

Geste de retour à l'accueil

- -

Permet de faire un geste (partir hors de l'écran et monter vers le centre de l'écran) pour revenir à l'accueil. Encore une fois cette option propose une fonctionnalité du bouton Accueil matériel et existe pour une utilisation future par des appareils qui n'auront probablement pas de bouton Accueil matériel, comme les tablettes.

- -

Transition continue

- -

Cette option permet de contrôler si l'application clavier s'ouvre immédiatement ou de manière continue (avec une transition). Désactiver une telle transition peut être utile sur des appareils bas de gamme qui souffrent de mauvaises performances.

- -

Transition d'application

- -

Active et désactive toutes les transitions d'ouverture et de fermeture d'applications: toutes les applications s'afficheront immédiatement -sans douce animation- et les claviers apparaîtront et disparaîtront sans animation non plus. Comme l'option "Transition continue", elle a pour but d'améliorer les performances sur des appareils bas de gamme, avec des effets plus notables.

- -

Suspension d'application

- -

Cette option activée fait qu'une application fermée en tâche de fond sera gardée dans l'historique et ré-ouverte lorsque vous la sélectionnerez depuis l'écran d'accueil ou la vue miniature. L'option désactivée, une telle application ne sera pas gardée dans l'historique ou la vue miniature.

- -

Copier-coller

- -

Active la fonctionnalité, encore expérimentale, de copier-coller en cours d'implémentation dans Firefox OS.

- -

Débogage

- -

Pseudo-localisation

- -

Cette option activée, pseudo-langues comme l'anglais accentué et l'anglais miroir sont sélectionnables dans Paramètres > Langue. Avec les pseudo-localisations, vous pouvez tester le support de la localisation de votre code sur une compilation classique de Gaia, sans avoir à ajouter les ressources d'une langue réelle ou devoir parler une autre langue que l'anglais. Par exemple, vous pouvez vous assurer que les calques se redimensionnent bien avec du texte plus long, prévisualiser l'application dans une fausse langue RTL, ou repérer les éléments HTML sans l'attribut data-l10n-id (ils seront affichés en anglais).

- -

Screenshot of pseudolocales

- -

Lors de la compilation de Gaia, vous pouvez ajouter les pseudo-langues dans la liste des langues par défaut en ajoutant la ligne suivante dans gaia/build/config/common-settings.json:

- -
"devtools.qps.enabled": true
- -

Selon la configuration de la compilation, les pseudo-localisations sont soit construites au moment de la compilation (ce qui prend de l'espace disque), soit générées dynamiquement au moment de l'exécution (modifiant les performances et l'empreinte mémoire).

- - - -

Enregistrer les animations lentes

- -

Cet outil a pour but d'aider les développeurs à comprendre pourquoi les animations ne sont pas déléguées au composeur pour être jouées le plus efficacement possible. Il rapporte des "problèmes" comme essayer d'animer des éléments trop gros, ou d'animer des propriétés CSS qui ne peuvent pas être déléguées. Les messages obtenus ressembleront à ceci:

- -
I/Gecko   ( 5644): Performance warning: Async animation disabled because frame size (1280, 410) is bigger than the viewport (360, 518) [div with id 'views']
- -
 
- -

Sortie géolocalisation dans ADB

- -

Active l'enregistrement des données de géolocalisation vers adb logcat. Ceci aide à déboguer à la fois la partie GPS (à savoir les appels NMEA) et l'utilisation MLS.

- -

Ignorer les positions GPS

- -

Activer cette option oblige l'API de géolocalisation à ignorer les informations de localisation provenant du GPS (l'API n'obtiendra d'information que les services de localisation basés sur le réseau). Ceci est utile pour déboguer des problèmes en rapport avec le fournisseur de géolocalisation GPS de Gonk. voir bug 1056857 pour plus d'informations.

- -

Sortie Wi-Fi dans ADB

- -

Activer cette option ajoute des informations à propos du Wi-Fi aux log adb (les log d'erreur de la console sont accessibles via la commande adb logcat | grep "Error" dans un Terminal).

- -

Sortie Bluetooth dans ADB

- -

Activer cette option ajoute des informations à propos du Bluetooth aux log adb (les log d'erreur de la console sont accessibles via la commande adb logcat | grep "Error" dans un Terminal).

- -

Bluetooth HCI Sniffing Logs to SDCard

- -

Enabling this option causes the device's HCI sniffing logs to be recorded to its SDCard.

- -

Sortie NFC dans ADB

- -

Activer cette option ajoute des informations à propos du NFC aux log adb (les log d'erreur de la console sont accessibles via la commande adb logcat | grep "Error" dans un Terminal).

- -

Sortie RIL dans ADB

- -

Activer cette option ajoute des informations à propos du RIL aux log adb (les log d'erreur de la console sont accessibles via la commande adb logcat | grep "Error" dans un Terminal).

- -

Sortie réseau dans ADB

- -

Activer cette option ajoute des informations à propos du réseau aux log adb (les log d'erreur de la console sont accessibles via la commande adb logcat | grep "Error" dans un Terminal).

- -

Activer la console

- -

Activer cette option vous permet d'utiliser la console Web de Firefox pour accéder à distance à la sortie console de l'appareil. Sans cette option activée, la fonction console.log() ne fait rien.

- -

Trace de débogage de Gaia

- -

Active les traces DEBUG de Gaia. Voir bug 881672 pour plus de détails.

- -
-

Note:  Malheureusement, toutes les applications ne supportent pas ce mécanisme pour leur trace de débug. Au lieu de ça, ces dernières gèrent un booléen "DEBUG" qui leur sont propre. Activer cette option n'assure donc PAS que vous aurez l'ensemble des log debug.

-
- -

Paramètres du lecteur d'écran

- -

Cette option active les paramètres du Lecteur d'écran, qui se trouve ensuite sous Paramètres > Accessibilité. Activer cette nouvelle option active le lecteur d'écran de Firefox OS. Cette technologie permet à un non voyant d'utiliser un appareil Firefox OS. Actuellement en cours de développement, le lecteur d'écran modifie la façon dont les touches de l'écran fonctionnent. Lorsque le lecteur d'écran est activé, vous devez interagir avec l'écran de la manière suivante:

- - - -
-

Note: Si vous avez activé le lecteur d'écran et que vous souhaitez le désactiver, vous devez revenir jusqu'au panneau de paramétrage à l'aide de ces nouveaux gestes et faire une double-touche sur la case à cocher une fois qu'elle est sélectionnée. Cela restaurera le comportement par défaut.

-
- -

À partir de la version 1.4 de Firefox OS, il y a un moyen plus rapide de changer l'état du lecteur d'écran. Appuyez sur la touche volume plus puis volume moins, et recommencez 3 fois (plus, moins, plus, moins, plus, moins). Le lecteur d'écran vous demandera de refaire cette action (plus, moins, plus, moins, plus, moins) pour l'activer s'il ne l'était pas, ou le désactiver dans l'autre cas. Si vous ne souhaitez pas modifier l'état du lecteur d'écran, faites simplement autre chose. De cette manière, vous pouvez facilement l'activer pour tester l'accessibilité de votre application Web puis le désactiver sans retourner dans le menu à chaque fois.

- -

Volume de lecture

- -

Un curseur contrôlant le volume de la voix.

- -

Vitesse de lecture

- -

Un curseur contrôlant la vitesse de lecture de la voix.

- -

Certificats relecteur Marketplace

- -

Les certificats de relecteur Marketplace sont utilisés au cours de processus de revue du Firefox Marketplace, pour permettre aux relecteurs d'installer des applications provenant d'autres sources que le Marketplace (e.g. les pages des relecteurs). Cette option permet à l'appareil d'utiliser ces certificats.

- -

Secouer pour enregistrer les journaux système

- -
-

Note: Introduit dans la version 2.2 de Firefox OS

-
- -

Active Logshake, qui attend que l'appareil fasse des mouvements de forte accélération. Lorsqu'un tel mouvement est détecté — c'est à dire lorsque vous secouez votre appareil — il sauvegarde les journaux système présents de log/logcat sur la carte SD, dans un dossier logs/<datetime>. Voir bug 1019816 pour plus de détails.

- -

Permissions d'applications détaillées

- -
-

Note: Introduit dans la version 2.1 de Firefox OS

-
- -

Cette option activée, les développeurs (ainsi que les amateurs de vie privée) peuvent modifier n'importe quelle permission donnée à une application. Le panneau "Permissions applications" dans l'application Paramètres, proposera plus de choix qu'un simple sous-ensemble compréhensible par les non-développeurs (comme géolocalisation). Par exemple, "Schedule Alarms" apparaît avec les choix Demander, Refuser et Autoriser. Notez que certaines applications peuvent ne pas supporter les changements de permissions. Si vous remarquez un comportement anormal veuillez essayer de réinitialiser les permissions, ou réinstaller l'application.

- -

Tutoriel de prise en main

- -

Ce bouton lance le programme "First-Time Use" (FTU), qui relance la procédure de configuration initiale ainsi que le tutoriel. C'est utile pour déboguer cette procédure, ou si vous souhaitez reconfigurer votre appareil depuis le début.

- -

Déverrouillage des privilèges

- -

Réinitialiser et activer les outils de développement non restreints

- -
-

Note: Introduit dans la version 2.2 de Firefox OS

-
- -

Ce bouton vous permet d'activer le mode de développement non restreint dans lequel vous pouvez déboguer et surcharger des applications système depuis le WebIDE. Pour des raisons de sécurité, activer ce mode supprime les données de l'appareil. Notez qu'une fois ce mode activé, il est hautement suggéré d'ajouter un code PIN pour déverrouiller votre appareil puisque ce mode permet facilement d'accéder aux données internes et aux applications système (informations privées, mots de passe, ...).

- -

Mises à jour logicielles

- -

Canal de mise à jour

- -

Vous permet de définir différents canaux pour recevoir les mises à jour logicielles lors de mises à jour OTA. Les canaux sont nightly, aurora, et others.

- -

Adresse de mise à jour

- -

Vous permet de définir différentes adresses (URL) desquelles recevoir vos mises à jour.

- -

Options obsolètes

- -

Ce chapitre liste les options qui ne sont plus proposées ou qui n'existent plus en l'état, mais qui peuvent être intéressantes pour ceux qui utilisent une ancienne version de Firefox OS.

- -

Accessibilité

- -

Dans les versions de Firefox OS qui précèdent la 1.4, ceci contrôle les options d'accessibilité, comme expliqué dans la section Paramètres_du_lecteur_d'écran.

- -

Grille

- -

L'option "Grille", une fois activée, ajoute au-dessus de l'affichage de Firefox OS, un motif de grille qui vous aidera à positionner et aligner des éléments. Par exemple, vous pouvez voir ci-dessous l'application navigateur fonctionnant avec l'option Grille d'activée :

- -

- -

Les lignes les plus épaisses de la grille sont séparées de 32 pixels, horizontalement et verticalement.

- -

Images par seconde

- -

Activer cette option ajoute deux indicateurs en haut de l'affichage de Firefox OS, indiquant la fréquence à laquelle l'écran est redessiné, en images par seconde.

- -

Show time to load

- -

In Firefox OS versions older than newer 1.4, enabling this displays time to load information, as explained in the Time_to_load section above.

- -

Rocketbar enabled

- -

In Firefox OS versions older than newer 1.4, this option enables the new Firefox Rocketbar on your device, which provides a useful new way to switch between apps, search, and more. When enabled, you'll find a search icon at the top left of the device, and the RocketBar can be brought up by swiping from the top left of the device towards the bottom left.

- -
-

Note: In newer versions of Firefox OS, Rocketbar is enabled automatically and cannot be turned off.

-
- -

Contacts debugging output in adb

- -

Enabling this option adds debugging information about contacts to the adb logs (error logs from the console can be accessed using adb logcat | grep "Error" in the Terminal.)

- -

Progressive paint (was Layers: Progressive paint)

- -

This was introduced to help with debugging of the Async Panning/Zoom module (APZ) during its implementation. Now APZ implementation is complete, this option is deprecated, and will be removed from future versions (see bug 1003228).

- -

Displayport Heuristics

- - - -

These options were introduced to help with debugging of the Async Panning/Zoom module (APZ) during its implementation, specifically to allow QA to experiment with different repainting heuristics to see which resulted in the least amount of checkboarding. Now APZ implementation is complete, these options are deprecated, and will be removed from future versions (see bug 1003228).

- -

Enable APZ for all content (Async Pan/Zoom)

- -

When enabled, the Async Pan/Zoom module allows panning and zooming to be performed on asynchronously, on another thread, with some noticeable differences to rendering behaviour. To find out more, read the MozillaWiki APZ article. Now APZ implementation is complete, this option is deprecated, and will be removed from future versions (see bug 1003228).

- -

Edges gesture

- -

Enabling this option allows you to swipe left and right from outside the screen towards the center, to navigate to the next and previous sheets (either web pages in the browser, or views inside another app.) This basically works like the browser navigator bar in Firefox, but is enabled by default in Firefox 2.1+.

- -

Keyboard layouts

- -

In addition to the developer-specific options listed above, Firefox OS < 1.4's developer settings featured keyboard layout options. These let you toggle on and off the then-experimental Chinese input methods:

- -

- -

As of Firefox 1.4, these options have been removed. This is because the Chinese keyboard layout implementations (zhuyin and pinyin) have now been completed.

- -
-

Note: For other keyboard layouts still under development, such as Japanese, we now have a build-time config to opt them in.

-
diff --git a/files/fr/archive/b2g_os/debugging/personnaliser_b2g.sh/index.html b/files/fr/archive/b2g_os/debugging/personnaliser_b2g.sh/index.html deleted file mode 100644 index f94c6d0a7e..0000000000 --- a/files/fr/archive/b2g_os/debugging/personnaliser_b2g.sh/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Personnaliser le script b2g.sh -slug: Archive/B2G_OS/Debugging/Personnaliser_b2g.sh -tags: - - B2G - - Déboguer - - Firefox OS -translation_of: Archive/B2G_OS/Developing_Firefox_OS/Customizing_the_b2g.sh_script ---- -

-

Brouillon
- Cette page n'est pas terminée.

- -

-

Sur téléphone, l'application b2g (qui fournit entre autres les APIs Firefox OS) est démarré à travers le script /system/bin/b2g.sh script. Vous pouvez personnaliser ce script pour changer le comportement de Firefox OS.

-

Définir les variables d'environnement

-

Si vous voulez juste définir une variable d'environnement pour un seul lancement de B2G, vous pouvez faire ceci :

-
adb shell stop b2g
-abd shell "export ENV_VAR=value && /system/bin/b2g.sh"
-
-

Si vous voulez utiliser la même variable d'environnement tout le temps, il vous faut éditer le script b2g.sh, tel que décrit dans la section suivante.

-

Éditer b2g.sh

-

Pour déboguer, vous voudrez peut-être définir des variables d'environnement pour journaliser des informations ou modifier la façon dont le programme b2g tourne. Vous pouvez le faire en éditant le script b2g.sh. Il n'y a aucun outil d'inclus sur le téléphone pour modifier ce fichier, il vous faudra d'abord le copier sur votre ordinateur.

-

Connectez le téléphone à votre ordinateur, ouvrez le Terminal, et éxecutez la commande suivante pour modifier le script :

-
adb pull /system/bin/b2g.sh
-

Modifier le script pour appliquer les changements souhaités. Par exemple, supposons que vous souhaitez voir la sortie de journalisation (ce qui nécessite une compilation de déboguage), vous pourriez rajouter quelque chose comme ceci :

-
export NSPR_LOG_FILE=/data/local/tmp/mylog.txt
-export NSPR_LOG_MODULES=Layers:5
-
-

Et maintenant pour déposer votre script b2g.sh modifié sur votre téléphone :

-
adb shell stop b2g
-adb remount
-adb push b2g.sh /system/bin
-adb shell chmod 0755 /system/bin/b2g.sh
-adb shell start b2g
-
-
-

Note : /data/local/tmp est le seul endroit dans le système de fichier accessible en écriture aux processus de contenu.

-
-

Voir aussi

- -

 

diff --git a/files/fr/archive/b2g_os/debugging/signaler_une_erreur_firefox_os/index.html b/files/fr/archive/b2g_os/debugging/signaler_une_erreur_firefox_os/index.html deleted file mode 100644 index c1ba3e50bd..0000000000 --- a/files/fr/archive/b2g_os/debugging/signaler_une_erreur_firefox_os/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Signaler une erreur de Firefox OS -slug: Archive/B2G_OS/Debugging/Signaler_une_erreur_Firefox_OS -tags: - - Firefox OS - - QA - - crash - - débogage - - rapport d'erreur - - test -translation_of: Archive/B2G_OS/Debugging/Firefox_OS_crash_reporting ---- -
-

Cette page détaille comment gérer la remontée d'erreurs sur Firefox OS, y compris la récupération des rapports d'erreurs et les plantages forcés.

-
- -
-

Note : La plupart des contributeurs de Firefox pour ordinateur se servent du tag about:crashes pour retrouver les rapports d'erreurs (lire Crash reporting pour plus de détails), mais cette méthode n'est pas supportée par Firefox OS.

-
- -

Avant de tenter de faire autre chose

- -

Les instructions suivantes supposent que vous avez déjà suivi ces trois étapes :

- -
    -
  1. Assurez-vous que le débogage à distance est autorisé sur votre appareil et que ADB est installé. Ceci autorise votre ordinateur à communiquer avec votre appareil.
  2. -
  3. Connectez votre appareil à votre ordinateur via USB.
  4. -
  5. Installez ADB Helper Add-on sur le bureau Firefox pour gérer tout transfert de port nécessaire.
  6. -
- -

Installer BusyBox

- -

Il est également recommandé que vous installiez notre service BusyBox qui ajoute un grand nombre de commandes utiles à ADB pour aider à tester et déboguer Firefox OS.

- -

Pour l'installer, assurez-vous que l'appareil est en marche puis :

- -
    -
  1. Téléchargez BusyBox ;
  2. -
  3. Dézippez l'archive à un endroit précis ;
  4. -
  5. cd dans le dossier busybox-b2g extrait ;
  6. -
  7. Exécutez ./install.sh pour l'installer.
  8. -
- -

Tous les services busybox ont des liens symboliques en /system/bin, ce qui fait que vous pouvez exécuter des commandes comme ping directement. Voici quelques exemples de commandes :

- -
adb shell ping 8.8.8.8   => ping command
-
-adb shell ifconfig wlan0 => check tx/rx bytes
-
-adb shell cat /proc/net/route    => check the default route
-
-adb shell iptables -t nat -nvL   => check if the packets are sent from application to IP layer, check Chain OUTPUT (policy ACCEPT 2 packets, 168 bytes)
- -

Obtenir des rapports d'erreurs depuis un appareil sous Firefox OS

- -

Nous avons créé une application Firefox OS pour nous permettre de récupérer des rapports d'erreurs — About Crashes — qui fonctionne sur les versions 1.2+.
-
- Pour l'installer sur votre appareil, suivez les étapes ci-dessous.

- -
    -
  1. About Crashes est une application certifiée, vous devez donc autoriser le débogage des applications certifiées (voir les instructions de App Manager, et WebIDE).
  2. -
  3. Téléchargez le fichier zip About Crashes depuis le lien ci-dessus et l'extraire le fichier en local.
  4. -
  5. Dans le bureau Firefox, ouvrez App Manager ou WebIDE (en fonction de la version de Firefox que vous utilisez) sous Outils > Développeur Web.
  6. -
  7. Dans un des outils, ajoutez l'application About Crashes comme une application packagée (App Manager : cliquez sur le plus à côté de l'option Add Packaged App, WebIDE: ouvrez le menu déroulant de gauche et sélectionnez Add Packaged App...).
  8. -
  9. Connectez votre appareil à App Manager/WebIDE (App Manager: vous le trouverez listé au bas de l'interface utilisateur, WebIDE: vous le trouverez sous Select Runtime).
  10. -
  11. Installez et ouvrez l'application sur l'appareil (App Manager: pressez le bouton Update, WebIDE: pressez le bouton "Play" (Install and Run)).
  12. -
  13. Sur l'appareil, pressez le bouton Update dans About Crashes pour voir vos erreurs les plus récentes.
  14. -
- -

Obtenir des IDs d'erreurs depuis la ligne de commande

- -

Vous pouvez obtenir une liste d'IDs d'erreurs via la ligne de commande en saisissant la commande suivante dans votre terminal :

- -
adb shell ls -l /data/b2g/mozilla/Crash\ Reports/submitted/
- -

Si vous avez une longue liste d'erreurs et que vous voulez les trier par date, utilisez cette commande-ci :

- -
adb shell busybox ls -ltr /data/b2g/mozilla/Crash\ Reports/submitted/
- -

Obtenir/Vérifier le rapport d'erreur

- -

Pour vérifier un rapport d'erreur:

- -
    -
  1. Copiez le nom de fichier sans l'extension.
  2. -
  3. Allez sur Mozilla Crash Reports.
  4. -
  5. Collez le nom de fichier sans l'extension dans la barre de recherche dans le coin en haut à droite.
  6. -
- -

Cela devrait afficher le rapport d'erreurs que vous avez soumis.

- -

Comment forcer un plantage

- -

Pour déclencher un plantage du système Firefox OS, saisissez la commande suivante dans votre terminal pour trouver l'ID du processus source :

- -
adb shell ps | grep b2g
- -

Vous allez devoir trouver la ligne qui commence par root, et qui finit par /system/b2g/b2g. Elle devrait ressembler à ceci :

- -
root 109 1 191120 66024 ffffffff 400fa330 S /system/b2g/b2g
- -

Le nombre au début de la ligne est l'ID du processus kill que vous devrez utiliser pour killer ce processus. Exécutez la commande suivante, en remplaçant l'espace de texte réservé par l'ID :

- -
adb shell kill -11 [ENTER ID HERE]
- -

Killer le processus root plantera votre l'appareil.

- -

Comment exécuter le script GDB pour b2g

- -
    -
  1. Démarrez l'application Galerie sur le téléphone, puis exécutez la commande suivante dans votre terminal : -
    adb shell b2g-ps
    -
  2. -
  3. Notez le pid de l'application Galerie, puis exécutez la commande suivante : -
    ./run-gdb.sh attach <pid>
    -
  4. -
  5. Provoquez le plantage.
  6. -
  7. Exécutez cette commande : -
    (gdb) bt
    -
  8. -
diff --git "a/files/fr/archive/b2g_os/debugging/\303\251tapes_pr\303\251paratoires/index.html" "b/files/fr/archive/b2g_os/debugging/\303\251tapes_pr\303\251paratoires/index.html" deleted file mode 100644 index ac45ab39eb..0000000000 --- "a/files/fr/archive/b2g_os/debugging/\303\251tapes_pr\303\251paratoires/index.html" +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: >- - Préparations pour déboguer sur Firefox OS avec les outils pour Développeur Web - de Firefox -slug: Archive/B2G_OS/Debugging/Étapes_préparatoires -tags: - - B2G - - Déboguer - - Firefox OS -translation_of: Archive/B2G_OS/Debugging/Setting_up ---- -

Firefox OS supporte le même protocole de débogage à distance que Firefox pour Android. Ceci veut dire que vous pouvez utiliser les outils de développement web de Firefox pour déboguer les applications Gaia lancées sur un appareil ou un émulateur Firefox OS. Afin de déboguer Firefox OS, sur votre appareil ou dans le simulateur, vous devez utiliser Firefox 18 ou plus récent. De plus, vous devrez modifier des paramètres du navigateur Firefox de votre ordinateur, ainsi que sur Firefox OS.

- -
-

Note: Pour déboguer des applications sur un appareil Firefox OS, si c'est sur la version Firefox OS 1.2 ou postérieur, le meilleur choix est d'utiliser WebIDE.

-
- -

Firefox pour ordinateur

- -

Vous devez être sûr d'utiliser Firefox 18 ou plus récent afin d'avoir le support du débogage distant. Si vous n'avez pas déjà une copie récente de Firefox, téléchargez la dernière version stable, ou récupérez la version Nightly encore plus récente.

- -

Une fois que vous avez la bonne version de Firefox sur votre ordinateur, tapez about:config dans la barre d'URL et changez la valeur de devtools.debugger.remote-enabled à true. Vous devrez redémarrer Firefox pour que le débogage distant soit activé. Vous aurez alors une nouvelle option dans le menu Développement > Se connecter...

- -

Activer le débogage

- -

Si vous utilisez le simulateur Firefox OS, l'activation du débogage est plutôt facile. Vous n'avez pas besoin de faire de redirection de port comme avec un appareil physique. Ouvrez simplement les paramètres pour développeurs et activez l'option Débogage USB.

- -
-

Note : Ceci ne fonctionne plus à la date du 10 janvier 2013, car les builds pour appareils de Firefox OS ont le débogage désactivé. Il y aura éventuellement un moyen de compiler votre propre build avec le débogage réactivé, mais cela n'existe pas encore. Ce document sera mis à jour une fois que ce sera possible. De plus, le paramètre pour désactiver le support out-of-process a été supprimé. Pour l'instant, vous devrez utiliser le simulateur Firefox OS pour déboguer.

-
- -

Sur votre appareil Firefox OS physique, ouvrez les paramètres pour développeurs, et :

- - - -
-

Rappel : Si vous flashez votre appareil, vous devrez reproduire ces modifications.

-
- -

Vous pouvez maintenant utiliser le débogueur !

- -

Activer la console sur un appareil Firefox OS

- -

Les builds de production de Firefox ont la journalisation dans la console (tel que console.log()) désactivée par défaut. Pour la rétablir, ouvrez les paramètres pour développeurs et sélectionnez Console activée.

- -
-

Note: Voir Journalisation console sur appareil pour obtenir plus de détails concernant l'utilisation de la journalisation console sur Firefox OS.

-
- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/depannage/index.html b/files/fr/archive/b2g_os/depannage/index.html deleted file mode 100644 index 1105fd7fe5..0000000000 --- a/files/fr/archive/b2g_os/depannage/index.html +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Dépannage de Firefox OS -slug: Archive/B2G_OS/depannage -tags: - - B2G - - Firefox OS - - Mobile -translation_of: Archive/B2G_OS/Troubleshooting ---- -
-

Cet article offre des astuces pour résoudre des problèmes courants pouvant survenir lors de l'utilisation de Firefox OS. N'hésitez pas à compléter cette page !

-
- -

Problème de réseau

- -

Si vous avez des difficultés à vous connecter aux réseaux Wi-Fi, il peut être utile de supprimer le fichier de configuration Wi-Fi de l'appareil. Vous pouvez le faire de cette façon :

- -
adb shell rm /data/misc/wifi/wpa_supplicant.conf
-adb reboot
-
- -
-

Note : Ces instructions partent du principe que vous avez configuré le paramètre udev pour l'appareil.

-
- -

Téléphone briqué

- -

Si vous avez briqué votre téléphone, par exemple en essayant de le flasher avec de mauvaises images, essayez de redémarrer sur le bootloader (fastboot ou heimdal en fonction de votre téléphone). La séquence exacte dépend du téléphone. Retirez le câble USB. Retirez la batterie. Réinsérez la batterie. Pour Unagi et Otoro, appuyez et maintenez le bouton d'augmentation du volume ainsi que le bouton d'alimentation pendant plusieurs secondes jusqu'à voir l'écran de chargement. Vérifiez que le téléphone est dans le mode bootloader en utilisant fastboot devices (ou heimdall devices sur certains téléphones Samsung). Une fois que vous pouvez voir le téléphone en utilisant fastboot devices, positionnez-vous dans le dossier contenant une image de base, ou les fichiers fournis par le fabriquant du téléphone (pour certains téléphones). 

- -

Vous avez deux options pour flasher :

- - - -
fastboot flash boot boot.img
-fastboot flash userdata userdata.img
-fastboot flash system system.img
-fastboot flash recovery recovery.img
-fastboot erase cache
-fastboot reboot
- -

LED rouge clignotante (otoro/unagi)

- -

Ceci veut dire que la batterie est trop faible pour démarrer l'appareil. Vous pouvez la laisser se charger pendant un moment (jusqu'à ce que la LED rouge arrête de clignoter, et un petit peu plus longtemps), ou vous pouvez débrancher le câble USB, retirer la batterie, insérer le câble USB, et réinsérer la batterie.

- -

Impossibilité de recevoir un SMS avec une carte SIM utilisée précédemment dans un iPhone

- -

Si vous faites passer votre carte SIM d'un iPhone à un téléphone Firefox OS (ou une autre plateforme), il ce peut que vous ne puissiez plus recevoir de SMS d'utilisateurs d'iPhone. La raison est que les SMS entre iPhone sont envoyés en utilisant iMessage, qui fait passer les messages par les serveurs d'Apple au lieu de les envoyer comme de véritables SMS, dans le but de faire faire des économies aux utilisateurs. Malheureusement, lorsque vous quitter l'iPhone, iMessage ne peut pas le savoir donc les message en provenance d'autres utilisateurs d'iPhone seront toujours envoyés avec iMessage, ce qui veut dire que vous ne pourrez pas les recevoir.

- -

Pour rectifier ce comportement, vous devez désactiver iMessage pour votre SIM. Pour savoir comment faire, veuillez lire le guide sur imore.com: Here's how to turn off iMessage.

- -

Appareil invisible pour ADB sur OSX

- -

Lorsque vous exécutez adb devices sur OSX, certains appareils peuvent ne pas apparaitre pas dans la liste, pour pleins de bonnes raisons. Ceci peut s'arranger en ajoutant le vendor ID de votre appareil au fichier ~/.android/adb_usb.ini , pour aider ADB à le voir.

- -
-

Note: Voir ce post stackoverflow pour obtenir tous les détails, notamment comment trouver le vendor ID de votre appareil, et comment l'ajouter au fichier adb_usb.ini.

-
diff --git a/files/fr/archive/b2g_os/developer_preview_phone/index.html b/files/fr/archive/b2g_os/developer_preview_phone/index.html deleted file mode 100644 index 83cc058f30..0000000000 --- a/files/fr/archive/b2g_os/developer_preview_phone/index.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Mise à jour d'un téléphone développeur -slug: Archive/B2G_OS/Developer_preview_phone -translation_of: Archive/B2G_OS/Phone_guide ---- -
-

Note: Un nouveau guide, plus détaillé, pour mettre à jour les téléphones développeurs — dont le Geeksphone — est disponible. Pour le lire allez sur Mise à jour de votre Geeksphone/téléphone développeur Firefox OS.

-
- -

Si vous avez un téléphone développeur de Geeksphone et que vous souhaitez le mettre à jour, suivez les étapes suivantes. Ces instructions ne concernent que les modèles Geeksphone Keon et Peak.

- -
    -
  1. Assurez-vous d'avoir au moins 50% de batterie restante. C'est important car si votre téléphone s'éteint pendant la mise à jour, vous pourriez devoir le renvoyer.
  2. -
  3. Le téléphone n'étant pas connecté en USB, sélectionnez Paramètres, Informations sur l'appareil, Plus d'informations, Développeurs puis cochez Débogage distant.
  4. -
  5. Téléchargez le pilote USB et décompressez-le. Notez où vous l'avez enregistré car vous en aurez besoin plus tard.
  6. -
  7. Utilisez un câble USB pour le brancher sur votre ordinateur. Si vous utilisez Windows, le système peut vous demander d'installer des pilotes. Si Windows Update ne les trouve pas, vous pourrez indiquer le dossier que vous avez décompressé à l'étape 3.
  8. -
  9. Téléchargez le fichier de l'image appropriée à votre téléphone (Keon ou Peak). Toutes les images se trouvent sur la page de téléchargement de Geeksphone.
  10. -
  11. Décompressez le fichier image dans un dossier, entrez dans ce dossier et exécutez le script. Flash.sh est destiné à Linux, Flash.bat à Windows et flash_mac.sh à Machintosh (le SDK Android est nécessaire).
  12. -
  13. Attendez que l'appareil redémarre et affiche l'assistant de premier démarrage.
  14. -
- -


- En cas de problème, vous pouvez obtenir de l'aide en postant sur les forums Geeksphone.

diff --git a/files/fr/archive/b2g_os/developing_firefox_os/index.html b/files/fr/archive/b2g_os/developing_firefox_os/index.html deleted file mode 100644 index df620c1a09..0000000000 --- a/files/fr/archive/b2g_os/developing_firefox_os/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Développer Firefox OS -slug: Archive/B2G_OS/Developing_Firefox_OS -tags: - - B2G - - Développer - - Firefox OS - - TopicStub -translation_of: Archive/B2G_OS/Developing_Firefox_OS ---- -
-

Cette section fournit une documentation utile couvrant différentes façons de modifier/améliorer l'expérience Firefox OS (nom de code Boot2Gecko ou B2G) pendant le processus de build, ainsi que la façon dont vous pouvez aider à développer des parties de la plateforme bas niveau telles que Gecko et Gonk.

-
-
-

Note : Si vous êtes intéressés spécifiquement par le développement de Gaia, l'interface de Firefox OS, vous devriez plutôt consulter nos pages Développer pour Gaia.

-
-

Notes de contribution générales

-

Gecko étant partie intégrante du navigateur Firefox, contribuer à des parties de Gecko relatives à Firefox OS est similaire à contribuer à Gecko de manière générale ; il en est de même pour Gonk. Pour cela, vous avez besoin de vous familiariser avec la communauté, d'apprendre le fonctionnement de l'arborescence du code, et de trouver des bugs sur lesquels travailler. La page Contribuer à Mozilla est un bon endroit pour se familiariser avec le processus de contribution.

-

Vous devriez en apprendre plus sur Gecko, comment il fonctionne et comment il est structuré. La page MDN sur Gecko y rassemble des notes utiles, de même que la page Gecko:Overview sur le Wiki Mozilla. Pour plus d'informations sur les API (spécifiques à Firefox OS), la page WebAPI du Wiki Mozilla donne un aperçu travail, et la page WebAPI du MDN rassemble les documentation de toutes les API.

-

Ensuite, regardez Gonk, le kernel sur lequel s'appuie Firefox OS. Pour faire simple, Gonk est une autre cible de portage pour Gecko, comme c'est le cas avec les versions de bureau de Firefox sur Mac OS X, Windows et Linux. Gonk en lui-même n'est qu'une version minimaliste du Android Open Source Project — nous essayons autant que possible de ne pas changer Gonk lui-même puisque nous n'avons pas le contrôle du code source, et que les partenaires avec lesquels nous travaillons pour créer les appareils Firefox OS fournissent générallement un code spéfique à leurs appareils pour faire l'interface entre l'appareil et Gecko/Gonk.

-

Cependant, il y a encore du travail à réaliser avec les API. La plupart du code Gecko spécifique Gonk utilise #ifdef MOZ_WIDGET_GONK pour ne l'activer que dans Firefox OS, et/ou est contenu dans les sous-répertoires gonk tels que gecko-dev/hal/gonk. Essayez de cloner localement le dépôt gecko-dev et d'y jeter un œil. Notre article Mozilla Source Code Directory Structure est aussi très utile.

-

Ensuite, vous devriez apprendre l'Architecture de Firefox OS, comment Compiler Firefox OS (commencez avec le Résumé du processus de compilation de Firefox OS), et comment Porter Firefox OS sur d'autres appareils.

-

Firefox OS est développé en une série de Modules séparés : regardez la page Firefox OS Modules pour vous donner une idée sur la façon dont le code est regroupé, vérifiez qui est le propriétaire du module pour savoir à qui vous adresser si vous avez besoin d'aide.

-
-

Note : Pour trouver de l'aide, les meilleurs endroits pour commencer sont la mailing list dev-b2g et l'espace de chat #b2g sur l'IRC Mozilla.

-
-

Sujets spécifiques de développement de Firefox OS

-
-
- Rapporter de bugs à propos de Firefox OS
-
- Cet article fournit un guide permettant de renseigner des bug sur l'ensemble des aspects de Firefox OS.
-
- Modifier le fichier hosts
-
- Un guide sur ce qui peut être accompli en modifiant le fichier hosts.
-
- Customisation avec le fichier .userconfig
-
- Comment customiser la construction et l'exécution de Firefox OS en changeant le fichier .userconfig.
-
- Personnaliser le script b2g.sh
-
- Une explication sur ce qui peut être accompli en personnalisant le script b2g.sh, qui fait fonctionner l'application b2g et contrôle différents aspects du système.
-
- Porter Firefox OS
-
- Information sur la façon de porter Firefox OS sur de nouveaux appareils.
-
diff --git a/files/fr/archive/b2g_os/developing_firefox_os/personnalisation_des_dns/index.html b/files/fr/archive/b2g_os/developing_firefox_os/personnalisation_des_dns/index.html deleted file mode 100644 index b3cc818730..0000000000 --- a/files/fr/archive/b2g_os/developing_firefox_os/personnalisation_des_dns/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Personnalisation des DNS -slug: Archive/B2G_OS/Developing_Firefox_OS/Personnalisation_des_DNS -tags: - - DNS - - Firefox OS -translation_of: Archive/B2G_OS/Developing_Firefox_OS/Customizing_DNS ---- -

Cet article décrit une brève procédure pour modifier les serveurs DNS de toutes les interfaces (wifi, cellulaire, etc.) d'un appareil Firefox OS.

- -

Préparation de votre environnement

- -
    -
  1. Sur votre téléphone, allez dans les Paramètres Développeurs et activer les réglages suivants : - -
      -
    • Débogage distant (dans Firefox OS 1.4 et au-delà, sélectionnez ADB et outils de développement dans le menu déroulant.)
    • -
    • Activer la console
    • -
    -
  2. -
  3. Assurez-vous d'avoir ADB/Fastboot installés sur votre ordinateur.
  4. -
  5. Une fois ces étapes terminées, branchez votre téléphone sur votre ordinateur via l'USB.
  6. -
- -

Étapes pour actualiser les DNS

- -
    -
  1. Ouvrez une fenêtre de terminal.
  2. -
  3. Récupérez le fichier de configuration DNS sur votre ordinateur avec la commande ci-dessous : -
    adb pull /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf 20-dns.conf
    -
  4. -
  5. Recherchez les lignes 22 à 26 dans le fichier : -
        count=1
    -    for dnsaddr in ${new_domain_name_servers}; do
    -        setprop dhcp.${intf}.dns${count} ${dnsaddr}
    -        count=$(($count + 1))
    -    done
    -
  6. -
  7. Dans cette section, remplacez la ligne setprop par des lignes selon ce modèle (vous pouvez spécifier jusqu'à 4 serveurs DNS) : -
        setprop dhcp.${intf}.dns1 <adresse ip du serveur DNS 1>
    -    setprop dhcp.${intf}.dns2 <adresse ip du serveur DNS 2>
    -    setprop dhcp.${intf}.dns3 <adresse ip du serveur DNS 3>
    -    setprop dhcp.${intf}.dns4 <adresse ip du serveur DNS 4>
    -
    -
  8. -
  9. Remontez la partition /system sur l'appareil pour obtenir des permissions en lecture-écriture, de cette manière : -
    adb remount
    -
  10. -
  11. Juste au cas où, faites une sauvegarde du fichier original : -
    adb shell mv /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf /system/etc/dhcpcd/dhcpcd-hooks/20-dns.bak.conf
    -
  12. -
  13. Envoyez le fichier édité et appliquez-lui les permissions correctes, comme ceci : -
    adb push 20-dns.conf /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
    -adb shell chmod 644 /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
    -
  14. -
  15. Redémarrez l'appareil et vos paramètres de serveurs DNS seront actualisés.
  16. -
- -

Voir aussi

- -
- -
diff --git a/files/fr/archive/b2g_os/developing_firefox_os/quickstart_guide_to_b2g_development/index.html b/files/fr/archive/b2g_os/developing_firefox_os/quickstart_guide_to_b2g_development/index.html deleted file mode 100644 index b8ad159b13..0000000000 --- a/files/fr/archive/b2g_os/developing_firefox_os/quickstart_guide_to_b2g_development/index.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Guide de démarrage rapide pour le développement B2G -slug: Archive/B2G_OS/Developing_Firefox_OS/Quickstart_guide_to_B2G_development -tags: - - NeedsContent - - NeedsMarkupWork -translation_of: Archive/B2G_OS/Developing_Firefox_OS ---- -

-

Brouillon
- Cette page n'est pas terminée.

- -

- -

À déterminer

- -

Éléments à aborder :

- -
         * Travail dans l'espace de travail
- -
         * dépôt dans l'espace de travail
- -
         * git dans les répertoires de travail
- -
         * liens dans des répertoires de travail séparés
- -
         * Comment contribuer : Gaia, Gecko/Gonk, Gonk, Docs, liens vers les bogues sur lesquels travailler
- -
 
- -
Liens également souhaités vers
- -
 
- -
Traitement des bogues (comment les différentes équipes oeuvrent ensemble pour travailler sur Bugzilla)
- -
Travailler sur les bogues de Firefox OS [en-US]
- -
Travailler sur les bogues de Firefox OS [fr]
- -

 

diff --git a/files/fr/archive/b2g_os/developing_firefox_os/rapporter_bug_firefox_os/index.html b/files/fr/archive/b2g_os/developing_firefox_os/rapporter_bug_firefox_os/index.html deleted file mode 100644 index 35080199fc..0000000000 --- a/files/fr/archive/b2g_os/developing_firefox_os/rapporter_bug_firefox_os/index.html +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: Rapporter des bugs à propos de Firefox OS -slug: Archive/B2G_OS/Developing_Firefox_OS/Rapporter_Bug_Firefox_OS -tags: - - Bugs - - Bugzilla - - Firefox OS - - Guide - - QA - - filing - - test -translation_of: Archive/B2G_OS/Developing_Firefox_OS/Filing_bugs_against_Firefox_OS ---- -
-

Cet article est un guide pour aider à rapporter des bugs à propos du projet Firefox OS, incluant Gaia et B2G.

-
- -

Bugzilla

- -

Comme pour la plupart des projets Mozilla, nous utilisons Bugzilla pour le suivi des bugs et des problèmes. Vous pouvez remplir un bug sur Bugzilla quand vous en trouvez un — nous avons un produit distinct pour Firefox OS, qui contient les composants pour tout ce qui concerne Gaia, Gonk et Gecko. Utilisez ce composant pour remplir les bugs concernant Firefox OS, Gaia, etc.

- -
-

Note : La page B2G QA Wiki (ressource anglophone) contient également quelques ressources utiles pour la gestion des bugs Firefox OS ; les pages les plus utiles sont Bugzilla Usage (EN) et Incoming bug triage for Firefox OS (EN).

-
- -

Remplir des bugs

- -

Pour remplir un bug valide, vous pouvez suivre les recommandations pour l'écriture d'un bug  (voir aussi Rapporter un bug sur le blog technique mozfr).
- Vous pouvez également utiliser ce modèle sur Bugzilla et vous référer aux instructions ci-dessous pour compléter le bug.

- -

Champs obligatoires et optionnels

- -

Quand vous remplissez un nouveau bug, certains champs sont obligatoires :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ChampDescription
ComponentChoisissez la catégorie à laquelle le bug devrait être rattaché. Si vous n'avez aucune idée de la catégorie dans laquelle devrait se trouver le problème, vous pouvez mettre "General".
SummaryIndiquez une brève description du bug.
DescriptionDécrivez clairement la situation. Un bon bug doit contenir les étapes de reproduction (STR — Steps to reproduce), le résultat attendu (Expected Result), et le résultat actuel (Actual Result). Mentionnez également la fréquence de reproduction (Reproduction Frequency), c'est-à-dire le nombre de fois que le bug se manifeste si vous répétez les étapes indéfiniment.
Build InformationRendez vous dans Paramètres > Informations > Plus d'informations et rajouter les informations suivantes au bug: Version du système, Numéro de compilation, Version de la plate-forme, Identifiant de version, Canal de mise à jour et Informations Git. (Si vous êtes sur un ordinateur de type Mac/Linux, avec adb et git installés, vous pouvez lancer ce script et coller la sortie écran du script dans le bug.)
ScreenshotsVeuillez attacher une capture d'écran qui pourra aider à analyser le bug. (Sur le téléphone de développement Flame, maintenir appuyés les boutons d'Allumage et de Volume bas simultanément à peu près 2 secondes jusqu’à ce que le téléphone affiche une notification de capture d'écran. Ensuite transférez l'image sur votre ordinateur en utilisant l'USB.)
VideoSi votre bug contient des changements à l'écran, difficilement captables via une capture d'écran, veuillez filmer une vidéo. Vous pouvez transférer le fichier en attachement du bug. Vous pouvez aussi transférer la vidéo sur YouTube et copier/coller le lien dans le bug.
ADB logsSi adb est installé sur votre ordinateur, veuillez le connecter au téléphone et lancer la commande : -
-adb logcat
- Veuillez joindre la sortie d'écran de cette commande dans un fichier de type texte et le joindre au bug.
- -

Les champs suivants sont optionnels :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ChampDescription
Depends/BlockMontre la dépendance entre les bugs.
KeywordsMots-clés pour bugzilla. Les groupes spécifiques vont l'utiliser pour le suivi.
WhiteboardContient les tags. Ajoutez n'importe quel tag pour le suivi. Vous ne devriez pas supprimer les tags dans autres sans autorisation.
See AlsoDe temps en temps, deux problèmes sont liés et vous pouvez le spécifier ici.
FlagsFlags pour tracker les statuts ; le flag le plus utilisé dans les bugs Firefox OS est blocking-b2g. Si un bug est flaggé en tant que "blocking-b2g", cela signifie que nous devrions y consacrer plus d'attention car celui-ci menace de bloquer la sortie.
SecuritySi un bug est relatif à la sécurité des données personnelles, à des pertes de profits et d'autres problèmes de ce genre, vous devriez cocher la case. Ainsi, cela ne sera visible que par les employés concernés.
- -

Pour trouver plus d'informations sur les champs de bugzilla, vous pouvez regarder la page Bugzilla Fields (EN) sur Bugzilla.

- -

Ouvrir des bugs de traduction

- -

Lorsque vous rencontrez une phrase non traduite, cela peut vouloir dire deux choses :

- - - -

Comment déterminer les bugs de traduction automatique (l12y)

- -
    -
  1. Dans Firefox OS, allez dans Paramètres > Informations > Plus d'informations et activez le Menu développeurs.
  2. -
  3. Allez dans Paramètres > Développeurs et cochez Pseudo-localization.
  4. -
  5. Allez dans Paramètres > Langue et défilez vers le bas pour choisir anglais accentué.
  6. -
  7. Regardez de nouveau la phrase non traduite. Si celle-ci apparaît en anglais normal et non en anglais accentué, il paraît plus probable que cela soit causé par un problème de traduction automatique (l12y).
  8. -
  9. Dans Bugzilla, ouvrez un bug pour le produit (product) 'Firefox OS'. Choisissez le composant (Component) pour lequel la phrase non traduite apparaît. Ajoutez 'l12y' dans le champ Mots-clés (Keyword).
  10. -
  11. Veuillez remplir tous les champs obligatoires.
  12. -
- -

Mots-clés fréquemment utilisés

- -

Le tableau qui suit décrit les différents mot-clés que vous pourrez trouver pour les bugs Firefox OS.

- -

Vous devez toujours indiquer, les Versions/Systèmes/Plate-forme(s) utilisés pour vérifier le bug, dans les commentaires du bug, avant de changer le Status à Verified. Si les bug est ouvert pour plusieurs plate-formes, et que vous n'avez qu'une plate-forme pour le tester, faites le test, nottez dans le bug, mais ne changez surtout pas le Status à Verified. Toutes les plate-formes doivent être testées avant de changer le Status à Verified.

- -

Enfin, si d'autres bugs sont marqués comme doublon (duplicate) du bug que vous vérifiez, assurez vous de les tester et de le mentionner aussi. Souvent des développeurs signalent comme doublon, des bugs qui sont similaires mais pas identiques, et ceux-ci peuvent être oubliés si non testés.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mot-cléDescription
metaIndique que ce bug est un bug de suivi. Mozilla utilise cette étiquette pour suivre plusieurs bugs ou les différentes implémentations nécessaires à un scénario d'utilisation. Les développeurs ne sont pas censés apporter de correctifs pour ce type de bug (mais pour les bugs qui le composent). Il faut garder à l'esprit que ces meta-bugs sont utilisés par les chefs de projets et les équipes de qualité pour le suivi.
qablockerUtilisé pour des bugs qui bloquent la possibilité de faire des tests (manuels ou automatiques) et qui doivent être corrigés pour la prochaine Beta ou version.
qawantedUtilisé pour des bugs pour lesquels on souhaite avoir plus d'informations, pouvoir les reproduire, identifier le scénario, ou indiquer qu'ils sont dupliqués (au cas où on n'a pas trouvé le bug original). Le champ whiteboard contient une étiquette pour le progrès de l'équipe qualité sur ce point. Le mot-clé qawanted doit être retiré une fois ce travail terminé.
regressionIndique que le problème avait été réglé précédemment mais est survenu à nouveau (une régression logicielle). Le bug en question étant un nouveau bug permettant d'indiquer qu'il y a eu une régresion. Ce type de bug peut également faire référence aux problèmes non-identifiés dans les vérifications et dans les smoke tests, qui se produisent dans les versions compilées actuelles mais qui ne se produisaient pas avant. Suivre ces bugs permet d'identifier les points qui sont fragiles et dont les tests devraient être améliorés/augmentés.
regressionwindow-wantedIndique que le bug est une régression et qu'il serait utile de connaître à partir de quand (et éventuellement jusqu'à quand) le bug s'est produit. Cela permet d'aider à identifier le code qui a pu introduire la régression.
steps-wantedIndique un bug pour lequel les étapes de reproduction n'ont pas été suffisamment détaillées ou expliquées. On souhaite que quelqu'un identifie précisément les étapes pour reproduire le bug.
verifymeSignifie que ce bug peut être vérifié avec la dernière version de B2G par quelqu'un d'autre que la personne de l'équipe qualité indiquée. Ce bug nécessite une configuration matérielle spécifique, indiquée pour vérifier la correction. Il faut alors tenter de reproduire le bug, si la résolution est effective (Fixed est correct), il faut marquer le Status à Verified.
-
- Dans les commentaires du bug et avant de changer le statut à Verified, veillez à toujours indiquer la version (build), le système d'exploitation et la plate-forme utilisés pour vérifier le bug. Si le bug est indiqué sur trois plates-formes et qu'il en reste une à vérifier, vous pouvez ajouter un commentaire dans le bug avec ces informations mais pas le marquer comme vérifié. Toutes les plates-formes doivent être testées avant de passer le statut d'un bug à Verified.
-
- Enfin, si d'autres bugs ont été identifiés comme des duplicata du bug que vous vérifiez, assurez vous également de vérifier ces bugs et de les commenter. Souvent, des développeurs indiquent des bugs liés (mais pas identiques) comme duplicatas, ce qui fait que ces derniers sont parfois sous-estimés pour la vérification.
crashAjouté ce mot-clé si vous rencontrez un crash dans Firefox OS.
- -
-

Note : Pour plus d'informations sur la gestion des bugs lors du développement de Gaia, lire la page soumettre un correctif (patch) pour Gaia.

-
- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/developing_gaia/apporter_modifications_gaia/index.html b/files/fr/archive/b2g_os/developing_gaia/apporter_modifications_gaia/index.html deleted file mode 100644 index a144a068de..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/apporter_modifications_gaia/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Apporter des modifications au code de Gaia -slug: Archive/B2G_OS/Developing_Gaia/Apporter_modifications_Gaia -tags: - - B2G - - Contributing - - Firefox OS - - Gaia - - GitHub - - Guide - - code changes -translation_of: Archive/B2G_OS/Developing_Gaia/Making_Gaia_code_changes ---- -
-

Maintenant que vous pouvez lancer Gaia dans Firefox et que vous connaissez certains éléments sur le fonctionnement du code, vous devriez pouvoir commencer à contribuer au projet. Cet article décrit comment apporter des modifications et où trouver des bugs sur lesquels travailler.

-
- -

Bonnes pratiques Git

- -
    -
  1. Quand vous apportez des modifications au code de Gaia, la première chose à faire est de se mettre à jour par rapport à la branche master du dépôt original (remote upstream) : - -
    cd chemin/dossier/gaia
    -git checkout master
    -git pull upstream master
    -
  2. -
  3. Maintenant, allez sur une nouvelle branche en faisant un « checkout », c'est sur cette branche que vous apporterez vos corrections : -
    git checkout -b mon-correctif
    -
  4. -
  5. Enfin, allez dans votre répertoire gaia/apps et éditez les fichiers des applications.
  6. -
- -

Exemple de modification simple du code

- -

Pour voir les effets de vos modifications :

- -
    -
  1. Réalisez vos changements souhaités dans le code de Gaia, et sauvegardez les.
  2. -
  3. Arrêtez Firefox ou le simulateur lancé dans WebIDE.
  4. -
  5. Reconstruisez le profil Gaia avec la commande make.
  6. -
  7. Démarrez Firefox ou le simulateur lancé dans WebIDE.
  8. -
- -

Voyons cela en réalisant un simple changement de couleur de texte, de l'horloge dans l'écran de verrouillage :

- -

Gaia lockscreen showing the clock display in white text

- -
    -
  1. Une des meilleures méthodes pour trouver comment le style est défini est d'utiliser les outils de développement. Effectuez un « Ctrl droit + clic » sur l'horloge dans Firefox (pour ordinateur) puis sélectionnez Examiner l'élément dans le menu contextuel.
  2. -
  3. Vous pouvez alors déterminer quel fichier CSS est utilisé et doit être édité. Pour cet exemple, il s'agit de gaia/apps/system/lockscreen/style/lockscreen.css. Il suffit d'éditer les styles CSS dans la partie droite de l'affichage pour obtenir l'effet souhaité.
  4. -
  5. Une fois que vous êtes satisfait-e du résultat, vous pouvez directement éditer le fichier puis le sauvegarder.
  6. -
  7. Ensuite, rafraîchissez l'onglet (ou utiliser le bouton de réactualisation), le serveur HTTP servira instantanément les changements :
  8. -
- -

Gaia lockscreen showing the clock display modified from white to red text
-
-
- Les limitations de la simulation dans Firefox pour lancer Gaia :

- - - -

Où trouver des bugs à corriger

- -

La meilleure façon de trouver des bugs Firefox OS sur lesquels travailler est de consulter l'application de Josh Matthews : Bugs Ahoy. Cette application cherche directement parmi les bugs de la plate-forme Bugzilla de Mozilla et les affiche de façon simple et organisée. Une fois que vous avez identifié un bug sur lequel vous voulez travailler, rendez-vous sur la page Bugzilla pour ce bug (créez un compte si ce n'est pas déjà fait) puis assignez-vous pour le bug dans le champ « assigned to ». Une fois que c'est fait, vous pouvez commencer à travailler avec les outils vus ci-avant.

- -

Aide et astuces

- - - -

https://bugzilla.mozilla.org/buglist.cgi?columnlist=product%2Ccf_blocking_b2g%2Cbug_status%2Cresolution%2Cshort_desc&resolution=---&query_based_on=CLOCK&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&component=Gaia%3A%3AClock&product=Boot2Gecko&known_name=CLOCK&list_id=9776392

- -

Voir aussi

- - diff --git "a/files/fr/archive/b2g_os/developing_gaia/bases_syst\303\250me_construction_gaia/index.html" "b/files/fr/archive/b2g_os/developing_gaia/bases_syst\303\250me_construction_gaia/index.html" deleted file mode 100644 index 259c0a7747..0000000000 --- "a/files/fr/archive/b2g_os/developing_gaia/bases_syst\303\250me_construction_gaia/index.html" +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: Éléments de base sur le système de construction de Gaia -slug: Archive/B2G_OS/Developing_Gaia/Bases_système_construction_Gaia -tags: - - Build documentation - - Building - - Firefox OS - - Gaia - - Guide -translation_of: Archive/B2G_OS/Developing_Gaia/Build_System_Primer ---- -
-

Cet article illustrecomment fonctionne le système de construction (ou build) de Gaia. Cela inclue le fichier makefile, le processus de construction, les variables d'environnement et les éventuelles personnalisations.

-
- -

Le travail le plus important durant les étapes de construction est effectué par les scripts contenus dans le sous-répertoire build/ de Gaia, qui sont exécutés grâce à make, node.js et XPCShell (aussi appelé JS Shell), qui est un environnement d'exécution de XULRunner. Le système de construction de Gaia contient plusieurs utilitaires pour aider à installer, tester, localiser et empaqueter les applications web sur un vrai appareil. Il permet également aux développer de personnaliser et d'adapter Gaia (par exemple en changeant le fond d'écran par défaut, les sonneries, les applications et les réglages).

- -
-

Note : XPCShell est proche de node.js mais permet de lancer un langage de script de Mozilla proche de JavaScript. Il permet aux scripts de construction de Gaia d'être lancés dans une extension Firefox.

-
- -

Le fichier makefile

- -

Le fichier makefile est composé de plusieurs buts (goals). Cette section explique les buts les plus utiles.

- -

install-gaia

- -

Ce but enverra toutes les applications Gaia sur votre appareil. Si vous souhaitez n'envoyer qu'une application en particulier, vous devrez utiliser le drapeau (flag) APP comme suit :

- -
APP=calendar make install-gaia
- -

Ce répertoire doit être présent au sein d'un des répertoires de Gaia pour les applications (ex : apps).

- -

reset-gaia

- -

Ce but fonctionne de la même façon que install-gaia mais commence par purger puis remet les permissions par défaut après avoir installé toutes les applications. Les applications seront situées sous /data/local (comme lorsque Gaia est construit en mode engineering). Cela enverra également les tests et les applications de débogage.

- -
-

Attention : Si vous utilisez la variable d'environnement APP avec reset-gaia, cela pourra fonctionner mais rendra l'appareil inutilisable (ce qui peut être résolu en lançant le même but sans la variable APP). À ne pas faire.

-
- -

production

- -

Ce but correspond à reset-gaia avec une optimisation du source code. Ce but permet généralement d'émuler les versions communiquées aux utilisateurs (user builds). Il enverra les mêmes applications qui sont installées pour les versions communiquées aux utilisateurs.

- -
-

Attention : Si vous utilisez la variable d'environnement APP avec reset-gaia, cela pourra fonctionner mais rendra l'appareil inutilisable (ce qui peut être résolu en lançant le même but sans la variable APP). À ne pas faire.

-
- -

reference-workloads

- -

Ces buts envoient des volumes de données de différentes tailles sur l'appareil, aidant ainsi à déboguer et à corriger les problèmes de montées en charge. Ces buts gèrent la variable d'environnement APP ou une variable d'environnement APPS qui contient les noms d'applications séparées par des espaces :

- -
APP=sms make reference-workload-light
-APPS="sms communications/contacts" make reference-workload-heavy
-
- -
-

Note : Pour plus d'informations, lire Bidouiller Gaia : les charges de données de référence.

-
- -

Les variables d'environnement

- -

Certaines variables d'environnement permettent de contrôler certains aspects de la construction et de l'installation sur l'appareil. Par exemple :

- -

P=1

- -

Celà active la compilation en parallèle dans le but de tirer avantage des processeurs multi-coeurs, et d'accélérer le temps nécessaire à une compilation. La valeur par défaut est 0.

- -
-

Attention: La compilation en parallèle est une fonctionnalité expérimentale qui peut se révéler instable.

-
- -

GAIA_OPTIMIZE=1

- -

Cela déclenche une passe d'optimisation des fichiers JavaScript. Cette optimisation a lieu de façon automatique lorsqu'on utilise make production. Cela peut également être utilisé pour install-gaia ou reset-gaia.

- -

PRODUCTION=1

- -

Cette variable est un alias pour make production.

- -

DEBUG=1

- -

Cette variable vous permet de générer un profil de débogage à utilliser pour les tests unitaires de Gaia ou lorsque vous développer votre application Firefox OS dans Firefox. Vous devez supprimer le profil existant avant d'essayer d'en générer un nouveau.

- -

DEVICE_DEBUG=1

- -

Cette variable désactive l'écran de vérouillage de l'appareil.

- -

GAIA_DEVICE_TYPE=phone

- -

Cette variable vous permet de construire différemment en fonction du type d'appareil avec une 'app.list' différente. Tous les fichiers 'app.list' sont situés sous les dossiers /build/config/$(GAIA_DEVICE_TYPE)/ .

- -

Par défaut, la valeur de GAIA_DEVICE_TYPE est phone (pour un téléphone).

- -
-

Note : Pour plus de détails et d'options, voir le guide Bidouiller Gaia : options de make.

-
- -

Processus de construction

- -

Voici un diagramme de séquence de la construction de Gaia :

- -

- -

pre-app.js, app.js et post-app.js seront exécutés par le Makefile les tâches de constructions ont, pour la plupart, lieu dans des scrips xpchsell, le fichier Makefile est utilisé pour détecter le système d'exploitation et pour télécharger b2g-desktop. Pour la suite, il est prévu qu'il y ait des tâches qui soient exécutées par des scripts xpcshell plutôt que par le Makefile.

- -

Si vous vous demandez pourquoi il y a les scripts pre-app, app et post-app : c'est parce que nous migrons des dépendances du Makefile vers les scripts xpcshell. C'est pourquoi nous avons créé  pre-app.js et post-app.js pour le bug 1021051 afin de déplacer la plupart des dépendances sur les scripts xpcshell. Au final, app.js, pre-app.js et post-app.js seront fusionnés avec le bug 1053703.

- -

Il existe trois types de répertoires utilisés pour le système de construction de Gaia :

- -
    -
  1. les répertoires sources : apps, dev_apps qui sont des répertoires partagés
  2. -
  3. le répertoire d'étape (stage directory) : build_stage
  4. -
  5. les répertoires de profil : profile, profile-debug ou profile-test
  6. -
- -

Notre objectif est de ne générer aucun fichier dans les répertoires sources. Malheureusement, certains des modules génèrent des fichiers dans les répertoires sources, ce qu'il est prévu de corriger. Voici un tableau qui illustre quels modules génèrent des fichiers dans les dossiers sources, le dossier d'étape et/ou les dossiers de profil :

- -

- -

Voici les règles exécutées (et l'ordre dans lequel elles le sont) lorsque la construction est lancée depuis le répertoire de Gaia :

- -
    -
  1. b2g_sdk : b2g-desktop est utilisé pour lancer les scripts xpcshell contenus dans GAIA_DIR/build/.
  2. -
  3. svoperapps : on télécharge les applcations et on génère les fichiers de configuration pour l'installation des applications, par opérateur téléphonie et par pays.
  4. -
  5. webapp-manifests : on génère des méta-données sur les applications web pour le processus de construction.
  6. -
  7. keyboard-layouts : on génère l'agencement par défaut du clavier.
  8. -
  9. settings.json (settings.js): ce fichier JavaScript génère les paramètres par défaut pour Firefox OS, qui sont lus par Gaia.
  10. -
  11. webapp-shared : on copie les fichiers des répertoires partagés qui sont utilisés pour chaque application vers le répertoire d'étape.
  12. -
  13. preferences : on génère les réglages utilisateurs par défaut pour Firefox OS ; cela génèrera un fichier user.js, l'enverra sur l'appareil afin qu'il soit lu par Gecko. Les valeurs peuvent être différentes en fonction des variables d'environnement (par exemple avec DEBUG=1).
  14. -
  15. app.js : les fichiers de construction du répertoire app sont exécutés s'ils existent. Pour chaque application, s'il n'y a pas de fichier Makefile pour l'application, le fichier Makefile de Gaia copiera le répertoire de l'application dans build_stage puis exécutera [app-directory]/build/build.js s'il existe. VoirScript de construction pour les applications pour plus d'informations.
  16. -
  17. test-agent-bootstrap & test-agent-config : la préparation des agents de test est divisée en deux règles test-agent-config et test-agent-bootstrap-apps, ces règles permettent de paramétrer des environnements de test pour chaque application.
  18. -
  19. webapp-optimize : Ce script contient diverses procédures d'optimisation comme la minification du JavaScript, la concaténation des fichiers de localisation en fichiers JSON, la génération de fichiers HTML dans la langue par défaut (si nécessaire).
  20. -
  21. webapp-zip : On compresse chaque application dans un fichier zip distinct puis on les place dans le répertoire profile/.
  22. -
  23. optimize-clean : optimize-clean nettoie les fichiers HTML pour la langue par défaut.
  24. -
  25. contacts : Copie le fichier de contacts pré-chargé dans le profil, s'il existe dans GAIA_DISTRIBUTION_DIR.
  26. -
  27. extensions : Copie les extensions (contenues dans GAIA_DIR/tools/extensions) dans votre répertoire de profil. Suivant les configurations utilisées, vous pouvez définir quelles extensions sont copiées.
  28. -
  29. installed-extensions.json (additional-extensions.js) : Enfin, ce script télécharge certaines extensions supplémentaires dans votre répertoire de profil.
  30. -
- -

Script de construction pour les applications

- -

Par défaut, le script de construction de l'application [répertoire app]/build/build.js sera exécuté par app.js si le script de construction existe. Si $APP/build/build.js n'existe pas, app.js copiera l'application dans build_stage.

- -

Les fichiers contenus dans le répertoire de l'application devrait être copiés dans le répertoire d'étape build_stage par le script de construction de l'application s'il existe. En effet, si le script existe, app.js ne copiera pas les fichiers. Par exemple, l'application du calendrier (calendar) possède un script build/build.js et fait appel à utils.copyToStage().

- -
-

A noter: Pour les sources qui se trouvent en dehors de l'application (comme dans shared/), il faut les mettre dans un noeud commenté dans la section <head> de index.html, afin que ce soit copié de shared/ vers l'application.

-
- -

Les scripts de constructions des applications peuvent requérir n'importe quel module construit dans $GAIA_DIR/build, en particulier le module utils qui est très utile pour la construction des applications. Vous pouvez ainsi utiliser require('utils') pour bénéficier du module.

- -

- -

Personnaliser les réglages utilisateurs

- -

Si vous avez un ensemble de préférences utilisateur que vous utilisez à chaque fois que vous chargez (flashez) l'appareil, vous pouvez créer un fichier appelé custom-prefs.js dans le répertoire build/config et les stocker à cet emplacement. Cela évite que les préférences soient écrasées et en dehors du gestionnaire de versions (source control).

- -

Voici quelques réglages utilisateurs qui peuvent être utiles :

- -
// on permet à marionette de lancer les tests de performance
-// voir https://developer.mozilla.org/fr/docs/Mozilla/Firefox_OS/Platform/Testing/Gaia_performance_tests
-user_pref("marionette.defaultPrefs.enabled", true);
-
-// on définit le port à utiliser pour déboguer l'application à distance sur l'appareil
-user_pref("devtools.debugger.remote-port", 60000);
-
-// on active le débogueur à distance
-user_pref("devtools.debugger.remote-enabled", true);
-
-// on affiche les informations de debug sur le Radio Interface Layer dans logcat
-user_pref("ril.debugging.enabled", true);
-
- -

Ce fichier est lu à chaque fois que vous générez un profil. La façon la plus certaine d'être sûr que tout soit généré est de commencer par supprimer votre profil :

- -
rm -rf profile && make profile
- -

Vous pouvez ensuite utiliser le but install-gaia sans danger.

- -

FAQ

- -

L'appareil reste  avec l'écran noir après avoir été flashé

- -

Ceci peut parfois arriver si vous flashez l'appareil lorsqu'il est en veille. Pour régler le problème, il suffit de redémarrrer B2G en utilisant la ligne de commande suivante :

- -
adb shell stop b2g && adb shell start b2g
- -


-  

diff --git a/files/fr/archive/b2g_os/developing_gaia/comprendre_les_fondements_de_gaia/index.html b/files/fr/archive/b2g_os/developing_gaia/comprendre_les_fondements_de_gaia/index.html deleted file mode 100644 index 96f3026287..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/comprendre_les_fondements_de_gaia/index.html +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: Comprendre la structure du code de Gaia -slug: Archive/B2G_OS/Developing_Gaia/comprendre_les_fondements_de_Gaia -tags: - - Code - - Firefox OS - - Gaia - - Guide - - JavaScript - - contribution -translation_of: Archive/B2G_OS/Developing_Gaia/Understanding_the_Gaia_codebase ---- -
-

Avant d'apporter vos modifications au code de Gaia, vous devez d'abord comprendre les bases de sa structure et connaître les conventions de codage utilisées. Cet article couvre chacun de ces points.

-
- -

Les branches de Gaia

- -

Il y a plusieurs branches différentes qui organisent le code source de Gaia, et en fonction de la tâche que vous cherchez à accomplir (ou de l'appareil que vous avez), vous ne voudrez pas seulement charger, modifier et compiler la branche master. Vous trouverez ici, une rapide explication, des branches les plus couramment utilisées :

- - - -

La structure du code source de Gaia

- -

La section qui suit présente les parties les plus importantes du code source de Gaia.

- -

apps/

- -

Ce répertoire contient chacune des applications principales de Gaia, celles affichées sur l'écran d'accueil - comme le calendrier ou l'appareil photo - ainsi que celles sous-jacentes - comme celle du système, celle de l'écran d'accueil, ou celle du clavier.
-
- Les applications peuvent fonctionner de façon légèrement différente, mais ont toutes un certain nombre de points communs :

- - - -
-

Note : Vous pouvez trouver plus d'informations à propos du fonctionnement des applications dans notre guide des applications Gaia.

-
- -

build/

- -

Ce répertoire contient les scripts de construction (build).

- -

dev_apps/

- -

Ce répertoire contient les applications à inclure lors d'une construction faite sur mesure. Par exemple, vous pouvez ajouter des applications à cet emplacement pour produire des versions sur mesures qui contiennent ces applications.

- -
-

Note : Pour plus d'informations sur la personnalisation de Gaia, lire le guide des personnalisations possibles (Market customizations).

-
- -

keyboard/

- -

Ce répertoire contient les dictionnaires et agencements des claviers en fonction des différentes langues.

- -

locales/

- -

Ce répertoire contient un fichier JSON, languages_all.json, qui définit les langues supportées dans Gaia. Pour plus d'informations sur la façon dont les applications sont localisées, lire l'article Comment localiser une application.

- -

shared/

- -

Ce répertoire contient diverses ressources utilisées par plusieurs applications. Les éléments les plus notables sont :

- - - -

tools/

- -

Ce répertoire contient les utilitaires nécessaires pour les scripts de construction (build) et les tests.

- -

Les conventions de style utilisées pour le code de Gaia

- -

Gaia suit les règles de style de Google pour le JavaScript (en anglais).

- -

Informations générales sur les règles de code :

- - - -

Règles spécifiques

- -
    -
  1. Assurez-vous que vos fichiers HTML soient déclarés avec <!DOCTYPE html> (autrement dit, qu'ils soient des documents HTML5). Si vous n'utilisez pas cette information, les versions Internet Explorer 9 et supérieures chargeront le site/application en mode de compatibilité.
  2. -
  3. Incluez l'instruction "use strict"; (telle quelle, avec les doubles quotes) dans vos fichiers JavaScript afin qu'ils utilisent le mode strict.
  4. -
  5. Utilisez deux espaces pour l'indentation et non pas des tabulations.
  6. -
  7. Veuillez utilisez des sauts de ligne pour séparer les fragments logiques du code !
  8. -
  9. Les noms de fichiers composés de plusieurs termes doivent utiliser les tirets bas comme ceci mon_fichier_avec_plusieurs_mot.js.
  10. -
  11. Utilisez des quotes simples pour les chaînes de caractères (plutôt que des doubles quotes).
  12. -
  13. Utilisez des structures conditionnelles développées : -
    Incorrect
    -if (expression) faireQuelqueChose();
    -
    -Correct
    -if (expression) {
    -  faireQuelqueChose();
    -}
    -
  14. -
  15. Si vous travaillez sur l'application System, vérifiez la liste de conseils spécifiques.
  16. -
- -

Vérification du style de code à chaque commit

- -

Gaia utilise JSHint pour vérifier le style de code JavaScript utilisé et ce avant chaque commit (via un « crochet » (hook en anglais) git). Une fois que vous avez soumis votre pull request sur le dépôt de Gaia. Le serveur Travis (l'intégration continue pour Github) lancera ce « linter » pour vérifier à nouveau que le style est correct.

- -

Le script de pre-commit est présent dans gaia/tools/pre-commit et devrait être copié dans le répertoire .git/hooks du projet une fois que la commande make a été lancée.

- -
-

Note : Auparavant, gjslint était utilisé pour cette vérification. Il a cependant été déprécié en faveur de jshint car celui-ci est plus strict et produit de meilleurs résultats. JSHint est utilisé depuis Firefox OS 1.4, et gjslint est uniquement recommandé pour les fichiers historiques qui n'ont pas encore été migrés vers JSHint.

-
- -

Lancer le linting manuellement avec Gaia

- -

Avant de soumettre un correctif, il est conseillé de lancer JSHint manuellement en local afin de vérifier que vous n'avez pas d'erreurs de style dans votre code.
-
- Pour plus de détails sur JSHint dans Gaia, vous pouvez regarder le contenu du répertoire gaia/build/jshint. Gaia fournit un script de construction que vous pouvez utiliser :

- -
$ make lint
- -

pour lancer automatiquement les tests de gjslint et de JSHint. Vous pouvez également lancer uniquement :

- -
$ make hint
- -

pour ne lancer que les vérifications effectuées par JSHint.

- -
$ make eslint
- -

pour lancer uniquement la vérification de style eslint.

- -
-

Note : Pour installer JSHint sur votre installation, sans Gaia, vous pouvez utiliser les commandes suivantes :

- -
npm install jshint -g
-jshint mon_fichier.js
-
- -

 

diff --git a/files/fr/archive/b2g_os/developing_gaia/different_ways_to_run_gaia/index.html b/files/fr/archive/b2g_os/developing_gaia/different_ways_to_run_gaia/index.html deleted file mode 100644 index 3f30dd2285..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/different_ways_to_run_gaia/index.html +++ /dev/null @@ -1,230 +0,0 @@ ---- -title: Différentes façons d'exécuter Gaia -slug: Archive/B2G_OS/Developing_Gaia/Different_ways_to_run_Gaia -tags: - - ADB - - Appareil - - Firefox - - Firefox OS - - Gaia - - Gaia+Gecko - - Mac OS X - - USB - - WebIDE - - bureau - - contribuer - - débogage - - exécuter Gaia - - nightly - - simulateur - - émulateur(2) -translation_of: Archive/B2G_OS/Developing_Gaia/Different_ways_to_run_Gaia ---- -

- -
-

Vous pouvez exécuter Gaia dans un simulateur via WebIDE, dans Firefox Mulet (une version spéciale de Firefox pour ordinateur destinée au développement Gaia), dans un émulateur ou sur un appareil mobile compatible. Cet article fournit un résumé pour réaliser chacun de ces cas, avec des liens vers des informations complémentaires.

-
- -
-

Note : Pour faire tourner Gaia sur ordinateur, la méthode actuellement recommandée consiste à utiliser Mulet (voir Utiliser Gaia dans Firefox Mulet, ci-dessous.)

-
- -
-

Note : Parfois, vous serez confronté à des problèmes dûŝ à certaines de vos modifications qui nécessitent des paramètres de préférences actualisés etc. Si vous rencontrez ce genre de cas, essayez de regénérer votre profil pour voir si cela corrige le problème (lancez de nouveau la commande make).

-
- -

À quel point cela est-il proche de la réalité ?

- -

Certaines des solutions détaillées dans cet article pour exécuter Gaia sont plus proches que d'autres de l'expérience rencontrée avec un appareil réel. Dans l'ordre de facilité d'exécution :

- -
    -
  1. Gaia dans un Simulateur via WebIDE
  2. -
  3. Gaia dans Firefox Mulet
  4. -
  5. Gaia dans un Émulateur
  6. -
  7. Gaia flashé sur un téléphone
  8. -
  9. Gaia+Gecko flashés sur un téléphone
  10. -
- -

L'ordre de “À quel point cela est-il proche du produit commercialisé” est exactement l'opposé de cette liste. Selon la fonctionnalité sur laquelle vous travaillez, vous devrez trouver l'ennvironnement qui répond à la problématique posée.

- -

Explication des options de make

- -

Dans les sections ci-dessous sur WebIDE et Mulet, il vous est demandé de construire votre propre profil Gaia en utilisant la commande suivante :

- -
DEBUG=1 DESKTOP=0 make
- - - -

Cela va construire votre profil dans un répertoire nommé profile-debug.

- -

Si vous souhaitez faire un test avec une version de production de Gaia pour davantage de réalisme, lancez seulement make pour construire votre profil. Celui-ci sera créé dans un répertoire nommé profile.

- -
-

Note : Il existe tout un tas d'options make disponibles pour Gaia — voir la référence des options make de Gaia pour beaucoup plus de détails.

-
- -

Utiliser Gaia dans un Simulateur via WebIDE

- -

La méthode la plus rapide pour essayer Gaia est d'utiliser WebIDE, un outil développeur disponible dans Firefox pour ordinateur. Il apporte un certain nombre d'outils utiles pour vous aider à tester, déployer et déboguer des applications web HTML5 sur les téléphones Firefox OS et dans le Simulateur Firefox OS, directement à partir de votre navigateur.
-
- Dans le navigateur pour ordinateur Firefox 34+, ouvrez WebIDE via le menu Outils > Développement web > WebIDE. Ouvrez le menu Environnement en haut à droite pour installer et démarrer un Simulateur.

- -

Pour faire tourner votre propre profil Gaia personnalisé, le processus est un petit peu plus complexe, mais cela reste relativement simple :

- -
    -
  1. Avant d'essayer de faire ça, il faut construire vous-même un profil d'appareil Gaia de debug — allez dans votre clone de dépôt Gaia puis lancez DEBUG=1 DESKTOP=0 make. Cela va générer dans votre répertoire gaia un dossier appelé profile-debug, contenant votre profil.  Avec ce type de profil, vous serez en mesure de déboguer les applications internes de Gaia dans WebIDE sans avoir à configurer autre chose, et vous n'aurez pas à accepter la boîte de dialogue pour confirmer le débogage distant dans le simulateur à chaque fois que vous le lancerez. Si vous voulez faire des tests avec une version de production plus réaliste, lancez la construction avec uniquement la commande make.
  2. -
  3. Ouvrez Firefox (Nightly est recommandé.)
  4. -
  5. Ouvrez WebIDE depuis Outils > Développement web > WebIDE.
  6. -
  7. Installez un Simulateur Firefox OS en allant dans Choisir un environnement > Installer un Simulateur dans WebIDE et en choisissant une option. Assurez-vous d'utiliser les mêmes versions de simulateur et du Gaia que vous faites tourner (ainsi par exemple, si votre branche Gaia est la 2.1, vous devrez utiliser le Simulateur Firefox OS 2.1.)
  8. -
  9. Dans le menu de droite, vous pouvez voir votre simulateur dans la liste. Cliquez sur le bouton options (engrenage) qui est juste à côté pour accéder à l' écran des Options du Simulateur.
  10. -
  11. Choisissez Profil > Personnaliser profil Gaia..., puis sélectionner le dossier de votre profil Gaia dans le sélecteur de fichiers.
  12. -
  13. Ouvrez ce simulateur dans WebIDE, et il devrait alors s'ouvrir avec votre profil Gaia en cours d'exécution.
  14. -
- -
-

Note : Si la commande ne fonctionne pas (il est possible d'avoir un message affichant "A copy of B2G is already open. Only one copy of B2G can be open at a time." — alors qu'il n'est pas déjà ouvert), vérifiez alors que le répertoire de votre profil dispose bien des permissions de lecture/écriture, par exemple avec chmod.

-
- -
-

Note : Si vous souhaitez réinitialiser votre simulateur pour qu'il ne fasse plus tourner de profil Gaia personnalisé, vous aurez besoin d'aller dans Firefox sur about:config ; cherchez la préférence extensions.fxos_2_2_simulator@mozilla.org.gaiaProfile  (2_2 peut être différent en fonction de la version du simulateur que vous avez personnalisée), double-cliquez dessus, supprimez la valeur dans la boîte de dialogue qui s'affiche puis cliquez sur OK.

-
- -

Utiliser Gaia dans Firefox Mulet

- -

Il est également possible d'exécuter Gaia dans une version spéciale de Firefox appelée Firefox Mulet. Cela donne l'avantage d'avoir un cycle de développement rapide, ainsi que des outils de développement web standards et des débogueurs pour travailler avec.

- -
    -
  1. Tout d'abord, vous devez avoir cloné le dépôt Gaia sur votre machine (voir Lancer votre compilation de Gaia pour voir la meilleure façon de le faire si vous voulez contribuer au projet.) Mulet ne fonctionnant que sur Gaia 2.2 et au-dessus, il est une bonne idée d'utiliser la branche master.
  2. -
  3. Ensuite, placez-vous dans le dépôt Gaia avec cd et construisez votre propre profil (voir référence des options make pour les différents types disponibles) avec DEBUG=1 DESKTOP=0 make. Si vous voulez faire des tests en utilisant une version de production plus réaliste, utilisez seulement la commande make.
  4. -
  5. Vous pouvez à présent installer la dernière version de mulet dans gaia/firefox grâce à la commande make mulet. Il s'agit de la méthode la plus rapide pour l'installer. -
      -
    1. Si vous voulez avoir plus de contrôle sur l'endroit où installer mulet, vous devrez le télécharger vous-même — trouvez les builds Windows et Mac sur Mozilla Central, et regardez ici pour Linux. Les builds Mulet sont les paquets dont les noms commencent par firefox-*, par exemple firefox-36.0a1.en-US.mac64.dmg. Les builds Linux sont nommés target.linux-x86_64.tar.bz2 — choisissez la version appropriée à votre machine de développement.
    2. -
    3. Une fois le build Mulet téléchargé, installez-le en lieu sûr afin de ne pas écraser votre version de Firefox Nightly normale. Par exemple, sur Mac OS X, créez un nouveau dossier dans Applications appelé "mulet", et faîtes-le glisser dedans.
    4. -
    -
  6. -
  7. Lancez maintenant le build Mulet à partir de la ligne de commande, en lui passant votre profil Gaia comme profil à utiliser lors de l'ouverture (spécifié par l'option -profile.) Par exemple, vous pouvez lancer quelque chose de ce genre depuis l'intérieur de votre dossier Applications sur Mac OS X si vous l'avez installé là : -
    ./firefox/Contents/MacOS/firefox-bin -no-remote -profile /Users/my-home-folder/git/gaia/profile-debug/
    -
  8. -
- -

Le build Mulet résultant devrait apparaître, comme ceci :

- -

- -
-

Note : Si la commande ne fonctionne pas (il est possible d'obtenir un message disant "A copy of Firefox is already open. Only one copy of Firefox can be open at a time." — alors qu'il n'est pas déjà ouvert), alors vérifiez que vous avez le droit de lancer l'exécutable firefox comme ça — vous pouvez lancer la commande ci-dessus en plaçant sudo devant, bien qu'une meilleure solution, plus sûre,consiste à faire un chmod sur votre dossier d'installation.

-
- -
-

Note : Les nouvelles versions de Gaia ont parfois besoin d'une version de mulet plus récente ; pour faire la mise à jour vers la dernière version de mulet, vous pouvez lancer la commande rm -rf firefox && make mulet dans le répertoire gaia/.

-
- -

Sur cet affichage, vous avez de disponible la boîte à outils standard de Firefox afin de déboguer vos applications Gaia, plus un émulateur Firefox OS fonctionnant dans la partie gauche, ainsi qu'un certain nombre d'autres outils utiles à l'environnement Gaia. Les contrôles au-dessus de l'émulateur vous permettent de :

- - - -

Flasher Gaia sur un véritable appareil

- -
-

Important : Si vous tentez de flasher Gaia sur un appareil doté de peu de mémoire, comme un Tarako ou un Spice Fire One, vous devez le flasher avec une branche de Gaia spéciale optimisée pour les faibles quantités de mémoire, comme la branche 1.3t. Essayer de flasher un tel appareil avec la branche principale de Gaia va probablement avoir pour résultat de rendre le téléphone inopérant.

-
- -

Pour flasher une nouvelle version de Gaia sur un vrai appareil :

- -
    -
  1. Assurez-vous d'abord d'avoir cloné le dépôt Gaia sur votre ordinateur et d'avoir installé ADB.
  2. -
  3. Vérifiez d'avoir activé le Débogage via USB.
  4. -
  5. Branchez votre appareil sur votre ordinateur en USB.
  6. -
  7. S'il y a un appareil détecté, vous pouvez procéder aux commandes suivantes. Sinon, vous (utilisateur de Windows ou de distribution Linux) pouvez avoir à vérifier la page des Pilotes OEM USB pour correctement configurer le pilote USB de votre ordinateur.
  8. -
  9. Pour de véritables appareils, lancez adb en tant qu'utilisateur root en utilisant la commande suivante : -
    $ adb root
    -
  10. -
  11. Lancez la commande suivante à l'intérieur du dépôt Gaia pour réinitialiser votre téléphone et mettre à jour votre code source de Gaia : -
    $ make reset-gaia
    -
  12. -
  13. Pour tester des applications non-systèmes, vous pouvez les installer sans redémarrer l'appareil grâce à la commande suivante : -
    $ make install-gaia
    -
  14. -
  15. Si vous souhaitez installer une application spécifique unique, vous pouvez la passer via la variable APP comme ceci : -
    $ make install-gaia APP=browser
    -
  16. -
- -
-

Note : Envoyer Gaia sur votre appareil en utilisant make install-gaia / make reset-gaia construit Gaia avec une définition de résolution 1x par défaut. Pour spécifier une résolution supérieure, vous devez utiliser les options de make GAIA_DEV_PIXELS_PER_PX ou GAIA_DPPX  (voir Ressources images en haute résolution pour davantage d'informations sur ces options.) Lors de l'envoi de Gaia sur votre appareil de cette façon, vous devez indiquer les options de make correspondantes au facteur d'échelle de votre appareil ; donc par exemple make install-gaia GAIA_DEV_PIXELS_PER_PX=1.5 pour un appareil Flame (ou 2, ou 2.5, etc ; voir les valeurs de facteur d'échelle du tableau situé dans 512 icônes pour l'affichage.)

-
- -

Pour vérifier que votre appareil est correctement branché en USB, vous pouvez taper :

- -
$ adb devices
- -

Vous devriez obtenir un résultat de ce genre :

- -
List of devices attached
-emulator-5554  device
- -

Construire Gecko et Gaia et les utiliser dans un émulateur ou sur un véritable appareil

- -

Si vous disposez d'un appareil mobile compatible, vous pouvez construire et installer votre propre version de Firefox OS et ensuite l'exécuter sur un Émulateur ou la placer sur votre appareil.

diff --git "a/files/fr/archive/b2g_os/developing_gaia/ex\303\251cuter_des_versions_personnalis\303\251es_dans_webide/index.html" "b/files/fr/archive/b2g_os/developing_gaia/ex\303\251cuter_des_versions_personnalis\303\251es_dans_webide/index.html" deleted file mode 100644 index 2203855c7a..0000000000 --- "a/files/fr/archive/b2g_os/developing_gaia/ex\303\251cuter_des_versions_personnalis\303\251es_dans_webide/index.html" +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Exécuter des versions personnalisées de Firefox OS/Gaia dans WebIDE -slug: >- - Archive/B2G_OS/Developing_Gaia/Exécuter_des_versions_personnalisées_dans_WebIDE -tags: - - Apps - - B2G Bureau - - Firefox OS - - Gaia - - WebIDE - - débogage -translation_of: Archive/B2G_OS/Developing_Gaia/Running_custom_builds_in_WebIDE ---- -
-

Fin février 2014, le Simulateur Firefox OS a été doté d'une fonctionnalité pour lui permettre d'exécuter un binaire B2G personnalisé et/ou un profil Gaia de votre choix. Cet article montre comment configurer votre jeu d'outils pour faire cela, exécuter le Simulateur via WebIDE.

-
- -

Prérequis

- -

Tout d'abord, réunissons les outils dont nous avons besoin pour exécuter nos versions personnalisées dans le Simulateur.

- -
    -
  1. Installez Firefox, et vérifiez que WebIDE soit disponible (Outils > Développement web > WebIDE.)
  2. -
  3. Installez le simulateur B2G Desktop le plus récent, ou construisez le vôtre.
  4. -
  5. Installez l'extension Firefox OS Simulator la plus récente, version 7.0pre7.20140113 ou plus.
  6. -
  7. Construisez un profil Gaia avec le flag SIMULATOR=1.  Par exemple, vous pouvez lancer la commande make SIMULATOR=1 PROFILE_FOLDER=profile-b2g profile-b2g depuis votre répertoire Gaia pour réaliser cette opération (voir Développer pour Gaia pour plus de détails.)
  8. -
- -

Configuration de votre simulateur

- -

Vous devez à présent effectuer certains paramétrages afin que le simulateur puisse trouver vos Bureau B2G et Gaia personnalisés.

- -

Avant Firefox 42

- -
    -
  1. Ouvrez l'onglet de gestion des modules (Outils > Modules complémentaires, ou saisir about:addons dans la barre d'URL.)
  2. -
  3. Sur la liste d'onglets, cliquez sur Extensions pour lister vos extensions installées.
  4. -
  5. Cherchez la nouvelle extension Firefox OS simulator dans la liste. Elle devrait s'appeler quelque chose comme Firefox OS 1.3 Simulator 7.0pre.7.20140113.
  6. -
  7. Cliquez sur le bouton Préférences situé dans l'entrée de la liste correspondant à l'extension du simulateur.
    - the Firefox OS simulator preferences: Preferences, disable and remove.
  8. -
  9. Vous pourrez décider d'utiliser un exécutable personnalisé — la dernière version de B2G Desktop — pour faire tourner Firefox OS dans WebIDE. Cliquez sur le bouton Parcourir... juste après l'étiquette Select a custom runtime executable puis sélectionner votre exécutable B2G Desktop dans le sélecteur de fichiers. Alors que cela sera évident sous Windows/Linux,  sur Mac, il faudra le rechercher dans /Applications/B2G.app/Contents/MacOS/b2g, à condition que vous l'ayez installé dans le répertoire Applications. Reportez-vous à Construire votre binaire b2g personnalisé si vous souhaitez tester des patchs sur mozilla-central.
  10. -
  11. Vous pouvez également lancer votre profil Gaia personnalisé dans WebIDE : Cliquez sur le bouton Parcourir... après l'étiquette Select a custom Gaia profile directory et sélectionnez le répertoire de votre profil personnalisé (cela devrait être gaia/profile-b2g.)
  12. -
  13. Si vous avez besoin de revenir au simulateur non personnalisé, vous devrez réinitialiser une valeur de configuration. Le fait de simplement supprimer et réinstaller l'extension du simulateur ne fonctionnera pas. Ouvrez un nouvel onglet et tapez "about:config" dans la barre d'adresse. Dans le champ Rechercher de cette page, entrez "fxos" ou "simulator" et cherchez quelque chose qui ressemble à "extensions.fxos_2_0_simulator@mozilla.org.customRuntime" ou "extensions.fxos_2_0_simulator@mozilla.org.gaiaProfile". Faites un clic droit et choisissez "Réinitialiser". Redémarrer à présent le simulateur et vous devriez avoir récupéré la version non personnalisée.
  14. -
- -

À partir de Firefox 42

- -

Depuis Firefox 42, vous pouvez configurer le binaire B2G et le profil avec l'écran "Options du Simulateur" dans WebIDE.

- -

 

- -

Utilisation de votre simulateur configuré

- -

Enfin, allons-y et utilisons notre simulateur personnalisé.

- -
    -
  1. Ouvrez WebIDE (Outils > Développemet web > WebIDE) ; vous pouvez également presser Shift-F8.
  2. -
  3. Ouvrez le menu Environnement en cliquant sur le bouton en haut à droite.
  4. -
  5. Cliquez sur le bouton Firefox OS 1.3 (ou toute autre dernière version que vous avez installée). Cela devrait être la bonne option, même si vos versions de B2G desktop/Gaia sont plus récentes.
  6. -
  7. Le simulateur va maintenant démarrer ; B2G Desktop devrait se charger et exécuter vos versions B2G nocturne et Gaia personnalisées !
  8. -
- -

a screenshot of the b2g desktop simulator

- -

 

- -

Construire un binaire b2g personnalisé

- -

Il s'agit d'une étape facultative, utile si vous devez tester un patch à appliquer sur le codebase de mozilla-central.

- -
-

Note : s'il vous est possible de soumettre des Try builds, elles généreront des extensions simulateur dans les répertoires de compilation de chaque plate-forme de B2G Desktop ; cela peut donc constituer un moyen plus simple de créer un simulateur qui utilise une plate-forme personnalisée ou des modifications de Gaia dans certains cas d'utilisation.

-
- -
    -
  1. Faites un checkout de mozilla-central.
  2. -
  3. Appliquez le(s) patch(s) que vous voulez tester.
  4. -
  5. Vérifiez la présence des lignes suivantes dans votre mozconfig :
    - ac_add_options --enable-application=b2g
    - FXOS_SIMULATOR=1
    - GAIADIR=/home/alex/gaia    # Mandatory to set FXOS_SIMULATOR flag, it will ensure having a working xpi file
    - MOZTTDIR=/path/to/moztt   # Optional, to get the device fonts
  6. -
  7. -

    Exécutez ./mach build && ./mach package

    -
  8. -
  9. -

    Si vous avez indiqué GAIADIR, vous obtiendrez une extension xpi du simulateur dans votre obdir, à l'intérieur du dossier dist.

    -
  10. -
diff --git a/files/fr/archive/b2g_os/developing_gaia/faire_fonctionner_code_gaia/index.html b/files/fr/archive/b2g_os/developing_gaia/faire_fonctionner_code_gaia/index.html deleted file mode 100644 index e5ca34e6ce..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/faire_fonctionner_code_gaia/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Faire fonctionner le code de Gaia -slug: Archive/B2G_OS/Developing_Gaia/Faire_fonctionner_code_Gaia -tags: - - B2G - - Contributing - - Firefox - - Firefox OS - - Gaia - - running firefox os locally -translation_of: Archive/B2G_OS/Developing_Gaia/Running_the_Gaia_codebase ---- -
-

Cet article décrit les étapes nécessaires au lancement de Gaia en local. Il liste également les outils pouvant être utilisés.

-
- -

Pour commencer, il est nécessaire de préciser qu'il n'est pas nécessaire de construire Gecko ou B2G pour contribuer à Gaia. Les seuls éléments obligatoires sont d'avoir téléchargé le code source de Gaia, de pouvoir le lancer et de pouvoir l'éditer.
-
- Voici les différentes façons dont vous pouvez lancer Gaia :

- - - -

Vous trouverez des informations plus précises sur ces méthodes sur la page concernant les différentes façons de lancer Gaia. Sur cette page, vous trouverez également des liens vers plus d'informations. En général, les différentes méthodes sont ordonnées de la plus complexe (mais la plus réaliste) à la plus simple (mais moins réaliste).

- -

Dans cet article, nous verrons surtout comment lancer Gaia dans Firefox Mulet ou le WebIDE — pour la plupart des changements que vous souhaiterez apporter au code de Gaia, ce sera la méthode la plus rapide. En revanche, certaines fonctionnalités ne seront pas supportées (comme certaines API matérielles ainsi que les interactions avec les composants matériels du téléphone) et pour celles-ci, vous aurez besoin d'un vrai appareil.

- -
-

Note : Pour recevoir plus d'aide sur Gaia, n'hésitez pas à vous rendre sur le canal IRC #gaia (voir Mozilla IRC pour plus d'informations) ainsi que sur la liste de diffusion dev-gaia.

-
- -

Lancer votre compilation de Gaia

- -
    -
  1. Tout d'abord, faites un fork du dépôt principal de Gaia sur Github.
  2. -
  3. Ensuite, clônez votre fork en local : -
    git clone https://github.com/your-username/gaia.git
    -
  4. -
  5. Ajoutez une remote upstream comme ceci : -
    cd gaia
    -git remote add upstream https://github.com/mozilla-b2g/gaia
    -
  6. -
  7. Vous devez maintenant créer un profil de débogage  de Gaia. Lancez la commande make dans le répertoire de votre dépôt pour créer un profil dans le dossier profile (qui est réglé pour permettre un meilleur débogage). Il créera des versions hébergées (non empaquetées) des applications Gaia, qui pourront être servies directement via le serveur local HTTPD contenu dans une extension Firefox . Ainsi, quand vous effectuez un changement, il suffit juste de rafraîchir la fenêtre du navigateur pour voir le résultat (plutôt que d'avoir à reconstruire le profil, de l'envoyer à l'appareil, etc...). Cette méthode est vraiment pratique pour bidouiller rapidement du CSS/JS/HTML.
  8. -
  9. Une fois votre profil de débogage construit, vous pouvez le lancer dans Mulet ou WebIDE, en suivant les instructions de ces liens.
  10. -
- -

Dépannage et problèmes connus

- -

Erreur: Python executable "python3" is v3.x, which is not supported by gyp.

- -

Avec certaines distributions Linux (ex : Archlinux), la version de python par défaut est python3. Cela fait planter npm en lançant certaines commandes commands (ex : en lançant les tests). Pour résoudre cela une fois pour toute, vous pouvez lancer la commande suivante :

- -
npm config set python python2
- -

Vous pouvez jeter un œil à cette page Stack Overflow pour d'autres solutions.

- -

Vous pouvez maintenant supprimer votre répertoire node_modules et lancer une nouvelle fois la commande ayant échoué.

- -

Please Install NodeJS -- (use aptitude on linux or homebrew on osx)

- -

Vous pouvez rencontrer cette erreur, alors que vous êtes certain d'avoir bien installé nodejs. Il est probable que vous utilisiez Debian ou une distribution basée sur Debian comme Ubuntu. Sur ces distributions, NodeJS est contenu dans le package nodejs, et vous devez installer le package nodejs-legacy pour que tout se déroule correctement :

- -
sudo aptitude install nodejs-legacy
- -

Si vous rencontrer des problèmes pour installer ce package, c'est surement que vous utilisez Le PPA pour NODE de Chris Lea; veillez à le supprimer avant de continuer.

diff --git a/files/fr/archive/b2g_os/developing_gaia/gaia_tools_reference/index.html b/files/fr/archive/b2g_os/developing_gaia/gaia_tools_reference/index.html deleted file mode 100644 index 395f614579..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/gaia_tools_reference/index.html +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: Référence des outils pour Gaia -slug: Archive/B2G_OS/Developing_Gaia/Gaia_tools_reference -tags: - - Firefox OS - - Gaia - - Outils - - Reference - - Référence(2) -translation_of: Archive/B2G_OS/Developing_Gaia/Gaia_tools_reference ---- -

- -
-

Cet article recense quelques outils pratiques pour travailler avec Gaia.

-
- -
-

Remarque : Des trucs et astuces très utiles pour le débogage de Firefox OS sont disponibles sur la page B2G QA Tips and tricks (en anglais).

-
- -

MozITP

- -

MozITP est un paquet tout-en-un regroupant des outils dédiés à Gaia. Il contient un outil de flashage (b2g_util), b2g-installer et un environnement de Test d'Intégration Gaia préconfigurés. Vous pouvez utiliser MozITP pour essayer les Tests d'Intégration Gaia sur Mulet, un émulateur ou sur de véritables appareils. Vous pouvez également flasher des builds à partir de TaskCluster ainsi que des builds sans blobs avec b2g-installer.

- -

Foxbox

- -

Foxbox est un script automatique de construction qui génère un environnement de développement Gaia complet. Cet environnement comprend une version de Gaia hébergée dans une VM, laquelle est également accessible depuis la machine hôte (ce qui signifie que vous pouvez toujours travailler avec pour utiliser votre éditeur de texte préféré, etc.) Cela fonctionne sur toutes les plates-formes, mais devrait surtout être pratique pour les utilisateurs de Windows car la procédure de compilation de Gaia ne fonctionne pas sur un environnement Windows standard.

- -

Outils de sauvegarde/restauration/flashage

- -

Outils pour sauvegarder votre profil, etc.

- -

b2g_util

- -

Le paquet d'outils b2g_util fournit un ensemble d'outils pour vous aider avec le débogage de Firefox OS. Ce paquet permet de :

- - - -

Pour l'installer, vous avez besoin au préalable de Python 2.7, pip, et setuptools. Vous pouvez ensuite lancer :

- -
sudo pip install -U b2g_util
- -

Une fois l'installation terminée, vous pouvez connecter votre appareil et faire un test en exécutant la commande suivante pour obtenir la version de b2g installée :

- -
b2g_check_versions
- -

pc-sync-tool

- -

pc-sync-tool est une application disponible sur le Marketplace Firefox. Elle permet de sauvegarder vos données/profils. Elle s'utilise conjointement avec l'extension Firefox OS assistant pour ordinateur.

- -

Sauvegarde et restauration de profil

- -

Pour sauvegarder et restaurer les données, vous pouvez utiliser notre outil  backup_restore_profile.py, présent dans le dépôt Git B2G-flash-tool.

- -
    -
  1. Cloner le dépôt précité (git clone https://github.com/Mozilla-TWQA/B2G-flash-tool.)
  2. -
  3. S'assurer que le téléphone est branché à l'ordinateur en USB, et que ADB (voir Important steps to follow first ci-dessus) et Debugging via USB (dans les Paramètres développeurs de votre appareil) sont activés.
  4. -
  5. cd dans le répertoire cloné
  6. -
- -

Pour sauvegarder les données :

- -
python backup_restore_profile.py -b
- -

Cela devrait enregistrer le profil de votre appareil dans un répertoire appelé mozilla-profile, situé dans le même répertoire que le script. Pour restaurer votre sauvegarde :

- -
python backup_restore_profile.py -r
- -
-

Remarqe : Pour afficher la liste complète des options de l'outil, exécutez-le avec l'argument -h ou --help.

-
- -

B2G-flash-tool

- -

Le dépôt B2G-flash-tool contient également plusieurs autres outils pour flasher rapidement de nouvelles versions sur les appareils et effectuer d'autres tâches similaires — idéal pour le contrôle qualité. Par exemple :

- - - -

Outils de débogage

- -

Outils pour effectuer des tâches de débogage.

- -

WebIDE

- -

L'outil WebIDE de Firefox mérite une mention spéciale ici — alors qu'il permet de tester et déboguer des applications, il se révèle également utile pour surveiller les performances, l'utilisation de la mémoire, etc. (voir Monitoring performance.)

- -

get_crashreports.sh

- -

Présent dans le dépôt B2G-flash-tool, get_crashreports.sh récupère les rapports de plantage de l'appareil (/data/b2g/mozilla/Crash Reports/.)

- -

Outils du répertoire racine de B2G

- -

Un certain nombre de scripts présents dans le répertoire racine de B2G permettent d'effectuer diverses opérations utiles de débogage, parmi lesquels :

- - - -

Outils divers

- -

D'autres outils utiles se trouvent dans le répertoire gaia/tools/ et dans d'autres endroits

- -

png_recompress.sh

- -

Situé dans gaia/tools/, png_recompress.sh est un outil de compression d'images PNG. Vous pouvez le lancer avec une commande de la forme suivante :

- -
$ ./tools/png_recompress.sh -v bg.png
- -

Cela supprimera les méta-données inutiles et compressera davantage le png ; il peut économiser jusqu'à 99,5% sur la taille du fichier, ce qui aura un impact vraiment significatif sur la taille du ZIP de l'application ainsi que sur l'empreinte mémoire.

- -

svg_recompress.sh

- -

Situé dans gaia/tools/, svg_recompress.sh est un outil de compression SVG.

- -

cache_sync.py

- -

Situé dans gaia/tools/, cache_sync.py synchronise le cache hors-ligne d'une application externe avec une structure arborescente locale. Il faut le lancer depuis le répertoire de base d'une application située dans gaia/external-apps. Il construit un répertoire pour chaque origine connue du cache hors-ligne.

- -

edit_prefs.sh

- -

Situé dans le répertoire racine de B2G, edit_prefs.sh offre une méthode simple pour récupérer les préférences d'un appareil.

- -

 

diff --git "a/files/fr/archive/b2g_os/developing_gaia/guide_version_personnalis\303\251e_gaia/index.html" "b/files/fr/archive/b2g_os/developing_gaia/guide_version_personnalis\303\251e_gaia/index.html" deleted file mode 100644 index a6e6ad438c..0000000000 --- "a/files/fr/archive/b2g_os/developing_gaia/guide_version_personnalis\303\251e_gaia/index.html" +++ /dev/null @@ -1,1311 +0,0 @@ ---- -title: Guide pour créer une version personnalisée de Gaia -slug: Archive/B2G_OS/Developing_Gaia/Guide_version_personnalisée_Gaia -tags: - - Customization - - Firefox OS - - Gaia - - Marketplace - - build -translation_of: Archive/B2G_OS/Developing_Gaia/Market_customizations_guide ---- -
-

Il est possible de créer une version personnalisée (par exemple, choisir les applications intégrées dans la version) sans modifier le cœur du dépôt de Gaia. Vous pouvez ajouter vos éléments de personnalisation dans des dossiers distincts ou bien utiliser les répertoires existants dans le code originale. Les options de construction (build) permettent de spécifier les éléments à personnaliser. Cet article expliquera en détail comment créer et utiliser ces éléments de personnalisation.

-
- -

Aperçu

- -

Depuis la version 1.0.1, Firefox OS utilise le même mécanisme pour apporter les personnalisations. Toutes les fonctionnalités illustrées dans cet article fonctionnent pour Firefox OS 1.0.1 sauf mention contraire.
-
- Une version entièrement personnalisée de Gaia fait partie du dépôt Gaia : vous pouvez explorer les différents aspects de personnalisation sur cette version et/ou suivre cet article.

- -
-

Note : Merci d'envoyer une pull request sur le dépôt Github de Gaia pour toute suggestion permettant d'améliorer cet exemple, ou si vous trouvez des éléments de cet article qui ne sont pas exploités dans ce code.

-
- -

Voici l'arborescence de l'exemple de personnalisation :

- -
  customize-sample
-  ├── power
-  │   ├── carrier_power_on.png
-  │   └── carrier_power_off.png
-  ├── ringtones
-  │   ├── list.json
-  │   └── ringer_dream_theme.ogg
-  ├── wallpapers
-  │   ├── customize.png
-  │   └── list.json
-  ├── browser.json
-  ├── calendar.json
-  ├── contacts.json
-  ├── costcontrol.json
-  ├── device-features.json
-  ├── eu-roaming.json
-  ├── homescreens.json
-  ├── network.json
-  ├── settings.json
-  ├── sms-blacklist.json
-  ├── support.json
-  ├── wapuaprof.json
-  └── apps.list
- -
-

Note : Chacun des fichiers est optionnel. Si vous ne fournissez pas un de ces fichiers, le fichier par défaut sera pris en compte.

-
- -

Chacune de ces personnalisations sera discutée dans la suite. Le paragraphe suivant, quant à lui, explique comment appliquer ces éléments de personnalisation à Gaia.

- -

Les étapes pour appliquer la personnalisation

- -

Pour appliquer l'exemple de personnalisation à Gaia, il faut :

- -
    -
  1. Clôner le dépôt de Gaia depuis https://github.com/mozilla-b2g/gaia.
  2. -
  3. Copier le répertoire gaia/customization/ dans un autre répertoire pour y apporter vos propres adaptations ou bien éditer directement le contenu du répertoire gaia/customization/. Le chemin du répertoire en question sera évoqué par  <DISTRIBUTION_PATH> dans la suite. À chaque exemple, assurez-vous de bien remplacer la variable dans les commandes.
  4. -
  5. Effectuez les changements que vous souhaitez.
  6. -
  7. Connectez un appareil Firefox OS à votre ordinateur par USB, vérifiez que celui-ci est bien reconnu par ADB.
  8. -
  9. Construisez Gaia en spécifiant l'emplacement du répertoire de personnalisation en utilisant la variable d'environnement GAIA_DISTRIBUTION_DIR avec : -
    make production GAIA_DISTRIBUTION_DIR=<DISTRIBUTION_PATH>
    -
  10. -
  11. Vous devriez désormais disposez d'une version personnalisée de Gaia sur votre appareil Firefox OS.
  12. -
- -

Si vous copiez le contenu du répertoire de personnalisation dans gaia/distribution/, vous pouvez lancer la commande make sans la variable d'environnement :

- -
make production
- -
-

Note : Certaines personnalisations ont lieu lors de l'exécution des scripts de construction. Voir la référence des options de make pour les éléments de personnalisation liés aux scripts de construction.

-
- -
-

Note : Les éléments de personnalisation concernant la carte SIM sont inclus lors de la construction. Par contre, ils sont appliqués lors de la phase de première utilisation (FTU pour First Time Usage en anglais).

-
- -

Les personnalisations appliquées lors de la construction

- -

Dans la suite du paragraphe, les différentes options de l'exemple seront illustrées.

- -

power/

- -

Les animations (ou les images fixes) pour les écrans d'allumage/extinction de l'appareil sont à insérer ici. Les fichiers peuvent être des animations MP4 ou des images PNG.

- -

Les noms de fichiers acceptés sont :

- - - -

(carrier_power_on.[png/mp4] sera utilisé lors de l'allumage, carrier_power_off.[png/mp4] sera utilisé lors de l'extinction)

- -

ringtones/

- -

Les sonneries personnalisées peuvent être placées ici. Le fichier list.json doit contenir les noms des fichiers des différentes sonneries, dans le format suivant :

- -
  {
-    "ringer_classic_courier.opus": "",
-    "ringer_dream_theme.ogg": "",
-    "ringer_loud_windchimes.opus": "",
-    "ringer_bitbounce.opus": ""
-  }
- -

Les sonneries personnalisées peuvent être choisies dans les réglages de Firefox OS via Son > Sonnerie. La sonnerie par défaut doit être définie dans settings.json, avec une DataURI. Vous pouvez utiliser la commande datauri pour créer l'URI qui est disponible via Node.js/npm:

- -
    -
  1. Installer l'utilitaire avec la commande npm install datauri -g
  2. -
  3. Convertir le fichier en DataURI avec datauri <FILE>.
  4. -
- -

wallpapers/

- -

Les fonds d'écran par défaut (fichiers PNG) peuvent être placés dans ce dossier et lister dans le fichier list.json. Ils pourront être sélectionné dans les réglages de Firefox OS via Affichage > Fond d'écran.

- -

Le fond d'écran par défaut peut être défini dans le fichier settings.json grâce à la ligne suivante :

- -
"wallpaper.image": "emplacement de l'image"
- -
-

Note : L'image peut être définie grâce à un chemin de fichier ou grâce à une DataURI.

-
- -

browser.json

- -

Ce fichier permet d'ajouter des éléments personnalisés dans l'application Navigateur (par exemple des marque-pages, des moteurs de recherche par défaut). Voir la section Marque-pages et moteur de recherche par défaut pour plus d'informations sur les informations à placer dans ce fichier.

- -

calendar.json

- -

Ce fichier permet d'ajouter vos propres calendrier à l'application Calendrier de Firefox OS. Pour cela, il sera nécessaire de définir vous identifiants Google OAuth. De plus, vous aurez besoin de configuer un accès à l'API CalDav : pour générer la clé d'API et le secret associé, vous aurez besoin de créer votre identifiant client (client au sens informatique). Pour cela, suivez les étapes suivantes :

- -
    -
  1. Ouvrez la console d'API.
  2. -
  3. Créez un projet puis activez Calendar CalDav API dans APIs & auth > APIs (API et authentification > API)
  4. -
  5. Cliquez sur Credentials (Identifiants)
  6. -
  7. Cliquez sur Create new client ID (Créer un nouvel identifiant de client)
  8. -
  9. Définissez le champ Application type (Type d'application) avec Installed application (application installée) et définir Installed application type avec Other (autre) puis cliquez sur Create Client ID (Créer un identifiant client). Vous devriez obtenir un identifiant et un secret de client.
  10. -
  11. Ouvrez le fichier calendar.json, modifiez les valeurs client_id et client_secret avec celles que vous avez obtenues à l'étape précédente. Sauvegardez puis fermez le fichier.
  12. -
- -
-

Note : L'utilisation de l'API est limitée à 1 000 000 (1 millions) de requêtes par jour.

-
- -

camera-config.json (Tailles d'image pour la galerie et l'appareil photo)

- -
{
-  "maxImagePixelSize": 6000000,
-  "maxSnapshotPixelSize": 4000000,
-  "requiredEXIFPreviewSize": {
-    "width": 1200,
-    "height": 1222
-  }
-}
-
- -

maxImagePixelSize et maxSnapshotPixelSize correspondent aux tailles maximales, exprimées en pixels. Par défaut, ces paramètres sont fixés à 5 mega pixels (5x220 pixels 5MP).

- -

Vous pouvez également définir les variables nécessaires pour définir la taille minimale de l'aperçu EXIF qui sera utilisé lors de la prévisualisation plein écran en ajoutant la propriété requiredEXIFPreviewSize. Si vous ne définissez pas cette propriété, la prévisualisation EXIF ne sera faite que lorsqu'elle sera assez grande pour remplir l'écran (en largeur ou en hauteur) en paysage ou en portrait.

- -

contacts.json

- -

Les contacts listés dans ce fichier seront intégrés à la base de données des contacts du téléphone lors de la construction de Gaia.

- -

Voici un exemple de fichier contacts.json :

- -
[
-   {
-     "name": ["Jean Biche"],
-     "givenName": ["Jean"],
-     "familyName": ["Biche"],
-     "nickname": ["Johnny"],
-     "category": ["Travail", "Équipe bowling"],
-     "email": [
-       {
-         "type": ["personal"],
-         "value": "jean.biche@exemple.org",
-         "pref": true
-       },
-       {
-         "type": ["work"],
-         "value": "jbiche@société.com"
-       }
-     ],
-     "adr": [
-       {
-         "type": ["personal"],
-         "streetAddress": "123 Foopy St.",
-         "locality": "San Francisco",
-         "region": "Downtown",
-         "postalCode": "94030",
-         "countryName": "US"
-       }
-     ]
-   },
-   {
-     "name": ["Operateur"],
-     "email": [
-       {
-         "type": ["work"],
-         "value": "support@opérateurx.com"
-       }
-     ],
-     "url": [
-       {
-         "type": ["work"],
-         "value": "https://www.opérateurx.com"
-       }
-     ]
-   }
- ]
- -
-

Note : Voir la page sur l'API Contacts pour plus d'informations sur la structure des objets contacts.

-
- -
-

Note : Pour des personnalisations propres à la carte SIM, lire la section Marque-pages et moteur de recherche par défaut du navigateur.

-
- -

device-features.json

- -

Ce fichier définit les capacités matérielles de l'appareil. Par défaut, le fichier contient :

- -
{
-  "ambientLight": true,
-  "vibration": true,
-  "usbHotProtocolSwitch": false
-}
- -

Pour le capteur de lumière et le vibreur, vous pouvez changer ces valeurs à false si vous souhaitez désactiver certaines fonctionnalités de l'appareil.

- -

eu-roaming.json

- -

Ce fichier contient la liste des opérateurs qui doivent respecter la législation européenne pour l'itinérance des données, ainsi que les APN (Access Point Name) correspondants. Le fichier est composé de trois partie. La première home, contient les codes des opérateurs qui doivent respecter cette législation. La deuxième partie, foreign, contient les codes des opérateurs étrangers pour lesquels une notification devrait être activée lors de l'itinérance des données est active dans ce pays. Enfin, la dernière partie contient le détail pour les APN par défaut dans l'Union européenne. Par défaut, le contenu du fichier est :

- -
{
-  "home": null,
-  "foreign": null,
-  "defaultApns": []
-}
-
- -

Si vous souhaitez que le système d'exploitation affiche une notification lors de l'itinérance des données, le fichier ressemblera à celui présenté ci-dessous. Pour cet exemple, l'utilisateur utilisant une carte SIM d'un opérateur "001, 01" recevra une notification concernant l'itinérance des données quand il utilisera le réseau de l'opérateur dont le code est "002, 02" :

- -
{
-  "home": {
-    "001": {
-      "01": true
-    }
-  },
-  "foreign": {
-    "002": {
-      "02": true
-    }
-  },
-  "defaultApns": [{
-    "apn": "eu.apn",
-    "types": ["default"]
-  }]
-}
-
- -
-

Note : Tous les paramètres des APN listés dans defaultApns apparaîtront également via l'application des Paramètres.

-
- -

homescreens.json

- -

homescreens.json définit les applications à afficher sur la partie principale de l'écran d'accueil et sur les autres pages de l'écran d'accueil, ainsi que l'ordre dans lequel elles sont affichées. Par défaut, le fichier contient :

- -
{"homescreens": [
-   [
-     ["apps", "communications", "dialer"],
-     ["apps", "sms"],
-     ["apps", "browser"],
-     ["apps", "camera"]
-   ]
- ]}
- -

Avec ces informations, les quatres applications décrites seront affichées sur l'écran principal de l'écran d'accueil. Si on ajoute un autre tableau, les applications contenues apparaîtront sur la première page de l'écran d'accueil, l'ensemble suivant apparaîtra sur la deuxième page et ainsi de suite.

- -
{"homescreens": [
-   [ // Écran principal pour l'écran d'accueil
-     ["apps", "communications", "dialer"],
-     ["apps", "sms"],
-     ["apps", "browser"],
-     ["apps", "camera"]
-   ],
-   [ // Page 1 de l'écran d'accueil
-     ["apps", "email"],
-     ["apps", "settings"],
-     ["apps", "clock"],
-     ["apps", "calendar"]
-   ],
-   [ // Page 1 de l'écran d'accueil
-     ["external-apps", "appPerso1"],
-     ["external-apps", "appPerso2"],
-     ["external-apps", "appPerso3"],
-     ["external-apps", "appPerso4"]
-   ]
- ]}
- -

Le premier élément de chaque sous-tableau correspond au nom du répertoire de l'application, le second correspond au nom de l'application et de son répertoire dédié.

- -

Collections

- -
-

Note : Avec Firefox 2.0, le répertoire collections a été déplacé de l'application homescreen vers l'application collections. Certains champs du fichier manifeste ont également été modifiés (voir le fichier de manifeste pour la collection funny par exemple) : provider_id a été modifié en  categoryId, et apps a été modifié en pinned.

-
- -

Les collections sont des groupes d'applications avec leur propre icône qui apparaît sur l'écran d'accueil. Lorsque l'utilisateur touche l'icône, un nouvel écran apparaît et présente l'ensemble des icônes pour les applications contenues dans le groupe. Vous pouvez regarder le contenu du répertoire collections pour voir les collections disponibles par défaut :

- - - -

Dans chacun de ces répertoires, vous trouverez les icônes pour les différentes résolutions ainsi qu'un fichier de manifeste qui définit des méta-données sur la collection comme son nom, son rôle, ainsi que l'emplacement de ces icônes.

- -
-

Note : Des collections supplémentaires sont disponibles sur le serveur E.me (19 collections au total, incluant les 10 collections présentées ci-dessus). Vous pouvez voir ces collections en maintenant une pression sur l'écran d'accueil et en choisissant l'option "Ajouter des collections intelligentes".

-
- -

Dans le fichier homescreens.json, vous pouvez choisir les collections que vous souhaitez charger, les pages sur lesquelles elles doivent apparaître ainsi que l'ordre de leur disposition. Par exemple, si on souhaite faire apparaître les collections shopping, social, sports et tv, on pourra avoir le fichier suivant :

- -
{"homescreens": [
-   [
-     ["apps/collection/collections", "shopping"],
-     ["apps/collection/collections", "social"],
-     ["apps/collection/collections", "sports"],
-     ["apps/collection/collections", "tv"]
-   ], [
-     ["apps", "communications", "dialer"],
-     ["apps", "sms"],
-     ["apps", "browser"],
-     ["apps", "camera"]
-   ]
- ]}
- -

Chaque tableau de plus haut niveau fait référence à une des pages de l'écran d'accueil. Pour cet exemple, les collections apparaîtront sur la page principale (dock) de l'écran d'accueil et les applications individuelles apparaîtront sur la première page de l'écran d'accueil.

- -
-

Note : Par défaut, quatre collections sont utilisées pour la première page de l'écran d'accueil de Gaia : social, games, music et entertainment.

-
- -
-

Note : Les noms des collections sont écrits en minuscules.

-
- -
Le contenu des collections
- -

Les collections sont composées de deux types d'application.
-
- Les applications locales sont définies lors de la construction grâce à une fichier de manifeste situé sous /apps/collection/collections/<nomDeLaCollection>/manifest.collection. Les applications locales contenues dans chaque collection sont définies dans le fichier de manifeste. La collection social (qui contient les applications pour le téléphone, les sms, les contacts et les e-mails) aura le fichier de manifeste suivant :

- -
{
-  "name": "Social",
-  "role": "collection",
-  "provider_id": "289", // identifiant pour la recherche adaptative
-  "apps": [
-    ["apps", "communications", "dialer"],
-    ["apps", "sms"],
-    ["apps", "communications", "contacts"],
-    ["apps", "email"]
-  ],
-  "default_locale": "en-US",
-  "icons": {
-    "60": "/collections/social/icon.png",
-    "90": "/collections/social/icon@1.5x.png",
-    "120": "/collections/social/icon@2x.png"
-  }
- }
- -

Les applications distantes sont fournies par le moteur de recherche adaptative lors de l'exécution et quand l'appareil est connecté.

- -
Traduire les collections
- -

Les traductions pour les collections doivent être définies dans les fichiers de locales pour l'application Écran d'accueil dans le répertoire apps/collection/locales/. Chaque fichier de locale devra avoir un nom structurant avec la structure collections.<codeLangue>.properties — avec <codeLangue> qui vaut, par exemple, fr pour le français. Ce fichier contient des lignes simples qui contiennent les identifiants des chaînes anglaises associées à leur traduction. Voici un exemple pour la locale française :

- -
# Add bookmark to homescreen
-add-to-home-screen=Ajouter à l’écran d’accueil
-add-to-home-screen-header=Ajouter un lien
-website-name=Nom du site web
-address=Adresse
-added-to-home-screen=Ajouté à l’écran d’accueil
-
- -
Collections personnalisées
- -

À partir de Firefox OS 1.3, vous pouvez définir vos propres collections. Pour cela, il suffit de créer la collection dans le répertoire collection, et de les référencer dans le fichier collections.json vu avant.

- -

Les propriétés de l'écran d'accueil vertical

- -

À partir de Firefox 2.0, il est possible de choisir une disposition verticale (plutôt que des pages horizontales) pour l'écran d'accueil. Les propriétés de l'écran d'accueil sont définies dans le fichier default-homescreens.json qui décrit les applications, les collections et les marque-pages à afficher ainsi que le nombre de colonnes pour l'écran d'accueil.

- -

network.json (ce fichier n'apparait pas dans le dossier de personnalisation)

- -
-

Important : Cette personnalisation n'est plus supportée depuis Firefox OS 1.4+.

-
- -

Dans les versions de Firefox OS < 1.4, ce fichier peut être créé dans gaia/apps/settings/resources. Il permet de définir les types de réseaux supportés par l'appareil. Firefox OS fonctionne sur les types de réseaux suivants :

- - - -

Voici un exemple de fichier :

- -
{
-  "types":  [
-    "cdma/evdo",
-    "cdma", "evdo"
-  ]
-}
- -

settings.json

- - - -

Ce fichier permet de définir les valeurs par défaut pour le fond d'écran, les sonneries, l'activation ou non de l'écran de verrouillage, l'activation ou non du bluetooth, etc. Vous pouvez consulter le fichier build/config/common-settings.json pour déterminer les réglages possibles. Par exemple, vous pouvez inclure la ligne "wifi.enabled":false pour désactiver le wifi par défaut.

- -

Les réglages personnalisés sont à placer dans le fichier customization/settings.json.

- -

Fournisseur de recherche par défaut pour la Rocketbar

- -

Dans Firefox OS 2.0 et les versions supérieures, les paramètres suivants peuvent être ajoutés dans le fichier settings.json, pour définir le fournisseur de recherche par défaut pour la Rocketbar :

- -
"search.urlTemplate": "https://www.google.com/search?q={searchTerms}",
-"search.suggestionsUrlTemplate": "https://www.google.com/complete/search?client=firefox&q={searchTerms}",
-"search.iconUrl": "data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB9AQAAJ [TRONQUÉ POUR L'EXEMPLE]
-
- -

Personnaliser le moteur de recherche

- -

À partir de Firefox 2.0+, il existe une liste par défaut pour les différents moteurs de recherches et les fichiers d'icônes associés : apps/settings/resources/search/providers.json. Vous pouvez configurer cette liste lors de la construction en éditant le fichier customization/search/providers.json et en ajoutant les fichiers d'icônes appropriés dans le même répertoire. Le contenu de ce répertoire écrasera app/settings/resources/search s'il existe et si vous avez lancé la construction avec la commande make production GAIA_DISTRIBUTION_DIR=customization.

- -

Personnaliser les applications par défaut de l'écran d'accueil

- -

homescreen.appName vous permet de définr des applications comme applications par défaut pour l'écran d'accueil.

- -
{ "homescreen.appName": "homescreen-stingray" }
-
- -

sms-blacklist.json

- -

Ce fichier contient une liste finie de numéros de téléphone pour lesquels il ne sera pas possible d'envoyer des SMS. Cette liste surchargera le fichier blacklist.json de l'application SMS si elle existe. Les numéros de téléphone sont définis dans un tableau comme suit :

- -
["11223344", "55667788"]
- -

cellbroadcast

- -

Canaux d'écoute :

- - - -

Désactiver le rapport d'événement :

- - - -
-

Note : Les paramètres par défaut sont disponibles dans le fichier operator_variant.xml.

-
- -

support.json

- -

Ce fichier contient des contacts pour l'assistance (en ligne ou téléphonique). Lorsque ce fichier est renseigné, il écrasera le fichier support.json contenu dans l'application Paramètres. Pour conserver les contacts par défaut, il faudra les copier du fichier original sur le fichier de personnalisation puis ajouter vos nouveaux contacts.

- -

Voici un exemple de fichier JSON :

- -
{
-   "onlinesupport": {
-     "href": "http://support.mozilla.org/",
-     "title": "Mozilla Support"
-   },
-   "callsupport": [
-     {
-       "href": "tel:12345678",
-       "title": "Assistance tél. 1"
-     },
-     {
-       "href": "tel:87654321",
-       "title": "Assistance tél. 2"
-     }
-   ]
- }
- -

Profil pour l'agent utilisateur WAP (wapuaprof.json)

- -

Le profil d'agent utilisateur WAP peut surcharger l'agent utilisateur lors de l'envoi de paquets WAP. Si vous souhaitez surcharger le profil d'agent utilisateur (user agent profile) par défaut avec des informations MCC/MNC, vous pouvez utiliser ce fichier (voir les explications supplémentaires dans runtime customization).

- -

apps.list

- -

Ce fichier vous permet de définir les applications que vous souhaitez charger à l'exécution (de façon semblable à variant.json, comme expliqué ci-après dans le paragraphe Applications). Les applications sont listées de la façon suivante :

- -
apps/*
-external-apps/*
-outoftree_apps/*
- -

Vous pouvez lister des applications spécifiques plutôt que des répertoires entiers :

- -
apps/email
-apps/settings
- -
-

Note : Si vous souhaitez ajouter des applications externes dans votre version de Gaia, vous devrez les construire d'une certaine façon et les placer dans le répertoire gaia/external-apps/. Lire le paragraphe Building Prebundled web apps pour plus d'informations à ce sujet.

-
- -
-

Important : Si vous distribuez une version adaptée de Firefox OS avec des applications externes intégrées, vous devez respecter l'accord de distribution avec Mozilla (Mozilla's Distribution Agreement).

-
- -

Les autres options de personnalisation

- -

D'autres aspects de Gaia peuvent être personnalisés. C'est aspects sont décrits ici.

- -
-

Note : Le script de construction utilisé pour la plupart des paragraphes suivants est gaia/build/applications-data.js. Il est copié dans un fichier init.json qui se situe dans le répertoire de l'application du navigateur lors de la construction.

-
- -

Marque-pages et moteurs de recherche par défaut du navigateur

- - - -

Les marque-pages et moteurs de recherche par défaut peuvent être personnalisés lors de la construction et on peut avoir différentes variantes pour chacun des pays au sein d'une même version. Les données personnalisées sont insérées dans l'application du navigateur la première fois qu'il est lancé en fonction des codes MCC / MNC de la carte SIM de l'appareil à ce moment.

- -
-

Note : Les marque-pages peuvent être personnalisés depuis la version 1.0.1 de Firefox OS mais la procédure a été modifiée avec la version 2.1 (ce qui est expliqué dans le paragraphe suivant). Les moteurs de recherches peuvent être personnalisés à partir de Firefox OS 1.2.

-
- -

L'exemple ci-après (browser.json) illustre une configuration pour l'opérateur Vivo au Brésil (724006 avec 724 pour le Brésil et 006 pour Vivo selon la codification MCC / MNC), ainsi que le cas par défaut (000000) présent au cas où la carte SIM ne correspondrait pas à l'opérateur ou au cas où la carte SIM est absente de l'appareil.

- -
content = {
-   '000000': {
-     'bookmarks': [
-       { 'title': 'Mozilla',
-         'uri': 'https://mozilla.org',
-         'iconUri':
-           'data:image/png;base64,AAABAAIAEBAAAAEAIABo[tronqué]'
-       },
-       { 'title': 'Firefox OS',
-         'uri': 'https://mozilla.org/firefoxos',
-         'iconUri':
-           'data:image/png;base64,AAABAAIAEBAAAAEA[tronqué]'
-       }
-     ],
-     'searchEngines' : [
-        {
-          'title': 'Google',
-          'uri': 'https://www.google.com/search?q={searchTerms}',
-          'iconUri':
-            'data:image/png;base64,AAABAAIAEBAAAAEAIABoBAA[tronqué]'
-        }
-      ],
-      'settings' : {
-        'defaultSearchEngine': 'https://www.google.com/search?q={searchTerms}'
-      }
-   },
-
-   '724006': {
-     "bookmarks": [
-       { "title": "Vivo Busca",
-         "uri": "https://www.google.com.br/m/search",
-         "iconUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC[tronqué]"
-       },
-       { "title": "Serviços e Downloads",
-         "uri": "http://vds.vivo.com.br",
-         "iconUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACA[tronqué]"
-       },
-       {
-         "title": "Site Vivo",
-         "uri": "http://www.vivo.com.br/conteudosmartphone",
-         "iconUri": "data:image/jpg;base64,/9j/4AAQSkZJRg[tronqué]"
-       }
-     ],
-     'searchEngines' : [
-        {
-          'title': 'Yahoo',
-          'uri': 'https://search.yahoo.com/search?q={searchTerms}',
-          'iconUri':
-            'data:image/png;base64,AAABAAIAEBAAAAEAIABoBAA[tronqué]'
-        }
-      ],
-      'settings' : {
-        'defaultSearchEngine': 'https://search.yahoo.com/search?q={searchTerms}'
-      }
-   }
- };
- -

Pour cet exemple, si la carte SIM de l'appareil est une carte de l'opérateur Vivo au Brésil, lors de la première utilisation, l'utilisateur verra les marque-pages Vivo et aura Yahoo comme moteur de recherche par défatu. Si une autre carte (ou aucune carte) est présente dans l'appareil lors de la première utilisation, l'utilisateur verra les marque-pages Mozilla ainsi que le moteur de recherche Google. Plusieurs aspects importants sont à noter :

- - - -
-

Note : L'application du navigateur affichera les marque-pages dans le sens opposé (ex : le premier marque-page du fichier JSON sera affiché en dernier, etc.).

-
- -

Personnalisation de la liste des fournisseurs de recherche pour la Rocketbar

- -
    -
  1. Il est également possible d'adapter le fournisseur de recherche par défaut (et la liste des fournisseurs) pour la Rocketbar. Cette personnalisation se base également sur les codes MCC/MNC. Pour définir les fournisseurs de recherche, il faut modifier deux fichiers JSON : -
      -
    • La liste des fournisseurs par MCC/MNC qui est définie dans le fichier mobizilla_search.json pour notre exemple,
    • -
    • Le fournisseur de recherche par défaut pour la Rocketbar qui est défini dans le fichier mobizilla_default_search.json pour notre exemple.
    • -
    -
  2. -
  3. variant.json définit ensuite les fichiers .json à utiliser pour chaque paire MCC/MNC. Ainsi, dans notre exemple, aux lignes 47 et 48, on a : -
    "search": "mobizilla/mobizilla_search.json",
    -"default_search": "mobizilla/mobizilla_default_search.json",
    -
  4. -
  5. variant.json doit être placé dans le répertoire racine consacré à la distribution de votre version.
  6. -
  7. Afin d'appliquer cette configuration, pour la construction de Gaia la variable GAIA_DISTRIBUTION_DIR doit correspondre au chemin de votre répertoire consacré à la distribution de votre version.
  8. -
- -

Réglages pour les données et les messages

- -

Il est possible d'adapter les réglages pour les données et les messages lors de l'exécution.

- -

Pour ajouter des réglages spécifiques, il suffit d'éditer gaia/shared/resources/apn/apns_conf_local.xml en ajoutant ou en éditant des bloc pour chaque opérateur téléphonique :

- -
 <apn carrier="Réseau Test"
-      mcc="001"
-      mnc="01"
-      apn="internet"
-      user="user"
-      password="password"
-      proxy="127.0.0.1"
-      port="8080"
-      mmsc="http://127.0.0.1"
-      mmsproxy="127.0.0.1"
-      mmsport="8080"
-      authtype="0"
-      type="default,supl,mms"
-  />
- -

Réglages concernant la messagerie et la diffusion cellulaire

- -

Pour appliquer des changements spécifiques à la boîte vocale et à la diffusion cellulaire, il suffit de modifier le fichier gaia/shared/resources/apn/operator_variant.xml en ajoutant ou en éditant des blocs pour les opérateurs de la forme suivante :

- -
   <operator carrier="Réseau Test avec variante par opérateur"
-       mcc="001"
-       mnc="01"
-       cellBroadcastSearchList="0,1,2,3"
-       voicemail="999999"
-   />
- -

Profil de l'agent utilisateur WAP

- -

Le profil d'agent utilisateur WAP peut également être personnalisé lors de l'exécution et surcharge les informations de l'agent utilisateur lorsque le téléphone envoie des paquets WAP. En fonction des codes MCC/MNC, le profil peut être personnalisé grâce aux propriétés url et tagname . L'implémentation actuelle ne tient compte que de la propriété url.

- -

Le profil d'agent utilisateur WAP utilise ici le même format que pour l'application Navigateur. "000000" est utilisé comme profil par défaut. Voici un exemple :

- -
   {
-     "000000": {
-       "url": "http://example.url/default.xml"
-     },
-     "123001": {
-       "url": "http://example.url/custom123001.xml"
-     }
-   }
- -

Pour cet exemple, l'URL du profile par défaut est http://example.url/default.xml ; pour les codes MCC = 123 et MNC = 001, l'URL sera http://example.url/custom123001.xml. S'il y avait une autre carte dont les codes seraient MCC = 123 et MNC = 100, l'URL utilisée serait alors http://example.url/default.xml.

- -

Si jamais l'élément dont le code est 000000 était retiré :

- -
  {
-     "123001": {
-       "url": "http://example.url/custom123001.xml"
-     }
-   }
- -

le profil utilisé par la carte dont les codes sont MCC = 123 et MNC = 001 serait désormais basé sur http://example.url/custom123001.xml. Les profils des autres codes ne seraient pas surchargés.

- -

Si on gardait "000000" et que "123001" ne possèdait pas d'URL :

- -
   {
-     "000000": {
-       "url": "http://example.url/default.xml"
-     },
-     "123001": {}
-   }
- -

tous les profils seraient surchargés avec l'URL http://example.url/default.xml

- -

Applications

- -

Les applications installées dans Firefox OS peuvent être adaptées lors de l'exécution (voir personnaliser les applications présentes lors de la construction). Pour personnaliser les applications en fonction de l'opérateur, il est possible d'utiliser le fichier variant.json pour déterminer quelles applications installer et comment les placer sur l'écran d'accueil. Les applications tierces seront ajoutées à la liste avec les applications standard.

- -

La portion intéressante du fichier variant.json ressemblera à cela :

- -
   {
-     "apps": {
-       "puzzle":
-         {
-           "manifestURL": "https://owd.tid.es/store/packages/fe8e4a866c518a42db9d2041568684c1.webapp"
-         },
-       "store":
-         {
-           "manifestURL": "https://owd.tid.es/store/manifest.webapp",
-           "installOrigin": "https://www.openwebdevice.com"
-         }
-     },
-     "operators": [
-       {
-         "id": "movistar-co",
-         "mcc-mnc": [
-           "214-01",
-           "214-02"
-         ],
-         "apps": [
-           {
-             "id": "store",
-             "screen": 0,
-             "location": 2
-           }
-         ]
-       },
-       {
-         "id": "movistar-mx",
-         "mcc-mnc": [
-           "215-23"
-         ],
-         "apps": [
-           {
-             "id": "store",
-             "screen": 0,
-             "location": 2
-           },
-           {
-             "id": "puzzle"
-           }
-         ]
-       }
-     ]
-   }
- - - -

Les autres personnalisations utilisant un fichier de variante

- -

Le fichier variant.json (le même que précedemment) permet également de configurer des ressources spécifiques grâce à des attributs relatifs à chaque opérateurs. Un opérateur pourra avoir les réglages suivants :

- -
   {
-     "apps": {
-       ...
-     },
-     "operators": [
-       {
-         "id": "movistar-co",
-           "mcc-mnc": [
-             "214-01",
-             "214-02"
-           ],
-         "apps": [
-           {
-             "id": "store",
-             "screen": 0,
-             "location": 2
-           }
-         ],
-         "support_contacts": "resources/support_contacts_movistar.json",
-         "default_contacts": "resources/contacts_movistar.json",
-         "ringtone": {
-           "path": "resources/Movistar_Mid_ABR_128kbps.ogg",
-           "name": "Tono Movistar"
-         },
-         "wallpaper": "resources/customize.jpg",
-         "keyboard": "resources/keyboard_movistar.json",
-         "network_type": "resources/network_type_movistar.json",
-         "known_networks": "resources/known_networks_movistar.json",
-         "data_ftu": true,
-         "sms": "resources/sms_movistar.json",
-         "topsites": "resources/topsites_movistar.json",
-         "bookmarks": "resources/bookmarks_movistar.json",
-         "data_roaming": true,
-         "power": {
-           "poweron": {
-             "video": "app://operatorresources/resources/power/latam_power_on.mp4"
-           },
-           "poweroff": {
-             "video": "resources/latam_power_off.mp4"
-           }
-         },
-         "nfc": true
-       }
-       ...
-     ]
-   }
-
- -

Les différents réglages présentés dans le fichier sont détaillés ci-après :

- -

Contacts d'assistance

- -

La propriété support_contacts correspond à un chemin vers un fichier qui contiendra les contacts affichés sur l'écran d'aide (Paramètres > Aide). Cela permet d'avoir les mêmes fonctionnalités que support.json. Le format du fichier attendu à l'emplacement indiqué est le suivant :

- -
   {
-     "onlinesupport": {
-       "title": "Assistance Mozilla",
-       "href": "http://test.mozilla.org/support"
-     },
-     "callsupport1": {
-       "title": "Assistance téléphonique (1)",
-       "href": "tel:14155550001"
-     },
-     "callsupport2": {
-       "title": "Assistance téléphonique (2)",
-       "href": "tel:14155550002"
-     }
-   }
- -

Contacts par défaut

- -

La propriété default_contacts correspond au chemin vers un fichier qui définit les contacts qui seront préchargés dans l'application Contacts en fonction des codes MCC/MNC. Les noms des différentes sections du fichier seront les codes MCC/MNC, chaque section contient un ensemble de contacts (au même format que pour contacts.json). Par exemple :

- -
    {
-        "123123":
-        [
-            {name: ["Jean Biche"]},
-            // etc
-        ],
-    }
-
- -

Sonnerie

- -

La propriété ringtone permet de définir la sonnerie par défaut. Cet objet contient deux propriétés obligatoires :

- - - -

Fond d'écran

- -

La propriété wallpaper contient le chemin vers le fichier image (PNG) qui sera utilisé comme fond d'écran par défaut.

- -

Paramètres clavier

- -

La propriété keyboard contient le chemin vers un fichier qui contient les informations de configuration pour le clavier. Le format du fichier attendu est le suivant :

- -
 {
-   "keyboard.vibration": true,
-   "keyboard.autocorrect": false,
-   "keyboard.clicksound": true,
-   "keyboard.wordsuggestion": false
- }
- -

Indicateurs de réseau

- -

La propriété network_type contient le chemin d'un fichier qui contient le texte à utiliser lorsqu'un type de réseau est utilisé par l'appareil. Ce texte apparaîtra dans l'application Réglages, la barre de statut et les réglages rapides.

- -

La barre de statut et les occurences dans l'application Réglages utiliseront le texte contenu dans le fichier. Pour l'écran des réglages rapides, le fichier devra contenir une clé intitulée  data_sprite qui pointe vers un sprite CSS qui contient les icônes pour les différents types de réseaux supportés.

- -

La propriété data_sprite doit correspondre à une URL qui pointe vers une application de l'appareil. Voici un exemple pour un tel fichier :

- -
 {
-  "lte": "4G",
-  "ehrpd": "4G",
-  "hspa+": "H+",
-  "hsdpa": "H",
-  "hsupa": "H",
-  "hspa": "H",
-  "evdo0": "E",
-  "evdoa": "E",
-  "evdob": "E",
-  "1xrtt": "1x",
-  "umts": "3G",
-  "edge": "E",
-  "is95a": "2G",
-  "is95b": "2G",
-  "gprs": "2G",
-  "wcdma/gsm": "2G/3G GSM auto",
-  "gsm": "2G GSM",
-  "wcdma": "3G GSM",
-  "wcdma/gsm-auto": "2G GSM Preferred",
-  "cdma/evdo": "2G/3G CDMA auto",
-  "cdma": "2G CDMA",
-  "evdo": "3G CDMA",
-  "wcdma/gsm/cdma/evdo": "2G-3G GSM/CDMA auto",
-  "data_sprite": "app://operatorresources/resources/quick_settings/images/data-sprite-latam.png"
- }
- -

SSID WiFi pré-paramétrés

- -

La propriété known_networks contient un chemin vers un fichier qui liste différents réseaux WiFi. Voici un exemple de fichier :

- -
 {
-  "OPEN": {
-    "ssid": "OPEN"
-  },
-  "WEP-WITHOUTKEY": {
-    "ssid": "wifi-WEP-WITHOUTKEY",
-    "keyType": "WEP"
-  },
-  "WEP_KEY": {
-    "ssid": "WEP-KEYOK",
-    "keyType": "WEP",
-    "capabilities": "",
-    "password": "constrasenya1"
-  },
-  "WEP_KEYOK_WPS": {
-    "ssid": "WEP-KEYOK-WPS",
-    "keyType": "WEP",
-    "capabilities":"WPS",
-    "password": "constrasenya1"
-  },
-  "wpa": {
-    "ssid": "macaFirefoxHotspot",
-    "keyType": "WPA-PSK"
-  },
-  "WPA-PSK_KEY": {
-    "ssid": "WPA-PSK-KEYOK",
-    "keyType": "WPA-PSK",
-    "capabilities":"",
-    "password": "constrasenya1"
-  },
-  "WPA-PSK_KEY_WPS": {
-    "ssid": "WPA-PSK-KEYOK-WPS",
-    "keyType": "WPA-PSK",
-    "capabilities":"WPS",
-    "password": "constrasenya1"
-  },
-  "WPA-EAP-PSK_WITHOUTEAP": {
-    "ssid": "WPA-EAP-WITHOUTKEY",
-    "keyType": "WPA-EAP"
-  },
-  "WPA-EAP_SIM": {
-    "ssid": "WPA-EAP-SIM",
-    "keyType": "WPA-EAP",
-    "eap": "SIM",
-    "password": "constrasenya1"
-  },
-  "WPA-EAP-KEYOK-WPS": {
-    "ssid": "WPA-EAP-KEYOK-WPS",
-    "keyType": "WPA-EAP",
-    "eap": "PEAP",
-    "capabilities": "WPS",
-    "password": "constrasenya1",
-    "identity": "HI\\usr"
-  },
-  "WPA-EAP-KEYOK-CAPOK-PHASE2-OK": {
-    "ssid": "WPA-EAP-KEYOK-CAPOK-PHASE2",
-    "keyType": "WPA-EAP",
-    "eap": "PEAP",
-    "capabilities":"WPS",
-    "phase2": "PAP",
-    "password": "constrasenya1",
-    "identity": "HI\\usr"
-  }
- }
- -

Activation/Désactivation des données par défaut lors de l'expérience de première utilisation

- -

L'attribut data_ftu définit si oui ou non les données sont activées pendant l'expérience de première utilisation (FTU pour First Time Use). Cette propriété est une valeur booléenne.

- -

Nombre maximum de SMS à convertir en MMS

- -

sms contient le chemin vers un fichier permettant de paramétrer les aspects relatifs aux SMS. Actuellement le seul attribut présent correspond au nombre de SMS pouvant être convertis en MMS. Par exemple :

- -
 {
-  "smsMaxConcat": 9
- }
- -

Initialiser les sites les plus visités du navigateur

- -

La propriété topsites contient le chemin vers un fichier qui liste les sites à faire apparaître. Un objet de ce tableau contient la propriété title (chaîne de caractères), uri (l'url) et iconPath. Voici un fichier d'exemple :

- -
{
-  "topsites": [
-    {
-      "title": "Movistar",
-      "uri": "http://www.movistar.es",
-      "iconPath": "resources/movistar.ico"
-    }
-  ]
-}
- -

Marque-pages

- -
-

Note : Pour plus d'informations sur la personnalisation des marque-pages pour les versions antérieures de Firefox OS, voir le paragraphe Browser bookmarks and default search engines.

-
- -

bookmarks contient le chemin d'un fichier listant les objets marque-pages. Un objet correspondant à un marque-page contient trois paramètres : title, pour le titre, uri, pour l'URL du site marqué et iconPath pour l'icône à afficher sur le téléphone. Par exemple :

- -
{
-  "bookmarks": [
-    {
-      "title": "Google",
-      "uri": "http://www.google.es",
-      "iconPath": "resources/google.ico"
-    }
-  ]
-}
- -

Activation/Désactivation de l'itinérance des données par défaut

- -

L'attribut data_roaming permet de définir si oui ou non l'itinérance des données est activée par défaut. C'est un booléen (sa valeur est true ou false).

- -

Animation à l'allumage/extinction

- -

Les animations d'allumage/extinction sont configurées grâce à un objet qui sera la valeur de la propriété power. Cet objet possède deux propriétés : la première concerne l'animation à utiliser quand le téléphone est démarré (poweron), la seconde correspond à l'animation à utiliser lorsque le téléphone s'éteind. Chacune de ces propriétés contient une clé permettant d'identifier la ressource à utiliser. Cette clé correspond à la propriété video dont la valeur est le chemin vers la ressource à utiliser. Ce chemin peut être local, relativement au système de fichier à utiliser lors de la construction (par exemple : resource/unfichier.png) ou une URI vers un fichier contenu dans une application Gaia qui sera installée sur l'appareil (par exemple : app://nom.domaine/chemin/vers/video.mp4).

- -

Voici un exemple d'objet power :

- -
"power": {
-  "poweron": {
-    "video": "app://operatorresources/resources/power/latam_power_on.mp4"
-  },
-  "poweroff": {
-    "video": "resources/Power_off_test.mp4"
-  }
-}
- -

Activation/Désactivation du NFC par défaut

- -

L'attribut nfc booléen définit si oui ou non le NFC (Near Field Communication ou Communication en champ proche) est activé par défaut.

- -

Construire des applications web pré-empaquetées

- -

Dans cet article, nous avons vu comment utiliser le fichier apps.list pour installer des applications intégrées à votre version. Ces applications doivent être construites selon un certain procédé puis ajoutées au répertoire gaia/external-apps.
-
- Pour construire des applications web pré-empaquetées, vous devrez utiliser le script preload-app-toolkit qui permet de construire une application à partir d'une URL .webapp. Ce script peut également accepter les manifestes pour les applications web hébergées et les mini-manifestes pour les applications empaquetées.

- -

Empaqueter une seule application

- -

Déterminez l'URL .webapp correspondant à l'application que vous voulez empaqueter puis lancez la commande suivante :

- -
python preload.py http://<url de l'application>
- -

Cela génèrera un répertoire dont le nom sera celui de l'application web (par exemple accuweather).

- -

Empaqueter plusieurs applications (traitement en lots)

- -

Pour traiter plusieurs applications à la suite, vous pouvez créer un fichier list, contenant l'ensemble des noms des applications et des URL .webapp correspondantes et que vous souhaitez empaqueter. Le fichier ressemblera à celui-ci :

- -
premiereAppli,https://www.premiereappli.com/manifest.webapp
-deuxièmeAppli,https://www.deuxiemeappli.com/manifest.webapp
-
- -

Ce fichier devra être sauvegardé sous le nom list et faire partie du même répertoire que le script preload.py. Vous pouvez ensuite lancer la commande suivante :

- -
$ python preload.py
- -

Le script preload.py analysera le fichier fourni et traitera l'ensemble des applications à la suite.

- -

Le fichier metadata.json pour les applications pré-empaquetées

- -

Chaque application web pré-empaquetée devrait contenir un fichier metadata.json  au sein de son répertoire racine. Le Marketplace Firefox a besoin de ce fichier metadata.json pour gérer les mises à jour automatiques. Ce fichier est généré automatiquement par le script preload.py.
-
- Pour une application web hébergée, les propriétés du fichier metadata.json sont :

- - - -

Pour une application empaquetée, les propriétés de metadata.json seront :

- - - -

Mises à jour automatique des applications empaquetées : le format update.webapp

- -

Les applications empaquetées possèdent un fichier update.webapp utilisé pour les mises à jour automatiques. Le format de ce fichier est semblable à celui de manifest.webapp, mais possède certains attributs supplémentaires :

- - - -
  {
-    "name": "Game Pack",
-    "icons": {
-      "60": "/icon-60.png",
-      "128": "/icon-128.png"
-    },
-    "version": "1.1.2",
-    "package_path": "/application.zip",
-    "developer": {
-      "url": "http://abc.com",
-      "name": "abc Inc."
-    },
-    "release_notes": "2nd release",
-    "locales": {
-      "es": {
-        "launch_path": "/index-es.html",
-        "description": "show me customization."
-      }
-    },
-    "size": 5460141
-  }
- -

Application pré-empaquetée au format AppCache

- -

Si le fichier manifest.webapp possède un attribut appcache_path inclus, le script preload.py ira chercher le fichier AppCache utilisé et ira « pré-chercher » (prefetch) les ressources décrites dans le fichier AppCache. Les applications pré-empaquetée AppCache sont légèrement différentes et Gecko les reconnaîtra dans un format différent. Cela est géré par le script preload.py.

- -

La structure des fichiers traduits sera la suivante :

- -
    <app name>
-       ├── manifest.webapp
-       ├── metadata.json
-       └── cache
-             ├── manifest.appcache
-             └── <resources>
-
- -
-

Note : Si le fichier AppCache est nommé différemment dans appcache_path, il devra être renommé en manifest.appcache puis enregistré dans le répertoire cache.

-
- -

FAQ

- -

La liste qui suit regroupe les réponse aux questions fréquemment posées sur la personnalisation de Gaia :

- -

Qu'est-ce qui peut être personnalisé ?

- - - -

Comment définir une disposition des applications personnalisée ?

- -

Cette disposition est définie actuellement dans gaia/apps/homescreen/js/init.json. customize.py génèrera la construction au bon format.

- -

Est-il possible de définir si une application peut être retirée de l'écran d'accueil avec la configuration ?

- -

Non. Les applications de /system/b2g ne peuvent pas être retirées, celles contenues dans /data peuvent être retirées. Les applications préchargées provenant de /system, elles doivent être déplacées sous /data si on veut les retirer.

- -

Comment ajouter une application empaquetée préchargée ou une application hébergée à la construction ?

- -

Ces applications doivent être ajoutées à gaia/external-apps. customize.py permetttra de gérer les URL pour les applications empaquetées et hébergées puis téléchargera les fichiers à l'emplacement adéquat puis créera metadata.json. Ce fichier servira lors de la construction.

- -

Les méta-données permettront de différencier les applications empaquetées des applications hébergées.

- -

Voir Building Prebundled web apps pour plus de détails.

- -

Comment préparer une application hébergée préchargée pour qu'elle fonctionne hors ligne ?

- -

Pour cela, il faut fournir les fichiers à fournir en cache dans le répertoire external-apps/MON_APPLICATION/cache, avec le manifeste AppCache.

- -

Voir Building Prebundled web apps pour plus de détails.

- -

Quelles adaptations peuvent être effectuées pour le Marketplace ?

- - - -

D'autres problématiques sont à gérer selon les régions ou les opérateurs. Voir la page Ajouter des régions ou des opérateurs pour plus de détails.

- -

Comment enregistrer les modifications apportées ?

- -

Il suffit de sauvegarder uniquement les fichiers modifiés dans les différents emplacements. À l'heure actuelle, plusieurs répertoires sont utilisés au sein du système de fichiers. Pour la version 2 de B2G, ces fichiers pourront être amenés à être stockés dans un seul emplacement (de façon similaire aux répertoires des différentes marques pour Gecko).

- -

Comment construire le produit avec une configuration spécifique ?

- -

Copiez les fichiers modifiés dans une branche de Gaia puis lancez la construction. Pour cela, vous pouvez utiliser customize.py qui, via une interface utilisateur, vous aidera à activer ou non les différentes options, à créer les fichiers adéquats aux bons emplacements puis à construire le profil depuis Gaia.

- -

Comment personnaliser l'animation d'allumage/extinction ?

- - diff --git a/files/fr/archive/b2g_os/developing_gaia/index.html b/files/fr/archive/b2g_os/developing_gaia/index.html deleted file mode 100644 index b1d7092f1b..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Développer pour Gaia -slug: Archive/B2G_OS/Developing_Gaia -tags: - - Bugs - - Firefox OS - - Gaia - - Mozilla - - 'l10n:priority' -translation_of: Archive/B2G_OS/Developing_Gaia ---- -
-

Gaia comprend l'interface utilisateur de Firefox OS Gaia ainsi qu'un ensemble d'applications de base comme : l'écran de verrouillage, l'écran d'accueil, le clavier téléphonique, etc. Sur le fond, Gaia est un ensemble complexe d'applications web fonctionnant sur la plate-forme Firefox OS. Cette série d'articles illustre tous les aspects que vous devez connaître pour contribuer au projet Gaia.

-
- -

Dans ce guide, nous verrons les étapes pour contribuer à Gaia : apporter de nouvelles fonctionnalités à Gaia et/ou corriger des bugs qui concernent le projet Gaia. Le premier ensemble d'articles peut être lu dans l'ordre pour une introduction complète, ou bien, vous pouvez aller directement à la section qui vous intéresse pour un sujet en particulier.

- -

Les sections suivantes aborderont des documents de références ainsi que des informations supplémentaires sur des sujets connexes.

- -

Écran d'accueil de Gaia en français

- -

Les bases

- -
    -
  1. Faire fonctionner le code de Gaia
  2. -
  3. Comprendre le code de Gaia
  4. -
  5. Ajouter des modifications au code de Gaia
  6. -
  7. Tester des modifications du code de Gaia
  8. -
  9. Soumettre un correctif pour Gaia
  10. -
- -

Références des outils de construction pour Gaia

- - - -

Voir aussi

- - - -

 

- -

- -
-

Rejoignez la communauté Gaia

-
-
Choisissez votre méthode préférée pour rejoindre la discussion :
- -
-
- -
-
-

diff --git a/files/fr/archive/b2g_os/developing_gaia/localiser_firefox_os/index.html b/files/fr/archive/b2g_os/developing_gaia/localiser_firefox_os/index.html deleted file mode 100644 index 564b9d653d..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/localiser_firefox_os/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Localiser Firefox OS -slug: Archive/B2G_OS/Developing_Gaia/Localiser_Firefox_OS -translation_of: Archive/B2G_OS/Developing_Gaia/Localizing_B2G_OS ---- -
-

Dans ce guide, nous vous montrerons qu'il est très facile de localiser Firefox OS et plus spécifiquement l'interface Gaia et les applications. Nous commencerons par vous aider à paramétrer votre ordinateur, puis comment traduire les chaines de Gaia et enfin comment effectuer des tests l10n sur votre travail.

-
- -
-

A Noter: Ceci est un guide pour traducteurs voulant aider à traduire Firefox OS. Les développeurs voulant écrire des application traduisibles doivent débuter avec Traduire des application Firefox OS(en anglais), et ensuite regarder Bonnes pratiques L10n(en anglais).

-
- -

Récupérer les outils

- -

Afin de pouvoir récupérer les fichiers sources de Gaia et tester votre localisation sur votre ordinateur, vous devrez vous assurer d'avoir les outils et langages de programmation installés dessus :

- -
-
GNU make
-
make est un petit outil très pratique pour créer des compilations à partir de code source. Il sera pratique quand vous serez prêt à tester votre travail de l10n sur votre ordinateur. Télécharger et installer make est facile et peut se faire directement à partir du site de GNU. Si vous utilisez Mac OS X, vous aurez besoin d'installer XCode et les outils de ligne de commande d'XCode à partir de l'App Store.
-
git
-
git est un système de gestion de versions décentralisé utilisé pour stocker le code source de Gaia activement développé. Télécharger et installer git est facile et peut se faire directement via leur site web.
-
Python
-
Python est un langage de programmation qui vous aidera aussi à créer des compilations de Firefox OS pour tester la localisation. Télécharger et installer Python est facile et peut se faire directement via leur site web.
-
Mercurial (hg)
-
Mercurial (hg) est un autre système de gestion de version qui contient les versions stables de Gaia utilisées pour la l10n, ainsi que les dépôts de locale. Télécharger et installer Mercurial est facile et peut se faire directement via leur site web.
-
compare-locales
-
compare-locales est un script Python qui aide les traducteurs à évaluer leur travail et à séparer le nouveau contenu à localiser du contenu déjà localisé (C'est un diff). Télécharger et installer compare-locales est facile et peut se faire directement à partir de la page wiki compare-locales. Cela est nécessaire seulement si vous localisez Gaia en utilisant seulement la ligne de commande ou un éditeur de texte. Si vous utilisez un outil comme Pootle, Transifex, ou Pontoon, vous n'avez pas besoin de cet outil.
-
- -

Mis en place d'un dépôt local

- -

Après avoir téléchargé et installé les logiciels de la liste ci-dessus, il est temps d'obtenir les sources et les chaines localisées sur votre ordinateur.

- -
    -
  1. Dans votre outil de ligne de commande, naviguez vers l'emplacement où vous stockerez les sources de Gaia et les chaines localisées.
  2. -
  3. En utilisant hg, clonez le dépôt en-US dans l'emplacement par défaut en entrant la première commande ci-dessous. -
    hg clone https://hg.mozilla.org/gaia-l10n/en-US
    -
    -
  4. -
  5. Ensuite clonez le dépot de votre locale en utilisant une commande avec la structure ci-dessous. Par exemple, la deuxième ligne permet de cloner le dépot de Chinois traditionnel dans un dossier approprié. -
    hg clone https://hg.mozilla.org/gaia-l10n/votre-code-de-locale
    -hg clone https://hg.mozilla.org/gaia-l10n/zh-TW/ B2G/gaia/locales/zh-TW
    -
  6. -
  7. Ensuite tapez la commande suivante : -
    LOCALE_BASEDIR=locales/ LOCALES_FILE=locales/languages_mine.json make
    -
  8. -
- -

Les fichiers de locale devraient être listés dans le fichier languages_mine.json, qui aura une structure ressemblant à ça :

- -
{
-  "en-US" : "English (US)",
-  "fr" : "Français (fr)"
-}
- -

Dans ce fichier vous devriez avoir une liste des chaines prête à traduire ! Veuillez noter que si vous commencez une nouvelle localisation de Firefox OS, vous n'avez pas besoin de créer un diff car toutes les chaines sont de nouvelles chaines à traduire.

- -
-

Note : Reportez-vous à ce gist pour un script de compilation automatique de locale.

-
- -

 

- -

Traduire des chaines Gaia

- -
-
Le flux de travail pour traduire les chaînes Gaia dépend en grande partie des outils que vous utilisez pour traduire. Cette partie du processus est similaire à la phase habituelle de traduction des autres produits Mozilla. La page de phase de traduction du guide rapide de localisation contient une liste de tous les outils utilisés pour traduire des chaines dans les produits Mozilla ainsi que des tutoriels sur comment traduire avec ces outils. Cette page vous sera utile si vous faites partie d'une équipe l10n. Elle vous aidera à choisir quel outil utiliser pour traduire les chaines de Gaia et vous proposera des tutoriels sur ces outils.
- -
 
-
- -

Tester la localisation pour Firefox OS

- -

Il existe deux méthodes principales pour effectuer des tests L10n sur Firefox OS : les compilations desktop et les compilations mobiles. Actuellement, la méthode desktop est la plus utilisée pour les test L10n.

- -

Tester la l10n sur desktop

- -
    -
  1. Téléchargez et installez la dernière compilation nocture de boot2gecko pour desktop — téléchargez le package qui correspond à votre système d'exploitation. Recherchez les paquets qui contiennent le mot localizer à l'intérieur. Cela indique que cette compilation possède toutes les locales activées listées dans languages-all.json.
  2. -
  3. Clonez la dernière version de Gaia en naviguant dans le dossier sur votre ordinateur où vous souhaiter là télécharger et entrez cette commande dans votre utilitaire de ligne de commande : git clone git://github.com/mozilla-b2g/gaia.git
  4. -
  5. Si votre équipe localise Firefox OS pour la première fois, vous aurez besoin d'activer la locale. Si non prenez un verre, pendant que tout le monde active sa locale. -
      -
    1. Dans votre terminal, naviguez à l'intérieur de votre clone de Gaia et exécutez cette commande pour cloner le dépôt de votre locale  : hg clone ssh://hg.mozilla.org/gaia-l10n/votre-code-de-locale
    2. -
    3. Ouvrez le fichier languages.json situé dans le dossier shared/resources dans le dépôt gaia que vous venez juste de cloner.
    4. -
    5. Ajoutez l'information de votre locale correspondant à ce format : "en-US" : "English (US)", et enregistrez votre fichier.
    6. -
    7. Pour finir, exécutez la commande : make multilocale. Cela active votre locale sur votre build desktop.
    8. -
    -
  6. -
  7. Create your Gaia profile by running this command: DEBUG=1 make -C gaia profile
  8. -
  9. Finally, you can run Firefox OS with your locale profile and begin testing. Do this by entering this command: b2g/b2g -profile gaia/profile. If you're using OS X, run this command: /Applications/B2G.app/Contents/MacOS/b2g -profile gaia/profile
  10. -
  11. To update your desktop builds, simply navigate to your Gaia repo clone and enter this command: git pull
  12. -
- -

Mobile l10n testing

- -

This section will grow as more devices that support Firefox OS become available to localizers.

- -

What to look for when l10n testing

- -

Localization testing for a mobile operating system has some similarites to localization testing for a desktop application. Here are some guidelines on what to look for when performing localization testing on your work:

- -
    -
  1. See if your translations fit inside UI text elements.
  2. -
  3. Ensure that the tone, style, and terminology are consistant throughout the entire product.
  4. -
  5. Look for untranslated English strings in the UI. These may be hard-coded into Gaia or they may caused by element ID errors.
  6. -
  7. Make sure that time and dates display according your regions standards.
  8. -
- -

Finding localization-specific bugs

- -

Here are some links to bugzilla in order to give you examples of bugs that have been encountered while using the phones. This will give you an idea of where to look at for bugs as well as an example in filing these kinds of bugs.

- - - -

General rules when filing a Localization bug:

- - - -

For those of you who use Moztrap, looking at the existing test cases under the FirefoxOS "localization" tags and seeing if you can pass the tests on your device is also a good way to test Firefox OS localizations.

- -

What's next?

- -

Now you're ready to start localizing! So open up your favorite l10n tool and go for it! As always, if you have questions that are not covered in this document, please send them to the mozilla.dev.l10n newsgroup.

diff --git "a/files/fr/archive/b2g_os/developing_gaia/personnalisation_applications_pr\303\251sentes_construction/index.html" "b/files/fr/archive/b2g_os/developing_gaia/personnalisation_applications_pr\303\251sentes_construction/index.html" deleted file mode 100644 index 1c7baba326..0000000000 --- "a/files/fr/archive/b2g_os/developing_gaia/personnalisation_applications_pr\303\251sentes_construction/index.html" +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Personnaliser les applications présentes lors de la construction -slug: >- - Archive/B2G_OS/Developing_Gaia/Personnalisation_applications_présentes_construction -tags: - - Apps - - B2G - - Customization - - Firefox OS - - Gaia - - Guide -translation_of: Archive/B2G_OS/Developing_Gaia/Customizing_build-time_apps ---- -
-

Si vous êtes développeur ou vendeur d'appareil, vous voudrez personnaliser et choisir les applications qui seront présentes sur l'appareil quand il sera utilisé pour la première fois. Cet article explique les différents outils pour le faire.

-
-

Emplacement des applications dans Gaia

-

Les applications qui fonctionnent sur Firefox OS sont toutes contenues dans les dossiers de Gaia, dans l'un de ces deux répertoires :

- -

Si vous souhaitez enlever/ajouter certaines applications pour votre construction (build) de Gaia/B2G, vous disposez de plusieurs outils décrits ci-après.

-

Méthode brute

-

La méthode « brute » consiste à supprimer les applications que vous ne souhaitez pas installer lors du build (avant de lancer le processus de construction).

-

Éditer les listes de configuration

-

Une méthode plus fine consiste à éditer les fichier apps-*.list (qui se trouve dans un répertoire différent en fonction de l'appareil et qui est sous gaia/build/config/, comme phone/ et tablet/). Dans ces fichiers, il suffit d'ajouter les applications que vous souhaitez intégrer lors de la construction. Par exemple, gaia/build/config/phone/apps-production.list ressemble à :

-
apps/bluetooth
-apps/bookmark
-apps/browser
-apps/calendar
-apps/callscreen
-etc.
-

Vous pouvez également indiquer d'utiliser toutes les applications d'un répertoire, de la façon suivante :

-
apps/*
-

Le mécanisme utilisé pour déterminer quel fichier apps-*.list est utilisé pendant la construction est décrit dans le fichier gaia/Makefile, et ressemble à :

-
GAIA_DEVICE_TYPE?=phone
-  ...
-GAIA_APP_TARGET?=engineering
-  ...
-ifeq ($(MAKECMDGOALS), demo)
-GAIA_DOMAIN=thisdomaindoesnotexist.org
-GAIA_APP_TARGET=demo
-else ifeq ($(MAKECMDGOALS), dogfood)
-DOGFOOD=1
-else ifeq ($(MAKECMDGOALS), production)
-PRODUCTION=1
-endif
-  ...
-ifeq ($(PRODUCTION), 1)
-GAIA_OPTIMIZE=1
-GAIA_APP_TARGET=production
-endif
-
-ifeq ($(DOGFOOD), 1)
-GAIA_APP_TARGET=dogfood
-endif
-  ...
-ifndef GAIA_APP_CONFIG
-GAIA_APP_CONFIG=build$(SEP)config$(SEP)apps-$(GAIA_APP_TARGET).list
-endif
-

Au départ, la variable GAIA_APP_TARGET vaut engineering et la variable GAIA_DEVICE_TYPE vaut phone, par défaut, la construction de Gaia utilisera gaia/config/phone/app-engineering.list (qui contient l'ensemble des tests, des démos, etc.)

-

Pour définir l'utilisation souhaitée, il faut utiliser les différentes options de la commande make. Par exemple, pour construire Gaia avec gaia/build/config/phone/apps-production.list, il faut utiliser l'option suivante :

-
PRODUCTION=1 make
-

Si vous utilisez DEMO=1, le fichier apps-demo.list sera utilisé. Si vous choisissez le paramètre DOGFOOD=1, la construction utilisera le fichier apps-dogfood.list.

-

Vous pouvez totalement contrôler le choix en éditant GAIA_APP_CONFIG dans le fichier gaia/Makefile, et en fournissant votre propre fichier apps-*.list.

-

gaia/Android.mk contient ces lignes :

-
ifneq ($(filter user userdebug, $(TARGET_BUILD_VARIANT)),)
-GAIA_MAKE_FLAGS += PRODUCTION=1
-B2G_SYSTEM_APPS := 1
-endif
-

Lors de la construction, si VARIANT=user ou si VARIANT=userdebug sont choisis (et sont repercutés dans la variable TARGET_BUILD_VARIANT), PRODUCTION=1 sera automatiquement défini lors de la construction de Gaia.

-
-

Note : Pour trouver plus d'informations sur les options de make, voir la référence des options de make.

-
-

Utiliser le système de personnalisation (Market customizations)

-

La troisième méthode est la plus fine (et également la plus complexe) et utilise le système de personnalisation. Ce système permet de définir des instructions de personnalisation pour la construction et ce, sans modifier le cœur de Gaia. Vous pouvez inclure les personnalisations de votre choix dans des dossiers distincts ou bien en utilisant les répertoires existants.

-

Par exemple, en définissant l'emplacement des personnalisations grâce à la variable d'environnement GAIA_DISTRIBUTION_DIR comme ça :

-
GAIA_DISTRIBUTION_DIR=<DISTRIBUTION_PATH> make production
-

Pour plus d'exemples sur le mécanisme de distribution, voir https://github.com/mozilla-b2g/gaia/tree/master/customization

-

Les personnalisations sont un sujet à part entière, pour plus d'informations sur ce sujet, lire le guide du système de personnalisation (Market customizations).

-
-

Note : Si vous souhaitez inclure des applications externes dans votre build de Gaia, vous devrez les construire d'une certaine façon, puis les placer dans le répertoire gaia/dev-apps/. Lire l'article Construire des applications web pré-packagées pour en savoir plus.

-
-
-

Important : Si vous êtes distributeur ou fabricant de matériel et que vous souhaitez construire une version spécifique de B2G/Gaia pour la distribuer, vous devez répondre à certains critères pour avoir l'autorisation d'inclure le Marketplace Firefox sur vos téléphones/tablettes. Merci de contacter Mozilla pour plus de détails.

-
-

 

diff --git a/files/fr/archive/b2g_os/developing_gaia/personnaliser_le_clavier/index.html b/files/fr/archive/b2g_os/developing_gaia/personnaliser_le_clavier/index.html deleted file mode 100644 index 46dd2b2731..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/personnaliser_le_clavier/index.html +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Personnaliser le clavier dans Firefox OS -slug: Archive/B2G_OS/Developing_Gaia/Personnaliser_le_clavier -tags: - - Firefox OS - - Guide - - keyboard -translation_of: Archive/B2G_OS/Developing_Gaia/Customizing_the_keyboard ---- -
-

Ce document explique comment ajouter des agencements de clavier contenant leur propres langues/scripts à Firefox OS v1.2 et supérieur .

-
- -

Statut de l'application clavier Gaia intégrée & architecture système

- -

Deux fonctionnalités majeures du clavier ont été implémentées dans Firefox OS depuis octobre 2013 :

- - - -

Pour ajouter un nouvel agencement de clavier sur votre téléphone, vous pouvez mettre un fichier d'agencement dans Gaia et compiler l'application clavier en utilisant la configuration de compilation, ou développer votre propre application clavier et l'installer sur le téléphone. Nous allons voir comment réaliser chacune de ces opérations.

- -

Développer votre propre application clavier

- -

Vous pouvez vous servir de l'application clavier de Gaia comme d'un modèle. Les idées de base sont :

- - - -

Une fois que c'est fait, vous pouvez installer votre clavier et il sera affiché dans la moitié basse de l'écran à chaque fois que l'utilisateur sera sur un champ de saisie. Pour gérer l'espace pris par le clavier, vous pouvez :

- - - -
-

À noter: La démonstration du clavier LOL doit vous aider à mieux comprendre comment les applications clavier sont conçues, et vous servir de modèle pour vos propres applications clavier.

-
- -

Inclure un agencement personnalisé dans l'application clavier de Gaia

- -
    -
  1. Voir le fichier CONFIGURE de l'application clavier pour plus d'informations. Selon les langues à ajouter, vous devrez éventuellement ajouter un dictionnaire ou ajouter un Input Method (IME) interactif (pour les langages asiatiques)
  2. -
  3. Si vous ajoutez des agencements pour de nouvelles langues, vous pouvez les ajouter comme agencements par défaut dans build/config/keyboard-layouts.json.
  4. -
- -

IME Asiatiques

- -

Les langues de l'Asie orientale (le chinois, le japonais, et le coréen) utilisent une graphie composée de milliers de caractères. Comme il est impossible d'avoir des milliers de touches sur un clavier matériel ou logiciel, les utilisateurs se servent d'un programme d'indexation appelé éditeur de méthode de saisie (ou input method editor) (IME) qui permet de convertir une série de symboles en caractères.
-
- La façon dont les symboles doivent être convertis et l'efficacité de la méthode reposent sur l'implémentation du programme (et repose souvent sur la science du traitement du langage naturel qui ne peut être traitée entièrement ici). Pour économiser de la mémoire, il est conseillé que les données soient compilées dans un blob binaire et interprétées comme un tableau buffer. Les structures JSON complexes ne fonctionneront pas sur certains appareils.

- -

L'Interface du moteur IM dans l'application clavier de Gaia

- -

Si vous disposez d'une bibliothèque IME pour convertir des symboles en caractères, vous devrez utiliser l'interface définie dans l'application clavier de Gaia pour recevoir des symboles et afficher des caractères. La version de l'API est documentée sur Github.

- -

Nous encourageons les implémentations d'IME pour affiner cette API de Gaia.

- -

Faire fonctionner le moteur IM avec l'agencement

- -

Pour faire fonctionner le moteur IM avec votre agencement de clavier :

- -
    -
  1. Ajoutez un agencement dans layout.js comme décrit précédemment.
  2. -
  3. Utilisez la propriété imEngine pour faire référence au moteur IM. Lorsque l'agencement est activé, l'application de clavier chargera le script situé à  keyboard/js/imes/<moteurIM>/<moteurIM>.js.
  4. -
  5. Paramétrez les API pour recevoir/envoyer des touches/caractères lorsque le script est chargé et initialisé.
  6. -
  7. Gérez les saisies de l'utilisateur comme vous le souhaitez. Généralement, lorsque l'utilisateur utilise des touches du clavier, cela envoie des données au moteur IM.
  8. -
- -

Implémentations connues :

- - - -

Les nouvelles locales et la localisation

- -

Ce qui suit peut s'appliquer aux systèmes d'écriture alphabétiques, ceux qui utilisent un alphasyllabaire (comme la devanagari) ou un système idéographique (comme le chinois) sont plus complexes.

- -

Généralement, deux éléments sont nécessaires : un clavier et un lexique (pour la prédiction du texte).

- -

Créer un agencement clavier

- -

L'agencement du clavier est contenu dans un fichier JavaScript et définit les touches du clavier et la correspondances entre les touches et les lettres et les symboles, ainsi que les options de clavier utilisées avec les pressions longues. La méthode la plus simple consiste à récupérer un clavier existant sur GitHub, de le renommer et de l'ajuster.

- -

Tout d'abord, il faut changer l'en-tête. Si, par exemple, votre clavier d'origine est proche du clavier anglais (en-US) et que vous voulez en créer un pour la locale gaélique écossaise (gd), vous pouvez éditer le fichier suivant (grâce à un éditeur comme Notepad++) :

- -
Keyboards.en = {
- label: 'English',
- shortLabel: 'En',
- imEngine: 'latin',
- types: ['text', 'url', 'email', 'number', 'password'],
- autoCorrectLanguage: 'en_us',
- menuLabel: 'English',
- -

en :

- -
Keyboards.gd = {
- label: 'Scottish Gaelic',
- shortLabel: 'gd',
- imEngine: 'latin',
- types: ['text', 'url', 'email', 'number', 'password'],
- autoCorrectLanguage: 'gd_gb',
- menuLabel: 'Gàidhlig',
- -

Le champ label doit être celui de votre langue en anglais, le champ shortLabel ne doit pas mesurer plus de trois caractères. Il sera utilisé comme abréviation sur le clavier afin que l'utilisateur sache quel langage il utilise. Vous pouvez utiliser le code ISO de la langue ou autre chose si vous pensez que c'est pertinent. Le champ menuLabel est le nom de la langue exprimé dans la langue en question : c'est ce que l'utilisateur verra dans le menu des options.

- -

Si l'agencement du clavier est proche de celui que vous souhaitez, la seule chose à faire consiste à modifier les caractères alternatifs (auxquels on accède avec une pression longue sur la touche) :

- -
alt: {
-  a: 'áàâäåãāæ',
-  c: 'çćč',
-  e: 'éèêëēę€ɛ',
-  i: 'ïíìîīį',
-  o: 'öõóòôōœøɵ',
-  u: 'üúùûū',
-  s: 'ßśš$',
-  S: 'ŚŠ$',
-  n: 'ñń',
-  l: 'ł£',
-  y: 'ÿ¥',
-  z: 'žźż',
-  '.': ',?!;:'
-},
- -

Vous pouvez ainsi changer l'ordre des caractères affichés lors de la pression longue. Pour notre exemple, le gaélique utilise plus d'accents graves que d'accents aigus et on peut changer l'ordre en :

- -
a: 'àáâäåãāæ',
- -

On peut aussi vouloir proposer des consonnes pointées et ajouter de nouvelles lignes comme celle-ci :

- -
b: 'ḃ',
- -

On peut également vérifier l'agencement alternatif (celui qui propose les nombres, la ponctuation, etc.) et le symbole monétaire affiché.

- -

Créer un lexique

- -

Avoir un lexique permet de proposer une prédiction à la saisie (plutôt que les utilisateurs aient à taper chaque lettre de chaque mot). Pour le construire, vous avez (idéalement) besoin d'un corpus de mots classés par fréquence d'utilisation. Par exemple, le mot demain est plus fréquemment utilisé que démiurge et devrait donc être proposé avant lorsque l'utilisateur saisit un texte.

- -

Pour le faire, on assigne des nombres de 1 (fréquence la plus faible) à 255 (fréquence la plus forte) à chaque mot (c'est-à-dire chaque ligne) du lexique (un fichier XML dont vous pouvez trouver un exemple ici). Voici ce que vous devrez créer :

- -
<wordlist locale="gd" description="Gàidhlig" date="1401554807" version="1">
- <w f="255" flags="">a</w>
- <w f="254" flags="">an</w>
- <w f="247" flags="">agus</w>
- -

Même si le corpus est construit rapidement à partir d'un texte suffisamment important (et en comptant les fréquences des mots de ce corpus), cela permettra d'assurer la fonctionnalité de prédiction. Si vous ne disposez pas de telles données au format numérique pour votre locale, utilisez votre connaissance du lexique pour trier manuellement les termes les plus communs selon vous.

- -

Construire les fichiers

- -

Une fois que vous disposez du fichier javascript et du fichier de lexique, allez dans ce répertoire gaia puis ouvrez Makefile. Ajoutez le nom du dictionnaire à votre liste (si, pour l'exemple, il est nommé gd_wordlist.xml), cela sera :

- -
ga.dict \
-gd.dict \
- -

Assurez vous que le fichier gd_worldlist.xml soit dans le répertoire puis lancez $ make gd.dict

- -

Si vous êtes arrivés jusqu'à ce point et que vous n'arrivez pas à passer cette dernière étape de construction, merci de remplir un bug (Composant : Gaia Keyboard) et de joindre vos fichiers en expliquant le problème. Quelqu'un devrait pouvoir vous aider. Assurez-vous de soumettre le correctif comme une pull request, et de le marquer à revoir (review) par quelqu'un, sinon, le bug pourra passer inaperçu.

- -

Tester une nouvelle locale

- -

Une fois que vous avez construit et envoyé les fichiers pour la nouvelle locale, vous pouvez simplement tester votre clavier et lexique sur la page web de démonstration qui utilise l'application clavier. Vous pouvez le clôner et l'essayer localement depuis ici. En cliquant sur 'En', vous pouvez parcourir les différentes locales. Si vous ne pouvez pas trouver la vôtre, cliquez sur le bouton situé en haut à droite pour cocher/décocher les claviers que vous souhaitez tester.

- -

Discussion et QA (qualité)

- -

Rendez-vous sur la liste de diffusion dev-gaia ou sur le canal #gaia sur irc.mozilla.org (voir Mozilla IRC (en anglais) pour plus de détails. #mozilla-taiwan est le canal chinois pour ce sujet.
-
-  

diff --git "a/files/fr/archive/b2g_os/developing_gaia/r\303\251f\303\251rence_options_make/index.html" "b/files/fr/archive/b2g_os/developing_gaia/r\303\251f\303\251rence_options_make/index.html" deleted file mode 100644 index c5670cd54c..0000000000 --- "a/files/fr/archive/b2g_os/developing_gaia/r\303\251f\303\251rence_options_make/index.html" +++ /dev/null @@ -1,331 +0,0 @@ ---- -title: Référence des options de make -slug: Archive/B2G_OS/Developing_Gaia/Référence_options_make -tags: - - Apps - - Firefox OS - - Gaia - - Make - - Options - - Reference - - Référence(2) -translation_of: Archive/B2G_OS/Developing_Gaia/make_options_reference ---- -
-

La commande make est utilisée à l'intérieur du dépôt Gaia pour créer un profil qui peut être chargé vers un appareil ou être lancé dans une version de B2G Desktop. Cet article illustre en détail les différentes options pour make.

-
- -
-

Note : De nombreuses variables d'environnement sont utilisées dans le fichier Makefile. Celles-ci pouvant être supprimées à l'avenir, attention à ne pas construire d'outils qui reposeraient sur ces variables.

-
- -

Les profils créés sont généralement enregistrés à la racine du répertoire de Gaia, par exemple /gaia/profil. Un profil contient généralement les éléments suivants :

- - - -
-

Note : Lorsque vous souhaitez construire un nouveau profil après en avoir déjà construit un, vous devez supprimer le profil existant au préalable.

-
- -

Utilisation par défaut

- -
make
- -

Cette commande créera une version neutre de Gaia, qui ne peut pas être utilisée pour le débogage. Pour construire une version avec une certaine marque, vous devrez utiliser Official Mozilla branding make ; pour construire une version de débogage, vous devrez utiliser Debug make.

- -

Envoyer vers l'appareil

- -
make install-gaia
-
-make reset-gaia
-
- -

Une fois ADB (Android Debug Bridge) paramétré, ces « cibles » de make enverront Gaia sur l'appareil. install-gaia enverra uniquement les mises à jour depuis le répertoire de travail alors que reset-gaia nettoiera l'ensemble des configurations, profils, applications web et données en base avant d'envoyer Gaia sur l'appareil (cela créera une nouvelle base de données pour les réglages).

- -
-

Note : Lorsque les commandes make install-gaia / make reset-gaia sont utilisées, Gaia est envoyée vers le téléphone avec une résolution par défaut qui est celle des ressources utilisées (1x). Pour définir un niveau de définition plus élevé, vous devrez utiliser les options GAIA_DEV_PIXELS_PER_PX ou GAIA_DPPX (voir le paragraphe Images en haute résolution pour plus de détails sur ces options.). Lorsque vous envoyez Gaia sur votre appareil de cette façon, il est nécessaire de préciser (en plus des options des autres options de make) le facteur de forme de l'appareil. Ainsi pour un Flame, on aura make install-gaia GAIA_DEV_PIXELS_PER_PX=1.5 (ou 2, ou 2.5, etc.). Pour plus d'informations, voir le tableau des facteurs de forme dans l'article icônes de 512 pixels pour l'affichage sur l'appareil.

-
- -

Construire des applications spécifiques

- -
APP=system make
-
-APP=system make install-gaia
- -

Lorsqu'un profil existe déjà, l'option APP vous permet de spécifier les applications à réempaqueter plutôt que de réempaqueter puis de réenvoyer toutes les applications sur l'appareil. On notera que, bien que cette commande envoie le nouveau paquet de l'application ainsi que le manifeste, les changements du manifeste (ex. : les nouvelles permissions ou les agencements de clavier) ne sont pas détectés par Gecko.

- -

Définir un répertoire spécifique pour le profil

- -

Vous pouvez définir un répertoire spécifique dans lequel construire votre profil en utilisant l'option PROFILE_FOLDER. Par exemple :

- -
PROFILE_FOLDER=profile-b2g-desktop make
- -

Construire pour les différents types d'appareil

- -

Il existe des options pour spécifier le type d'appareil visé.

- -

Construire une version de Gaia pour téléphone

- -
GAIA_DEVICE_TYPE=phone make
- -

Les applications pour cette versions seront celles de la liste /gaia/build/config/phone/apps-engineering.list.

- -

Construire une version de Gaia pour tablette

- -
GAIA_DEVICE_TYPE=tablet make
- -

Les applications utilisées pour la construction seront celles de la liste /gaia/build/config/tablet/apps-engineering.list.

- -

Créer une version spark de Gaia

- -
GAIA_DISTRIBUTION_DIR=distros/spark make reset-gaia
-
- -

Installe spark sur votre appareil. L'option du build.sh de B2G est celle-ci :

- -
GAIA_DISTRIBUTION_DIR=distros/spark ./build.sh
-
- -

Les différents types de version

- -

make dispose d'options pour préciser le type de version qu'on souhaite construire (chaque type de version ayant un objectif distinct) :

- -

Version de production

- -
PRODUCTION=1 make
- -

Cette instruction crée une version de production de Gaia. Cela signifie que :

- - - -
-

Note : Pour cette instruction, vous pouvez également utiliser l'alias make production.

-
- -

Version de débogage

- -
DEBUG=1 make
- -

La variable DEBUG permet de lancer Gaia avec des applications hébergées sur un serveur web intégré accessible sur le port GAIA_PORT, plutôt que les applications soient empaquetés et aient besoin d'être réempaquetés à chaque modification. Cela permet de tester plus facilement. Si vous lancez ce profil avec une version de Firefox Nightly, vous pourrez utiliser une version spécifique des outils de développement adaptée à B2G.

- -

De plus :

- - - -
-

A noter: Il y a un bogue ouvert (bug 1180103) lors de l'utilisation de profils debogage Gaia, provoque l'affichage d'un écran d'accueil vide quand il est lancé au travers de Firefox OS Simulator (ou WebIDE, ou autre.) Cela peut être contourné en construisant avec DEBUG=1 DESKTOP=0 make à la place (voir Version_de_débogage_pour_l'appareil.)

-
- - -

Version de débogage pour l'appareil

- -
DEVICE_DEBUG=1 make
- -

Cela désactive l'écran de déverrouillage et active le débogage via les outils ADB, ce qui permet de déboguer ce qui se passe sur l'appareil.

- -

Dans Firefox OS > 1.2, il faut préciser ce paramètre si vous voulez déboguer des applications web dans le WebIDE.

- -

Version de débogage sur ordinateur

- -
DEBUG=1 DESKTOP=0 make
- -

Cette option permet de créer une version de débug pour ordinateur, à utiliser avec B2G pour ordinateur (B2G desktop).

- -

Version officielle de Mozilla

- -
MOZILLA_OFFICIAL=1 make
- -

Cette option permet de construire une version officielle de Mozilla.

- -

Version pour l'utilisation en test(dogfood)

- -
DOGFOOD=1 make
- -

Les options et utilitaires liés à une utilisation à des fins de tests sont activés. Par exemple, l'application sur les retours/informations d'utilisation (feedback) sera activée.

- -

Version pour les applications système

- -
B2G_SYSTEM_APPS=1 make
- -

Cette variable d'environnement vous permet d'envoyer une application sur /system/b2g plutôt que sur /data/local. Vous devriez utiliser cette option lorsque vous travaillez sur une version utilisateur. Cette variable est définie automatiquement lorsque vous utilisez la commande make production. Cette variable peut également être utilisée avec install-gaia ou reset-gaia.

- -

Personnaliser et distribuer une version

- -
GAIA_DISTRIBUTION_DIR=./dir
- -
-

Note : Lire l'article Construire une version de Gaia customisée pour plus d'informations.

-
- -

Les options pour le débogage/développement

- -

Certaines options de make permettent d'activer/désactiver des fonctionnalités de débogage ou de modifier des réglages utiles pour le développement.

- -

Activer le débogage à distance

- -
REMOTE_DEBUGGER=1
- -

Cela permet d'utiliser le débogage à distance pour l'appareil. Cela aura le même effet que d'activer l'option dans les options de développement.

- -

Version avec optimisation du JavaScript

- -
GAIA_OPTIMIZE=1 make
- -

Cette option déclenche un processus d'optimisation sur le code JavaScript utilisé pour Gaia qui consiste à concaténer/compresser les fichiers. Cette option est automatiquement utilisée avec make production. Cette option peut également être utilisée avec install-gaia ou reset-gaia.

- -

Ressources images en haute résolution

- -
GAIA_DEV_PIXELS_PER_PX=1.5 make
- -

Ou, en utilisant l'alias :

- -
GAIA_DPPX=1.5 make
- -

Lors de l'empaquetage de l'application, cette option remplacera les images par leurs équivalents *@1.5x.(gif|jpg|png) si ces fichiers existent. Vous aurez besoin d'utiliser l'option ci-dessus au sein d'une commande make standard, par exemple :

- -
GAIA_DEV_PIXELS_PER_PX=1.5 make reset-gaia
-
-GAIA_DEV_PIXELS_PER_PX=1.5 make install-gaia
- -

Pour information, voici la liste des résolutions d'écran actuellement ciblées par Gaia :

- - - -

Utilisez l'option GAIA_DEV_PIXELS_PER_PX pour être sûr que les images s'affichent correctement sur les appareils qHD et WVGA. Voir l'article un pixel n'est pas un pixel pour plus d'informations sur les pixels physiques et les pixels CSS.

- -

Lancer les tests d'intégration

- -

Vous pouvez lancer les tests d'intégration de Gaia en utilisant make. Voir Gaia integration tests pour plus de détails.

- -

Lancer les tests de performance Raptor

- -

Vous devez effectuer une configuration permettant de lancer les tests Raptor sur votre périphérique, avant de lancer les tests. Voir Raptor pour plus de détails.

- -
make raptor
-
- -

Profil pour les appareils avec peu de mémoire

- -
GAIA_MEMORY_PROFILE=low make
- -

Cette variable permet de générer un profil de Gaia qui utilise peu de mémoire. Cela permet de construire un profil adapté aux appareils avec peu de mémoire comme le Tarako.

- -

Désactiver l'écran de première utilisation (first time use experience - FTU)

- -
NOFTU=1
-
- -

Cette variable d'environnement permet de désactiver l'écran affiché lors de la première utilisation.

- -

Désactiver l'écran de dé/verrouillage

- -

Vous pouvez désactiver l'écran qui verrouille l'appareil en utilisant l'option NO_LOCK_SCREEN. Par exemple :

- -
NO_LOCK_SCREEN=1 make
- -

La montée en charge pour le volume de données

- -

Plusieurs volumes de données de référence ont été créés pour permettre aux développeurs et aux testeurs d'installer rapidement un grand volume de données utilisées par plusieurs applications (généralement ce chargement a lieu sur un appareil nouvellement flashé).

- -

Les commandes suivantes permettent de charger différents volumes (à lancer depuis le répertoire de Gaia) :

- -
make reference-workload-light
- - - -
make reference-workload-medium
- - - -
make reference-workload-heavy
- - - -
make reference-workload-x-heavy
- - - -

Ces cibles peuvent être utilisées avec la variable d'environnement APP ou avec la variable APPS (contenant des noms d'applications, séparés par des espaces). Par exemple :

- -
APP=sms make reference-workload-light
-APPS="sms communications/contacts" make reference-workload-heavy
-
- -

Les applications utilisables ici sont :

- -
APPS="gallery music video communications/contacts sms communications/dialer"
- -

Pour installer des fichiers de musique dans la charge de données, vous devez avoir installé mid3v2. Cet utilitaire peut être installé avec la commande suivante :

- -
sudo apt-get install python-mutagen
- -

Si vous utilisez Fedora ou RHEL, vous pouvez utiliser :

- -
sudo yum install python-mutagen
- -

Construire la documentation

- -

La documentation relative à Gaia peut être construite grâce à jsdoc3. Pour générer la documentation, vous pouvez utiliser la commande suivante :

- -
make docs
- -

Activation des agencements de claviers et des dictionnaires

- -

Pour activer les agencements de clavier et les dictionnaires liés au moteur de saisie (IME pour Input Method Editor en anglais), vous pouvez utiliser la commande suivante :

- -
GAIA_KEYBOARD_LAYOUTS=en,zh-Hant-Zhuyin,el,de,fr,zh-Hans-Pinyin make
- -

Actuellement, tous les claviers ne sont pas chargés par défaut en raison de problèmes d'espace disque. bug 1029951 est en cours de résolution pour permettre de découpler les agencements et les dictionnaires (pour permettre aux utilisateurs de télécharger le dictionnaire).

diff --git a/files/fr/archive/b2g_os/developing_gaia/soumettre_correctif_pour_gaia/index.html b/files/fr/archive/b2g_os/developing_gaia/soumettre_correctif_pour_gaia/index.html deleted file mode 100644 index 323ed68cd7..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/soumettre_correctif_pour_gaia/index.html +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Soumettre un correctif pour Gaia -slug: Archive/B2G_OS/Developing_Gaia/Soumettre_correctif_pour_Gaia -tags: - - Bugzilla - - Firefox OS - - Gaia - - GitHub - - contribution - - patch - - submitting -translation_of: Archive/B2G_OS/Developing_Gaia/Submitting_a_Gaia_patch ---- -
-

À cette étape, vous devriez avoir apporté une modification au code de Gaia et avoir testé que cette modification n'impacte pas Gaia. La prochaine étape consiste à soumettre votre correctif sur le dépôt central. Cet article explique ces étapes.

-
- -

Soumettre des correctifs pour Gaia peut paraitre un peu déroutant, jusqu'à ce que vous en ayez pris l'habitude. Cela implique d'utiliser Bugzilla et Github, ainsi que l'utilisation de drapeaux spéciaux dans Bugzilla pour que tout se déroule correctement. Vous pouvez aussi voir à quoi ressemble le processus complet, dans la section Envoi_manuel_d'un_correctif; cependant, nous vous conseillons d'utiliser l'outil Autolander au quotidien, sauf si vous avez une bonne raison de ne pas le faire, voir la section suivante.

- -

Envoi de correctif de manière aisée avec Autolander

- -

Autolander est un outil qui prend en charge automatiquement, beaucoup d'étapes nécessaires à l'envoi d'un correctif pour Gaia (et d'autres projets qui l'utilisent), réduisant le temps, et les erreurs possibles, tout au long de la procédure. Autolander réalise l'automatisation des processus entre Bugzilla et Github en attachant les pull requests (de Github) aux bugs (de Bugzilla), et en les intégrants une fois que l'attachement à reçu un drapeau r+, et que le mot-clé autoland est ajouté au bug. Pour utiliser Autolander :

- -
    -
  1. Tout d'abord, si le bug correspondant n'existe pas, créez-en un pour le produit Firefox OS, et donnez-lui un titre explicite détaillant le but de votre correctif.
  2. -
  3. Vous pouvez alors créer une pull request pour votre correctif. Si vous avez suivi ce guide depuis le début, vos changements devraient être présents dans une branche spécifique, unique, de votre fork en local. Pour ajouter vos modifications, faites git add . puis git commit -m 'mon message de commit'.
  4. -
  5. 'mon message de commit' devra être modifié afin de contenir le numéro de bug de Bugzilla et le titre du bug afin de donner plus d'informations sur ce que fait le correctif et qui doit l'examiner. Par exemple : -
    Bug 9999999 - Corrige ce bug Toto R=jeanbiche
    -
  6. -
  7. Poussez votre code sur le fork de Gaia présent sur Github puis créez une pull request pour mettre à disposition le code de ce correctif.
  8. -
  9. Une fois que le pull request est ouvert, celui-ci est automatiquement attaché, au bug trouvé dans le titre du PR.
  10. -
  11. Prochainement, une fois que cet attachement aura reçu le drapeau r+ par un validateur, vous pourez ajouter le mot-clé autoland, dans le champ mots-clés "keywords" de bugzilla pour intégrer le code dans la branche master de Gaia. Autolander intègrera donc le code au master, mettra votre commit dans le bug, et marquera le bug comme résolu et corrigé "resolved fixed". Cependant, pour l'instant, cette fonctionnalité est toujours en cours de développement, donc pour le moment, vous devez ajouter le mot-clé "keyword" checkin-needed, et attendre qu'une personne intègre le code pour vous.
  12. -
- -
-

A noter : Autolander lance des tests d'intégration avant d'intégrer un correctif au master. Si les tests d'intégration échouent, Autolander refusera d'intégrer le code. D'autres validations basiques sont effectuées, comme s'assurer que votre pull request et votre message de commit contiennent bien un numéro de bug.

-
- -
-

A noter : Les pull request sont intégrés par ordre d'arrivé. Les pull request sont fusionnés à une branche d'intégration, et les tests d'intégration sont lancés en parallèle dans cette branche. Si un PR échoue les tests d'intégration, il est rejeté de la branche d'intégration, et nous reconstruisons la branche d'intégration avec les commits restants. Quand un commit passe, le master progresse de ce commit.

-
- -

Envoi manuel d'un correctif

- -

Pour soumettre manuellement votre correctif à Gaia, suivez ces étapes :

- -
    -
  1. Tout d'abord, si le bug correspondant n'existe pas, créez-en un pour le produit Firefox OS, et donnez-lui un titre explicite détaillant le but de votre correctif.
  2. -
  3. Vous pouvez alors créer une pull request pour votre correctif. Si vous avez suivi ce guide depuis le début, vos changements devraient être présents dans une branche spécifique, unique, de votre fork en local. Pour ajouter vos modifications, faites git add . puis git commit -m 'mon message de commit'.
  4. -
  5. 'mon message de commit' devra être modifié par une phrase contenant le titre du bug, ainsi que des informations supplémentaire sur ce que fait le correctif et qui doit l'examiner. Par exemple : -
    Corrige ce bug Toto R=jeanbiche
    - Il est vraiment préférable d'indiquer un numéro de bug dans le message du commit, mais ne pas le faire est le seul moyen de contourner Autolander. Inutile de vous dire que ce n'est pas recommandé, vous devriez vraiment utiliser Autolander.
  6. -
  7. Poussez votre code sur le fork de Gaia présent sur Github puis créez une pull request pour mettre à disposition le code de ce correctif.
  8. -
  9. Ajoutez l'URL de cette pull request comme pièce jointe du bug sur Bugzilla (utilisez le lien « Add an attachment link », choisissez le mode texte pour la pièce jointe puis saisissez l'URL de la pull request comme contenu de la pièce jointe, vous pouvez ensuite saisir une description)
  10. -
  11. Pour cette pièce jointe sur la fiche Bugzilla, demandez à ce que votre correctif soit passé en revue. Pour le faire, ajoutez l'étiquette (flag) review: ? à la pièce jointe en incluant le nom du responsable du module concerné par votre code (voir la page des responsables de module pour plus d'informations (en anglais).)
  12. -
  13. Attendez qu'une personne soit affectée pour passer en revue votre correctif. À cette étape, généralement, cette personne demandera d'ajouter ou non des modifications à la pull request (PR) sur Github et de lier ces changements sur Bugzilla.
  14. -
  15. Effectuez les modifications demandées sur la même PR que précédemment puis reliez une pièce jointe avec le flag review: ?.
  16. -
  17. Une fois que vous avez effectué les modifications demandées et que vous avez obtenu le flag r+ (qui signifie que le correctif a été revu/approuvé), vous devriez aplatir (squash) vos commits en un seul (voir le paragraphe Tips_on_Gaia_Rebasing ci-après).
  18. -
  19. Ajoutez un mot-clé checkin-needed dans le champ adéquat (keywords). Pour cette étape, vous devez désormais attendre que quelqu'un intègre (land en anglais) votre correctif au code source de Gaia.
  20. -
  21. Félicitations, votre code fait maintenant partie de Gaia et vous avez contribué à Firefox OS !
  22. -
- -
-

Note : Il est recommandé de n'avoir qu'un seul commit par revue.

-
- -
-

Note : Pour plus d'informations sur la soumission de correctifs, lire le fichier contributing.md sur le dépôt principal.

-
- -

Conseils pour refonder son code de Gaia

- -

La branche master de Gaia évolue constamment (plusieurs fois par jour). Si vous avez passé deux heures à construire un correctif, il se peut que la branche ait été modifiée.
-
- Sur votre branche liée à votre correctif (ex : mon-correctif), vous pourrez refonder (rebase en anglais et pour git) grâce aux commandes suivantes :

- -
git checkout -b mon-correctif-r1
-git pull --rebase upstream master
- -

S'il n'y a pas de conflits, vous pouvez continuer avec :

- -
git checkout mon-correctif
-git pull --rebase upstream master
-git branch -D mon-correctif-r1
- -

Si vous avez des conflits, discutez-en avec le développeur qui a apporté les changements conflictuels puis répétez cette procédure une fois les conflits résolus.

- -

Bugs de statut et bugs techniques

- -

Certaines personnes chez Mozilla sont des sheriffs. Les sheriffs sont responsables de la fusion du code et de la maintenance des statuts des branches. Étant donné qu'il y a un nombre limité de sheriffs pour surveiller les échecs des tests sur Firefox OS, il est relativement difficile pour eux de détecter tous les correctifs défectueux.

- -

C'est pourquoi, pour Firefox OS, nous préférons ouvrir un nouveau bug pour livrer de nouveaux correctifs sur un problème s'il y a des échecs lorsqu'un correctif est passé en revue. Cela entraîne quelques complications pour le suivi des statuts pour les équipes qualité et gestion de projet.

- -

Pour cela, les bugs sont séparés entre bugs de statut et bugs techniques :

- - - -
-

Note : Si ce bug correspond à un scénario d'utilisation (user story en anglais), le chef de projet en charge devrait compléter le champ correspondant (user story) ainsi que les critères d'acceptation.

-
- -

Réparer la situation si vous avez intégré un correctif sur un bug de suivi de statut

- -

Si vous avez accidentellement livré un correctif sur un bug de suivi, qui ait été revu et intégré au code commun, voici ce que vous devez faire :

- -
    -
  1. Utilisez le bouton « Clone this bug » situé en bas à droite de Bugzilla pour créer un nouveau bug et reproduire la plupart des champs du bug initial. Vérifiez ques les champs whiteboard, keyword, et STR/user story ont bien été copiés-collés dans le nouveau bug.
  2. -
  3. Mettez ce nouveau bug comme étant bloqué par l'ancien. Ce nouveau bug sera le nouveau bug de suivi de statut.
  4. -
  5. Utilisez le flag « needinfo » pour alerte le chef de projet concerné que le bug de statut à changé. Voici la liste des adresses e-mail des différents chefs de projets pour Firefox OS sur le wiki (en anglais).
  6. -
  7. Créez un nouveau bug technique décrivant les étapes pour reproduire et/ou les critères d'acceptations. Utilisez ce bug pour bloquer le nouveau bug de suivi de statut.
  8. -
  9. Essayez d'apporter un correctif pour ce nouveau bug. Bidouillez-bien :) !!!
  10. -
- -

Livrer des correctifs sur d'anciennes branches

- -

Sur les bugs, vous pouvez voir les étiquettes concernant les différents versions. Si vous souhaitez soumettre un correctif pour une ancienne version de Firefox OS, vous devez vérifier que celui-ci respecte les règles d'acceptation expliquées sur la page d'intégration à B2G  (en anglais).

diff --git a/files/fr/archive/b2g_os/developing_gaia/tester_modifications_gaia/index.html b/files/fr/archive/b2g_os/developing_gaia/tester_modifications_gaia/index.html deleted file mode 100644 index 29cbfc8296..0000000000 --- a/files/fr/archive/b2g_os/developing_gaia/tester_modifications_gaia/index.html +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Tester les modifications du code de Gaia -slug: Archive/B2G_OS/Developing_Gaia/Tester_modifications_Gaia -tags: - - Firefox OS - - Gaia - - Guide - - Integration - - Testing - - UI -translation_of: Archive/B2G_OS/Developing_Gaia/Testing_Gaia_code_changes ---- -
-

Une fois que vous avez apporté vos changements au code de Gaia et que ça semble fonctionner, vous devez effectuer des tests pour vous assurer que vos modifications fonctionnent, y compris avec le reste du code. Une fois que c'est le cas, vous pourrez proposer un correctif pour le projet. Cet article explique cette procédure de test.

-
- -

La procédure de test consiste généralement à :

- - - -

La suite de l'article explique chacune de ces étapes.

- -

Déboguer avec les outils standards

- -

Si vous êtes développeur web, vous serez familier avec le débogage de Gaia. Dans l'article lancer Gaia dans Firefox pour ordinateur et comment apporter des modifications simples, les outils de développement nécessaires ont déjà été présentés. Pour modifier le code de façon plus complexe, vous devrez tirer pleinement parti des outils de débogage présent dans l'écran de Firefox pour ordinateur.
-
- Note : Pour plus d'instructions sur l'utilisation de ces outils, voir la section de MDN sur les outils de développement.

- -

Les tests automatisés

- -

Une fois le code édité, vous devez lancer la suite de tests standards qui accompagnent Gaia avant de soumettre un correctif. Cela doit vous permettre de vous assurer que vos modifications n'affectent pas les fonctionnalités essentielles existantes du téléphone. Les tests que vous pouvez lancer sont :

- - - -

Généralement, il est demandé que lancer ces tests avant de soumettre un correctif. Si c'est votre première contribution, vous pouvez envoyer votre correctif sans avoir fait les tests. En revanche, vous devez demander de l'aide pour pouvoir lancer les tests à l'avenir. Avant de lancer les tests, veillez à mettre à jour votre dépôt de Gaia afin de disposer de la dernière version des tests.

- -
-

Note : Pour plus d'informations, vous pouvez lire la page sur les tests automatisés de Firefox OS.

-
- -
-

Note : Si possible, lancez ces tests sur un vrai appareil si vous en avez un (certaines fonctionnalités ne sont pas supportées dans un émulateur). Si vous ne disposez pas d'un appareil Firefox OS, vous pouvez lancer les tests avec B2G Desktop ou Firefox Nightly.

-
- -

Les tests unitaires

- -

Les tests unitaires sont des tests effectués sur des fragments (unités) de code, assemblés dans une application plus large. Pour le projet Gaia, ces unités sont les applications individuelles. Gaia utilise :

- - - -

Pour installer et mettre en place un serveur de tests unitaires, vous pouvez lancer les commandes suivantes (cela peut prendre quelques minutes, vous pouvez en profitez pour vous faire une tasse de thé) :

- -
DEBUG=1 make
-export FIREFOX=/Applications/FirefoxNightly.app/Contents/MacOS/firefox
-bin/gaia-test
-
- -

Celà ouvrira une page web en local, avec une liste de tests unitaires. Pour les lancer :

- - - -

Tout en maintenant la page web local ouverte, vous pouvez lancer la suite de tests complète, dans une nouvelle fenêtre de terminal, avec la commande suivantes :

- -
make test-agent-test
- -
-

Note : Cela peut prendre beaucoup de temps étant donné la quantité de tests à effectuer (jusqu'à environ une heure). Dans la plupart des cas, il n'est nécessaire que de lancer les tests pour l'application que vous avez modifiée. Vous pouvez restreindre les tests en ajoutant  APP=<nom du dossier de l'application> à la fin de la commande : par exemple APP=settings.

-
- -
-

Note : Pour plus d'informations sur les tests unitaires, vous pouvez également lire la page sur les tests unitaires de Gaia.

-
- -

Les tests d'intégration

- -

Tester l'intégration consiste à tester comment les différentes unités de code fonctionnent entre elles. C'est l'étape logique qui intervient après les tests unitaires. Les tests d'intégration de Gaia utilisent Marionnette qui permet de lancer un script en JavaScript avec un serveur basé sur Python. Ce script peut communiquer avec Gecko et peut donc contrôler le navigateur ainsi que l'appareil Firefox OS et les faire interagir.

- -

Pour lancer les tests d'intégration, vous pouvez lancer la commande suivante :

- -
make test-integration
- -
-

Note : De même qu'avec les tests unitaires, lancer toute la suite de tests pour l'intégration peut prendre beaucoup de temps. Vous pouvez ajouter APP=<dossier de l'application> à la fin de la commande pour ne tester qu'une seule application, par exemple APP=calendar.

-
- -
-

Note: Pour lancer les tests d'intégration sur un périphérique différent, il faut ajouter GAIA_DEVICE_TYPE=<device type="" name=""> à la commande précédente pour spécifier le type de périphérique, par exemple GAIA_DEVICE_TYPE=tv. Si ce n'est pas fait, les tests peuvent échouer.

-
- -
-

Note : Pour plus d'informations sur les tests d'intégration, lire l'article sur les tests d'intégration de Gaia.

-
- -

Les tests de performance

- -

Les tests de performance de Gaia sont lancés avec l'utilitaire Raptor CLI. Raptor permet d'automatiser le lancement d'une application plusieurs fois et d'afficher des statistiques sur sa durée de démarrage. Après un test, Raptor affiche de plus les informations d'utilisation mémoire de l'application.

- -

Pour lancer les tests de performance Raptor, voir Raptor: Bien commencer.

- -

Les tests d'interfaces utilisateurs

- -

Voir la page d'introduction sur les Tests d'interface utilisateur Gaia.

diff --git a/files/fr/archive/b2g_os/dual_boot_de_b2g_et_android_sur_sgs2/index.html b/files/fr/archive/b2g_os/dual_boot_de_b2g_et_android_sur_sgs2/index.html deleted file mode 100644 index 3689a5cd26..0000000000 --- a/files/fr/archive/b2g_os/dual_boot_de_b2g_et_android_sur_sgs2/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Dual boot de B2G et Android sur SGS2 -slug: Archive/B2G_OS/Dual_boot_de_B2G_et_Android_sur_SGS2 -tags: - - Archive - - B2G - - Mobile -translation_of: Archive/B2G_OS/Building ---- -

- -

-

Avertissement : Cette procédure ne fonctionne plus réellement. Elle fonctionne seulement avec Android 4 (Ice Cream Sandwich) et Siyah Kernel v 5.0.1. Les versions plus récentes ne fonctionnent pas non plus. Considerez ce guide comme archivé, vous l'utilisez à vos risques et périls.

-

- -

Si vous voulez tester B2G de temps en temps mais continuer à utiliser Android comme OS principal et vous possédez un Samsung Galaxy S2, vous pouvez installer B2G dans une partition séparée (qui est déjà présente dans le téléphone) et choisir qui booter au démarrage du système.

- -

Prérequis

- -

Pour installer le dual boot Android et B2G, vous devez respecter ces prérequis :

- - - -

Liste des opérations

- -

Il faut effectuer plusieurs opérations dans l'ordre pour obtenir un dual boot opérationel. Les instructions suivantes doivent être effectuées en premier uniquement.

- -

Pour utiliser heimdall sans accès root, vous devez créer un fichier android.rules (la partie précédent l'extension .rules est arbitraire) et le placer dans /etc/udev/rules.d. Le fichier doit contenir la ligne suivante:

- -
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"
- -

Pour activer cette règle, vous devez redémarrer udev:

- -
sudo service udev restart
- -

et débrancher/rebrancher le téléphone. La règle ci-dessus va également autoriser adb à accèder au SGS2 sans droit root.

- -

Flasher le kernel Siyah

- -

Le kernel Siyah kernel est obligatoire pour le dual boot, car c'est lui qui le gère. Une fois que vous avez téléchargé et décompressé le fichier .tar, vous optiendrez un fichier nommé zImage. Pour le flasher sur votre téléphone, vous devez suivre ces étapes:

- -
    -
  1. Eteignez votre téléphone
  2. -
  3. Redémarrez en mode Download (appuyez simultanément sur les boutons "volume bas" + "home" + "power"  puis quand le téléphone le demandera, "volume haut")
  4. -
  5. Utilisez heimdall pour flasher le kernel grâce à la commande suivante (le téléphone doit être connecté au PC): -
    heimdall flash --kernel /path/to/zImage
    -
  6. -
- -

Une fois le kernel flashé, le téléphone va redémarrer.

- -

Préparer l'environnement de la rom B2G

- -

Une fois le kernel Siyah installé, il faut utiliser ces fonctions pour préparer l'environnement à l'installation de l'image B2G dans la deuxième partition. Suivez ces étapes :

- -
    -
  1. Eteignez votre téléphone
  2. -
  3. Redémarrez en mode recovery (Appuyez simultanément sur les boutons "volume haut" +  "home" + "power")
  4. -
  5. Dans l'interface tactile CWMR, allez dans "dual-boot options" -> Wipe 2ndROM data/cache -> Yes - Wipe. Cette opération prendra un certain temps.
  6. -
- -

Une fois l'opération terminée, sélectionnez Retour puis faites Redémarrer maintenant pour redémarrer votre téléphone. Si vous regardez dans la carte SD de votre téléphone vous verrez qu'il y a désormais un dossier .secondrom contenant 2 fichiers nommés cache.img et data.img.

- -

Mise à jour de B2G

- -

Les opérations suivantes doivent être réalisées à chaque compilation d'une nouvelle version de B2G.

- -

Afin de simplifier les instructions en ligne de commandes, il est recommandé de copier tous les fichiers nécessaires dans le même dossier (celui de votre choix). Les fichiers suivant sont nécessaires et doivent être copiés à l'intérieur du dossier:

- - - -

Une fois que tout vos fichiers sont réunis au même endroit, effectuez les étapes suivantes:

- -
    -
  1. Créez un fichier data.img file sur le fichier userdata.img.  Vous pouvez le faire avec la commande suivante: -
    simg2img userdata.img data.img
    -
  2. -
  3. Mettez le fichier data.img file dans le dossier .secondrom de votre téléphone. Vous pouvez le faire soit via le mode de stockage de fichier sur votre téléphone puis en le connectant à votre PC, sinon si USB Debug est activé, vous pouvez utiliser adb: -
    adb push /path/to/data.img /sdcard/.secondrom/data.img
    -
  4. -
  5. Eteignez votre téléphone
  6. -
  7. Redémarrez le en mode téléchargement (pressez en même temps le bouton "volume bas" + home + le bouton power ensuite, lorsque cela sera demandé appuyez sur le bouton "volume haut")
  8. -
  9. Utilisez heimdall pour flasher le firmware B2G dans la seconde partition: -
    heimdall flash --hidden system.img
    -
  10. -
- -

Une fois cela fait, votre téléphone va redémarrer et au démarrage vous pourrez démarrer sur votre seconde rom (B2G) en appuyant sur le bouton home pendant le décompte. Si tout s'est bien passé, une fois que vous aurez fini de démarrer sur B2G, un écran noir apparaîtra sur votre téléphone. Il vous faut maintenant installer Gaia.

- -
Note: Tout dépend de la façon dont vous voulez tester B2G, mais vous pouvez ne pas avoir envie de mettre un nouveau fichier data.img file sur le téléphone à chaque mise à jour de B2G, sachant qu'il effacera toutes vos préférences, pour les applications installées et en général tout ce que vous aurez fait pendant l'utilisation de B2G.
- -

Opérations de démarrage

- -

Les opérations suivantes doivent être réalisées à chaque démarrage dans B2G.

- -

Malheureusement, il n'y a pas de technique simple permettant d'ajouter Gaia à l'intérieur de l'image système B2G system.img , de plus il sera perdu dès que vous éteindrez votre téléphone. De ce fait, il vous faudra installer Gaia à chaque démarrage sur B2G. Pour installer Gaia effectuez les commandes suivantes dans une console après avoir démarré sur B2G (vous devez avoir un écran noir) et avoir connecté votre téléphone à votre PC:

- -
cd B2G/gaia
-GAIA_DOMAIN=foo.org make install-gaia
- -

Une fois le téléchargement de Gaia terminé, l'interface B2G apparaitra sur votre écran.

diff --git a/files/fr/archive/b2g_os/firefox_os_apps/building_blocks/index.html b/files/fr/archive/b2g_os/firefox_os_apps/building_blocks/index.html deleted file mode 100644 index 05289045d0..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_apps/building_blocks/index.html +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: Firefox OS Building Blocks -slug: Archive/B2G_OS/Firefox_OS_apps/Building_blocks -tags: - - Design - - Design patterns - - Firefox OS - - NeedsTranslation - - TopicStub - - UI - - building blocks -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_blocks ---- -

- -
-

The Firefox OS Building Blocks are reusable UI components (also called 'common controls') that reflect OS-wide design patterns. Building Blocks are used to create the interfaces of all Gaia default apps. You are free to make use of these components in your own Firefox OS apps, or general Web apps.

-
- -

Using the Firefox OS Building Blocks

- -

The code for the Firefox OS Building Blocks can be found in the Gaia Github repo under shared/style. Here, you can find a CSS file that contains the CSS for that particular Building Block, and a sub directory containing the HTML fragments and image assets. If you are creating your own standalone Web app, you can simply copy the CSS, HTML and image asset files across into your own project; if your app is intended to be installed on Firefox OS only (or you want to use these features only when the app is being used on Firefox OS), then you can link to the versions available inside Gaia.

- -

The pages for the individual Building Block implementations can be found under the pages for each building block — see next section. These contain instructions on how to implement each one.

- -
-

Note: The version 2.0 building block code is used in Firefox OS releases 2.0 through 2.2. Version 2.3 sees an update, with the building blocks being reimplemented using Web components — these provide the same functionality, but implemented in a much more powerful, flexible way. You'll see 2.3 pages appear underneath the main building block pages covering these Web components as soon as the information is available.

-
- -
-

Note: We also have an old guide covering the v1.x building blocks used in older versions of Firefox OS. This is mainly for legacy information.

-
- -

Web components preliminary setup

- -

This section details the preliminary setup needed to use Gaia Web components.

- -

Web components browser support

- -

To use Gaia Web components at all, you need to run them using a browser that supports Web components. The state of support is as follows:

- - - -

Web components are supported in Firefox OS from v2.1 onwards, although most of them weren't actually implemented until v2.3. Be aware also that currently Web components won't work for Firefox OS apps below internal (certified) level. This restriction should be lessened in the future.

- -
-

Note: If your app is certified, the components will just work. You don't need to set a specific manifest permission.

-
- -

Web components installation notes

- -

Gaia Web components are installed in your app using the Bower package manager. To install this, you first need Node.js/npm and Git installed. Once they are installed you can install Bower with

- -
npm install -g bower
- -

At this point you could also install the Gaia Fira Sans font that Firefox OS uses in your app , with the following command:

- -
bower install gaia-components/gaia-fonts
- -

You can then make use of the font by including the following in your head (along with a font-family of FiraSans):

- -
<link rel="stylesheet" type="text/css" href="bower_components/gaia-fonts/style.css"></link>
- -

Firefox OS Building Blocks

- -
-
-
-
Action menu
-
An action menu presents a list of actions, related to the app's content, from which the user may make a selection.
-
Banners
-
Banners (Status, in older versions of Firefox OS) provide information to the user in a transitory fashion, typically to confirm an action or to alert the user to a system event.
-
Buttons
-
Buttons are used to perform explicit actions. Buttons may be text or images.
-
Context menu
-
Accessed via a tap and hold gesture (sometimes called a long press), the Context Menu (called the Object Menu in older versions of Firefox OS) allows users to perform actions on objects without having to leave their current view.
-
Dialog
-
A Dialog (Confirm, in older versions of Firefox OS) provides the user with some important information, asks the user to take or confirm an action, or allows the user to make a choice or enter some information.
-
Drawer
-
The drawer is a scalable way for users to navigate between views or filter views. The drawer can also include links to app settings or other tools.
-
Header
-
A header is a dedicated space at the top of the screen, most often used to display the view title. It can also include navigation, action buttons and other controls.
-
Input area
-
An input area is a data entry field, and can be as simple as a text only entry field, or as complex as a multipart entry field with text entry, value selections, and buttons.
-
Layout
-
The Layout utility will help you to create common layout structures for your Firefox OS apps. Note that Layout is only available in Firefox OS 2.1 and above.
-
List items
-
List items are typically used to navigate to a new screen, or to display information or controls.
-
-
- -
-
-
Picker
-
The Picker is designed to select a group of items as attachments for messaging and email.
-
Progress and activity
-
Progress and activity indicators provide the user with visual feedback that a process (such as a resource loading) is active.
-
Scrolling
-
Scrolling areas allow the user to move text and/or images across the device's display.
-
Search
-
Search is used to filter a list or find context-specific content.
-
Slider
-
A Slider (which was called Seekbar in older Firefox OS versions) is used to select a value from a continuous or discrete range of values by dragging the handle.
-
Select mode
-
Select Mode (which was called Edit Mode in older Firefox OS versions) is designed to select and perform actions on items.
-
Subheader
-
Subheaders are used to describe a subsection of content.
-
Switches
-
Switches (such as checkboxes, etc.) allow users to activate and deactivate items. Switches are also used to select items within a list.
-
Tab/Filter
-
A Tab/Filter gives the user a way to easily switch between views or to filter a set of data.
-
Toolbars
-
Toolbars contain actions, indicators and navigation elements associated with the current view.
-
Value selector
-
Value Selectors let the user choose from among a list of possible values.
-
-
-
- -
-

Note: For a detailed guide to the design pattern followed by the building blocks when the Arabic locale (bidirectional) is selected, read Firefox OS in Arabic.

-
- -

Cross browser CSS

- -

Arnau March wrote a CSS file called cross browser CSS, containing rules to allow Firefox 2.0 building blocks to render properly across different browsers (ie 9, Firefox 18, Chrome 24, Safari 5.1.) If you want to write hosted apps that look ok across different browsers, include this CSS in your project.

- -

Browse Firefox OS Building Block implementations by version

- -

The pages below list links to pages covering the Firefox OS Building Block implementations as they appear in different versions of Firefox OS.

- - diff --git a/files/fr/archive/b2g_os/firefox_os_apps/index.html b/files/fr/archive/b2g_os/firefox_os_apps/index.html deleted file mode 100644 index 0fe489e10a..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_apps/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Firefox OS apps -slug: Archive/B2G_OS/Firefox_OS_apps -tags: - - Apps - - Building - - Components - - Firefox OS - - Installing - - TopicStub - - device APIs -translation_of: Archive/B2G_OS/Firefox_OS_apps ---- -

Cette section de la documentation de Firefox OS couvre les techniques spécifiques requises - et les outils disponibles - pour créer des applications Firefox OS. Vous trouverez ci-dessous un certain nombre de détails, des blocs de construction / composants Web de Firefox OS aux API des appareils et à l'installation d'applications.

- -

Création d'applications Firefox OS

- -
-
Création d'applications pour Firefox OS
-
Spécificités des applications de la plate-forme Firefox OS / Firefox, y compris les API d'installation et de gestion des applications, les fichiers manifestes, les applications packagées et hébergées, la gestion des autorisations d'API.
-
Localisation
-
Cet ensemble d'articles fournit des informations aux développeurs souhaitant fournir des versions localisées de leurs applications.
-
Performance
-
Cette page répertorie les sujets liés aux performances spécifiques à Firefox OS.
-
Comptes Firefox sur Firefox OS
-
Cet article fournit un aperçu de l'utilisation des comptes Firefox dans Firefox OS.
-
Applications de référence
-
Cette page répertorie un certain nombre d'exemples d'applications que nous avons rassemblées pour que vous puissiez télécharger, installer, jouer avec et apprendre. S'amuser!
-
Série Screencast: Principes de base des applications pour Firefox OS
-
Dans cette collection de courtes vidéos, les développeurs de Mozilla et Telenor expliquent en quelques étapes comment vous pouvez commencer à créer des applications pour Firefox OS.
-
- -

Blocs de construction

- -
-
Blocs de construction
-
Les blocs de construction Firefox OS sont des composants d'interface utilisateur réutilisables (également appelés «contrôles communs») qui reflètent les modèles de conception à l'échelle du système d'exploitation. Les blocs de construction sont utilisés pour créer les interfaces de toutes les applications par défaut de Gaia. Vous êtes libre d'utiliser ces composants dans vos propres applications Firefox OS ou dans vos applications Web générales.
-
- -

Guides de style

- -
-
Guide de style visuel de Firefox OS
-
Notre guide de style pour la conception visuelle de Firefox OS, couvrant les couleurs, la police, les arrière-plans, les icônes d'application et la conception d'éléments d'interface utilisateur spécifiques.
-
Guide de style de copie de Firefox OS
-
Ce guide décrit les règles que nous suivons pour écrire une copie d'application Firefox OS, mais peut être utilisé comme guide général pour écrire une bonne copie pour toutes les interfaces d'application.
-
Firefox OS en arabe
-
Un guide de l'implémentation de conception UX spécifique que Firefox OS a mis en place pour traiter l'arabe (et d'autres langues RTL.)
-
- -

Éléments de conception

- -
-
Bibliothèque d'éléments de conception de Firefox OS
-
Dans cette section, vous trouverez des éléments de conception, des illustrations, des modèles graphiques, des polices et d'autres matériaux qui vous seront utiles lors de la conception des applications Firefox OS / Gaia.
-
Police de l'icône Firefox OS
-
Firefox OS dispose de son propre jeu de polices d'icônes: cet article explique comment l'utiliser dans vos propres applications.
-
Transitions de Firefox OS
-
Une référence à certaines des transitions utilisées dans Firefox OS pour se déplacer entre différents états dans les applications, y compris des GIF animés illustrant les animations utilisées, ainsi que des exemples de code pour afficher le code d'animation CSS nécessaire pour implémenter ces animations.
-
- -

Références

- -
-
API des appareils Firefox OS
-
Cet article fournit une liste de pages couvrant ces API, ainsi que les autorisations du manifeste d'application pour chacune d'entre elles.
-
Outils de l'application Firefox OS
-
Cette page fournit une liste d'outils, de bibliothèques, d'exemples, etc. qui sont utiles aux développeurs d'applications Firefox OS, que vous souhaitiez copier un modèle de code ou que vous ayez besoin d'aide pour ajouter une fonctionnalité spécifique à votre application Firefox OS.
-
- -

Autres sujets d'application

- -
-
Portage des applications Chrome vers les applications Firefox OS
-
Cet article décrit les différences entre les applications Chrome et les applications Firefox OS, et comment vous pouvez convertir entre les deux.
-
FAQ sur le développement d'applications
-
Cette FAQ est une compilation de réponses aux questions courantes sur le développement d'applications.
-
- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/how_to_get_started_with_tv_apps_development/index.html b/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/how_to_get_started_with_tv_apps_development/index.html deleted file mode 100644 index 84e03356af..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/how_to_get_started_with_tv_apps_development/index.html +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: Comment débuter avec le développement d'application pour TV -slug: >- - Archive/B2G_OS/Firefox_OS_Connected-Devices_Guide/How_to_get_started_with_TV_apps_development -translation_of: Mozilla/Firefox_OS_for_TV ---- -

Introduction

- -

Ce document est écrit pour les développeurs web qui sont intéressés par le développement d'applications pour TV. Nous allons parler de la façon de compiler et lancer le simulateur Firefox OS avec une application smart-TV, puis nous verrons comme  il est facile d'écrire une application et de la déployer sur une TV.

- -

Fondamentalement, réaliser une application qui fonctionne sur les TV est similaire à faire une application classique Firefox OS, sauf pour les particularité suivantes :

- - - -

Vous pouvez vous rendre sur l'App Center pour plus de ressources sur les constructions d'application pour Firefox. Cette article traite spécifiquement de la façon de construire un environnement de développement pour TV en utilisant une simple application Hello-World comme exemple.

- -

Statut actuel et à venir :

- -

Les applications conçues pour les smart TV sont stockées dans Gaia/tv_apps, avec le préfixe “smart-”, aussi connu sous le nom de smart TV apps. Au début du printemps 2015 il y aura des TV sur le marché avec les applications listées ici : https://github.com/mozilla-b2g/gaia/tree/master/tv_apps.

-

Smart-home et Smart-deck sont des applications classique pour une TV, et vous pouvez les utiliser comme base pour trouver quelques idées.

- -

Contribuer aux applications smart TV:

- -

Pour contribuer à une applications smart TV, il vous suffit de suivre les mêmes règles que pour contribuer au code de Gaia.

- -

Introduction à Firefox OS:

- -

https://developer.mozilla.org/en-US/Firefox_OS/Introduction

- -

 

- -

Construire des applications pour Firefox OS :

- -

https://developer.mozilla.org/en-US/Apps/Build

- -

Télécharger les outils

- -

 

- -

Nous avons besoin de 3 principaux composants pour construire l'environnement de développement : 1) Le simulateur de bureau, pour lancer votre application TV sur PC comme sur une vraie TV, 2) Firefox Nightly/Aurora comme débogueur, et 3) Le dépôt Gaia.

- -

 

- -

Pour la première étape, le simulateur de bureau, vous pouvez trouver nos builds nightly ou builder vous-même. Plus d'info ci-dessous :

- -

https://developer.mozilla.org/en-US/Firefox_OS/Building_the_Firefox_OS_simulator

- -

Firefox Nightly fonctionne aussi, mais il permet seulement de tester votre app indépendamment sans pouvoir tester tout le système smart-TV. Nous recommandons d'utiliser Firefox OS bureau pour un meilleur environnement de développement. Vous pouvez le télécharger ici : https://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-central/

- -

 

- -

La seconde étape consiste à récupérer Firefox Nightly/Aurora, naviguer et télécharger depuis la page officielle de release.

- -

https://nightly.mozilla.org/

- -

 

- -

Pour l'étape 3 veuillez forker le dépot Gaia. Référez-vous aux étapes suisvantes : https://developer.mozilla.org/en-US/Firefox_OS/Developing_Gaia/Running_the_Gaia_codebase#Running_your_own_Gaia_build

- -

 

- -

Premièrement, faites un fork du dépot Gaia principal sur Github.

- -
    -
  1. Ensuite, clonez votre fork localement:
    - git clone https://github.com/your-username/gaia.git
  2. -
  3. -

    Ajoutez un lien upstream comme cela :
    - cd gaia
    - git remote add upstream https://github.com/mozilla-b2g/gaia

    -
  4. -
- -

Mise en place de votre environnement

- -

Maintenant vous avez besoin de créer votre profil Gaia. Dans le dossier de votre dépôt, lancer la commande ci-dessous :

- -

$ make GAIA_DEVICE_TYPE=tv DEVICE_DEBUG=1

- -

Cela va crée un profil pour un débogage optimal dans votre répertoire. Cela crée des versions non-packagées (versions hébergées) des applications Gaia qui peuvent être servies directement via le serveur local HTTPD qui est contenu dans Firefox pour ordinateur de bureau comme une extension. Lorsque vous faites un changement vous avez besoin de rafraîchir la fenêtre de votre navigateur pour voir le résultat (comme nous allons vous le montrer) plutôt que de re-construire votre profil, re-pousser le profil sur l'appareil etc. C'est un bon et rapide hack CSS/JS/HTML. Donc, lancez le simulateur de bureau avec une taille d'écran précise, un serveur de debug distant, et le lien vers votre profil :

- -

 

- -

$ b2g-bin -screen 1920x1080 -start-debugger-server 6000 -profile /path/to/gaia/profile

- -

 

- -

Notez que si le paramètre de l'écran est plus grand que votre résolution de PC, cela peut casser le sapplications systèmes. Si cela arrive, réduisez la taille de l'écran comme expliqué précedemment.
- Si tout fonctionne bien, vous allez voir l'application horloge (en remplacement temporaire de l'application de lancement).

- -

- -

Appuyer sur la touche accueil au bas de la fenêtre va vous amener sur l'application accueil qui est le point d'entrée pour les applications TV. Vous pouvez naviguer avec les flèches du clavier, et lancer “Apps” pour lancer le gestionnaire d'application, là ou vous lancerez vos propres applications plus tard.

- -

- -

L'écran "Accueil"

- -

- -

L'écran "gestionnaire d'application"

- -

 

- -

L'exemple Hello World

- -

 

- -

WebIDE dans Firefox Desktop

- -

En utilisant le WebIDE, on peut facilement bootstraper une application web, faire des modifications HTML/CSS/JS, et déboguer l'application sans avoir un véritable appareil.
- Pour ouvrir le WebIDE dans Firefox Desktop, selectionner Outils > Web Developer > WebIDE depuis le menu :

- -

- -

Créer une application depuis le template

- -


- Cliquez sur  “Open App” dans le coin gauche en haut du WebIDE et choisissez “Nouvelle application…” dans le menu. Selectionner “HelloWorld,” donnez un nom de projet, et cliquez sur “OK.” Après avoir décidé du répertoire de sauvegarde de sprojets, WebIDE va générer une application avec un template simple pour vous.

- -

- -

- -

 

- -

- -

Maintenant vous pouvez programmer votre application dans WebIDE ou utiliser n'importe quel éditeur que vous préférez.

- -


-  

- -

Lancer votre application sur une TV

- -

 

- -

Il n'y a pas encore de build TV pour le simulateur, nous avons besoin de lancer b2g-desktop.

- -

 

- -
    -
  1. Suivez les instructions dans la section “Mise en place de votre environnement” pour lancer votre environnement dans b2g-desktop (n'oubliez pas d'ajouter le paramètres“-start-debugger-server 6000”).
  2. -
  3. Dans le WebIDE, cliquer sur “Select Runtime” dans le coin droit du haut et selectionner “Remote Runtime.”
    -
  4. -
  5. Remplissez la boite de dialogue avec “localhost:6000” et cliquez sur “OK.”
    -
  6. -
  7. Cliquer sur l'icone “Install and Run” . Vous verrez votre applications fonctionner dans b2g-desktop.
    -
  8. -
  9. Cliquez sur l'icone “Debug App” et la boite d'outils des DevTools apparait. Vous pouvez vous référer à la section "Debugging apps" pour déboguer votre application.
    -
  10. -
- -

Interagir avec une télécommande TV

- -

L'une des différences entre les téléphones et les TV est le dispositif d'entrée d'instructions. En général, les Tv n'ont pas d'écran tactile, donc les applications ne peuvent pas être controlées avec les événements de la souris ou les événement tactiles.  En revanche vos applications peuvent être contrôlées par les événements bouton qui sont envoyés à la TV par la télécommande.

- -

 

- -

La définition  des boutons d'une télécommande TV est documentée dans cette spécification W3C :

- -

http://www.w3.org/TR/DOM-Level-3-Events-key/#keys-media-controller

- -

 

- -

Le “focus” est un autre problème qui peut être mentionné sur les TV. Il est important de vous assurer que le focus est toujours sur le bon élément, car on ne peut pas toucher les élément d'une TV directement.

- -

 

- -

 

diff --git a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/index.html b/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/index.html deleted file mode 100644 index 6775ef2d76..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Téléviseurs et appareils connectés -slug: Archive/B2G_OS/Firefox_OS_Connected-Devices_Guide -tags: - - TopicStub -translation_of: Mozilla/Firefox_OS_for_TV ---- -

Ce document est écrit pour les développeurs Web qui sont intéressés par Firefox OS pour les téléviseurs, le travail actuel et à venir, ainsi que les applications web pour les téléviseurs. Il est montré comment construire et exécuter le simulateur Firefox OS TV, puis comment commencer à créer des applications pour les TV et les déployer.

- -

Les principales différences entre l'utilisation de Firefox OS sur un téléviseur et un téléphone (ou un ordinateur) sont :

- - - -

Statut actuelle et futurs projets

- -

Gaia 2.2 et supérieur contient des fonctionnalités pour fonctionner sur la télévision. Vous pouvez trouver des applications prêtes à l'emploi pour les téléviseurs intelligents dans gaia/tv_apps; les applications avec le préfixe smart- sont appelées applications de télévision intelligente. À partir du premier semestre 2015, il y aura des appareils TV sur le marché avec des interfaces utilisateur basées sur les applications répertoriées ici.

- -
-

Note: smart-home et smart-deck sont de bonnes applications à prendre comme modèles de départ pour vos propres applications ou pour vous faire des idées et trouver l'inspiration.

-
- -

Développement des applications TV

- -

Dans cette partie, vous allez découvrir comment configurer un environement de développement pour exécuter et tester vos propres applications TV et comment assembler une application simple de test.

- -

Téléchargement des outils

- -

Vous aurez besoin de trois composants pour construire votre environnement de développement :

- - diff --git "a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/interagir_avec_les_t\303\251l\303\251commandes_tv/index.html" "b/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/interagir_avec_les_t\303\251l\303\251commandes_tv/index.html" deleted file mode 100644 index cfbac66130..0000000000 --- "a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/interagir_avec_les_t\303\251l\303\251commandes_tv/index.html" +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Interagir avec les télécommandes TV -slug: >- - Archive/B2G_OS/Firefox_OS_Connected-Devices_Guide/Interagir_avec_les_télécommandes_TV -tags: - - B2G - - Clavier - - Firefox OS - - NeedsContent - - TV - - touches - - télécommande -translation_of: Mozilla/Firefox_OS_for_TV/Interacting_with_TV_remote_controls ---- -

-

Brouillon
- Cette page n'est pas terminée.

- -

- -

La disponibilité des mécanismes de saisie constitue l'une des principales différences entre les téléphones et les TV. En général, une TV ne dispose pas d'écran tactile et les applications ne peuvent donc pas être contrôlées via des événements souris ou tactiles. Au lieu de ça, vos applications devront sans doute réagir aux événements des boutons envoyés par la TV lors de l'appui sur les boutons de la télécommande. Cet article aborde les bases du développement de mécanismes de contrôle appropriés à votre application TV.

- -

Le focus est un autre problème à souligner en ce qui concerne les applications TV. Il est important de s'assurer qu'à tout moment le focus est bien mis sur l'élément correct car il n'est pas possible de toucher les éléments directement dans l'application TV.

- -
-

Note : les touches des télécommandes TV sont définies dans la spécification W3C DOM Level 3 KeyboardEvent key Values ; voir la section Media Controller Keys.

-
diff --git a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/simuler_firefox_os_pour_tv/index.html b/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/simuler_firefox_os_pour_tv/index.html deleted file mode 100644 index 9bb1c307a3..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/simuler_firefox_os_pour_tv/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Simuler Firefox OS pour TV sur votre ordinateur -slug: Archive/B2G_OS/Firefox_OS_Connected-Devices_Guide/Simuler_Firefox_OS_pour_TV -translation_of: Mozilla/Firefox_OS_for_TV/Simulating_Firefox_OS_for_TV ---- -

- -

Dans cet article, vous apprendrez comment mettre en place un simulateur pour TV sous Firefox OS sur votre ordinateur afin de lancer et tester vos propres applications TV.

- -

Utiliser le simulateur via le WebIDE

- -

Les outils du WebIDE de Mozilla procurent un moyen simple de créer un simulateur personnalisé pour différentes configurations de téléviseurs.

- -
    -
  1. -

    Ouvrez le WebIDE dans Firefox Desktop en sélectionnant Outils > Développement Web > WebIDE dans le menu principal.  La zone de droite de la fenêtre du WebIDE liste les simulateurs déjà installés ainsi qu'un menu Installer un simulateur pour créer un nouveau simulateur dans le WebIDE.

    -
  2. -
  3. -

    Si vous n'avez pas encore installé de simulateur, faites-le en cliquant sur Installer un Simulateur et installé la version TV de Firefox OS de votre choix.

    - -

    -
  4. -
  5. -

    Une fois que votre simulateur a été créé et listé sous Simulators, cliquez sur l'îcone de configuration à droite du nom du simulateur. Un écran vous permettant de configurer l'appareil que vous shouaitez simuler apparaitra.

    - -

    -
  6. -
  7. -

    Un groupe TVs est disponible dans la liste déroulante Appareil, et il contient tous les modèles de TV actuellement supportés:

    - -

    -
  8. -
  9. -

    Une fois que vous avez configuré votre TV avec vos spécifications, cliquez sur le nom du simulateur et le simulateur va se lancé!  L'écran d'accueil ressemblera à celui-ci dessous:

    - -

    -
  10. -
- -

Utiliser Mulet pour simuler Firefox OS pour TV

- -

Si vous préférez compiler votre propre profil TV, peut être pour tester les changements dans Gaia qui n'ont pas encore été intégrés dans le simulateur officiel Firefox OS, vous pouvez lancer votre profil dans un build spécial de Firefox appelé Firefox Mulet. Regardez Utiliser Gaia dans Firefox Mulet pour apprendre comment mettre en place un environnement.

- -
    -
  1. -

    Pour créer un profil spécial de Gaia pour TV, lancer la commande make dans votre dossier du dépôt gaia avec les options suivantes:

    - -
    GAIA_DEVICE_TYPE=tv DEVICE_DEBUG=1 make
    - -

    Cela créé un profil TV dans le dossier profile qui est initialisé pour debugger de façon optimale.

    -
  2. -
  3. -

    Lancez Mulet depuis votre ligne de commande, en passant votre profil Gaia comme profil à utiliser pour l'ouverture (défini par l'option -profile), et la configuration de la taille de l'écran (définie par l'option -screen):

    - -
    ./mulet/FirefoxNightly.app/Contents/MacOS/firefox-bin -no-remote -screen 1600x900 -profile /path/to/gaia/profile
    - -
    -

    Note: Si l'option -screen spécifie une résolution plus grandeque celle de la taille d'écran de votre PC, l'application système ne va pas fonctionner correctement et vous pourriez avoir une interface cassée. Réduisez la taille d'écran autant que nécessaire pour correspondre à votre système.

    -
    - -
    -

    Note: Le chemin exact passé dans l'option -profile /path/to/gaia/profile dont vous avez besoin, vous est donné quand vous créez votre profil. (en lançant la commande make, comme montrez ci-dessus.)

    -
    -
  4. -
  5. -

    Si tout va bien, vous verrez s'afficher l'application de l'écran d'accueil — éventuellement affichée incorrectement avec une rotation. C'est un bug connu (Bug 1228899):TV build runs on Mulet

    -
  6. -
  7. -

    Vous pouvez corriger ce problème en cliquant sur le bouton de rotation la barre d'outil de Mulet et en ajustant la taille de l'écran si nécessaire:

    -
  8. -
- -

TV build runs on Mulet

diff --git a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/tv_remote_control_button_mapping_to_keyboard/index.html b/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/tv_remote_control_button_mapping_to_keyboard/index.html deleted file mode 100644 index 71ff7cf960..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_connected-devices_guide/tv_remote_control_button_mapping_to_keyboard/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Correspondance clavier des boutons de télécommande TV -slug: >- - Archive/B2G_OS/Firefox_OS_Connected-Devices_Guide/TV_remote_control_button_mapping_to_keyboard -tags: - - Clavier - - Contrôles - - Distance - - Firefox OS - - Gaia - - TV -translation_of: Mozilla/Firefox_OS_for_TV/TV_remote_control_button_mapping_to_keyboard ---- -

Cet article donne une brève description de l'utilisation du clavier pour simuler les boutons d'une télécommande.

- -

Le clavier est utilisé pour simuler les boutons d'une télécommande lors du développement d'applications pour Firefox OS sur TV. Les tableaux suivants détaillent les équivalents clavier des boutons de télécommande pour les trois plates-formes différentes : Mac OS X, Windows et Linux.

- -

Mac OS X

- - - - - - - - - - - - - - - - - - - - - - - - -
TélécommandeClavier
homefn + left
backesc
enterreturn
optionfn + ctrl + I
- -

Windows

- - - - - - - - - - - - - - - - - - - - -
TélécommandeClavier
homehome
backesc
enterenter
- -

Linux

- - - - - - - - - - - - - - - - - - - - - - - - -
TélécommandeClavier
homehome
backesc
enterenter
optionshift + F10
diff --git a/files/fr/archive/b2g_os/firefox_os_faq/index.html b/files/fr/archive/b2g_os/firefox_os_faq/index.html deleted file mode 100644 index a322bd8aae..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_faq/index.html +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Firefox OS FAQ -slug: Archive/B2G_OS/Firefox_OS_FAQ -translation_of: Archive/B2G_OS/Introduction ---- -
-
- Comment obtenir un téléphone de développeur ?
-
- Vous pouvez en acheter un sur le site de Geeksphone ou si vous êtes un Mozilla Reps vous pouvez demander un Keon.
-
- Si je ne souhaite pas acheter de téléphone, puis-je tout de même développer une application pour Firefox OS ?
-
- Absolument ! Vous pouvez tester votre application sur Android (en utilisant le Marketplace de Firefox) ou sur votre ordinateur en utilisant le simulateur Firefox OS.
-
- En quoi sera-t-il comparable au téléphone final ?
-
- Nous travaillons avec plusieurs partenaires pour sortir ce téléphone sur le marché grand public. Nous parlerons de ces appareils plus tard.
-
- Où puis-je télécharger Firefox OS et l'essayer sur mon propre téléphone ?
-
- https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Building_and_installing_Firefox_OS
-
- Comment puis-je tester mon application sur Firefox OS ?
-
- Sur un téléphone Android avec Firefox ou en utilisant le simulateur Firefox OS.
-
- Qu'est-ce que Firefox OS ?
-
- C'est un nouveau système d'exploitation mobile développé entièrement en utilisant les standards ouverts du Web. Il permet de développer toutes les fonctionnalités de l'appareil (appels, messagerie, navigation..) dans une application HTML5 qui peut accéder à toutes les fonctionnalités sous-jacentes d'un téléphone (seulement disponibles pour les applications natives dans les autres éco-systèmes).
-
- Quelle est la liste complète des API web ? Allez-vous les standardiser ?
-
- Un grand nombre des API web seront prises en charge dans l'implémentation initiale de Firefox OS. Une liste complète est disponible ici https://wiki.mozilla.org/WebAPI#APIs. La standardisation est en cours.
-
- Est-ce que vos API web seront standardisées pour une utilisation multi plate-forme ?
-
- Oui, les API sont le fruit d'un travail avec plusieurs partenaires et marques et certaines d'entre-elles sont déjà disponibles sur d'autres plate-formes. Permettre aux applications web d'accéder au matériel est un problème pour la plus part des entreprises technologiques, nous offrons un bon point de départ pour que cela se développe sur plus de plate-formes.
-
diff --git a/files/fr/archive/b2g_os/firefox_os_usage_tips/index.html b/files/fr/archive/b2g_os/firefox_os_usage_tips/index.html deleted file mode 100644 index 5c9b850f65..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_usage_tips/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Conseils d'utilisation Firefox OS -slug: Archive/B2G_OS/Firefox_OS_usage_tips -tags: - - Astuces - - Firefox OS -translation_of: Archive/B2G_OS/Firefox_OS_usage_tips ---- -

- -
-
Explique toutes les fonctionnalités développeur du téléphone et ce qu'elles font (Paramètres > Informations > Plus d'informations > Développeurs)
-
Débloquer votre téléphone
-
Instructions sommaires pour débloquer votre téléphone.
-
Faire des captures d'écran
-
Comment prendre des captures d'écran sur votre téléphone Firefox OS.
-
- -

 

diff --git a/files/fr/archive/b2g_os/firefox_os_usage_tips/unlocking_your_phone/index.html b/files/fr/archive/b2g_os/firefox_os_usage_tips/unlocking_your_phone/index.html deleted file mode 100644 index 135124a83e..0000000000 --- a/files/fr/archive/b2g_os/firefox_os_usage_tips/unlocking_your_phone/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Débloquer votre téléphone -slug: Archive/B2G_OS/Firefox_OS_usage_tips/Unlocking_your_phone -tags: - - Firefox OS -translation_of: Archive/B2G_OS/Firefox_OS_usage_tips/Unlocking_your_phone ---- -

Si votre build de Firefox OS commence par vous demander un mot de passe pour débloquer votre appareil, le code par défaut est 0000. Certaines builds vont faire cela lorsque nous développons et testons le lock screen.

diff --git a/files/fr/archive/b2g_os/gaia_hacking_guide/index.html b/files/fr/archive/b2g_os/gaia_hacking_guide/index.html deleted file mode 100644 index 2abb1dd023..0000000000 --- a/files/fr/archive/b2g_os/gaia_hacking_guide/index.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Guide de développement Gaia -slug: Archive/B2G_OS/Gaia_hacking_guide -tags: - - Gaia - - Guide - - Mobile - - NeedsContent -translation_of: Archive/B2G_OS/Developing_Gaia ---- -

Le guide de développement Gaia n'est pas encore rédigé. Cependant, vous pouvez vous référer à cet article sur le wiki Mozilla en attendant.

diff --git a/files/fr/archive/b2g_os/index.html b/files/fr/archive/b2g_os/index.html deleted file mode 100644 index f137db5d1e..0000000000 --- a/files/fr/archive/b2g_os/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: B2G OS -slug: Archive/B2G_OS -tags: - - Aperçu - - B2G - - B2G OS - - Bases - - Débutant - - Démarrer avec b2gos - - Gaia - - Gecko - - Gonk - - Mozilla - - gecko web os - - os de mozilla basé sur le web - - os smartphone b2g -translation_of: Archive/B2G_OS ---- -
B2G OS est un système d'exploitation autonome et complet pour le web ouvert. Il s'agit d'un projet open source développé par la communauté Mozilla et qui constitue les bases des produits Firefox OS.
- -

B2G OS est un système d'exploitation open source, maintenu par la communauté, pour les smartphones, tablettes, TVs intelligentes et autres appareils connectés. Le projet a démarré en 2011 et est basé sur le noyau Linux et le moteur de rendu Gecko. L'interface utilisateur entière est construite avec des technologies web (HTML, CSS et JavaScript) et peut être utilisée pour lancer et utiliser des applications web. Depuis que Mozilla a abandonné son programme commercial de smartphone Firefox OS, la partie smartphone du projet est intégralement maintenue par la communauté de bénévoles de Mozilla et placée sous la marque B2G OS.

- -

- -
-

Note : Un appel à contribution et un autre pour l'adoption d'applications ont été lancés pour mobiliser davantage de personnes, n'hésitez pas à les relayer !

-
- -
-
-

Comment contribuer

- -
    -
  • Signaler et corriger des bogues (le méta-bogue est le bogue 1252143)
  • -
  • Aider à corriger les tests qui échouent
  • -
  • Porter une app smartphone gaia : -
      -
    1. La convertir en webapp (ou)
    2. -
    3. La convertir vers chrome:// (pourquoi ?) et faire un retour
    4. -
    -
  • -
  • Porter B2G OS sur votre téléphone ou nous aider à maintenir un portage
  • -
  • Aider à corriger les bogues de Gecko
  • -
  • Contribuer à améliorer la traduction de cette documentation et du wiki
  • -
  • Proposer et implémenter des nouvelles caractéristiques pour les smartphones
  • -
-
- -
-

S'impliquer

- - - -

Pour participer aux réunions et aux Groupes de Travail communautaires, s'enregistrer sur ce Calendrier. Ils sont annoncés sur Discourse, où vous pouvez trouver des informations sur comment participer ainsi que les remarques.

-
- -
-

Appareils compatibles

- - - -

Pour plus d'informations, voir cette page.
- Flashez facilement votre appareil avec B2G Installer.
- Votre appareil ne figure pas dans la liste ? Essayez Mulet sur ordinateur de bureau

-
-
- -
-

Note: certaines pages ont été déplacées vers l'Archive MDN — informez-nous si vous avez des difficultés à trouver quelque chose ou s'il y a des choses qui devraient selon vous être replacées dans cette section.

-
- -

 

- - - -
    -
  1. Architecture de B2G OS - -
      -
    1. Architecture de B2G OS
    2. -
    3. APIs de B2G OS
    4. -
    -
  2. -
  3. Gaia -
      -
    1. Vue d'ensemble de Gaia
    2. -
    3. Différentes façons d'exécuter Gaia
    4. -
    5. Faire fonctionner le code de Gaia
    6. -
    7. Développer pour Gaia -
        -
      1. Comprendre la structure du code de Gaia
      2. -
      3. Apporter des modifications au code de Gaia
      4. -
      5. Tester les modifications du code de Gaia
      6. -
      7. Soumettre un correctif pour Gaia
      8. -
      9. Éléments de base sur le système de construction de Gaia
      10. -
      11. Référence des options de Make
      12. -
      13. Référence des outils pour Gaia
      14. -
      -
    8. -
    -
  4. -
  5. Construire B2G OS -
      -
    1. Vue d'ensemble de la construction
    2. -
    3. Résumé du processus de compilation de B2G OS
    4. -
    5. Prérequis pour la compilation
    6. -
    7. Se préparer pour la première construction
    8. -
    9. Compiler B2G OS -
        -
      1. Compiler B2G OS
      2. -
      3. Compiler B2G OS pour le Flame sur Mac OS X
      4. -
      5. Compiler pour le Fairphone
      6. -
      7. Carte de référence des variables de compilation de B2G
      8. -
      -
    10. -
    -
  6. -
  7. Exécuter B2G OS sur le Bureau -
      -
    1. Choisir comment exécuter Gaia ou B2G OS
    2. -
    3. Exécuter B2G OS sur ordinateur grâce à Mulet
    4. -
    -
  8. -
  9. Installer B2G OS sur mobile -
      -
    1. Installation de B2G OS sur un appareil mobile
    2. -
    3. Module B2G installer
    4. -
    -
  10. -
  11. Appareils compatibles
  12. -
  13. Créer des mises à jour pour B2G OS -
      -
    1. Création et installation de paquets de mise à jour B2G OS
    2. -
    3. Construction et installation de build communautaire FOTA
    4. -
    -
  14. -
  15. Portage de B2G OS -
      -
    1. Aperçu du portage
    2. -
    3. Les bases du portage
    4. -
    5. Portage sur CyanogenMod
    6. -
    -
  16. -
diff --git a/files/fr/archive/b2g_os/installer_sur_un_telephone_mobile/index.html b/files/fr/archive/b2g_os/installer_sur_un_telephone_mobile/index.html deleted file mode 100644 index 04be7c7794..0000000000 --- a/files/fr/archive/b2g_os/installer_sur_un_telephone_mobile/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Installer Firefox OS sur un téléphone mobile -slug: Archive/B2G_OS/Installer_sur_un_telephone_mobile -tags: - - B2G - - Compilation - - Mobile - - Terminal -translation_of: Archive/B2G_OS/Installing_on_a_mobile_device ---- -

-
-

Une fois que vous avez compilé Boot to Gecko pour un téléphone mobile supporté, vous pouvez l'installer. Cet article va vous guider dans cette procédure.

-
-
- Note : La première fois que vous flashez votre téléphone, il doit posséder la version 4 d'Android (Ice Cream Sandwich). Autrement, le processus ne se déroulera pas correctement. À partir du moment où vous avez effectué votre première installation de B2G, vous pourrez effectuer les mises à jours dessus.
-

Installer ADB

-

Sur OSX

-

Si vous avez homebrew sur OS X, effectuez :

-
brew install android-platform-tools
-

Sinon, téléchargez les Android Developer Tools et ajoutez les binaires à votre PATH.

-

Sur Ubuntu

-
sudo apt-get install android-tools-adb
-

 

-

Flasher votre téléphone

-

Pour flasher entièrement votre téléphone, connectez-le à votre ordinateur puis entrez simplement :

-
./flash.sh
-
-

C'est tout. Le B2G que vous aviez compilé va alors être flashé sur votre téléphone.

-

Attention : si vous mettez à jour avec une version comprenant d'importantes modification de Gaia, vous pouvez également avoir besoin de lancer les commandes suivantes:

-
cd gaia
-make reset-gaia
-
-

Cela effacera les données enregistrées dans Gaia, mais surtout les configurations et préférences obsolètes - ainsi vous lancerez une Gaia « propre ». En théorie, ./flash.sh devrait effectuer ces commandes, mais sur certains terminaux (par exemple Hamachi), ./flash.sh ne met à jour qu'un sous-ensemble des modules (./flash.sh -f forcera alors la mise à jour intégrale).

-

Configurer les règles udev pour votre appareil

-

Sous Linux, si vous obtenez ceci :

-
< waiting for device >
-

Cela signifie probablement que vous n'avez pas entré de règle udev spécifique au montage rapide (fastboot)  de votre appareil,  qui est différent de celui de adb. Vous pouvez obtenir le USB vendor ID en lançant lsusb , mais il s'agit habituellement de celui de Google : 18d1, aussi ajouter cette ligne dans votre fichier /etc/udev/rules.d/51-android.rules devrait suffire :

-
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
-

De façon plus générale, voir le paragraphe sur la configuration des règles udev dans l'article sur les prérequis.

-
- Note : Sous Linux, si vous obtenez une erreur libusb "-3", cela signifie que vous devez être root pour accéder au périphérique USB. Relancez le script à nouveau en utilisant sudo.
-
- Note 2: Si vous avez un téléphone Unagi ou un Geeksphone Keon; vous aurez besoin de deux lignes - une pour l'ID du vendeur de téléphone, et une pour l'ID de Google.
-

Notes destinées aux possesseurs de terminaux Hamachi, Heix et Leo

-

Si votre téléphone est un terminal Hamachi, Helix ou Leo, par défaut le script ./flash.sh ne copiera que Gecko et Gaia. Il est recommander de flasher tout d'abord l'OEM comme base afin de disposer du firmware et des couches Gonk, puis de flasher Gecko et Gaia par dessus. Si vous désirez flasher en utilisant directement les images, vous pouvez outrepasser le comportement par défaut avec

-
-

./flash.sh -f

-
-

 

-

Notes destinées aux possesseurs de Samsung Galaxy 2

-

Si votre téléphone est un Galaxy S2 et que vous utilisez Heimdall 1.3.2 (la dernière version ; utilisez heimdall version pour connaître la version que vous utilisez), vous pouvez apercevoir une erreur inquiétante "FACTORYFS upload failed!" accompagnée d'informations complémentaires. Il s'agit en fait d'un message indiquant la réussite de l'opération, que vous pouvez ignorer.

-

Pour vous débarasser de ce comportement étrange, récupérer une copie de la source d'Heimdall, en downgradant vers la version 1.3.1 (git checkout fbbed42c1e5719cc7a4dceeba098981f19f37c06 ), puis compilez-la en suivant les informations du fichier README. L'installation de cette version devrait faire disparaître cette erreur. Cette étape, bien qu'utile pour retirer ce message étrange, n'est pas nécessaire.

-

Aucune version de Heimdall ne peut flasher une image système de plus de 100 Mo. Vous pouvez vérifier si votre image n'est pas trop grosse en utilisant la commande :

-
ls -l ./out/target/product/galaxys2/system.img
-
-

Si elle est trop volumineuse, demandez conseil sur IRC (#b2g) ; il existe des solutions pour effectuer le flashage en deux fois.

-

Étape supplémentaire pour le Samsung Galaxy S2

-

Si vous flashez votre Galaxy S2, il vous faudra suivre cette étape supplémentaire. Gaia n'est pas flashée automatiquement par le script flash.sh ; vous aurez également besoin de lancer la commande

-
./flash.sh gaia
-
-

Flasher des partitions spécifiques vers un téléphone avec fastboot

-

Vous pouvez flasher des partitions spécifiques vers des téléphone avec fastboot (c'est à dire, autre qu'un Galaxy S 2). Par exemple :

-
./flash.sh system
-./flash.sh boot
-./flash.sh user
-
-
-

Attention : Flasher la partition user peut entraîner la pertes des informations spécifiques à l'utilisateur comme les contacts et autres !

-
-

Mettre à jour des modules spécifiques

-

Vous pouvez mettre à jour des modules spécifiques en spécifiant leur nom lors de l'opération de flashage. Par exemple :

-
./flash.sh gaia
-./flash.sh gecko
-
-

Pour mettre à jour uniquement une application donnée, vous pouvez utiliser la variable d'environnement BUILD_APP_NAME :

-
BUILD_APP_NAME=calendar ./flash.sh gaia
-

Si vous n'utilisez pas votre téléphone pour développer (vous n'êtes pas intéressé(e) par les applications de tests et les éventuelles optimisations), vous pouvez mettre à jour Gaia grâce à la commande suivante :

-
VARIANT=user ./flash.sh gaia
-

Étapes suivantes

-

Si vous êtes arrivés jusqu'ici, votre téléphone devrait exécuter Boot to Gecko ! C'est le moment d'expérimenter, d'écrire un peu de code, des tests, ou de faire une bonne session de débogage !

-
- Note : Un petit conseil : si l'écran de verouillage de votre B2G nouvellement compilé demande un code de déverrouillage, le code par défaut est 0000.
-

En cas de problème...

-

Voici quelques manipulations à effectuer si votre terminal ne fonctionne plus après l'installation de B2G, ou après une mise à jour.

-

Si l'interface graphique ne se lance pas

-

Si vous mettez à jour votre téléphone et que l'interface utilisateur ne se lance pas, vous pouvez effectuer une remise à zéro pour effacer les informations de configurations périmées. Cela peut permettre de corriger le problème (attention : cela peut également supprimer les informations spécifiques à l'utilisateur comme les contacts et autres !)

-

Voici comment faire :

-
cd gaia
-make reset-gaia
-
-

Si vous souhaitez passer d'une version de développement à une version de production

-
cd gaia
-make reset-gaia PRODUCTION=1
-

Attention : reset-gaia peut supprimer des informations spécifiques à l'utilisateur comme les contacts et autres !

-

Message d'erreur "image is too large"  au lancement de ./flash.sh

-

Cela peut vouloir dire que vous devez rooter votre téléphone avant de le flasher, car B2G a besoin d'être installé sur la partition root.

diff --git a/files/fr/archive/b2g_os/introduction/index.html b/files/fr/archive/b2g_os/introduction/index.html deleted file mode 100644 index 27428cfdf0..0000000000 --- a/files/fr/archive/b2g_os/introduction/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Introduction à Firefox OS -slug: Archive/B2G_OS/Introduction -tags: - - Firefox OS - - Gaia - - Introduction -translation_of: Archive/B2G_OS/Introduction ---- -
-

Firefox OS est là pour agrandir le champ des possibles du Web sur mobile et permettre à de nouveaux pans de la population d'être connectés avec leur premier smartphone. C'est un système d'exploitation libre, pour mobile, basé sur Linux, des standards ouverts et la technologie de Mozilla : Gecko. Il s'agit d'une réinvention de ce qu'une plateforme mobile peut être.

- -

Avec l'arrivée des WebAPIs permettant d'accéder au matériel et en proposant une interface de smartphone intuitive et élégante, Mozilla souhaite offrir aux développeurs web de nouvelles possibilités de créer d'excellents produits pour de nouveaux publics.

-
- -

Public ciblé

- -

Cet ensemble de documents est principalement à destination des développeurs web, ainsi qu'aux développeurs plate-forme qui veulent comprendre comment fonctionne Firefox OS, comment contribuer au projet et comment compiler et installer leur propre version sur des appareils. Pour ceux qui souhaitent créer et diffuser leurs applications web, l'App Center et Marketplace Zone sont conseillés.

- -

La pierre angulaire de Firefox OS

- -

Pour les développeurs web/plate-forme, la chose la plus importante à comprendre est que la totalité de l'interface utilisateur est une application web, qui est capable d'afficher et lancer d'autres applications web. Toutes les modifications que vous pourriez apporter à l'interface utilisateur, ou toute application Firefox OS que vous voudriez créer, impliqueront les technologies web standard, tout en fournissant un accès privilégié au matériel et aux services de l'appareil.

- -

D'un point de vu produit, Firefox OS est une marque de Mozilla et ajoute une liste de services à Boot to Gecko (B2G), qui est le nom de code du système d'exploitation. L'interface utilisateur de Firefox OS est appelée Gaia, et inclut les applications essentielles ainsi que les fonctions système.

- -

Pour en apprendre plus sur l'architecture, voir le guide de la plateforme.

- -

Objectifs présents et futurs

- -

Plusieurs téléphones sont disponibles, tant pour développeurs que pour le grand public. Pour en savoir plus :

- - - -

Cycle de développement

- -

Depuis Firefox OS 1.2, son cycle de développement est aligné, autant que possible, sur celui de Gecko et Firefox Desktop, qui ont des cycles de 6 semaines. Sachant qu'une nouvelle version de Firefox OS sort tout les 3 mois, elle sortira donc toutes les 2 versions de Gecko (cœur du navigateur Firefox).

- -

Par exemple Gecko 30 est présent dans Firefox OS 1.4, et Gecko 32 dans Firefox OS 2.0 (anciennement 1.5). Les versions 29 et 31 de Gecko n'étant pas utilisées.

- -
-

Note : Voir notre calendrier des sorties pour vérifier les correspondances de version entre Firefox OS et Gecko / Firefox Desktop et lire Firefox OS Release Milestones pour plus d'informations concernant notre gestion des versions et leur diffusion.

-
- -

La communauté

- -

Boot to Gecko et Gaia sont développés par des équipes d'ingénieurs au sein de Mozilla, ainsi que par un certain nombre de contributeurs externes appartenant à la grande communauté open source autour de Mozilla.

- -

Pour rapporter un bug, utilisez notre Bugzilla, et associez-le à un composant Firefox OS. Si vous n'êtes pas sûr du composant à sélectionner, n'hésitez pas à demander conseil.

- -
-

Note : Pour toute question ou remarque à propos d'une partie spécifique du code source B2G/Gaia (par exemple, une application Gaia particulière), vous pouvez trouver un contact plus spécialisé sur la page des modules Firefox.

-
- -

Compiler le système d'exploitation

- -

Le système d'exploitation B2G est basé sur Gecko, le moteur de rendu de Mozilla, qui se trouve au-dessus d'un noyau Linux et d'une couche d'abstraction matérielle en espace utilisateur (HAL) appelée Gonk. Le Gecko mentionné ici est essentiellement le même que le Gecko utilisé dans Firefox pour Android, ou Windows, ou Mac OS X, etc. Gonk est simplement une nouvelle cible sur laquelle Gecko doit fonctionner.

- -

Pour apprendre à compiler et installer Firefox OS, voir Compiler et installer Firefox OS. Le code source de B2G est disponible sur Github.

- -

Contribuer à Gaia

- -

Pour contribuer à Gaia, pas besoin de beaucoup plus qu'une bonne connaissance du développement web. Pour apprendre à lancer et faire fonctionner Gaia, voir Développer pour Gaia.

- -

Il existe un certain nombre d'utilitaires pratiques pour déboguer Gaia et d'autres applications web fonctionnant sous Firefox OS. Voir le guide Hacker Gaia pour en savoir plus.

- -

Développer des applications pour Firefox OS

- -

Les applications Firefox OS reposent sur les technologies standard du web — HTML, CSS, JavaScript, etc. — donc si vous êtes un développeur web, vous connaissez déjà une grande partie de ce dont vous aurez besoin. Il y a quelques API JavaScript spéciales à connaitre, qui permettent d'accéder au matériel et à des fonctionnalités clefs (telles que l'appareil photo, le gyroscope, le capteur de lumière, les contacts, les alarmes système et les notifications…), mais celles-ci sont bien documentées sur les pages App Center et Web Platform.

- -
-

Note : Pour votre première application web ou Firefox OS, ou pour obtenir un aperçu des différences entre applications web et pages web traditionnelles, voir Commencer le développement d'applications web.

-
- -

Gérer plusieurs versions de Firefox OS

- -

En développant des applications pour Firefox OS, vous devez prendre en compte la version qu'utilisera votre client (voir notre tableau des téléphones disponibles pour la liste). Rappelez-vous qu'il n'est pas aussi simple de mettre à jour le système d'un téléphone qu'un logiciel d'ordinateur — les utilisateurs sont souvent tributaires de leur opérateur. Vous devez donc développer des applications qui prennent en charge ces versions. Comme exemple, multiline Flexbox ne fonctionne pas sur les versions de Firefox OS antérieures à 1.3, vous pourriez donc devoir utiliser une disposition plus simple ou une alternative pour ces versions.

- -

Ce problème devrait s'estomper au fur et à mesure que de nouveaux appareils Firefox OS sortent équipés de versions plus récentes.

- -
-

Note : Ces pages MDN contiennent des informations de compatibilité navigateur/système et vous pourrez trouver des informations de compatibilité concernant des technologies plus spécifiques aux applications sur notre page Application API Reference.

-
diff --git a/files/fr/archive/b2g_os/media_support/index.html b/files/fr/archive/b2g_os/media_support/index.html deleted file mode 100644 index c020a9bd96..0000000000 --- a/files/fr/archive/b2g_os/media_support/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Support des médias dans Firefox OS -slug: Archive/B2G_OS/Media_support -tags: - - Firefox OS - - Guide - - HTML5 - - Média(2) -translation_of: Web/Media/Formats ---- -

-

Brouillon
- Cette page n'est pas terminée.

- -

- -

Aucun objet connecté moderne n'est complet sans un grand support multimédia, et Firefox OS en dispose assurément, en particulier avec la version 2.0 imminente. Voyez ici quels codecs sont supportés selon les versions de Firefox OS, et quelles sont les fonctionnalités selon les appareils.

- -

Vidéo H.264

- -

Firefox OS 2.0 introduit le support du codage et du décodage matériel des vidéos H.264 dans les flux médias WebRTC. Cela rend possible de soutenir des vidéoconférences ou des appels face-à-face avec une consommation optimisée de la batterie.

- -

Activation du support H.264

- -

À l'heure actuelle, certains appareils, tel que le téléphone développeur Flame, ne disposent pas d'un support vidéo H.264 activé par défaut. Vous devez définir un paramètre pour l'activer. Pour cela, vous avez besoin de modifier le fichier prefs.js situé dans votre profil sur l'appareil. Commencez par brancher l'appareil sur votre ordinateur sur lequel ont été au préalable configurés les outils adb.

- -

Tout d'abord, vous devez déterminer le nom du répertoire de votre profil. Vous pouvez le trouver de cette manière :

- -
adb shell ls /data/b2g/mozilla
- -

Parmi les informations affichées, vous verrez un répertoire dont le nom se compose de lettres et de chiffres aléatoires et qui se termine par ".default". Il s'agit du répertoire de votre profil. Utilisez ce nom lorsque vous verrez "xxxxxxxx" dans les instructions données à partir d'ici.

- -

Ensuite, récupérez le fichier prefs.js afin de pouvoir l'éditer :

- -
adb pull /data/b2g/mozilla/xxxxxxx.default/prefs.js
- -

Ouvrez le fichier obtenu dans votre éditeur de texte préféré ; ajoutez la ligne suivante à la fin du fichier et enregistrez vos modifications.

- -
user_pref("media.peerconnection.video.h264_enabled", true);
- -

À présent, tout ce qu'il vous reste à faire est d'envoyer le fichier modifié vers l'appareil et de redémarrer le processus b2g pour prendre en compte les changements, comme ceci :

- -
adb push pref.js /data/b2g/mozilla/xxxxxxxx.default
-adb shell stop b2g
-adb shell start b2g
-
- -

Support des conteneurs et codecs

- -

Cette section contiendra (bientôt, espérons) des informations sur les codecs supportés, les conteneurs (formats de fichier) qui peuvent les encapsuler, et pour chacun quels appareils et versions de l'OS les prennent en charge.

- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/mulet/index.html b/files/fr/archive/b2g_os/mulet/index.html deleted file mode 100644 index e2900841af..0000000000 --- a/files/fr/archive/b2g_os/mulet/index.html +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Mulet -slug: Archive/B2G_OS/Mulet -tags: - - B2G Mulet - - B2G OS - - Essayez b2g os - - Mulet -translation_of: Archive/B2G_OS/Mulet ---- -

En suivant ce guide, vous pourrez exécuter Gaia dans une version spéciale de Firefox appelée Firefox Mulet. Cela apporte comme avantages le fait d'avoir un cycle de développement rapide, ainsi que des outils de développement web standards et des débogueurs pour travailler avec. Tout d'abord, vous devez avoir cloné le dépôt Gaia sur votre machine et construit votre propre profil. Ensuite, il vous faut installer mulet et le lancer, en lui précisant votre profil Gaia comme profil à utiliser.

- -
-

Le mulet et la mule sont des hybrides statistiquement stériles de la famille des équidés, engendrés par un âne (Equus asinus) et une jument (Equus caballus) - Wikipedia

-
- -
-

D'après le wiki, "Mulet" vient du mot français désignant une "mule" et s'écrit avec un seul l !

-
- -

Où puis-je l'obtenir ?

- -

Comme tout autre programme, Mulet peut être lancé à partir d'un paquet précompilé : il s'agit de la méthode la plus simple pour les nouveaux utilisateurs. Ceux plus expérimentés, évidemment, peuvent toujours compiler Mulet eux-mêmes pour tester de nouvelles fonctionnalités et corrections de bogues. Quelle que soit la méthode que vous allez suivre, souvenez-vous que vous ne pourrez pas lancer Mulet sans un profil Gaia.

- -

Exécutable seul

- -

À l'origine, ce paquet était distribué via Discourse. C'est la façon la plus rapide de lancer Mulet pour les personnes qui ne le connaissent pas et/ou qui ne disposent pas d'un accès Internet haut débit pour cloner la totalité du dépôt Gaia. Le paquet contient Mulet et un profil Gaia précompilé, les utilisateurs n'ont pas besoin de compiler quoi que ce soit.

- -
    -
  1. Téléchargez l'Archive (94 Mb)
  2. -
  3. Décompressez l'archive
  4. -
  5. Cd vers le dossier extrait
  6. -
  7. Attribuez des permissions au fichier start.sh dans un terminal avec chmod +x ou en faisant un clic droit sur le fichier > permissions > cochez Autoriser l'exécution du fichier comme un programme.
  8. -
  9. Lancez à présent le fichier avec ./start.sh ou en double-cliquant dessus
  10. -
- -
-

Note : L'exécutable a été testé sur Ubuntu 16.04 64 bits et Arch Linux mais devrait sans doute tourner sur toutes les distributions linux.

-
- -
    -
- -
-

Si vous utilisez Gnome 3, le script ne voudra sans doute pas se lancer depuis Fichiers. Pour résoudre ce problème, ouvrez les Préférences. Sélectionnez l'onglet 'Comportement'. Sous "Fichiers texte exécutables", choisissez "Demander à chaque fois" ou "Lancer les fichiers textes exécutables lorsqu'ils sont ouverts". Fermez la fenêtre.

-
- -

Binaires précompilés

- -

Mulet

- -

Vous pouvez télécharger des binaires précompilés pour Linux depuis TaskCluster de Mozilla. Pour les récupérer,

- -
    -
  1. Rendez-vous sur https://tools.taskcluster.net/index/artifacts/#gecko.v1.mozilla-central.latest.linux.mulet/gecko.v1.mozilla-central.latest.linux.mulet.opt
  2. -
  3. Recherchez "public/build/target.tar.bz2" dans la liste d'artefacts sur la droite
  4. -
  5. Téléchargez puis décompressez l'archive quelque part
  6. -
  7. Le binaire "Firefox" qui se trouve dans ce dossier peut faire tourner mulet. Si vous le souhaitez, vous pouvez ajouter dans votre path un lien symbolique qui pointe dessus.
  8. -
- -

Gaia

- -

Pour exécuter Mulet il faut une copie de Gaia. Normalement, elle est récupérée à partir de Github :

- -
$ git clone https://github.com/mozilla-b2g/gaia.git
- -

Ensuite, vous devez construire un profil Gaia :

- -
$ cd ~/gaia
-$ make
-
- -

Exécution

- -

Enfin, vous pouvez lancer Mulet :

- -
$ chemin/vers/mulet/firefox-bin --no-remote --devtools --profile ./profile
-
- -

 

- -

Windows et Mac OS

- -

Mulet

- -

Les versions Windows et Mac sont disponibles sur Mozilla Central. Les builds Mulet sont les paquets dont les noms commencent par firefox-*, par exemple firefox-36.0a1.en-US.mac64.dmg.

- -

Une fois téléchargé, installez le build de Mulet dans un endroit sûr afin de ne pas écraser votre version de Firefox Nightly normale. Par exemple, sur Mac OS X, créez un nouveau dossier dans Applications appelé "mulet" puis faîtes-le glisser dedans.

- -

À présent, lancez la version de Mulet en ligne de commande, en lui précisant votre profil Gaia comme profil à utiliser lors de l'ouverture (indiqué par l'option -profile.) Par exemple, il est possible de lancer quelque chose de ce genre depuis votre dossier Applications sur Mac OS X si vous l'avez installé à cet endroit :

- -
./firefox/Contents/MacOS/firefox-bin -no-remote -profile /Users/my-home
- -

 

- -

Utilisation de Mulet

- -

- -

Sur l'affichage, vous obtenez la Boîte à outils standard de Firefox pour le débogage de vos applications, plus un émulateur B2G OS tournant dans la partie gauche ainsi qu'un certain nombre d'autres outils utiles relatifs à Gaia. Les contrôles au-dessus de l'émulateur vous permettent de :

- - - -

Références supplémentaires

- - diff --git a/files/fr/archive/b2g_os/pandaboard/index.html b/files/fr/archive/b2g_os/pandaboard/index.html deleted file mode 100644 index 3713db85e3..0000000000 --- a/files/fr/archive/b2g_os/pandaboard/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Pandaboard -slug: Archive/B2G_OS/Pandaboard -tags: - - Boot2Gecko - - Firefox OS - - Pandaboard -translation_of: Archive/B2G_OS/Pandaboard ---- -

- -

C'est un guide pour installer Firefox OS sur une PandaBoard. La PandaBoard est une tablette à bas prix basée sur une carte-mère OMAP 4  pour développer un système d'exploitation mobile.

- -

Assurez-vous d'avoir une carte-mémoire SD avec au moins 4 giga disponibles.

- -

Formater la carte SD

- -

Suivez ce guide pour formater votre carte SD.

- -

Communication USB

- -

Pour activer la communication usb avec votre pandaboard, suivez ces étapes. Pour B2G, il est plus sûr d'utiliser le mode de fichier "0666".

- -

Vérifiez que la  pandaboard est accessible en la branchant en usb à votre ordinateur et en lançant la commande suivante dans votre terminal :

- -
lsusb
- -

Si vous voyez s'afficher quelque chose avec Texas Instruments, alors votre pandaboard est détectée ! Si ce n'est pas le cas , essayez de débrancher tous les câbles de votre ordinateur et de laisser juste la pandaboard connectée en usb.

- -

Construire et flasher

- -

Après avoir tout configuré pour la pandaboard, nous allons maintenant nous lancer dans Negatus. Il s'agit d'un agent qui tourne sur l'appareil et qui permet de le déboguer/automatiser. Negatus va se construire lui-même automatiquement après que vous ayez lancé ./build.sh ; vous devrez néanmoins installer llibnspr(apt-get install libnspr4-dev). Après la construction de l'image, la partie délicate qui suit consiste à la flasher sur votre pandaboard.

- -

Essayez de suivre les instructions présentes ici, jusqu'à 'Initial setup, part 3' inclus. Vous pouvez ignorer 'Initial setup, part 1' qui a déjà été effectuée au cours de l'étape de construction. Revenez ici après avoir terminé 'Initial setup, part 3'.

- -

Vous pouvez à présent lancer la commande ./flash.sh et en principe tout devrait bien se passer. Si le script flash.sh essaye d'effacer la partition userdata, supprimez cette ligne. C'est un problème connu listé dans les instructions.

- -

Après la fin du flashage, vous devez manuellement redémarrer la machine en débranchant les câbles d'alimentation et usb, puis en les rebranchant (le câble d'alimentation doit être branché en premier).

- -

Voici comment contourner les problèmes connus :

- -

"waiting for OMAP4XXX..." en tentant d'utiliser usbboot

- -

Si vous voyez ce message, débranchez tous les câbles de la pandaboard. Branchez la pandaboard uniquement via l'USB. Ne branchez pas l'alimentation. Essayez à présent, puis lancez usbboot avec sudo.

- -

Erreurs fastboot lors du flashage

- -

Si vous rencontrez des difficultés pour exécuter des commandes dans fastboot, elles peuvent réussir en les lançant avec sudo (c'est-à-dire : sudo <commande fastboot...>)

- -

Par ailleurs, si vous avez des problèmes pour faire entrer votre pandaboard en mode fastboot (c'est-à-dire : aucun périphérique n'est listé si vous faites un appel à fastboot devices), alors vous pouvez :

- -
    -
  1. Débranchez tout ce qui est relié à la pandaboard
  2. -
  3. Maintenez enfoncé le bouton GPIO
  4. -
  5. Branchez l'alimentation tout en maintenant toujours le bouton enfoncé
  6. -
  7. Surveillez le voyant d'état et une fois qu'il commence à clignoter, relâchez le bouton GPIO
  8. -
- -

Cela va faire entrer la pandaboard en mode fastboot.

- -

Impossible de se connecter à adb

- -

Si vous voyez l'appareil avec lsusb mais pas dans les périphériques adb/fastboot et que les voyants sont éteints, débranchez la source d'alimentation puis rebranchez-la. Si les voyants sont allumés, il faudra peut-être attendre quelques instants (30 secondes maximum) pour que l'appareil soit enregistré sur adb.

- -

Quelquefois, le flashage sera annoncé comme ayant réussi mais ce ne sera pas le cas. Reflashez la pandaboard (c'est-à-dire : exécutez ./flash.sh) et réessayez. Je conseille de brancher l'alimentation d'abord, et de brancher le câble usb ensuite

- -

Si vous obtenez "??????????? no permision" pour les appareils adb, même en root, vérifiez la section "Configuring USB Access" sur ce site et corrigez - ou ajoutez - les bonnes règles udev. N'oubliez pas de redémarrer le service udev après avoir fait les modifications.

diff --git a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire/index.html b/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire/index.html deleted file mode 100644 index 9f8ebb4ecb..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Alcatel One Touch Fire -slug: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Fire -tags: - - Alcatel One Touch Fire - - Client - - Firefox OS - - Téléphone -translation_of: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Fire ---- -
-
- -
-

Le smartphone Alcatel One Touch Fire sous Firefox OS dispose d'un processeur à 1 GHz et d'une caméra 3,2 MP. Il est disponible à différents endroits dans le monde, auprès d'une large variété d'opérateurs.

- -

Acheter un appareil

- -

L'Alcatel One Touch Fire est disponible via les canaux de distribution classiques.

- -

Disponibilité

- -
-
-
    -
  • Allemagne
  • -
  • Brésil
  • -
  • Chili
  • -
  • Colombie
  • -
  • Grèce
  • -
  • Hongrie
  • -
  • Italie
  • -
-
- -
-
    -
  • Mexique
  • -
  • Montenegro
  • -
  • Pérou
  • -
  • Pologne
  • -
  • Serbie
  • -
  • Venezuela
  • -
-
-
- -

Opérateurs

- -
-
-
    -
  • Congstar
  • -
  • Cosmote
  • -
  • Movistar
  • -
  • T-Mobile
  • -
-
- -
-
    -
  • Telcel
  • -
  • Telenor
  • -
  • TIM
  • -
  • Vivo
  • -
-
-
-
-
- -

Mise à jour logicielle

- -

L'image système de l'appareil est verrouillée, si bien qu'il n'est possible de le mettre à jour que lorsque l'opérateur téléphonique publie une mise à jour OTA.

- -

Spécifications de l'appareil

- -

Vous pouvez trouver plus de détails sur les caractéristiques de l'appareil sur le site Web d'Alcatel sous l'onglet Spécification

- - - -

Coloris disponibles

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_c/index.html b/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_c/index.html deleted file mode 100644 index 8cbc4e1d8c..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_c/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Alcatel One Touch Fire C -slug: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Fire_C -tags: - - Alcatel One Touch Fire - - Client - - Firefox OS - - One Touch Fire C - - Téléphone - - Téléphone Alcatel Firefox -translation_of: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Fire_C ---- -
-
 
- -
-

Le smartphone Alcatel One Touch Fire C fonctionne sous Firefox OS ; il dispose d'un processeur double-coeur à 1,2 GHz, d'un appareil photo 2 MP et est disponible en Inde.

- -

Acheter un appareil

- -
    -
  • Actuellement non disponible
  • -
- -

Disponibilité

- -
    -
  • Inde
  • -
  • Uruguay
  • -
-
-
- -

Mise à jour du logiciel

- -

L'image système de l'appareil étant verrouillée, vous ne pouvez mettre à jour le logiciel que lorsque l'opérateur téléphonique publie une mise à jour OTA. L'image système de l'appareil est basée sur Firefox OS 1.2.

- -

Spécifications de l'appareil

- -

Vous pouvez trouver davantage de spécifications d'appareils listées sur le site Web d'Alcatel dans l'onglet Specification.

- - - -

Coloris disponibles

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_e/index.html b/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_e/index.html deleted file mode 100644 index 9ded561a3e..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_fire_e/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Alcatel One Touch Fire E -slug: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Fire_E -tags: - - Alcatel One Touch Fire E - - Firefox OS - - Mobiles Alcatel - - Spécifications de l'Alcatel One Touch Fire E -translation_of: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Fire_E ---- -
-
-

Image of ALCATEL ONETOUCH E

-
- -
-

Le smartphone Alcatel One Touch Fire E est propulsé par Firefox OS; il dispose d'un processeur double cœur à 1,2 GHz, d'un écran haute résolution et d'un appareil photo 5 MP + caméra frontale VGA ; il est disponible en différents endroits du globe.

- -

Acheter un appareil

- -

L'Alcatel One Touch Fire E est disponible via les canaux de distribution classiques.

- -

Disponibilité

- -
-
-
    -
  • Allemagne
  • -
  • Hongrie
  • -
  • Pologne
  • -
-
- -
-
    -
  • République tchèque
  • -
  • Russie
  • -
-
-
- -

Opérateurs

- -
-
-
    -
  • Congstar
  • -
  • MegaFon
  • -
-
- -
-
    -
  • O2
  • -
  • T-Mobile
  • -
-
-
-
-
- -

 

- -

Mise à jour du logiciel

- -

L'image système de l'appareil est verrouillée, il n'est possible de mettre à jour le logiciel que lorsque l'opérateur téléphonique publie une mise à jour OTA.

- -

Spécifications de l'appareil

- -

Vous pouvez trouver plus d'informations sur les spécifications de l'appareil dans la section Specification du site Web d'Alcatel

- - - -

Coloris disponibles

- - - -

Voir également

- - diff --git a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_pixi_3_(3.5)/index.html b/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_pixi_3_(3.5)/index.html deleted file mode 100644 index 61a033332c..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/alcatel_one_touch_pixi_3_(3.5)/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Alcatel One Touch Pixi 3 (3.5) -slug: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Pixi_3_(3.5) -tags: - - Firefox OS - - Landing - - Téléphones -translation_of: Archive/B2G_OS/Phone_guide/Alcatel_One_Touch_Pixi_3_(3.5) ---- -
-
- -
-

L'Alcatel One Touch Pixi 3 (3,5) est un smartphone haut de gamme sous Firefox OS 2.0, avec un appareil photo de 2 mégapixels.

- -

Acheter un appareil

- -

Le téléphone peut être acheté ici :

- - - -

Disponibilité

- -
    -
  • Inde
  • -
- -

 

-
-
- -

Spécifications de l'appareil

- - - -

Coloris disponibles

- - diff --git a/files/fr/archive/b2g_os/phone_guide/alcatel_onetouch_fire_c_4020d/index.html b/files/fr/archive/b2g_os/phone_guide/alcatel_onetouch_fire_c_4020d/index.html deleted file mode 100644 index 3b97669202..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/alcatel_onetouch_fire_c_4020d/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Alcatel Onetouch Fire C 4020D -slug: Archive/B2G_OS/Phone_guide/Alcatel_Onetouch_Fire_C_4020D -tags: - - Alcatel - - Appareils Tarako - - Client - - Firefox OS - - Onetouch Fire C - - Téléphone -translation_of: Archive/B2G_OS/Phone_guide/Alcatel_Onetouch_Fire_C_4020D ---- -
-
Intex Cloud FX image from official website
- -
-

L'Alcatel Onetouch Fire C 4020D est un smartphone grand public, basé sur Tarako Firefox OS, et distribué en Inde. Il a été distribué par Alcatel en août 2014.

- -

Acheter un appareil

- -
    -
  • Ce téléphone est abandonné.
  • -
- -

Disponibilité

- -

Inde

- -

Mise à jour du logiciel

- -

L'image système de l'appareil étant bloquée, vous ne pouvez mettre à jour le logiciel que lorsque l'opérateur téléphonique publie une mise à jour OTA. L'image système de l'appareil est basée sur Firefox OS 1.3T.

-
-
- -

Spécifications de l'appareil

- -

Davantage de spécifications d'appareils sont listées sur notre page de spécifications de téléphones et appareils.

- - - -

Coloris disponibles

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/best_practices_open_reference_devices/index.html b/files/fr/archive/b2g_os/phone_guide/best_practices_open_reference_devices/index.html deleted file mode 100644 index 235f2bf40d..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/best_practices_open_reference_devices/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Les bonnes pratiques pour appareils de référence ouverts -slug: Archive/B2G_OS/Phone_guide/Best_practices_open_reference_devices -tags: - - Bonnes pratiques - - Firefox OS - - Périphériques - - Téléphones - - appareil de référence -translation_of: Archive/B2G_OS/Phone_guide/Best_practices_open_reference_devices ---- -
-

Le présent article a pour objectif de fournir un ensemble de bonnes pratiques que nous considérons comme devant être recommandées pour tout appareil de référence ouvert disponible. Tous les appareils Firefox OS récents ont respecté ces pratiques, dont le Flame.

-
- -

Les appareils doivent avoir :

- - - -

Des compilations facilement accessibles et installables

- -

Les appareils de référence sont essentiellement destinés aux développeurs et aux personnes qui ont des connaissances techniques plus importantes que celles de l'utilisateur moyen de téléphone. Malgré cela, nous ne nous attendons pas à ce que les utilisateurs de ces appareils fassent leurs propres compilations s'ils ne le souhaitent pas — pour la plupart d'entre-eux c'est une simple perte de temps.

- -

Les appareils de référence ouverts doivent disposer d'un ensemble de builds non verrouillées maintenu pour les versions actuelles et futures, simple à obtenir et à installer. Cela signifie avoir plusieurs canaux disponibles, au moins :

- - - -

Il faudrait rendre ces builds disponibles sur une page de téléchargement dédiée, avec des mises à jour fréquentes et régulières. Des mises à jour OTA devraient aussi être mises à disposition des utilisateurs, pour chaque appareil.

- -

Les OEMs devraient avoir la responsabilité de fournir ces mises à jour car ils sont les seuls à pouvoir légalement distribuer tous les binaires requis, etc.

- -

Il serait logique de suivre un modèle similaire à celui du navigateur Firefox, où chacun des canaux -release, stable et nocturne- est basé sur sa branche respective du code source.

- -

Un système d'exploitation totalement déverrouillé

- -

La plate-forme du système d'exploitation de l'appareil doit être totalement déverrouillée afin que les développeurs du système et des applications aient une liberté de contrôle sur leurs appareils. Ceci leur permet d'effectuer tous les tests souhaités ainsi que les travaux de développement. Cela implique que :

- - - -

Une disponibilité mondiale

- -

Pour que les appareils de référence soient une norme universelle, il faut qu'ils soient disponibles dans le monde entier. Dans le cas contraire, les différentes populations devront faire avec des appareils différents, ce qui aboutira à des comportements différents.

- -

Un support des fonctionnalités équivalent à celui des téléphones grand public

- -

Il serait inutile de créer un périphérique de référence s'il ne supportait pas les mêmes technologies, fonctionnalités et applications web que les appareils grand public que vous voulez voir distribués avec Firefox OS.

- -

Ces fonctionnalités sont représentées par :

- - - -

Des batteries de remplacement disponibles

- -

Les batteries de remplacement peuvent être très difficiles à trouver en fonction des appareils et peuvent rendre inutiles des appareils qui pourraient encore fonctionner. Il est ainsi souhaitable de rendre disponibles des batteries de remplacement dès que possible.

- -

Des choix de langues faciles à faire

- -

Ces appareils étant distribués dans le monde entier, il est important de rendre disponibles des versions traduites pour le plus de langues possible, en prenant en compte la disponibilité des ressources et les marchés locaux les plus populaires.

- -

La solution préférable est de faire des versions de Gaia localisées ou des packs de langues qui peuvent être flashés sur l'appareil séparément. Mozilla travaille à une solution pour rendre leur création et leur installation le plus simple possible.

diff --git a/files/fr/archive/b2g_os/phone_guide/cherry_mobile_ace/index.html b/files/fr/archive/b2g_os/phone_guide/cherry_mobile_ace/index.html deleted file mode 100644 index 5f56a4de26..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/cherry_mobile_ace/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Cherry Mobile Ace -slug: Archive/B2G_OS/Phone_guide/Cherry_Mobile_Ace -tags: - - Ace - - Cherry Mobile - - Firefox OS - - Mozilla - - Téléphone - - tarako - - utilisateur -translation_of: Archive/B2G_OS/Phone_guide/Cherry_Mobile_Ace ---- -

- -

Spécifications de l'appareil

- -

Logiciel

- - - -

Matériel

- - - -

Acheter un appareil

- -

Le Cherry Mobile Ace est disponible dans les commerces de détail locaux et sur les sites de commerce en ligne.

- -

Disponibilité

- - - -

Coloris disponibles

- - - -

Mises à jour du logiciel

- -

L'image système de l'appareil est verrouillée et seules les mises à jour OTA permettent donc de l'actualiser.

- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/fairphone/index.html b/files/fr/archive/b2g_os/phone_guide/fairphone/index.html deleted file mode 100644 index 7d67765df2..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/fairphone/index.html +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Fairphone -slug: Archive/B2G_OS/Phone_guide/Fairphone -tags: - - B2G - - Commerce équitable - - Fairphone - - Firefox OS - - Gaia - - Guide - - Terminaux - - Téléphone -translation_of: Archive/B2G_OS/Phone_guide/Fairphone ---- -
-

Attention: Cet appareil ne fonctionne PAS encore avec Firefox OS. Cette page a pour but de regrouper les informations pour coordonner le travail de portage.

-
- -

Le Fairphone est un téléphone équitable visant une création, une production, une distribution, une réparation et un recyclage justes et respectueux de l'homme et de l'environnement. Les appareils ne sont pas complétement libres matériellement, mais ils visent l'idéal de redonner du contrôle sur le matériel à l'utilisateur.

- -

Informations sur les sorties des appareils

- -

Fairphone a mis à disposition deux appareils jusqu'à présent — le Fairphone v1 FP1 (première édition) est sorti le 30 décembre 2013, et le FP1U (deuxième vague de vente) le 22 Juillet 2014. Les téléphones version 1 ne sont actuellement plus vendus. Le Fairphone v2 est sorti le 16 Juillet 2015 et peut être commandé sur Fairphone.

- - - - - - - - - - - - - - -
Fairphone v1Fairphone v2
Une image du Fairphone v1, montrant l'écran de verrouillage et le dos du téléphone. Crédit : Fairphone. CC BY-NC-SA.Fairphone 2 Black Matte
- -
-

Note: Vous pouvez suivre les nouveautés sur le blog Fairphone, et jeter un œil à la stratégie et l'approche de Fairphone.

-
- -

Porter Firefox OS sur les appareils Fairphone

- -

Ce n'est pas encore achevé mais le travail est en cours.

- -

Problèmes actuels

- -

L'Android personnalisé utilisé par le Fairphone v1 ne peut pas être mis à jour car le fabricant du chipset refuse de mettre à disposition les mises à jour de driver pour le modem ou d'en ouvrir le code source.

- -

Au Mobile World Congress 2015, Fairphone a fait un appel pour un possible système d'exploitation alternatif disponible pour le Fairphone v2 à venir. En dehors de ces discussions, un travail de portage de Firefox OS a débuté. Un tel portage serait un moyen de permettre d'offrir une plus grande durabilité au Fairphone V1, et montrerait l'exemple pour que cela n'arrive pas aux futures générations de téléphones. Une collaboration de Mozilla avec principaux fabricants de puces permettrait aussi de faire évoluer les mentalités ou d'éviter ce type de problèmes.

- -

Le Fairphone v2 est orienté open source et les contributions de la communauté au Fairphone OS sont encouragées.

- -

Évolution et solution

- -

Le projet de port vient juste de commencer (phase de démarrage). Nous espérons pouvoir commencer rapidement — revenez sur cette page pour plus d'informations.

- -

Contribuer

- -

Si vous souhaitez en savoir plus ou contribuer au port, les liens suivants vous mèneront à bon port.

- -

Outils du projet

- - - -

Firefox OS

- -

Si vous étes un développeur de ports ou si vous souhaitez en savoir plus à propos de Firefox OS:

- - - -

Communauté de port XDA

- -

Si vous êtes un développeru Firefox OS et souhaitez en savoir plus à propos du portage de Firefox OS:

- - - -

Spécifications techniques

- -

Fairphone v1

- -

Vous pouvez trouver une liste détaillée des spécifications sur la page des caractéristiques du téléphone Fairphone.

- -

Réseau

- - - -

Matériel

- - - -

Logiciel

- - - -

Fairphone v2

- -

Vous pouvez trouver une liste détaillée des spécifications sur la page des caractéristiques Fairphone.

- -

Réseau

- - - -

Matériel

- - - -

Logiciel

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/firefox_os_device_features/index.html b/files/fr/archive/b2g_os/phone_guide/firefox_os_device_features/index.html deleted file mode 100644 index 0b15441a7e..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/firefox_os_device_features/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Caractéristiques des appareils Firefox OS -slug: Archive/B2G_OS/Phone_guide/Firefox_OS_device_features -tags: - - Boutons et contrôles - - Conditions requises - - Firefox OS - - Hardware -translation_of: Archive/B2G_OS/Phone_guide/Firefox_OS_device_features ---- -

Boutons et commandes

- -

Un appareil Firefox OS classique possède un certain nombre de boutons physiques:

- -
-
Bouton Home
-
Ce bouton est généralement centré sous l'écran. Appuyer dessus permet de revenir au lanceur d'applications. En restant appuyé dessus on ouvre la vue des différentes applications en cours. Un geste vers le haut permet de fermer l'application.
-
La barre de contrôle du volume
-
La barre de contrôle du volume est située sur le côté gauche; appuyer sur la moitié haute augmente le volume; appuyer sur la partie basse diminue le volume.
-
Bouton power
-
Le bouton power est situé en haut à droite de l'appareil.
-
- -

Caractéristiques matérielles minimales requises

- -

En général, les appareils mobiles basés sur ARM sont assez puissants pour supporter Firefox OS. Cette section présente les caractéristiques minimales requises ainsi que les caractéristiques minimales recommandées des smartphones fonctionnant sous Firefox OS.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComposantMinimumRecommandé
CPUARMv6Cortex classe A5 ou mieux
- ARMv7a avec NEON
GPUAdreno classe 200 ou mieux
RAM128 MB512 MB
ConnectivitéWi-Fi
- 3G
CapteursAccéléromètre
- De proximité
- De luminosité
- A-GPS
- -
-

Note: Pour une bonne expérience utilisateur, il est recommandé de choisir un appareil offrant des couleurs uniformes (implémentées par le pilote graphique) et intégrant le support des écouteurs pour activer/désactiver le mode silencieux ou encore pour lancer/stopper les médias. Ces fonctionnalités sont classiques sur les smartphones modernes.

-
- -
-
 
-
diff --git a/files/fr/archive/b2g_os/phone_guide/flame/configuration/index.html b/files/fr/archive/b2g_os/phone_guide/flame/configuration/index.html deleted file mode 100644 index f0dd4ef786..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/flame/configuration/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Configuration initiale -slug: Archive/B2G_OS/Phone_guide/Flame/configuration -tags: - - B2G - - Firefox OS - - Flame - - Téléphone Développeur - - Téléphone Référence -translation_of: Archive/B2G_OS/Phone_guide/Flame/Initial_setup ---- -
-

Après vous être procuré un téléphone Flame, vous devez suivre des étapes de configuration afin qu'il puisse communiquer correctement avec votre ordinateur et votre système d'exploitation. Ces étapes sont nécessaires pour pouvoir mettre à jour votre téléphone, le déboguer ou pousser des applications en cours de développement avec nos outils.

-
- -

Pour tous systèmes d'exploitation

- -

Vous devez installer les outils ADB et Fastboot sur votre ordinateur. Ces applications permettent notamment d'interagir avec votre téléphone lorsque ceux-ci sont connectés par USB. Ce sont elles qui vous permettront de "flasher" votre téléphone dans une version de Firefox OS, le rétablir si il est "briqué", pousser des applications, etc...

- -
-

Note : Si vous êtes sous ubuntu ou debian, vous pouvez installer simplement ces applications avec la commande sudo apt-get install android-tools-adb android-tools-fastboot.

-
- -
-

Note : Si vous êtes sous Mac OS, vous pouvez installer ADB et Fastboot en utilisant Homebrew sur la ligne de commande. Voir Installer et utiliser ADB.

-
- -

ADB et Fastboot sont disponibles sur Android Developer Toolkit:

- -
    -
  1. Rendez-vous sur le site
  2. -
  3. Cliquez sur Download Eclipse ADT button.
  4. -
  5. Acceptez le contrat d'utilisation après l'avoir lu.
  6. -
  7. Sélectionnez la version 32-bits ou 64-bit suivant votre système d'exploitation courant (si vous ne savez pas laquelle prendre, utilisez la version 32-bit).
  8. -
  9. Cliquez sur le bouton Download Eclipse ADT with the Android SDK....
  10. -
  11. Après téléchargement du fichier dézippez le dans le répertoire de votre choix.
  12. -
  13. Le nom du dossier étant assez compliqué, vous pouvez le renommer le dossier en adt si vous le souhaitez.
  14. -
- -

ADB est un outil qui fonctione uniquement en ligne de commande. Ouvrez une invite de ligne de commande ou un terminal de votre système et rendez-vous dans le dossier que vous venez de dézipper puis dans adt/sdk/platform-tools et lancez la commande adb. Vous devriez voir apparaitre une liste d'informations en réponse. Exécuter la commande adb devices devrait retourner la liste des appareils reliés à votre ordinateur (la liste sera vide si votre téléphone n'est pas connecté.

- -

Afin que l'ensemble des outils fonctionnent, vous devez ajouter les outils ADB à la variable système PATH. Gràce à ça, la commande adb sera exécutable depuis n'importe quel dossier.

- -

Pour faire cela sous Windows 8 (pour Windows 7, ce sera identique mais le nom des menus peut différer) :

- - - -
-

Note : Pour ouvrir une ligne de commande, effectuez un clic droit sur le bouton windows en bas à gauche de votre écran et sélectionner Ligne de commande.

-
- -

Sous Mac/Linux:

- - - -
-

Note : sous Mac OS, si vous ne voyez pas les fichiers cachés, ouvrez un terminal et exécutez la commande suivante : defaults write com.apple.finder AppleShowAllFiles YES

-
- -

Enable remote debugging

- -

Assurez-vous que le débogage est activé sur votre Flame, en utilisant l'option Débogage distant/Dégogage USB de l'appareil Paramètres développeurs (L'option est nommée différemment, selon que vous ayez Firefox 1.3 et inférieur, ou Firefox 1.4+ installé).

- -

Étapes supplémentaires pour Linux

- -

Suivant la distribution que vous utilisez, vous devrez peut-être ajouter une nouvelle règle udev pour votre téléphone.

- -

Afin de déterminer le vendor ID de votre téléphone, connectez-le via USB et exécutez la commande lsusb qui listera l'ensemble de vos périphériques USB. Trouvez votre téléphone dans la liste et notez les quatre derniers chiffres qui suivent le préfixe "ID". Un identifiant de Flame est habituellement 05c6, donc la règle UDEV à ajouter serait :

- -
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666"
-
- -

Si votre téléphone est listé avec un autre identifiant, utilisez le à la place. Par exemple :

- -
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666"
-
- -

Après modification, exécutez la commande udevadm control --reload-rules pour recharger la configuration, débranchez puis rebranchez votre téléphone avant de continuer.

- -

Étapes supplémentaires pour Windows

- -

Pour accéder à un téléphone Flame avec les outils ADB ainsi qu'avec les outils de développement de Mozilla comme App Manager/WebIDE , un driver USB est demandé. La suite de ce paragraphe va vous détailler les étapes d'installation de celui-ci.

- -

Télécharger le driver

- -

Téléchargez le driver Windows. Extrayez le fichier ZIP sur dans un répertoire.

- -
-

Note: L'outils ADB doit être installé avant le driver : veuillez suivre les instructions fournies plus haut si vous ne l'avez pas encore fait.

-
- -

Installer le driver USB

- -

Connectez votre téléphone Flame à votre ordinateur avec un câble USB.

- -

Pour installer le driver, ouvrer le répertoire Alcatel_USB_Driver_Q_4.0.0_2013_11_11_noinstall créé après extraction et exécutez le fichier DriverInstaller.exe. Vous pouvez recevoir un message d'avertissement de la part de Windows indiquant qu'il ne connait pas l'éditeur de l'application. Si c'est le cas, cliquez sur oui pour continuer.

- -

Simple dialog box showing a picture of a phone along with install and uninstall buttons.

- -

Cliquez sur le bouton Install pour installer le driver.

- -

Après installation, vous pouvez contrôler que tout fonctionne correctement en ouvrant un terminal et en exécutant la commande adb devices.

- -

Assurez-vous que le débogage à distance est activé sur votre téléphone en activant l'option Remote debugging/Debugging via USB dans les paramètres pour développeur (suivant la version que vous utilisez le nom de l'option et sa localisation dans les menus peut légèrement différer).

- -

Le résultat de la commande doit ressembler à ça :

- -
List of devices attached
-3561d02a          device
- -

Si votre téléphone n'apparait pas, contrôler le gestionnaire de périphériques de Windows. Le Flame devrait apparaitre sous le nom "ACER ADB Interface". Vous pouvez confirmer sa présence en débranchant le câble USB : il devrait alors disparaitre de liste des périphériques. Désinstallez le driver en effectuant un clic droit sur "ACER ADB Interface" et cliquez sur désinstaller. Assurez-vous de bien cocher la case pour désinstaller le driver.  Relancez l'installation. Il peut être utile de désactiver la mise en veille de votre téléphone durant l'installation : Windows peut vouloir utiliser un driver par défaut quand l'écran est éteint.

diff --git a/files/fr/archive/b2g_os/phone_guide/flame/index.html b/files/fr/archive/b2g_os/phone_guide/flame/index.html deleted file mode 100644 index 5fb73d826f..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/flame/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Flame -slug: Archive/B2G_OS/Phone_guide/Flame -tags: - - B2G - - Firefox OS - - Flame - - Téléphone Développeur - - appareil de référence -translation_of: Archive/B2G_OS/Phone_guide/Flame ---- -
-

Informations sur les mises à jour :  Nous vous recommandons vivement de rejoindre la liste de diffusion suivante pour vous tenir au courant de toutes les nouvautés sur les mises à jour et de toutes les informations concernant le Flame : https://mail.mozilla.org/listinfo/flamenews

-
- -
-

Une image du Flame, présentant l’écran d’accueil de Firefox OS avec divers icônes d'applications.

- -

Disponible sur commande

- -

Le téléphone de référence pour les développeurs Flame est une étape importante dans la sortie des appareils Firefox OS. Les caractéristiques matérielles du Flame proposent un ensemble représentatif des spécifications – dont un écran FWVGA et un processeur double coeur – pour aider les développeurs à construire du contenu et des expériences de qualité. Une plateforme matérielle unique est également un atout pour les testeurs, facilitant les tests et permettant de résoudre les problèmes spécifiques aux logiciels sans avoir à se soucier de bogues spécifiques aux modèles d'appareils, etc.

-
- -

Si vous avez votre téléphone en main et que vous voulez commencer à vous amuser avec, développer et distribuer des applications, ou contribuer à la plateforme Firefox, les liens suivants vous amèneront là où vous avez besoin d'aller :

- - - -

Si vous souhaitez en savoir plus sur la mise à jour du système d'exploitation, sa récupération, l'envoi d'applications ou les caractéristiques du téléphone, vous trouverez les informations dont vous avez besoin ci-dessous.

- -

Acheter un appareil

- -

Le Flame n'est malheureusement plus disponible à la vente. Il existe toujours d'autres opportunités pour les développeurs d'obtenir un appareil gratuitement, y compris lors d'une prochaine session du programme Foxtrot. Si vous avez des questions sur les manières d'obtenir un appareil, vous pouvez contacter Asa Dotzler ou Marcia Knous sur IRC.

- -

Caractéristiques réseau et matérielles

- -

Vous pouvez trouver plus de fonctionnalités matérielles listées sur notre Page de caractéristiques des téléphones et appareils.

- -

Réseau

- - - -

Matériel

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/flame/mettre_a_jour_flame/index.html b/files/fr/archive/b2g_os/phone_guide/flame/mettre_a_jour_flame/index.html deleted file mode 100644 index e3825ba9f9..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/flame/mettre_a_jour_flame/index.html +++ /dev/null @@ -1,353 +0,0 @@ ---- -title: Mettre à jour votre Flame -slug: Archive/B2G_OS/Phone_guide/Flame/mettre_a_jour_Flame -tags: - - Firefox OS - - Flame - - Smartphone développeur - - Téléphone Développeur -translation_of: Archive/B2G_OS/Phone_guide/Flame/Updating_your_Flame ---- -
-

Cet article explique comment mettre à jour la partie logicielle de votre Flame — y compris la mise à jour de Firefox OS et l'ajout de nouvelles applications sur votre téléphone — comment conserver vos données, et d'autres informations utiles. Avant toute chose, vous devriez vous assurer que vous avez suivi les étapes d'initialisation nécessaires

-
- -

Guide rapide pour mettre à jour Firefox OS sur le Flame

- -

Il y a beaucoup d'informations dans cet article, alors nous avons décidé de vous fournir un guide qui vous permet de maintenir votre Flame à jour. Vous trouverez ci-dessous les informations nécessaires.

- -

Flashage vers la dernière image (2.5)

- -

Les étapes suivantes doivent être validées avant toute autre chose.

- -
Prérequis: Assurez vous d'avoir adb et fastboot installés et fonctionnels sur votre système (voir Installer ADB et Fastboot).
- -
    -
  1. Télécharger la dernière image —Base image v18D_nightly_v4sur votre PC ou Mac.
  2. -
  3. Sur votre Flame, activer le "remote debugging" dans le menu Settings > Developer et activer le Debugging via USB dans le menu Developer.
  4. -
  5. Connecter votre Flame à votre PC / Mac via un cable USB.
  6. -
  7. Vérifier la bonne connexion en tapant la commande : -
    adb devices  
    -
  8. -
- -

Vous devriez avoir une réponse comme celle-ci:

- -
List of devices attached
-94f7ce4c    device
- - - -
    -
  1. Notes : Si le script ne parvient pas à voir votre Flame, vérifiez que vous avez correctement configuré les règles udev. Si le script flash.sh n'existe pas, vous pouvez renommer le fichier flash.bat en flash.sh et l'exécuter.
  2. -
- -
-

Nota: Vous pouvez vérifier la qualité de l'image téléchargée en tapant la commande ci-dessous :

- -
Checksum: SHA512(v18D_nightly_v4.zip)= 9105e29fd39da1ae487b01da4431a803d619d31482147b4383002b8a10268905fd444b108a438395a78d289cfe4e8fba10c3fb6b0d187f3535f027bf90c2391a Build id: 20150527010201
-
- -
 
- -

A cet instant, vous devez être en présence d'un Flame avec la version 2.5 de Firefox OS et recevoir les mises à jour OTA (Over The Air).

- -
-

Nota: si vous voulez avoir la dernière version instable pour Flame (qui n'a pas été pleinement testée), aller dans settings -> developer, descendre vers le bas et changer le channel pour nightly-latest.  Rebooter le Flame, retourner dans settings -> device info et vérifier s'il y a des MAJ. Vous pouvez obtenir ainsi la dernière version sans "shallow flash". Pour le "shallow flashing" voir plus bas dans cet article.

-
- -

Bug de reset de l'Update channel

- -

Comme notifié dans le bug 1217490, plusieurs testeurs de Firefox OS essayant Firefox OS 2.5 latest OTA updates (sur Flame, mais aussi sur d'autres smartphones) ont constaté que quand ils font une MAJ OTA, leur update channel est réinitialisé à nightly, ce qui implique qu'ils ne vont plus recevoir des MAJ OTA par la suite. Pour éviter le problème, il est conseillé de mettre votre update channel à nightly-latest en utilisant WebIDE. Pour cela :

- -
    -
  1. Brancher votre Flame au PC/Mac via USB (assurez-vous que Debugging via USB est réglé sur ADB and DevTools dans le Developer Settings)
  2. -
  3. Ouvrir le navigateur Firefox sur votre PC/mac et lancer WebIDE.
  4. -
  5. Connecter WebIDE à votre Flame en le sélectionnant dans le menu USB Devices. Accepter la connexion sur le Flame pour l'activer.
  6. -
  7. Dans le Menu Sélection de l'environnement en haut à droite de WebIDE UI, sélectionner Paramètres de l'appareil.
  8. -
  9. Chercher app.update.channel dans la liste et changer la valeur dans la textbox pour nightly-latest.
  10. -
  11. Chercher app.update.channel.backup et changer la valeur pour  nightly-latest si vous voulez restez en Nightly après les MAJ.
  12. -
- -

Mettre à jour la partie logicielle du Flame (Firefox OS 2.0, pour plus récent voir plus haut)

- -

Il existe deux canaux de diffusion pour les mises à jour de Firefox OS pour le Flame:

- - - -

Images d'installation

- -

Vous trouverez les images et outils d'installation aux adresses suivantes :

- -

Dernières versions :

- - - -
-

Note: Vous pouvez connaître l'image utilisée par votre périphérique en utilisant la commande: adb shell getprop ro.bootloader

-
- -
-
-

Important: Attention, lorsque vous effectuez une installation complète ou partielle (shallow) à partir de ces images, vous perdez les informations contenues dans votre téléphone. Avant d'effectuer le "flash", vous devriez faire une sauvegarde de vos données personnelles. Vous pourrez ainsi les restaurer après. Rendez-vous à la section "sauvegarder et restaurer les données de votre Flame".

-
-
- -

Versions précédentes :

- -

Ces versions sont listées ici seulement pour information, vous ne devriez pas les utiliser.

- - - -
Note: Les images de Firefox OS v180 et suivantes sont basées sur Android KK (Kitkat, 4.4); les images basées sur JB (Jellybean, 4.1-4.3) ne sont plus supportées et sont obsolètes. N'utilisez pas de version inférieure à v180.
- -

Installation d'une image de base

- -

Pour installer une image de base sur votre périphérique:

- -
    -
  1. Assurez-vous que le débogage à distance soit activé en utilisant la fonction Remote debugging/Debugging via USB dans les menus de développement (cette option peut avoir un nom différent suivant la version de Firefox OS que vous utilisez actuellement).
  2. -
  3. Connectez votre téléphone via un câble USB à votre ordinateur. Vérifiez que votre téléphone est reconnu correctement en exécutant la commande adb devices depuis un terminal.
  4. -
  5. Téléchargez une archive zip référencée ci-dessus et dézippez-la dans un répertoire.
  6. -
  7. Allez dans le répertoire où vous avez extrait les fichiers et exécutez les commandes suivantes : -
      -
    • Sous Windows, placez-vous dans le répertoire depuis la ligne de commande et exécutez le script flash.bat (vous pouvez aussi double-cliquer sur le fichier depuis l'explorateur Windows).
      - Notes : Si le script flash.bat n'existe pas, vous pouvez renommer le fichier flash.sh en flash.bat et l'exécuter. Vérifiez bien que les outils adb et fastboot sont installés et ajoutés à votre variable d'environnement PATH.
    • -
    • Sous Linux / OSX, placez-vous dans le répertoire depuis la ligne de commande et exécutez le script flash.sh.
      - Attention : il est déconseillé d'exécuter la commande avec sudo car cela est très dangereux de l'utiliser avec des exécutables téléchargés depuis internet.
      - Notes : Si le script ne parvient pas à voir votre Flame, vérifiez que vous avez correctement configuré les règles udev. Si le script flash.sh n'existe pas, vous pouvez renommer le fichier flash.bat en flash.sh et l'exécuter
    • -
    -
  8. -
- -
-

Note: Si vous rencontrez une erreur "permission denied" ou un erreur "Waiting for device" lorsque vous exécutez, il s'agit probablement d'une erreur provoquée par des droits système manquant. Vous pouvez résoudre ce problème en exécutant la commande suivante chmod +x flash.sh depuis le bon répertoire.

-
- -
-

Note : Vous pouvez aussi essayer d'installer vos propres versions de Firefox OS sur votre Flame. Pour cela, rendez vous ici: Compiler et installer Firefox OS.

-
- -

Régler les problèmes de font

- -
-

Attention : cette étape est spécifique à l'image v180

-
- -

Après avoir mis à jour Gecko et Gaia vers le canal nightly avec l'image v180, vous rencontrerez des problèmes car Gecko et Gaïa attendront des fonts qui ne sont pas dans l'image (ce bug a été corrigé avec la version v188). Pour résoudre ce problème, téléchargez notre outil de mise à jour des fonts, dézippez-le et exécutez le script flash.sh fourni.

- -
-

Note : Vous pouvez aussi utiliser le script update_system_fonts.sh qui téléchargera et installera automatiquement les fonts manquantes.

-
- -

Mettre à jour votre Flame avec une image du canal nightly

- -
-

Note: Actuellement, les versions Nightly de Firefox OS ne proposent pas de support pour A-GPS ce qui peut poser des soucis de performance avec la fonctionnalité GPS de votre téléphone. Il est prévu que cela soit résolu dans une future version publiée sur ce canal.

-
- -
-

Important: Attention, lorsque vous effectuez une installation complète ou partielle (shallow) à partir de ces images, vous perdez les informations contenues dans votre téléphone. Avant d'effectuer le "flash", vous devriez faire une sauvegarde de vos données personnelles. Vous pourrez ainsi les restaurer après. Rendez-vous à la section "sauvegarder et restaurer les données de votre Flame".

-
- -
    -
  1. Avant de penser à installer une version Nightly, vous devriez installer la dernière image du canal stable sur votre téléphone afin d'être sûr que tous les prérequis systèmes soient remplis.
  2. -
  3. Parce que vous allez installer une image complète du système, vous devez activer le débogage à distance depuis votre Flame depuis les paramètres pour développeurs sur Firefox OS.
  4. -
  5. Sélectionnez l'image que vous voulez installer (en la sélectionnant depuis http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/). Vous pouvez aussi utiliser une des images suivantes : - -
  6. -
  7. Sélectionnez une version et téléchargez les deux fichiers suivant b2g-XX.XX.en-US.android-arm.tar.gz et gaia.zip. Sauvegardez-les dans un dossier nommé, par exemple, fxos.
  8. -
  9. Téléchargez le script d'installation shallow flash et sauvegardez-le dans le même dossier que les deux fichiers précédents. Pour cela, suivez le lien shallow flash, cliquez sur le bouton Raw et utilisez la fonctionnalité "enregistrer sous" de votre navigateur pour sauvegarder le fichier en le nommant shallow_flash.sh.
  10. -
  11. Pour les utilisateur Windows: Téléchargez le script shallow_flash.bat et installez l'outil Cygwin qui fournit une ligne de commande typée Linux sur votre environnement Windows. Pour cela, téléchargez le fichier d'installation setup*.exe  et déposez-le dans le même répertoire que le script shallow_flash.bat . Celui-ci se chargera d'installer correctement Cygwin pour vous.
  12. -
  13. -

    Depuis le Terminal, placez-vous dans le répertoire où vous avez sauvegardé vos fichiers et exécutez les commandes suivantes :

    - -

    Linux:

    - -
    ./shallow_flash.sh --gaia=gaia.zip --gecko=b2g-XX.XX.en-US.android-arm.tar.gz
    -
    - -

    Mac:

    - -
    ./shallow_flash.sh --gaia gaia.zip --gecko b2g-XX.XX.en-US.android-arm.tar.gz
    - -

    Windows:

    - -

    Double-cliquez sur shallow_flash.bat ou exécutez-le depuis la ligne de commande Windows. Cela aura pour effet de flasher votre téléphone avec gaia.zip et un fichier  b2g-XX.XX.en-US.android-arm.tar.gz .

    -
  14. -
- -
-

Note: Si vous rencontrez une erreur "permission denied" ou une erreur "Waiting for device" lorsque vous exécutez l'étape ci-dessus, il s'agit probablement d'une erreur provoquée par des droits système manquants. Vous pouvez résoudre ce problème en exécutant la commande suivante: chmod +x flash.sh depuis le bon répertoire.

-
- -
-

Note: Une installation "shallow flash" met à jour Gecko, Gaia et seulement quelques données systèmes en opposition à une installation complète qui met à jour Gecko/Gaia mais aussi Gonk avec l'ensemble des paramétrages spécifiques à votre téléphone. C'est pour cette raison qu'il est conseillé d'installer une image complète à jour avant d'effectuer une installation "shallow" : de cette manière vous êtes assuré d'avoir une version à jour de Gonk et ses paramètres.

-
- -

Après installation, votre téléphone devrait redémarrer et vous proposer les étapes de paramétrage spécifiques à une nouvelle installation.

- -

Passer sur le canal d'installation nightly

- -

Depuis la version 2.2, vous pouvez directement sélectionner le canal de mise à jour depuis les paramètres pour développeurs sur Firefox OS.

- -

Si ce paramétrage n'est pas disponible, vous pouvez utiliser la "vieille" méthode.

- -
    -
  1. Assurez-vous que le débogage distant par USB soit activé depuis les paramètres pour développeurs sur Firefox OS.
  2. -
  3. Téléchargez le script suivant. Pour cela, suivez le lien, cliquez sur le boutton Raw et utilisez la fonctionnalité "enregistrer sous" de votre navigateur pour sauvegarder le fichier en le nommant change_channel.sh.
  4. -
  5. Depuis la ligne de commande et le répertoire où vous avez enregistré le script, vous pouvez changer le canal de mise à jour en exécutant la commande suivante :
    - -
    ./change_channel.sh -v nightly
    -
  6. -
  7. Après redémarrage du téléphone, vous pouvez contrôler la présence d'une mise à jour OTA en vous rendant dans les menus Paramètres > Informations > Mises à jour logicielles > check for updates.
  8. -
- -
-

Note: Vous avez le choix entre de nombreux canaux de mise à jour . Exécutez la commande "./change_channel.sh -h" pour les lister.

-
- -

Mode Fastboot

- -

Si l'installation d'une image échoue sur votre téléphone, votre téléphone peut ne plus fonctionner correctement et démarrer seulement en mode Fastboot. Ce mode de récupération propose peu d'options (Reboot, Update from adb, Wipe data, Wipe cache, and Update from sdcard). Malheureusement, sélectionner l'option Update from adb charge un mode spécifique de l'outil ADB (adb sideload) ne permettant pas d'exécuter les scripts nécessaires à l'installation d'une image correcte.

- -

Pour forcer un démarrage en mode fastboot utilisable, vous pouvez exécuter les commandes suivantes :

- -
    -
  1. -

    Éteignez votre téléphone (si vous ne pouvez pas l'éteindre, retirez la batterie et remettez-la en place).

    -
  2. -
  3. Branchez le téléphone à votre ordinateur via un câble USB.
  4. -
  5. Démarrez votre téléphone en maintenant les boutons d'allumage et "descendre le volume".
  6. -
- -

Votre téléphone devrait s'allumer et afficher le texte "FASTBOOT" : cela signifie qu'il attend d'être connecté par USB. Si vous exécutez la commande fastboot devices vous devriez voir votre téléphone. Remarquez que la commande habituelle adb ne verra pas votre téléphone. Depuis ce mode, vous pouvez utiliser les scripts pour installer une image de base comme expliqué plus haut. Comme les scripts utilisent des commandes adb et fastboot, vous devriez voir des messages d'erreur et / ou d'avertissement apparaître mais cela n'empêchera pas l'installation de se dérouler complètement.

- -

Outil de récupération d'urgence

- -

Si la mise à jour échoue, que votre téléphone est inutilisable et que vous ne pouvez entrer en mode fastboot, vous pouvez utiliser l'outil de récupération d'urgence. Le câble fourni avec le téléphone qui comporte une étiquette rouge “Recovery Cable” et l'outil de récupération "Emergency Download Tool", sont nécessaires à cette opération. Contactez le fabriquant (flameservice [at] thundersoft.com) pour tout support technique.

- -

Emergency download tool dialog box as it is when it start.

- -
-

Note : L'outil n'est compatible qu'avec Windows.

-
- -
-

Note : L'outil de récupération est fourni dans l'état, sans instructions supplémentaires ou documentation (tout du moins pas encore).

-
- -

Mode Recovery

- -

Vous pouvez entrer dans le mode recovery pour effacer les données de votre téléphone ou installer manuellement un nouveau firmware. Pour rentrer dans ce mode, vous avez deux solutions :

- - - -

Depuis le mode recovery, vous pouvez naviguer dans les menus via les boutons monter / baisser le volume et sélectionner les options via le bouton d'allumage. Assurez vous d'avoir sauvegardé votre profil avec vos données personnelles avant d'effacer les données ou d'effectuer une mise à jour.

- -

Sauvegarder et restaurer les données de votre Flame

- -

Lorsque vous utilisez votre téléphone Flame couramment, vous ne voulez peut-être pas perdre vos données personnelles comme vos contacts, vos paramétrages ou vos applications en mettant à jour votre téléphone avec les images listés ci-dessus. Pour sauvegarder et restaurer votre profil, vous pouvez utiliser notre outil livré dans le dépôt Git B2G-flash-tool.

- -
    -
  1. Ouvrez votre ligne de commande.
  2. -
  3. Clonez le dépôt suivant (vous devez avoir Git installé sur votre système). (Si vous ne possédez pas Git ou ne pouvez l'installer, un bouton "download as Zip" vous permet de télécharger le dépôt complet). -
    git clone https://github.com/Mozilla-TWQA/B2G-flash-tool
    -
  4. -
  5. L'outil se présente sous la forme d'un script python : backup_restore_profile.py. Pour l'utiliser, vous devez avoir l'outil Python d'installé sur votre ordinateur (la version 2.7.x devrait suffire). Les systèmes Linux et Mac les installent habituellement par défaut.
  6. -
  7. Rendez-vous dans le dossier où vous avez cloné le dépôt avec un terminal de ligne de commande cd B2G-flash-tool.
  8. -
- -
-

Note: Lorsque vous utilisez cet outil, assurez-vous d'avoir activé le mode debogage distant via USB depuis les paramètres pour développeurs sur Firefox OS et que l'outil ADB est installé sur votre ordinateur.

-
- -
-

Note: Si vous avez un message d'erreur à propos d'autorisations manquantes pour exécuter le script, exécutez la commande suivante :

- -
chmod +x backup_restore_profile.py
-
- -

Sauvegarder les données de votre téléphone

- -

Depuis le répertoire où vous avez sauvegardé le dépôt exécutez la commande suivante :

- -
python backup_restore_profile.py -b
- -

Cela devrait sauvegarder votre profil dans un répertoire mozilla-profile situé dans le même répertoire que le script.

- -

Restaurer les données sur votre téléphone

- -

Depuis le répertoire où est situé mozilla-profile, exécutez la commande suivante :

- -
python backup_restore_profile.py -r
- -
-

Note: Vous pouvez lister l'ensemble des options disponibles en exécutant la commande python backup_restore_profile.py -h.

-
- -

Installer des application sur votre Flame

- -

Les outils App Manager et WebIDE rendent facile l'installation et le débogage des applications sur votre téléphone.

- -

Ajuster la taille de la RAM

- -

Vous pouvez modifier la taille de la RAM de votre téléphone pour tester le comportement du système ou des applications sur des téléphones qui auraient moins de RAM que le Flame.

- -

Cela est géré depuis le mode fastboot (installez d'abord fastboot et ADB) et exécutez les commandes suivantes :

- -
adb reboot bootloader
-fastboot oem mem [0|256-1024]
- -

“0” indique que la quantité de RAM sera détectée automatiquement, “256-1024” correspond à un nombre de megabytes. Par exemple, si vous voulez que votre système n'utilise que 512Mo entrez la commande fastboot oem mem 512.

- -

Pour que les modifications soient prises en compte, vous devrez redémarrer votre téléphone en utilisant la commande suivante :

- -
fastboot reboot
- -

La quantité de mémoire actuellement utilisée / paramétrée peut être récupérée avec la commande suivante :

- -
fastboot getvar mem
diff --git a/files/fr/archive/b2g_os/phone_guide/fx0/index.html b/files/fr/archive/b2g_os/phone_guide/fx0/index.html deleted file mode 100644 index a203e30eb5..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/fx0/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Fx0 -slug: Archive/B2G_OS/Phone_guide/Fx0 -tags: - - Firefox OS - - Fx0 - - KDDI - - Téléphone - - consommateur -translation_of: Archive/B2G_OS/Phone_guide/Fx0 ---- -
- - -
-

Le Fx0 est un smartphone Firefox OS haut de gamme et constitue le tout premier téléphone sous Firefox OS distribué au Japon. Il a été commercialisé par KDDI en décembre 2014.

- -

Acheter un appareil

- -

Le Fx0 est disponible à l'achat via les canaux de distribution japonais classiques. C'est un périphérique SIM-locké, il ne peut donc être utilisé qu'au Japon.

- -

Désormais, il y a quelques téléphones SIM débloqués qui sont vendus dans des sites marchands.

- -

Mise à jour logicielle

- -

L'image système de l'appareil étant verrouillée, il n'est possible de mettre à jour le logiciel que lorsque l'opérateur téléphonique publie une mise à jour OTA. L'image système de l'appareil est basée sur Firefox OS 2.0.

-
-
- -

Spécifications de l'appareil

- -

Vous pouvez trouver davantage d'informations sur les spécifications de l'appareil sur notre page de specs des téléphones et appareils.

- -

Matériel

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/huawei_y300_ii/index.html b/files/fr/archive/b2g_os/phone_guide/huawei_y300_ii/index.html deleted file mode 100644 index def7cc5976..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/huawei_y300_ii/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Huawei Y300 II -slug: Archive/B2G_OS/Phone_guide/Huawei_Y300_II -tags: - - Firefox OS - - Huawei Y300II - - Téléphone - - utilisateur -translation_of: Archive/B2G_OS/Phone_guide/Huawei_Y300_II ---- -
-
- -
-

Le Huawei Ascend Y300 II est très semblable au Ascend Y300 basé sur Android, à l'exception qu'il fait tourner Firefox OS 1.1 et non Android, de Google.

- -

Acheter un appareil

- -

Le Huawei Ascend Y300 II est disponible via les canaux de distribution classiques.

- -

Disponibilité

- -
    -
  • Philippines
  • -
  • Mexique
  • -
- -

Opérateurs​

- -
    -
  • Movistar
  • -
-
-
- -

Mise à jour du logiciel

- -

L'image système de l'appareil est verrouillée, il n'est donc possible de mettre à jour le logiciel que lorsque l'opérateur téléphonique publie une mise à jour OTA. L'image système de l'appareil est basée sur Firefox OS 1.1.

- -

Spécifications de l'appareil

- - - -

Coloris disponibles

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/index.html b/files/fr/archive/b2g_os/phone_guide/index.html deleted file mode 100644 index 6e20502d45..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Guide du téléphone pour développeur Firefox OS -slug: Archive/B2G_OS/Phone_guide -tags: - - B2G - - Bonnes pratiques de développement mobile - - Firefox OS - - Téléphone - - distribution - - liste smartphones Firefox OS -translation_of: Archive/B2G_OS/Phone_guide ---- -
-

Cette section contient des informations relatives aux téléphones spécifiques qui tournent sous Firefox OS – que ce soit des appareils pour les développeurs ou pour l'utilisateur final.

- -

Les informations générales sont disponibles via les pages : comment compiler et installer Firefox OS et développer Firefox OS ; consultez-les pour créer et installer la plate-forme à partir de zéro.

- -

Pour les développeurs qui possèdent des téléphones sous Firefox OS, les articles suivants peuvent néanmoins se révéler utiles.

-
- -

A l'attention du  développeur

- -

Les téléphones listés ici sont spécifiquement dédiés aux développeurs désirant expérimenter Firefox OS, que ce soit pour développer des applications ou contribuer au système d'exploitation lui-même. À ce titre, ils ont des cartes SIM déverouillées , des fichiers système accessibles, etc.

- -
-
Flame
-
Le dispositif Flame, réalisé en partenariat avec T2Mobile, est la référence officielle pour développer, tester et déboguer Firefox OS ainsi que les applications web ouvertes.
-
Geeksphone
-
Dans cet article, nous donnons quelques conseils de base sur la façon de garder votre Geeksphone à jour et comment modifier les applications système de Gaia.
-
ZTE OPEN
-
Cet article contient des informations sur le téléphone ZTE OPEN sous Firefox OS.
-
ZTE OPEN C
-
Le ZTE Open C est une version du téléphone sous Firefox OS produit par ZTE, avec des composants matériels haut de gamme et les plus récents logiciels .
-
- -

A l'attention de l'utilisateur

- -

Les téléphones répertoriés ci-dessous sont des modèles "utilisateurs", donc pas spécialement adaptés pour les "hackers". Cependant, les informations qui suivent sont utiles pour ceux souhaitant localiser des applications ou voulant s'assurer que leurs applications fonctionnent sur un périphérique spécifique.

- -

Pour une liste plus complète des périphériques, consultez notre page Firefox OS - Appareils et disponibilité.

- -
-
Alcatel One Touch Fire
-
Disponible dans plus de cinq pays, l'Alcatel One Touch Fire est un smartphone sous Firefox OS 1.3.
-
Alcatel One Touch Pixi 3 (3.5)
-
Smartphone propulsé par Firefox OS 2.0, avec une caméra de 2 méga-pixels.
-
Alcatel Onetouch Fire 2C 4020D
-
L'Alcatel Onetouch Fire C est un smartphone sous Firefox OS Tarako (1.3T), lui aussi distribué en Inde.
-
Alcatel Onetouch Fire C
-
L'Alcatel One touch Fire C est un smartphone sous Firefox OS Tarako, distribué en Inde.
-
Alcatel Onetouch Fire E
-
L'Alcatel Onetouch Fire E est un smartphone sous Firefox OS, disponible dans plus de cinq pays.
-
Cherry Mobile Ace
-
Le Cherry Mobile Ace est un smartphone sous Firefox OS 1.3T, disponible aux Philippines.
-
Fx0
-
Le Fx0 est le premier appareil Firefox OS spécifique utilisateur,  sorti au Japon. Il est distribué par KDDI.
-
 Huawei Y300 II
-
Le smartphone Huawei Y300 II, basé sous la version Firefox OS 1.1, est disponible aux Philippines et au Mexique.
-
Intex Cloud FX
-
L'Intex Cloud FX est le smartphone qui propose la toute première version de Firefox OS Tarako en Inde (basée sur Firefox OS 1.3T).
-
LG Fireweb
-
Le LG Fireweb est un smartphone sous Firefox OS 1.1, distribué en Uruguay et au Brésil.
-
Spice Firefox MI FX1
-
Le Spice Fire One MI FX1 est un smartphone sous Firefox OS Tarako (1.3T),  qui est distribué en Inde.
-
Spice Firefox MI FX2
-
Le Spice Fire One MI FX2 est un smartphone utilisateur 3G haut de gamme propulsé par FirefoxOS 1.4 avec une caméra de 2 megapixel, distribué en Inde.
-
Symphony GoFox F15
-
Le Symphony GoFox F15 est le premier appareil Firefox OS avec la capacité d'appels vidéo 3G. Il a été lancé au Bangladesh.
-
Zen U105 Fire
-
Dans cet article, vous trouverez des informations sur le smartphone "budget Zen" U105 Fire, disponible en Inde.
-
ZTE Open II
-
Le ZTE Open II est un smartphone sous Firefox OS disponible dans 7 pays, ayant un processeur double-cœur de 1.2 GHz et une double caméra de 2.0 MP.
-
Orange Klif
-
L'Orange Klif est un smartphone 3G, propulsé par Firefox OS 2.0, avec une caméra de 2 méga-pixels. Il est disponible dans un certain nombre de pays africains.
-
- -

Informations générales Firefox OS

- -
-
Spécifications des téléphones Firefox OS
-
Cet article donne la liste des différents téléphones Firefox OS disponibles ainsi que leurs spécifications telles que : noms de code, disponibilité, caractéristiques matérielles.
-
Caractéristiques générales des appareils
-
Cette page répertorie les caractéristiques spécifiques de Firefox OS et la configuration matérielle minimale requise.
-
Dépannage
-
Cet article fournit des conseils pour résoudre les problèmes courants que vous pouvez rencontrer quand vous utilisez Firefox OS.
-
Bonnes pratiques pour les appareils de référence ouverte
-
Un ensemble de bonnes pratiques fortement recommandées pour tout téléphone largement distribué, ayant une référence ouverte.
-
Le développement de tous les périphériques Firefox OS récents, a été effectué selon ces pratiques.
-
diff --git a/files/fr/archive/b2g_os/phone_guide/intex_cloud_fx/index.html b/files/fr/archive/b2g_os/phone_guide/intex_cloud_fx/index.html deleted file mode 100644 index 4a6df1d2d2..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/intex_cloud_fx/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Intex Cloud FX -slug: Archive/B2G_OS/Phone_guide/Intex_Cloud_FX -tags: - - Appareils Tarako - - Firefox OS - - Intex - - Téléphone - - utilisateur -translation_of: Archive/B2G_OS/Phone_guide/Intex_Cloud_FX ---- -
-
Intex Cloud FX image from official website
- -
-

L'Intex Cloud FX est un smartphone utilisateur sous Firefox OS. Il est le tout premier téléphone Firefox OS Tarako distribué en Inde. Il a été commercialisé par Intex en août 2014.

- -

Acheter un appareil

- -
    -
  •   Actuellement non disponible
  • -
- -

Disponibilité

- -

Inde

- -

Mise à jour du logiciel

- -

L'image système de l'appareil est verrouilée, le logiciel ne peut donc être actualisé que lorsque l'opérateur téléphonique publie une mise à jour OTA. L'image système de l'appareil est basée sur Firefox OS 1.3T.

-
-
- -

Spécifications de l'appareil

- -

Vous pouvez trouver plus d'informations sur les spécifications des appareils sur notre page des spécifications des téléphones et appareils.

- - - -

Coloris disponibles

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/lg_fireweb/index.html b/files/fr/archive/b2g_os/phone_guide/lg_fireweb/index.html deleted file mode 100644 index 315ac8d9c8..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/lg_fireweb/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: LG fireweb -slug: Archive/B2G_OS/Phone_guide/LG_fireweb -tags: - - Firefox OS - - Fireweb - - Téléphone - - consommateur - - lg -translation_of: Archive/B2G_OS/Phone_guide/LG_fireweb ---- -
-
- -
-

Le LG Fireweb est un smartphone haut de gamme sous Firefox 1.1 avec un appareil photo de 5 mégapixels.

- -

Acheter un appareil

- -

Le téléphone peut être acheté ici :

- - - -

Disponibilité

- -
    -
  • Brésil
  • -
  • Uruguay
  • -
- -

 

-
-
- -

Spécifications de l'appareil

- -

Davantage de caractéristiques sont listées sur notre page de spécifications des téléphones et appareils.

- - - -

Coloris disponible

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/nexus_4/index.html b/files/fr/archive/b2g_os/phone_guide/nexus_4/index.html deleted file mode 100644 index dcf29d6338..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/nexus_4/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Nexus 4 -slug: Archive/B2G_OS/Phone_guide/Nexus_4 -tags: - - B2G - - Firefox OS - - Installation - - Nexus 4 - - flashage -translation_of: Archive/B2G_OS/Phone_guide/Nexus_4 ---- -

Cet article fournit des informations sur l'utilisation de Firefox OS sur un Nexus 4, parmi lesquelles le flashage de Firefox OS sur votre appareil.

- -

Installation de Firefox OS sur votre Nexus 4

- -

Cette section fournit les instructions pour flasher Firefox OS sur votre appareil Nexus 4.

- -

Général

- -

Tous les utilisateurs doivent avoir adb et fastboot fonctionnels. Si vous n'avez pas adb ni fastboot, vous pouvez les télécharger depuis le SDK d'Android dont ils font partie.

- -

Les utilisateurs de Windows doivent également installer les pilotes USB de Google. Téléchargez les pilotes USB, et suivez les instructions d'installation.

- -

Flashage de Firefox OS sous Windows

- -
    -
  1. Téléchargez la version nexus-4-kk.zip.
  2. -
  3. Décompressez le fichier, et vérifiez que flash.bat est présent dans le dossier b2g-distro.
  4. -
  5. Éteignez votre Nexus 4 s'il était allumé.
  6. -
  7. Branchez votre Nexus 4 sur votre ordinateur avec un câble USB.
  8. -
  9. Allumez le nexus 4 en appuyant sur le bouton power, et juste après maintenez enfoncé le bouton volume bas jusqu'à ce que le message "Restart bootloader" soit affiché sur l'écran.
  10. -
  11. Double-cliquez sur le fichier flash.bat.
  12. -
- -

Flashage de Firefox OS sous Mac/Linux

- -
    -
  1. Téléchargez la version nexus-4-kk.zip.
  2. -
  3. Décompressez le fichier, et vérifier que flash.sh est présent dans le dossier b2g-distro.
  4. -
  5. Branchez votre Nexus 4 sur votre ordinateur avec un câble USB.
  6. -
  7. Ouvrez votre terminal et entrez dans le répertoire où se trouve flash.sh — e.g : cd nexus-4-kk/b2g-distro.
  8. -
  9. Entrez la commande adb devices pour vérifier que l'appareil est détecté. (Voir l'aide et les informations de dépannage sur la configuration de la commande adb.)
  10. -
  11. Entrez la commande chmod +x ./flash.sh pour rendre le script de flashage exécutable.
  12. -
  13. Entrez la commande ./flash.sh pour procéder à l'installation.
  14. -
- -

Une fois le processus terminé, votre téléphone redémarrera sur Firefox OS.

diff --git a/files/fr/archive/b2g_os/phone_guide/nexus_5/index.html b/files/fr/archive/b2g_os/phone_guide/nexus_5/index.html deleted file mode 100644 index 9eb57299b2..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/nexus_5/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Nexus 5 -slug: Archive/B2G_OS/Phone_guide/Nexus_5 -tags: - - B2G - - Firefox OS - - Installation - - Nexus 5 - - flashage -translation_of: Archive/B2G_OS/Phone_guide/Nexus_5 ---- -

Cet article fournit des informations sur l'utilisation de Firefox OS sur un Nexus 5, parmi lesquelles le flashage de Firefox OS sur votre appareil.

- -

Installation de Firefox OS sur votre Nexus 5

- -

Cette section fournit les instructions pour flasher Firefox OS sur votre appareil Nexus 5.

- -

Généralités

- -

Tous les utilisateurs doivent avoir adb et fastboot fonctionnels.  Si vous n'avez pas adb ni fastboot, vous pouvez les télécharger depuis le SDK d'Android dont ils font partie.

- -

Les utilisateurs de Windows doivent également installer les pilotes USB de Google. Téléchargez les pilotes USB, et suivez les instructions d'installation.

- -

Flashage de Firefox OS sous Windows

- -
    -
  1. Téléchargez la version nexus-5-l.zip.
  2. -
  3. Décompressez le fichier, et vérifiez que flash.bat est présent dans le dossier b2g-distro.
  4. -
  5. Branchez votre Nexus 5 sur votre ordinateur avec un câble USB.
  6. -
  7. Vérifiez que l'appareil est allumé, et que le mode adb est activé (Firefox OS : Paramètres > Développeurs > ADB et outils de développement ; Android: Settings > Developer options > USB debugging.)
  8. -
  9. Double-cliquez sur le fichier flash.bat.
  10. -
- -

Flashage de Firefox OS sous Mac/Linux

- -
    -
  1. Téléchargez la version nexus-5-l.zip.
  2. -
  3. Décompressez le fichier, et vérifiez que flash.sh est présent dans le dossier b2g-distro.
  4. -
  5. Branchez votre Nexus 5 sur votre ordinateur avec un câble USB.
  6. -
  7. Ouvrez votre terminal et entrez dans le répertoire où se trouve flash.sh — e.g : cd nexus-5-l/b2g-distro.
  8. -
  9. Entrez la commande adb devices pour vérifier que l'appareil est détecté. (Voir l'aide et les informations de dépannage sur la configuration de la commande adb.)
  10. -
  11. Entrez la commande chmod +x ./flash.sh pour rendre le script de flashage exécutable.
  12. -
  13. Entrez la commande ./flash.sh pour procéder à l'installation.
  14. -
- -

Une fois le processus terminé, votre téléphone redémarrera sous Firefox OS.

diff --git a/files/fr/archive/b2g_os/phone_guide/phone_specs/index.html b/files/fr/archive/b2g_os/phone_guide/phone_specs/index.html deleted file mode 100644 index 9a9761313d..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/phone_specs/index.html +++ /dev/null @@ -1,549 +0,0 @@ ---- -title: Phone and device specs -slug: Archive/B2G_OS/Phone_guide/Phone_specs -translation_of: Archive/B2G_OS/Phone_guide/Phone_specs ---- -
-

Cet article fourni des informations sur les appareils sous Firefox OS et leurs caractéristiques techniques, noms de code, versions Firefox OS de base, et autres.

-
- -

Téléphones Firefox OS disponible

- -

Durant la période de développement à chaque différent stade nous avions différent téléphones. Maintenant que nous avons déployé la version commercial, nous avons différent modèles provenant de différent constructeurs partenaires. [we should develope or completely deleting this part because it's not really useful in this state]

- -
-

Note: Pour consulter les informations sur les disponibilité des téléphones dans votre pays et chez quels opérateurs consultez la page Firefox OS près de chez vous.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Name / Codename

-
Release dateInitial FxOS
- version
DisponibilitéCommentaires
-

Alcatel One Touch Fire

- -

hamachi, buri

-
12 Juillet 20131.0.1Actuellement disponibleDisponible publiquement au Brésil, Uruguay, Italie, Allemagne, Grèce, Serbie, Hongrie et Pologne.
- Disponible avec des revendeurs sur eBay.
otoro, unagi, inari   off the shelf ZTE phone used for development prior to the ZTE Open.
-

ZTE Open

- -

ikura

-
2 Juillet 20131.0.1Actuellement disponiblesimilar to inari; publicly available on eBay.
-

LG Fireweb

- -

leo

-
24 Octobre 20131.1Actuellement disponibleDisponible publiquement au Brésil.
-

Geeksphone Keon

- -

keon

-
24 Avril 20131.0.1Actuellement en rupture de stockDeveloper-only devices
-

Geeksphone Peak

- -

peak

-
24 Avril 20131.0.1Actuellement en rupture de stockWas codenamed "twist" for a while; developer-only devices
Geeksphone Peak+---Annulé
Geeksphone Revolution4 Mars 20141.3preActuellement disponibleDisponible en ligne
-

LG Google Nexus 4

- -

nexus-4

-
   Experimental. Not supported by either LG or Google. Discontinued hardware.
-

Flame

- -

"the reference device"

-
Fin Avril 20141.3 Available to pre-order
-

Spreadtrum

- -

tarako

-
Fin du Q2 2014 ? Bientôt disponible 
ZTE Open C13 mai 20141.3Actuellement disponible -

Disponible en ligne et en boutique (Leclerc)

- -

Disponible en ligne (LDLC.com)

- -

Disponible en ligne (Materiel.net)

-
- -

Firefox OS by version

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VersionFeature Complete (FC) dateRelease To Partner
- (RTP) date
Nom de CodeVersion GeckoIncluded security fixesRelease notes
1.022 Décembre 201221 Février 2013TEFGecko 18Gecko 18 
1.0.115 Janvier 20136 Septembre 2013ShiraGecko 18Gecko 20Developer
- Consumer
1.129 Mars 20139 Octobre 2013LeoGecko 18+ (new APIs)Gecko 23Developer
- Consumer
1.1.1 TBDHDSame as 1.1.0 with WVGAGecko 23 
1.215 Septembre 20139 Décembre 2013KoiGecko 26[39]Gecko 26Developer
- Consumer
1.39 Décembre 2013TBD Gecko 28Gecko 28Developer
- Consumer
1.417 Mars 2014TBD Gecko 30Gecko 30Developer
- Consumer (TBD)
2.0TBDTBD Gecko 32Gecko 32Developer
- Consumer (TBD)
- -

Device specifications

- -

Note that there are some cases where there is an upcoming device that has not been announced but where we are able to share the code-name of the device and (some of) the capabilities of the device.  DO NOT put extra info down for these devices unless Andreas Gal or someone else equally able to bless the public disclosure of the information has disclosed it.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NomVersionsResolutionAffichage (inches)CPUCamera(s), MpxRAMROMStorageBattery (mAh)
-

Alcatel One Touch Fire

- -

hamachi, buri

-
v1.0.1/v1.1 -

320 x 480
- PX=1

-
3.5Qualcomm Snapdragon S1 MSM7227A 1 GHzRear: 3.2256MB512MB/data: probably the same as inari; specs say 160MB "end user memory"
- Probably no built-in DeviceStorage, MicroSD card (up to 32GB) required
-  
1400
-

ZTE Open / variants

- -

ikura

-
v1.0.1 (as shipped)320 x 480
- PX=1
3.5Qualcomm Snapdragon S1 MSM7225A 800 MHzRear: 3.2256MB512MB -

/data: 152M
- No built-in DeviceStorage, MicroSD card required

-
1200
-

LG Fireweb

- -

leo

-
v1.1320 x 480
- PX=1
4Qualcomm  Snapdragon S1 MSM7227A 1 GHzRear: 5512MB4GB -

/data: 1007.90M
- built-in DeviceStorage: yes, size unsure. possibly 3.7G, but that might be bad math.  (On an unhapy device /sys/devices/platform/msm_sdcc.3/mmc_host/mmc0/mmc0:0001/block/mmcblk0/block is 7733248, and then assuming a 512 byte block size, we get 3.7G)

-
1540
-

Geeksphone Keon

- -

keon

-
-

v1.0.1 - nightly
- downloads here

-
320 x 480
- PX=1
3.5Qualcomm Snapdragon S1 7225AB 1 GHzRear: 3512MB4GB -

/data: 1.5G
- built-in DeviceStorage: 1023.4M

-
1580
-

Geeksphone Peak

- -

peak

-
v1.0.1 - nightly
- downloads here
540 x 960
- PX=1.5
4.3Qualcomm Snapdragon S4 8225 1.2 GHz dual-core -

Front: 2
- Rear: 8

-
512MB4GB/data: 1.5G
- built-in DeviceStorage: 1023.4M
1800
Geeksphone Revolutionv1.3pre (as shipped)540 x 960 PX=1.54.7Dual-core Intel® Atom™ processor Z2560 with up to 1.6GHz -

Front: 1.3 Rear: 8

-
1GB4GB -

/data: 2G
- built-in DeviceStorage: 2.5GB

-
2000
-

Nexus 4

- -

nexus-4

-
v1.3 - nightly768 x 1280
- 720p
4.7 -

Qualcomm
- Snapdragon S4 Pro
- 1.5 GHz quad-core

-
Rear: 82GB8 or 16GBeverything exists in one big soup, there is no external (MicroSD) storage.  The size of the soup varies based on what model Nexus 4 you got.2100
-

Foxconn InFocus

- -

flatfish

-
 1280 x 80010Allwinner A31, Cortex A7 Quad-Core 1.0 GHz -

Front: 2
- Rear: 5

-
2GB16GB 7000
-

some phone thing

- -

fugu

-
v1.2f (branch) per320 x 480   256MB   
-

Spreadtrum SC6821

- -

tarako

-
v1.3 perHVGA
- 320 x 480
3.5Spreadtrum SC6821, Cortex A5 1GHz0.3 (rear only?)128MB (zram)2GB NAND flash (external) + 1GB LPDDR1 (embedded)32GB micro SD card1100
-

VIA Vixen

- -

community-driven customization of flatfish?

-
 1024 x 6007Cortex-A9 Dual Core 1.2 GHz -

Front: 0.3 Rear: 2
-  

-
1GB8GB  
-

Flame

- -

"the reference device"

-
v1.3 -

FWVGA
- 854 × 480
- PX=1.5
-  

-
4.5 capacitive touch -

Qualcomm Snapdragon 200 MSM8210, 1.2GHZ Dual core processor

-
Front: 2
- Rear: 5 auto focus with flash
256MB–1GB (adjustable by developer)8GB32GB micro SD card (USB 2.0)1800
ZTE Open Cv1.3 -

800 x 480 PX=1.5

-
4Qualcomm Snapdragon 200 MSM8210, 1.2GHZ Dual core processorarrière: 3512MB4GB -

/data: 1G

-
1400
- -

Column explanations:

- - diff --git a/files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx1/index.html b/files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx1/index.html deleted file mode 100644 index 1891a02956..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx1/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Spice Fire One MI FX1 -slug: Archive/B2G_OS/Phone_guide/Spice_Fire_One_MI_FX1 -tags: - - Appareils Tarako - - Firefox OS - - Spice - - Téléphone -translation_of: Archive/B2G_OS/Phone_guide/Spice_Fire_One_MI_FX1 ---- -
-
Intex Cloud FX image from official website
- -
-

Le Spice Fire One MI FX1 est un smartphone Firefox OS, basé sur Firefox OS Tarako qui est distribué en Inde. Il a été commercialisé par Spice Smartphones en août 2014.

- -

Acheter un appareil

- -

Le téléphone n'est plus disponible actuellement.

- -

Disponibilité

- -

Inde

- -

Mise à jour du logiciel

- -

L'image système de l'appareil est verrouillée. Il n'est possible de mettre à jour le logiciel que lorsque l'opérateur téléphonique publie une mise à jour OTA. L'image système de l'appareil est basée sur Firefox OS 1.3T.

-
-
- -

Spécifications de l'appareil

- -

Vous pouvez trouver plus de détails sur les spécifications des appareils sur notre page des spécifications des téléphones et appareils.

- - - -

Coloris disponibles

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx2/index.html b/files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx2/index.html deleted file mode 100644 index 06e9548148..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/spice_fire_one_mi_fx2/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Spice Fire One MI FX2 -slug: Archive/B2G_OS/Phone_guide/Spice_Fire_One_MI_FX2 -tags: - - B2G - - Firefox OS - - Téléphones -translation_of: Archive/B2G_OS/Phone_guide/Spice_Fire_One_MI_FX2 ---- -
-
- -
-

Le Spice Fire One MI FX2 est un smartphone 3G haut de gamme, qui tourne sur FirefoxOS 1.4  avec appareil photo 2 mégapixels, mis en vente en Inde.

- -

Obtenez un appareil

- -

Vous pouvez l'acheter ici :

- - - -

Pays où il est disponible

- -
    -
  • Inde
  • -
- -

 

-
-
- -

Spécifications de l'appareil

- -

Vous pouvez trouver plus de spécifications de l'appareil sur notre page de fonctionnalités et de caractéristiques.

- - - -

Couleurs Disponibles

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/zen_u105_fire/index.html b/files/fr/archive/b2g_os/phone_guide/zen_u105_fire/index.html deleted file mode 100644 index 903b2775c0..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/zen_u105_fire/index.html +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Zen U105 Fire -slug: Archive/B2G_OS/Phone_guide/Zen_U105_Fire -tags: - - Client - - Firefox OS - - Téléphone - - Zen - - Zen u105 - - tarako -translation_of: Archive/B2G_OS/Phone_guide/Zen_U105_Fire ---- -
-
- -
-

Le Zen U105 Fire est un smartphone premier prix sous Firefox OS Tarako avec un processeur cadencé à 1 GHz et un appareil photo de 2 MP, disponible en Inde.

- -

Acheter un appareil

- -

Le téléphone est disponible ici au prix de 1999 INR :

- - - -

Disponibilité

- -

Inde

-
-
- -

Spécifications de l'appareil

- -

Vous pouvez trouver davantage d'informations sur les spécifications de l'appareil sur notre page des spécifications des téléphones et appareils.

- - - -

Coloris disponible

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/zte_open/index.html b/files/fr/archive/b2g_os/phone_guide/zte_open/index.html deleted file mode 100644 index 3670caaf7d..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/zte_open/index.html +++ /dev/null @@ -1,305 +0,0 @@ ---- -title: ZTE OPEN -slug: Archive/B2G_OS/Phone_guide/ZTE_OPEN -tags: - - Firefox OS - - Gaia - - Gecko - - Téléphone - - zte -translation_of: Archive/B2G_OS/Phone_guide/ZTE_OPEN ---- -
-

Mozilla et ZTE sont partenaires. Ce partenariat a permis la création du ZTE OPEN, un puissant appareil basé sur Firefox OS, destiné aux développeurs et aux clients intéressés partout dans le monde. Ils ne sont pas verrouillés mais sont ouverts pour toute forme de tests et expérimentations.

-
- -
-

Note : Ces instructions ne sont pas valables pour l'appareil ZTE Open C. Si vous avez un ZTE Open C, vous devez vous rendre sur notre page consacrée au ZTE Open C à la place.

-
- -

Acheter un appareil

- -

Les ventes du ZTE Open sont arrivées à leur terme et il n'est donc plus disponible. Voir ZTE Open C.

- -

Mise à jour logicielle

- -

Cette section fournit les instructions pour mettre à jour Firefox OS sur votre appareil ZTE OPEN.

- -

Généralités

- -

En général, les compilations Firefox OS, mises à jour et tests sont effectués en branchant le téléphone sur un ordinateur grâce à un câble USB et en utilisant ADB (Android Debugging Bridge) et Fastboot pour relier ensemble les périphériques et  envoyer des commandes. Il faut donc installer ADB et fastboot sur votre ordinateur de bureau à partir du kit de développement d'Android. Il n'est pas nécessaire d'installer tout le kit. adb and fastboot se trouvent dans le dossier /platform-tools/.

- -

Ensuite, prenez votre téléphone et activer le débogage distant.

- -

Firefox OS 1.1

- -

Le 10 décembre 2013 : ZTE a publié une mise à jour Firefox OS 1.1 pour le ZTE OPEN. Celle-ci dispose à présent de fastboot activé, ce qui a provoqué des problèmes avec les builds publiées auparavant.

- -

À ce stade, la meilleure chose à faire consiste à faire d'abord la mise à jour de votre téléphone en version 1.1, même si vous souhaitez avoir une version 1.2. Pour cela, téléchargez le paquet 1.1 qui correspond à votre téléphone (OPEN (Norme américaine) ou OPEN (Norme européenne)). Notez que vous devez télécharger la version dont le numéro contient la révision de votre OS (autrement dit, téléchargez "V1.1.0B02(for V1.0)" si vous effectuez la mise à jour à partir d'une V1.0). Le fichier zip que vous obtiendrez contiendra aussi de la documentation concernant la mise à niveau. Décompressez-le et copiez le ZIP du firmware (intégré au zip téléchargé) comme décrit plus bas.

- -
-

Note : Les données de l'utilisateur seront supprimées par l'installation du paquet de la carte SD. Il est conseillé de sauvegarder vos données avant de commencer.

-
- -

À présent, suivez ces étapes :

- -
    -
  1. Éteignez votre téléphone, enlevez la batterie pour accéder à la carte microSD puis enlevez-la de son emplacement.
  2. -
  3. Insérez la carte microSD dans votre ordinateur de bureau.
  4. -
  5. Déplacez US_DEV_FFOS_V1.1.0B04_UNFUS_SD.zip ou EU_DEV_FFOS_V1.1.0B04_UNFUS_SD.zip (en fonction de la version que vous avez téléchargée) vers la racine de votre carte microSD. NE décompressez PAS le fichier.
  6. -
  7. Retirez la carte microSD de votre ordinateur de bureau et replacez-la dans votre téléphone.
  8. -
  9. Appuyez en même temps sur les boutons volume haut et power et maintenez-les enfoncés. Volume haut est activé en appuyant sur la partie supérieure du long bouton situé du côté gauche du téléphone. Si l'opération est correctement effectuée, vous entrerez dans le mode recovery de Firefox OS. (Note : le logo Firefox OS peut s'afficher brièvement avant d'entrer en mode recovery ; parfois, cela peut prendre un peu de temps.)
  10. -
  11. Utilisez les boutons volume haut/bas pour vous déplacer dans les options du menu, et choisissez “apply update from external storage.”
  12. -
  13. Appuyez sur le bouton power pour valider la sélection. Vous verrez apparaître un nouvel écran listant les fichiers présents sur la carte microSD.
  14. -
  15. De nouveau, utilisez les boutons volume haut/bas pour sélectionner le firmware : soit US_DEV_FFOS_V1.1.0B04_UNFUS_SD.zip, soit EU_DEV_FFOS_V1.1.0B04_UNFUS_SD.zip (selon la version téléchargée), puis pressez le bouton power pour confirmer.
  16. -
- -

Si tout se passe bien, des messages d'état vont s'afficher jusqu'à ce que l'un d'eux indique Install from sdcard complete.”. Vous devez sélectionner “reboot system now” une fois l'installation terminée. Votre téléphone va ensuite redémarrer puis afficher l'écran de configuration que vous avez vu la première fois que vous avez allumé votre téléphone.

- -

Firefox OS 1.2

- -

En janvier 2014, ZTE a publié une version bêta de Firefox OS 1.2 (fastboot activé, avec accès root). Il s'agit globalement d'une version de base 1.1 + Gecko et Gaia en version 1.2, et ne nécessite pas de placer la version sur la carte SD du téléphone.

- -

Avec la version 1.1 installée comme décrit plus haut, ouvrez un terminal et vérifiez avec la commande suivante que la connexion est bien faite :

- -
adb devices -l
-
- -

En réponse, vous devriez voir votre appareil indiqué sous une forme ressemblant à ceci : "roamer2    device usb:2-1.2",.

- -

Téléchargez la version appropriée du build à partir du compte Dropbox que ZTE a mis en place : version US ou version UK. Pour les utilisateurs de Windows, il est aussi possible de télécharger des instructions particulières, ainsi qu'un outil de mise à jour pour vous faciliter l'installation de la nouvelle version. Néanmoins, les étapes ci-dessous fonctionneront sur tous les systèmes d'exploitation – Linux, OS X et Windows – sans s'appuyer sur cet outil spécifique.

- -

Une fois en possession du fichier, décompressez-le et ouvrez une console. Remarquez que ces étapes vont effacer vos données personnelles, assurez-vous d'en faire une (sauvegarde) avant. Placez-vous ensuite dans le dossier où se trouvent les fichiers. Toujours dans la console, tapez cette commande :

- -
adb reboot bootloader
- -

Pendant que le téléphone redémarre, exécutez la commande suivante. (Fastboot ne fonctionne qu'en cours de redémarrage) :

- -
sudo fastboot devices
-
- -

Si vous voyez : "< waiting for device >", faîtes Ctrl-C et réessayez la commande jusqu'à voir apparaître en réponse quelque chose dans le genre : "ROAMER2    fastboot".

- -

Ensuite, toujours pendant qu'il est en train de redémarrer, exécutez rapidement les commandes suivantes :

- -
fastboot flash boot boot.img
-fastboot flash userdata userdata.img
-fastboot flash system system.img
-fastboot flash recovery recovery.img
-fastboot erase cache
-fastboot reboot
- -
-

Note : Si vous rencontrez à chaque fois le message "waiting device". Essayez d'ajouter sudo devant les commandes, comme "sudo fastboot flash boot boot.img".

-
- -

(Ayant été distrait, le redémarrage s'est achevé avant que je n'ai pu saisir toutes les commandes. J'ai simplement recommencé à partir de: "adb reboot bootloader".)

- -

Si tout s'est bien passé, votre téléphone doit redémarrer en ce moment. Vous constaterez que cette version 1.2 de ZTE contient de nombreuses applications de test ; si vous le souhaitez, vous pouvez les enlever.

- -
-

Note : Upgrading your ZTE Open to Firefox 1.1 or 1.2 (fastboot enabled) de Frédéric Harper fournit également des explications utiles sur le processus d'installation.

-
- -
-

Note : Le build 1.2 de ZTE pour l'Open comporte un bogue qui empêche de faire descendre/ouvrir la zone de notification. Cela peut être corrigé en flashant votre téléphone avec la dernière version engineering de Firefox OS 1.2. Vérifiez que ADB est installé et que le débogage distant est activé, lancez ensuite les commandes suivantes dans votre terminal :
-
- git clone -b v1.2 https://github.com/mozilla-b2g/gaia.git gaia_v1.2
- cd gaia_v1.2
- make reset-gaia

-
- -

Firefox OS 1.3 et suivants

- -

À l'heure actuelle, ZTE n'a publié Firefox OS 1.3 que pour le ZTE Open commercialisé par Movistar (TME) ; ce sont les ZTE Open bleus. Le paquet se trouve sur leur site de support ou peut être téléchargé ici directement.

- -

 

- -
-

Note : Les builds communautaires sont fournies ici et ici.

-
- -

En ce qui concerne le ZTE Open d'ebay, ZTE n'a pas publié de builds pour Firefox OS 1.3 et suivants. Pour les obtenir sur votre ZTE open, vous aurez besoin de compiler et installer un nouveau build de Firefox OS/B2G dessus manuellement (commencez par les instructions sur les prérequis pour construire Firefox OS, et traitez le ZTE comme s'il s'agissait d'un appareil Inari dans le but de le configurer). Vous pouvez restaurer votre téléphone si nécessaire en suivant la procédure décrite dans la section J'ai brické mon téléphone.

- -

Caractéristiques matérielles

- -

Vous pouvez trouver une liste plus complète des caractéristiques matérielles sur notre page de spécifications des téléphones et appareils.

- -

Réseau

- - - -
-

Note : les téléphones de Hong Kong supportent aussi les réseaux 3G tri-bandes — HSDPA 850/1900/2100 (850/1900 pour les USA, Canada, 850/1900/2100 pour l'Asie, Australie et 900/2100 pour l'Europe.)

-
- -

Matériel

- - - -

Opérateurs de téléphonie

- -
-

Les informations de tarifs sont données pour référence uniquement et peuvent ne pas être précises. Suivez le lien associé pour les informations officielles.

-
- -

Opérateurs US

- -

AT&T

- - - -
Exemples de formules prépayées chez AT&T
- -

GoPhone® prépayé, offres smartphone

- - - -

Aio

- - - -
Exemples de formules prépayées chez Aio
- - - -

Good2GO

- - - -
Exemples de formules prépayées chez Good2GO
- - - -

Autres MVNO d'AT&T

- -

Ces opérateurs n'offrent pas de données 3G supplémentaires.

- - - -

T-Mobile

- - - -

Opérateurs canadiens

- -

La version US du ZTE Open fonctionne également au Canada avec les opérateurs qui utilisent les réseaux Bell/Telus ou Rogers. Certains opérateurs régionaux comme Sasktel ou MTS qui utilisent UMTS devraient fonctionner eux aussi.

- -

Il ne fonctionnera pas avec les opérateurs qui n'utilisent pas UMTS ou GSM, comme Public Mobile, ni avec ceux qui utilisent la bande de fréquences AWS comme WIND Mobile, Mobilicity, Videotron ou Eastlink.

- -

Carte mémoire

- -

Système de fichiers

- -

Afin d'être reconnue par le téléphone, la carte MicroSD doit être formatée avec le système de fichiers FAT32. Si la carte est neuve ou n'a jamais été reformatée, elle devrait fonctionner telle quelle.

- -

Révisions matérielles

- -

Révision 01

- -

Les téléphones produits avant le 27/09/2013 ne disposent pas de fastboot et doivent être mis à jour. Normalement, cela devrait se faire via les Mises à jour logicielles mais certains utilisateurs ont signalé avoir eu des problèmes avec cette méthode. C'est pourquoi ZTE a mis à disposition des paquets pour carte SD permettant d'activer fastboot sur ces premières versions d'appareils. Images à flasher sur :

- - - -

Le lien vers le fichier zip se trouve sous Downloads. Notez qu'il faut télécharger la version contenant votre révision d'OS (autrement dit, téléchargez "V1.1.0B02(for V1.0)" si vous faîtes la mise à jour depuis la V1.0). Une fois le fichier téléchargé et décompressé, suivez les instructions du PDF qu'il contient pour flasher le paquet sur votre téléphone.

- -

Questions relatives sur le Forum de Support :

- - - -

Révision 02

- -

Fastboot est activé par défaut sur les téléphones produits à partir du 27/09/2013. Cela inclut les téléphones de Hong Kong.

- -
-

Note : Si vous n'êtes pas sûr de la révision de votre téléphone, vérifiez-la dans Paramètres > Information > Logiciel. Si elle est plus ancienne que celles dont les numéros de versions suivent,  il vous faudra mettre à jour votre téléphone avec les paquets SD précités pour activer fastboot.

- - -
- -

Support pour l'appareil

- -

Une fois que votre téléphone dispose de fastboot activé, vous serez alors en mesure de compiler et installer de nouveaux builds Firefox OS/B2G dessus (commencez par les instructions sur les prérequis pour la construction et traitez le ZTE comme un appareil Inari dans le but de le configurer), et restaurez votre téléphone si nécessaire en utilisant la procédure citée dans la section J'ai brické mon téléphone.

- -

Si vous rencontrez des erreurs concernant le réglage de l'heure système lors du flashage d'un build personnalisé, vous devrez peut-être télécharger une image de démarrage modifiée.

- -

J'ai brické mon téléphone

- -

Si vous êtes dans un processus de modification de votre téléphone et que celui-ci se retrouve “sans réaction”, vous devriez être en mesure de le restaurer grâce à fastboot en suivant cette procédure simple.

- -

Tout d'abord, débranchez le câble USB puis enlevez la batterie du téléphone l'espace de 30 secondes. Ensuite, replacez la batterie et appuyez sur le bouton volume haut tout en maintenant enfoncé le bouton power pendant quelques secondes. Rebranchez alors le câble USB et exécutez les commandes suivantes dans une fenêtre de terminal après vous être placé dans le répertoire qui contient les fichiers des paquets SD décrits plus haut (il est toujours utile de vérifier au préalable s'il existe une mise à jour de ces fichiers) :

- -
fastboot flash recovery recovery.img
-fastboot flash boot boot.img
-fastboot flash userdata userdata.img
-fastboot flash system system.img
-fastboot reboot
-
- -

Ce processus devrait restaurer votre téléphone. Si cela semble ne pas fonctionner, il faudra essayer une seconde fois.

- -

Les écouteurs ne fonctionnent pas ?

- -

Nous avons découvert que la prise jack des écouteurs est conçue par un fabricant chinois qui a des problèmes de compatibilité avec d'autres marques d'écouteurs intégrant des microphones. Il peut y avoir des problèmes d'absence de son lorsque vous essayez d'utiliser des écouteurs de marques Apple, Samsung, HTC et autres. Vous pouvez acheter un adaptateur pour écouteurs de 3,5 mm qui inverse les broches du microphone et de masse pour éviter ce problème. Pour plus d'informations, voir le bug 812607.

- -

Autres notes concernant le support

- -

Certains clients ont signalé avoir rencontré un problème avec des mises à jour FOTA qui ne parviennent pas à activer fastboot ; des recherches sont toujours et nous accompagnons ZTE pour analyser tout scénario. Nous posterons plus d'informations dès qu'il y en aura.

- -

Si votre téléphone a malencontreusement été endommagé au cours de la mise à jour FOTA parce que ZTE a fourni des fichiers de mise à jour incorrects ou avec des erreurs, vous pouvez essayer de le restaurer à sa configuration d'usine avec l'image SD appropriée et les instructions indiquées dans Révision 01. Sinon, retournez votre téléphone à la boutique eBay où vous l'avez acheté pour en obtenir un nouveau en échange. Vous pouvez contacter le propriétaire de la boutique directement via un message eBay.

- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/phone_guide/zte_open_c/index.html b/files/fr/archive/b2g_os/phone_guide/zte_open_c/index.html deleted file mode 100644 index 142d406b51..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/zte_open_c/index.html +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: ZTE OPEN C -slug: Archive/B2G_OS/Phone_guide/ZTE_OPEN_C -tags: - - Appareil - - Firefox OS - - Gaia - - Guide - - Open C - - Smartphone - - Téléphone - - zte -translation_of: Archive/B2G_OS/Phone_guide/ZTE_OPEN_C ---- -
-

Le ZTE Open C est un smartphone de la marque ZTE fonctionnant sous Firefox OS. Il intègre un appareil photo de 2 Mpx et un écran 4 pouces de 480 x 800 pixels, offrant une densité de pixels de 233ppp. Il est fourni avec Firefox OS 1.3 préinstallé. Cet article fournit des informations concernant ce smartphone, ses mises à jour et les détails pour le dépannage. 

-
- -
-

Note: Cet article n'est pas applicable au téléphone ZTE Open. Vous devriez plutôt consulter notre page dédiée au ZTE Open si vous possédez ce modèle.

-
- -

Open C blue nuit

- -

 

- -

Le ZTE Open C est le premier téléphone grand public vendu avec Firefox OS 1.3, la dernière version de Firefox OS. Celle-ci présente de nombreuses nouvelles caractéristiques comme le contrôle du lecteur de musique directement depuis l'écran de verrouillage ou la barre de notifications, mais aussi le partage Bluetooth avancé, permettant de transférer plusieurs fichiers simultanément. L'utilisateur peut à présent naviguer plus rapidement dans l'interface grâce aux "smart folders" (dossiers intelligents) qui classent automatiquement les applications et les sites de recherche en catégories. La fluidité de défilement et la vitesse de lancement des applications du système ont également été améliorées (ex. calendrier, contacts, appareil photo).

- -

Acheter l'appareil

- -

Ce téléphone est actuellement proposé en France par Auchan (pour un achat en ligne uniquement) au prix soldé de 29,90€ (au lieu de 59,99€).

- - - -
-

Note: Les téléphones sont livrés sans aucune application ou service de connectivité d'opérateur téléphonique spécifique et sont déverrouillés pour tout opérateur en sortie de boîte.

-
- -

 

- -

Caractéristiques

- -

Voir Caractéristiques des téléphones et appareils.

- -

 

- -

Mise à jour officielle

- -

Pour mettre à jour le système de l'Open C avec une version officielle, la façon la plus simple est de vous référer à la notice que vous trouverez sur le site d'assistance de ZTE France. Pour ce faire, sélectionnez Open C dans la section "1 - MON PRODUIT", ensuite choisissez Notices en "2 - JE CHERCHE" et enfin vous trouverez la notice de mise à jour en "3 - RÉPONSES".

- -

 

- -

Mise à jour communautaire

- -

Il est également possible de mettre à jour l'Open C en passant par une version communautaire. La communauté Mozilla Francophone publie ses propres builds, mettant à jour Gecko et Gaia. Pour se les procurer, il faut aller à cette adresse.

- -
-

Il faudra au préalable rooter le téléphone, afin de bénéficier des mises à jour communautaires.

-
- -

 

- -

Mise à jour "manuelle"

- -

Si vous désirez mettre à jour Gecko et/ou Gaia vous-même, le processus est un peu plus délicat, car le téléphone est verrouillé par défaut (aucun privilège administrateur, "root" en anglais). Pour déverrouiller les privilèges d'administrateur sur votre téléphone (c'est à dire "rooter" l'appareil), vous devez suivre les instructions pour utiliser l'outil de mise à niveau que vous pouvez récupérer sur le site d'assistance de ZTE France.

- -

Mettre à niveau Gecko et Gaia

- -

Une fois que votre téléphone permet le mode fastboot, vous allez pouvoir compiler et installer Firefox OS/B2G, les composants Gecko et Gaia sur celui-ci.

- -
-

ATTENTION : Avant toute manipulation de votre système, réalisez une sauvegarde de votre téléphone comme indique la dernière section, "Backup the phone system partition" de la page "Prérequis pour construire Firefox OS", en lien ci-dessous.

-
- -
    -
  1. Commencez par les prérequis pour construire Firefox OS, et faites comme si votre Open C était un téléphone Flame pour les configurations du système de construction B2G. Il faut procéder ainsi car le Open C et le Flame sont tous les deux sur la même base système, un Android Jelly Bean, mais qu'il n'existe pas encore de dépôt/branche pour le Open C.
  2. -
  3. Pendant les étapes de configuration, vous allez devoir pointer vers un fichier de manifeste personnalisé (custom manifest file) .XML dédié au Open C. Lisez ce bug et/ou téléchargez la pièce jointe et enregistrez-la sous le nom "openc.xml" dans un dossier facile à pointer (dans le dossier Téléchargements ou B2G par exemple).
  4. -
  5. Nettoyez le dossier B2G en supprimant les dossiers non désirés spécifiques au Flame : -
    rm -rf objdir-gecko/ out/ backup-flame/
    -
  6. -
  7. Facultatif : Avant de poursuivre, vous pouvez, si vous le souhaitez, spécifier la version à compiler. Pour ce faire, éditez le fichier "openc.xml", et modifiez-y les révisions (revision) des projets gecko.git, rilproxy, librecovery, fake-libdvm, gaia, gonk-misc, et moztt. Par exemple, si vous souhaitez compiler la version 2.2, vous mettrez : -
    <project name="gecko.git" path="gecko" remote="mozillaorg" revision="v2.2"/>
    -<project name="rilproxy" path="rilproxy" remote="b2g" revision="v2.2"/>
    -<project name="librecovery" path="librecovery" remote="b2g" revision="v2.2"/>
    -<project name="fake-libdvm" path="dalvik" remote="b2g" revision="v2.2"/>
    -<project name="gaia" path="gaia" remote="mozillaorg" revision="v2.2"/>
    -<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="v2.2"/>
    -<project name="moztt" path="external/moztt" remote="b2g" revision="v2.2"/>
    - -
    -

    ATTENTION : Actuellement, le fait de compiler les versions 2.5 et supérieures empêche le fonctionnement du bluetooth.

    -
    -
  8. -
  9. Maintenant, configurez B2G en pointant vers le fichier "openc.xml" avec cette commande : -
    ./config.sh flame /MON/DOSSIER/VERS/openc.xml
    -
  10. -
  11. Sur votre téléphone, vérifiez que Remote Debugging soit activé (choisissez ADB dans Firefox OS 1.3 ou ADB et Devtools dans les versions ultérieures).
  12. -
  13. Connectez votre téléphone par USB à votre ordinateur et vérifiez qu'il soit reconnu par ADB : -
    adb devices
    -
  14. -
  15. Une fois le téléphone reconnu, vous pouvez construire le composant Gecko et l'installer sur votre téléphone en exécutant les commandes suivantes : -
    ./build.sh gecko
    -./flash.sh gecko
    -
  16. -
  17. Maintenant, vous devriez mettre à niveau Gaia pour que sa version corresponde à la version de Gecko que vous venez d'installer sur votre téléphone : -
    cd gaia
    -make reset-gaia
    -
  18. -
  19. Pour terminer, il vous faut ajouter les polices (fonts) manquantes, afin d'obtenir un affichage correct sur votre téléphone.
  20. -
- -
-

ATTENTION : A partir de la version 2.2, un bug rend indisponible le stockage interne. Pour résoudre le problème, vous pouvez d'abord installer une version analogue des builds communautaires ou vous référer à la démarche du rapport de bug.

-
- -
-

ATTENTION : Essayer d'installer une image système du Flame directement -sans suivre les dispositions précédentes-  sur votre téléphone Open C, bloquera votre téléphone. Si vous n’êtes pas sûr de ce que vous faites, abstenez-vous.

-
- -

Installer votre propre version de Gaia

- -

Pour mettre à niveau votre version modifiée de Gaia, en laissant de coté Gecko, vous aurez besoin de créer votre branche ("Fork") [ facultatif ? ], cloner le dépot Github de Gaia, pour ensuite le modifier et l'installer sur votre Open C.

- -
    -
  1. Vérifiez que vous avez ADB d'installé sur votre machine.
  2. -
  3. Allez sur https://github.com/mozilla-b2g/gaia et cliquez sur le bouton "Fork" en haut à droite pour créer une branche dans votre propre dépôt.
  4. -
  5. Clonez le code de votre branche depuis votre dépôt sur votre machine avec cette commande : -
    git clone https://github.com/VOTRE-PSEUDO-GITHUB/gaia.git
    -
  6. -
  7. Modifiez Gaia à votre convenance.
  8. -
  9. Ensuite, sur votre téléphone, vérifiez que Remote Debugging soit activé (cochez ADB pour Firefox OS 1.3 ou choisissez ADB et Devtools sur les versions ultérieures).
  10. -
  11. Connectez votre téléphone par USB à votre ordinateur et vérifiez qu'il soit reconnu par ADB : -
    adb devices
    -
    -
  12. -
  13. Enfin installez Gaia en lançant les commandes suivantes depuis le dossier B2G : -
    cd gaia
    -make reset-gaia
    -
  14. -
- -

Problème de polices (font)

- -

Après avoir mis à jour Gecko/Gaia, il se peut que vous constatiez une incohérence entre les polices attendues par Gecko et Gaia, et celles fournies lors du flash. Pour corriger cela, téléchargez notre archive de mise à jour des polices (font), extrayez-la, placez-vous dans le répertoire créé par l'extraction et exécutez le script flash.sh.
-
- Vous pouvez également utiliser le script update_system_fonts.sh, qui se chargera de télécharger et d'envoyer automatiquement les polices sur le téléphone.

- -

 

- -

J'ai "brické" mon téléphone

- -

Si votre téléphone ne réagit plus, qu’il démarre en boucle ("bootloop" en anglais), ou qu’il bloque sur le logo Firefox OS ou l'animation du renard, votre téléphone est brické. Vous devriez être en mesure de le "débricker" en utilisant une archive de mise à jour officielle (voir la partie "Mettre à jour Firefox OS" plus haut) en la flashant via une carte SD, sur le site web ZTE:

- - - -

Vous pourrez aussi trouver des informations complémentaires en lisant ce sujet du site de support de Mozilla (en).

- -

Cependant, si votre partition système est défectueuse, il vous faudra réparer le téléphone en utilisant l'accès direct au fastboot. En supposant que vous utilisez Ubuntu GNU/Linux il vous faudra suivre les étapes suivantes :

- -
    -
  1. Téléchargez l'image de récupération système à partir de la page support du site ZTE. Extrayez ensuite le fichier update.zip sur votre bureau (~/Desktop/).
  2. -
  3. Extrayez l'image de récupération recovery.img à partir de l'archive de mise à jour update.zip sur votre bureau.
  4. -
  5. Créez un dossier small-system/ sur le bureau et copiez-le dans le fichier build.prop ainsi que dans le répertoire bin/. Vous trouverez le dossier system. dans l'archive update.zip.
  6. -
  7. Installez le package android-tools-fsutils (ou installez ext4_utils à partir des sources en suivant ce lien XDAdevelopers page).
  8. -
  9. Créez votre small-system.img: -
    ./make_ext4fs -l 40M small-system.img ~/Desktop/small-system/
    -
  10. -
  11. Déplacez votre small-system.img sur le bureau et démarrez votre appareil en mode fastboot en pressant simultanément bouton démarrer + bouton volume bas.
  12. -
  13. Connectez l'appareil à votre ordinateur (fastboot devices  cette commande devrait afficher l'appareil) et flash small-system.img: -
    fastboot flash system small-system.img
    -
  14. -
  15. Démarrez ensuite en mode récupération en utilisant recovery.img: -
    fastboot boot recovery.img
    -
  16. -
  17. Dans le menu de démarrage, sélectionnez appliquer la mise à jour à partir des entrées ADB (utilisez les boutons de réglages du volume pour naviguer, ainsi que le bouton démarrer pour sélectionner select), ensuite faites: -
    adb sideload update.zip
    -
  18. -
  19. -

    Une fois cela fait, redémarrez votre téléphone.

    -
  20. -
- -

Note: Vous pouvez cliquer ici pour plus d'informations.

diff --git a/files/fr/archive/b2g_os/phone_guide/zte_open_ii/index.html b/files/fr/archive/b2g_os/phone_guide/zte_open_ii/index.html deleted file mode 100644 index e6f9e35503..0000000000 --- a/files/fr/archive/b2g_os/phone_guide/zte_open_ii/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: ZTE Open II -slug: Archive/B2G_OS/Phone_guide/ZTE_Open_II -tags: - - Firefox OS - - Téléphone - - ZTE Open 2 - - ZTE Open II - - consommateur -translation_of: Archive/B2G_OS/Phone_guide/ZTE_Open_II ---- -
-
ZTE_Open_II_Device_Image
- -
-

Le ZTE Open II est un smartphone sous Firefox OS ; il dispose d'un processeur double-coeur à 1,2 GHz et d'une caméra 2,0 MP.

- -

Acheter un appareil

- -

Le ZTE Open II est disponible via les canaux de distribution classiques ; voir par exemple la page de Movistar.

- -

Disponibilité par pays

- -
    -
  • Argentine
  • -
  • Colombie
  • -
  • Guatemala
  • -
  • Nicaragua
  • -
  • Panama
  • -
  • Pérou
  • -
  • Salvador
  • -
  • Uruguay
  • -
- -

Opérateurs

- -
    -
  • Movistar
  • -
-
-
- -

Mise à jour logicielle

- -

L'image système de l'appareil est verrouillée, si bien qu'il n'est possible de le mettre à jour que si l'opérateur téléphonique publie une mise à jour OTA. L'image système de l'appareil est basée sur Firefox OS 1.2.

- -

Caractéristiques matérielles

- - - -

Coloris disponible

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/platform/apps_architecture/index.html b/files/fr/archive/b2g_os/platform/apps_architecture/index.html deleted file mode 100644 index cb040b8422..0000000000 --- a/files/fr/archive/b2g_os/platform/apps_architecture/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Architecture des applications Firefox OS -slug: Archive/B2G_OS/Platform/Apps_architecture -tags: - - Applications - - Firefox OS - - Guide -translation_of: Archive/B2G_OS/Platform/Apps_architecture ---- -
-

Cet article explique les fonctionnements internes du démarrage et de la gestion des applications dans Firefox OS. Ces informations seront utiles aux développeurs de la plate-forme Firefox OS, aussi bien qu'aux équipes portant le système d'exploitation sur un nouveau matériel. Ce n'est pas indispensable si vous êtes un développeur d'applications, mais cela pourrait quand même vous intéresser.

-
- -

Processus de démarrage d'une application

- -

Quand l'utilisateur sélectionne une application qu'il aimerait lancer, ou qu'une application doit être lancée d'une autre manière, l'application écran d'accueil commence par récupérer une référence d'application depuis l'API App, puis appelle la méthode App.launch() pour lancer l'application.

- -

Gecko reçoit cette requête et envoie le mozChromeEvent à l'application System avec les détails de l'application. L'application System traite cet événement en insérant un nouvel <iframe> dans son arborescence DOM et en chargeant l'application dans le nouvel <iframe>. Ce conteneur sera l'hébergeur de l'application jusqu'à ce qu'elle se termine.

- -

Chaque application a besoin d'un manifeste qui la décrit et possède une hiérarchie de fichiers spécifique au sein de son package. Pour plus de détails, voir l'article Manifeste d'application.

- -

Communication avec Gecko

- -

La communication entre Gecko et l'application System Gaia est faite via mozChromeEvent et mozContentEvent. Les événements mozChromeEvent sont diffusés depuis Chrome jusqu'au contenu et les événements mozContentEvent sont diffusés depuis le contenu jusqu'à Chrome. Cette communication est utilisée pour contrôler la création et la fermeture de l'interface de confiance et pour injecter les fonctions requises pour les notifications et autres tâches, incluant l'ordre pour l'application System, de démarrer une application.

- -
-

Note: Vous trouverez plus d'informations sur le fonctionnement de ces événements en lisant notre documentation de l'application System. Vous pouvez aussi en découvrir beaucoup plus en regardant le code de b2g/chrome/content/shell.js.

-
- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/platform/architecture/index.html b/files/fr/archive/b2g_os/platform/architecture/index.html deleted file mode 100644 index c23c7bb25e..0000000000 --- a/files/fr/archive/b2g_os/platform/architecture/index.html +++ /dev/null @@ -1,722 +0,0 @@ ---- -title: Architecture de Firefox OS -slug: Archive/B2G_OS/Platform/Architecture -tags: - - Architecture - - Firefox OS - - Guide -translation_of: Archive/B2G_OS/Architecture ---- -
-

Cet article est une vue d'ensemble de l'architecture de la plate-forme Firefox OS, présentant les concepts clés et expliquant sommairement comment les composants interagissent.

-
- -
-

Note: Gardez à l'esprit que Firefox OS est toujours un produit non finalisé ("Pre-release"). L'architecture décrite ici n'est pas forcément finalisée, et des changements peuvent survenir.

-
- -

Terminologie Firefox OS

- -

Voici quelques termes à connaître avant de lire la suite de notre documentation de Firefox OS.

- -
-
B2G
-
Acronyme de Boot to Gecko.
-
Boot to Gecko
-
Le nom de code du système d'exploitation Firefox OS lors de sa conception. Vous trouverez souvent ce terme en référence à Firefox OS, car il a été longtemps utilisé avant que le projet ait un nom officiel.
-
Firefox OS
-
Firefox OS correspond aux services de support et de branding de Mozilla (et ceux de ses partenaires OEM) ajoutés au-dessus de Boot to Gecko, pour créer un produit fini.
-
Gaia
-
L'interface utilisateur de la plate-forme Firefox OS. Tout ce qui est affiché à l'écran une fois que Firefox OS est lancé, est produit par la couche Gaia. Gaia implémente l'écran de verrouillage, l'écran d'accueil et toutes les applications standards que vous attendez sur un smartphone moderne. Gaia est implémenté entièrement à l'aide de HTML, CSS et Javascript. Les seules interfaces avec le système d'exploitation sous-jacent se font au travers d'API Web libres, elles-mêmes implémentées par la couche Gecko. Les applications tierces peuvent être installées en parallèle de la couche Gaia.
-
Gecko
-
C'est l'application permettant d'exécuter Firefox OS ; c'est-à-dire, la couche permettant le support des trois standards : HTML, CSS et Javascript. Il assure que chacune de ces technologies fonctionnent sur tous les systèmes d'exploitation supportés par Gecko. Cela signifie que Gecko inclut, entre autres, une pile réseau, une pile graphique, un moteur de présentation, une machine virtuelle JavaScript et des couches de portage.
-
Gonk
-
Gonk représente la couche la plus basse du système d'exploitation de la plate-forme Firefox OS. Elle est composée d'un noyau Linux (basé sur l'Android Open Source Project (AOSP)) et une couche d'abstraction matérielle de l'espace utilisateur (HAL userspace). Le noyau et plusieurs bibliothèques en espace utilisateur font partie de projets open-source communs : Linux, libusb, bluez, et bien d'autres. D'autres parties de la HAL sont partagées avec l'AOSP : GPS, caméra et d'autres. Vous pouvez considérer Gonk comme une distribution Linux basique. Gonk est une cible de portage de Gecko, il y a un port de Gecko vers Gonk, tout comme il y a un port de Gecko vers OS X, Windows et Android. Vu que le projet Firefox OS a un contrôle total sur Gonk, nous pouvons exposer des objets à Gecko, qui ne peuvent être exposés sur d'autres systèmes d'exploitation. Par exemple, Gecko a un accès direct à la pile téléphonique complète et à l'affichage frame buffer sur Gonk, mais n'a pas ce type d'accès sur les autres systèmes d'exploitation.
-
Jank
-
Ce terme est souvent utilisé dans l'univers du mobile, pour désigner une opération qui crée un effet de latence dans une application, qui bloque le rafraîchissement de l'interface, la fait laguer ou la rend inutilisable. Nos ingénieurs Gaia utilisent des techniques d'optimisation variées pour essayer d'éradiquer cette sensation à tout prix.
-
- -

Architecture générale

- -

Le schéma suivant compare les architectures de plate-formes propriétaires et de Firefox OS.

- -

on the left is a native mobile architecture stack, on the right is the Firefox OS architecture. they are similarm except that the native stack is all proprietary device functionality, and the Firefox OS stack is all done with open source and web technologies.

- -

Firefox OS élimine la couche native de l'API entre le système d'exploitation et les couches applicatives. Ce design intégré réduit les couches au-dessus de la plate-forme et simplifie la sécurité sans sacrifier les performances ni l'expérience utilisateur.

- -
    -
  1. Gaia est le noyau d'application web de l'appareil et la couche de l'interface utilisateur, en HMTL5, CSS et JavaScript, avec un certain nombre d'API exposées pour permettre le code de l'interface utilisateur d'interagir avec le matériel du téléphone et de fonctionnalité de Gecko.
  2. -
  3. Gecko est le moteur Web et la couche de présentation dans Firefox OS qui relie le matériel avec le HTML, en se servant de l'interface entre le contenu Web et le périphérique sous-jacent. Gecko fournit une analyse HTML5 et un moteur de rendu, l'accès programmatique à la fonctionnalité du matériel via des APIs Web sécurisés, une infrastructure de sécurité intelligente, la gestion de mise à jour, et d'autres services de base.
  4. -
  5. Gonk est la composante au niveau du noyau dans la pile de Firefox OS qui sert d'interface entre Gecko et le matériel sous-jacent. Gonk contrôle le matériel sous-jacent et expose les capacités matérielles aux API Web mis en œuvre dans Gecko. Gonk peut être considéré comme la «boîte noire» qui fait tout le travail complexe et détaillé dans les coulisses pour contrôler l'appareil mobile en adoptant la demande au niveau du matériel.
  6. -
  7. Le dispositif mobile est le matériel du téléphone fonctionnant avec Firefox OS. L'OEM est responsable de fournir l'appareil mobile.
  8. -
- -

 

- -

L'architecture spécifique de Firefox OS

- -

Firefox OS Architecture

- -

Déroulement du chargement de Firefox OS

- -

Cette section décrit le processus suivi lors de l'amorçage d'un matériel sous Firefox OS, quelles parties sont impliquées et où. Pour visualiser rapidement, le schéma d'amorçage général du système passe par le chargeur de boot dans l'espace noyau, à l'init du code natif, au B2G puis au tour de Gecko dans l'espace utilisateur, pour terminer par le système d'applications, le gestionnaire de fenêtres et enfin l'application d'accueil de Gecko. Toutes les autres applications vont venir s'appuyer là-dessus.

- -

- -

Le processus d'amorçage

- -

Quand un appareil Firefox OS est allumé, l'exécution commence dans le premier chargeur d'amorçage. A partir de là, le processus de chargement du système d'exploitation principal se déroule d'une manière commune : une succession de chargeurs d'amorçage de niveaux de plus en plus hauts amorcent le chargeur suivant de la chaîne. A la fin du processus, l'exécution est transférée au noyau Linux.

- -

Il y a plusieurs points à souligner à propos du processus d'amorçage :

- - - -

Le noyau Linux

- -

Le noyau Linux utilisé par Gonk est très similaire au upstream Linux duquel il dérive (basé sur un projet Android Open Source). Il y a quelques changements réalisés par l'AOSP qui n'ont pas encore été upstreamed. De plus, les marchands modifient parfois le noyau et upstream ces changements dans leur propre programme. En général, cependant, le noyau Linux et proche du stock.

- -

Le processus de démarrage pour Linux est bien documenté ailleurs sur Internet et cet article ne couvrira donc pas ce point.

- -

Le noyau Linux (ou kernel) va soulever des appareils et exécuter des processus essentiels. Il va exécuter des processus définis dans init.rc et le successeur init.b2g.rc pour amorcer les processus essentiels comme b2g (le processus de base de FirefoxOS, qui contient Gecko) et rild (les processus relatifs à la téléphonie qui peuvent être propriétaires par différents jeux de puces) — voir ci-dessous pour plus de détails. A la fin du processus, un processus d'espace utilisateur init est lancé, comme dans la plupart des systèmes d'exploitation similaires à UNIX.

- -

Dès que le processus init est lancé, le noyau Linux gère les appels système de l'espace utilisateur, et interrompt, et ainsi de suite les dispositifs matériels. Beaucoup de fonctions matérielles sont exposées à l'espace utilisateur au travers de sysfs. Par exemple, voici un bout de code qui lit l'état de la batterie dans Gecko:

- -
FILE *capacityFile = fopen("/sys/class/power_supply/battery/capacity", "r");
-double capacity = dom::battery::kDefaultLevel * 100;
-if (capacityFile) {
-  fscanf(capacityFile, "%lf", &capacity);
-  fclose(capacityFile);
-}
- -

En savoir plus sur le processus init

- -

Le processus init dans Gonk gère le montage des fichiers système requis et engendre les services système. Après, il reste autour pour servir de gestionnaire de processus. Ceci est assez similaire au init des autres systèmes d'exploitation ressemblant à UNIX. Il interprète des scripts (c'est-à-dire, les fichiers init*.rc) qui consistent en des commandes décrivant ce qui devrait être réalisé pour démarrer des services. Le init.rc de Firefox OS est habituellement le stock init.rc d'Android pour l'appareil patché pour inclure les éléments nécessaires à la relance de Firefox OS. Il varie toutefois selon les appareils.

- -

Une tâche clé que gère le processus init est le démarrage du processus b2g ; c'est le cœur du système d'exploitation Firefox OS.

- -

Le code de init.rc qui démarre ceci ressemble à :

- -
service b2g /system/bin/b2g.sh
-    class main
-    onrestart restart media
- -
-

Note : Savoir exactement à quel point init.rc diffère de la version Android varie selon les appareils ; parfois, init.b2g.rc est simplement ajouté; parfois les patchs sont plus significatifs.

-
- -

L'architecture des processus de l'espace utilisateur

- -

A présent, il est utile d'avoir un regard de plus haut niveau sur la manière dont les composants multiples de Firefox OS s'imbriquent et interagissent entre eux. Le diagramme ci-dessous montre le principal processus de l'espace utilisateur de Firefox OS.

- -

Userspace diagram

- -
-

Note : Gardez à l'esprit que depuis que Firefox OS est développé activement, le diagramme est susceptible de changer et pourrait ne pas être complètement exact.

-
- -

Le processus b2g est le principal processus système. Il s'exécute avec de hauts privilèges ; il a accès à la plupart des matériels de l'appareil. b2g communique avec le modem, dessine le framebuffer affiché et échange avec les GPS, l'appareil photo et d'autres fonctions matérielles. De manière interne, b2g exécute la couche Gecko (implémentée par libxul.so). Voir Gecko pour plus de détails sur la manière dont fonctionne la couche Gecko et comment b2g communique avec elle.

- -

b2g

- -

Le processus b2g peut à son tour déclencher un certain nombre de processus content à faibles privilèges. Ces processus sont l'endroit où les applications web et autres contenus web sont chargés. Ces processus communiquent avec le processus serveur principal Gecko avec le protocole IPDL, un système de transmission de messages.

- -

Le processus b2g exécute libxul, qui référence b2g/app/b2g.js pour obtenir les préférences par défaut. Avec ces préférences, il va ouvrir le ficher HTML b2g/chrome/content/shell.html, qui est compilé dans le fichier omni.ja.. shell.html inclut le fichier b2g/chrome/content/shell.js, qui déclenche l'application system de Gaia.

- -

rild

- -

Le processus rild est l'interface du processeur du modem. rild est le démon qui implémente la couche de l'interface radio (Radio Interface Layer ou RIL). C'est un morceau de code propriétaire qui est implémenté par le fournisseur de matériel pour échanger avec le modem matériel. rild permet au code client de se connecter avec un socket UNIX auquel il se lie. Il commence par le code suivant dans le script d'init :

- -
service ril-daemon /system/bin/rild
-    socket rild stream 660 root radio
- -

rilproxy

- -

Dans Firefox OS, le client rild est le processus rilproxy. Il agit comme un simple proxy de transfert d'information entre rild et b2g. Ce proxy est nécessaire comme un détail d'implémentation ; il suffit de dire qu'il est en effet nécessaire. Le code rilproxy est accessible sur GitHub.

- -

mediaserver

- -

Le processus mediaserver contrôle la lecture de l'audio et de la vidéo. Gecko échange avec lui à travers un mécanisme Android de Remote Procedure Call (RPC). Une partie des médias que Gecko peut lire (OGG Vorbis audio, OGG Theora video, et WebM video) est décodée par Gecko et envoyée directement au processus mediaserver. Les autres fichiers média sont décodés par libstagefright, qui est capable d'accéder aux codecs propriétaires et aux encodeurs matériels.

- -
-

Note : Le processus mediaserver est un composant "temporaire" de Firefox OS ; il est là pour nous aider dans notre travail initial de développement. Cependant, il est prévu qu'il disparaisse éventuellement. Toutefois, cela ne devrait pas se produire avant au moins la version 2.0 de Firefox OS.

-
- -

netd

- -

Le processus netd est utilisé pour configurer les interfaces réseau.

- -

wpa_supplicant

- -

Le processus wpa_supplicant est le démon UNIX-style standard qui gère la connectivité avec les points d'accès Wi-Fi.

- -

dbus-daemon

- -

Le processus dbus-daemon implémente D-Bus, un système de bus de messages que Firefox OS utilise pour la communication Bluetooth.

- -

Gecko

- -

Gecko, comme mentionné précédemment, est une exécution de standards web (HTML, CSS, et JavaScript). Il est utilisé pour implémenter tout ce que voit l'utilisateur dans Firefox OS et pour contrôler les interactions avec le matériel du téléphone. Les applications Web connectent le HTML5 au matériel via des APIs Web contrôlées et sécurisées, implémentées dans Gecko. L'API Web fournit un accès informatisé aux fonctionnalités présentes dans le matériel sous-jacent de l'appareil mobile (comme la batterie ou la vibration), ainsi que les données stockées sur, ou disponibles pour, un périphérique (comme le calendrier ou les contacts). Le contenu Web appelle l'API Web accessible depuis HTML5.

- -

Une application consiste en une collection de contenus web connexes HTML5. Pour construire des applications web qui s'exécutent sur des périphériques mobiles Firefox OS, les développeurs assemblent, emballent et distribuent simplement ce contenu web. Lors de l'exécution, ce contenu web est interprété, compilé et rendu dans un navigateur web. Pour plus d'informations sur les applications, voir le App Center.

- -
-

Note : Pour rechercher la base de code Gecko, vous pouvez utiliser http://dxr.mozilla.org. C'est plus "fancy" et cela fournit de bonnes fonctionnalités de référence, mais avec des répertoires limités. Ou vous pouvez essayer le traditionnel http://mxr.mozilla.org, qui regroupe plus de projets de Mozilla.

-
- -

Diagramme d'architecture Gecko

- -

- - - -

Fichiers Gecko en rapport avec Firefox OS

- -

b2g/

- -

Le dossier b2g contient la plupart des fonctions en lien avec Firefox OS.

- -
b2g/chrome/content
- -

Contient les fichiers JavaScript exécutés sur l'application système.

- -
b2g/chrome/content/shell.html
- -

Le point d'entrée dans Gaia — le HTML pour l'application système shell.html arrive dans settings.js et shell.js:

- -
<script type="application/javascript;version=1.8" src="chrome://browser/content/settings.js"> </script>
-<script type="application/javascript;version=1.8" src="chrome://browser/content/shell.js"> </script>
- -

settings.js contient les paramètres par défaut de réglages du système.

- -
b2g/chrome/content/shell.js
- -

shell.js est le premier script à charger dans l'application system de Gaia.

- -

shell.js importe tous les modules requis, enregistre les écouteurs de touches, définit sendCustomEvent et sendChromeEvent pour communiquer avec Gaia et fournit des aides d'installation des webapps : quota indexedDB, RemoteDebugger, clavier auxiliaire et outil d'impression écran.

- -

Mais la fonction la plus importante de shell.js est de lancer l'application system de Gaia, puis remettre l'ensemble du travail de gestion des systèmes à l'application system de Gaia.

- -
let systemAppFrame =
-  document.createElementNS('http://www.w3.org/1999/xhtml', 'html:iframe');
-    ...
-  container.appendChild(systemAppFrame);
- -
b2g/app/b2g.js
- -

Le script contient des paramètres prédéfinis -comme about:config dans un navigateur- et identique à pref.js de Gaia. Ces paramètres peuvent être modifiés depuis l'application Paramètres et peuvent être écrasés avec user.js dans le script de compilation de Gaia.

- -

dom/{API}

- -

Des nouvelles implémentations de l'API (post-b2g) seront placées dans dom/. Des API plus vieilles seront placées dans dom/base, par exemple Navigator.cpp.

- -
dom/apps
- -

.jsm sera chargé — les implementations de l'API .js comme webapp.js install, getSelf, etc.

- -
dom/apps/src/
- -

Toutes les autorisations sont définies dans PermissionsTable.jsm

- -

dom/webidl

- -

WebIDL est le langage utilisé pour définir les APIs web. Pour les attributs supportés, lisez WebIDL_bindings.

- -

hal/gonk

- -

Ce répertoire contient les fichiers liés à la couche de port gonk.

- -

Les fichiers Générés

- -
module/libpref/src/init/all.js
- -

Contient tous les fichiers de configuration.

- -
/system/b2g/ omni.ja and omni.js
- -

Contient le pack de styles pour les ressources de l'appareil.

- -

Traitement des Événements d'entrée

- -

La plupart des actions à l'intérieur de Gecko sont déclenchées par les actions de l'utilisateur. Ces actions sont représentées par des événements d'entrée (tels que les pressions de bouton, touches à un appareil à écran tactile, et ainsi de suite). Ces événements entrent dans le Gecko par la source Implementation de de l'interface nsIAppShell, une interface de Gecko qui est utilisée pour représenter les points principaux d'entrée pour une application de Gecko; c'est-à-dire le pilote du dispositif d'entrée appelle des méthodes sur l'objet nsAppShell qui représente le sous-système de Gecko pour envoyer des événements à l'interface utilisateur.

- -

Par exemple :

- -
void GeckoInputDispatcher::notifyKey(nsecs_t eventTime,
-                                     int32_t deviceId,
-                                     int32_t source,
-                                     uint32_t policyFlags,
-                                     int32_t action,
-                                     int32_t flags,
-                                     int32_t keyCode,
-                                     int32_t scanCode,
-                                     int32_t metaState,
-                                     nsecs_t downTime) {
-  UserInputData data;
-  data.timeMs = nanosecsToMillisecs(eventTime);
-  data.type = UserInputData::KEY_DATA;
-  data.action = action;
-  data.flags = flags;
-  data.metaState = metaState;
-  data.key.keyCode = keyCode;
-  data.key.scanCode = scanCode;
-  {
-    MutexAutoLock lock(mQueueLock);
-    mEventQueue.push(data);
-  }
-  gAppShell->NotifyNativeEvent();
-}
- -

Ces événements viennent du système standard input_event de Linux. Firefox OS utilise une couche d'abstraction légère, celle-ci offre quelques fonctionnalités intéressantes comme le filtrage des événements. Vous pouvez voir le code qui crée des événements d'entrée dans la méthode EventHub::getEvents() dans widget/gonk/libui/EventHub.cpp.

- -

Une fois que les événements sont reçus par Gecko, ils sont expédiés dans le DOM par nsAppShell:

- -
static nsEventStatus sendKeyEventWithMsg(uint32_t keyCode,
-                                         uint32_t msg,
-                                         uint64_t timeMs,
-                                         uint32_t flags) {
-    nsKeyEvent event(true, msg, NULL);
-    event.keyCode = keyCode;
-    event.location = nsIDOMKeyEvent::DOM_KEY_LOCATION_MOBILE;
-    event.time = timeMs;
-    event.flags |= flags;
-    return nsWindow::DispatchInputEvent(event);
-}
-
- -

Après cela, les événements sont soit consommés par Gecko lui-même ou sont expédiés à des applications Web en tant qu' événements DOM pour un traitement ultérieur.

- -

Graphisme

- -

Au niveau le plus bas, Gecko utilise OpenGL ES 2.0 pour dessiner un contexte GL qui enveloppe les tampons de trame de matériel. Cela se fait dans l'implémentation Gonk de nsWindow par un code similaire à ceci :

- -
gNativeWindow = new android::FramebufferNativeWindow();
-sGLContext = GLContextProvider::CreateForWindow(this);
- -

La class FramebufferNativeWindow est apportée directement d'Android; voir FramebufferNativeWindow.cpp. Cette dernière utilise l'API gralloc API pour accéder au pilote graphique dans l'optique de représenter les tampons du dispositif de framebuffer dans la mémoire.

- -

Gecko utilise son système de Couches au contenu composite élaboré à l'écran. En résumé, voici ce qui se passe :

- -
    -
  1. Gecko dessine des régions distinctes de pages dans des tampons de mémoire. Parfois, ces tampons sont dans la mémoire système; d'autres fois, elles sont des textures mappées dans l'espace d'adresse de Gecko, ce qui signifie que Gecko dessine directement dans la mémoire vidéo. Cela se fait habituellement dans la méthode BasicThebesLayer::PaintThebes().
  2. -
  3. Gecko regroupe alors toutes ces textures à l'écran utilisant des commandes OpenGL. Cette composition se produit dans ThebesLayerOGL::RenderTo().
  4. -
- -

Les détails sur la façon dont Gecko gère le rendu du contenu web sortent du cadre de ce document.

- -

Couche d'Abstraction Matérielle (HAL )

- -

La couche d'abstraction matérielle Gecko est l'une des couches de portage de Gecko. Il gère l'accès de bas niveau aux interfaces du système à travers de multiples plate-formes utilisant une API C++ qui est accessible aux plus hauts niveaux de Gecko. Ces API sont mises en œuvre selon la plate-forme à l'intérieur du Gecko HAL (Hardware Abstraction Layer) lui-même. Cette couche d'abstraction de matériel n'est pas exposée directement au code JavaScript dans Gecko --- cette partie de l'interaction est assurée par les API Web.

- -

Regardons le processus au haut niveau. Quand un utilisateur effectue une demande pour utiliser une fonction du téléphone (comme composer un numéro, accéder à un réseau Wi-Fi local, ou se connecter via Bluetooth), toutes les couches de la pile de technologie Firefox OS sont impliquées dans la réalisation de la demande. Les applications et le contenu web dans la couche Gaia soumettent des demandes d'accès à l'appareil sous-jacent via des appels d'API Web (appelées à partir de l'intérieur de fonctions HTML5), qui sont mis en œuvre dans Gecko. Gecko, à son tour, soumet la demande à Link. Une seule demande de Gecko peut déclencher une série complexe d'opérations, lancées et gérées par Gonk, dans le téléphone mobile.

- -

Comment fonctionne le HAL

- -

Prenons l'API Vibration comme exemple. Le Gecko HAL pour cette API est défini dans hal/Hal.h. En substance (simplification de la signature de la méthode pour des raisons de clarté), vous avez cette fonction :

- -
void Vibrate(const nsTArray<uint32> &pattern);
- -

Ceci est la fonction appelée par le code Gecko pour activer le dispositif de vibration en fonction de la configuration spécifiée; une fonction correspondante existe pour annuler toute vibration continue. La mise en œuvre de ce procédé Gonk se trouve dans hal/gonk/GonkHal.cpp:

- -
void Vibrate(const nsTArray<uint32_t> &pattern) {
-  EnsureVibratorThreadInitialized();
-  sVibratorRunnable->Vibrate(pattern);
-}
-
- -

Ce code envoie la demande pour faire vibrer le dispositif à un autre fil d'exécution, qui est mis en œuvre dans VibratorRunnable::Run(). La boucle principale de ce fil ressemble à ceci :

- -
while (!mShuttingDown) {
-  if (mIndex < mPattern.Length()) {
-    uint32_t duration = mPattern[mIndex];
-    if (mIndex % 2 == 0) {
-      vibrator_on(duration);
-    }
-    mIndex++;
-    mMonitor.Wait(PR_MillisecondsToInterval(duration));
-  }
-  else {
-    mMonitor.Wait();
-  }
-}
-
- -

vibrator_on() est l'API Gonk HAL (couche d'abstraction matérielle) qui tourne sur le moteur vibrant. En interne, cette méthode envoie un message au pilote du noyau en écrivant une valeur à un objet de noyau utilisant sysfs.

- -

Alternatives aux implémentations de l'API HAL

- -

Les APIs HAL Gecko sont prises en charge sur toutes les plate-formes. Quand Gecko est compilé pour une plate-forme qui ne dispose pas d'une interface de moteurs vibrants (comme un ordinateur de bureau), alors une alternative à l'implémentation de l'API HAL est utilisée. Pour les vibrations, cela est mis en œuvre dans hal/fallback/FallbackVibration.cpp.

- -
void Vibrate(const nsTArray<uint32_t> &pattern) {
-}
- -

Implémentations Sandbox

- -

Parce que la plupart des contenus web fonctionne dans les processus de contenu avec des privilèges faibles, nous ne pouvons pas assumer que ces processus ont les privilèges nécessaires pour être en mesure, par exemple, d'allumer et éteindre le moteur de vibration. De plus, nous voulons avoir un emplacement central pour le traitement des conditions de course potentielles. Dans le Gecko HAL, cela se fait à travers une mise en œuvre «sandbox» de la HAL. Cette mise en œuvre sandbox proxie simplement des demandes formulées par des procédés de contenu et les transmet au processus du "serveur Gecko". Les demandes de proxy sont envoyés en utilisant IPDL.

- -

Pour les vibrations, cela est géré par la fonction Vibrate() implémenté dans hal/sandbox/SandboxHal.cpp:

- -
void Vibrate(const nsTArray<uint32_t>& pattern, const WindowIdentifier &id) {
-  AutoInfallibleTArray<uint32_t, 8> p(pattern);
-
-  WindowIdentifier newID(id);
-  newID.AppendProcessID();
-  Hal()->SendVibrate(p, newID.AsArray(), GetTabChildFrom(newID.GetWindow()));
-}
- -

Cela envoie un message défini par l'interface PHal, décrit par IPDL dans hal/sandbox/PHal.ipdl. Cette méthode est décrite plus ou moins comme suit :

- -
Vibrate(uint32_t[] pattern);
- -

Le destinataire de ce message est la méthode HalParent::RecvVibrate() dans hal/sandbox/SandboxHal.cpp, qui ressemble à ceci :

- -
virtual bool RecvVibrate(const InfallibleTArray<unsigned int>& pattern,
-            const InfallibleTArray<uint64_t> &id,
-            PBrowserParent *browserParent) MOZ_OVERRIDE {
-
-  hal::Vibrate(pattern, newID);
-  return true;
-}
- -

Ceci omet certains détails qui ne sont pas appropriés à cette documentation; Cependant, il montre comment le message progresse d'un contenu de processus de Gecko à Gonk, puis à la mise en œuvre du HAL de Gonk Vibrate() et finalement au pilote de vibration.

- -

Les API DOM

- -

Les interfaces du DOM sont, en substance, comment le contenu Web communique avec Gecko. Ils sont plus impliqués que cela et si vous êtes intéressés par des détails supplémentaires, vous pouvez lire la documentation sur le DOM. Les interfaces du DOM sont définies en utilisant IDL, qui comprend aussi bien l'interface de fonction étrangère (FFI) que le modèle d'objet (OM) entre le JavaScript et C++.

- -

L'API de vibration est exposée au contenu web à travers une interface IDL, qui est prévue dans nsIDOMNavigator.idl:

- -
[implicit_jscontext] void mozVibrate(in jsval aPattern);
- -

L'argument jsval indique que mozVibrate() (qui est notre implémentation du fournisseur préfixée de cette spécification de vibrations non-finalisé) accepte en entrée toute valeur JavaScript. Le compilateur IDL, xpidl, génère une interface C++ qui est ensuite mise en œuvre par la classe Navigator dans Navigator.cpp.

- -
NS_IMETHODIMP Navigator::MozVibrate(const jsval& aPattern, JSContext* cx) {
-  // ...
-  hal::Vibrate(pattern);
-  return NS_OK;
-}
- -

Il y a beaucoup plus de code dans cette méthode que ce que vous voyez ici, mais ce n'est pas important pour le but de cette documentation. Le fait est que l'appel à hal::Vibrate() le contrôle de transferts du DOM au HAL de Gecko. De là, nous entrons dans la mise en œuvre du HAL discutée dans la section précédente et nous frayons un chemin vers le pilote graphique. Par-dessus tout, la mise en œuvre du DOM ne se soucie pas du tout sur quelle plate-forme il est exécuté (Gonk, Windows, OS X, ou autre chose). Il ne se soucie pas non-plus si le code fonctionne dans un processus de contenu ou dans le processus serveur de Gecko. Ces détails sont tous laissés à des niveaux inférieurs du système à traiter.

- -

L'API de vibration est une API très simple, ce qui en fait un bon exemple. L'API SMS est un exemple d'une API plus complexe qui utilise sa propre couche "d'accès distant" reliant les processus de contenu au serveur.

- -

Couche d'Interface Radio (RIL)

- -

La Couche d'Interface Radio, ou RIL pour Radio Interface Layer en Anglais a été mentionnée dans la section L'architecture des processus de l'espace utilisateur . Cette section examinera un peu plus de détail la manière dont les différents éléments de cette couche interagissent.

- -

Les principaux composants impliqués dans la RIL sont :

- -
-
rild
-
Chargé de communiquer avec le firmware modem propriétaire.
-
rilproxy
-
Qui proxie les messages entre rild et Gecko (lequel est mis en œuvre dans le processus de b2g). Ceci résout le problème d'autorisation qui se pose lorsque vous essayez de parler à rild directement, lorsque rild ne peut être communiquée à l'intérieur du groupe de radio.
-
b2g
-
- -

Ce processus, également connu comme le procédé chrome, implémente Gecko. Les parties de celui-ci qui se rapportent à la couche d'interface radio sont dom/system/gonk/ril_worker.js qui mettent en œuvre un thread (fil) de travail qui communique avec rild par le biais de rilproxy et implémentent la machine d'état de la radio; et l' nsIRadioInterfaceLayer interface, qui est le service principal XPCOM du thread qui agit principalement comme un échange de messages entre le thread ril_worker.js et divers autres composants Gecko, y compris le processus contenu Gecko.

- -
-
Processus du contenu de Gecko
-
- -

Au sein du processus du contenu de Gecko, l' nsIRILContentHelper interface fournit un service de XPCOM qui laisse le code mettant en œuvre les parties de DOM, comme la Téléphonie et les APIs de SMS, communiquer avec l'interface de la radio, qui est dans le processus chrome., communiquer avec l'interface de la radio, qui est dans le processus chrome.

- -

Exemple: Communication du rild au DOM

- -

Jetons un œil à un exemple de la façon dont les parties de niveau inférieur du système communiquent avec le code DOM. Lorsque le modem reçoit un appel entrant, il notifie au rild en utilisant un mécanisme propriétaire. rild prépare alors un message pour son client selon le protocole «ouvert», qui est décrit dans ril.h. Dans le cas d'un appel entrant, un message RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED est généré et envoyé par rild à rilproxy.

- -

rilproxy, implémenté dans le rilproxy.c, reçoit ce message dans sa boucle principale, qui sonde sa connexion à rild en utilisant le code suivant :

- -
ret = read(rilproxy_rw, data, 1024);
-
-if(ret > 0) {
-  writeToSocket(rild_rw, data, ret);
-}
- -

Une fois le message reçu de rild, il est ensuite expédié le long de Gecko sur la prise qui relie rilproxy Gecko. Gecko reçoit le message transmis sur son IPC thread:

- -
int ret = read(fd, mIncoming->Data, 1024);
-// ... gestion des erreurs ...
-mIncoming->mSize = ret;
-sConsumer->MessageReceived(mIncoming.forget());
-
- -

Le consommateur de ces messages est SystemWorkerManager, qui reconditionne les messages et les envoie au ril_worker.js thread qui implémente la machine d'état RIL; ceci est fait dans la méthode RILReceiver::MessageReceived() :

- -
virtual void MessageReceived(RilRawData *aMessage) {
-  nsRefPtr<DispatchRILEvent> dre(new DispatchRILEvent(aMessage));
-  mDispatcher->PostTask(dre);
-}
- -

La tâche postée à ce thread appelle à son tour la fonction onRILMessage(), qui est implémentée en JavaScript. Ceci est fait en utilisant la fonction API JavaScript JS_CallFunctionName():

- -
return JS_CallFunctionName(aCx, obj, "onRILMessage", NS_ARRAY_LENGTH(argv),
-                           argv, argv);
- -

onRILMessage() est mis en œuvre dans dom/system/gonk/ril_worker.js, qui traite le message octets et les découpe en parcelles. Chaque colis complet est ensuite envoyé à des méthodes de gestionnaire individuelles, le cas échéant:

- -
handleParcel: function handleParcel(request_type, length) {
-  let method = this[request_type];
-  if (typeof method == "function") {
-    if (DEBUG) debug("Handling parcel as " + method.name);
-    method.call(this, length);
-  }
-}
-
- -

Ce code fonctionne en récupérant le type de demande de l'objet, en s'assurant qu'il soit défini comme une fonction dans le code JavaScript, appelant ensuite la méthode. Depuis ril_worker.js met en œuvre chaque type de demande dans une méthode donnée, le même nom que le type de demande, ce qui est très simple.

- -

Dans notre exemple, RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED, le code suivant est appelé:

- -
RIL[UNSOLICITED_RESPONSE_CALL_STATE_CHANGED] = function UNSOLICITED_RESPONSE_CALL_STATE_CHANGED() {
-  this.getCurrentCalls();
-};
- -

Comme vous pouvez le voir dans le code ci-dessus, quand une notification est reçue indiquant que le call state a changé, la state machine récupère le call state courant en appelant la méthode getCurrentCall():

- -
getCurrentCalls: function getCurrentCalls() {
-  Buf.simpleRequest(REQUEST_GET_CURRENT_CALLS);
-}
- -

Cela envoie une request back à rild pour demander l'état de tous les appels actifs à l'instant. The request flows back along a similar path the RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED message followed, but in the opposite direction (that is, from ril_worker.js to SystemWorkerManager to Ril.cpp, then rilproxy and finally to the rild socket). rild then responds in kind, back along the same path, eventually arriving in ril_worker.js's handler for the REQUEST_GET_CURRENT_CALLS message. Et la communication ainsi bidirectionnelle arrive.

- -

Le call state est alors traité et comparé au précédent état; S'il y a un changement d'état, ril_worker.js notifie le service nsIRadioInterfaceLayer sur le thread principal:

- -
_handleChangedCallState: function _handleChangedCallState(changedCall) {
-  let message = {type: "callStateChange",
-                 call: changedCall};
-  this.sendDOMMessage(message);
-}
- -

nsIRadioInterfaceLayer est implémenté dans dom/system/gonk/RadioInterfaceLayer.js; le message est reçu par la méthode onmessage():

- -
 onmessage: function onmessage(event) {
-   let message = event.data;
-   debug("Received message from worker: " + JSON.stringify(message));
-   switch (message.type) {
-     case "callStateChange":
-       // This one will handle its own notifications.
-       this.handleCallStateChange(message.call);
-       break;
-   ...
-
- -

Tout ce qu'il fait est d'expédier le message pour le processus de contenu en utilisant le Parent Process Message Manager (PPMM):

- -
handleCallStateChange: function handleCallStateChange(call) {
-  [some internal state updating]
-  ppmm.sendAsyncMessage("RIL:CallStateChanged", call);
-}
- -

Dans le processus de contenu, le message est reçu par la méthode receiveMessage() dans le service nsIRILContentHelper , depuis le Child Process Message Manager (CPMM):

- -
receiveMessage: function receiveMessage(msg) {
-  let request;
-  debug("Received message '" + msg.name + "': " + JSON.stringify(msg.json));
-  switch (msg.name) {
-    case "RIL:CallStateChanged":
-      this._deliverTelephonyCallback("callStateChanged",
-                                     [msg.json.callIndex, msg.json.state,
-                                     msg.json.number, msg.json.isActive]);
-      break;
- -

Ce dernier, à son tour, appelle les méthodes nsIRILTelephonyCallback.callStateChanged() sur chaque objet telephony callback enregistré. Chaque application web qui accède à l'API window.navigator.mozTelephony a enregistré un tel objet callback que propage les événements au code JavaScript dans l'application web, either as un changement d'état d'un objet appel existant ou un nouvel événement appel entrant.

- -
NS_IMETHODIMP Telephony::CallStateChanged(PRUint32 aCallIndex, PRUint16 aCallState,
-                                          const nsAString& aNumber, bool aIsActive) {
-  [...]
-
-  if (modifiedCall) {
-    // Change state.
-    modifiedCall->ChangeState(aCallState);
-
-    // See if this should replace our current active call.
-    if (aIsActive) {
-      mActiveCall = modifiedCall;
-    }
-
-    return NS_OK;
-  }
-
-  nsRefPtr<TelephonyCall> call =
-          TelephonyCall::Create(this, aNumber, aCallState, aCallIndex);
-  nsRefPtr<CallEvent> event = CallEvent::Create(call);
-  nsresult rv = event->Dispatch(ToIDOMEventTarget(), NS_LITERAL_STRING("incoming"));
-  NS_ENSURE_SUCCESS(rv, rv);
-  return NS_OK;
-}
- -

Les applications peuvent recevoir ces évenements et mettre à jour leur interface utilisateur etc:

- -
handleEvent: function fm_handleEvent(evt) {
-  switch (evt.call.state) {
-    case 'connected':
-      this.connected();
-      break;
-    case 'disconnected':
-      this.disconnected();
-      break;
-    default:
-      break;
-  }
-}
- -

Jetez un coup d'œil à la mise en œuvre de handleEvent(), dans l'application de demande de de composeur de numéro comme exemple étendu

- -

3G data

- -

Il y a un message RIL qui amorce(introduit) "un appel de données" au service cellulaire; ceci permet le mode de transfert de données dans le modem. Cet appel de données finit par créer et activer un Point-to-Point Protocol (PPP) le dispositif d'interface dans le noyau Linux qui peut être configuré utilisant les interfaces habituelles.

- -
-

Note: Cette section doit être écrite.

-
- -

API de DOM liées

- -

Cette section inscrit les API de DOM qui sont relatées(liées) aux communications RIL :

- - - -

Wi-Fi

- -

L'arrière-plan Wi-Fi pour Firefox OS utilise simplement wpa_supplicant pour faire la plupart du travail. Cela signifie que le travail principal de l'arrière-plan doit simplement gérer le suppliant et faire quelques tâches auxiliaires comme le chargement du conducteur Wi-Fi et de la permission ou la mise hors de service de l'interface de réseau. En substance, cela signifie que l'arrière-plan est une machine d'état, avec les états après l'état du suppliant.

- -
-

Note: Une grande partie du truc(de la substance) intéressant qui arrive dans le Wi-Fi dépend profondément de changements possibles d'état du processus de wpa_supplicant.

-
- -

La mise en œuvre du composant Wi-Fi est cassée dans deux fichiers:

- -
-
dom/wifi/DOMWifiManager.js
-
Met en œuvre l'API qui s'est exposée au contenu Web, comme défini dans nsIWifi.idl.
-
dom/wifi/WifiWorker.js
-
Met en œuvre la machine d'état et le code qui conduit le suppliant.
-
- -

Ces deux fichiers(dossiers) communiquent entre eux par l'utilisation du manager de message. L'arrière-plan écoute pour des messages demandant certaines actions, comme "l'associé" et répond par un message quand l'action demandée a été achevée.

- -

Le côté de DOM écoute pour les méthodes de réponse aussi bien que plusieurs messages d'événement qui indiquent des changements d'état et des mises à jour de l'information.

- -
-

Note: N'importe quelle API de DOM synchrones est mise en œuvre par des données mises en antémémoire sur ce côté de la conduite. Des messages synchrones sont évités quand c'est possible.

-
- -

WifiWorker.js

- -

Ce fichier met en œuvre la logique principale derrière l'interface Wi-Fi. Il fonctionne dans le processus chromé (dans le multi-processus construit) et est instancié par le SystemWorkerManager. Le fichier est généralement cassé dans deux sections : une fonction anonyme géante et WifiWorker (et son prototype). La fonction anonyme finit étant le WifiManager en fournissant une API locale, y compris des notifications pour des événements comme la connexion au suppliant et les résultats de feuilletage étant disponibles. En général, il contient peu de logique et laisse son consommateur unique contrôler ses actions tandis qu'il répond simplement par les informations demandées et contrôle les détails du rapport(de la connexion) avec le suppliant.

- -

L'objet de WifiWorker est assis entre le WifiManager et le DOM. Il réagit aux événements et les transfert à DOM; à son tour, il reçoit des requêtes de DOM et exécute les actions appropriées sur le suppliant. Il maintient aussi des informations d'état sur le suppliant et ce qu'il doit faire ensuite.

- -

DOMWifiManager.js

- -

Cela met en œuvre l'API de DOM, transmettant des messages dans les deux sens entre des interlocuteurs et le travailleur Wi-Fi réel. Il y a très peu de logique impliquée.

- -
-

Note: Pour éviter des messages synchrones au processus chromé, le Manager Wi-Fi a vraiment besoin du cache de l'état basé sur l'événement reçu.

-
- -

Il y a un message synchrone seul, qui est envoyé à temps à l'API DOM est instanciée, pour obtenir l'état actuel du suppliant.

- -

DHCP

- -

DHCP et DNS sont traités par dhcpcd, la norme Linux DHCP le client. Cependant, il ne peut pas réagir quand la connexion de réseau est perdue. À cause de ceci, Firefox OS tue et reprend dhcpcd chaque fois il connecte à un réseau sans fil donné.

- -

Dhcpcd est aussi responsable de mettre le parcours par défaut; nous appelons dans le gestionnaire de réseau pour parler au noyau de serveurs DNS.

- -

Gestionnaire de réseau

- -

Le Gestionnaire de réseau configure des interfaces de réseau ouvertes par le 3G des données et des composants Wi-Fi.

- -
-

Note: Cela doit être écrit.

-
- -

Processus et threads

- -

Firefox OS utilise des threads POSIX pour mettre en œuvre tous les threads d'application, ceci inclut le fil conducteur de chaque travailleur d'application aussi bien que Web et des threads d'aide. Des valeurs agréables sont utilisées priorisent au processus et l'exécution de thread comptant ainsi sur le planificateur de noyau Linux standard. Selon le statut d'un processus nous l'assignons un niveau agréable et différent. Nous avons actuellement 7 niveaux :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Traitez des niveaux prioritaires
PrioritéNiceUtilité
MASTER0Processus de b2g principal
FOREGROUND_HIGH0Applications tenant une UC wakelock
FOREGROUND1Applications de premier plan
FOREGROUND_KEYBOARD1Application de clavier
BACKGROUND_PERCEIVABLE7Applications de fond jouant audio
BACKGROUND_HOMESCREEN18Application d'écran d'accueil
BACKGROUND18Toutes les autres applications fonctionnant en arrière-plan
- -

Quelques niveaux partagent les mêmes valeurs agréables, c'est que ces niveaux diffèrent actuellement dans la façon qu'ils sont traités par le tueur de mémoire insuffisante. Toutes les priorités peuvent être ajustées à construisent le temps via des préférences; les entrées pertinentes peuvent être trouvées dans le fichier de b2g/app/b2g.js.

- -
-

Note: Pour plus d'informations sur le tueur de mémoire insuffisante et comment Firefox OS gère des situations de mémoire basses, lire Mémoire insuffisante la gestion sur Firefox OS.

-
- -

Dans un processus le thread conducteur hérite la valeur agréable du processus tandis que l'on donne aux fils de travailleur Web une valeur agréable qui est un point plus haut que le thread conducteur fonctionnant ainsi à la priorité inférieure. Ceci est fait pour empêcher des travailleurs intensifs de l'UC d'excessivement ralentir le thread conducteur. Les priorités de processus sont changées quand un événement majeur arrive comme une demande est envoyée dans le contexte ou le premier plan, une nouvelle demande est mise en marche ou une application existante saisit une UC wakelock. Quand une priorité de processus est ajustée, les priorités de tous ses fils seront aussi ajustées en conséquence.

- -
-

Note: Ces groupes ne sont pas actuellement utilisés pour la gestion de ressource comme ils ont prouvé incertains sur certains dispositifs et des noyaux.

-
diff --git a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/browser/index.html b/files/fr/archive/b2g_os/platform/gaia/gaia_apps/browser/index.html deleted file mode 100644 index 2d8ff1001d..0000000000 --- a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/browser/index.html +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: Navigateur -slug: Archive/B2G_OS/Platform/Gaia/Gaia_apps/Browser -tags: - - Apps - - Firefox OS - - Gaia - - Guide - - Navigateur -translation_of: Archive/B2G_OS/Platform/Gaia/Gaia_apps/Browser ---- -
-

L'application Navigateur (qui fait maintenant partie de System) offre des fonctionnalités de navigation lorsque cela est nécessaire — cela comprend la navigation sur des pages, la recherche et les marque-pages. Cet article explique comment les fonctionnalités de base de l'application Navigateur fonctionnent, et comment elle s'intègre dans un système plus vaste.

-
- -

Comme Gaia est construit pour s'exécuter au-dessus de Gecko, il a été possible de concevoir un Navigateur Système/application Navigateur pour naviguer sur des pages web classiques, basé sur cette instance Gecko. Cela est accessible par l'intermédiaire de l'API mozBrowser.

- -
-

Note : Depuis Firefox OS 2.1, l'application Navigateur fait partie de System. Cela signifie que la navigation web peut se faire soit en cliquant sur l'icône Navigateur pour ouvrir l'application, soit en utilisant la fonctionnalité de navigation et de recherche universelle. Grâce à l'expérience utilisateur Haida, l'application et les onglets de navigation sont alors unifiés pour une expérience commune et sont présents dans le gestionnaire de tâches ainsi que dans la vue des miniatures (pour la navigation latérale).

-
- - - -

Quand un utilisateur Firefox OS marque une page web pour qu'elle apparaisse sur l'écran d'accueil, cette page web s'ouvrira dans le Navigateur Système et non dans l'application Navigateur. Il comporte dans la partie inférieure une barre d'outils contenant les fonctions génériques reculer/avancer/actualiser. Dans Gaia, cela est appelé le Navigateur Chrome ou wrapper. Vous pouvez le voir en action du côté droit de l'image suivante.

- -

A diagram showing that when a web page is opened in the system browser, it is given a toolbar.

- -

Si vous souhaitez que votre page web dispose toujours des fonctions reculer/avancer/actualiser, vous pouvez ajouter la ligne suivante dans le manifeste de l'application pour activer le Navigateur Chrome.

- -
declare { chrome: { navigation: true } }
- -
-

Note : La barre d'outils du Navigateur Chrome a une incidence sur la hauteur du contenu, il est donc nécessaire de la prendre en compte pour la mise en page de vos pages web.

-
- -

Le flux de code

- -

Lors de l'ouverture d'une nouvelle page web dans Firefox OS, la séquence des appels est

- -
Gecko > WrapperFactory > Window Manager > AppWindow > BrowserFrame
- -

Les wrappers héritant de system/js/wrapper_factory recevront l'événement mozbrowseropenwindow dans le cas d'une page web en marque-page.

- -

Dans la section handleEvent, le gestionnaire va vérifier l'événement pour déterminer si la page web doit être ouverte en tant qu'application ou dans le navigateur chrome.

- -

Enfin, launchWrapper est appelée pour lancer la fenêtre correspondante.

- - - -

Avec la nouvelle barre de navigation et de recherche, les utilisateurs peuvent accéder à leurs favoris, saisir une URL, ou découvrir de nouvelles applications depuis n'importe où dans Firefox OS. La barre de recherche se trouve en haut de l'écran et les utilisateurs peuvent juste toucher l'écran ou faire glisser le doigt dessus pour l'ouvrir.

- -

Voyez cela comme une combinaison de l'Awesome Bar du navigateur et de la recherche adaptative d'applications de l'écran d'accueil. Comme Firefox OS utilise des applications web, lorsque vous trouvez ce que vous voulez, même s'il s'agit d'une nouvelle application, il l'ouvre directement. Vous n'avez pas besoin d'installer quoi que ce soit, parce que tout est de type web et instantané.

- -

Application Navigateur

- -

Le Navigateur est une application web certifiée qui procure une expérience de navigation web générale. La fonction principale se trouve dans apps/browser/js/browser.js :

- -
var Browser = {
-  init: function browser_init() {
-    this.getAllElements();
-      ...
-    BrowserDB.init((function() {
-      ...
-    }
-  }
-};
-
-window.addEventListener('load', function browserOnLoad(evt) {
-  window.removeEventListener('load', browserOnLoad);
-  Browser.init();
-});
- -

Le Navigateur appellera sa fonction init() pendant le chargement du DOM.

- -
getAllElements: function browser_getAllElements() {
-  var elementIDs = [
-    'toolbar—start', ... 'danger—dialog'];
-
-  // Loop and add element with camel style name to Modal Dialog attribute.
-  elementIDs.forEach(function createElementRef(name) {
-    this[this.toCamelCase(name)] = document.getElementById(name);
-  }, this);
-},
- -

La fonction getAllElements est utilisée pour obtenir tous les gestionnaires d'élément camelCase, après quoi apps/browser/js/browser_db.js est appelée pour se préparer à l'ajout du moteur de recherche par défaut et des marque-pages.

- -

Marque-pages

- -

À partir de Firefox OS 2.0, apps/bookmark est utilisé pour gérer les activités d'enregistrement/suppression de marque-pages.

- -

La partie la plus intéressante, apps/bookmark/webapp.manifest, ressemble à ceci :

- -
"activities": {
-  "save—bookmark": {
-    "filters": {
-      "type": "url",
-      "url": { "required":true, "pattern":"https?:.{1,16384}" }
-    },
-    "disposition": "inline",
-    "href": "/save.html",
-    "returnValue": true
-  },
-  "remove—bookmark": {
-    "filters": {
-      "type": "url",
-      "url": { "required":true, "pattern":"https?:.{1,16384}" }
-    },
-    "disposition": "inline",
-    "href": "/remove.html",
-    "returnValue": true
-  }
-},
- -

Comme indiqué plus haut, l'activité est gérée par save.html et remove.html. Les deux opérations sont prises en charge par apps/bookmark/js/activity_handler.js:

- -
var ActivityHandler = {
-  'save—bookmark': function ah_save(activity) {
-  },
-
-  'remove—bookmark': function ah_remove(activity) {
-  }
-};
-
-navigator.mozSetMessageHandler('activity', function onActivity(activity) {
-  var name = activity.source.name;
-  switch (name) {
-    case 'save—bookmark':
-    case 'remove—bookmark':
-      if (activity.source.data.type === 'url') {
-        ActivityHandler[name](activity);
-      }
-    ...
-  }
-}
- -

Quand le gestionnaire de message en écoute navigator.mozSetMessageHandler('activity') réceptionne les activités save-bookmark ou remove-bookmark, la fonction ActivityHandler est appelée pour gérer les opérations correspondantes.

diff --git a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/index.html b/files/fr/archive/b2g_os/platform/gaia/gaia_apps/index.html deleted file mode 100644 index 6ac3ce3e51..0000000000 --- a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Applications Gaia -slug: Archive/B2G_OS/Platform/Gaia/Gaia_apps -tags: - - Applications - - Architecture - - Firefox - - Gaia - - OS -translation_of: Archive/B2G_OS/Platform/Gaia/Gaia_apps ---- -
-

Gaia est l'interface utilisateur de Firefox OS, elle contient la fonction d'administration du système et la suite d'applications par défaut embarquée avec les appareils Firefox OS. La totalité du code source de Gaia — même le système et les claviers IMEs (Input Method Editors) — est entièrement implémentée avec HTML5 (HTML + CSS + Javascript) & Open WebAPIs. Cette série de documents contient les informations sur comment chacune des applications disponibles par défaut dans Gaia fonctionne.

-
- -

Catégories des fonctionnalités Gaia

- -

 Les différentes applications à l'intérieur de Gaia peuvent être grossièrement classées dans les groupes listés ci-dessous.

- -
-

Note: de nombreuses pages référencées afin d'apporter plus d'informations sur le fonctionnement des applications sont des pages README venant du dépôt Github Gaia. Ceci s'explique par le fait que de nombreuses applications ont des cycles de développement rapides et sont donc sujettes à de fréquentes (souvent journalières) modifications. Il serait alors peu censé d'essayer de garder les pages MDN à jour avec ces changements fréquents. Les pages README sont actuellement les sources d'informations les plus précises et les plus fiables.

-
- -

Plate-forme

- -

Inclut les applications Système (system), Paramètres (settings), Écran de verrouillage (lockscreen), scripts de construction (build script) et Bluetooth.

- -

- -

Applications de la plate-forme: explication détaillée

- -
-
Système
-
L'application Système est la première application web chargée par Gecko lors de la procédure de démarrage de Firefox OS. Elle assume de nombreuses responsabilités qui sont généralement nécessaires pour utiliser le système et n'est donc pas prise en charge, elle-même, par d'autres applications web.
-
Navigateur
-
L'application Navigateur (qui fait maintenant partie de l'application Système) fournit des fonctionnalités semblables à un navigateur lorsque cela est nécessaire — cela inclut la navigation entre les pages, la recherche et les marque-pages.
-
Gestion des fenêtres
-
La fonctionnalité de gestion des fenêtres de Firefox OS —  incluant le cycle de vie et l'interaction d'une application, les notifications, les animations et beaucoup plus —  est gérée par une partie spécifique de l'application Système. Cet article étudie la Gestion des Fenêtres de Firefox OS en détails.
-
Paramètres
-
L'application Paramètres permet aux utilisateurs de Firefox OS de configurer les paramètres de leur appareil. Elle permet également de répondre aux appels d'activités (Web activités avec le nom configure), ce qui permet à d'autres applications d'être renvoyées vers différents panneaux à l'intérieur de l'application Paramètres, afin d'enrichir les possibilités de paramétrage (par exemple en montrant le panneau des paramètres du Wi-Fi si une connexion Internet est disponible).
-
- -

Communication

- -

Inclut les applications Téléphone (dialer), Contacts (contact), Messages (sms) et FTU (First Time Use).

- -

- -

Applications de communication: explication détaillée

- -

TBD

- -

Productivité

- -

Inclut les applications Courriel (email), Agenda (calendar) et Horloge (clock).

- -

- -

Applications de productivité: explication détaillée

- -
-
Agenda
-
L'application Agenda est incluse par défaut dans Firefox OS.
-
Horloge
-
L'application Horloge, présente par défaut dans Firefox OS, inclut les fonctionnalités d'alarme, de minuteur et de chronomètre.
-
Courriel
-
L'application de Gaia permettant d'envoyer et de recevoir des courriels.
-
- -

Média

- -

Inclut les applications Photo (camera), Galerie (gallery), Musique (music) et Vidéo (video) et quelques fonctions liées aux médias telles que les DRM et fonds d'écran (wallpaper).

- -

- -

Applications média: explication détaillée

- -
-
Vidéo
-
L'application Vidéo est une simple application de lecture de vidéos qui jouera les vidéos présentes sur l'espace de stockage des médias de votre appareil Firefox OS.
-
Photo
-
L'application Photo permet aux utilisateurs de Firefox OS d'enregistrer et de gérer les vidéos et photos venant de l'appareil photo. Elle permet également de gérer les vidéos et photos qui répondent aux Web activités du type pick, c'est à dire venant des autres applications voulant obtenir un média utilisant la fonctionnalité de Caméra.
-
- -

Autres fonctionnalités Gaia

- -

 En plus de ces fonctions, il y a plusieurs autres fonctionnalités majeures telles que le navigateur, l'écran d'accueil, le Marketplace, le framework de test, le lecteur de PDF et le gestionnaire d'applications qui sont développées en parallèle de Gaia.

- -
-
pdf.js
-
pdf.js est un lecteur PDF basé sur HTML5 utilisé par Gaia. Notez que le code pour pdf.js est maintenu dans un dépôt séparé, en dehors de Gaia.
-
diff --git "a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/param\303\250tres/index.html" "b/files/fr/archive/b2g_os/platform/gaia/gaia_apps/param\303\250tres/index.html" deleted file mode 100644 index 250917fdfe..0000000000 --- "a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/param\303\250tres/index.html" +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Paramètres -slug: Archive/B2G_OS/Platform/Gaia/Gaia_apps/Paramètres -tags: - - Applications - - B2G - - Firefox OS - - Gaia - - JavaScript - - Paramètres -translation_of: Archive/B2G_OS/Platform/Gaia/Gaia_apps/Settings ---- -
-

L'application Paramètres permet aux utilisateurs de configurer les paramètres de leur appareil et répond aux activités entrantes qui autorisent les développeurs à afficher des vues spécifiques de paramètres (par exemple afficher le panneau des paramètres wifi si aucune connexion réseau n'est disponible). Cet article explique comment cela fonctionne.

-
- -

mozSettings API et association de données

- -

Techniquement, l'application Paramètres est l'interface utilisateur qui leur fournit l'accès certifié à l'API window.navigator.mozSettings.

- -

L'application Paramètres gère automatiquement les opérations de paramétrage basique comme les champs d'association de données et les valeurs mozSettings — toutes les opérations basiques comme basculer un paramètre ou changer une valeur d'entrée vont aussi modifier la valeur mozSettings associée.

- -

L'API window.navigator.mozSettings accède depuis Gecko aux données paramètres. L'utilisation ressemble à ceci pour mettre à jour les données :

- -
navigator.mozSettings.createLock().set(values);
- -
-

Note: Il faut utiliser createLock() pour verrouiller les paramètres avant de lire ou écrire des valeurs mozSettings.

-
- -

Pour récupérer les données, il est possible d'utiliser un appel de fonction get et set pour effectuer des opérations sur les données :

- -
var reqTimerGoBack =
-window.navigator.mozSettings.createLock().get('icc.goBackTimeout');
-reqTimerGoBack.onsuccess = function icc_getTimerGoBackSuccess() {
-  goBackTimer.timeout = reqTimerGoBack.result['icc.goBackTimeout'];
-    ...
-};
- -

La donnée est stockée dans un emplacement instance.result.

- -

Depuis Firefox OS 2.0, une seule instance mozSettings peut être réutilisée via js/modules/settings_cache.js :

- -
var SettingsCache = require('modules/settings_cache');
-
-SettingsCache.getSettings(function(result){
-  var onlineSupportTitle = result['support.onlinesupport.title'];
-    ...
-});
- - - -

Quand les utilisateurs ouvrent l'application Paramètres, ils voient plusieurs panneaux sur la page de vue d'ensemble, qui sont des pages indépendantes fonctionnellement. SettingsService.navigate (js/module/settings_service.js) contrôle la navigation entre ces pages.

- -
-

Note: Pour les panneaux légaux (qui ne sont pas portés par la nouvelle structure), settings.currentPanel est utilisé à la place de SettingsService.navigate pour naviguer entre les panneaux.

-
- -

Puisque Firefox OS sera supporté sur les tablettes et appareils mobiles, l'application Paramètres possède deux types d'implémentation de modèle de navigation :

- - - -

Tant qu'il est appelé, SettingsService.navigate détermine quel modèle de navigation utiliser grâce au code suivant :

- -
if (_isTabletAndLandscape()) {
-  PageTransitions.twoColumn(oldPanel, newPanel, callback);
-} else {
-  PageTransitions.oneColumn(oldPanel, newPanel, callback);
-}
- -

Panneaux

- -

Depuis bien avant Firefox OS 2.0, la structure basique d'un panneau est définie dans js/modules/panel.js. Il définit six statistiques de cycle de vie :

- - - -

Tous les nouveaux panneaux de paramètres héritent de SettingsPanel, qui étend les fonctionnalités de Panel. Le code est contenu dans js/modules/settings_panel.js:

- -
onInit: function(panel, initOptions) {
-  ...
-
-  PanelUtils.activate(panel);
-},
-
-onBeforeShow: function(panel, beforeShowOptions) {
-  // Preset the panel every time when it is presented.
-  PanelUtils.preset(panel);
-  _addListeners(panel);
-  ...
-},
- -

PanelUtils.activate — défini dans js/modules/panel_utils.js — est utilisé pour parser tous les liens dans le panneau et ajoute les handlers corresponsants dans la statistique onInit, et PanelUtils.preset est utilisé pour prérégler les éléments avec les valeurs de paramétrage dans la statistique onBeforeShow.

- -

Tous les nouveaux paramètres sont définis dans le dossier js/panels.

- -

Module AMD et optimisation du temps de compilation

- -

Depuis bien avant Firefox OS 2.0, l'application Paramètres utilise le AMD modules pattern pour implémenter chaque panneau. Les modules AMD modules sont chargés via Alemeda (une version plus légère de RequireJS) et compilés/optimisés avec r.js (l'optimiseur RequireJS). L'application Paramètres a toujours des dépendances sur des fichiers (shared/js) qui ne sont pas des modules AMD. Pour ces derniers, il faut utiliser les options shim définies dans settings/js/config/require.js.

- -

Voir aussi

- -

Le README Settings app has a build-in qui est utile pour aller plus loin sur les Paramètres (principalement écrit par Arthur Chen et Fred Lin).

diff --git "a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/syst\303\250me/index.html" "b/files/fr/archive/b2g_os/platform/gaia/gaia_apps/syst\303\250me/index.html" deleted file mode 100644 index 9e8749702e..0000000000 --- "a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/syst\303\250me/index.html" +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: Système -slug: Archive/B2G_OS/Platform/Gaia/Gaia_apps/Système -tags: - - Apps - - FTU - - Firefox OS - - Gaia - - JavaScript - - UI - - système - - écran de verrouillage -translation_of: Archive/B2G_OS/Platform/Gaia/Gaia_apps/System ---- -
-

L'application Système est la première application web chargée par Gecko lors de la procédure de chargement de Firefox OS ; elle gère un grand nombre de fonctionnalités qui sont requises pour le fonctionnement du système en général et ne font donc pas l'objet d'applications web individuelles. Cet article explique en détails comment Système fonctionne.

-
- -
-

Any application that can be written in JavaScript, will eventually be written in JavaScript. -- Atwood's Law

-
- -
-

Note : Le code source de l'application Système se trouve dans le dépôt Github de Gaia.

-
- -

Comment est chargée l'application système

- -

Quand Gecko essaye de démarrer l'application Système, il référence le manifest.webapp de Système et charge le fichier index.html référencé par le paramètre launch_path (launch_path vaut toujours /index.html pour les applications Gaia.) index.html contient les liens vers tous les styles et JavaScript du système dans sa globalité. Pour gérer un système mobile complet, l'application Système doit charger un grand nombre de ressources.

- -

Le processus de démarrage est lancé à partir de bootstrap.js, avec le code suivant :

- -
window.addEventListener('load', function startup() {
-// define safelyLaunchFTU
-function safelyLaunchFTU() {
-  ...
-}
-
-if (Applications.ready) {
-  safelyLaunchFTU();
-} else {
-  ...
-}
-
-window.addEventListener('ftudone', function doneWithFTU() {
-  window.removeEventListener('ftudone', doneWithFTU);
-
-  var lock = window.navigator.mozSettings.createLock();
-  lock.set({
-    'gaia.system.checkForUpdates': true
-  });
-}
-
-  ...
-
-// With all important event handlers in place, we can now notify
-// Gecko that we're ready for certain system services to send us
-// messages (e.g. the radio).
-var evt = new CustomEvent('mozContentEvent',
-{ bubbles: true, cancelable: false,
-  detail: { type: 'system-message-listener-ready' } });
-  window.dispatchEvent(evt);
-}
- -

Le code fonctionne comme ceci :

- -
    -
  1. Système est une véritable application web exécutée dans un moteur de navigateur, toutes les ressources dont elle dépend doivent être chargées — y compris les styles et les images. Nous lançons donc tout au déclenchement de l'événement window.onload.
  2. -
  3. Tout d'abord, nous préparons le lancement de l'expérience de première utilisation FTU (First Time Use) et de l'écran d'accueil avec la fonction safelyLaunchFTU(). Comme son nom l'indique, FTU n'est affichée que si l'utilisateur démarre Firefox OS pour la première fois.
  4. -
  5. Quand l'utilisateur appuie sur TERMINÉ dans le FTU, l'événement personnalisé ftudone est activé puis bootstrap.js se met en écoute sur cet événement dans l'attente de le traiter.
  6. -
  7. Ensuite, nous utilisons Settings API (navigator.mozSettings) pour définir le réglage gaia.system.checkForUpdates sur vrai, ce qui indique que le système va rechercher les mises à jour.
  8. -
  9. Enfin, nous lançons l'événement personnalisé window.dispatchEvent,  via CustomEvent. C'est un modèle très important utilisé par Gaia pour les notifications systèmes et la communication avec Gecko. Dans le cas présent, l'application Gaia Système notifie à Gecko qu'elle est prête à se mettre en écoute et à gérer les événements.
  10. -
- -

Modularisation instanciable

- -

Le système lui-même évolue constamment vers plus de modularité et de flexibilité. Depuis la version 1.4, une initiative est en cours pour faire évoluer le module système vers un objet instanciable.

- -

Une fois tout le code au-dessus exécuté, les références vers chaque composant système dans bootstrap.js seront de la forme suivante :

- -
window.telephonySettings = new TelephonySettings();
-window.telephonySettings.start();
- -

Le squelette du code source de TelephonySettings() serait :

- -
(function(exports) {
-  'use strict';
-  function TelephonySettings() {
-    this.init_param = false;
-  }
-
-  TelephonySettings.prototype = {
-    // Initialzes all settings.
-    start: function() {
-      ...
-    },
-
-    // Clean all settings.
-    stop: function() {
-      ...
-    },
-
-    1st_method: function ts_1st_method() {
-      ...
-    },
-
-    2nd_method: function ts_2nd_method() {
-      ...
-    }
-  };
-
-  exports.TelephonySettings = TelephonySettings;
-
-}(window));
- -

Ce modèle contribue à la modularisation des composants systèmes et rend ces derniers davantage testables.

- -

Animations de démarrage et d'extinction

- -

Cette section explique comment l'application Système contrôle les animations de démarrage et d'extinction. init_logo_handler.js et sleep_menu.js gèrent ces animations de démarrage et d'arrêt du système.

- -

Animations de démarrage

- -

L'action de l'animation de démarrage n'est en fait pas contenue dans la procédure principale de démarrage, mais il s'agit au contraire d'un hook installé par EventListeners.

- -

Le code de l'animation de démarrage dans init_logo_handler.js se déroule ainsi :

- -

Pour dessiner le logo ou l'animation une fois Gecko prêt à afficher quelque chose à l'écran, nous lançons le gestionnaire système approprié après le chargement du DOM, puis le logo est caché après le lancement d'un événement ftudone ou ftuskip. La méthode _appendCarrierPowerOn, contenue dans init_logo_handler.js, montre comment Gaia se prépare à lancer l'animation ou le logo de démarrage en attendant l'événement DOMContentLoaded. Le logoLoader est défini dans logo_loader.js.

- -
var self = this;
-document.addEventListener('DOMContentLoaded', function() {
-  self.carrierLogo.appendChild(self.logoLoader.element);
-  self._setReady();
-});
- -

Une fois le logo préparé, le système appelle la méthode _setReady() qui met en place un écouteur en attente de l'événement spécial mozChromeEvent avec le type system-first-paint pour indiquer que le système est prêt à dessiner sur l'écran.

- -
var elem = this.logoLoader.element;
-  ...
-window.addEventListener('mozChromeEvent', function startVideo(e) {
-  if (e.detail.type == 'system-first-paint') {
-    window.removeEventListener('mozChromeEvent', startVideo);
-    if (elem &amp;&amp; elem.ended === false) {
-      elem.play();
-    }
-  }
-});
- -

À ce stade, l'élément graphique est animé. Après déclenchement d'un événement ftuopen ou ftuskip, init_logo_handler.js invoque la méthode par défaut handleEvent() qui appelle à son tour la méthode animate() pour faire disparaître l'animation avec comme transition un effet de fondu.

- -
init: function ilh_init(logoLoader) {
-  window.addEventListener('ftuopen', this);
-  window.addEventListener('ftuskip', this);
-    ...
-},
-
-handleEvent: function ilh_handleEvent() {
-  this.animate();
-},
- -

Animations d'extinction

- -

Une fois le système prêt, un appui long sur le bouton marche/arrêt déclenche un événement holdsleep, tel que défini dans hardware_button.js. Ce script gère tous les événements "bouton physique pressé", dont marche/arrêt (veille), accueil, volume haut/bas et ainsi de suite.

- -
HardwareButtonsSleepState.prototype.enter = function() {
-  this.timer = setTimeout(function() {
-    / * When the user holds Sleep button more than HOLD_INTERVAL. */
-    this.hardwareButtons.publish('holdsleep');
-    this.hardwareButtons.setState('base');
-  }.bind(this), this.hardwareButtons.HOLD_INTERVAL);
-};
- -

L'animation d'extinction est traitée par sleep_menu.js ; ce script se met en écoute de l'événement holdsleep et affiche le dialogue du menu lorsqu'il est déclenché.

- -
init: function sm_init() {
-    ...
-  window.addEventListener('holdsleep', this.show.bind(this));
-    ...
-}
- -

Si l'utilisateur choisit d'éteindre l'appareil via les options de menu redémarrer ou éteindre, la fonction startPowerOff() est déclenchée, puis celle-ci appelle à son tour la fonction LogoLoader() qui a la charge de gérer l'affichage de l'animation d'arrêt.

- -
handleEvent: function sm_handleEvent(evt) {
-  switch (evt.type) {
-    case 'click':
-      ...
-    this.handler(action);
-    break;
-    ...
-  }
-}
-
-handler: function sm_handler(action) {
-  switch (action) {
-    ...
-    case 'restart':
-      this.startPowerOff(true);
-      break;
-
-    case 'power':
-      this.startPowerOff(false);
-      break;
-    ...
-  }
-}
- -

Fonctions systèmes

- -

L'application Système gère de nombreuses fonctions et responsabilités, le fait que certaines d'entre-elles soient de son ressort pourrait vous surprendre. L'application Système s'occupe de la gestion de la barre d'état et de la zone de notifications, du verrouillage SIM, du gestionnaire de mises à jour, du lanceur de l'écran d'accueil, de la gestion des fenêtres des applis web, et d'autres choses encore. Cette section aborde quelques-unes des fonctions desservies les plus importantes.

- -

Barre d'état et zone de notifications

- -

La barre d'état et le menu déroulant de Système (Gaia l'appelle la zone de notification ; Android emploie le terme de barre de notification) sont gérés par statusbar.js et utility_tray.js. À l'intérieur du fichier index.html de l'application, les éléments de la barre d'état sont définis dans <div id="statusbar" data-z-index-level="statusbar"> tandis que ceux de la zone de notification résident dans la structure suivante :

- -
<div id="utility-tray" data-z-index-level="utility-tray">
-  <div id="notifications-container">
-    ...
-  </div>
-</div>
- -

Il existe certains panneaux spéciaux dans la zone de notification, tels que le gestionnaire de mises à jour, le gestionnaire des appels d'urgence, la notification de surveillance du stockage, les contrôles et notification de lecture de médias, l'état des transferts Bluetooth et l'outil pour changer de méthode de saisie clavier (IME). Les gestionnaires et styles correspondants sont situés dans les répertoires js/ et style/.

- -

Lanceurs d'applications spéciaux

- -

L'application Système dispose de trois lanceurs spéciaux qui appellent des applications web séparées lorsque c'est nécessaire :

- - - -

Écran de verrouillage

- -

Le principal point d'entrée de l'application Lockscreen est system/js/lockscreen.js. Sur cet écran, l'utilisateur peut procéder au déverrouillage, déclencher l'appareil photo sécurisé et contrôler le lecteur de musiques.

- -

Appels d'urgence

- -

Le code du téléphone d'urgence est contenu dans le répertoire gaia/apps/system/emergency-call/. Il s'agit d'une version simplifiée de l'application Téléphone (Dialer) qui permet à l'utilisateur d'y accéder depuis le Dialogue de déverrouillage PIN de la carte SIM pour composer des appels d'urgence vers des services comme la police.

- -

Interface utilisateur du système

- -

L'application Système assure la gestion de quasiment toute l'interface utilisateur du système, celle-ci étant constituée essentiellement de dialogues comme ceux de l'avertissement de volume, du déverrouillage PIN SIM, de la diffusion cellulaire et d'éléments d'interface utilisateur affectant le comportement des fenêtres, comme le bouton d'accueil logiciel.

- -

Niveau z-index

- -

Avec le fichier index.html de l'application Système, l'attribut data-z-index-level est intégré à de nombreux composants, par exemple :

- -
<div id="sleep-menu" data-z-index-level="sleep-menu">
-  ...
-</div>
- -

Les z-index-levels correspondants sont définis dans system/style/zindex.css, par exemple :

- -
#screen > [data-z-index-level="sleep-menu"] {
-  z-index: 65536;
-}
-
-...
-
-#screen > [data-z-index-level="app"] > .appWindow {
-  z-index: 3;
-}
- -

Les paramètres z-index sont organisés en fonction de l'ordre dans lequel les éléments sont affichés à l'écran — les éléments qui doivent apparaître au-dessus dans la hiérarchie visuelle se voient attribués un nombre plus élevé. C'est de cette manière que l'application Système traite à un niveau basique la gestion des fenêtres.

- -

Le bouton d'accueil logiciel

- -

Le bouton d'accueil logiciel est une alternative au bouton d'accueil, automatiquement activé sur les appareils dépourvus de bouton d'accueil matériel, e.g. Nexus 4. Pour contrôler son apparence, Gecko fournit une caractéristique média propriétaire appelée -moz-physical-home-button qui peut être utilisée dans une requête média afin d'appliquer des styles basés sur la présence d'un bouton d'accueil matériel. Le gestionnaire de fenêtres alloue si nécessaire un certain espace d'écran pour le bouton d'accueil logiciel.

- -

Vous verrez ceci dans system/style/window.css (et dans beaucoup d'autres fichiers de styles systèmes) :

- -
@media not all and (-moz-physical-home-button) {
-  #screen:not(.software-button-disabled) > #windows > .appWindow {
-    bottom: 5rem;
-  }
- }
- -

Geste de retour à l'accueil (mouvement du bas vers le haut de l'écran)

- -

Le geste tactile de retour à l'accueil est une autre alternative au bouton d'accueil matériel ; il peut être activé dans les Paramètres développeurs, et le code qui le contrôle se trouve dans system/js/home_gesture.js. Le geste consiste en un glissement à partir du bas de l'écran, et peut être utilisé pour fermer des applications, par exemple.

- -

Ce geste est automatiquement activé sur les tablettes Firefox OS. Le seuil défini dans gaia/shared/js/screen_layout.js est utilisé pour détecter si l'appareil est une tablette ou non.

- -

Dialogue d'avertissement du volume

- -

Le code qui contrôle le dialogue d'avertissement de volume se situe dans system/js/sound_manager.js. Ce dialogue apparaîtra quand toutes les conditions suivantes seront remplies :

- - - -

Dialogue de déverrouillage PIN de la carte SIM

- -

Le code qui contrôle le dialogue de déverrouillage PIN de la carte SIM est situé dans system/js/simcard_dialog.js — cette boîte de dialogue s'affiche quand l'option de verrouillage par code est activée, l'écran de verrouillage étant affiché. L'application ouvrante doit également avoir les permissions de téléphonie précisées dans son fichier manifest.webapp (ce qui est le cas de l'application Système).

- -
-

Note : la boîte de dialogue de déverrouillage PIN de la carte SIM n'est pas affichée tant que le téléphone est en mode Avion.

-
- -

 

diff --git a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/video/index.html b/files/fr/archive/b2g_os/platform/gaia/gaia_apps/video/index.html deleted file mode 100644 index 5d05ecdbcb..0000000000 --- a/files/fr/archive/b2g_os/platform/gaia/gaia_apps/video/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Application Gaia Vidéo -slug: Archive/B2G_OS/Platform/Gaia/Gaia_apps/Video -tags: - - Apps - - Gaia - - Vidéo(3) -translation_of: Archive/B2G_OS/Platform/Gaia/Gaia_apps/Video ---- -
-

L'application Vidéo est un lecteur de vidéos simple qui vous permet de lire les vidéos enregistrées dans l'espace de stockage des médias de votre appareil Firefox OS.

-
- -

video app screenshot with single video shown called ha ha size 13mb, 4 minutes long, mp4

- -

Utilisation basique

- -

Par défaut, lorsque vous ouvrez l'application Vidéo, vous obtenez un message vous informant qu'il n'y a aucune vidéo à lire et que vous devez donc en charger. Cela peut être fait soit en enregistrant une vidéo avec l'application Photo, soit en connectant le stockage de l'appareil en tant que lecteur sur un ordinateur et en copiant des fichiers dessus. Deux boutons sont présents en bas de l'application : celui de gauche permet d'enregistrer de nouvelles vidéos ou de prendre des photos, et celui de droite vous envoie vers la galerie où vous pouvez les visualiser.
-
- Pour copier les fichiers dessus en utilisant un ordinateur, assurez-vous d'avoir activé “Stockage USB”   (Paramètres > Stockage des médias > Stockage USB). S'il n'existe encore aucun répertoire “Videos”, créez-le avec ce nom exact.
-
- Vous pouvez changer l'endroit où sont stockées les vidéos en modifiant l'emplacement par défaut des médias (dans Paramètres > Stockage des médias) : soit “Carte SD”, soit "Interne".

- -
-

Remarque : Si vous rencontrez des problèmes pour lire des vidéos sur Firefox OS, il faut que vous sachiez deux choses. Tout d'abord, certaines versions de Firefox OS ignorent les fichiers vidéos s'ils sont trop lourds - cela devrait être corrigé dans une prochaine version. Deuxième point, Firefox OS peut lire la plupart des formats vidéos existants les plus répandus, mais pas tous. Vous pouvez vérifiez lesquels dans notre article sur les formats de médias pris en charge.

-
- -

Modification de l'application Vidéo

- -

TBD

diff --git a/files/fr/archive/b2g_os/platform/gaia/hacking/index.html b/files/fr/archive/b2g_os/platform/gaia/hacking/index.html deleted file mode 100644 index 3dc1de05bf..0000000000 --- a/files/fr/archive/b2g_os/platform/gaia/hacking/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Hacking Gaia -slug: Archive/B2G_OS/Platform/Gaia/Hacking -translation_of: Firefox_OS/Developing_Gaia ---- -
-

This page is targeted at Gaia developers. If you're looking for information about how to build and run Firefox OS, you should consult the Building and installing Firefox OS page instead.

-
-

Gaia est une collection d' applications Web qui constituent le front end de Firefox OS. Tout ce que vous voyez à l'écran dans Firefox OS est construit en utilisant les technologies Web ouvertes. Cela comprend l'écran d'accueil et toutes les applications par défaut.

-

Obtenir les sources

-

Pour obtenir les sources de Gaia, fork us on GitHub puis clonez votre fork en utilisant git.

-
$ git clone https://github.com/mozilla-b2g/gaia.git
-

Lancer Gaia

-

Vous pouvez lancer Gaia sur votre ordinateur, dans Firefox, ou sur un téléphone compatible.

-

Le bureau B2G

-

B2G Desktop est une version bureau exécutable de l'application utilisée sur les appareils Firefox OS que vous pouvez utiliser pour exécuter Gaia sur votre ordinateur de bureau.

-

Vous pouvez télécharger une version expérimentale de B2G à partir d'ici. En fonction de la version que vous voulez, vous pourriez vouloir une version différente de test-mozilla-b2g18. Il y a des versions pour Linux (32 bit et 64 bit), Mac OS X et Windows.

-

Les versions expérimentales sont fournies avec une version récente de Gaia. Quand vous avez téléchargé l'archive, vous avez juste à l'extraire dans un dossier et à lancer le programme b2g depuis l'archive.

-
$ cd b2g
-$ ./b2g
-

To run B2G with your own version of Gaia for development purposes you first need to build a profile from your clone:

-
$ cd /path/to/gaia
-$ DEBUG=1 DESKTOP=0 make
-

This will generate a directory in your gaia directory called profile. The DEBUG part runs Gaia as hosted apps on a built-in web server, rather than the default packaged apps which have to be re-packaged after every change. You can find the path to the profile directory by taking a look at last line of output after running the above command, which should look like:

-
Profile Ready: please run [b2g|firefox] -profile /path/to/gaia/profile
-

You can then run B2G Desktop with your generated profile like so:

-
$ ./b2g /path/to/gaia/profile
-

If you want to you can build your own B2G desktop from source.

-

Using Gaia in Firefox

-

It's also possible to run Gaia inside of Firefox. This gives you the advantages of having a rapid development cycle, as well as standard web development tools and debuggers. See Using Gaia in Firefox for details on how to do this.

-

Using Gaia on a device

-

If you have a compatible mobile device you can also run Gaia by flashing it with Firefox OS. See Building and installing Firefox OS for details on how to do this. We also have documentation for how to test Firefox OS.

-

Unit tests

-

See Gaia unit tests for documentation about how to create and run unit tests for Gaia.

-

Filing bugs

-

Bugs are filed on Bugzilla under Boot2Gecko > Gaia. File a new bug under the Gaia component (or one of the sub-components).

-

Contributing to Gaia

-

Mozilla depends on contributions from the open source community to help develop Gaia apps and we'd love you to get involved.

-

Some great places to find some bugs to start hacking on:

- -

Coding style basics

- -

Additional rules

-

Bad:

-
if (expression) doSomething();
-
-

Correct:

-
if (expression) {
-  doSomething();
-}
-
-

If you're working on the system app, check out the guidance listed here.

-

Before submitting a patch we recommend you run gjslint on it to check for any style errors:

-
gjslint --nojsdoc my_file.js
-

Submitting a patch

-

First file or assign a bug to yourself on Bugzilla, you'll need a Bugzilla account.

-

Then create a branch on your fork of Gaia:

-
$ git branch branchname
-$ git checkout branchname
-

Commit your changes:

-
$ git add /file/to/add
-$ git commit -m "Bug XXXXX - Fix the broken Gaia and save the world"
-

Push your branch:

-
$ git push origin branchname
-

Send a pull request by navigating to the branch in your fork on GitHub and finding the pull request button.

-

To request a review of your patch, attach the pull request to the bug in Bugzilla by referencing the URL of the pull request, and set the review ("r") flag to "?" and enter the bugzilla ID of one of the module owners and peers (very important - otherwise your bug will not likely be seem by anyone). The Github tweaks for bugzilla extension on AMO can help automate this process by automatically creating the attachment and adding it to the bug; you will still need to set the review flag on Bugzilla.

-

The reviewer may ask you to make some changes; you may need to amend the original commit and force push it to the original branch/pull request. Once they're is happy with your patch, they will merge it into the master branch for you. Before they do this they would prefer it if you could squash all your changes into a single commit, so your contribution can be tracked easily.

-

The person who merge the commit (usually the reviewer) would add a r= flag in the comment of the merge commit.

-

Make options

-

There are many undocumented nor unsupported environment variable presists in the Makefile. Do not depend on them as they may be removed in the future.

-

Default

-
make
-

Make a profile with packaged apps, lunachable by B2G Desktop and can be pushed to device.

-

Debug make

-
DEBUG=1 make
-

The DEBUG part runs Gaia as hosted apps on a built-in web server, rather than the default packaged apps which have to be re-packaged after every change. Launch the profile with the latest Firefox Nightly will also give you nice B2G specific panels on the Firefox Developer Tools.

-

Push to device

-
make install-gaia
-
-make reset-gaia
-

With adb (Android Debug Bridge) setup, these make targets will push Gaia to the device. reset-gaia will purge the profile and all other webapps before pushing the new Gaia copy.

-

Selective build

-
APP=system make
-
-APP=system make install-gaia
-

With a profile already exists, APP allow you to specify which app to re-package, instead of re-pack and re-push all the Gaia apps.

-

High resolution image assets

-
GAIA_DEV_PIXELS_PER_PX=1.5 make
-

When packaging the app, replace images with their *@1.5x.(gif|jpg|png) ones if such image exists.

-

Gaia is currently targetting HBGA (320x240), qHD (540×960) and WVGA (480×800) only; use GAIA_DEV_PIXELS_PER_PX to make sure the images looks sharp on qHD and WVGA devices. see A pixel is not a pixel for more information about device pixels per css pixels.

-

Script compression and optimization

-
GAIA_OPTIMIZE=1 make
-

Concate and optimize build-in app's javascript to improve load time.

-

Preference shortcuts

-
NOFTU=1
-
-

Disable First time user guide.

-
REMOTE_DEBUGGER=1
-

Enable debug with adb tool

-
DEVICE_DEBUG=1
-

While in OS version > 1.2, specify this param when you want debug FirefoxOS webapp with App Manager

-

Distribution and market customization build

-
GAIA_DISTRIBUTION_DIR=./dir
-

Read Customization Overview for detail.

-

Contacting the Team

- diff --git a/files/fr/archive/b2g_os/platform/gaia/index.html b/files/fr/archive/b2g_os/platform/gaia/index.html deleted file mode 100644 index 3bf84e87f4..0000000000 --- a/files/fr/archive/b2g_os/platform/gaia/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Gaia -slug: Archive/B2G_OS/Platform/Gaia -tags: - - Gaia - - Mobile - - TopicStub -translation_of: Archive/B2G_OS/Platform/Gaia ---- -

Gaia est l'interface utilisateur de Firefox OS. Tout ce qui est affiché à l'écran une fois que Firefox OS est lancé est produit par la couche Gaia : l'écran de verrouillage, l'écran d'accueil, l'écran du clavier téléphonique, etc. Gaia est entièrement écrit en HTML, CSS et Javascript. Les seules interfaces avec le système d'exploitation sous-jacent et le matériel, se font au travers d'API Web standards, elles-même implémentées par la couche Gecko.

- -

Grâce à ce design, il est non seulement possible d'utiliser Gaia sur les appareils Firefox OS, mais aussi sur d'autres systèmes d'exploitation et dans d'autres navigateurs web (éventuellement avec des fonctionnalités dégradées en fonction des capacités du navigateur).

- -

Les applications tierces installées en parallèle de la couche Gaia peuvent être exécutées par Gaia.

- - - - - - - - -
-

Documentation sur Gaia

- -
-
Introduction à Gaia
-
Gaia est l'interface utilisateur des appareils Firefox OS ; c'est simplement une application Web qui fonctionne sur la pile logicielle Firefox OS. Ce guide est une introduction de haut niveau à Gaia.
-
Applications Gaia
-
Information sur toutes les applications par défaut disponibles dans la famille Gaia, incluant des conseils sur la façon de les utiliser et de les modifier.
-
Développer Gaia
-
Un guide complet pour contribuer à Gaia : corriger des bugs ou ajouter de nouvelles fonctionnalités.
-
- -

Voir tous les articles...

-
- - - - -

Ressources

- - -
- -
-
-

Rejoignez la communauté Gaia

- -
-
Choisissez votre méthode préférée pour rejoindre la discussion :
- - -
- -
- -
-
-
- -

 

diff --git a/files/fr/archive/b2g_os/platform/gaia/introduction_a_gaia/index.html b/files/fr/archive/b2g_os/platform/gaia/introduction_a_gaia/index.html deleted file mode 100644 index 19372bab66..0000000000 --- a/files/fr/archive/b2g_os/platform/gaia/introduction_a_gaia/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Introduction à Gaia -slug: Archive/B2G_OS/Platform/Gaia/Introduction_a_Gaia -translation_of: Archive/B2G_OS/Platform/Gaia/Introduction_to_Gaia ---- -
-

Gaia est l'interface utilisateur pour "Boot to Gecko" (B2G); c'est un ensemble d'applications Web qui s'exécute localement sur un appareil B2G, un émulateur, "desktop build", ou "Firefox build". Tout ce que vous devez savoir afin d'ajouter des applications ou apporter des modifications à Gaia sont des technologies Web telles que JavaScript, HTML, and CSS.

-
- -

L'écran de verrouillage Gaia

- -

L'écran de verrouillage montre le réseau de l'opérateur, l'heure et la date, et une barre de défilement qui permet à l'utilisateur de déverrouiller le téléphone ou aller directement à la caméra pour prendre une photo. Si l'utilisateur a un code de verrouillage, l'écran affiche également une interface de saisie de mot de passe.

- -

- -

Notez que sur certains appareils le mot de passe est activée par défaut; dans ce cas, le code PIN par défaut pour déverrouiller l'appareil est "0000". Cette fonction sera probablement modifiée au fil du temps et étoffé.

- -

L'interface par défaut Gaia

- -

L'interface par défaut de Gaia, comme on le voit ici, est similaire à ce que vous voyez sur la plupart des smartphones du marché.

- -

- -

Cette copie d'écran est évidemment une version préliminaire du système d'exploitation, avec des icône placés dans un espace réservé (et quelques applications de test). La barre d'état en haut indique le réseau sur lequel le téléphone est connecté (ou "Pas de carte SIM" pour un dispositif sans réseau), la force du signal réseau, la force du signal WiFi, le niveau de la batterie et l'heure.

- -

La zone centrale de l'écran affiche les icônes des applications; on peux glisser les pages de gauche et de droite. Vous pouvez en savoir plus sur la suite d'applications fournis par défaut avec Gaia sur notre page Gaia apps.

- -

Au bas de l'écran ce trouve un dock pouvant accueillir jusqu'à sept de vos applications les plus couramment utilisées. Vous pouvez glisser et déposer des applications sur le dock de la zone centrale.

- -

Voir aussi

- - diff --git "a/files/fr/archive/b2g_os/platform/gestion_de_la_m\303\251moire_dans_firefox_os/index.html" "b/files/fr/archive/b2g_os/platform/gestion_de_la_m\303\251moire_dans_firefox_os/index.html" deleted file mode 100644 index b7cf7222bc..0000000000 --- "a/files/fr/archive/b2g_os/platform/gestion_de_la_m\303\251moire_dans_firefox_os/index.html" +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Gestion de la mémoire dans Firefox OS -slug: Archive/B2G_OS/Platform/Gestion_de_la_mémoire_dans_Firefox_OS -translation_of: Archive/B2G_OS/Platform/Out_of_memory_management_on_Firefox_OS ---- -
-

Firefox OS fonctionne sur certains appareils sévèrement limités en mémoire, et il est facile pour les applications d'épuiser la mémoire disponible sur de tels systèmes. Quand un processus épuise la mémoire disponible sur le système, le noyau doit "tuer" d'autres processus afin de libérer de la mémoire. Cet article explique comment low memory killer and low memory notifications travaillent - les deux systèmes sur le dispositif qui contrôlent ce processus sont tués pour maintenir le système principale en cours d'exécution quand il est à court de mémoire.

-
- -

Une opération Firefox OS implique plusieurs processus - un "processus principal" exécutant des services de base du système, et potentiellement de nombreux "processus enfants". En général chaque application fonctionne dans son propre processus enfant. Parce que dans les applications de l'environnement Firefox OS sont rarement fermée par l'utilisateurle système gère automatiquement leur durée de vie pour faire place à de nouvelles applications ou des applications existantes nécessitant de la mémoire supplémentaire.

- -

Deux sous-systèmes sont utilisés pour gérer ceci: le Low memory killer (LMK) et le Low memory notifications.

- -

Low memory killer

- -

Le LMK est un sous-système du noyau Android qui tue automatiquement les processus pour faire place à des demandes de mémoire. Afin de choisir quel processus est tué d'abord pour libérer de la mémoire, chaque processus est assignée une priorité par l'intermédiaire des fichiers /proc/<pid>/oom_adj ou /proc/<pid>/oom_score_adj. La priorité d'un processus est connu comme son score d'ajustement , ou oom_adj.  Les plus petites valeurs de oom_adj correspondent à des processus de priorité supérieure.

- -

En général, plus le score d'ajustement est élévé, plus le processus est susceptible d'être tué. Le LMK offre de multiples niveaux, chacun correspondant à une certaine quantité de mémoire libre et un score d'ajustement minimum. Chaque fois que la quantité de mémoire libre dans le système tombe en dessous d'un certain seuil, tous les processus avec un score d'ajustement plus élevées que le minimum spécifié pour ce niveau sont admissibles à être tué. Le LMK commencera à tuer ces processus, les plus grandes d'abord, et continuera jusqu'à ce qu'il a libéré suffisamment de mémoire pour aller au-dessus de ce seuil.

- -
-

Remarque: Quand une application de fond est tué par le LMK, elle est mise dans le gestionnaire de tâches / à travers des balayages de bord comme une "app zombie": la prochaine fois que vous accédez à cette application, elle sera relancé. Le nombre maximal d'applications qui peuvent être maintenu dans cet état est actuellement de 10.

-
- -
-

Remarque: Le processus tué lorsque l'appareil manque de mémoire est pas nécessairement celui qui "a causé" la condition out-of-memory.

-
- -

Les priorités d'un processus

- -

Dans Firefox OS les applications sont tués dans la politique d'ordre de priorité suivant, qui est appliquée en donnant à chaque demande un niveau de priorité et en associant un score d'ajustement OOM à ces niveaux (les valeurs actuelles sont définies dans prefs):

- -
    -
  1. Les premières applications à être tués seront les applications d'arrière-plan, en commençant par le moins récemment utilisé.
  2. -
  3. Les applications de fond qui sont perceptibles par l'utilisateur sont tués ensuite (par exemple, un lecteur de musique lecture audio en arrière-plan ou une application tenant une haute priorité ou cpu wakelock et ayant un gestionnaire enregistré pour les messages du système.)
  4. -
  5. Si l'application du clavier est en marche, elle sera tué ensuite.
  6. -
  7. Les applications de premier plan seront tués ensuite.
  8. -
  9. Enfin, les applications de premier plan qui ont demandé à haute priorité ou cpu wakelocks sont les derniers à se faire tuer.
  10. -
- -
-

Remarque: La plupart des processus enfants s'exécutent avec oom_adj égale à 2 pendant qu'ils sont au premier plan. Les processus enfants à l'arrière-plan s'exécutent avec oom_adj entre 3 et 6 (inclus). Exactement la valeur de oom_adj qu'un processus enfant a alors en arrière-plan dépend d'un certain nombre de facteurs, à savoir que ce soit le lecteur de musique, que ce soit l'application du clavier, etc.

-
- -

Il ya quelques exceptions à ces règles:

- - - -

Low memory notifications

- -

Le second mécanisme que nous utilisons pour libérer de la mémoire est low memory notifications. Le LMK fournit un seuil spécial qui, lorsqu'on les croise, peut envoyer des notifications à l'espace utilisateur qui exécute faible sur la mémoire. La fois l'application du système et des applications régulières d'utilisateurs attendent en permanence pour cette condition et vont réagir sur elle par l'envoi d'un événement mémoire pression par l'intermédiaire du service d'observateur. Cet événement est visible uniquement à code C ++ et JS chrome et non pas directement par une application. Grâce à la base de code Gecko nous utilisons cet événement pour libérer autant de mémoire que nous pouvons - normalement en purgeant les caches internes (images, DNS, sqlite, etc.), l'abandon des actifs qui peuvent être recréées (contexts WebGL par exemple) et l'exécution du garbage collector et collecteur de cycles.
-
- Lorsqu'il rencontre une condition de mémoire faible the premier événement memory-pressure qui sera envoyé aura the low-memory payload. Si après un temps prédéfini (5s) nous sommes toujours dans une condition de mémoire faible un autre événement memory-pressure sera tiré, mais cette fois avec le low-memory-ongoing payload. Ce payload est utilisé lorsque nous continuons à connaître des conditions de mémoire faible et nous voulons vider les caches et faire d'autres formes bon marché de la mémoire minimisation, mais nous savons que les approches main lourde comme un GC est peu probable de réussir.

- -

Comment le LMK et le low memory notifications travaillent ensemble

- -

Actuellement, le seuil de memoire faible est réglé au dessus du niveau de LMK pour les applications en arrière. Donc l'action agrégée de la LMK et du low memory notifications est la suivante lorsqu'un périphérique est à court de mémoire:

- -
    -
  1. Tuer des applications d'arrière-plan dans l'ordre least-recently-used.
  2. -
  3. Si nous ne libérons assez de mémoire, envoyez des événements memory-pressure à toutes les applications restantes.
  4. -
  5. Si la condition persiste, renvoyer un événement memory-pressure chaque 5 secondes, mais les marquer comme en cours de sorte que le GC / CC ne réagit pas à eux.
  6. -
  7. Tuer des applications de fond perceptibles ou hautement prioritaires.
  8. -
  9. Tuez l'application du clavier, si elle est en cours d'exécution.
  10. -
  11. Tuer des applications de premier plan.
  12. -
  13. Tuer des applications de premier plan de haute priorité.
  14. -
  15. Tuer le processus préallouée.
  16. -
diff --git a/files/fr/archive/b2g_os/platform/gonk/index.html b/files/fr/archive/b2g_os/platform/gonk/index.html deleted file mode 100644 index 1e983c5d12..0000000000 --- a/files/fr/archive/b2g_os/platform/gonk/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Gonk -slug: Archive/B2G_OS/Platform/Gonk -tags: - - Firefox OS - - Gonk -translation_of: Archive/B2G_OS/Platform/Gonk ---- -
-

Gonk est le système d'exploitation bas niveau de la plate-forme Firefox OS, comprenant un noyau Linux basé sur l'Android Open Source Project (AOSP) et la couche d'abstraction matérielle (HAL) userspace. Cet article a pour but d'expliquer de quoi est fait Gonk ; pour plus d'informations sur l'ensemble de l'architecture Firefox OS et comment Gonk s'y intègre, lisez notre guide l'architecture Firefox OS.

-
- -

Vue d'ensemble de Gonk

- -

Gonk constitue le noyau de Firefox OS, qui sert d'interface entre Gecko et la couche matérielle. Gonk contrôle le matériel et expose ses fonctionnalités aux WebAPI implémentées dans Gecko. Gonk peut être vu comme la « boîte noire » qui fait le travail complexe et minutieux de contrôler l'appareil en exécutant les requêtes sur la couche matérielle.

- -

Gonk est tout simplement une distribution Linux incluant des composants d'Android (comme le GPS ou l'appareil photo) ainsi que des projets libres communs ajoutés par Mozilla (comme libusb ou bluez) afin de pouvoir l'intégrer facilement à toutes les couches de l'architecture de Firefox OS. Cette conception facilite, pour les OEM, le portage d'éléments logiciels développés pour Android (pilote, firmware, service daemon, etc.), dans le but de les déployer sur des smartphones Firefox OS.

- -

Dans les sources de Gecko, il y a un dossier b2g/ qui contient le Gonk Port, qui déverrouille les capacités matérielles mobiles pour le Web. Cela consiste en un noyau Linux, HAL, et d'autres bibliothèques spécifiques aux OEM. Plusieurs des bibliothèques Gonk sont des projets open-source communs : libusb, bluez, et ainsi de suite. Certaines autres parties de la HAL sont partagées avec le projet Android : GPS, appareil photo et autres.

- -

Gonk est une couche de portage de l'appareil : un adaptateur entre le matériel et Gecko. Gonk est une distribution Linux relativement simple qui peut être considérée comme une association de Gecko Port et des couches de portage Gecko. Gonk est ainsi une cible de portage de Gecko, tout comme il y a un portage de Gecko pour OS X, Windows et Android.

- -
-

Note : Comme les différents matériels mobiles peuvent avoir différents chipsets et autres spécifications matérielles, les appareils peuvent contenir différentes distributions de Gonk.

-
- -

Comme le projet Firefox OS a le contrôle total sur Gonk, nous pouvons exposer des interfaces à Gecko qui ne pourraient pas être exposées à d'autres systèmes d'exploitation. Par exemple, Gecko a un accès direct à la couche de téléphonie complète et au buffer de trame d'affichage sur Gonk.

- -

Architecture de Gonk

- -

Chaque modèle de téléphone possède son propre ensemble de composants Gonk, parmi les bibliothèques du système, pilotes matériels et firmwares nécessaires pour le faire fonctionner. Ces composants sont déterminés par l'OEM en collaboration avec le fabricant du chipset et l'ODM. Le schéma suivant représente un exemple d'implémentation de Gonk :

- -

- -

Cet exemple montre les composants principaux suivants (ce qui représente uniquement un sous-ensemble des composants que l'on peut retrouver dans n'importe quelle implémentation de Gonk).

- - - -

Gonk s'occupe aussi de démarrer, gérer et arrêter le processus b2g, autrement dit Gecko, dans Firefox OS. Le processus b2g agit comme un client des services daemons de Gonk qui communiquent directement avec le matériel et exposent à Gecko les fonctionnalités matérielles du téléphone. Gecko communique avec ces daemons via une communication inter-process (IPC). Ces composants s'échangent des commandes et des protocoles pour demander et proposer leurs services.

- -
-

Note : Pour plus d'informations concernant l'architecture de Gonk, voir le guide sur l'architecture de Firefox OS.

-
- -

Portage de Gonk

- -

Parce que Firefox OS est basé sur le noyau Android, le portage sous Firefox OS de pilotes matériels, de firmwares, de services daemons, ou d'autres composants Android ne nécessite habituellement qu'un minimum d'efforts. Si un composant spécifique (par exemple un RIL particulier ou un nouveau daemon) est nécessaire, ou si une modification doit être apportée à la conception d'un ODM, alors un supplément de travail d'intégration et de test peut être requis.

- -

Dans b2g, les clients communiquent avec les services daemons via une communication inter-process (IPC). Le client instancie une socket de connexion vers le service daemon, y envoie sa requête (en respectant le protocole du serveur de requête), reçoit la réponse et ferme la connexion. Les OEM sont responsables de la conception et de l'implémentation de ces communications inter-processus entre clients et serveurs.

- -
-

Note : Pour plus d'informations concernant le fonctionnement du processus de portage, voir Porter Firefox OS.

-
- -

Comment Mozilla participe au portage de Gonk avec les OEM et fabricants de téléphones

- -

Chaque implémentation de Gonk est le résultat d'une collaboration entre Mozilla, les OEM, et les fabricants associés (ODM, fabricant chipset).

- -

Mozilla fournit les dépôts des sources et les fichiers nécessaires pour la prise en charge de Gonk dans ses distributions Firefox OS. Les dépôts des sources contiennent le noyau Linux de base (avec uniquement de légères modifications) et les personnalisations de Gecko (« hooks »).

- -

Les OEM sont responsables de la compilation, du test, de la certification ainsi que de la distribution de l'image système Firefox OS pour un modèle d'appareil donné. Pour la partie Gonk de l'image système, les OEM sont responsables de la bonne intégration entre les appels aux API Web et les fonctionnalités matérielles. Le type et l'ampleur des efforts requis est hautement dépendant des choix des composants matériels du téléphone.

- -

Composants d'un appareil

- -

Les OEM collaborent avec les fabricants de chipset et les ODM pour fournir tous les composants spécifiques à l'appareil qui sont nécessaires à son bon fonctionnement. Par exemple, un fabricant du composant Wi-Fi doit fournir le chipset et le logiciel associé. Les composants peuvent inclure :

- - - -

Intégration de Gonk et Gecko

- -

Les OEM doivent s'assurer que les fonctionnalités matérielles de l'appareil sont correctement et complètement exposées aux API Web implémentées dans Gecko. Ceci nécessite de :

- - - -

Code source de Gonk

- -

Le principal dépôt B2G sur Github contient les portages officiels prenant en charge Gonk pour divers appareils, vous pouvez donc le considérer comme le dépôt de Gonk. La liste des appareils pris en charge est disponible dans B2G/config.sh.

- -

La plupart du travail quotidien effectué sur Gonk implique de porter le système sur différentes cartes et de s'assurer que Gecko fonctionne correctement sur différents appareils.

- -
-
- -

 

diff --git a/files/fr/archive/b2g_os/platform/index.html b/files/fr/archive/b2g_os/platform/index.html deleted file mode 100644 index 5af7b36d25..0000000000 --- a/files/fr/archive/b2g_os/platform/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: La plate-forme Firefox OS -slug: Archive/B2G_OS/Platform -translation_of: Archive/B2G_OS/Platform ---- -

La plate-forme Firefox OS regroupe de nombreux composants. Même si vous n'avez pas besoin de comprendre son architecture pour développer des applications Firefox OS, la documentation suivante pourra vous intéresser, que vous travailliez au développement ou au portage de la plate-forme — ou que vous soyez simplement curieux.

- - - - - - - - -
-

Documentation à propos de la plate-forme Firefox OS

- -
-
Introduction à Firefox OS
-
Introduction à la nature et au fonctionnement de Firefox OS.
-
Compiler et installer Firefox OS
-
Un guide pour compiler Firefox OS et l'installer sur votre appareil compatible. Ce guide couvre également la compilation de l'émulateur Firefox OS, pour faire fonctionner Firefox OS sur un ordinateur.
-
Gaia
-
Documentation à propos de Gaia, l'interface utilisateur des appareils Firefox OS ; c'est une application web fonctionnant au dessus de la couche logicielle de Firefox OS.
-
Gonk
-
Documentation à propos de Gonk, -
-
la couche de système d'exploitation sous Gaia. Il s'agit d'un noyau Linux et d'une couche d'abstraction matérielle avec laquelle Gecko communique.
-
-
-
Gecko
-
-
-
Gecko est la couche de Firefox OS qui fournit les mêmes standards d'applications web ouverts utilisés par Firefox Desktop et Thunderbird, ainsi que par de nombreuses autres applications.
-
-
-
Graphique des fonctionnalités
-
-
-
Un graphique des fonctionnalités disponibles dans les différents types de builds de Firefox OS.
-
-
-
Vue d'ensemble de l'architecture de Firefox OS
-
Une vue d'ensemble de la structure interne de Firefox OS ; ceci est principalement orienté pour les développeurs de la plate-forme et les gens qui travaillent sur le portage de Firefox OS.
-
Firefox OS apps architecture
-
Une vue d'ensemble du modèle d'application sur Firefox OS.
-
Tester Firefox OS
-
Un guide pour tester Firefox OS, incluant des informations sur la création de tests automatisés.
-
Portage de Firefox OS
-
Informations à propos du portage de Firefox OS sur de nouveaux appareils.
-
Personnalisation avec le fichier .userconfig
-
Comment personnaliser la compilation et l'exécution de Firefox OS en modifiant le fichier .userconfig.
-
- -

Tous les guides...

-
-

Obtenir de l'aide de la communauté

- -

Si vous travaillez avec Firefox OS ou développez des applications que vous aimeriez voir fonctionner sur des appareils Firefox OS, des ressources communautaires sont à votre disposition !

- - - -

N'oubliez pas la netiquette pour poser vos questions…

- - - - - -

Ressources

- - -
- -

 

diff --git a/files/fr/archive/b2g_os/platform/settings_list/index.html b/files/fr/archive/b2g_os/platform/settings_list/index.html deleted file mode 100644 index e20105cd79..0000000000 --- a/files/fr/archive/b2g_os/platform/settings_list/index.html +++ /dev/null @@ -1,717 +0,0 @@ ---- -title: Firefox OS settings list -slug: Archive/B2G_OS/Platform/Settings_list -tags: - - API - - B2G - - Firefox OS - - Paramètres - - Reference - - Référence(2) - - WebAPI -translation_of: Archive/B2G_OS/Platform/Settings_list ---- -
-

Firefox OS offre un certain nombre de paramètres pour configurer l'appareil et ses fonctionnalités intégrées. Ces paramètres sont accessibles par les applications certifiées à l'aide de l'API Settings.

-
-
-

Note: A cause des différentes fonctionnalités fournies par les différents appareils et les différentes versions de Firefox OS, cette liste peut être exactement conforme ou non à ce qui est disponible sur chaque appareil.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nom du paramètreTypeValeur par défaut
accessibility.invertBooléenfalse
accessibility.screenreaderBooléenfalse
alarm.enabledBooléenfalse
app.reportCrashesChaîneask
app.update.intervalNombre86400
audio.volume.alarmNombre15
audio.volume.bt_scoNombre15
audio.volume.dtmfNombre15
audio.volume.contentNombre15
audio.volume.notificationNombre15
audio.volume.ttsNombre15
audio.volume.telephonyNombre5
bluetooth.enabledBooléenfalse
bluetooth.debugging.enabledBooléenfalse
camera.shutter.enabledBooléentrue
clear.remote-windows.dataBooléenfalse
debug.grid.enabledBooléenfalse
debug.oop.disabledBooléenfalse
debug.fps.enabledBooléenfalse
debug.ttl.enabledBooléenfalse
debug.log-animations.enabledBooléenfalse
debug.paint-flashing.enabledBooléenfalse
debug.peformancedata.sharedBooléenfalse
deviceinfo.firmware_revisionChaîne 
deviceinfo.hardwareChaîne 
deviceinfo.osChaîne 
deviceinfo.platform_build_idChaîne 
deviceinfo.platform_versionChaîne 
deviceinfo.softwareChaîne 
deviceinfo.update_channelChaîne 
gaia.system.checkForUpdatesBooléenfalse
general.useragent.updates.enabledBooléentrue
geolocation.enabledBooléentrue
keyboard.layouts.englishBooléentrue
keyboard.layouts.dvorakBooléenfalse
keyboard.layouts.otherlatinsBooléenfalse
keyboard.layouts.cyrillicBooléenfalse
keyboard.layouts.arabicBooléenfalse
keyboard.layouts.hebrewBooléenfalse
keyboard.layouts.zhuyinBooléenfalse
keyboard.layouts.pinyinBooléenfalse
keyboard.layouts.greekBooléenfalse
keyboard.layouts.japaneseBooléenfalse
keyboard.layouts.polishBooléenfalse
keyboard.layouts.portugueseBooléenfalse
keyboard.layouts.spanishBooléenfalse
keyboard.vibrationBooléenfalse
keyboard.clicksoundBooléenfalse
keyboard.autocorrectBooléentrue
keyboard.wordsuggestionBooléentrue
keyboard.currentChaîneen
language.currentChaîneen-US
lockscreen.passcode-lock.codeChaîne0000
lockscreen.passcode-lock.timeoutNombre0
lockscreen.passcode-lock.enabledBooléenfalse
lockscreen.notifications-preview.enabledBooléentrue
lockscreen.enabledBooléentrue
lockscreen.lockedBooléentrue
lockscreen.unlock-sound.enabledBooléenfalse
mail.sent-sound.enabledBooléentrue
message.sent-sound.enabledBooléentrue
operatorvariant.mccChaîne0
operatorvariant.mncChaîne0
ril.iccInfo.mbdnChaîne 
ril.sms.strict7BitEncoding.enabledBooléenfalse
ril.cellbroadcast.searchlistChaîne 
debug.console.enabledBooléenfalse
phone.ring.keypadBooléentrue
powersave.enabledBooléenfalse
powersave.thresholdNombre0
privacy.donottrackheader.enabledBooléenfalse
ril.callwaiting.enabled  
ril.cf.enabledBooléenfalse
ril.data.enabledBooléenfalse
ril.data.apnChaîne 
ril.data.carrierChaîne 
ril.data.defaultServiceIdNombre0
ril.data.passwdChaîne 
ril.data.httpProxyHostChaîne 
ril.data.httpProxyPortNombre0
ril.data.mmscChaîne 
ril.data.mmsproxyChaîne 
ril.data.mmsportNombre0
ril.data.roaming_enabledBooléenfalse
ril.data.userChaîne 
ril.mms.apnChaîne 
ril.mms.carrierChaîne 
ril.mms.httpProxyHostChaîne 
ril.mms.httpProxyPortChaîne 
ril.mms.mmscChaîne 
ril.mms.mmsportChaîne 
ril.mms.mmsproxyChaîne 
ril.mms.passwdChaîne 
ril.mms.userChaîne 
ril.radio.preferredNetworkTypeChaîne 
ril.radio.disabledBooléenfalse
ril.supl.apnChaîne 
ril.supl.carrierChaîne 
ril.supl.httpProxyHostChaîne 
ril.supl.httpProxyPortChaîne 
ril.supl.passwdChaîne 
ril.supl.userChaîne 
ril.sms.strict7BitEncoding.enabledBooléenfalse
ril.sms.defaultServiceIdNombre0
ril.telephony.defaultServiceIdNombre0
ring.enabledBooléentrue
screen.automatic-brightnessBooléentrue
screen.brightnessNombre1
screen.timeoutNombre60
tethering.usb.enabledBooléenfalse
tethering.usb.ipChaîne192.168.0.1
tethering.usb.prefixChaîne24
tethering.usb.dhcpserver.startipChaîne192.168.0.10
tethering.usb.dhcpserver.endipChaîne192.168.0.30
tethering.wifi.enabledBooléenfalse
tethering.wifi.ipChaîne192.168.1.1
tethering.wifi.prefixChaîne24
tethering.wifi.dhcpserver.startipChaîne192.168.1.10
tethering.wifi.dhcpserver.endipChaîne192.168.1.30
tethering.wifi.ssidChaîneFirefoxHotspot
tethering.wifi.security.typeChaîneopen
tethering.wifi.security.passwordChaîne1234567890
tethering.wifi.connectedClientsNombre0
tethering.usb.connectedClientsNombre0
time.nitz.automatic-update.enabledBooléentrue
time.timezone  
ums.enabledBooléenfalse
ums.modeNombre0
vibration.enabledBooléentrue
wifi.enabledBooléentrue
wifi.screen_off_timeoutNombre600000
wifi.disabled_by_wakelockBooléenfalse
wifi.notificationBooléenfalse
wifi.connect_via_settingsBooléenfalse
icc.displayTextTimeoutNombre40000
icc.inputTextTimeoutNombre40000
-

Voir aussi

- diff --git a/files/fr/archive/b2g_os/platform/support_fonctionnalites/index.html b/files/fr/archive/b2g_os/platform/support_fonctionnalites/index.html deleted file mode 100644 index 8b08ea075e..0000000000 --- a/files/fr/archive/b2g_os/platform/support_fonctionnalites/index.html +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: Support des fonctionnalités -slug: Archive/B2G_OS/Platform/support_fonctionnalites -tags: - - AQ - - B2G - - Firefox OS - - Mobile -translation_of: Archive/B2G_OS/Platform/Feature_support_chart ---- -

- -

Il existe différents builds de Firefox OS que vous pouvez télécharger ou compiler vous même. Il y a quelques différences entre les fonctionnalités accessibles sur chaque appareil. Le tableau ci-dessous devrait vous aider à comprendre ce qui fonctionne, ou ne fonctionne pas, en fonction des différents builds.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionAppareilÉmulateurOrdinateur
TéléphoneToutSeulement l'interface, pas de réseauSeulement l'interface, pas de réseau
ContactsToutToutTout
SMSToutSeulement l'interface, pas de réseauSeulement l'interface, pas de réseau
CameraToutSeulement l'interface, pas de support de la cameraSeulement l'interface, incertain sur le support de la webcam pour le moment
GallerieToutToutTout
VidéoToutSeulement l'interfaceTout
MusiqueTout Tout
Radio FMToutToutSeulement l'interface
E-mailToutToutTout
CalculetteToutToutTout
NavigateurToutToutTout
MarketplaceToutToutTout
HorlogeToutToutTout
CalendrierToutToutTout
Écran d'accueilToutToutTout
Écran verouilléToutToutTout
ClavierToutToutTout
Gestionnaire de tâcheToutToutTout
Premier lancementTout??
NotificationToutToutTout
Barre d'étatToutCertains états réseaux ne peuvent être testésCertains états réseaux ne peuvent être testés
ParamètresToutToutTout
- -

 

diff --git a/files/fr/archive/b2g_os/portage/index.html b/files/fr/archive/b2g_os/portage/index.html deleted file mode 100644 index e463846081..0000000000 --- a/files/fr/archive/b2g_os/portage/index.html +++ /dev/null @@ -1,244 +0,0 @@ ---- -title: Porter Boot to Gecko -slug: Archive/B2G_OS/Portage -tags: - - B2G - - B2GOS - - Mobile -translation_of: Archive/B2G_OS/Porting_B2G_OS/basics ---- -

- -

B2G OS utilise un noyau dérivé d'Android, avec par dessus une interface utilisateur basée sur Gecko. Cet article fournit un guide de base sur la façon de porter le système d'exploitation sur de nouveaux appareils.

- -

Ce guide suppose que vous faite un portage sur un nouvel appareil qui exécute déjà Android; si vous faites un portage vers un autre type d'appareil, le travail va nécessiter davantage d'investissement.

- -
-

Note : Vous pouvez trouver de l'aide concernant le portage sur le canal IRC #fxos et sur Mozilla Discourse.

-
- -

Configurer votre système de build

- -

La première étape consiste à configurer votre système de buid; vous pouvez suivre le guide pré-requis pour compiler B2G OS.

- -

Créer une sauvegarde locale du système Android d'origine

- -

Ensuite, vous devez faire une sauvegarde de votre appareil Android avant de commencer à l'atomiser avec vos builds de test de B2G. De plus, certaines parties seront nécessaires pour le processus de build et d'installation. Pour le nom de l'appareil, nous recommandons l'utilisation de "_" au lieu de "-". Voir le bug 1243349 pour les raisons de ce choix. 

- -
mkdir sauvegarde_de_mon_appareil
-cd sauvegarde_de_mon_appareil
-adb pull /system system
- -

Cloner les répertoires B2G

- -

La première étape consiste à cloner le dépôt B2G ainsi que le dépôt contenant les manifestes.

- -
git clone https://github.com/mozilla-b2g/B2G.git
-git clone https://github.com/mozilla-b2g/b2g-manifest.git
- -

Ajouter un nouvel appareil à config.sh

- -

L'étape suivante consiste à ajouter un nouvel appareil à config.sh dans le dépôt B2G;  vous pouvez utiliser un de ceux qui existent comme modèle. Ceci implique simplement de fournir les instructions permettant de récupérer les bons fichiers pour faire le build.

- -

Créer un manifeste pour le nouvel appareil

- -

Mainenant, vous devez ajouter un fichier manifeste pour le nouvel appareil. Utilisez l'un des manifestes existant comme modèle. Vous pouvez utiliser le manifeste hamachi comme référence. Une fois que c'est fait, vous pouvez ajouter et livrer votre nouveau manifeste dans votre dépôt local b2g-manifest :

- -
git add mon-nouvel-appareil.xml
-git commit
-
- -

Ensuite, il faudra indiquer au fichier config.sh d'utiliser votre dépôt local b2g-manifest à la place du dépôt officiel. Pour réaliser cela, modifiez la valeur des variables GITREPO et BRANCH dans le fichier config.sh pour qu'elles pointent vers l'emplacement de votre dépôt local et de la branche souhaitée, par exemple :

- -
GITREPO=${GITREPO:-"file:///home/votrenom/b2g-manifest"}
-BRANCH=${BRANCH:-master}
- -

Créer une arborescence de configuration pour le nouvel appareil

- -

Créer une nouvelle arborescence pour le nouvel appareil. Elle doit se trouver dans device/<manufacturer>/<device_id>. Cette arborescence doit inclure au moins :

- - - -

Ici, le contenu peut grandement différer d'un appareil à l'autre. En particulier, les fichiers BoardConfig.mk et extract-files.sh peuvent différer significativement. Cette partie nécessite pas mal de modifications, de test et de débogage pour déterminer quels blobs binaires doivent être extraits. Pour avoir une meilleure idée de qu'on est supposé trouver ici, jetez un oeil à configuration pour l'appareil hamachi. Rappelez-vous de référencer correctement votre propre arborescence de configuration dans le manifeste aue vous avez créé pour votre nouvel appareil.

- -
-

Note: Si vous pouvez trouver une référence existante sur CyanogenMod pour votre appareil, ces informations accélèreront le processus de portage. Le forum XDA est un autre bon endroit pour discuter et vérifier des informations.

-
- -

Reconstruire boot.img

- -

Une fois que tout cà est fait, vous devez reconstruire l'image de boot. Ce n'est habituellement pas nécessaire pour le noyau lui-même mais pour récupérer les modifications dans init.rc.

- -

Modifications dans init.rc

- -

Le init.rc que vous utilisez n'est pas celui fourni par B2G; à la place, vous devez le récupérer depuis votre appareil.

- -

Les principales choses que vous aurez besoin de modifier sont :

- -

Importer init.b2g.rc

- -

Ajouter les lignes suivantes pour importer init.b2g.rc:

- -
on early-init
-    start ueventd
-    import /init.b2g.rc
- -

Corriger les permissions

- -

Corrigez les permissions des fichiers /system/b2g/b2g, /system/b2g/updater et /system/b2g/plugin-container; ceci doit être fait après les lignes qui montent le système de fichier en lecture/écriture:

- -
chmod 0755 /system/b2g/b2g
-chmod 0755 /system/b2g/updater
-chmod 0755 /system/b2g/plugin-container
- -

Vous pourriez vouloir commencer en modifiant init.rc provenent du nouvel appareil au lieu d'utiliser le init.rc fourni par le système de build; dans ce cas, vous devez vous rappeler de renseigner TARGET_PROVIDES_INIT_RC dans BoardConfig.mk.

- -

Noyau pré-compilé vs. compiler le noyau depuis le code source

- -

Vous pouvez utiliser un noyau pré-compilé ou vous pouvez compiler le noyau à partir du code source. Pour compiler le noyau à partir du code source, ajoutez AndroidKernel.mk et la configuration du noyau dans l'arborescence de configuration de l'appareil.

- -

Le maguro sur l'ancien système de build est un exemple qui compile le noyau à partir du code source.

- -

Extraire et modifier une image de boot existante

- -

Il est possible de récupérer l'image de boot d'un téléphone en extrayant le contenu des devices /dev/mtd/mtd1 ou /dev/mtd/mtd2, le fichier image résultat peut ensuite être facilement récupéré :

- -
adb shell 'cat /dev/mtd/mtd1 > /sdcard/boot.img'
-adb pull /sdcard/boot.img
-
- -

Une fois que le fichier de l'image de boot a été obtenu, il peut être décompressé à l'aide d'un utilitaire tel que unmkbootimg. L'outil va extraire à la fois l'image du noyau (zimage) et le disque mémoire (ramdisk initramfs.cpio.gz) et également afficher une commande permettant de re-compiler l'image avec les mêmes paramètres que ceux utilisés pour l'image d'origine, par exemple :

- -
$ unmkbootimg boot.img
-Kernel size 3872576
-Kernel address 0x208000
-Ramdisk size 265102
-Ramdisk address 0x1500000
-Secondary size 0
-Secondary address 0x1100000
-Kernel tags address 0x200100
-Flash page size 2048
-Board name is ""
-Command line "androidboot.hardware=aphone"
-Extracting kernel to file zImage ...
-Extracting root filesystem to file initramfs.cpio.gz ...
-All done.
----------------
-To recompile this image, use:
-  mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz --base 0x200000 --cmdline 'androidboot.hardware=aphone' -o new_boot.img
----------------
-
- -

Pour modifier le fichier ramdisk, créez un répertoire destination et extrayez-le dedans:

- -
mkdir initramfs_dir
-cd initramfs_dir
-gunzip -c ../initramfs.cpio.gz | cpio -i
-
- -

Faîtes toutes les modifications nécessaires (telles que la modification de init.rc) puis recompressez le ramdisk en utilisant mkbootfs et assurez-vous que la version a été compilée avec les outils B2G de l'hôte :

- -
/path/vers/votre/B2G/out/host/linux-x86/bin/mkbootfs . | gzip > ../newinitramfs.cpio.gz
-
- -

Enfin, retournez au répertoire de premier niveau et re-compressez l'image de boot en utilisant mkbootimg; assurez-vous également que vous utilisez la version compilée avec loutils de l'autre hôte B2G:

- -
/path/vers/votre/B2G/out/host/linux-x86/bin/mkbootimg --kernel zImage --ramdisk newinitramfs.cpio.gz --base 0x200000 --cmdline 'androidboot.hardware=aphone' -o newboot.img
-
- -

Si vous copiez maintenant votre nouvelle image de boot dans out/target/product/$DEVICE/boot.img (où $DEVICE est le nom de votre device), elle sera automatiquement flashée quand flash.sh est appelé. Alternativement, vous pouvez la flasher à la main avec les commandes suivantes :

- -
adb reboot bootloader
-fastboot flash boot newboot.img
-fastboot reboot
-
- -

Ajouter le nouvel appareil à flash.sh

- -

Ajoutez le nouvel appareil à flash.sh; les spécificités sur la façon de faire cela dépendront des outils qui seront utilisés pour flasher le nouvel appareil.

- -

Configurer, compiler et flasher le nouvel appareil

- -

Maintenant, vous pouvez essayer de compiler et de flasher votre nouvel appareil:

- -
ANDROIDFS_DIR=sauvegarde_de_mon_appareil ./config.sh <device_id> '../b2g-manifest/default.xml'
-./build.sh
-./flash.sh
- -

Test et débogage

- -

Nous avons besoin d'ajouter certains détails ici; en fait, c'est tout l'article qui pourrait nécessiter de l'aide.

- -

FAQ

- -

À venir.

- -

Voir également

- - diff --git a/files/fr/archive/b2g_os/porter_firefox_os/b2g_nexus_player/index.html b/files/fr/archive/b2g_os/porter_firefox_os/b2g_nexus_player/index.html deleted file mode 100644 index 9cfa7b3962..0000000000 --- a/files/fr/archive/b2g_os/porter_firefox_os/b2g_nexus_player/index.html +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: Porter B2G sur le Nexus Player (Lollipop) -slug: Archive/B2G_OS/Porter_Firefox_OS/B2G_Nexus_Player -tags: - - B2G - - B2G OS - - Firefox OS - - Guide - - Nexus - - Nexus Player - - TV - - portage -translation_of: Archive/B2G_OS/Porting_B2G_OS/B2G_Nexus_Player ---- -

- -

Cet article donne une vue d'ensemble du processus permettant à B2G OS (la version TV — sur laquelle Firefox OS pour TV est basée) d'être porté sur le Nexus Player (versions faisant touner Lollipop.)

- -
-

Important : Le public visé par ces instructions est essentiellement les développeurs expérimentés qui sont déjà familiarisés avec la compilation de Firefox OS ou d'AOSP.

-
- -
-

Note : Nous ne pouvons garantir la fiabilité des appareils portés. Cependant, les développeurs intéressés par le processus de portage et disposés à contribuer au programme sont encouragés à hacker leurs propres appareils. Les questions et les retours constructifs sont toujours les bienvenus : adressez-nous vos courriels à smarttv@mozilla.com.

-
- -
-

Note : Cet article, estimant que votre Nexus Player est déverrouillé, ne vous apprendra pas comment le rooter et/ou déverrouiller.

-
- -

Préparer l'environnement de compilation

- -

Actuellement, la construction de B2G OS pour Nexus Player nécessite un PC sous Ubuntu 14.04 LTS x64 ou compatible.

- -

Vous devez commencer par lancer les commandes suivantes :

- -
sudo dpkg --add-architecture i386
-sudo dpkg --add-architecture amd64
-sudo apt-get update
-sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-7-jdk nodejs unzip python
- -

Configurer l'USB

- -

Par défaut, sur les systèmes Linux, un utilisateur normal ne peut pas accéder directement aux périphériques USB. Vous devez configurer des règles udev.

- -

Créez un fichier /etc/udev/rules.d/51-android.rules contenant la commande suivante, puis enregistrez-le :

- -
wget -S -O - https://raw.githubusercontent.com/cm-b2g/B2G/1230463/tools/51-android.rules | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
- -

Les nouvelles règles prendront effet la prochaine fois qu'un appareil sera branché.

- -
-

Note : Pour plus d'informations sur les environnement de compilation appropriés, veuillez vous référer aux Prérequis pour construire Firefox OS.

-
- -

Télécharger le code source

- -

Pour télécharger le code source pour le Nexus Player, assurez-vous au préalable d'avoir Github installé, puis exécutez les commandes suivantes:

- -
git clone git://github.com/mozilla-b2g/B2G.git nexusplayer
-cd nexusplayer
-BRANCH=v2.6 ./config.sh nexusplayer-l
- -

Pour télécharger manuellement le code source Gecko correspondant, exécutez la commande suivante :

- -
git clone https://github.com/mozilla-b2g/gecko-b2g
- -

Et suivez les instructions de Changer l'arbre source de Gecko pour en construire une version personnalisée.

- -

Compiler

- -

Une fois l'environnement mis en place et le code source téléchargé, sa construction se résume à exécuter la commande suivante :

- -
./build.sh
- -

Flasher B2G sur le Nexus Player

- -

Flashez B2G OS sur le Nexus Player avec la commande suivante :

- -
./flash.sh
- -

Le flashage terminé, l'appareil devrait redémarrer et charger B2G OS. Sauf si quelque chose n'allait pas, vous devriez voir peu de temps après l'écran d'accueil TV de B2G OS.

- -

Dépannage

- -

Quelquefois, les choses peuvent mal se passer. Ce qui suit est une liste des problèmes connus, avec des suggestions de solutions.

- -

Fastboot ne trouve pas le Nexus Player

- -

Il est possible que ./flash.sh redémarre avec succès le Nexus Player en mode bootloader mais que ça se bloque indéfiniment sur le message < waiting for device >. Cela peut être résolu en remplaçant le fastboot de votre système par celui situé dans le répertoire <b2g>/out/host/linux-x86/bin/.

- -

La fonctionnalité Bluetooth est absente

- -

Nous ne pouvons pas construire automatiquement bluetooth.default.so ni libbt-vendor.so sur nexusplayer-l, c'est pourquoi le Bluetooth ne fonctionne pas par défaut. Une solution de contournement consiste actuellement à construire les fichiers manquants à la main et à les flasher sur nexusplayer-l, après quoi vous serez en mesure d'activer le bluetooth dans l'application Paramètres.

- -

Les étapes de construction figurent ci-dessous :

- -

Étapes pour construire bluetooth.default.so

- -
    -
  1. Aller sur dir nexusplayer puis tapez source setup.sh.
  2. -
  3. Aller sur dir nexusplayer/external/tinyxml2 puis tapez mm.
  4. -
  5. Aller sur dir nexusplayer/external/bluetooth/bluedroid puis tapez mm.
  6. -
  7. Aller sur dir nexusplayer/ puis tapez la commande suivante :
  8. -
- -
adb push out/target/product/fugu/system/lib/hw/bluetooth.default.so
-/system/lib/hw
- -

Étapes pour construire libbt-vendor.so

- -
    -
  1. Aller sur dir nexusplayer puis tapez source setup.sh.
  2. -
  3. Aller sur dir nexusplayer/hardware/broadcom/libbt puis tapez mm.
  4. -
  5. Aller sur dir nexusplayer puis tapez la commande suivante :
  6. -
- -
adb push out/target/product/fugu/system/vendor/lib/libbt-vendor.so
-/system/vendor/lib
- -

L'écran d'accueil TV ne gère pas les événements de la souris

- -

Par défaut, l'application écran d'accueil TV ne gère pas les événements de la souris (voir bug 1260083). Pour le moment, la recommandation est de se passer de l'usage de la souris et d'utiliser la télécommande à la place.

- -

Suivez ces étapes pour que les choses fonctionnent :

- -
    -
  1. Utilisez le clavier physique pour démarrer le Nexus Player.
  2. -
  3. Utilisez les touches fléchées pour naviguer sur l'écran d'accueil et aller dans l'application Paramètres.
  4. -
  5. Utilisez les touches fléchées pour aller sur le panneau de configuration du Bluetooth et associez l'appareil avec la télécommande.
  6. -
- -

Vous pouvez alors utiliser la télécommande à la place. Branchez la souris lorsque vous souhaitez naviguer dans l'application Navigateur.

diff --git a/files/fr/archive/b2g_os/porter_firefox_os/index.html b/files/fr/archive/b2g_os/porter_firefox_os/index.html deleted file mode 100644 index 2b771ff313..0000000000 --- a/files/fr/archive/b2g_os/porter_firefox_os/index.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Porter B2G OS -slug: Archive/B2G_OS/Porter_Firefox_OS -tags: - - Firefox OS - - portage -translation_of: Archive/B2G_OS/Porting_B2G_OS ---- -

Cette page liste les ressources disponibles concernant le portage de B2GOS.

- -
-
Bases du portage
-
Informations de base sur comment porter B2G OS pour de nouveaux appareils.
-
Porter sur CyanogenMod
-
Cet article explique comment porter B2G en utilisant CyanogenMod.
-
diff --git a/files/fr/archive/b2g_os/porter_firefox_os/portage_sur_cyanogenmod/index.html b/files/fr/archive/b2g_os/porter_firefox_os/portage_sur_cyanogenmod/index.html deleted file mode 100644 index cc1038b093..0000000000 --- a/files/fr/archive/b2g_os/porter_firefox_os/portage_sur_cyanogenmod/index.html +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Portage sur CyanogenMod -slug: Archive/B2G_OS/Porter_Firefox_OS/Portage_sur_CyanogenMod -tags: - - B2G - - cm-b2g - - cyanogenmod - - portage b2g cyanogenmod -translation_of: Archive/B2G_OS/Porting_B2G_OS/Porting_on_CyanogenMod ---- -

B2G OS est traditionnellement construit sur une base AOSP. Cependant, cela ne signifie pas que nous devons utiliser uniquement AOSP. Il en existe plusieurs forks qui ont pour objectif de supporter une gamme de matériel plus large. CyanogenMod, le plus populaire des forks d'AOSP, comporte des milliers d'ajouts, modifications, et bidouilles pour prendre en charge des centaines d'appareils Android du commerce. Cet article explique comment porter Firefox en utilisant CyanogenMod.

- -

En construisant B2G OS sur une base CyanogenMod, il devient potentiellement possible de supporter autant d'appareils que le fait ce système. En raison de la multiplicité des appareils supportés par CyanogenMod, il est hautement probable que vous en ayez déjà un sur lequel il peut être compilé !

- -
Important : Ce guide s'adresse seulement aux utilisateurs expérimentés ; vous devez savoir au préalable comment construire CyanogenMod ou AOSP.
- -

Si vous n'avez jamais construit CyanogenMod pour votre appareil, nous vous conseillons fortement d'apprendre comment le faire avant de porter B2G OS. Cela pour deux raisons : vous apprendrez à utiliser les outils nécessaires au portage de B2G OS, et vous vérifierez la qualité du portage de CyanogenMod.

- -

Pour être plus clair : ce guide part du principe que votre appareil est déverrouillé et que CyanogenMod est installé dessus. Ce guide ne va pas vous apprendre à rooter et/ou déverrouiller votre appareil, ni à mettre en place votre machine de compilation ou utiliser git pour résoudre des échecs de fusion.

- -

Voici un résumé des étapes :

- -
    -
  1. Télécharger le code source
  2. -
  3. Modifier les dépôts de l'appareil
  4. -
  5. Modifier le noyau
  6. -
  7. Compiler et installer
  8. -
- -

Télécharger le code source

- -
À FAIRE : Fusionner le manifeste requis avec mozilla-b2g : Bugzilla: 1211870.
- -

Nous disposons de plusieurs outils utiles pour compiler B2G OS, tous contenus dans un unique dépôt. Téléchargez ces outils via git pour créer votre répertoire de travail.

- -
git clone https://github.com/cm-b2g/B2G.git && cd B2G
-
- -

À présent, nous devons télécharger le code source.

- -
./config.sh cm-porting
-
- -

Le script config.sh initialise l'outil repo en utilisant le manifeste base-l-cm.xml situé dans le dépôt b2g-manifest. Ce fichier XML est une liste de dépôts spécifiques à l'OS nécessaires à la compilation de B2G OS. Il fait ensuite appel à l'outil repo pour télécharger la totalité du code source.

- -

Le téléchargement de tous ces dépôts, dont certains font plusieurs giga-octets, va prendre un certain temps, il est donc recommandé de le faire pendant la nuit si la connexion est lente, ou juste avant manger si la connexion est plus rapide.

- -

Cette étape va également créer un fichier .config qui devra être éditer plus tard.

- -

Manifeste local pour votre appareil

- -

Le manifeste susmentionné ne contient aucun dépôt spécifique pour les appareils, ce qui diffère d'un manifeste classique. Nous avons besoin de créer un fichier local_manifest.xml avec tous les dépôts pour votre appareil. La manière la plus rapide de le faire consiste à utiliser breakfast, un outil automatisé écrit par CyanogenMod pour créer un manifeste local et télécharger les dépôts supplémentaires directement depuis le compte GitHub de CyanogenMod.

- -
. build/envsetup.sh && breakfast 123
-
- -

Remplacez 123 par le nom de code de votre appareil.

- -

Si votre appareil n'est pas officiellement supporté par CyanogenMod mais qu'il existe un portage non officiel, vous pouvez créer manuellement le fichier local_manifest.xml dans le dossier .repo/local_manifests. Un exemple est donné plus bas.

- -
<?xml version="1.0" encoding="UTF-8"?>
-<manifest>
-     <remote name="xyz" fetch="git://github.com/xyz/" revision="cm-12.1" />
-     <project name="device_oem_123" path="device/oem/123" remote="xyz" />
-     <project name="device_oem_1xx-common" path="device/oem/1xx-common" remote="xyz" />
-     <project name="kernel_oem_1xx" path="kernel/oem/1xx" remote="xyz" />
-     <project name="vendor_oem" path="vendor/oem" remote="xyz" />
-</manifest>
-
- -

Rappelez-vous d'exécuter repo sync après avoir créé votre manifeste !

- -

Modifier les dépôts de l'appareil

- -

Une partie de la configuration des appareils se trouve dans des fichiers overlay XML utilisés par le système de compilation d'AOSP pour définir les options par défaut des applications Android. Comme B2G OS ne les utilise pas, il faut donc réimplémenter certaines de ces options, comme le bouton d'accueil, le stockage émulé etc.

- -

Il est possible de définir les options par défaut les plus raisonnables en incluant deux fichiers issus de vendor/cm. La première ligne doit être ajoutée au début de device.mk et la seconde à la fin de BoardConfig.mk:

- -
# Extra mk import at the top of device.mk
-$(call inherit-product, vendor/cm/config/common_full.mk)
-
-# Extra mk import at the bottom of BoardConfig.mk
-include vendor/cm/BoardConfig.mk
-
- -

D'autres options sont encore nécessaires car beaucoup sont très spécifiques au matériel. Voici ci-dessous une liste des ajouts et suppressions habituels spécifiques aux appareils. Cette liste n'est pas exhaustive, mais l'ajout des deux lignes citées plus haut et définir tout ce qui suit vous donnera un système fonctionnel.

- -
# for Gecko to use the correct resolution assets
-# Valid options are: 1.5 | 2 | 2.25
-GAIA_DEV_PIXELS_PER_PX := 2.25
-
- -
# for Gecko to use the correct boot animation
-# Valid options are: hvga | fwvga | qHD | 720p | 1080p
-BOOTANIMATION_ASSET_SIZE := 1080p
-
- -
# for Gecko to support separate internal storage partition
-# This is for legacy devices only. You must prvide your own volume.cfg file
-GECKO_BOARD_SEPARATE_STORAGE_PARTITON := true
-
- -
# for Gecko to support virtual home button
-PRODUCT_PROPERTY_OVERRIDES += \
-    ro.moz.has_home_button=0
-
- -
# for Gecko to support usb mass storage
-# You may need to add mass_storage to init.oem.usb.rc
-PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
--    persist.sys.usb.config=mtp
-+    persist.sys.usb.config=mass_storage
-
- -
# for Gecko to support NFC
-PRODUCT_PROPERTY_OVERRIDES += \
-    ro.moz.nfc.enabled=true
-
-PRODUCT_PACKAGES += \
-    nfcd
-
- -
# Changes in init.device.rc
--on property:init.svc.bootanim=running
--on property:init.svc.bootanim=stopped
--on property:service.bootanim.exit=1
-+on property:sys.boot_completed=1
-
- -

Modifier le noyau

- -

B2G OS a besoin d'avoir certaines fonctionnalités de sécurité supplémentaires activées dans le noyau. Jusqu'à Marshmallow, ces fonctionnalités étaient absentes des noyaux Android, quelques patches supplémentaires devront donc être rétroportés sur le noyau pour de nombreux appareils. Pour référence, consultez Bugzilla: 790923.

- -

Il suffit de faire le tri dans les patches pour votre noyau ; le système de construction va automatiquement activer les nouvelles fonctionnalités. Pour un exemple fonctionnel, voir le noyau LGE MSM8994.

- -
Important : Cette étape est obligatoire ! B2G OS ne démarrera pas sans ces fonctionnalités de sécurité !.
- -

Compiler et installer

- -

Vous vous souvenez du fichier .config créé précédemment ? Il faut maintenant remplacer cm-porting par le nom de code de votre appareil.

- -
$ grep -r PRODUCT_NAME device/oem/123
-
- -

Note : n'utilisez pas la valeur dans cm.mk, utilisez celle de device.mk, elle devrait ressembler à quelque chose du genre full_123. Vous pouvez effectuer le remplacement à la main, ou le faire simplement avec sed :

- -
$ sed -i "s/cm-porting/full_123/g" .config
-
- -

À présent, il est temps de lancer la compilation !

- -
$ ./bldcm.sh
-
- -

Cela va prendre dans tous les cas de 30 minutes à deux ou trois heures, en fonction de votre PC, ça peut donc être le bon moment pour aller faire les magasins ou acheter un peu de popcorn.

- -

Installation de B2G OS via fastboot

- -

Dans le cas où votre appareil supporte fastboot, il est possible de flasher directement les images de partition :

- -
cd out/target/product/123/
-fastboot flash boot boot.img
-fastboot flash recovery recovery.img
-fastboot flash system system.img
-fastboot flash userdata userdata.img
-
- -

Installation de B2G OS via recovery

- -

Si votre appareil ne supporte pas fastboot, vous pouvez alors utiliser update.zip ià la place. Celui-ci peut être installé sur l'appareil en copiant le zip sur une carte SD ou via adb sideload. Entrez en mode recovery selon la méthode spécifique à votre appareil puis tapez :

- -
adb sideload out/target/product/123/fota/fullimg/update.zip
-
- -

Dépannage

- -

Quelque chose ne fonctionne pas ? Il est temps de retrousser ses manches !

- -

Essayez tout d'abord de déterminer si la fonctionnalité est disponible dans CyanogenMod. Il pourrait s'agir simplement d'une configuration manquante dans B2G OS.

- -

Si ça ne fonctionne pas sur CyanogenMod, cela signifie alors que vous devez l'implémenter dans votre portage. Cela serait utile de soumettre votre correctif en amont également !

- -

Appareils 64bits

- -

La plupart des appareils fabriqués depuis mi-2015 intègrent un SoC 64 bits. B2G ne peut pas être construit sous la forme d'un exécutable 64 bits mais heureusement les exécutables 32 bits fonctionnent. Nous pouvons forcer la construction de B2G en 32 bits avec deux correctifs situés dans le bogue #1245088.

- -

Après cela, il suffit de définir :

- -
BUILD_MULTILIB_GECKO_AS_2ND_ARCH := true
- -

Appareil photo

- -

Certaines parties d'Android ont été retirées du processus de construction car elles ne sont pas nécessaires. Si le blob de l'appareil photo signale des fonctions manquantes, vérifiez frameworks/base pour voir si celles-ci ont été supprimées. Il peut être possible de les réintégrer.

- -

WiFi

- -

L'appareil peut ne pas voir certains points d'accès s'ils utilisent des canaux non officiels. Il semble que cela soit un problème de CyanogenMod ou même d'AOSP car différents matériels et fabricants sont concernés.

diff --git a/files/fr/archive/b2g_os/preparing_for_your_first_b2g_build/index.html b/files/fr/archive/b2g_os/preparing_for_your_first_b2g_build/index.html deleted file mode 100644 index c4006b4445..0000000000 --- a/files/fr/archive/b2g_os/preparing_for_your_first_b2g_build/index.html +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: Se préparer pour la première construction de B2G -slug: Archive/B2G_OS/Preparing_for_your_first_B2G_build -tags: - - B2G OS - - Build documentation - - compiler b2g os -translation_of: Archive/B2G_OS/Preparing_for_your_first_B2G_build ---- -
-

Avant de pouvoir construire B2G, vous devez cloner le dépôt et configurer votre arborescence. Cet article explique comment faire.

-
- -

En fonction de votre connexion internet, l'étape de configuration prend un certain nombre d'heures pour télécharger les fichiers nécessaires à la construction de B2G OS. L'attente n'est pas aussi amusante que l'action, donc après avoir lu cette page et une fois lancé le script de configuration, pensez à utiliser ce temps pour mettre en place et tester le simulateur B2G OS,  commencez à vous familiariser avec la documentation pour les développeurs d'applications, y compris la conception et la construction d'une application, et à vous familiariser avec les informations sur les étapes à venir.

- -
-

Note : Si vous utilisez OS X pour compiler B2G OS pour un Flame, rendez-vous sur la page Compiler B2G OS pour un Flame sur OS X.

-
- -
-

Si vous êtes sur Archlinux, veuillez également consulter ce sujet sur Discourse.

-
- -

Cloner le dépot  B2G

- -

Nous disposons de plusieurs utilitaires pour construire B2G OS, tous inclus dans un unique dépôt. La première étape consiste à télécharger ces outils avec git pour créer notre répertoire de travail :

- -
git clone git://github.com/mozilla-b2g/B2G.git && cd B2G
- -

Si vous rencontrez une erreur UnicodeEncodeError: ascii codec error ici, essayez de spécifier votre utilisateur git avec

- -
vim ~/.gitconfig
-
- -

(tapez "i" pour passer en mode insertion) puis ces lignes :

- -
[user]
-       name = votrenom
-       email = votre adressemail@url.tld
-[color]
-       ui = auto
- -

Pressez la touche "échap" et quittez avec ":wq"

- - - -
$ ./config.sh <appareil>
- -

où appareil = flame-kk ou aries

- - - -
$ ./build.sh
-$ ./flash.sh
- -

Notes :

- - - -
Note : Il ne s'agit pas de la liste complète des cibles de compilation, voyez config.sh ou vous référer à la page des Appareils compatibles.
- -

Si votre cible de compilation ne figure pas dans la liste, vous devriez vous arrêter tout de suite et aider à porter B2G OS !

- -

Configurer une version pour un appareil mobile

- -
Important : Rappelez-vous que seuls les appareils fonctionnant au moins sous Android 4.3 (Jellybean, Kitkat et Lollipopsont pris en charge. Veuillez vérifier que votre téléphone fonctionne avec la dernière version compatible, sinon ces prochaines étapes vont échouer. Référez-vous à la page Appareils compatibles pour plus de détails.
- -

Blobs propriétaires

- -

Lorsque vous installez B2G OS sur un appareil, vous avez besoin d'inclure un ensemble de blobs propriétaires. Ceux-ci sont extraits de l'appareil lorsque vous lancez votre première compilation, mais nous vous conseillons de faire également une sauvegarde complète dans un endroit sûr pour référence ultérieure. Une fois B2G OS installé, il n'y a plus aucun moyen de récupérer ces fichiers !

- -

Assurez-vous d'avoir le débogage distant activé dans les paramètres développeurs de votre appareil. Vérifiez que ce dernier est visible avec la commande adb devices ; vous devriez voir quelque chose de similaire à ceci :

- -
$ adb devices
-List of devices attached
-ABCXXXXXXX       device
- -

Si aucun appareil n'est listé, vérifiez vos règles UDEV.

- -
Note : Si vous avez des problèmes de permissions, vérifiez que votre écran est déverrouillé et que vous avez autorisé l'accès à votre téléphone. Un message s'affiche sur votre appareil dans ce but. Si le problème persiste, utilisez adb root et adb remount.
- -

Sauvegardez les partitions du téléphone avec la commande adb pull :

- -
adb pull /system <répertoire cible de la sauvegarde>/system
-
- -

En fonction du téléphone, vous devrez peut-être récupérer également les répertoires /data et /vendor :

- -
adb pull /data <répertoire cible de la sauvegarde>/data
-adb pull /vendor <répertoire cible de la sauvegarde>/vendor
-
- -

Si les commandes pull échouent avec un message "insufficient permission", essayez ce qui suit :

- - - -

Prochaine étape

- -

À ce stade, vous devriez être prêt à Compiler B2G OS.

- -

Options de configuration avancées

- -

Configurer la compilation en utilisant une sauvegarde système

- -

Si votre téléphone n'a plus Android installé et que votre arborescence B2G ne contient pas les blobs binaires, mais que vous avez une sauvegarde des partitions systèmes, vous pourrez construire une version à partir de celle-ci de cette manière :

- -
ANDROIDFS_DIR=<chemin absolu vers le répertoire parent du répertoire système> ./config.sh <cible>
-
- -

Le système de compilation recherchera une sauvegarde existante dans un dossier backup-<cible>/system, il ne vous sera pas nécessaire de spécifier le répertoire si les fichiers sont placés à cet endroit.

- -

Compiler en utilisant une version personnalisée de Gecko

- -

Il peut arriver que vous souhaitez, ou avez besoin, de compiler une version de Boot to Gecko basée sur une version de Gecko différente de celle utilisée par défaut (définie dans le manifeste). Vous pouvez faire cela en éditant le fichier .userconfig. Par exemple, si vous souhaitez compiler une version utilisant mozilla-central :

- -
export GECKO_PATH=/chemin/vers/mozilla-central
-export GECKO_OBJDIR=/chemin/vers/mozilla-central/objdir-gonk
-
- -
-

Note : Sous Mac OS X, le répertoire mozilla-central doit se situer dans un système de fichiers sensible à la casse.

-
- -

Notez que cette étape peut être faite avant ou après avoir récupéré le dépôt (i.e. avant l'étape config.sh ci-dessus) ou plus tard.  Vous pouvez également conserver plusieurs versions (avec débogage activé ou non, etc) en ayant plusieurs fichiers userconfig (avec des paramètres différents--chacun nécessitant évidemment un OBJDIR différent) et en faisant un lien symbolique .userconfig qui pointe sur la configuration que vous voulez compiler à ce moment.

- -

Pour plus d'informations, lisez Changer l'arborescence source de Gecko.

- -

Construction d'une branche

- -

Si vous souhaitez compiler une branche autre que celle par défaut (remarque : la branche par défaut n'est pas forcément "master" !), vous devrez préfixer l'appel à config.sh avec le nom de la branche, comme ceci :

- -
BRANCH=nom-branche ./config.sh <appareil>
- -

Les noms de branches sont relativement logiques et suivent en général les noms de produits/versions, donc v1-train, v1.0.0, v1.0.1, v1.1, v1.1.0hd, v1.2, v1.3, v1.4, v2.0 et ainsi de suite au fur et à mesure. Comme exemple, pour compiler B2G OS 1.2, pour l'émulateur Arm, vous devez saisir

- -
BRANCH=v1.2 ./config.sh emulator
- -

Si vous avez déjà lancé config.sh, vous pouvez voir les noms des branches, en allant dans B2G/.repo/manifests et en faisant "git branch -a" (ce n'est pas renseigné temps que ce n'est pas encore fait.) Le nom de la branche est indiqué comme mot-clé final sur la ligne, e.g. "v1-train" ou "master":

- -
  remotes/origin/master
-  remotes/origin/v1-train
-  remotes/origin/v1.0.0
-  remotes/origin/v1.0.1
- -

Voir Personnalisation avec le fichier .userconfig pour des possibilités supplémentaires de personnalisation.

- -

Copier votre arborescence B2G vers une nouvelle machine

- -

Si vous avez déjà préparé une arborescence complète pour B2G et que vous devez changer de machine (chanceux !), vous vous simplifierez la vie en migrant simplement toute l'arborescence B2G de votre ancien ordinateur vers le nouveau, plutôt que de tout reconfigurer. Pour cela, montez le système de fichier de votre ancienne machine sur la nouvelle, puis faîtes ceci :

- -
rsync -a source/ dest/
-
- -

source correspond au chemin complet de l'arborescence source (avec la barre oblique / à la fin), dest correspond au chemin de destination de la copie (le / à la fin est également important !).

- -
Note : Si vous copiez les fichiers à partir d'une machine avec une architecture différente n'oubliez pas d'éxécuter './build.sh clean' avant de démarrer la compilation. SInon, vous risquez de rencontrer des problèmes de compilation.
- -

Si vous suivez ces étapes, vous pouvez sauter tout le reste de cet article et passer directement à la compilation.

- -

Mettre à jour votre arborescence B2G

- -

Quand le répertoire est mis à jour vers une nouvelle version de B2G, vous pourrez mettre à jour votre arborescence. Pour ce faire, utilisez les commandes suivantes :

- -
git fetch origin
-git checkout origin/master
- -

Vous pouvez vérifier que les commandes ont réussi avec :

- -
git show HEAD
- -

Puis en vérifiant que la modification indiquée par la commande correspond à celle donnée par : https://github.com/mozilla-b2g/B2G/commits/master

diff --git a/files/fr/archive/b2g_os/prerequis_pour_construire_firefox_os/index.html b/files/fr/archive/b2g_os/prerequis_pour_construire_firefox_os/index.html deleted file mode 100644 index 08892dcdc3..0000000000 --- a/files/fr/archive/b2g_os/prerequis_pour_construire_firefox_os/index.html +++ /dev/null @@ -1,421 +0,0 @@ ---- -title: Prérequis pour construire B2G OS -slug: Archive/B2G_OS/Prerequis_pour_construire_Firefox_OS -tags: - - Build Firefox OS - - Build documentation - - Build prerequisite - - Firefox OS - - Mobile - - Mobile OS -translation_of: Archive/B2G_OS/B2G_OS_build_prerequisites ---- -
-

Avant d'obtenir le code source pour compiler B2G OS, même si c'est juste pour essayer de construire Gaia, vous aurez besoin d'un système de compilation correctement configuré — cette page vous montre comment faire. Pour l'instant, vous pouvez compiler sur des distributions Linux 64 bits et sous OS X.

-
- -

Cibles de compilation compatibles

- -

Vous avez besoin d'un appareil compatible pour lequel effectuer la compilation, ou alors vous pouvez utiliser un émulateur.

- -
-

Note : Le code source de B2G de Mozilla constitue l'implémentation de référence de B2G OS, bien que les vendeurs de téléphones effectuent souvent des modifications. Lorsque vous achetez un appareil dans le commerce, il intègre la version spécifique au fabricant. Cela n'affecte pas les applications installées, mais cela peut différer au niveau de la plate-forme. Le portage pour Nexus 5 est maintenu directement par Mozilla ; il possède une meilleure compatibilité avec notre version de Gecko comparé à d'autres appareils.

-
- -

Émulateur

- -

Deux émulateurs sont disponibles : l'un émule du code ARM tandis que l'autre exécute tout en code x86. Apprenez comment les installer et les utiliser. N'utilisez pas l'émulateur x86 — il est difficile à installer et n'est pas si compatible.

- -

Bureau

- -

Vous pouvez construire une version de B2G OS pour ordinateur de bureau ; elle fait fonctionner Gecko au sein d'une application XULRunner, et vous utilisez ensuite l'interface utilisateur Gaia à l'intérieur de celle-ci.

- -

Appareils

- -

Plusieurs appareils sont compatibles avec B2G OS, mais certains sont plus compatibles que d'autres, et la compatibilité d'un appareil peut se restreindre à des variantes spécifiques. Vérifiez la page des appareils compatibles pour plus de détails.

- -
Important : Seuls les appareils qui font fonctionner au minimum Android 4.3 (c'est-à-dire Jellybean, Kitkat ou Lollipop) sont compatibles. Si votre appareil est listé ci-dessus mais fonctionne avec une version d'Android plus ancienne, mettez-le à jour.
- -

Prérequis pour GNU/Linux

- -

Pour compiler sur Linux, vous aurez besoin de :

- - - -

Vous aurez aussi besoin de la présence des outils suivants :

- - - - - - - - -
-
    -
  • autoconf 2.13
  • -
  • bison
  • -
  • bzip2
  • -
  • ccache
  • -
  • curl
  • -
  • flex
  • -
  • gawk
  • -
  • git
  • -
  • gcc
  • -
  • nodejs
  • -
  • python
  • -
-
-
    -
  • g++ / g++-multilib
  • -
  • java sdk (jdk)
  • -
  • lzop
  • -
  • make
  • -
  • OpenGL shared libraries
  • -
  • patch
  • -
  • X11 headers
  • -
  • 32-bit ncurses
  • -
  • 32-bit zlib
  • -
  • unzip
  • -
-
- -

Ubuntu 12.04 LTS / Debian 6 / Linux Mint 13

- -

Exécutez la commande suivante dans un Terminal :

- -
sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libasound-dev libgconf2-dev libgl1-mesa-dev libx11-dev lzop make zip libxml2-utils nodejs unzip python
- -

vous pouvez installer le jdk via ce ppa.

- -

Ubuntu 14.04 LTS / Debian 7

- -

Tout d'abord, lancez les commandes suivantes pour définir les architectures requises :

- -
sudo dpkg --add-architecture i386
-sudo dpkg --add-architecture amd64
-
- -

Ensuite, exécutez la commande suivante dans un Terminal :

- -
sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-7-jdk nodejs unzip python
-
- -

Ubuntu 16.04

- -
-

Ubuntu 16.04, juin 2016, la version de make est 4.1, ce qui empêche la construction d'android ; si vous rencontrez ce cas, vous devrez ajouter le dépôt trusty (14.04) et revenir à la version 3.81 en exécutant cette commande :

- -
sudo apt-get install make=3.81-8.2ubuntu3
- -

ensuite, pour éviter toute mise à jour automatique, vous pouvez marquer le paquet make avec hold pour le conserver

- -
sudo apt-mark hold make 
-
- -

Premièrement, lancez les commandes suivantes pour définir les architectures requises :

- -
sudo dpkg --add-architecture i386
-sudo dpkg --add-architecture amd64
-
- -

Ensuite, exécutez la commande suivanre dans un Terminal :

- -
sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-8-jdk nodejs unzip python
-
- -

Ubuntu 16.10

- -

Sur ubuntu 16.10, la version par défaut de make est la 4.1 ce qui empêche la compilation d'android ; pour résoudre ce problème, entrez les commandes suivantes dans la console :

- -
wget http://ftp.us.debian.org/debian/pool/main/m/make-dfsg/make_3.81-8.2_amd64.deb
-
-sudo dpkg -i make_3.81-8.2_amd64.deb
- -

Ensuite, pour éviter les mises à jour automatiques, vous pouvez marquer le paquet make comme étant à conserver :

- -
sudo apt-mark hold make
- -

Vous devez ansuite ajouter les architectures requises :

- -
sudo dpkg --add-architecture i386
-
-sudo dpkg --add-architecture amd64 
- -

Puis, lancez la commande suivante dans un Terminal :

- -
sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-8-jdk nodejs unzip python 
- -

 

- -

Configurer l'accès USB

- -

Sur les systèmes Linux, par défaut, les utilisateurs classiques ne peuvent pas accéder directement aux périphériques USB. Il faut configurer des règles udev. Créez un fichier appelé /etc/udev/rules.d/51-android.rules avec la commande suivante :

- -

À FAIRE : Fusionner avec le bogue 1230463

- -
wget -S -O - https://raw.githubusercontent.com/cm-b2g/B2G/1230463/tools/51-android.rules | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
-
-wget -S -O - https://raw.githubusercontent.com/mozilla-b2g/B2G/master/tools/51-android.rules | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
- -

Les nouvelles règles prendront effet au prochain branchement d'un périphérique.

- -

Configurer ccache

- -

Une tonne de code est compilée mais une grande quantité ne change pas d'une version à l'autre. Nous pouvons considérablement accélérer la construction avec l'outil de compilation ccache. Attribuez-lui un cache de 50 Go avec la commande suivante :

- -
ccache -M 50G
- -
-

Note : Si vous avez peu d'espace disque, vous pouvez néanmoins définir un cache inférieur à 50 Go.

-
- -

Distributions alternatives

- -

Fedora 22

- -

Lancez la commande suivante dans un Terminal :

- -
sudo yum install autoconf213 bison bzip2 ccache curl flex gawk gcc-c++ git glibc-devel glibc-static libstdc++-static libX11-devel make mesa-libGL-devel ncurses-devel patch zlib-devel ncurses-devel.i686 readline-devel.i686 zlib-devel.i686 libX11-devel.i686 mesa-libGL-devel.i686 glibc-devel.i686 libstdc++.i686 libXrandr.i686 zip perl-Digest-SHA wget lzop libxml2-utils
- -

Arch Linux

- -

Lancez la commande suivante dans un Terminal :

- -
sudo pacman -S --needed alsa-lib autoconf2.13 bison ccache curl firefox flex gcc-multilib git gperf libnotify libxt libx11 mesa multilib-devel wget wireless_tools yasm zip lib32-mesa lib32-mesa-libgl lib32-ncurses lib32-readline lib32-zlib lzop
- -

Pour installer les paquets lib32-*, vous devrez activer le dépôt multilib.

- -

Par défaut, Arch Linux utilise Python 3. Vous allez devoir le forcer à utiliser l'ancien Python 2. C'est possible en faisant un lien depuis l'exécutable python2 vers python mais cela est déconseillé et considéré comme source d'erreurs. Cela va également casser Python 3 s'il est installlé sur votre système. Une meilleure méthode consiste à utiliser virtualenv/virtualenvwrapper :

- -
sudo pacman -S python-virtualenvwrapper
-source /usr/bin/virtualenvwrapper.sh
-mkvirtualenv -p `which python2` firefoxos
-workon firefoxos
-
- -

Ainsi, l'exécution de

- -
python --version
- -

Donne comme résultat "Python 2.7.12".

- -

Gentoo Linux

- -
Installation de ccache
- -

Vous aurez besoin d'installer ccache, un outil pour mettre en cache des constructions partielles.

- -
# emerge -av ccache
-
- -

Comme ccache est connu pour souvent provoquer des problèmes, Gentoo encourage les personnes à l'utiliser de manière explicite et avec parcimonie.

- -

Pour activer l'utilisation nécessaire de ccache, lors de l'étape suivante de ce guide où le script ./build.sh script est appelé, les utilisateurs de Gentoo doivent à la place lancer la commande avec un chemin explicite étendu, c'est-à-dire :

- -
PATH=/usr/lib64/ccache/bin:$PATH ./build.sh
-
- -

Génération des images de partitions

- -

Si vous compilez B2G pour un véritable appareil physique, alors vous serez amené à un certain moment à générer certaines images de partitions pour les envoyer sur votre appareil. (Par exemple, pour restaurer des fichiers sauvegardés vers l'appareil via l'utilitaire fastboot)

- -

Le format utilisé pour l'image du système de fichiers dans ce cas est YAFFS2 (Yet Another Filesystem 2). Gentoo intègre le support de la toute dernière version (ie. git HEAD) du paquet yaffs2-utils en espace utilisateur dans le portage. (Note : Vous aurez aussi besoin de correctifs noyau si vous souhaitez monter des images YAFFS2, mais ce n'est pas vraiment obligatoire car à la place vous pouvez les déconstruire puis les reconstruire.)

- -
# emerge --autounmask-write yaffs2-utils; etc-update; emerge -av yaffs2-utils
- -

Afin de générer une telle image, placez-vous simplement dans le répertoire parent de l'arborescence du système de fichiers de la partition que vous voulez empaqueter, puis envoyez  une commande comme ceci :

- -
mkyaffs2image system/ system.img
- -

Branches anciennes

- -

Si vous souhaitez compiler une ancienne branche de B2G OS, des erreurs de compilation peuvent survenir. Voir la page Construire d'anciennes branches.

- -

Prérequis pour OS X

- -
-

Note : La configuration et la compilation de B2G pour Keon ne fonctionne pas sur Mac. Il vous faut utiliser Linux pour construire B2G pour cet appareil.

-
- -
-

Note : La compilation de B2G pour Fairphone2 ne fonctionne pas sur Mac. Il vous faudra utiliser Linux pour construire B2G pour cet appareil. La cause est l'échec de la vérification MD5 des blobs ; pour plus d'informations, voir : Lien

-
- -

La construction de B2G OS sur OS X est possible, mais elle n'est ni facile ni très bien supportée. Il sera nécessaire d'installer une ancienne version de Xcode qui pourrait interférer avec la version actuelle si vous l'utilisez déjà. Pour une meilleure expérience, vous devriez compiler sur Ubuntu 14.04 LTS. Cependant, si vous insistez, essayez ces étapes :

- -

OS X 10.11 El Capitan et OS X 10.10 Yosemite

- -
-

Important : La construction sur OS X 10.11 El Capitan est expérimentale et peut ne pas se terminer ! Restez sur OS X 10.10 Yosemite jusqu'à ce que les instructions ci-dessous soient améliorées et que cet avertissement soit supprimé.

-
- -

Système de fichiers sensible à la casse

- -

L'installation par défaut d'OS X ne convient pas pour la compilation de B2G OS. Il vous faut réinstaller OS X sur un système de fichiers sensible à la casse.

- -

Xcode 7.2

- -
    -
  1. Installez la dernière version de Xcode à partir de l'Apple Store.
  2. -
  3. Acceptez la licence avec la commande suivante :
  4. -
- -
sudo xcodebuild -license
- -

Xcode Command Line Tools

- -

Installez Xcode Command Line Tools avec la commande suivante :

- -
xcode-select --install
- -

Xcode 5.1.1

- -
-

Important : Veuillez installer Homebrew et ses outils (voir la section ci-dessous) avant de passer à celle du SDK de Xcode 5.1.1 - l'installation d'Homebrew sur le SDK Xcode 5.1.1 va échouer !

-
- -

AOSP, et par conséquent B2G OS, n'est pas compatible avec la dernière version du SDK d'Xcode. Nous avons besoin d'installer une version plus ancienne à côté de la plus récente.

- -
    -
  1. Téléchargez Xcode 5.1.1 depuis developer.apple.com et installez-le dans /Applications/Xcode-5.1.1
  2. -
  3. Basculez vers l'utilisation du SDK Xcode 5.1.1 avec la commande suivante :
  4. -
- -
sudo xcode-select --switch "/Applications/Xcode-5.1.1/Xcode.app/Contents/Developer"
- -

Java SE Development Kit 7

- -

AOSP, et par conséquent B2G OS, n'est pas compatible avec le JDK Java v8, il est donc nécessaire d'installer le JDK Java v7. Vous pouvez le télécharger depuis http://www.oracle.com/.

- -

Profil Bash

- -

Ajouter les lignes suivantes à votre fichier ~/.bash_profile :

- -
export PATH=~/bin:$PATH
-export PATH=/usr/local/bin:$PATH
-export BUILD_MAC_SDK_EXPERIMENTAL=1
-export LC_CTYPE=C
-export LANG=C
-export USE_CCACHE=1
- -

Homebrew

- -

Nous devons installer certains outils en ligne de commande en plus car ils ne sont pas fournis par Apple. Installez Homebrew :

- -
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- -

Ensuite, installez les outils avec la commande suivante :

- -
brew install ccache coreutils cmake findutils git gnu-tar gnu-sed gpg lzop yasm
- -

Il faut une version spécifique d'autoconf, la version 2.13 :

- -
brew install homebrew/versions/autoconf213
-
- -

Configurer ccache

- -

Beaucoup de code est compilé mais une grande partie de change pas selon les versions. La vitesse de compilation peut être considérablement accélérée avec l'outil de compilation ccache. Attribuez-lui un cache de 50 Go avec la commande suivante :

- -
prebuilts/misc/darwin-x86/ccache/ccache -M 50G
- -

Anciennes instructions pour OS X

- -

Exécutez B2G OS Mac Bootstrap

- -

Ensuite, ouvrez un terminal et lancez la commande suivante :

- -
curl -fsSL https://raw.github.com/mozilla-b2g/B2G/master/scripts/bootstrap-mac.sh | bash
- -

Cela va récupérer et lancer un script de bootstrap qui va s'assurer que vous disposez de tous les éléments requis pour construire l'émulateur. Il vous demandera aussi la permission d'installer ce qui pourrait manquer et fournir des avertissements et des suggestions de correction en cas de problème.

- -

Pour développer avec B2G, vous allez avoir besoin de récupérer une branche particulière. Cette dernière est à télécharger depuis Mercurial. (en apprendre plus) Comme OSX ne dispose pas de Mercurial par défaut, vous devez l'installer avec ce code :

- -
$ brew install mercurial
- -

Tenez compte de la sensibilité à la casse du système de fichiers Mac

- -

Par défaut, OS X est installé sur un système de fichiers insensible à la casse. Cela pose problème car le noyau Linux contient un certain nombre de fichiers avec des noms identiques, mais avec des casses différentes. Par exemple, les fichiers d'en-tête xt_CONNMARK.h et xt_connmark.h Cela a pour conséquence de faire paraître un certain nombre de fichiers comme ayant été modifiés dans /kernel après un tout récent ./config.sh.

- -

Dans de nombreux cas, vous pouvez lancer la compilation sans problème ; sur certaines plateformes par contre, vous pouvez rencontrer l'erreur suivante :

- -
ERROR: You have uncommited changes in kernel
-You may force overwriting these changes
-with |source build/envsetup.sh force|
-
-ERROR: Patching of kernel/ failed.
- -

Veuillez vous référer au bogue 867259 pour plus de détails et des correctifs éventuels pour ce problème.

- -

Sinon, ce sera toujours plus sûr de compiler sur un système de fichiers sensible à la casse. La méthode la plus simple pour cela consiste à créer une image disque montable, distincte, avec la sensibilité à la casse activée. Faîtes attention à ne pas utiliser de lettres en capitale si vous changez le nom spécifié par -volname. L'image peut être créée avec l'application d'Apple Disk Utility ou en ligne de commande :

- -
hdiutil create -volname 'firefoxos' -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/firefoxos.sparseimage
- -

Montez le lecteur avec :

- -
open ~/firefoxos.sparseimage
- -

Changez de répertoire vers le lecteur monté avec :

- -
cd /Volumes/firefoxos/
- -

Vous pouvez ensuite récupérer le code et le compiler depuis cet emplacement sans vous préoccuper des problèmes de sensibilité à la casse.

- -

Optionnel : Installer HAX

- -

Intel fournit un pilote spécial qui permet à l'émulateur B2G d'exécuter son code en natif sur votre Mac au lieu de l'émuler lorsque vous utilisez l'émulateur x86. Si vous souhaitez l'utiliser, vous pouvez le télécharger et l'installer. Ce n'est pas obligatoire, mais cela peut améliorer les performances et la stabilité de l'émulation.

- -

Avant que vous ne puissiez installer HAX, vous devez installer le SDK d'Android.

- -

Installer adb

- -

Le processus de construction a besoin d'extraire les blobs binaires de l'installation d'Android présente sur le téléphone avant de compiler B2G (sauf si vous construisez l'émulateur bien sûr). Dans ce but, il sera nécessaire d'avoir adb (Android Debug Bridge). Notre article Installer ADB explique comment faire.

- -
-

Note pour plus tard lorsque vous commencerez à utiliser adb : l'écran de verrouillage du téléphone doit être déverrouillé pour qu'adb puisse voir votre téléphone (au moins dans les dernières versions de B2G OS). Vous préférerez sans doute désactiver l'écran de verrouillage (nous verrons comment plus loin dans les instructions de compilation).

-
- -

Étapes additionnelles pour le Samsung Galaxy S2

- -

Si vous envisagez de compiler pour le Samsung Galaxy S2, il vous sera aussi nécessaire d'avoir installé heimdall. Voir Installer heimdall pour les détails. Le script de bootstrap ne le fera pas à votre place !

- -

De plus, vous devez garder à l'esprit les points suivants :

- -
    -
  1. Lorsqu'éventuellement vous êtes sur le point d'installer votre build sur un appareil S2, avant de lancer le script flash.sh, vous devez remplacer toutes les occurences de factoryfs par FACTORYFS, ainsi que kernel par KERNEL (vérifiez la sortie de pit pour confirmation), sinon cela ne fonctionnera pas.
  2. -
  3. La ROM de Recovery Siyah-s2 est celle qui fonctionne le mieux. CWM fonctionne bien aussi, mais présente quelques soucis.
  4. -
  5. Flasher votre S2 avec flash.sh va permettre de faire fonctionner l'OS de base mais la version de Gaia incluse peut avoir des problèmes. La rafraîchir avec make reset-gaia PRODUCTION=1 devrait les résoudre.
  6. -
- -
Note : Si vous avez installé l'outil Samsung Kies, lequel est utilisé pour gérer le contenu de nombreux téléphones Samsung, vous aller devoir le supprimer avant de pouvoir flasher B2G OS sur votre appareil. Vous pouvez employer le procédé classique de Windows pour désinstaller l'application ; sur Mac, le disque d'installation de Kies contient un utilitaire pour complétement supprimer Kies du système. Le flashage ne fonctionnera pas si Kies est installé. Si vous oubliez de le supprimer, le système de compilation va le détecter et vous rappeler de le désinstaller. Remarquez aussi que l'outil de désinstallation ne supprime pas correctement le dossier ~/Library/Application Support/.FUS, et y laisse une référence à un utilitaire dans votre liste d'éléments de démarrage utilisateur. Vous pourrez les supprimer manuellement.
- -

Installer heimdall

- -

Heimdall est un utilitaire pour flasher le Samsung Galaxy S2. Il est utilisé par l'utilitaire de flashage de Boot to Gecko aussi bien pour remplacer le contenu du téléphone par B2G OS que pour flasher des versions mises à jour de B2G et de Gaia sur l'appareil. Vous en aurez besoin si vous voulez installer B2G OS sur un Galaxy S2 ; il n'est pas nécessaire pour les autres appareils. Pour ces derniers, nous construisons et utilisons l'utilitaire fastboot à la place.

- -
Note : Encore une fois, il est important de noter que cela est nécessaire uniquement pour installer B2G OS sur le Samsung Galaxy S2.
- -

Il y a deux méthodes pour installer heimdall :

- - - -
-

Note : À l'heure actuelle, compiler la dernière version d'Heimdall à partir des sources génère des erreurs. Il vaut mieux à la place utiliser la version sous forme de paquet 64 bits des dépôts Ubuntu 14.04. i.e. n'utilisez pas heimdall-flash:i386 si vous pouvez l'éviter.

-
- -

Prochaine étape

- -

À ce stade, vous êtes prêt pour récupérer le code source de B2G OS !

diff --git a/files/fr/archive/b2g_os/quickstart/index.html b/files/fr/archive/b2g_os/quickstart/index.html deleted file mode 100644 index 197236620c..0000000000 --- a/files/fr/archive/b2g_os/quickstart/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Build -slug: Archive/B2G_OS/Quickstart -tags: - - Apps - - TopicStub -translation_of: Archive/B2G_OS/Quickstart ---- -
-

Informations de démarrage rapide sur le codage des applications Web ouvertes.

-
- -
-
Introduction aux applications Web ouvertes
-
Que sont les applications Web ouvertes? En quoi diffèrent-elles des pages Web régulières? Pourquoi est-ce important? Cet article vise à répondre à ces questions et plus encore.
-
Votre première application
-
Cet article vous guide à travers les étapes de base et les connaissances supplémentaires en plus du développement Web régulier requis pour créer des applications Web ouvertes installables.
-
Introduction à Firefox OS
-
Une introduction à Firefox OS, la nouvelle plate-forme mobile ouverte basée sur les applications Web de Mozilla
-
Introduction aux manifestes
-
Une FAQ conçue pour répondre à toutes vos questions sur les manifestes, l'hébergement d'applications, les origines et d'autres sujets similaires.
-
Développement d'applications pour les développeurs Web
-
Si vous êtes un développeur Web, en quoi les applications Web ouvertes diffèrent-elles de ce à quoi vous êtes habitué? Cet article explique tout.
-
Développement d'applications pour les développeurs mobiles
-
Si vous êtes un développeur d'applications mobiles natives, quels avantages les applications Web ouvertes peuvent-elles vous apporter et en quoi diffèrent-elles de ce à quoi vous êtes habitué? Voici quelques idées.
-
Développer la fonctionnalité de l'application
-
Cette page décrit les types de fonctionnalités différentes que vous pourriez souhaiter intégrer à vos applications, avec des liens vers des informations supplémentaires.
-
Paiements
-
Comment créez-vous des fonctionnalités pour faire payer les gens pour l'installation de vos applications Web ouvertes? Voici la vérité.
-
Outils d'application
-
Enfin pour cette section, nous fournissons des liens vers plus d'informations sur les outils disponibles pour vous aider à développer d'excellentes applications Web ouvertes.
-
diff --git a/files/fr/archive/b2g_os/quickstart/votre_premier_application/index.html b/files/fr/archive/b2g_os/quickstart/votre_premier_application/index.html deleted file mode 100644 index fb7aee2781..0000000000 --- a/files/fr/archive/b2g_os/quickstart/votre_premier_application/index.html +++ /dev/null @@ -1,261 +0,0 @@ ---- -title: Votre première application -slug: Archive/B2G_OS/Quickstart/Votre_premier_application -tags: - - Applications - - Débutant - - Guide -translation_of: Archive/B2G_OS/Quickstart/Your_first_app ---- -
-
-

Les Open Web apps donnent aux développeurs web ce qu'ils ont attendu pendant des années: un environnement multi-plateforme dédié aux applications installables créées avec HTML, CSS et JavaScript - avec Firefox OS qui est la première plate-forme ouverte dédiée aux applications web. Ce guide vous permet de démarrer rapidement avec une architecture de base ainsi que les   premières instructions. Vous pourrez ainsi créer la prochaine application révolutionnaire!

-
- -

Si vous souhaitez suivre ce guide, vous pouvez télécharger nos modèles d'applications de démarrage rapide. Vous trouverez plus d'informations à propos de ce dernier en lisant notre guide sur les modèles d'applications.

- -

Structure de l'application

- -

Packaged vs. Hosted Apps

- -

Il y a deux types d'applications web : packaged(empaquetées) et hosted(hébergées) . Les applications empaquetées sont essentiellement des fichiers zip contenant toutes les ressources de l'application : HTML, CSS, JavaScript, images, manifeste, etc. Les applications hébergées sont exécutées à partir d'un serveur avec un domaine donné, comme les sites web standards. Les deux types d'application nécessitent un manifeste valide. Quand vous êtes prêt à soumettre votre application au Firefox Marketplace, vous devrez soit uploader votre application sous forme de zip, soit fournir l'URL où votre application est hébergée.

- -
-
-

Réalisé en partenariat avec Treehouse: PASSEZ CHEZ EUX !

-
-
- -

Pour les besoins de ce tutoriel, vous allez créer une application qui sera hébergée sur votre adresse localhost. Une fois votre application prête à être postée dans le Firefox Marketplace, vous pourrez choisir la forme que prendra votre application : packaged app ou hosted app.

- -

App Manifests

- -

Chaque  application Firefox requiert un fichier manifest.webapp dans l'application racine. Le fichier manifest.webapp produit d'importantes informations sur l'application, comme la version, le nom, la description, les logos, les chaines locales, les domaines auquels l'application peut être installé, et beaucoup d'autres. Seulement le nom et la description sont requis. Le simple manifest inclus dans les modèles d'application est similaire à celui ci-dessous:

- -
{
-  "version": "0.1",
-  "name": "Open Web App",
-  "description": "Your new awesome Open Web App",
-  "launch_path": "/app-template/index.html",
-  "icons": {
-    "16": "/app-template/app-icons/icon-16.png",
-    "48": "/app-template/app-icons/icon-48.png",
-    "128": "/app-template/app-icons/icon-128.png"
-  },
-  "developer": {
-    "name": "Your Name",
-    "url": "http://yourawesomeapp.com"
-  },
-  "locales": {
-    "es": {
-      "description": "Su nueva aplicación impresionante Open Web",
-      "developer": {
-        "url": "http://yourawesomeapp.com"
-      }
-    },
-    "it": {
-      "description": "Il vostro nuovo fantastico Open Web App",
-      "developer": {
-        "url": "http://yourawesomeapp.com"
-      }
-    }
-  },
-  "default_locale": "en"
-}
- -
-
-

Fait en partenariat avec Treehouse: PASSER CHEZ EUX

-
-
- -

 

- -

Un manifest basique est tout ce dont vous avez besoin pour commencer. Pour plus de détails a propos des manifests, lire App Manifest.

- -

Disposition et Design de l'application

- -

Le Responsive design est devenu  de plus en plus important comme plusieurs résolutions d'écrans deviennent des standards sur différents appareils. Même si le principal objectif de votre application sont les plateformes mobiles comme Firefox OS, d'autres appareils y auront aussi probablement accès. CSS media queries vous autorise à l'adapter selon la disposition de votre appareil, comme le montre ce petit exemple CSS:

- -
/* The following are examples of different CSS media queries */
-
-/* Basic desktop/screen width sniff */
-@media only screen and (min-width : 1224px) {
-  /* styles */
-}
-
-/* Traditional iPhone width */
-@media
-  only screen and (-webkit-min-device-pixel-ratio : 1.5),
-  only screen and (min-device-pixel-ratio : 1.5) {
-  /* styles */
-}
-
-/* Device settings at different orientations */
-@media screen and (orientation:portrait) {
-  /* styles */
-}
-@media screen and (orientation:landscape) {
-  /* styles */
-}
- -

Il ya beaucoup de Frameworks JavaScript et CSS frameworks disponibles pour aider dans le responsive design et dans le développement  d'application mobile (Bootstrap, etc.) Choisissez le/les framework(s) qui est(sont) le(s) mieux adapté(s) à votre application et votre style de développement.

- -

APIs du Web

- -

Des APIs JavaScript ont été créés et augmentés rapidement comme les appareils. L'effort WebAPI de Mozilla apporte des dizaines de fonctionnalités mobiles standard aux APIs JavaScript . Une liste des supports et status de périphérique est disponible sur la page WebAPI. La détection de fonctionnalités JavaScript est encore aujourd'hui un bon usage, comme montré dans l'exemple suivant :

- -
// If this device supports the vibrate API...
-if('vibrate' in navigator) {
-    // ... vibrate for a second
-    navigator.vibrate(1000);
-}
- -

Dans l'exemple suivant, la méthode d'affichage d'un <div> est modifiée en fonction de l'état de la batterie du périphérique :

- -
// Create the battery indicator listeners
-(function() {
-  var battery = navigator.battery || navigator.mozBattery || navigator.webkitBattery,
-      indicator, indicatorPercentage;
-
-  if(battery) {
-    indicator = document.getElementById('indicator'),
-    indicatorPercentage = document.getElementById('indicator-percentage');
-
-    // Set listeners for changes
-    battery.addEventListener('chargingchange', updateBattery);
-    battery.addEventListener('levelchange', updateBattery);
-
-    // Update immediately
-    updateBattery();
-  }
-
-  function updateBattery() {
-    // Update percentage width and text
-    var level = (battery.level * 100) + '%';
-    indicatorPercentage.style.width = level;
-    indicatorPercentage.innerHTML = 'Battery: ' + level;
-    // Update charging status
-    indicator.className = battery.charging ? 'charging' : '';
-  }
-})();
- -

Dans le code ci-dessus, une fois qu'il est confirmé que l'API Battery est supporté, vous pouvez ajoutez des event listeners pour chargingchange et levelchange afin d'actualiser l'affichage de l'élément. Essayez d'ajouter ce qui suit au modèle de démarrage rapide, et voyez si vous pouvez le faire fonctionner.

- -

Référez-vous fréquemment à la page WebAPI pour vous mettre à jour avec les états d'API du périphérique.

- -

Installer la fonctionnalité API

- -

In our sample quickstart app template, we've implemented an install button that you can click when viewing the app as a standard Web page, to install that site on Firefox OS as an app. The button markup is nothing special:

- -
<button id="install-btn">Install app</button>
- -

This button's functionality is implemented using the Install API (see install.js):

- -
var manifest_url = location.href + 'manifest.webapp';
-
-function install(ev) {
-  ev.preventDefault();
-  // define the manifest URL
-  // install the app
-  var installLocFind = navigator.mozApps.install(manifest_url);
-  installLocFind.onsuccess = function(data) {
-    // App is installed, do something
-  };
-  installLocFind.onerror = function() {
-    // App wasn't installed, info is in
-    // installapp.error.name
-    alert(installLocFind.error.name);
-  };
-};
-
-// get a reference to the button and call install() on click if the app isn't already installed. If it is, hide the button.
-var button = document.getElementById('install-btn');
-
-var installCheck = navigator.mozApps.checkInstalled(manifest_url);
-
-installCheck.onsuccess = function() {
-  if(installCheck.result) {
-    button.style.display = "none";
-  } else {
-    button.addEventListener('click', install, false);
-  };
-};
-
- -

Let's run through briefly what is going on:

- -
    -
  1. We get a reference to the install button and store it in the variable button.
  2. -
  3. We use navigator.mozApps.checkInstalled to check whether the app defined by the manifest at http://people.mozilla.com/~cmills/location-finder/manifest.webapp is already installed on the device. This test is stored in the variable installCheck.
  4. -
  5. When the test is successfully carried out, its success event is fired, therefore installCheck.onsuccess = function() { ... } is run.
  6. -
  7. We then test for the existence of installCheck.result using an if statement. If it does exist, meaning that the app is installed, we hide the button. An install button isn't needed if it is already installed.
  8. -
  9. If the app isn't installed, we add a click event listener to the button, so the install() function is run when the button is clicked.
  10. -
  11. When the button is clicked and the install() function is run, we store the manifest file location in a variable called manifest_url, and then install the app using navigator.mozApps.install(manifest_url), storing a reference to that installation in the installLocFind variable. You'll notice that this installation also fires success and error events, so you can run actions dependent on whether the install happened successfully or not.
  12. -
- -

You may want to verify the implementation state of the API when first coming to Installable web apps.

- -
-

Note: Installable open web apps have a "single app per origin" security policy; basically, you can't host more than one installable app per origin. This makes testing a bit more tricky, but there are still ways around this, such as creating different sub-domains for apps, testing them using the Firefox OS Simulator, or testing the install functionality on Firefox Aurora/Nightly, which allows you to install installable web apps on the desktop. See FAQs about apps manifests for more information on origins.

-
- -

WebRT APIs (Permissions-based APIs)

- -

There are a number of WebAPIs that are available but require permissions for that specific feature to be enabled. Apps may register permission requests within the manifest.webapp file like so:

- -
// New key in the manifest: "permissions"
-// Request access to any number of APIs
-// Here we request permissions to the systemXHR API
-"permissions": {
-    "systemXHR": {}
-}
- -

The three levels of permission are as follows:

- - - -

For more information on app permission levels, read Types of packaged apps. You can find out more information about what APIs require permissions, and what permissions are required, at App permissions.

- -
-

It's important to note that not all Web APIs have been implemented within the Firefox OS Simulator.

-
- -

Tools & Testing

- -

Testing is incredibly important when supporting mobile devices. There are many options for testing installable open web apps.

- -

Firefox OS Simulator

- -

Installing and using the Firefox OS Simulator is the easiest way to get up and running with your app. After you install the simulator, it is accessible from the Tools -> Web Developer -> Firefox OS Simulator menu. The simulator launches with a JavaScript console so you can debug your application from within the simulator.

- -

App Manager

- -

The new kid on the block with regards to testing tools is called the App Manager. This tool allows you to connect desktop Firefox to a compatible device via USB (or a Firefox OS simulator), push apps straight to the device, validate apps, and debug them as they run on the device.

- -

Unit Testing

- -

Unit tests are extremely valuable when testing on different devices and builds. jQuery's QUnit is a popular client-side testing utility, but you can use any set of testing tools you'd like.

- -

Installing Firefox OS on a Device

- -

Since Firefox OS is an open source platform, code and tools are available to build and install Firefox OS on your own device. Build and installation instructions, as well as notes on what devices it can be installed on, can be found on MDN.

- -

Dedicated Firefox OS developer preview devices are also available: read our Developer preview phone page for more information.

- -

App Submission and Distribution

- -

Once your app is complete, you can host it yourself like a standard web site or app (read Self-publishing apps for more information), or it can be submitted to the Firefox Marketplace. Your app's manifest will be validated and you may choose which devices your app will support (e.g. Firefox OS, Desktop Firefox, Firefox Mobile, Firefox Tablet). Once validated, you can add additional details about your app (screenshots, descriptions, price, etc.) and officially submit the app for listing within the Marketplace. Once approved, your app is available to the world for purchase and installation.

- -

More Marketplace & Listing Information

- -
    -
  1. Submitting an App to the Firefox OS Marketplace
  2. -
  3. Marketplace Review Criteria
  4. -
  5. App Submission Video Walkthrough
  6. -
-
diff --git a/files/fr/archive/b2g_os/releases/1.0.1/index.html b/files/fr/archive/b2g_os/releases/1.0.1/index.html deleted file mode 100644 index 2ed41f7a99..0000000000 --- a/files/fr/archive/b2g_os/releases/1.0.1/index.html +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Firefox OS 1.0.1 pour les développeurs -slug: Archive/B2G_OS/Releases/1.0.1 -tags: - - Firefox OS - - Notes de version -translation_of: Archive/B2G_OS/Releases/1.0.1 ---- -
-

Firefox OS 1.0.1 a tout d'abord été proposé aux partenaires pour une distribution le 2 juillet 2013 ; ce fut la première version officielle de Firefox OS. Son composant Gecko est basé sur Firefox 18 (voir Firefox 18 pour les développeurs), publié le 18 janvier 2013. Pour les versions plus anciennes, consultez les notes de version des anciens Firefox pour ordinateur de bureau, en commençant par Firefox 17 pour les développeurs. Cette page détaille les fonctionnalités développeur nouvellement implémentées dans Firefox OS 1.0.1.

-
- -

HTML

- -

Spécifique à Firefox OS :

- - - -

Commun à Gecko :

- - - -

CSS

- -

Commun à Gecko :

- - - -

JavaScript

- -

Spécifique à Firefox OS :

- - - -

Commun à Gecko :

- - - -

DOM/API

- -

Spécifique à Firefox OS :

- - - -

Commun à Gecko :

- - - -

Réseau

- -

Commun à Gecko :

- - - -

Fonctionnalités notables de la version 1.0.1

- - - -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/releases/1.1/index.html b/files/fr/archive/b2g_os/releases/1.1/index.html deleted file mode 100644 index 14de4a6b76..0000000000 --- a/files/fr/archive/b2g_os/releases/1.1/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Firefox OS 1.1 pour les développeurs -slug: Archive/B2G_OS/Releases/1.1 -tags: - - Firefox OS - - Notes de version -translation_of: Archive/B2G_OS/Releases/1.1 ---- -
-

Firefox OS 1.1 est une pré-version de Firefox OS, initialement distribuée auprès des partenaires pour être publiée le 21 octobre 2013. Son composant Gecko est basé sur Firefox 18 (voir Firefox 18 pour les développeurs) tout comme pour Firefox OS 1.0.1, mais avec certaines corrections de bogues supplémentaires et l'ajout d'APIs. Cette page détaille les fonctionnalités pour développeur nouvellement implémentées dans Firefox OS 1.1.

-
- -

HTML

- -

Spécifique à Firefox OS :

- - - -

JavaScript

- -

Spécifique à Firefox OS :

- - - -

DOM/API

- -

Spécifique à Firefox OS :

- - - -

Support HD dans Firefox OS

- -

Depuis Firefox OS 1.1, il existe des versions HD disponibles pour apporter ce support à des appareils avec écrans à haute densité. Il s'agit principalement d'un changement visuel uniquement, traité de la même façon que s'il s'agissait d'autres appareils de résolutions différentes, et rien de plus ne sera visible comme différence au niveau de la plate-forme sous-jacente.

- -

Problèmes corrigés dans Firefox OS

- - - -

Plantages résolus

- -

Fonctionnalités notables de Firefox OS 1.1

- - - -

Voir aussi

- - - -

Anciennes versions

- -

- -

diff --git a/files/fr/archive/b2g_os/releases/2.0/index.html b/files/fr/archive/b2g_os/releases/2.0/index.html deleted file mode 100644 index 8fd2a38ab8..0000000000 --- a/files/fr/archive/b2g_os/releases/2.0/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Firefox OS 2.0 for developers -slug: Archive/B2G_OS/Releases/2.0 -translation_of: Archive/B2G_OS/Releases/2.0 ---- -
-

This page details the developer features newly implemented in Gecko that are specific to Firefox OS 2.0.

-
-
-

Firefox OS 2.0's Gecko component is based on Firefox 31/32.

-
-

New product features

-

This section provides a summary of the new features available in Firefox OS 2.0. For more details on specific platform changes (API additions, etc.), see the Platform additions in detail section.

-
-
- NFC
-
- This release includes support for device-to-device content sharing support with NFC (Near Field Communication). You can pair your device with another, then swipe to share your contacts, media, or favorite URLs with others.
-
- Telephony
-
- Firefox OS now supports both IPv4 and IPv6 addresses in the network manager.
-
- Find My Device
-
- If you’ve lost your Firefox OS smartphone, Find My Device can help you find it (see the http://find.firefox.com website). You can see it on a map, make it play a sound and have it display a message. You can also remotely lock it or delete your personal info. To get started, create a Firefox Account (Settings > Firefox Accounts on your device) and enable Find My Device (Settings > Find My Device).
-
- Media
-
- You can now create your own ringtones using your own music collection, or songs you download from the Web.
-
- Camera
-
- The Camera app now supports various focus modes: Touch, Continuous Auto and Face tracking.
-
- Productivity
-
- We've done a visual refresh of the Email, Calender, and Clock apps.
-
- Homescreen
-
- Firefox OS 2.0 introduces a simpler vertical-scrolling homescreen with larger icons.
-
- Edge-gesture app switching
-
- Edge gestures are now available for switching between apps (swipe your thumb from the left edge of the screen to the right and vice versa, to switch between multiple open apps.)
-
-

New partner features

-
-
- E.ME integration
-
- E.ME integration provides direct access to web apps while configurable search providers can search the web at the same time.
-
-

New DevTools features

-

The Firefox Developer Tools have had a large number of features added in Firefox versions 31 and 32; these aren't Firefox OS-specific, but you can take advantage of them when debugging your Firefox OS apps through WebIDE. To find out more, read:

- -

Platform additions in detail

-
-

Note: Our list here includes features most important to Firefox OS. For an expanded list of general Gecko feature additions (which are generally also present in Firefox OS 2.0), consult the Firefox 31 release notes for developers and Firefox 32 release notes for developers.

-
-

Web API

- -

CSS

- -

Technology support improvements

- -

Older versions

-

- -

diff --git a/files/fr/archive/b2g_os/releases/2.1/index.html b/files/fr/archive/b2g_os/releases/2.1/index.html deleted file mode 100644 index 694ebf60df..0000000000 --- a/files/fr/archive/b2g_os/releases/2.1/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Firefox OS 2.1 for developers -slug: Archive/B2G_OS/Releases/2.1 -translation_of: Archive/B2G_OS/Releases/2.1 ---- -
-

Le composant Gecko de Firefox OS 2.1 est basé sur Firefox 33/34. Cette page détaille les fonctionnalités pour développeurs nouvellement implémentées dans Gecko et spécifiques à Firefox OS 2.1.

-
- -
-

Note: Pour les fonctionnalités générales de Gecko, qui sont généralement aussi présentes dans Firefox OS Gecko, consulter Firefox 33 release notes for developers et Firefox 34 release notes for developers.

-
- -

Changement de plateforme

- -

Firefox OS est habitué à avoir une politique de sécurité  "application unique par origine", mais ceci a été levé à partir de Firefox 34/Firefox OS 2.1 (lire cette FAQ pour plus d'informations). Si vous avez quand même besoin de supporter les anciennes versions, hébergez vos applis sur des origines différentes; une stratégie consiste à  créer différents sous domaines pour vos applis.

- -

Changement d'API web

- - - -

Voir aussi

- - - -

Anciennes Versions

- -

- -

diff --git a/files/fr/archive/b2g_os/releases/2.2/index.html b/files/fr/archive/b2g_os/releases/2.2/index.html deleted file mode 100644 index 7b1699ab97..0000000000 --- a/files/fr/archive/b2g_os/releases/2.2/index.html +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: Firefox OS 2.2 pour les développeurs -slug: Archive/B2G_OS/Releases/2.2 -tags: - - '2.2' - - Firefox OS - - Notes de version -translation_of: Archive/B2G_OS/Releases/2.2 ---- -
-

Cette page détaille les fonctionnalités développeurs nouvellement implémentées dans Gecko et qui sont spécifiques à Firefox OS 2.2, ainsi que les fonctionnalités du produit et des outils de développement, et d'autres points notables de cette nouvelle version.

-
- -
-

Note : Le composant Gecko de Firefox OS 2.2 est basé sur Firefox 35/36/37.

-
- -

Fonctionnalités du produit

- -

Cette section énumère différentes catégories de fonctionnalités nouvelles ou améliorées.

- -

Fonctionnalités systèmes

- -
-
Bluetooth
-
Bluedroid a été déplacé dans un processus distinct pour accroître la sécurité (bug 1005934.)
-
Sélection de texte
-
Pour prendre en charge le Copier/Coller, des possibilités de sélection de texte ont été ajoutées au système.
-
WebRTC
-
Le rendu matériel a été ajouté sur WebRTC pour améliorer la gestion de l'alimentation et économiser l'autonomie de la batterie (bug 1043558.)
-
SIM Tool Kit (STK)
-
Le support STK a été ajouté pour lire les numéros d'urgence (bug 1061130.)
-
Les icônes STK sont maintenant affichées sur les pages des services SIM (bug 1016807.)
-
Recherche
-
L'expérience utilisateur pour la recherche a été améliorée pour faciliter le choix du moteur de recherche par l'utilisateur (bug 1099157.)
-
Les suggestions de recherche basées sur du texte sont à présent obtenues depuis le moteur de recherche par défaut, ce qui permet de trouver plus facilement ce que l'utilisateur recherche (bug 1098494.)
-
Vie privée
-
Les utilisateurs peuvent désormais naviguer sans enregistrer d'historique grâce à la navigation privée (bug 1081731.)
-
La prise en charge a été ajoutée pour ajuster la précision de la position vers une position approximative d'après différents types basiques de détection de position (désactivé par défaut) (bug 1073419.)
-
Plate-forme
-
Le démarrage des applications et les performances générales ont été améliorés (bug 1074783bug 1082262bug 1082268 et bug 1086963.)
-
Sur les appareils disposant de peu de RAM, les utilisateurs pourront constater de meilleures performances (le support des Cgroup réduisant le swapping des processus de haute priorité) (bug 1082290.)
-
Le support d'Android L a été ajouté (bug 1094121.)
-
Le support des extensions est maintenant disponible pour étendre les fonctionnalités de Firefox OS (désactivé par défaut) (bug 923897.)
-
Langue/Localisation
-
Les langues qui se lisent de droite à gauche sont maintenant gérées par Firefox OS (bug 906270.)
-
Métriques
-
L'ajout de la possibilité d'avoir des rapports sur les utilisateurs actifs chaque mois permet de meilleures métriques (bug 1109422.)
-
NFC
-
Les applications tierces peuvent à présent employer les APIs NFC (bug 1102019.)
-
- -

Applications système

- -
-
Téléphone (Composeur)
-
Les appels téléphoniques peuvent être mis en attente depuis l'écran d'appel actif (bug 977588.)
-
SMS/MMS
-
Les messages MMS peuvent maintenant être envoyés vers des adresses de messagerie électronique (bug 997547 et bug 1091486.)
-
Les contacts peuvent à présent être partagés au format VCF/vCard via courriel, messages, et Bluetooth (bug 1007932.)
-
Courriel
-
Il est maintenant possible de joindre aux courriels des fichiers téléchargés présents dans le gestionnaire de téléchargement. (bug 1113152.)
-
Les comptes de courriel peuvent maintenant être configurés manuellement soit en texte clair soit avec SSL (bug 1046799.)
-
Il n'y a plus de contraintes sur les types de fichiers que l'utilisateur peut télécharger pour les pièces-jointes reçues (bug 825318.)
-
Écran d'accueil
-
Il est encore plus simple d'organiser et grouper du contenu sur l'écran d'accueil grâce à la nouvelle possibilité de grouper des applications (bug 1067435.)
-
Clavier
-
Les utilisateurs ont maintenant la possibilité de sélectionner du texte (appuyez et maintenez enfoncé pour sélectionner un mot, puis éditez la sélection avec les poignées fournies), coupez ou copiez le texte sélectionné vers le presse-papiers, et collez-en le contenu dans le texte affiché à la position actuelle.
-
- -

Paramètres

- -
-
Paramètres
-
Un nouveau menu  pour le filtrage d'appels a été ajouté aux paramètres (bug 910552.)
-
Vie privée
-
De nouveaux paramètres ont été ajoutés pour permettre à l'utilisateur d'ajuster les paramètres de confidentialité qui contrôlent le partage des données stockées sur le téléphone (désactivé par défaut) (bug 1083953.) Quand l'option est activée, voir Paramètres > Confidentialité navigation.
-
- -

Nouvelles fonctionnalités des DevTools

- -

Nous avons ajouté un bouton "Réinitialiser et activer les outils de développement" aux Paramètres Développeurs de Firefox OS pour donner de plus grandes permissions sur votre appareil — cela est important pour ceux d'entre-vous qui ne peuvent pas rooter leur appareil — cette option ne nécessite pas les privilèges root.

- -
-

Note : Vous pouvez toujours trouver des détails sur les nouveaux outils de développement Firefox et sur ceux à venir en regardant dans la catégorie Mozilla Hacks Developer Tools.

-
- -

Modifications de la plate-forme et ajouts en détail

- -
-

Note : Notre présente liste comporte les fonctionnalités les plus importantes de Firefox OS. Pour une liste plus complète des ajouts aux caractéristiques générales de Gecko (qui sont en général également présentes dans Firefox OS 2.2), consultez les notes de version Firefox 35 pour développeurs, les notes de version Firefox 36 pour développeurs et les notes de version Firefox 37 pour développeurs.

-
- -

Changements de l'API Web

- - - -

Annonces de sécurité

- -

Une liste complète des annonces de sécurité de Firefox OS 2.2 est disponible.

- -

Anciennes versions

- -

- -

diff --git a/files/fr/archive/b2g_os/releases/2.5/index.html b/files/fr/archive/b2g_os/releases/2.5/index.html deleted file mode 100644 index 387969b7ee..0000000000 --- a/files/fr/archive/b2g_os/releases/2.5/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Firefox OS 2.5 pour les développeurs -slug: Archive/B2G_OS/Releases/2.5 -tags: - - '2.5' - - Firefox OS - - Notes de version -translation_of: Archive/B2G_OS/Releases/2.5 ---- -
-

Cette page détaille les fonctionnalités développeurs nouvellement implémentées dans Gecko et qui sont spécifiques à Firefox OS 2.5, ainsi que les fonctionnalités du produit et des outils de développement, et d'autres points notables de cette nouvelle version.

-
- -
-

Note : Le composant Gecko de Firefox OS 2.5 est basé sur celui de Firefox à partir de la version 38.

-
- -

Fonctionnalités du produit

- -

Cette section énumère différentes catégories de fonctionnalités nouvelles ou améliorées.

- -

Nouvelles fonctionnalités systèmes

- -
-
 
-
L'app Bugzilla Lite
-
Fournit la possibilité de signaler des bogues/demandes de fonctionnalités directement depuis l'appareil (bug 1180660.)
-
Modules
-
Fournit la possibilité de personnaliser l'expérience de l'utilisateur selon ses envies (bug 1180672.)
-
Écrans d'accueil remplaçables
-
L'utilisateur peut maintenant choisir entre plusieurs écrans d'accueil différents (bug 1180665.)
-
L'API Web Speech
-
Permet aux développeurs d'implémenter des applications qui peuvent être contrôlées par la voix (bug 1051148.)
-
Épinglage de la page web
-
Cette fonction permet de parcourir le web et d'épingler un site web sur l'écran d'accueil de sorte que les utilisateurs puissent avoir un accès facile et rapide aux contenus qui les intéressent (bug 1180669.)
-
Protection contre le pistage
-
Les utilisateurs peuvent à présent naviguer en sécurité sur le web sans être pistés (bug 1180674.)
-
Durée de démarrage et performances de l'appareil
-
Les régressions de performances/démarrage ont été éradiquées de Firefox OS 2.5, garantissant une bonne expérience dès l'allumage de l'appareil (bug 1180695, bug 1180696.)
-
Personnalisation après le premier démarrage
-
Les vendeurs d'appareils ont désormais la possibilité de proposer à leurs clients des applications de leur choix lors du premier démarrage (bug 1180707.)
-
Expérience RTL améliorée
-
Firefox OS 2.5 dispose d'un bien meilleur support des langues RTL, assurant ainsi un meilleur support des langues pour toute notre base d'utilisateurs (bug 1179459.)
-
Première implémentation de la nouvelle architecture de Gaia (NGA, soit New Gaia Architecture)
-
La première étape consiste à séparer les architectures frontend et backend des applications Gaia, ce qui permettra de nombreuses améliorations dans le futur (bug 1180716.)
-
Voir le code source
-
Quand l'appareil est en mode développeur, les utilisateurs peuvent directement voir dessus le code source des applications intégrées (bug 1188671.)
-
API Presentation
-
 Autorise le développeur à activer des contenus web pour accéder à des affichages externes de type présentation puis à les utiliser pour faire des présentations web (bug 1184073.)
-
 
-
-

Firefox OS TV–fonctionnalités spécifiques

-
-
Navigateur TV
-
 Support du facteur d'encombrement TV pour le navigateur de Firefox OS (bug 1190158.)
-
Intégration de Compte Firefox dans le Navigateur TV
-
 Permet aux utilisateurs des TV de synchroniser leurs marque-pages et historique via leur Compte Firefox dans le navigateur (bug 1194108.)
-
Récepteur de requête pour l'API Presentation
-
Permet aux TV sous Firefox OS de recevoir des URLs envoyées depuis d'autres appareils via des appels à l'API Presentation (bug 1205999.)
-
Métriques pour la TV
-
 Les métriques de Firefox OS sont maintenant activées pour le facteur d'encombrement TV (bug 1199319.)
-
- -

Nouvelles fonctionnalités des DevTools

- -
-

Note : Vous pouvez toujours trouver des détails sur les nouveaux outils de développement Firefox et sur ceux à venir en regardant dans la catégorie Mozilla Hacks Developer Tools.

-
- -

Modifications de la plate-forme et ajouts en détail

- -
-

Note : Notre présente liste comporte les fonctionnalités les plus importantes de Firefox OS. Pour une liste plus complète des ajouts aux caractéristiques générales de Gecko (qui sont en général également présentes dans Firefox OS 2.5), consultez les plus récentes notes de version de Firefox pour développeurs.

-
- -

JavaScript

- - - -

Changements de l'API Web

- - - -

Bogues et régressions

- -

Un appui long sur une image en mode édition provoque l'apparition d'un menu contextuel dont les options ne fonctionnent pas correctement à cause d'un sélecteur d'activité incorrect. Cette régression a été corrigée début octobre (voir bug 1198522.)

- -

Annonces de sécurité

- -

Aucune jusqu'à présent.

- -

Anciennes versions

- -

- -

diff --git a/files/fr/archive/b2g_os/releases/index.html b/files/fr/archive/b2g_os/releases/index.html deleted file mode 100644 index 3c4c86b0d5..0000000000 --- a/files/fr/archive/b2g_os/releases/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Firefox OS developer release notes -slug: Archive/B2G_OS/Releases -tags: - - Firefox OS - - TopicStub -translation_of: Archive/B2G_OS/Releases ---- -

Notes de version de Firefox OS par version

- -

Cette section fournit des articles couvrant chaque nouvelle version de Gaia et Gecko pour Firefox OS, expliquant quelles fonctionnalités ont été ajoutées et les bogues éliminés dans chaque mise à jour. Il existe également un tableau récapitulatif lié indiquant les API prises en charge par chaque version de Firefox OS.

- -
-
    -
  1. Firefox OS 1.0.1 pour les développeurs
  2. -
  3. Firefox OS 1.1 pour les développeurs
  4. -
  5. Firefox OS 2.0 pour les développeurs
  6. -
  7. Firefox OS 2.1 pour les développeurs
  8. -
  9. Firefox OS 2.2 pour les développeurs
  10. -
  11. Firefox OS 2.5 pour les développeurs
  12. -
-
- -

Autres informations complémentaires

- -
-
Tableau de prise en charge de l'API Firefox OS
-
Répertorie les différentes API disponibles et les versions de Firefox qui les prennent en charge.
-
Permissions d'application
-
Répertorie les API hébergées, privilégiées et certifiées, ainsi que des informations sur les autorisations qu'elles doivent avoir définies dans le manifeste d'application de vos applications installables, telles que le nom de l'autorisation manifeste, le type d'application requis, la description, la propriété d'accès et l'autorisation par défaut.
-
diff --git a/files/fr/archive/b2g_os/resources/index.html b/files/fr/archive/b2g_os/resources/index.html deleted file mode 100644 index 3023f24587..0000000000 --- a/files/fr/archive/b2g_os/resources/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Ressources -slug: Archive/B2G_OS/Resources -tags: - - Firefox OS -translation_of: Archive/B2G_OS/Resources ---- -

Ressources pour hackers d'applications, produites par nos ateliers

- -

Simulateur Firefox OS

- -

Simulateur Firefox OS

- -

https://developer.mozilla.org/fr/docs/Outils/Simulateur_Firefox_OS/
- https://addons.mozilla.org/fr/firefox/addon/firefox-os-simulator/

- -

Développer/installer une app

- -

Firefox OS Boilerplate App (travail en cours)

- -

https://github.com/robnyman/Firefox-OS-Boilerplate-App
- http://robnyman.github.com/Firefox-OS-Boilerplate-App/
-
- (version basique avec bouton Install, Web Activities, exemples de WebAPI, support hors-ligne facultatif etc)

- -

Code pour version avec app empaquetée :

- -

https://github.com/robnyman/Firefox-OS-Boilerplate-App/tree/packaged-app

- -

FxOSStub (modèle/design pour une app avec un bouton Install) :

- -

https://github.com/Jaxo/fxosstub
-
-     Recommandé : à héberger sur votre propre serveur ou via des pages GitHub   
-     (http://pages.github.com/). Exemple sur http://robnyman.github.com/Firefox-OS-Boilerplate-App/

- -

Mortar :

- -

https://hacks.mozilla.org/2013/01/writing-web-apps-quickly-with-mortar/

- -

Design patterns :

- -

https://marketplace.firefox.com/developers/docs/patterns

- -

Charte graphique de Firefox OS  :

- -

https://t.co/I9VaxvBu
-
- droid@screen : http://blog.ribomation.com/droid-at-screen/

- -

WebAPIs

- -

WebAPIs en version 1 :

- -

https://wiki.mozilla.org/WebAPI

- -

Documentation des APIs et leur statut :

- -

https://developer.mozilla.org/fr/docs/MDN/Doc_status/API

- -

Diaporama de Robert sur les Web APIs

- -

http://www.slideshare.net/robnyman/web-apis-apps-mozilla-london

- -

Writing (good) Webapps :

- -

http://jlongster.github.com/writing-webapps/

- -

Firefox Marketplace & Developer Hub

- -

Rapporter un bogue à propos de Marketplace !

- -

https://bugzilla.mozilla.org/enter_bug.cgi?product=Marketplace&component=General

- -

Developer Hub

- -

https://marketplace.firefox.com/developers/

- -

Liste de diffusion WebApps

- -

https://lists.mozilla.org/listinfo/dev-webapps

- -

Serveur de développement Marketplace (s'attendre à des bogues !)

- -

http://marketplace-dev.allizom.org/

- -

Apps de référence (Chrono, Face Value, Roller) :

- -

https://marketplace.firefox.com/developers/docs/apps/chrono

- -

WebPayments

- -

https://wiki.mozilla.org/WebAPI/WebPayment
- https://wiki.mozilla.org/WebAPI/WebPaymentProvider

- -

Pitfalls and helpers for mobile Web apps

- -

Diaporama de Rob Pitfalls and Helpers

- -

http://www.slideshare.net/robhawkes/mobile-app-development-pitfalls-helpers
-  

diff --git a/files/fr/archive/b2g_os/running_tests_on_firefox_os_for_developers/index.html b/files/fr/archive/b2g_os/running_tests_on_firefox_os_for_developers/index.html deleted file mode 100644 index 7219ca4082..0000000000 --- a/files/fr/archive/b2g_os/running_tests_on_firefox_os_for_developers/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: 'Running tests on Firefox OS: A guide for developers' -slug: Archive/B2G_OS/Running_Tests_on_Firefox_OS_for_Developers -translation_of: Archive/B2G_OS/Running_Tests_on_Firefox_OS_for_Developers ---- -
-

Les équipes behind our automation harnesses have been working hard to expand our automated testing infrastructure to accomodate Firefox OS as well as writing new harnesses to specifically target testing a phone OS rather than a browser (which our old harnesses were specialized for). Due to the architecture of Firefox OS all these test harnesses will work and will apply, but that also makes things rather complicated and you are a developer and just want to run some tests to see if your patch worked or not. This article aims to make sense of all the available testing resources at Mozilla.

-
- -

Getting started

- -

If you are a Gecko developer, then you should review the Firefox OS-specific documentation for the test automation you are already familar with: mochitest, reftest, and xpcshell.

- -

If you are a Gaia or App developer, or if you're a Gecko developer interested in doing a deeper "end user" style test where you actually exercise the OS, then you'll need to look into the Gaia test suites. There are two primary test suites:

- - - -

Which one you choose really depends on your preferred toolchain, and what things you want to test.

- -

Let's now move and look at running these tests.

- -

Running the Gaia UI Tests

- -

The Gaia UI Test suite can be run on real devices and B2G Desktop builds, but in this section we'll concentrate on running them on a real device, as real devices are always best where possible.

- -

Note that this test is destructive and as such, you should back up anything you care about on the phone before running these tests. Depending on which tests you run, they can also make phone calls. So be aware that you want to be very careful about what you run and how you back up the phone, remove the SIM card, etc.  That said, if you've already created an engineering build they are really easy to get running. Here's how.

- -

One Time Set up

- -

You only need to perform the following steps once, assuming you do not change the location of your Gaia directory. Create a python virtualenv (install the virtualenv tool first if you haven't already), activate it, and install the gaia UI test tool into your virtualenv. By creating the virtual environment using the steps below, you ensure that you are running the gaia UI test harness code that lives in your Gaia repo (that's useful in case you need to debug anything).

- -
$ virtualenv gaia_ui_venv # This will create a gaia_ui_venv directory where the virtual environment lives. It can be anywhere on your system.
-$ source gaia_ui_venv/bin/activate # This activates our virtualenv
-(gaia_ui_venv)$ cd <b2groot>/gaia/tests/python/gaia-ui-tests;python setup.py develop # This installs the gaia ui harness into your virtual environment. 
- -

If you have already created a virtual environment for gaia ui tests, you can simply do the following:

- -
$ source gaia_ui_venv/bin/activate
- -

To Run the Tests

- -

First you need to create the testvars file. To do this, copy the standard one over, and add in the attributes to turn off the warnings that this test will destroy all content on your phone. These are good tests, they leave no state around and as such, you will need to make sure your phone is backed up before running them. Instructions from here on will assume you've activated the virtual environment and are working in the gaia/tests/python/gaia-ui-tests directory.

- -
(gaia_ui_venv)$ cp gaiatest/testvars_template.json testvars.json
-# Now edit your copy of testvars.json and add in the following attributes into the json:
-"acknowledged_risks": true,
-"skip_warning": true,
- -

Now you just need to connect our phone via USB, forward the marionette port so your test runner can access it and run our tests. The tests are in gaiatest/tests and you can pick whichever one you want to run. For example, if you wanted to run contacts tests you would do the following:

- -
(gaia_ui_venv)$ adb forward tcp:2828 tcp:2828
-(gaia_ui_venv)$ gaiatest --testvars=testvars.json --address=localhost:2828 gaiatest/tests/functional/contacts/
- -
-

Note: To find out what UI tests are available, browse through the gaiatest directories inside the Gaia repo.

-
- -

To get out of the python virtualenv, just use the special virtualenv command deactivate:

- -
(gaia_ui_venv)$ deactivate
-$
- -
-

Note: To learn more about the Gaia UI Tests and find more detailed information, move on to the Gaia UI Tests pages.

-
- -

Running the Gaia Integration tests

- -

To run the Gaia Integration tests tests you currently have to use a B2G Desktop build (note that these are also going to be available for devices soon as well). Let's look at how this is done.

- -

These just require a Gaia tree and NodeJS to be installed on your computer; the following command will do the rest:

- -
$ cd gaia $ make test-integration 
- -

That's it — this instruction will download a B2G desktop build, and start running the tests in that build.

- -
-

Note: To learn more about Gaia Integration Tests, read the Gaia Integration Tests Github repo.

-
- -
-

Note: To find out what integration tests are available, look in the apps directory in the Gaia repo; integration tests can be found in test/marionette/ subfolders.

-
- -

Wrapping Up

- -

As always, work is underway to make all our tests easier to run both locally for developers as well as in our automation systems. Feel free to drop into the #ateam channel any time you have questions about test automation for Firefox OS or any of the Mozilla automation tools.

diff --git a/files/fr/archive/b2g_os/samsung_nexus_s/index.html b/files/fr/archive/b2g_os/samsung_nexus_s/index.html deleted file mode 100644 index a23dbdacbc..0000000000 --- a/files/fr/archive/b2g_os/samsung_nexus_s/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Samsung Nexus S -slug: Archive/B2G_OS/Samsung_Nexus_S -tags: - - B2G - - Firefox OS - - NexusS - - Samsung - - nexus_s -translation_of: Archive/B2G_OS/Phone_guide ---- -

Le Nexus S est une plate-forme de second rang (tier 2) pour Firefox OS. Ce n'est pas une cible, mais il y a du support pour le processus de construction. Toute aide pour supporter cet équipement est la bienvenue. Notez qu'à partir de mi-mars 2015, il n'est plus utilisé activement ni maintenu.

- -

Compatibilité

- -

Les équipements i9020, i9020A, i9023 et SHW-M200k sont connus pour fonctionner. Une liste complète de problèmes relatifs au support de cet équipement est disponible à cette adresse : https://bugzilla.mozilla.org/show_bug.cgi?id=b2g-nexuss.

- -

Utilisabilité (jusqu'à v1.1)

- -

Le téléphone devrait être utilisable au quotidien sans problème bloquant. Jusqu'ici, voici ce qui doit correctement fonctionner en construisant un système Gecko 18 (BRANCH=v1-train ./config.sh nexus-s) :

- - - -

Utilisabilité (master, depuis v1.4/2.0)

- -

La plupart des fonctionnalités doivent marcher. La lecture et l'enregistrement vidéo ne fonctionnent pas complètement.

- -

Problèmes à l'exécution

- -

WiFi Tethering

- -

Le WiFi Tethering fonctionne, mais il semble que le Wifi soit indisponible après l'avoir désactivé. Décharger puis recharger le pilote noyau Wifi ou redémarrer l'appareil permettent de contourner ce problème.

- -
rmmod bcm4329 && insmod /system/modules/bcm4329.ko iface_name=wlan0
- -

Dépôts de modifications

- -

Utilisez la branche gecko-18-local (et gecko-18-local+hd) pour le dépôt mozilla-central, master-local pour les autres.

- - - -

Plus d'informations

- -

Vous trouverez un fil de discussion à propos de Firefox OS sur le Nexus S ici http://forum.xda-developers.com/showthread.php?t=1924367. Il devrait contenir des images relativement à jour et fonctionnelles.

diff --git a/files/fr/archive/b2g_os/screencast_series_colon__app_basics_for_firefox_os/index.html b/files/fr/archive/b2g_os/screencast_series_colon__app_basics_for_firefox_os/index.html deleted file mode 100644 index 8e65a0d478..0000000000 --- a/files/fr/archive/b2g_os/screencast_series_colon__app_basics_for_firefox_os/index.html +++ /dev/null @@ -1,226 +0,0 @@ ---- -title: 'Screencast series: App Basics for Firefox OS' -slug: 'Archive/B2G_OS/Screencast_series:_App_Basics_for_Firefox_OS' -tags: - - API - - Apps - - B2G - - Firefox OS - - Marketplace - - Videos -translation_of: 'Archive/B2G_OS/Firefox_OS_apps/Screencast_series:_App_Basics_for_Firefox_OS' ---- -
-

Firefox OS est un système d'exploitation qui apporte les technologies du Web aux smartphones. Au lieu d'être un nouvel OS avec de nouvelles technologies et des environnements de développements, il est construit sur des technologies web standardisées utilisées depuis des années. Si vous êtes un développeur web et que vous voulez coder une application mobile, Firefox OS vous donne les outils pour le faire, sans devoir changer votre workflow ou apprendre à utiliser un nouvel environnement de développement. Dans cette collection de petites vidéos, les développeurs de Mozilla et de Telenor se sont rencontrés à Oslo, en Norvège pour expliquer en quelques étapes comment vous pouvez commencer à coder des applications pour Firefox OS.

-
- -

Dans cette série vous apprendrez:

- - - -
-

Note: Chacune des vidéos est assez courte pour être regardée durant une courte pause; la série entière se regarde en moins d'une heure.

-
- -

Code et environnement de développement
-  

- -

En plus des vidéos, vous pouvez télécharger les exemples de codes depuis GitHub. Si vous voulez essayer les exemples vous-même, vous devrez mettre en place un environnement de développement simplifié. Vous aurez besoin de:

- - - -

Introduction

- -

Interviennent dans cette série Jan Jongboom (@janjongboom) et Sergi Mansilla (@sergimansilla) de Telenor Digital, de Chris Heilmann (@codepo8) de Mozilla; cette série a été tournée en trois jours à Oslo, en Norvège au siège social de Telenor, en février 2014.

- -

Voici les trois d'entre nous qui vous parleront de cette série et ce à quoi vous attendre:

- -

- -

Section 1: Construire sa première application Firefox OS et la publier

- -

Dans les cinq captures vidéos de la Section 1 nous vous montrons comment construire une application Firefox OS, comment la déboguer et la tester sur votre ordinateur — ainsi que sur un vrai appareil, et comment la mettre sur le Marketplace Firefox. Cela peut sembler être une charge de travail fastidieuse mais vous découvrirez bien assez vite que si vous savez déjà comment construire un site web, vous avez déjà accompli 90% du travail.

- -

Plus qu'un site web

- -

Les applications Firefox OS sont des applications HTML5. Par définition, elles utilisent les même technologies que les sites web. Vous pouvez commencer à écrire un site web et le transformer en application simplement en lui rajoutant un fichier manifeste (voir manifeste d'application pour plus de détails). Ce dernier dit à Firefox OS que vous écrivez une application et vous permet de:

- - - -

Par essence, les applications HTML5 sont des sites web suralimentées et devraient suivre les mêmes règles, comme:

- - - -

La principale différence est que pour qu'un site web devienne une bonne application, vous devriez vraiment prendre en compte les utilisateurs mobile. Cela signifie tout d'abord que votre application devrait:

- - - -

Dans beaucoup de cas, cela signifie que vous devriez faire amincir votre page web et simplifier l'interface. La bonne nouvelle est que tous les utilisateurs en bénéficieront.

- -

- -
-

Note: Pour en apprendre plus sur le design d'une bonne application HTML5, regardez du coté de la page Applications [fr].

-
- -

Le manifeste d'application

- -

Le manifeste d'application dans Firefox OS est un simple fichier JSON qui donne des informations au système d'exploitation sur votre application. C'est lui qui transforme une page web en application web ouverte. Dans celui-ci, vous allez définir le nom et demander au système d'exploitation d'avoir accès à plusieurs services et au matériel. Vous pouvez aussi définir l'orientation apropriée pour votre application et si besoin, la verrouiller.

- -

- -

Plus d'informations sur le manifeste et les outils qui peuvent vous aider:

- - - -

Le Gestionnaire d'application

- -

La façon la plus simple de commencer avec Firefox OS est d'utiliser le gestionnaire d'applications. Cet outil fait parti des outils de développement de Firefox pour pc et vous permet de vous connecter à un émulateur de Firefox OS tournant sur votre ordinateur, ou sur un véritable appareil Firefox OS si vous en possédez un. De là, vous pouvez jouer avec Firefox OS, installer des applications directement sur l'émulateur ou sur un vrai appareil, et les déboguer pendant qu'elle tournent sur Firefox OS. Ceci permettra de voir immédiatement les changements sans réinstaller ou mettre à jour les applications.

- -

La vidéo suivante montre les premiers pas avec le Gestionnaire d'application dans l'émulateur:

- -

- -
-

Note: Le Gestionnaire d'application vous permet de déboguer sans problème vos applications même si vous êtes hors-ligne

-
- -

Pour plus d'informations sur le Gestionnaire d'application:

- - - -

L'essayer sur votre appareil

- -

Tester vos applications sur l'émulateur c'est bien, mais vous ne pourrez pas dépasser les limites de l'environnement d'émulation. Si vous voulez tester les performances d'interaction de votre appareil, ou le faire réagir à l'orientation, vous aurez besoin d'un vrai appareil. Avec le Gestionnaire d'application et les outils de développements, vous pouvez regarder en détail ce qu'il se passe dans votre application sur votre appareil pendant son utilisation.

- -

- -

Publier sur le Marketplace

- -

Le Marketplace de Firefox OS est l'endroit qui convient le mieux pour ajouter votre application dans la liste et la rendre accessible aux autres personnes et à leur appareil ainsi que sur le Web. Le Marketplace vous permet aussi de mettre à disposition votre application sur d'autres plateformes comme Firefox Desktop et Firefox pour Android. Vous pouvez aussi permettre aux utilisateurs de noter votre application, vous donner des retours d'utilisation, et acheter votre application en utilisant un simple processus de vérification. Rajouter votre application est très simple:

- - - -

- -

Les applications soumises au Marketplace sont verifiées par l'équipe de vérification d'applications de Mozilla et vous serez notifié de l'état de votre soumission d'application dans les jours qui suivent. S'il y a des problèmes avec votre application vous recevrez un message durant la période de validation mais il se peut aussi que vous receviez des explications humaines de ce qui ne va pas et comment les réparer.

- -
-

Note: Lisez Proposer une application sur le Firefox Marketplace pour plus d'informations sur le processus de soumission d'application.

-
- -

Section 2: Sujets avancés du Firefox OS

- -

Dans les première vidéos nous vous avons présenté Firefox OS et comment construire votre première application. Nous avons aussi expliqué comment déboguer votre application sur le pc, sur un vrai appareil et comment le proposer sur le Marketplace Firefox. Dans les cinq vidéos restantes nous allons aller plus loin dans l'explication des technologies qui permettent aux applications Firefox OS de gagner en puissance et vous donner accès aux fonctionnalités qui rendent le développement sur un smartphone ou une tablette intéressant pour les développeurs. Bien que certaines de ces technologies soient en cours de travaux sur le Firefox OS, elles sont toutes open-source et soumises aux standards. Travailler avec ces APIs aujourd'hui signifie que vous êtes prêt pour les prochains appareils et plateformes à venir.

- -

APIs Web

- -

Les smartphones contiennent de puissantes technologies: cameras, accéléromètre et un GPS pour ne nommer qu'eux. Le problème est que celles-ci n'étaient pas accessible par les technologies web, mais en créant des applications natives. Pour réparer cela, Mozilla et ses partenaires ont définit des APIs pour permettre aux développeurs de contrôler le matériel des appareils mobiles en utilisant le JavaScript de manière sécurisée. Elles sont appelées les Web APIs, elles sont libres et peuvent être implémentées. Firefox OS est la première plateforme qui les utilisent, la vidéo suivante vous en dira plus:

- -

- -

Plus d'informations sur les Web APIs:

- - - -

Web Activities

- -

Web Activities sont une alternative pour accéder au matériel d'un appareil. Au lieu d'utiliser une API pour communiquer directement avec l'appareil, les Web Activities vous permettent de créer un écosystème d'applications sur votre appareil qui communiqueront et partageront leur fonctionnalités. Par exemple, au lieu d'essayer d'accéder à la caméra directement, votre application peut utiliser une Web Activity pour demander une image et l'utilisateur utilisera son application favorite pour prendre une photo, qui sera ensuite envoyée à l'application correspondante.

- -

Au lieu de demander aux utilisateurs l'accès à leur matériel (ce qui, en terme de sécurité est important) vous leur permettrez d'utiliser les applications auxquelles ils font déjà confiance pour s'occuper de ces fonctionnalités. Mieux encore, vous pouvez enregistrer votre application pour accomplir certaines tâches dans le système d'exploitation. Vous pouvez comparer les Web Activities à un Clic droit sur un fichier sur votre ordinateur et choisir quelle application utiliser pour ouvrir le fichier. Vous avez accès à plusieurs choix dont une pour demander au système d'exploitation de toujours utiliser cette application pour ouvrir ce type de fichier.

- -

Les Web Activities permettent aux application de communiquer entre-elles, sur l'appareil, sans nécessiter de serveur entre. Tout ce qu'elles transmettent d'une application à l'autre sont les données finales.

- -

- -

Plus d'informations sur les Web Activities:

- - - -

Push Notifications

- -

Les Push Notifications, appelées en utilisant l'API Web SimplePush, sont un moyen de réveiller les applications quand un appareil reçoit un certain message. Cela vous permet de créer des applications qui peuvent rester éteintes, et donc qui économisent de la batterie, jusqu'à ce que vous en ayez besoin. Utiliser les notifications ainsi a aussi l'avantage de ne pas transporter de données. Ainsi Mozilla n'obtiendra jamais d'informations sur votre application et des attaquants potentiels ne pourront pas observer l'application.

- -

- -

Plus d'information sur les Push Notifications utilisant SimplePush:

- - - -

Fonctionnalités hors-ligne

- -

Les applications ne sont que peu utilisées si elles ne fonctionnent pas hors-ligne. C'est pourquoi la plupart des utilisateurs préfèrent les appliations installées plutôt que d'ouvrir un navigateur et regarder du contenu sur leur navigateur web mobile. Le nom "application web" sous-entend même qu'il faut avoir une connexion pour pouvoir l'utiliser. Nos utilisateurs seront hors-ligne parfois (dans un avion, dans un métro, là où il n'y a pas de connexion vers leur carte SIM) et nous devons nous assurer que nos applications resteront utilisable quand ça arrivera. HTML5 propose plusieurs technologies qui proposent des fonctionnalités hors-ligne, principalement AppCache et DOMStorage.

- -

- -

Plus d'informations sur les fonctionnalités hors-ligne:

- - - -

Où en trouver plus

- -

Nous espèrons que cette série de vidéos vous aura donné une introduction claire pour construire vos premières applications web ouvertes. Si vous voulez en savoir plus, il existe quelques sources supplémentaires que vous pouvez regarder:

- -

- - - -

En espérant vous voir par ici,

- -

Chris, Sergi et Jan

diff --git a/files/fr/archive/b2g_os/securite/application_security/index.html b/files/fr/archive/b2g_os/securite/application_security/index.html deleted file mode 100644 index 07b15909b5..0000000000 --- a/files/fr/archive/b2g_os/securite/application_security/index.html +++ /dev/null @@ -1,224 +0,0 @@ ---- -title: La sécurité des applications -slug: Archive/B2G_OS/securite/Application_security -tags: - - Apps - - Firefox OS - - Guide - - Mobile - - Security -translation_of: Archive/B2G_OS/Security/Application_security ---- -
-

Cet article explique en détail le modèle de sécurité des applications Firefox OS.

-
- -

Les contrôles de sécurité d'applications web introduites dans Firefox OS sont les suivants :

- - - -

Types d'applications

- -

Firefox OS supporte trois types d'applications : web, privilégiée et certifiée. Le type d'application est déclaré dans le manifeste d'application et indique la liste des permissions que chaque application peut demander.

- - - -
-

Note : Pour plus de détails sur les différents types d'applications, voir la documentation du manifeste d'application.

-
- -

Mettre une application à disposition

- -

Sous Firefox OS, les applications peuvent être mises à disposition de deux façons différentes : hébergées ou empaquetées. Les applications web classiques peuvent être mises à disposition via deux mécanismes, les applications privilégiées et certifiées en revanche doivent être empaquetées.

- -

Les applications hébergées

- -

Une application hébergée est constituée uniquement d'un fichier manifeste sur le serveur web du développeur, qui contient un launch_path pour indiquer quelles pages doivent figurer lorsque l'application est lancée. D'un point de vue de la sécurité, les applications hébergées fonctionnent presque comme des sites web normaux. Lorsqu'une application hébergée est chargée, se sont les URL « normales » de ces pages, qui sont chargées. Elles sont chargées depuis le serveur web, ou depuis l'appareil si elles étaient stockées dans un fichier cache.

- -

Les applications empaquetées

- -

Une application empaquetée est un application web ayant l'ensemble de ses ressources (HTML, CSS, JavaScript, manifeste et ainsi de suite) contenues dans un fichier zip (les ressources ne sont pas présentes sur un serveur web). Pour plus de détails sur ce format, voir la page sur les applications empaquetées.

- -

Origine de l'application

- -

Pour les applications hébergées, l'origine de l'application correspond à l'origine du manifeste de l'application.

- -

Pour les applications empacketées, l'origine est affectée de façon unique à l'application lors de l'installation. Les applications privilégiées et certifiées peuvent également demander une origine spécifique en spécifiant le paramètre origin dans le fichier manifeste de l'application.

- -

Installation de l'application

- -

Les applications sont installées grâce à l'API JavaScript Apps  :

- - - -

Afin de garantir qu'une application est bien installée comme une application web, il faut s'assurer que le site web ne trompe pas le mécanisme avec un manifeste d'application. Pour cela, on vérifie que le type MIME du manifeste servi est application/x-web-app-manifest+json. Cette restriction est levée lorsque le manifeste de l'application a la même origine que la page demandant l'installation de l'application.

- -

Mise à jour

- -

Le processus de mise à jour pour les applications est décrit à la page mise à jour des applications.

- -

Autorisations

- -

Les applications peuvent avoir des privilèges supplémentaires par rapport à ceux accordés aux sites web normaux. Par défaut, une application possède les mêmes autorisations qu'une page web normale. Afin d'obtenir des autorisations supplémentaires, il faut tout d'abord lister les autorisations nécessaires dans le manifeste :

- -

Déclaration de manifeste

- -

Pour chaque autorisation supplémentaire, le manifeste doit lister cette autorisation ainsi qu'une description lisible de la raison pour laquelle l'application souhaite accéder à cette autorisation. Par exemple, si une application souhaite utiliser l'API de navigator.geolocation, le manifeste devra contenir le fragment suivant :

- -
"permissions": {
-  "geolocation":{
-    "description": "Required for autocompletion in the share screen",
-  }
-},
-
- -

Cela permettra à l'application de demander la permission pour utiliser la géolocalisation (de la même manière qu'une page web). Pour plus de détails sur le fichier de manifeste, voir manifeste d'application.

- -
-

Note : À l'heure actuelle, les descriptions des autorisations ne sont pas affichées : voir le bug 823385.

-
- -

Accorder les permissions

- -

Lorsque les autorisations sont demandées dans le manifeste, il y a deux modes pour activer les permissions : la demande ou l'activation par défaut. L'activation par défaut est mise en place grâce au manifeste, sans autre interaction. Les permissions demandées sont affichées lors de la première utilisation et l'utilisateur peut choisir d'autoriser ou non l'API. En général, Firefox OS ne demande les autorisations que si celles-ci ont un impact sur la vie privée et qu'il est pertinent que l'utilisateur sache pourquoi l'API est utilisée. Par exemple, l'application demandera une permission pour accéder aux contacts, mais l'établissement d'une connexion TCP brute est implicitement autorisé car ici, il n'est pas nécessaire que l'utilisateur fournisse son accord. Lorsque les applications sont revues pour être intégrées au Marketplace, l'utilisation des permissions est examinée afin d'assurer la protection des utilisateurs.

- -

Révoquer les permissions

- -

À tout moment, les utilisateurs peuvent changer d'avis sur les permissions qui auront été demandées. Pour révoquer une permission, il faut aller dans l'application Paramètres. En revanche, les permissions activées par défaut ne sont pas paramétrables.

- -

Application web Sandbox

- -

Stockage des données par application

- -

Chaque application s'exécute dans une sandbox de façon indépendante, ce qui signifie que toutes les données stockées par une application sont séparées des données stockées par les autres applications. Parmi ces données, on retrouve les cookies, les données locales et les autorisations liées au site.

- -

A diagram showing three Firefox OS apps all open is separate sandboxes, so none of them can affect each other.

- -
-
Cela signifie que si l'utilisateur possède deux applications installées, Appli A et Appli B, ces applications ne partageront pas les cookies, les différentes données locales et les autorisations. Ceci s'applique également si ces deux applications ouvrent un <iframe> qui pointe vers la même origine. Par exemple, si Appli A et Appli B ouvrent un <iframe> pointant vers http://www.mozilla.org, elles iront toutes les deux sur ce site, mais ce dernier sera récupéré et servi avec des cookies distincts selon les deux applications.
- -
 
-
- -

Ainsi, si l'utilisateur se connecte sur Facebook avec l'Appli A, cela n'aura aucun impact sur l'utilisation de Facebook par l'Appli B. Le cookie de connexion entre Facebook et l'Appli A n'est disponible que pour l'Appli A. Si l'Appli B ouvre un <iframe> pour Facebook, le cookie ne sera pas disponible. C'est pourquoi, quand l'Appli B ouvre Facebook, elle affichera la page de connexion plutôt que le compte de l'utilisateur.

- -

Une application ne peut en ouvrir une autre

- -

Cela signifie que les applications ne peuvent pas ouvrir d'autres applications en utilisant les iframes. Si l'application A crée une <iframe> dont le src correspond à l'URL de l'application B, cela n'ouvrira pas l'application B dans l'<iframe>. Cela ouvrira uniquement le site web situé à cet emplacement. Elle n'utilisera aucun des cookies de l'application B et le comportement observé sera le même que si l'application n'était pas installée sur l'appareil de l'utilisateur.

- -

Cela s'applique également aux applications empaquetées (voir ci-après pour plus d'informations). Si l'application A tente d'ouvrir l'application empaquetée B en utilisant un <iframe> dirigeant vers l'URL app:// de l'application B, celle-ci ne sera pas chargée. Cela provoquera une erreur 404 ou une autre erreur. Que l'application B soit installée ou non, cela échouera car l'application A ne peut pas détecter si l'application B est installée.

- -
-
La même chose se produit si la frame de plus haut niveau de l'application A est dirigée vers une URL de l'application B. Pour chaque frame, le système connaît l'application ouverte, ainsi, toute tentative d'ouverture de l'application B depuis une frame de l'application A échouera comme décrit précédemment et l'application A ne pourra accéder à aucune des ressources de B.
- -
 
-
- -

Les raisons de ce fonctionnement

- -

Cette approche possède des avantages et des inconvénients. Un des premiers inconvénients est le suivant : si l'utilisateur interagit avec le même site web à travers plusieurs applications, il devra se connecter à toutes les applications. De même, si un site web veut stocker des données localement et que l'utilisateur interagit avec ce site web parmi les différentes applications, les données vont ainsi se dupliquer pour chaque application. Cela peut poser problème lorsque le volume de données devient conséquent.

- -
-
Le principal avantage de cette approche est qu'il s'agit d'un modèle plus stable. Il est impossible que plusieurs applications interagissent les unes avec les autres par un site tiers de manière inattendue. Par exemple, l'installation d'une application ne peut pas empêcher le fonctionnement d'une autre application. Quand une application est désinstallée, les données utilisées par une autre application ne peuvent pas être supprimées. De même, la désinstallation d'une application ne pourra poser aucun problème de dépendance pour une autre application.
- -
 
- -

Cela permet aussi de bénéficier d'une meilleure sécurité. Un utilisateur peut ainsi utiliser son application SuperRéseauSocial pour se connecter à Facebook sans se soucier du fait que l'application DessineMoiUnMouton puisse exploiter des données tierces grâce à d'éventuelles failles du site.

-
- -

Cela permet aussi de bénéficier de certains avantages en ce qui concerne la vie privée. L'utilisateur peut ainsi installer l'application MonPartiPolitique en toute sécurité sans se soucier du fait que MonAppliProfessionnelle puisse détecter les nouvelles données.

- -

Isolement des permissions

- -
-
De façon analogue aux données, les permissions sont isolées les unes des autres. Ainsi si l'application A charge une page de http://maps.google.com et demande à l'utilisateur la permission d'utiliser la géolocalisation, que l'utilisateur autorise la page et choisit « oui, se souvenir de cette décision », cela signifie seulement que http: //maps.google com aura accès à la géolocalisation depuis l'application A. Si l'application B utilise la page http://maps.google.com, cette page n'aura pas accès à la géolocalisation sauf si l'utilisateur accorde à nouveau la permission.
- -
 
-
- -
-
De façon semblable au navigateur, les permissions sont isolées selon l'origine. Si l'application A est autorisée à utiliser l'API Geolocation, cela ne signifie pas que toutes les origines présentes dans l'application A pourront utiliser l'API. Par exemple, si l'application A ouvre une <iframe> vers http://maps.google.com, alors http://docs.google.com devra demander la permission à l'utilisateur pour pouvoir utiliser l'API de géolocalisation.
- -
 
-
- -

Sandbox pour l'API Browser

- -

Pour sécuriser les applications qui ouvrent un grand nombre d'URL, comme les navigateurs, nous avons ajouté un indicateur (flag) browserContentL'indicateur browserContent permet à chaque application d'avoir non pas un, mais deux bacs à sable (sandboxes) : un pour l'application elle-même et l'autre pour tout le contenu web ouvert par l'application.

- -

Par exemple, si l'application monNavigateur est chargée depuis https://monnavigateur.com, les scripts et ressources seront chargées dans ce bac à sable, ils appartiennent à ce domaine.

- -

Ensuite, si une page de l'application crée un <iframe mozbrowser>, une sandbox différente sera créée et utilisée pour cette <iframe>. Cette sandbox sera différente de la première. Ainsi, si cet <iframe> dirige vers https://monnavigateur.com, cela se traduira par l'utilisation d'autres cookies pour cet <iframe mozbrowser>. De même, le contenu à l'intérieur de la <iframe mozbrowser> verra des données locales différentes de celles correspondant à l'application.

- -

Ceci s'appliquera également si l'application monNavigateur souhaite intégrer des fonctionnalités de Google Maps pour proposer des outils de navigation basés sur la géolocalisation. Ainsi, si l'application ouvre un <iframe> vers http://maps.google.com, il recevra un ensemble de cookies pour http://maps.google.com. Si l'utilisateur navigue alors à l'intérieur du <iframe mozbrowser> contenant http://maps.google.com, cela utilisera différents cookies et d'autres autorisations au niveau le plus haut de l'application.

- -

Voici un autre scénario où cela peut être utile : l'application Yelp. Cette application permet d'ouvrir différents sites Internet de restaurants. En utilisant <iframe mozbrowser>, afin d'ouvrir le site du restaurant, l'application Yelp s'assure que le site web du restaurant ne contiendra pas d'<iframe> pointant vers l'application Yelp. En effet, si le site du restaurant pointe d'une certaine façon vers http://yelp.com, il « verra » le site web Yelp plutôt que l'application. Ainsi, il est théoriquement impossible que le site du restaurant attaque les données de l'application Yelp.

- -

Résumé sur la sécurité des applications

- -
-
Le tableau ci-dessous résume les différents types d'applications de Firefox OS et décrit le format, l'installation et les processus de mise à jour pour les applications web fonctionnant sur Firefox OS.
- -
 
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Les types d'application web
TypeMise à dispositionModèle d'autorisationsInstallationMise à jour
WebHébergée ou empaquetéeLes permissions les moins sensibles qui ont le moins d'impact lorsqu'un contenu web non autorisé est exposéPeut être installée depuis n'importe où -
-
Peut être mis à jour de façon transparente pour l'utilisateur ou explicitement grâce au Marketplace, en fonction de l'emplacement où l'application a été installée et du mécanisme de livraison
-
-
PrivilégiéEmpaquetée ou signéeLes API privilégiées ont besoin d'une validation et d'une authentification de l'applicationDoit être installée depuis le MarketplaceMise à jour via un Marketplace de confiance, l'utilisateur est invité à approuver le téléchargement et l'installation des mises à jour
CertifiéEmpaquetée -
-
Les API puissantes et dangereuses ne sont pas disponibles pour les applications tierces
-
-
L'application est préinstallée sur l'appareilMise à jour uniquement dans le cadre des mises à jour du système
- -
-

Note : Pour la version 1.0 de Firefox OS, bien que les applications web puissent être installées depuis n'importe quel site ou Marketplace, certaines applications privilégiées ne peuvent être installées que depuis le Marketplace de Mozilla. La gestion des autres Marketplace de confiance n'est pas encore finalisée.

-
- -

 

diff --git a/files/fr/archive/b2g_os/securite/index.html b/files/fr/archive/b2g_os/securite/index.html deleted file mode 100644 index d57b968b65..0000000000 --- a/files/fr/archive/b2g_os/securite/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Sécurité dans Firefox OS -slug: Archive/B2G_OS/securite -tags: - - Firefox OS - - Mobile - - Sécurité -translation_of: Archive/B2G_OS/Security ---- -

Les articles suivants sont relatifs à la sécurité de Firefox OS. Ceci inclut les fonctionnalités de sécurité liées au système, la sécurité des applications, les processus d'installation d'applications sécurisés...

- - - - - - - - -
-

Documentation à propos de la sécurité dans Firefox OS

- -
-
Le modèle de sécurité de Firefox OS
-
Un aperçu du modèle de sécurité de Firefox OS.
-
Sécurité du système
-
Détails des mécanismes de sécurité directement inclus dans Firefox OS.
-
Sécurité des applications dans Firefox OS
-
Un aperçu de la manière dont les applications sont sécurisées dans Firefox OS.
-
Installation et mise à jour sécurisée des applications
-
Comment Firefox OS installe et met à jour les applications de manière sécurisée.
-
Permissions logicielles dans Firefox OS
-
Un guide expliquant quelles sont les permissions requises par différents types d'applications pour qu'elles puissent réaliser certaines tâches.
-
 Déboguer et tester la sécurité avec Firefox OS
-
Ce guide vous montre les étapes basiques du test de la sécurité. De l'ouverture d'un débogueur JavaScript à distance pour mettre en place un proxy d'interception HTTP(S) contre une version ordinateur de Firefox OS.
-
- -

Voir tout...

-
-

Obtenir de l'aide de la communauté

- -

Si vous travaillez avec Firefox OS ou développez des applications que vous aimeriez voir fonctionner sur des appareils Firefox OS, des ressources communautaires sont à votre disposition !

- - - -
    -
  • Posez votre question sur le canal IRC de Mozilla : #b2g
  • -
- -

N'oubliez pas la netiquette pour poser vos questions…

- - - - - -
- -

 

- -

-Firefox OS
diff --git a/files/fr/archive/b2g_os/securite/installing_and_updating_applications/index.html b/files/fr/archive/b2g_os/securite/installing_and_updating_applications/index.html deleted file mode 100644 index e133d1e6d2..0000000000 --- a/files/fr/archive/b2g_os/securite/installing_and_updating_applications/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Installation et mise à jour d'applications -slug: Archive/B2G_OS/securite/Installing_and_updating_applications -tags: - - Apps - - Firefox OS - - Guide - - Installation - - Mise à jour -translation_of: Archive/B2G_OS/Security/Installing_and_updating_applications ---- -
-

Cet article constitue un guide sur le processus de mise à jour des application Firefox OS.

-
- -

Vue d'ensemble de l'implémentation

- -

Types d'applications

- -

Il existe de base trois catégories d'applications qui peuvent être mises à jour en utilisant ce mécanisme :

- -
-
Applications centrales
-
Les applications centrales (celles qui sont livrées comme faisant partie du système Firefox OS de base, comme Téléphone) sont empaquetées, certifiées, pré-installées et non supprimables. Elles ne peuvent être mises à jour que lors de la mise à niveau du système complet ou d'une mise à jour des couches Gonk et Gaia.
-
Applications installées par l'utilisateur
-
Les applications installées par l'utilisateur sont soit empaquetées, soit hébergées. La politique de mise à jour est le principal sujet de cet article.
-
Applications tierces pré-installées
-
Ces applications sont pré-installées par l'opérateur ou le fabricant, mais ne font pas partie du cœur du système d'exploitation de la plate-forme. Leur mise à jour est soumise aux mêmes règles et conventions que pour les applications installées par l'utilisateur.
-
- -

Suppositions concernant les utilisateurs

- -

Pour au moins les premières versions de Firefox OS, les hypothèses suivantes sont prises en compte à propos des utilisateurs :

- - - -

Toutes ces conditions utilisateurs sont répandues dans beaucoup de pays, il paraît donc juste de faire de telles hypothèses. Notre objectif est d'essayer d'optimiser l'expérience utilisateur lors des mises à jour pour les personnes concernées par celles-ci. En général, ces suppositions n'auront pas d'impact négatif sur les utilisateurs qui disposent d'un accès WiFi rapide et pas cher.

- -

Paramètres de conception technique

- -

Cette section aborde quelques principes de conception pour l'implémentation des mises à jour d'applications dans Firefox OS :

- - - -

Considérations pour les développeurs

- -

Il y a plusieurs choses dont les développeurs doivent prendre en considération, compte-tenu du modèle de mise à jour des applications :

- - - -

Expérience utilisateur

- -

Principes de conception

- -

Afin de bénéficier de la meilleure expérience utilisateur possible lors de la mise à jour des applications, quelques principes essentiels doivent être gardés à l'esprit :

- - - -

Types de mises à jour

- -

Il existe trois types basiques de mise à jour :

- -
-
Manuel : individuel
-
Une mise à jour d'une unique application, à l'initiative de l'utilisateur
-
Manuel : lot
-
Une mise à jour de plusieurs applications en une seule fois, à l'initiative de l'utilisateur
-
Silencieuse
-
Une mise à jour en arrière-plan, automatisée
-
diff --git a/files/fr/archive/b2g_os/securite/security_model/index.html b/files/fr/archive/b2g_os/securite/security_model/index.html deleted file mode 100644 index 77e0212528..0000000000 --- a/files/fr/archive/b2g_os/securite/security_model/index.html +++ /dev/null @@ -1,396 +0,0 @@ ---- -title: Présentation de la sécurité de Firefox OS -slug: Archive/B2G_OS/securite/Security_model -translation_of: Archive/B2G_OS/Security/Security_model ---- -
-

Ce document donne un aperçu du cadre de la sécurité de Mozilla Firefox OS, qui est conçu pour protéger les appareils mobiles contre les menaces de la plateforme, des applications et des données. Dans le Firefox OS, Mozilla a mis en place un modèle de sécurité globale, intégrée et multicouche qui offre une protection best-of-breed contre les risques de sécurité pour les téléphones mobiles.

-
- -

Sécurité de la plate-forme

- -

La plate-forme Firefox OS utilise un modèle de sécurité multi-couches qui est conçu pour atténuer les risques d'exploitation à tous les niveaux. Une première ligne de contre-mesures combinée avec une stratégie de sécurité en profondeur offrent une protection complète contre les menaces.

- -

L'architecture sécurisée

- -

Le système d'exploitation Firefox OS connecte des applications Web au matériel sous-jacent. C'est une technologie de pile intégrée, composée des niveaux suivants:

- -

- - - -

Gecko est le contrôleur d'accès qui applique les politiques de sécurité destinées à protéger l'appareil mobile d'une mauvaise utilisation. La couche Gecko agit comme intermédiaire entre les applications web (à la couche Gaia) et le téléphone. Gonk offre des caractéristiques du matériel du téléphone mobile sous-jacent directement à la couche Gecko. Les applications Web accèdent à des fonctionnalités du téléphone mobile uniquement via les API Web, et seulement si Gecko permet la demande d'accès il n'y a pas d'accès direct, pas de «porte arrière» dans le téléphone. Gecko applique des autorisations et empêche l'accès aux demandes non autorisées.

- -

le déploiement du système

- -

Firefox OS est livré installé sur un téléphone intelligent. L'image du système d'origine est créée par une source de confiance connuehabituellement le OEM (Original Equipment Manufacturer) de l'appareil qui est responsable de l'assemblage, la construction, les tests et la signature numérique de l'emballage de distribution.

- -

Les mesures de sécurité sont utilisées dans la pile de technologie. Les privilèges du système de fichiers sont appliqués par les listes de contrôle d'accès de Linux (les ACL). Les applications du système sont installées sur un support de stockage qui est en lecture seule (sauf pendant les mises à jour, quand il est temporairement en lecture-écriture); généralement il n'y a que les zones contenant le contenu de l'utilisateur qui peuvent être en lecture-écriture. Divers composants dans le matériel de l'appareil sont équipés de protections qui sont mises en œuvre par défaut en tant que pratique standard de l'industrie - les fabricants de puces, par exemple, employent des techniques de durcissement pour réduire les vulnérabilités. La plate-forme de base (Gecko et Gonk) est durcie pour renforcer sa défense contre les menaces potentielles, et les caractéristiques de durcissement du compilateur sont utilisées le cas échéant. Pour plus de détails, voir Runtime security.

- -

Mises à jour de Système Sécurisé

- -

Les mises à jour ultérieures et les correctifs de la plate-forme Firefox OS sont déployés en utilisant un processus Mozilla sécurisé qui garantit l'intégrité continue de l'image du système sur le téléphone mobile. La mise à jour est créée par une entité connue, une source de confiance - habituellement le OEM de l'appareil - qui est responsable de l'assemblage, la construction, les tests et la signature numérique du paquet de mise à jour.

- -

Les mises à jour du système peuvent concerner tout ou une partie de la pile Firefox OS. Si des changements à Gonk sont inclus dans la mise à jour, cependant FOTA (Firmware Over The Air) est le processus d'installation utilisé. Les mises à jour FOTA peuvent également inclure toute autre partie de la pile de Firefox OS, y compris la gestion de l'appareil (FOTA, firmware / drivers), la gestion des paramètres (paramètres de Firefox OS), les mises à jour de sécurité, Gaia, Gecko, et d'autres correctifs.

- -

Les mises à jour qui ne comportent pas Gonk peuvent être effectuées en utilisant la mise à jour de l'utilitaire système Mozilla. Firefox OS utilise le même framework de mise à jour, les mêmes processus et le même format Mozilla ARCHIVE (MAR) (utilisé pour les packages de mise à jour) que le produit Firefox Desktop.

- -

Un service intégré dans la mise à jour — lequel peut être fourni par le fabricant  sur le téléphone mobile vérifie périodiquement les mises à jour système. Une fois un paquet système devient disponible et est détecté par le service de mise à jour, l'utilisateur est invité à confirmer l'installation. Avant que les mises à jour soient installées sur l'appareil mobile, le stockage de l'appareil est vérifié pour un espace suffisant pour appliquer la mise à jour, et la distribution est vérifiée pour:

- - - -

Les mesures de sécurité suivantes sont utilisées au cours du processus de mise à jour:

- - - -

Des contrôles rigoureux sont en mis place pour veiller à ce que la mise à jour est appliquée correctement sur le téléphone mobile.

- -
-

Note: Pour plus d'informations sur la façon dont les mises à jour fonctionnent et comment créer et distribuer des mises à jour, lire Création et application des paquets de mise à jour de Firefox OS.

-
- -

Securité des applications

- -

Firefox OS utilise une stratégie de sécurité de défense en profondeur pour protéger le téléphone mobile des applications intrusives ou malveillantes. Cette stratégie utilise une variété de mécanismes, y compris les niveaux d'autorisation implicites basés sur un modèle de confiance de l'application, l'exécution en sandbox au moment de l'exécution, d'un accès au matériel sous-jacent du téléphone mobile uniquement par API, un modèle d'autorisation robuste, et les processus d'installation et de mise à jour sécurisé. Pour les détails techniques, faire référence à Application security.

- -

Dans Firefox OS, toutes les applications sont des applications Web - programmes écrits en utilisant HTML5, JavaScript, CSS, les médias, et d'autres technologies Web ouvertes (les pages en cours d'exécution dans le navigateur ne sont pas visées; que les applications Web dans ce contexte). Parce qu'il n'y a d'application binaires  («natives») installées par l'utilisateur, tous les accès au système sont strictement effectués via les API Web. Même l'accès au système de fichiers ne se produit que par le biais des API Web et une base de données SQLite back-end - il n'y a pas d'accès direct entre les applications et les fichiers stockés sur la carte SD.

- -

Firefox OS limite et fait respecter la portée des ressources qui peuvent être consultées ou utilisées par une application, tout en soutenant un large éventail d'applications avec différents niveaux d'autorisationMozilla a mis en place un contrôle serré sur ce type d'applications qui peuvent accéder aux API. Par exemple, seules les applications certifiées (livrées avec le téléphone) peuvent avoir accès à l'API de téléphonie.

- -

Cela empêche une situation, par exemple, dans laquelle une application arbitraire tiers est installée, compose un numéro de téléphone pay-per-use (900 et 910), et engrange une grosse facture de téléphone cellulaire.

- -

D'autres applications OEM pourraient cependant être sélectionnées pour avoir accès à l'API de téléphonie. Par exemple, un opérateur pourrait fournir une application de systèmes de gestion qui permet à un client de gérer sont compte, y compris la possibilité de téléphoner au service client ou le service d'aide de l'opérateur directement.

- -

 

- -

Applications approuvées et non approuvées

- -

 

- -

Firefox OS catégorise les applications selon les types suivants:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNiveau de confianceDescription
CertifiéTrès fiableLes applications du système qui ont été approuvées par l'opérateur ou l'OEM (en raison de risques de corruption de l'appareil ou un risque pour la fonctionnalité critique). Les applications et services système uniquement; non destinées à des applications tierces.
- Cette désignation est réservée à un petit nombre d'applications critiques. Exemples: SMS, Bluetooth, appareil photo, horloge système, la téléphonie et le numéroteur par défaut (pour que les services d'urgence soient toujours accessibles).
PrivilégiéFiableDes applications tierces qui ont été examinées, approuvées et signées numériquement par un marché autorisé.
Web (tout le reste)appliqueNon fiableContenu Web régulier. Comprend les applications installées (stockées sur le téléphone mobile) et des applications hébergées (stockées à distance, avec seulement une application manifeste stockée sur le téléphone mobile). Le manifeste pour les applications hébergées peut être obtenu grâce à un marché.
- -

Le niveau de confiance d'une application détermine, en partie, sa capacité à accéder aux fonctionnalités de téléphone mobile.

- - - -

Certaines opérations, telles que l'accès au réseau, sont supposées être une autorisation implicite pour toutes les applications. En général, plus l'opération est sensible (par exemple, composer un numéro de téléphone ou accéder à la liste de contacts), plus le niveau de confiance de l'application nécessaire pour l'exécuter est élevé.

- -
-

Remarque: pour plus d'informations sur les API disponibles et leurs niveaux d'autorisation, consulter App permissions.

-
- -

Principe de la Moindre partie de Permissions

- -

Pour les applications Web, le framework de sécurité de Firefox OS suit le principe des moindres autorisations: commencer avec les autorisations minimales absolues, puis accorder sélectivement des privilèges supplémentaires que lorsque cela est nécessaire et raisonnable. Par défaut, une application commence avec de très faibles autorisations, ce qui est comparable au contenu Web non sécurisé. Si l'application effectue des appels API Web qui nécessitent des autorisations supplémentaires, il doit énumérer ces autorisations supplémentaires dans son manifeste (décrit plus loin dans ce document). Gecko envisagera d'accorder l'accès de l'API Web à une application que si les privilèges applicables sont priés explicitement dans son manifeste. Gecko accordera l'autorisation demandée uniquement si le type de l'application Web (certifiée, confiance, ou Web) est suffisamment qualifié pour l'accès.

- -

Processus d'Examen pour Applications Privilégiés dans le Marché

- -

Pour qu'une application devienne privilégée, le fournisseur de l'application doit la soumettre pour examen sur le Marketplace. Le Marketplace soumet l'application dans un processus de révision du code rigoureux: vérification de son authenticité et de l'intégrité, veiller à ce que les autorisations demandées sont utilisées aux fins indiquées (dans la justification de l'autorisation), vérifier que l'utilisation des autorisations implicites est appropriée, et de valider que toutes les interfaces entre le contenu de l'application privilégiée et contenu externe non privilégié ont les mesures d'atténuation appropriées pour prévenir des attaques d'élévation de privilèges. Le Marketplace a la responsabilité de veiller à ce que l'application web ne se comportera pas malicieusement avec les autorisations qu'il est accordée.

- -

Après q'une application est passé cet examen, elle est approuvée pour utilisation, le manifeste de l'application est signé numériquement par le Marketplace, et il est disponible pour les utilisateurs mobiles. La signature garantit que, si la boutique en ligne a été en quelque sorte piratée, le pirate ne pouvait pas sortir avec l'installation de contenu arbitraire ou du code malveillant sur les téléphones des utilisateurs. En raison de ce processus de vérification, Firefox OS donne des applications privilégiées obtenues à partir du Marketplace un plus haut degré de confiance tous les jours que de contenu Web.

- -

 

- -
-

Remarque: pour en savoir plus à propos de Marketplace, y compris le marché de Firefox, aller à la zone du Marketplace.

-
- -

 

- -

Applications empaquetées et hébergées

- -

Les applications pour Firefox OS peuvent être soit empaquetées (stockées sur le téléphone mobile) ou hébergées (stockées sur un serveur web distant, avec juste un manifeste stocké sur le téléphone mobile). Il ya quelques différences dans la façon dont la sécurité est gérée pour chaque. Néanmoins, les applications empaquetées et hébergées sont toutes deux soumises à l'application sandboxing, qui est décrite plus loin dans ce document.

- -
-

Note: Vous pouvez en savoir plus sur les applications hébergées et empaquetées à Auto-publication d'application

-
- -

Applications empaquetées

- -

Une application empaquetée se compose d'un fichier ZIP contenant des ressources d'application (HTML5, CSS, Javascript, images, médias), ainsi que d'un manifeste qui fournit une liste explicite des actifs et leurs valeurs de hachage correspondant. Applications certifiées et privilégiées doivent être empaquetées parce que le manifeste de l'application doit être signé numériquement. Quand un utilisateur obtient une application incluse dans le paquet, le fichier ZIP téléchargé sur le téléphone mobile, et le manifeste est lu à partir d'un emplacement connu à l'intérieur du fichier ZIP. Pendant le processus d'installation, les actifs d'applications sont dignes de confiance et restent stockés localement dans le paquet. Toutes les autorisations explicites sont demandées lors de l'exécution, montrant à l'utilisateur les intentions d'utilisation des données de l'application, et sont persistées par défaut.

- -

Pour faire référence à des ressources d'applications dans une application empaquetée, l'URL commence par app: en utilisant le format suivant:

- -

app://identifier/path_within_zipfile/file.html

- -

où app:// représente le point de montage du fichier ZIP, et l'identifiant est un UUID qui est généré lorsque l'application est installée sur le téléphone mobile. Ce mécanisme garantit que les ressources appelées avec app:URL contenues dans le fichier ZIP. Le chemin au sein d'une app: est relative, donc des liens relatifs à des ressources dans le fichier ZIP sont autorisés.

- -

Alors que les applications empaquetées sont principalement destinées à être utilisées pour les applications certifiées ou privilégiées, les applications web régulières peuvent aussi être empaquetées. Cependant, elles ne gagnent pas d'augmentation de l'accès en confiance ou autorisations simplement parce qu'elles sont empaquetées.

- -

Applications hébergées

- -

Les applications hébergées sont situées sur un serveur Web et chargées via HTTP. Seulement le manifeste de l'application est stocké sur le téléphone mobile. Tout le reste est stocké à distance. Certaines APIs sont disponibles uniquement aux applications privilégiées et certifiées, ce qui nécessite que l'application soit empaquetée en raison des exigences de signature. Par conséquent, une application hébergée n'aura pas accès à l'une des API Web qui nécessitent un statut d'application privilégiée ou certifiée.

- -

Du point de vue de la sécurité, des applications hébergées fonctionnent très bien comme des sites Web normaux. Une application hébergée est chargée en invoquant un codage en dur, URL pleinement qualifiée qui pointe vers la page de démarrage dans le répertoire racine de l'application sur le serveur Web. Une fois une application hébergée est chargée, le téléphone mobile pointe vers des pages en utilisant les mêmes URL qui sont utilisées lors de la navigation sur le site web.

- -

Manifeste d'une Application

- -

Le manifeste d'une application Open Web contient des informations dont le navigateur Web a besoin pour interagir avec une application. Un manifeste est un fichier JSON avec (au moins) un nom et une description pour l'application. Pour plus de détails, reportez-vous à FAQs about app manifests.

- -

Exemple de Manifeste

- -

Les lignes de code suivantes montrent un exemple de manifeste avec les réglages de base seulement:

- -
{
-  "name": "My App",
-  "description": "My elevator pitch goes here",
-  "launch_path": "/",
-  "icons": {
-    "128": "/img/icon-128.png"
-  },
-  "developer": {
-    "name": "Your name or organization",
-    "url": "http://your-homepage-here.org"
-  },
-  "default_locale": "en"
-}
- -

Paramètres de sécurité dans le Manifeste de l'Application

- -

Le manifeste peut également contenir d'autres paramètres, y compris les paramètres de sécurité suivants:

- -

 

- - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Champs

-
-

Description

-
-

permissions

-
-

Permissions requises par l'application. Une application doit énumérer toutes les API Web qu'elle entend utiliser qui nécessite l'autorisation de l'utilisateur. La plupart des autorisations ont du sens pour les applications privilégiées ou des applications certifiées, mais pas pour les applications hébergées. Propriétés par API:

- -
    -
  • Description: Une chaîne spécifiant l'intention derrière la demande d'utilisation de cette API. Requis
  • -
  • Accès: Une chaîne spécifiant le type d'accès requis pour l'autorisation. Les autorisations implicites sont accordées lors de l'installation. Requis pour seulement quelques API. Les valeurs acceptées: read, readwrite, readcreate, et createonly.
  • -
-
-

installs_allowed_from

-
-

L'origine de l'application; peut être au singulier ou un tableau des origines (scheme+unique hostname) qui sont autorisés à déclencher l'installation de cette application. Permet aux fournisseurs d'applications de restreindre les installations à partir de seulement l'autorisation du Marketplace (https://marketplace.firefox.com/).

-
-

csp

-
-

Content Security Policy (CSP). Appliquée à toutes les pages chargées dans l'application. Utilisé pour durcir l'application contre les bugs qui pourraient permettre à un attaquant d'injecter du code dans l'application. Si non spécifié, les applications privilégiées et certifiées ont des réglages système par défaut. Syntaxe:
- https://developer.mozilla.org/en-US/docs/Apps/Manifest#csp

- -

Notez que cette directive ne peut augmenter le CSP appliqué. Vous ne pouvez pas l'utiliser, par exemple, de réduire le CSP appliqué à une application privilégiée.

-
-

type

-
-

Type d'application (web, privilegiée, or certifiée).

-
- -

 

- -

Firefox OS exige que le manifeste soit servi avec un type mime spécifique (application / x-web-app-manifeste + JSON) et à partir du même nom d'hôte pleinement qualifié (origine) à partir de laquelle l'application est servie. Cette restriction est assouplie lorsque l'application manifeste (et donc l'application manifeste) est de la même origine avec la page qui a demandé l'application à installer. Ce mécanisme est utilisé pour assurer qu'il est impossible de tromper un site Web en accueillant un manifeste d'application.

- -

 

- -

Exécution sandbox

- -

 

- -

Cette section décrit l'application et l'exécution sandboxes.

- -

Application Sandbox

- -

Le framework de sécurité de Firefox OS utilise sandboxing comme une stratégie de défense en profondeur pour atténuer les risques et protéger le téléphone mobile, la plate-forme, et les données. Sandboxing est une façon de mettre les frontières et les restrictions autour d'une application en cours d'exécution. Chaque application fonctionne dans son propre espace de travail et a uniquement accès aux API Web et les données dont elle a l'accès, ainsi que les ressources associées à cet espace de travail (bases de données IndexedDB, biscuits, stockage en mode déconnecté, et ainsi de suite).

- -

La figure suivante donne un aperçu de ce modèle de sécurité.

- -

 

- -

 

- -

- -

 

- -

En isolant chaque application, son impact est contenue dans son propre espace de travail et ne peut pas interférer avec quoi que ce soit (comme d'autres applications ou leurs données) en dehors de cet espace de travail.

- -

Execution Sandbox

- -

B2G (Gecko) s'exécute dans un processus de système hautement privilégiée qui a accès à des fonctionnalités matérielles dans le téléphone mobile. A l'exécution, chaque application fonctionne à l'intérieur d'un environnement d'exécution qui est un processus enfant du processus système de B2G. Chaque processus enfant a un ensemble restreint de privilège OS - par exemple, un processus enfant ne peut pas lire ou écrire des fichiers arbitraires sur le système de fichiers directement. Un accès privilégié est fourni via des API Web, qui sont médiées par le processus B2G mère. Le parent s'assure que, quand un processus enfant demande une API privilégiée, il dispose de l'autorisation nécessaire pour effectuer cette action.

- -

Les applications communiquent uniquement avec le processus de base B2G, pas avec d'autres processus ou applications. Les applications ne fonctionnent pas indépendamment de B2G, ne peuvent ouvrir des applications de l'autre. La seule «communication» entre les applications est indirecte (par exemple, quand une application établit une alarme système et une autre application déclenche une notification du système à la suite de celui-ci), et est médiée par le processus B2G.

- -

Hardware Access Only via the Web API

- -

 

- -

Les applications Web ont un seul point d'entrée pour accéder aux fonctionnalités de téléphonie mobile: les API Web de Firefox OS, qui sont mises en œuvre dans Gecko. Gecko fournit la seule porte d'entrée de l'appareil mobile et les services sous-jacents. La seule façon d'accéder à la fonctionnalité matérielle du périphérique est de faire un appel d'API Web. Il n'y a aucune API "native" et il n'y a pas d'autres façons (pas de «portes arrières") pour contourner ce mécanisme et d'interagir directement avec le matériel ou pénétrer dans la couche logicielle de bas niveau.

- -

 

- -

Infrastructure de sécurité

- -

La figure suivante montre les composantes du framework de sécurité de Firefox OS:

- -

- - - -

Gestion des autorisations et mise en application

- -

La sécurité de Firefox OS est conçue pour vérifier et appliquer les autorisations accordées à des applications web.

- -

Le système accorde une autorisation particulière à une application que si le contenu lui demande, et seulement si elle a les autorisations appropriées demandées dans le manifeste de l'application. Certaines autorisations exigent en outre l'autorisation de l'utilisateur, qui est invité à accorder l'autorisation (comme dans le cas d'une application demandant l'accès à l'emplacement actuel de l'utilisateur). Ce framework app-centrique fournit un contrôle plus granulaire sur les autorisations que les approches de rôle centré traditionnelles (dont les rôles individuels sont affectés chacun un ensemble d'autorisations).

- -

Une API Web a donné un ensemble d'actions et d'écouteurs. Chaque API Web a un niveau d'autorisation requis. Chaque fois une API Web est appelé, Gecko vérifie les exigences d'autorisation (rôle de consultation) basées sur:

- - - -

Si la demande ne satisfait pas aux critères d'autorisation, alors Gecko rejette la demande. Par exemple, des applications non approuvées ne peuvent pas exécuter des API Web qui sont réservées pour des applications de confiance.

- -

Inviter les utilisateurs pour Permissions

- -

En plus des autorisations qui sont implicitement associées aux applications web, certaines opérations nécessitent l'autorisation explicite de l'utilisateur avant de pouvoir être exécutées (par exemple, "l'application web peut avoir accès à votre appareil photo?"). Pour ces opérations, les applications web sont tenues de spécifier, dans leur manifeste, leur justification pour exiger cette autorisation. Cette intention d'utilisation des données informe les utilisateurs sur ce que l'application Web a l'intention de faire avec ces données si l'autorisation est accordée, ainsi que tout risque impliqué. Cela permet aux utilisateurs de prendre des décisions éclairées et de garder le contrôle sur leurs données.

- -

Processus de mise à jour sécurisé d'une Application

- -

 

- -

- -

Pour les mises à niveau d'applications et des correctifs à une application privilégiée, les fournisseurs d'applications soumettent l'archive mis à jour pour l'autorisation du Marketplace, où elle est examinée et, si elle est approuvée, signée et mise à la disposition des utilisateurs. Sur les appareils OS Firefox, une application utilitaire de une mise à jour  vérifie périodiquement des mises à jour de l'application. Si une mise à jour est disponible, l'utilisateur est alors interroger s'ils veulent l'installer. Avant qu'une mise à jour soit installée sur l'appareil mobile, le paquet est vérifié:

- - - -

Des contrôles rigoureux sont mises en place pour veiller à ce que la mise à jour soit appliquée correctement sur le téléphone mobile. Le package de mise à jour complète doit être téléchargé dans un emplacement spécifique et sécurisé avant le début du processus de mise à jour. L'installation ne remplace pas les données des utilisateurs.

- -
-

NotePour plus d'informations sur les mises à jour d'applications, lisez Updating apps.

-
- -

Securité de l'appareil (Hardware)

- -

Les mécanismes de sécurité pour le matériel de l'appareil mobile sont généralement traitées par l'OEM. Par exemple, un OEM peut offrir une SIM (Subscriber Identity Module) serrures à carte, avec PUK (PIN Unlock Key) codes pour débloquer les cartes SIM qui sont devenus verrouillé les entrées suivantes de code PIN erroné. Contactez votre OEM pour plus de détails. Firefox OS ne permettent aux utilisateurs de configurer des codes d'accès et les écrans de délai d'attente, qui sont décrits dans la section suivante.

- -

Sécurité des données

- -

Les utilisateurs peuvent stocker des données personnelles sur leur téléphone qu'ils veulent garder privées, y compris les contacts, les informations financières (bancaires et les détails de cartes de crédit), les mots de passe, des calendriers, et ainsi de suite. Firefox OS est conçu pour protéger contre les applications malveillantes qui peuvent voler, exploiter, ou de détruire des données sensibles.

- -

Code d'accès et Ecran de temporisation

- -

Firefox OS permet aux utilisateurs de définir un code d'accès à leur téléphone mobile afin que ceux qui fournissent le code d'accès puissent utiliser le téléphone. Firefox OS fournit également un écran de temporisation qui est affiché après une période d'inactivité configurable depuis le téléphone , nécessitant une authentification de mot de passe avant de reprendre l'utilisation du téléphone.

- -

Données sandbox

- -

Comme décrit précédemment, les applications sont sandbox à l'exécution. Cela empêche les applications d'accéder aux données qui appartient à d'autres applications à moins que les données soient explicitement partagées, et que l'application dispose des autorisations suffisantes pour y accéder.

- -

Données sérialisées

- -

Les applications Web n'ont pas un accès direct en lecture et écriture au système de fichiers. Au lieu de cela, tous les accès au stockage se produisent uniquement via les API Web. Les API Web lisent à partir, et écrivent sur, le stockage via une base de données SQLite intermédiaire. Il n'y a pas d'accès E / S directe. Chaque application possède son propre stockage de données, qui est sérialisé sur le disque par la base de données.

- -

 

- -

Destruction de données

- -

Quand un utilisateur désinstalle une application, toutes les données (cookies, localStorage, IndexedDB, etc.) associées à cette application sont supprimées.

- -

Privacy

- -

Mozilla est engagé à protéger la vie privée de l'utilisateur et les données utilisateur en fonction de ses principes de confidentialité (https://www.mozilla.org/privacy/), qui découlent du Manifeste Mozilla (https://www.mozilla.org/about/manifesto.html). La politique de confidentialité Mozilla Firefox décrit comment Mozilla collecte et utilise des informations sur les utilisateurs du navigateur Web Mozilla Firefox, y compris ce que Firefox envoie aux sites Web, ce que Mozilla fait pour sécuriser les données, les pratiques de données de Mozilla, et ainsi de suite. Pour plus d'informations, voir:

- - - -

Firefox OS met en œuvre ces principes en mettant le contrôle des données de l'utilisateur dans les mains de l'utilisateur, qui doit décider où cette information est personnelle va. Firefox OS offre les fonctionnalités suivantes:

- - diff --git a/files/fr/archive/b2g_os/securite/system_security/index.html b/files/fr/archive/b2g_os/securite/system_security/index.html deleted file mode 100644 index 98ab311d64..0000000000 --- a/files/fr/archive/b2g_os/securite/system_security/index.html +++ /dev/null @@ -1,449 +0,0 @@ ---- -title: Sécurité du système -slug: Archive/B2G_OS/securite/System_security -translation_of: Archive/B2G_OS/Security/System_security ---- -
-

Cet article donne un aperçu du modèle de sécurité du système de Firefox OS ; il explique comment le système d'exploitation assure la sécurité et applique des autorisations.

-
- -

Terminologie

- -

Avant de plonger dans le modèle de sécurité du système, voici quelques termes clés que vous devez comprendre.

- -
-
Application web
-
Une application Web, application open web, application mozilla, ou application est un programme écrit en HTML, JavaScript, et d'autres technologies Open Web, fonctionnant sur Firefox OS (ou toute autre plate-forme qui prend en charge le même modèle d'application installable). Toutes les demandes présentées aux internautes sur B2G sont des applications web. Par exemple, le Dialer est une application Web dans Firefox OS. Pages exécutées dans le navigateur ne sont pas désignés comme des applications Web dans ce contexte.
-
Processus b2g
-
Le processus de b2g Firefox OS est généralement appelé "b2g" ou "Gecko". Ceci est, essentiellement, une application qui fonctionne avec des privilèges élevés (par exemple, s'exécute en tant que root) et contrôle l'accès que toute application Web a sur toutes les ressources et les dispositifs.
-
Content process
-
Ceci est un processus enfant engendré par le processus de B2G, et qui communique avec le processus B2G. Elle représente une application web. Ceci est un processus à faible privilégié (exemple: exécuter comme utilisateur régulier et a un accès et vue sur / pour le système d'exploitation très limitée). Il communique avec le processus de base de Firefox OS en utilisant la communication inter-processus (IPC).
-
IPDL
-
Intercommunication Protocole Définition Langue, vous pouvez aussi consulter IPDL.
-
AOSP
-
Android Open Source Project (Projet Open source Android).
-
Appel system
-
Une interface d'appel entre l'espace de l'utilisateur (processus) et le noyau. Il n'y a pas d'autre moyen direct pour un processus de l'espace pour communuquer au noyau.
-
DAC, MAC
-
Discretionary Access Control (configuré par l'utilisateur) and Mandatory Access Control (forcée par le noyau).
-
FOTA
-
Firmware Over The Air met a jour le mecanisme du système. Il décrit les mises à jour du firmware complètes, généralement envoyés "over the air", soit sur une connexion sans fil à un téléphone mobile.
-
MSU, MAR
-
Mozilla System Updater, Mozilla ARchive. Terme utilisé pour décrire les mises à jour de Gecko, en utilisant le même mécanisme de mise à jour et le format archive comme pour Firefox Desktop.
-
- -

Objectifs et portée du modèle de sécurité du système Firefox OS

- -

Le modèle de sécurité du système Firefox OS est conçu pour:

- - - -

Voir les sections ci-dessous pour des explications plus détaillées de chacun de ces objectifs, et comment ils sont traités par Firefox OS.

- -

Mettre en œuvre les permissions

- -

Le modèle de sécurité d'application décrit comment les utilisateurs accordent des autorisations pour les applications, que ce soit directement ou par un tiers de confiance. Ces autorisations sont appliquées sur le processus contenu par l'application de tout accès à la ressource est réalisée par l'intermédiaire d'un appel IPC au processus de base.

- - - -

Initialisation du processus de contenu

- -

Toutes les applications web tournent dans un processus distinct doté de droits : le processus de contenu de Firefox OS. Ce processus est lancé par le processus de base b2g quand il atteint un <iframe> type spécial : <iframe mozapp>. Cela sépare l'application web du reste du contenu et est fortement associée à un manifeste (voir le modèle de sécurité des applications pour plus d'informations). Les processus de contenu sont lancés dans le récipient appelé récipient « en dehors du processus », ou un OOP (Out Of Process). Il est représenté par le processus plugin-conteneur et utilise un code similaire au plug-in-conteneur utilisé par le bureau Firefox.

- -

Risques

- - - -

Implémentation

- -

Initialisation dans le processus b2g

- -

Dans cet ordre :

- -
    -
  1. fork()
  2. -
  3. setuid(new, different, unused user id|nobody) (which is an unprivileged user)
  4. -
  5. chrdir('/')
  6. -
  7. execve('plugin-container')
  8. -
- -

Cela garantit que le processus de POO fonctionne dans un espace mémoire séparé (nouveau processus) et un utilisateur des droits bas ne peut pas élever ses privilèges au niveau du processus de b2g.

- -

Gestion des descripteurs de fichier

- -

Les descripteurs de fichiers sont traités en utilisant une méthode whitelist; une liste de descripteurs de fichiers autorisés (FDs) est créé et stocké dans l'objet mFileMap. La fonction LaunchApp() ferme avec force tous les FDS qui ne sont pas sur la liste blanche. Ceci est fait après fork() (qui est quand les FDs sont copiés) mais avant execve() (qui est quand la nouvelle application commence à courir).

- -

Contrairement à la méthode plus traditionnelle qui utilise une liste noire (close-on-exec flag: CLOEXEC), ce qui garantit aucun FDs sont laissées ouvertes; ceci est donc plus fiable.

- -

Content process sandboxing (processus de contenu des droits réduits)

- -

Risques

- - - -

Cet element a une table de modélisation des menaces avec un sandbox de permis, en plus de la rapide récapitulation des risques mentionnés ci-dessus.

- -
-

Étendue : les menaces suivantes apparaissent si un attaquant exécute du code arbitraire dans le processus de contenu. En d'autres termes, l'attaquant a déjà trouvé une vulnérabilité au sein de gecko.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MenaceImpact potentielFacteur(s) de vraisemblanceMesures d'atténuation proposées(s)
-

Les processus de contenu malveillants exploitent la vulnerabilité du noyau

- -

"2 étapes attaquent".

-
Critique: le contrôle de l'appareil complet.Faible: Contenu processus a un nombre limité de système appelle disponibles. -
    -
  • Réduire le nombre d'appels système permi au strict minimum.
  • -
  • Utilisez des correctifs proactives pour protéger le noyau, comme PaX (Protection Against eXecution).
  • -
-
-

Elévation de privilèges au processus parent.

- -

processus de contenu malveillant exploite processus parent par l'intermédiaire de IPDL.

- -

"2 étapes attaquent".

-
Haut: Possibilité d'exécuter un nombre important d'appels système sensibles (perte de données, l'accès à la caméra, l'accès au réseau, etc.).Moyen: Une grande quantité de code dans le processus parent. Grande surface d'attaque. sanitization Minimal des données envoyées par l'intermédiaire de BNPI (il est en mesure d'envoyer des pointeurs, par exemple). -
    -
  • Exécutez le processus parent comme non-root / utilisateur non privilégié.
  • -
  • Attempt to sandbox the parent process as much as possible.
  • -
-
-

Les processus de contenu malveillant exploite le processus parent pour exploiter la vulnérabilité du noyau exposée.

- -

"3 étapes attaquent".

-
Critique: le contrôle de l'appareil complet. -

Faible: Requiert un bug dans le processus parent qui peut être consulté par le biais de BNPI.

- -

Nécessite la vulnérabilité du noyau au sein de l'appel système accessible au processus parent (beaucoup plus d'appels système sont disponibles pour le processus parent, par rapport au processus de contenu.)

-
-
    -
  • Exécutez le processus parent comme non-root / utilisateur non privilégié.
  • -
  • Attempt to sandbox the parent process as much as possible.
  • -
  • Utilisez des correctifs proactives pour protéger le noyau, comme PaX (Protection Against eXecution).
  • -
-
-

Contenu malveillant, processus parent ou de l'application Web exploite un bug dans le matériel de l'appareil.

- -

"1 and 2 steps attack".

-
-

Haut: Possibilité d'exécuter des opérations privilégiées (comme les appels, l'envoi de SMS, etc.) jusqu'à:

- -

Critique: Capacité d'exécuter du code au niveau du matériel, le contrôle de l'appareil complet.

-
Faible: Nécessite un canal de communication avec le matériel, acquis par le biais de IPDL ou d'un appel système, et un bug matériel. -
    -
  • Périphériques matériels Fuzz.
  • -
  • Travailler autour des problèmes via le noyau et / ou  patchs API de processus parents (désactiver l'accès à la fonctionnalité matérielle vulnérable ou aseptiser les données avant de passer au-dessus).
  • -
-
- -
-

Note: PaX (Protection Against eXecution) est un patch du noyau de GrSecurity (docs), qui met en œuvre les deux «PaX» et des protections additionel tels que UDEREF et SMAP.

- -

vulnérabilités non listés sont atténués par le sandbox lui-même.

-
- -

Implementation

- -
-

Superviseur n'a pas encore été mis en œuvre.

-
- -

Process Model Sandbox

- -
-

Remarque : Les processus en cours d'exécution de contenu sont les applications Web, et sont les processus à sandbox.

-
- -

Implémentation des API de Gecko

- -

Les API exposées via JavaScript dans le processus de contenu ne devrait jamais tenter d'accéder aux ressources du système de fichiers directs. Au lieu de cela, ils doivent émettre un appel IPDL pour la ressource. Cela signifie que toute API faisant accès à la ressource doit avoir une composante dans le processus parent d'accéder à la ressource pour le compte du processus de contenu.

- -

Des précautions supplémentaires doivent être prises lors de l'implémentation des appels. Toutes les entrées doivent être désinfectés par le processus parent. Le contenu processus ne peut pas être digne de confiance, et de la IPDL messages provenant du contenu processus ne peut pas être digne de confiance.

- -
-

Attention : Toute confiance accordée au processus de contenu peut et sera utilisé pour échapper à la sandbox.

-
- -

Qu'est-ce que seccomp

- -

Seccomp signifie le mode de calcul sécurisé. Il y a actuellement 2 version de seccomp:

- -
    -
  1. -

    seccomp, disponibles dans le noyau Linux 2.6.12 et ci-dessus:

    - -
      -
    • -

      Activation seccomp limite les appels des processus du système à lire, écrire, sigreturn, et la sortie.

      -
    • -
    • -

      Utilise l'appel système prctl().

      -
    • -
    • -

      Peut être démarré après l'initialisation du processus, dans un lieu d'arbitrage.

      -
    • -
    -
  2. -
  3. -

    seccomp-bpf également appelé mode filtre seccomp ou mode 2, est disponible dans le noyau Linux 3.5 et ci-dessus:

    - -
      -
    • -

      Identique à seccomp, mais met en oeuvre BPF pour filtrer les appels système.

      -
    • -
    • -

      Peut utiliser une liste blanche des d'appels et arguments systèmes lors de l'initialisation, au lieu d'appels système codé en dur.

      -
    • -
    • -

      Plus flexible, permet une "sandbox plus permissive". Utile pour sandbox légèrement plus faibles, et pour un chemin de transition vers "sandbox stricte".

      -
    • -
    • -

      Ajoute un drapeau qui empêche les processus de traitement et de l'enfant pour revenir privilèges.

      -
    • -
    -
  4. -
- -
-

Remarque : En raison de la flexibilité accrue qui est permi, nous avons décidé d'utiliser seccomp-bpf, avec rétroportage à tout noyau <3.5. Cela inclut la plupart des noyaux Android actuels. Un patch est déjà disponible et peut généralement être appliquée sans conflits (voir le bogue 790923).

-
- -

Performances seccomp-bpf

- -

Les performance seccomp-bpf à des impacts chaque fois qu'il y a un appel system . Il n'y a pas de référence exacte, comme la mesure dépend de la mise en œuvre. Nous estimons que cela peut influer sur les performances jusqu'à 1% quand un appel système est fait et seccomp-bpf est activé pour le processus en cours. Cela reste à être mesurée par QA.

- -

Étant donné que le nombre d'appels système est considérablement réduit dans notre modèle de processus, nous prévoyons également l'impact sur les performances du monde réel qui devrait être presque nulle.

- -

Les appels IPDL peuvent toutefois ajouter la latence et réduire les performances, en fonction de leur mise en œuvre. Il est fortement recommandé de regarder la mise en œuvre de chrome pour les API gourmandes en ressources telles que les appels OpenGL. De façon similaire à seccomp-bpf, si nous réduisons le nombre d'appel IPDL, nous allons minimiser les impacts sur les performances.

- -

Implémentation

- -

seccomp est activé dans Gecko avec --enable-content-sandbox.

- -

Le reporteur, qui reporte les appel systèmes refusé (le cas échéant) ne soit jamais construit par défaut et est activé avec l'option --enable-content-sandbox-reporter.

- -

La majeure partie du code est dans gecko/security/sandbox. Le liste blanche elle-même est stocké dans gecko/security/sandbox/seccomp_filter.h.

- -

La liste blache peut contenir des appels système qui peuvent être utilisés les cloisonnements. En règle générale, ces appels ont des commentaires indiquant pourquoi, et devraient éventuellement être supprimés lorsque le code affecté est fixé. Par conséquent, il est presque jamais OK pour ajouter le code qui va briser le sandbox, puis ajoutez l'appel dans la liste blanche, sans un examen très attentif. Dans le doute, soulever un bug. La plupart du temps cependant, ce qui est faux, et la ressource devrait plutôt être contrôlé, accessible par le processus de b2g, puis passé au processus de contenu si l'accès est accordé et / ou les données sont filtrées.

- -

Durcissement du système de fichiers

- -

Risques

- - - -

Implémentation

- -

La raison en est que seules les zones qui contiennent du contenu d'utilisateur peut être en lecture-écriture (à moins que le système d'exploitation lui-même exige une nouvelle zone de lecture-écriture dans le futur), et doivent inclurenodev, nosuid, et noexec Les supports du système de fichiers standard sont limitées comme suit:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Point de montageSystème de fichiersOptions
/rootfsread-only
/devtmpfsread-write, nosuid, noexec, mode=0755
/dev/ptsptsfsread-write, nosuid, noexec, mode=0600
/procprocread-write, nosuid, nodev, noexec
/syssysfsread-write, nosuid, nodev, noexec
/cacheyaffs2 or ext4read-write, nosuid, nodev, noexec
/efsyaffs2 or ext4read-write, nosuid, nodev, noexec
/systemext4read-only, nodev
/dataext4read-write, nosuid, nodev, noexec
/mnt/sdcardext4 or vfatread-write, nosuid, nodev, noexec, uid=1000, fmask=0702, dmask=0702
/acctcgroupread-write, nosuid, nodev, noexec
/dev/cpuctlcgroupread-write, nosuid, nodev, noexec
- -
-

Remarque : Les points de montage exacts peuvent varier.

-
- -

Linux DAC

- -

Le Linux DAC représente le modèle d'autorisation de système de fichiers de Linux bien connue.

- -
-

Remarque : Ceci est le traditionel user/group/other modèle d'autorisation et non les Linux POSIX 1E ACLs.

-
- - - -

Mises à jour du système sécurisé

- -

Risques

- - - -

Implémentation

- -

Mises à jour ultérieures et des correctifs à la plate-forme Firefox OS sont déployés en utilisant un processus sécurisé de Mozilla qui assure l'intégrité continue de l'image du système sur le téléphone mobile. La mise à jour est créé par un connu, source de confiance - habituellement le OEM de l'appareil - qui est responsable de l'assemblage, la construction, les essais et la signature numérique du package de mise à jour.

- -

Firmware over the air updates

- -

Les mises à jour du système peuvent concerner tout ou une partie de la pile Firefox OS. Si des modifications à Gonk sont inclus dans la mise à jour, puis la FOTA (Firmware Over the Air) est le processus d'installation utilisé. les mises à jour FOTA peuvent également inclure toute autre partie de la pile de Firefox OS, y compris la gestion des périphériques (FOTA, firmware / pilotes), la gestion des paramètres (réglages du système d'exploitation Firefox), les mises à jour de sécurité, Gaia, Gecko, et d'autres correctifs.

- -

Mises à jours MSU/MAR

- -

Les mises à jour qui ne concernent pas Gonk peuvent être effectuées en utilisant l'utilitaire Mozilla System Update. Firefox OS utilise le même cadre de mise à jour, les processus et Mozilla ARchive (MAR) Format (utilisé pour les packages de mise à jour) que le produit Firefox Desktop.

- -

Service de mise à jour

- -
-

Remarque : Le service de mise à jour peut être fourni par l'OEM.

-
- -

Un service de mise à jour intégrée sur le téléphone mobile vérifie périodiquement les mises à jour du système. Une fois un paquet de système devient disponible et est détecté par le service de mise à jour, l'utilisateur est invité à confirmer l'installation. Avant que les mises à jour s'installes sur l'appareil mobile, le stockage de l'appareil est vérifié pour un espace suffisant pour appliquer la mise à jour, et la distribution est vérifiée:

- - - -

Les mesures de sécurité suivantes sont utilisées au cours du processus de mise à jour:

- - - -

Des contrôles rigoureux sont en place pour veiller à ce que la mise à jour est appliquée correctement sur le téléphone mobile.

- -
-

Remarque: Pour plus d'informations sur les mises à jour de la plate-forme, lisez Création et application de packages de mise à jour de Firefox OS.

-
diff --git a/files/fr/archive/b2g_os/simulator/index.html b/files/fr/archive/b2g_os/simulator/index.html deleted file mode 100644 index 4c657e5d09..0000000000 --- a/files/fr/archive/b2g_os/simulator/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Simulateur Firefox OS -slug: Archive/B2G_OS/Simulator -tags: - - Apps - - Firefox OS - - Tools - - WebIDE - - simulator -translation_of: Archive/B2G_OS/Simulator ---- -
-

Cette page décrit le fonctionnement du simulateur Firefox OS pour les versions de Firefox OS 1.2 et supérieures. Si vous développez des applications sur Firefox OS 1.1, consultez la documentation du simulateur pour Firefox OS 1.1.

-
- -

Le simulateur Firefox OS (Firefox OS Simulator en anglais) est une version des couches supérieures de Firefox OS qui permet de simuler le fonctionnement d'un appareil Firefox OS sur un ordinateur de bureau. Cela signifie que, pour la plupart des cas, il n'est pas nécessaire d'avoir un vrai appareil pour déboguer l'application. Le simulateur s'affiche dans une fenêtre de la même taille qu'un appareil Firefox OS, comprend l'interface utilisateur de Firefox OS et les applications natives, il permet également de simuler plusieurs API matérielles pour Firefox OS.

- -

Le simulateur est distribué comme un module complémentaire pour Firefox. Une fois que vous l'avez téléchargé et installé dans Firefox, vous pouvez le lancer, y envoyer des applications ainsi qu'utiliser les outils de développement avec le gestionnaire d'applications et, sous Nightly/Aurora, avec WebIDE.

- -

Installation

- -

Pour installer le simulateur, utilisez le panneau de gestion des simulateurs de WebIDE (disponible depuis Firefox 33). Plusieurs versions sont disponibles, et il est recommandé de toutes les installer pour plus de flexibilité.

- -

Pour lancer le simulateur, choisissez-le dans la liste des environnements de WebIDE. Pour plus de détails, voir les instructions dans la documentation WebIDE. Une fois que le simulateur est lancé, vous pouvez y envoyer des applications et les déboguer grâce à WebIDE, comme vous le feriez avec un vrai appareil.

- -

Si vous utilisez App Manager (l'ancien outil, disponible avant WebIDE), vous pouvez installer un simulateur en cliquant sur le bouton suivant :

- -

Installer le simulateur

- -

L'interface utilisateur du simulateur

- -

Le simulateur apparaît dans une fenêtre séparée dont les dimensions sont telles que l'écran représenté mesure 320x480 pixels. Pour simuler les événements tactiles, vous pouvez cliquer avec la souris et la déplacer en maintenant le clic. Ainsi, si vous cliquez et que vous « tirez » l'écran de la droite vers la gauche avec la souris, vous devriez voir les applications natives ainsi que les applications que vous avez ajoutées :

- -

- -

Le simulateur possède deux boutons dans une barre d'outils située en bas :

- - - -

Émulation de carte SD

- -

Dans le simulateur, la carte SD est mappée au dossier "fake-sdcard" dans le profil du simulateur. Profil qui est situé dans le dossier "extensions" du profil Firefox dans lequel le simulateur est installé. Par exemple :

- -
/path/to/Firefox/Profiles/Firefox-profile-name/extensions/fxos_2_2_simulator@mozilla.org/profile/fake-sdcard
- -
 
- -

Les fichiers lus ou écrits utilisant l'API getDeviceStorage apparaitront ici.

- -

Dans les versions antérieures à la version 2.2, il fallait créer le répertoire "fake-sdcard" manuellement. Depuis la version 2.2, le répertoire est créé automatiquement.

- -

De plus, depuis la version 2.2, il est possible de définir un répertoire différent en utilisant le simulateur en ligne de commande et en passant l'option--storage-path.

- -

Les limites du simulateur

- -

Le simulateur Firefox OS possède quelques limitations qui empêchent une simulation parfaitement réaliste.

- -

Les limites matérielles

- -

En dehors de la taille de l'écran, le simulateur ne simule aucune des limitations matérielles d'un appareil Firefox OS comme peuvent l'être la mémoire disponible ou la vitesse du processeur.

- -

Les codecs audio/vidéo

- -

Les codecs suivants se basent sur une accélération matérielle du décodage et ne sont donc pas supportés :

- - - -

Cela signifie qu'il n'est pas possible d'utiliser le simulateur pour lire des vidéos en boucle ou utiliser des sites web comme YouTube qui utilisent ces codecs.

- -

API non supportées

- -

Certaines API qui fonctionnent sur les appareils ne fonctionneront pas avec le simulateur. La plupart du temps, cela est dû à une absence du matériel nécessaire pour ces API. Des simulations de ces API ont été faites (par exemple pour la géolocalisation). Il est prévu d'en ajouter d'autres pour les versions à venir. Malgré cela, les API qui suivent ne sont pas supportées et leur utilisation pourra renvoyer des erreurs ou des résultats incorrects :

- - - -

Obtenir de l'aide

- -

Si vous avez une question, vous pouvez la poser (en anglais) sur la liste de diffusiondev-developer-tools ou sur IRC sur le canal #devtools de irc.mozilla.org.

- -

Activer les enregistrements verbeux (verbose logging)

- -

Vous pouvez voir les messages enregistrés depuis votre application dans la console Web, que vous pouvez lier à votre application en utilisant WebIDE. Si vous souhaitez obtenir des messages pour le moment où l'application démarre, avant que la console soit connectée et fonctionne, vous devrez activer le mode verbeux pour les enregistrements (logs).

- -

Allez dans about:config et créez une nouvelle option. Le nom de l'option est différent en fonction de la version du simulateur utilisée :

- - - -

Fixez la valeur de cette chaîne de caractère à "all", ensuite, désactivez puis réactivez le module complémentaire dans le gestionnaire de modules complémentaires. Vous devriez maintenant pouvoir lire de nouveaux messages dans la console JavaScript du navigateur.

- -

Compiler le Simulateur

- -

Si vous voulez tester des patchs du code de Gecko ou de Gaia que le Simulateur contient, il est possible que vous ayez envie de modifier le Simulateur pour utiliser une version personnalisée de Gecko ou un profil personnalisé de Gaia. Il est également possible de compiler un nouveau Simulateur depuis votre checkout de Gecko.

diff --git a/files/fr/archive/b2g_os/simulator_vs_emulator_vs_device/index.html b/files/fr/archive/b2g_os/simulator_vs_emulator_vs_device/index.html deleted file mode 100644 index c6b95f5bbf..0000000000 --- a/files/fr/archive/b2g_os/simulator_vs_emulator_vs_device/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Simulateur vs. Émulateur vs. Appareil -slug: Archive/B2G_OS/Simulator_vs_Emulator_vs_Device -tags: - - Firefox OS - - QA - - test -translation_of: Archive/B2G_OS/Developing_Gaia/Different_ways_to_run_Gaia ---- -

Trois options de base sont possibles pour obtenir un environnement Firefox OS afin de travailler ou développer dessus. Il y a le Simulateur Firefox OS, l'Émulateur Firefox OS et enfin Firefox OS sur un téléphone compatible Firefox OS.

- -

Les utilisateurs finaux ne sont en contact avec Firefox OS que sur un véritable appareil, néanmoins, le Simulateur et l'Émulateur offrent une alternative accessible pour les développeurs qui visent Firefox OS. Pour la majorité d'entre-eux, le Simulateur ou l'Émulateur seront suffisants, mais gardez à l'esprit qu'il y a des cas où leur comportement sera partiel ou différent de celui d'un appareil. Les descriptions ci-dessous devraient vous aider à choisir parmi les trois options celle qui sera la meilleure pour vous.

- -

Le Simulateur Firefox OS

- -

Le Simulateur Firefox OS est une extension pour le navigateur Firefox. Il est principalement destiné à être utilisé par les développeurs d'applications.

- -

Avantages

- - - -

Inconvénients

- - - -

Le client Firefox OS pour ordinateur

- -

Le client Firefox OS pour ordinateur, également appelé B2G desktop client, permet d'exécuter des applications Web et Gaia dans un environnement basé sur Gecko quelque peu similaire à un véritable appareil. Comme il n'émule pas le matériel de l'appareil, il n'est pas adapté pour tester les APIs des périphériques et ne remplace pas un vrai matériel pour faire des tests. Cependant, il intègre plusieurs APis qui ne sont pas disponibles dans Firefox comme les APIs Contacts et Settings. Il peut donc être utile pendant le développement de votre application, ou lors du travail sur l'interface utilisateur Gaia elle-même.

- -

L'Émulateur Firefox OS

- -

L'Émulateur Firefox OS est un programme compilé à partir du code source de Firefox OS et exécuté sur une machine de bureau. En général, les développeurs qui ont besoin d'un environnement Firefox OS plus complet que le Simulateur choisiront cette option. (Voir Opera Mobile Emulator pour les fonctionnalités)

- -

Avantages

- - - -

Inconvénients

- - - -

Firefox OS sur un appareil

- -

En général, les développeurs qui travaillent sur le code du coeur de Firefox OS (gonk, gecko) ou qui souhaitent tester leurs applications (ou des modifications de gaia) sur un vrai appareil choisiront cette option.

- -

Avantages

- - - -

Inconvénients

- - diff --git a/files/fr/archive/b2g_os/spark/index.html b/files/fr/archive/b2g_os/spark/index.html deleted file mode 100644 index 26b1466bdd..0000000000 --- a/files/fr/archive/b2g_os/spark/index.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Spark -slug: Archive/B2G_OS/Spark -translation_of: Archive/B2G_OS/Building_and_installing_B2G_OS ---- -
-

Spark est compilé de la même manière que Firefox OS, excepté que la variable d'environnement GAIA_DISTRIBUTION_DIR=distros/spark est définie.

-
- -

Compiler B2G avec Spark

- -

Article principal : Compiler Boot2Gecko

- -
GAIA_DISTRIBUTION_DIR=distros/spark ./build.sh
- -

Compiler Gaia avec Spark

- -

Article principal : Développer pour Gaia - référence des options de make

- -
GAIA_DISTRIBUTION_DIR=distros/spark make
diff --git a/files/fr/archive/b2g_os/tips_and_tricks/faire_des_captures_ecran/index.html b/files/fr/archive/b2g_os/tips_and_tricks/faire_des_captures_ecran/index.html deleted file mode 100644 index 8834995d79..0000000000 --- a/files/fr/archive/b2g_os/tips_and_tricks/faire_des_captures_ecran/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Faire des captures d'écran -slug: Archive/B2G_OS/Tips_and_tricks/faire_des_captures_ecran -translation_of: Archive/B2G_OS/Debugging/taking_screenshots ---- -

Prendre des captures d'écran de votre application peut être utile à plusieurs égards, comme pour montrer votre travail à un client, frimer devant vos amis avec votre téléphone FxOS, ou encore publier une application sur le Marketplace. Cet article explique comment faire des captures d'écran sur votre appareil Firefox OS.

- -
-

Note: Les développeurs Android ne seront pas perdu car les étapes sont assez similaires.

-
- -

Préparer votre téléphone

- -
    -
  1. Sur votre téléphone, ouvrez les paramètres pour développeurs puis cochez : Débogage distant et Console activée.
  2. -
  3. Assurez-vous qu'ADB est installé et fonctionnel sur votre ordinateur.
  4. -
  5. Branchez votre téléphone au port USB de votre ordinateur.
  6. -
- -

Sur votre téléphone, allez dans Paramètres > Informations > Plus d'informations > Développeurs

- -

Prendre une capture d'écran

- -

Maintenant vous avez quatre choix possibles : le terminal, DDMS dans Eclipe, la combinaison de boutons dédiée sur le téléphone, ou le gestionnaire d'application.

- -

Terminal

- -

Ouvrez une fenêtre de terminal, et exécutez les trois commandes suivantes:

- -
    -
  1. Prendre une capture d'écran (l'image s'appellera "capture.png" dans l'exemple)
    - adb shell screencap -p /sdcard/capture.png
  2. -
  3. Transférer l'image sur votre ordinateur
    - adb pull /sdcard/capture.png
  4. -
  5. Supprimer l'image de votre appareil
    - adb shell rm /sdcard/capture.png
  6. -
- -

Vous désirez en apprendre plus sur ADB ? Regardez la documentation d'ADB.

- -

Autrement, vous pouvez utiliser ffmpeg:

- -
    -
  1. Assurez-vous d'avoir ffmpeg installé: -
      -
    1. Sur Mac, si vous utilisez MacPorts, vous pouvez exécuter sudo port install ffmpeg. Pour homebrew, exécutez brew install ffmpeg.
    2. -
    3. Sur Linux (Ubuntu/Debian), exécutez sudo apt-get install ffmpeg.
    4. -
    -
  2. -
  3. Placez vous dans le bon dossier :  cd B2G/gaia.
  4. -
  5. Utilisez la commande make screenshot pour réaliser la capture d'écran.
  6. -
  7. L'image créée s'appelle screenshot.png.
  8. -
- -

DDMS

- -

Ouvrez Eclipse.

- -
    -
  1. Ouvrez DDMS
    - Fenêtre > Ouvrir la Perspective > Autres > DDMS
  2. -
  3. Sur le panneau de gauche dans l'onglet Appareils, cliquez sur le bouton Capture d'écran.
  4. -
  5. Une nouvelle fenêtre apparaît avec plusieurs options, cliquez sur le bouton Enregistrer pour sauvegarder votre image.
  6. -
- -
-

Note: Pour en savoir plus sur DDMS, regardez la documentation de DDMS.

-
- -

Boutons du téléphone

- -
    -
  1. Sur les versions Firefox OS 2.0 et précédentes, appuyez simultanément sur les boutons Accueil et Bouton d'alimentation pendant quelques secondes.
  2. -
  3. À partir de la version Firefox OS 2.1, appuyez simultanément sur les boutons Volume moins et Bouton d'alimentation pendant quelques secondes.
  4. -
- -

Ceci fait une capture d'écran qui est sauvegardée dans votre Galerie. Ensuite il vous suffit de récupérer l'image sur votre carte SD par la méthode de votre choix.

- -
-

Note: La combinaison de boutons fut modifiée parce que de nombreuses personnes la trouvaient plus compliquée que nécessaire, particulièrement avec une seule main. Et aussi parce que les appareil sans bouton Accueil matériel ne sont pas très bien supportés (il n'est pas possible d'utiliser le bouton Accueil logiciel partout, comme par exemple sur l'écran de verrouillage).

-
- -

Le gestionnaire d'application/simulateur

- -
    -
  1. Ouvrez le gestionnaire d'application, connectez votre téléphone, et naviguez jusqu'à l'onglet Appareil sur la gauche.
  2. -
  3. Cliquez sur le bouton Capture d'écran en bas de la page (à l'endroit où vous démarrez le simulateur).
  4. -
diff --git a/files/fr/archive/b2g_os/tips_and_tricks/modifier_le_fichier_hosts/index.html b/files/fr/archive/b2g_os/tips_and_tricks/modifier_le_fichier_hosts/index.html deleted file mode 100644 index 11043f1dc3..0000000000 --- a/files/fr/archive/b2g_os/tips_and_tricks/modifier_le_fichier_hosts/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Modifier le fichier hosts -slug: Archive/B2G_OS/Tips_and_tricks/Modifier_le_fichier_hosts -translation_of: Archive/B2G_OS/Developing_Firefox_OS/modifying_hosts_file ---- -
-

Il est parfois nécessaire d'éditer le fichier hosts de votre machine : en cas d'attaque, pour bloquer des connexions indésirables, pour rediriger des requêtes vers une adresse spécifique, etc... Cet article vous guidera à travers les étapes à effectuer pour modifier le fichier hosts de votre téléphone Firefox OS. Ce fichier se trouve par exemple dans le dossier /system/etc pour un Linux, et dans le dossier /etc dans les nouvelles versions de Mac OS X.

-
-

Préparer votre téléphone

-

Sur le téléphone, allez à Paramètres pour développeurs et cocher :

- -

Branchez alors votre téléphone à votre ordinateur.

-

Les étapes suivantes, pour modifier le fichier hosts, sont les mêmes que sur Android. Les développeurs Android retrouveront rapidement leurs petits !

-

Étapes dans le terminal

-
    -
  1. Ouvrez une fenêtre de terminal.
  2. -
  3. Remontez la partition /system sur le téléphone afin d'obtenir les permissions en lecture/écriture -
    adb remount
    -
  4. -
  5. Transférez le fichier hosts vers votre ordinateur -
    adb pull /system/etc/hosts /tmp
    -
  6. -
  7. Modifiez le fichier hosts dans /tmp/hosts selon vos besoins puis sauvegardez le. Par exemple : -
    127.0.0.1         localhost
    -ip.à.rediriger   nom_de_la_machine_distante
    -
  8. -
  9. Envoyez le fichier hosts modifié vers votre téléphone -
    adb push /tmp/hosts /system/etc/hosts
    -
  10. -
-

Voilà, votre fichier hosts devrait maintenant être à jour.

-
-

A noter : En savoir plus sur ADB ? La documentation ADB n'attend plus que vous !

-
-

diff --git a/files/fr/archive/b2g_os/using_the_app_manager/index.html b/files/fr/archive/b2g_os/using_the_app_manager/index.html deleted file mode 100644 index 91631c48f8..0000000000 --- a/files/fr/archive/b2g_os/using_the_app_manager/index.html +++ /dev/null @@ -1,293 +0,0 @@ ---- -title: Utiliser le gestionnaire d'applications -slug: Archive/B2G_OS/Using_the_App_Manager -tags: - - App Manager - - Apps - - Debugging - - Firefox OS - - WebIDE - - simulator -translation_of: Archive/B2G_OS/Using_the_App_Manager ---- -
-

Le gestionnaire d'applications est un nouvel outil disponible dans Firefox pour ordinateur et qui fournit un nombre d'outils utiles pour vous aider à tester, déployer et déboguer des applications web HTML5 sur des téléphones Firefox OS ainsi que sur le simulateur de Firefox OS directement depuis votre navigateur.

- -

Le gestionnaire d'applications est destiné aux développeurs visant Firefox OS 1.2 ou plus. Si vous développez des applications pour Firefox OS 1.1, vous devriez plutôt consulter la documentation concernant le simulateur de Firefox OS 1.1.

-
- -

- -

Le gestionnaire d'applications est composé de :

- - - -

Installation rapide

- -

Cette section est conçue pour vous permettre de démarrer rapidement. Si vous avez besoin de plus de détails, rendez-vous à la section Configuration du système et de l'appareil. Consultez également la section Dépannage, si vous rencontrez des problèmes.

- -
    -
  1. Assurez-vous que vous avez installé Firefox 26 ou plus ;
  2. -
  3. ouvrez le gestionnaire d'applications (tapez about:app-manager dans la barre d'URL).
  4. -
  5. En fonction de votre situation :
  6. -
- -

a.  Si vous n'avez pas d'appareil physique :

- - - -

b. Si vous avez un appareil physique :

- - - -

La barre du bas devrait afficher " Connecté à xxx "

- -
    -
  1. Cliquez sur le panneau Applications et ajoutez une application (empaquetée ou hébergée) ;
  2. -
  3. le bouton Mettre à jour valide votre application et l'installe sur le simulateur ou l'appareil ;
  4. -
  5. le bouton Déboguer connecte les outils de développement à l'application en cours d'exécution.
  6. -
- -

Consultez la section Dépannage, si vous rencontrez des problèmes.

- -

Configuration du système et de l'appareil

- -

La première chose que vous avez besoin de faire quand vous utilisez le gestionnaire d'applications, c'est de vous assurer que votre système et votre téléphone sont installés correctement. Cette partie va passer en revue toutes les étapes requises.

- -

Firefox 1.2+ requis

- -

Assurez-vous que votre appareil dispose de Firefox OS 1.2/Boot2Gecko 1.2 ou plus. Pour vérifier la version de Firefox OS que votre appareil utilise, rendez-vous dans Paramètres > Informations sur l'appareil > Logiciel.

- -

Si votre version n'est pas assez récente, selon le téléphone que vous avez, vous aurez besoin soit d'installer une version nightly téléchargeable de Firefox OS 1.2 ou plus, soit de configurer et de compiler vous-même une version de Firefox OS depuis les sources.

- -

Versions disponibles :

- - - -
-

Note: Pour compiler votre propre distribution de Firefox OS 1.2+, suivez les instructions afin de Compiler et installer Firefox OS, en commençant par les Prérequis pour compiler Firefox OS.

-
- -

Débogage distant

- -

Ensuite, vous avez besoin d'activer le débogage distant dans Firefox OS. Pour ce faire, rendez-vous dans Paramètres > Informations sur l'appareil > Plus d'informations > Développeurs et cochez la case Débogage distant.

- -

ADB ou ADB Helper

- -

Le processus utilise l'Android Debug Bridge (ADB) pour la connexion et la communication entre l'ordinateur et l'appareil. Il y a deux options pour utiliser ADB :

- - -
-

Note: Il est inutile d'exécuter cette commande si vous avez installé l'extension ADB Helper.

-
- -

Connecter votre appareil au gestionnaire d'applications

- -

Une fois votre configuration terminée, il est temps de brancher votre appareil sur votre ordinateur et de démarrer le gestionnaire d'applications :

- -
    -
  1. Branchez l'appareil sur votre ordinateur via USB ;
  2. -
  3. Désactivez le verrouillage sur votre appareil en allant dans Paramètres > Verrouillage et décochez la case Écran de verrouillage. C'est pratique car quand l'écran se verrouille, la connexion avec le téléphone se perd. Il ne sera donc plus disponible pour le débogage.
  4. -
  5. Démarrez le gestionnaire d'applications — Dans Firefox pour ordinateur, sélectionnez l'option dans le menu Développement web > Gestionnaire d'applications, ou tapez about:app-manager dans la barre d'URL.
  6. -
  7. Dans l'onglet du bas du gestionnaire d'application, vous verrez une barre de statut de connexion (reportez-vous à l'image ci-dessous). Vous devriez être capable de connecter votre appareil en cliquant sur le bouton « Se connecter à localhost:6000 ».
  8. -
  9. Si cela fonctionne, une boîte de dialogue devrait apparaître sur votre appareil : « Une requête entrante pour permettre une connexion de débogage à distance a été détectée. Autoriser la connexion? ». Appuyez sur le bouton OK ( vous aurez peut-être besoin d'appuyer sur le bouton « Power » du téléphone pour voir la boîte de dialogue). La barre de statut de connexion devrait s'actualiser pour afficher « Connecté à B2G » avec un bouton « Se déconnecter » pour permettre d'interrompre la connexion.
  10. -
- -

- -
-

Note : Les autres boutons dans la barre de statut de connexion vous permettent de connecter un simulateur au gestionnaire d'applications, ce que nous aborderons à la prochaine section, et de changer le port de connexion. Si vous modifiez le port de connexion, vous aurez aussi besoin d'activer la redirection sur ce port.

-
- -

Utiliser un simulateur de Firefox OS

- -

Si vous n'avez pas d'appareil physique disponible, vous pouvez essayer d'utiliser le gestionnaire d'applications sur un simulateur de Firefox OS. Pour commencer, installez le simulateur en utilisant le bouton suivant (plusieurs versions sont disponibles ; vous devriez toutes les installer pour pouvoir tester sur le plus de versions possible) :

- -

Installer le simulateur

- -

Une fois que vous avez installé le ou les simulateurs, rendez-vous dans le gestionnaire d'applications et cliquez sur le bouton « Lancer le simulateur » dans la barre de statut de connexion dans l'onglet du bas. Au moins trois boutons vont apparaître :

- - - -

Lancer ses propres versions dans le gestionnaire d'applications

- -

Vous pouvez lancer des versions de B2G pour ordinateur et de Gaia/Gecko que vous avez compilées dans le gestionnaire d'application avec le simulateur. Lire la page lancer ses propres versions de Firefox OS/Gaia dans le gestionnaire d'applications pour plus d'informations sur comment procéder.

- -

Le panneau « Applications » : Tester et déboguer les applications Firefox OS

- -

Maintenant que tout fonctionne, examinons les fonctionnalités disponibles dans le gestionnaire d'applications. Commençons avec le panneau Applications. D'ici, vous pouvez importer une application existante pour l'envoyer sur votre appareil et la déboguer :

- - - -

Les informations à propos de votre application devraient apparaître sur le côté droit de la fenêtre, comme sur l'image ci-dessous :

- -

- -

L'éditeur de manifeste

- -

Depuis Firefox 28, le panneau Applications incorpore un éditeur pour le manifeste de l'application :

- -

- -

Le débogage

- -

Cliquer sur « Mettre à jour » mettra à jour (installera) l'application sur l'appareil. Cliquer sur « Déboguer » connectera les outils de développement à l'application, vous permettant ainsi de déboguer directement son code.

- -

- -
-

Note : Découvrez en manipulant les outils de développement — Essayez de modifier les DOM, CSS, etc., et vous verrez les modifications s'afficher sur votre appareil en temps réel. Ces modifications seront enregistrées dans le code de l'application installée ; vous les verrez la prochaine fois que vous lancerez l'application sur votre appareil.

-
- -

Avant Firefox 28, les outils de développement se lancent dans une fenêtre séparée. Depuis Firefox 28, les outils de développement se lancent dans un onglet dans le gestionnaire d'applications lui-même auprès des onglets Applications et Appareil. L'icône de votre application s'affiche dans le nouvel onglet, il est donc facile de le repérer :

- -

- -

Les erreurs

- -

Si une application ne s'ajoute pas — par exemple si l'URL est incorrecte — une entrée sera ajoutée sur la page de cette application indiquant des informations sur l'erreur.

- -

- -

Vous pouvez également supprimer une application depuis cette vue en survolant le nom ou la description de l'application sur la gauche de la fenêtre et en cliquant sur la croix qui apparaît. Cependant, cela ne supprime pas l'application de l'appareil. Pour ce faire, vous devez supprimer l'application manuellement en utilisant directement l'appareil.

- -

Le panneau « Appareil »

- -

L'onglet Appareil affiche des informations sur l'appareil connecté. Dans la fenêtre « Applications installées », les applications sur l'appareil peuvent être démarrées et déboguées.

- -

- -
-

Note : Par défaut, les applications certifiées ne sont pas listées. Voir comment déboguer les applications certifiées.

-
- -

La fenêtre des « Permissions » affiche les privilèges requis pour les différentes API web sur l'appareil actuel :

- -

- -

Enfin, vous pouvez prendre une capture d'écran de l'appareil actuel  en cliquant sur le bouton « Capture d'écran ». La capture d'écran apparaitra alors dans un nouvel onglet de Firefox. Depuis celui-ci, vous pouvez le sauvegarder ou l'abandonner.

- -

Déboguer des applications certifiées

- -

Actuellement, seuls les appareils tournant sous un « build » de Firefox OS 1.2+ sont capables de déboguer les applications certifiées. Si vous avez ce type d'appareil, vous pouvez activer le débogage d'applications certifiées en changeant les préférences devtools.debugger.forbid-certified-apps à false dans votre profil. Pour ce faire , suivez les étapes décrites ci-dessous :

- -

En utilisant un appareil

- -
    -
  1. -

    Sur votre ordinateur, entrez la commande suivante dans le Terminal/console pour entrer dans le système de fichiers de l'appareil via l'invite de commandes :

    - -
    adb shell
    - -

    La console devrait changer pour devenir root@android.

    -
  2. -
  3. -

    Ensuite, stoppez B2G en utilisant la commande suivante :

    - -
    stop b2g
    -
  4. -
  5. -

    Naviguez dans le dossier suivant :

    - -
    cd /data/b2g/mozilla/*.default/
    -
  6. -
  7. -

    Il faut maintenant mettre à jour le fichier prefs.js avec la ligne suivante :

    - -
    echo 'user_pref("devtools.debugger.forbid-certified-apps", false);' >> prefs.js
    -
  8. -
  9. -

    Après avoir modifié et sauvegardé le fichier, redémarrez B2G avec la commande suivante :

    - -
    start b2g
    -
  10. -
  11. -

    Sortez du système de fichier d'Android en utilisant la commande exit. Vous retournerez au terminal normal.

    -
  12. -
  13. -

    Ensuite, reconnectez-vous au gestionnaire d'applications, vous devriez alors voir les applications certifiées disponibles pour le débogage

    -
  14. -
- -

En utilisant le client B2G pour ordinateur

- -

Avec le client B2G Desktop, la préférence est déjà définie dans votre profil dans greprefs.js, située à la racine du répertoire de votre client B2G pour ordinateur. Arrêtez le client puis éditez le fichier afin de passer devtools.debugger.forbid-certified-apps à false. Ensuite, redémarrer le client B2G et connectez le gestionnaire d'applications. Vous devriez désormais pouvoir toutes les applications.

- -
-

Note : Si vous voulez ajouter cette préférence à votre " build " de Gaia, vous pouvez faire make DEVICE_DEBUG=1 reset-gaia.

-
- -

Dépannage

- -

Si l’appareil n’est pas reconnu :

- - - - - -

Vous ne pouvez pas connecter votre appareil au gestionnaire d'applications ou démarrer le simulateur ? Informez-nous ou rapportez un bug.

diff --git a/files/fr/archive/b2g_os/using_the_b2g_emulators/index.html b/files/fr/archive/b2g_os/using_the_b2g_emulators/index.html deleted file mode 100644 index e21111a942..0000000000 --- a/files/fr/archive/b2g_os/using_the_b2g_emulators/index.html +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: Utiliser les émulateurs B2G -slug: Archive/B2G_OS/Using_the_B2G_emulators -tags: - - B2G - - Emulateur - - Firefox OS -translation_of: Archive/B2G_OS/Using_the_B2G_emulators ---- -

- -
-

Cet article est un guide succinct qui décrit les choses à savoir si vous décidez d'utiliser les émulateurs Boot to Gecko. Il ne prétend pas à être un guide de l'utilisateur complet ; il vous présente seulement quelques petits trucs à savoir que vous ne pourriez peut-être pas découvrir par vous-même.

-
- -

Ce guide part du principe que vous avez déjà compiler un des émulateurs. Si ce n'est pas le cas, vous pouvez vous référer à la page Compiler et installer Firefox OS !

- -

À propos des émulateurs B2G

- -

Il existe deux émulateurs B2G. Le premier est un émulateur ARM qui est compilé lorsque l'on configure config.sh avec le champ "emulator". Même si c'est plus lent que d'utiliser directement un processeur x86, c'est tout de même une représentation plus stable et plus précise du fonctinnement d'un terminal réel. Utiliser le champ "emulator-x86" lorsque l'on lance config.sh permet d'utiliser l'émulateur x86.

- -
-

Note : Depuis quelques mois la Team Automation a arrêté d'utiliser l'émulateur x86 à cause de problèmes de stabilité. Il y a donc de grandes chances que cela ne marche pas du tout avec l'émulateur x86. Utilisez l'emulateur ARM à moins d'avoir une bonne raison de faire autrement.

-
- -

Une fois que vous avez sélectionné, configuré et compilé un émulateur, le reste marche de la même façon donc le reste de ce guide est commun pour les deux.

- -
-

Note : Sur Mac OS X, l'émulateur BG nécessite un processeur Core 2 Duo ou plus récent, c'est-à-dire un système compatible avec Mac OS X 10.7 "Lion." Vous n'avez pas besoin d'utiliser Lion, juste d'être compatible avec.

-
- -

Démarrer l'émulateur

- -

Pour démarrer l'émulateur B2G, tapez la commande suivante :

- -
./run-emulator.sh
- -

Cela va prendre en charge toutes les étapes du démarrage. Maintenant attendez pendant que l'émulateur démarre et que Boot to Gecko démarre dessus. Cela peut prendre plusieurs minutes, donc soyez patient.

- -

Quand l'émulateur ne marche pas

- -

Parfois l'émulateur ne réussi pas à démarrer. Voici quelques astuces pour résoudre les problèmes.

- -

Utilisez-vous une VM ?

- -

VirtualBox et Parallels ont un support de l'accélération graphique problématique qui peut causer l'échec du démarrage de l'émulateur, quelque chose à propos d'un terminal OpenGL. L'émulateur commence à démarrer, et redémarre en boucle ou démarre mais n'affiche rien sur l'écran. Il n'y a malheureusement pas de solutions (il y a un moyen détourné pour VirtualBox). Vous devez utiliser VMWare Player (Freeware), Workstation ou Fusion. Pour VirtualBox, n'installez pas les Guest Addons ou ne désactivez pas le module vboxvideo.

- -

Assurez-vous que le serveur adb est lancé

- -

Cela arrive lorsque le serveur adb qui prend en charge l'interaction avec l'émulateur soit n'est pas lancé, soit a mal fonctionné. Dans ce cas vous pourrez voir le message d'erreur suivant dans le terminal où vous avez lancé l'émulateur : 

- -
emulator: control console listening on port 5554, ADB on port 5555
-emulator: can't connect to ADB server: Connection refused
- -
-

Note : Si vous utilisez l'adb compilé par le processus de compilation de B2G (ce qui est probablement le cas), il est situé dans le dossier $B2G/out/host/<platform>/bin. Sur Mac, c'est le dossier $B2G/out/host/darwin-x86/bin, par exemple.

-
- -

Regardez si adb est lancé avec : 

- -
ps aux | grep adb
- -

S'il y est tuez-le avec la commande suivante parce qu'il ne marche sans doute pas correctement.

- -
adb kill-server
- -

S'il ne l'est pas faites ceci :

- -
adb start-server
- -

Ensuite tentez de relancer l'émulateur. S'il ne marche toujours pas allez sur #b2g sur irc.mozilla.org pour de l'aide (en anglais).

- -

Effacer les options de configuration

- -

Parfois, des options de configurations obsolètes de l'émulateur peuvent causer un mauvais comportement. Vous pouvez supprimer la Base de Données IndexedDB pour résoudre le problème, comme ceci :

- -
    -
  1.  Assurez-vous que le service adb est démarré, comme décrit ici.
  2. -
  3. Démarrez l'émulateur.
  4. -
  5. -

    Dans le terminal sur l'ordinateur hôte, allez à la racine du code de B2G pour votre émulateur et tapez : out/host/<platform>/bin/adb -e shell ; sur Mac ce serait out/host/darwin-x86/bin/adb -e shell.

    -
  6. -
  7. -

    Maintenant que vous êtes dans le shell adb, vous pouvez exécuter des commandes shell sur votre émulateur. Maintenant stoppez B2G sur l'émulateur : stop b2g.

    -
  8. -
  9. -

    Supprimez la Base de Données IndexedDB : rm -rf /data/local/indexedDB.

    -
  10. -
  11. -

    Redémarrez B2G sur l'émulateur : start b2g.

    -
  12. -
- -

 Espérons que vous vous retrouverez avec l'interface de Gaia et tout ira bien.

- -

Si l'émulateur démarre mais que l'écran est noir avant ou après le splash screen "mozilla technology"

- -

Si cela arrive, c'est peut-être un bogue de pilotes sur la machine qui fait tourner l'émulateur. Cela a été observé sur le pilote Linux open source nouveau. La solution la plus simple est de changer le pilote sur la machine. Dans le cas du pilote nouveau, cela peut-être d'installer un pilote propriétaire ("additionnel" dans Ubuntu) à la place. Dans le cas de chipsets graphiques embarqués Intel graphics, le pilote Linux open source par défaut peut causer une erreur de l'émulateur de type 'eglMakeCurrent failed' dont la source semble le fait qu'il supporte une version d'OpenGL plus faible que la version 2.0 nécessaire pour l'émulation du GPU. La solution consiste à désactiver le GPU en éditant le script run-emulator.sh (l'émulateur sera plus lent).

- -

Configurer l'émulateur

- -

Il y a plusieurs options que vous pouvez changer pour que l'émulateur ressemble au terminal que vous voulez émuler. Cette section vous fournit des informations de base sur la façon de faire. Vous pouvez modifier la configuration de l'émulateur en éditant le script run-emulator.sh. Ou, idéalement, une copie. Seulement une partie des paramètres les plus utiles seront abordés ici. Vous pourrez aller sur le site de quemu pour obtenir des détails sur les autres.

- -
-

Astuce : Créez une copie de run-emulator.sh pour chaque terminal que vous voulez émuler. Cela permet d'utiliser plusieurs configurations différentes facilement.

-
- -

Changer de skins

- -

Par défaut, l'émulateur démarre en mode HVGA, half-VGA mode, soit 320x480 pixels. Cela est spécifié par le paramètre -skin donné à l'émulateur lorsqu'il démarre. Vous pouvez passer à un mode d'affichage différent en éditant le script run-emulator.sh (ou, idéalement, une copie). Les skins fournis sont :

- - - -

 Les skins sont situés dans le dossier $B2G/development/tools/emulator/skins. Un skin est plutôt simple, si vous regardez, il sont simplement des dossiers avec des fichiers PNG pour les objets de l'interface et un fichier texte nommé layout qui décrit l'agencement de l'interface et de l'écran. Il est plutôt simple de créer vos propres skins si besoin.

- -

Changer la taille de la mémoire

- -

Une autre option que vous pouvez ou devez configurer est la taille de la mémoire de l'émulateur. Par défaut elle est de 512 Mo, mais si le terminal que vous émulez à plus ou moins de mémoire, il est important que vous mettiez la bonne quantité de mémoire pour vous assurer que votre application tournera dans le terminal de base sur lequel vous voulez travailler. Pour cela, changez la valeur du paramètre -memory à la taille dont vous avez besoin en mégaoctets. En plus de 512 Mo par défaut, 256 Mo et 1024 Mo seront celles que vous utiliserez le plus probablement pour tester.

- -

Pour changer la quantité de stockage émulé (c'est-à-dire, l'espace de stockage pour les données locales, comme la mémoire flash sur les téléphones moblies ou le disque dur d'un ordinateur), changez la valeur du paramètre -partition-size Par défaut il est de 512 Mo, mais vous pouvez spécifier n'importe quelle taille en mégaoctets pour simuler le type de terminal pour lequel vous devez tester.

- -

Connexion réseau

- -

Si pour certaines raisons vous ne pouvez pas connecter l'émulateur à internet, vous pouvez lancer la commande suivante depuis votre terminal :

- -
adb shell setprop net.dns1 10.0.2.3
- -

Si vous utilisez emulator-jb ou emulator-kk, la commande pour paramètrer le serveur DNS est différente :

- -
adb shell ndc resolver setdefaultif eth0
-adb shell ndc resolver setifdns eth0 10.0.0.0 10.0.2.3
- -
-
-
-
 
- -
 
-
-
-
diff --git a/files/fr/archive/b2g_os/web_telephony_api/index.html b/files/fr/archive/b2g_os/web_telephony_api/index.html deleted file mode 100644 index e9e2d76504..0000000000 --- a/files/fr/archive/b2g_os/web_telephony_api/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Web Telephony -slug: Archive/B2G_OS/Web_Telephony_API -tags: - - WebAPI -translation_of: Archive/B2G_OS/Web_Telephony_API ---- -

- -

-

Non standard
- Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

-

- -

-

Cette API est disponible sur Firefox OS pour des applications internes seulement.

-

- -

WebTelephony est une API qui permet à du contenu web de gérer les appels téléphoniques (voix) à partir de code JavaScript.

- -

Cette API est disponible en utilisant window.navigator.mozTelephony. Voir ci-après pour une liste complète d'interfaces :

- -

Interfaces DOM

- - - -

Exemple de code et introduction à l'API

- -
- -

Voir aussi

- - diff --git a/files/fr/archive/b2g_os/writing_apps_for_boot_to_gecko/index.html b/files/fr/archive/b2g_os/writing_apps_for_boot_to_gecko/index.html deleted file mode 100644 index eed9c54562..0000000000 --- a/files/fr/archive/b2g_os/writing_apps_for_boot_to_gecko/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Développement d'Applications Firefox OS -slug: Archive/B2G_OS/Writing_apps_for_Boot_to_Gecko -tags: - - Apps - - B2G - - Firefox OS -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_apps_for_Firefox_OS ---- -

Pour de l'information sur le développement d'application Firefox OS, consultez le Centre pour Développeur du Firefox Maketplace.

-

Vous pouvez aussi consulter la référence de l'API Développement d'Applications.

-

Les applications Firefox OS ne sont rien de plus que des applications Open Web installées sur un téléphone Firefox OS.

- -
- Note : Firefox OS s'identifie pour le moment avec le même User Agent que Firefox pour Android, sans la clause Android;. Par exemple : Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0a1.
diff --git a/files/fr/archive/css3/index.html b/files/fr/archive/css3/index.html deleted file mode 100644 index 818d53e75d..0000000000 --- a/files/fr/archive/css3/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: CSS3 -slug: Archive/CSS3 -tags: - - CSS - - Draft - - Intermédiaire - - Reference -translation_of: Archive/CSS3 ---- -
{{draft}}
-Cette documentation n'est pas maintenue et le contenu de l'article anglais n'est plus complètement à jour.
- -
Une meilleure ressource est actuellement disponible et récapitule l'état actuel du travail du W3C sur les spécifications relatives à CSS (en anglais).
diff --git a/files/fr/archive/deviceproximity/index.html b/files/fr/archive/deviceproximity/index.html deleted file mode 100644 index f4eea4fc98..0000000000 --- a/files/fr/archive/deviceproximity/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: deviceproximity -slug: Archive/deviceproximity -translation_of: Archive/API/deviceproximity ---- -

L'événement deviceproximity est déclenché lorsque de nouvelles données sont disponibles à partir d'un capteur de proximité.

- -

Informations générales

- -
-
Spécification
-
Proximity Sensor
-
Interface
-
DeviceProximityEvent
-
Propagation
-
Non
-
Annulable
-
Non
-
Cible
-
DefaultView (window)
-
Action par défaut
-
Aucune
-
- -

Propriétés

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyTypeDescription
target Lecture seule EventTargetThe event target (the topmost target in the DOM tree).
type Lecture seule DOMStringThe type of event.
bubbles Lecture seule BooleanWhether the event normally bubbles or not.
cancelable Lecture seule BooleanWhether the event is cancellable or not.
value Lecture seule Double (float)The sensor data for ambient light in Lux.
min Lecture seule Double (float)The minimum value in the range the sensor detects (if available, 0 otherwise).
max Lecture seule Double (float)The maximum value in the range the sensor detects (if available, 0 otherwise).
- -

Evénement liés

- - - -

Voir aussi

- - diff --git a/files/fr/archive/index.html b/files/fr/archive/index.html deleted file mode 100644 index 91bf4e1cba..0000000000 --- a/files/fr/archive/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Archive of obsolete content -slug: Archive -tags: - - Archive - - TopicStub -translation_of: Archive ---- -

Chez MDN, nous essayons d'éviter de supprimer purement et simplement le contenu qui pourrait être utile aux personnes ciblant les plates-formes, les systèmes d'exploitation et les navigateurs hérités. Peut-être que votre public cible est constitué de personnes qui utilisent du matériel plus ancien, par exemple, et qui ne peuvent pas passer aux derniers et meilleurs navigateurs. Ou pour des «raisons», votre entreprise doit utiliser un logiciel très ancien et vous devez créer un contenu Web qui s'exécute sur ce logiciel. Ou peut-être êtes-vous simplement curieux de connaître l'historique d'une fonctionnalité ou d'une API obsolète et son fonctionnement.

- -

Il existe de nombreuses raisons pour lesquelles une documentation plus ancienne peut être utile. Nous avons donc créé cette zone dans laquelle nous pouvons archiver une documentation plus ancienne. Le contenu de cette zone de contenu archivé ne doit pas être utilisé pour créer de nouveaux sites Web ou applications pour les navigateurs modernes. C'est ici pour référence historique seulement.

- -
-

Note aux rédacteurs: Nous devons essayer de garder les sous-pages organisées ici au lieu de toutes les stocker dans un seul grand dossier. Essayez de créer des sous-arbres pour les catégories de matériaux. De plus, ne déplacez ici que les pages extrêmement obsolètes. Si quelqu'un a besoin de manière réaliste des informations contenues dans un produit vivant, il peut ne pas être approprié de les déplacer ici. En général, il peut être préférable d'en discuter dans la chat room MDN Web Docs avant de déplacer le contenu ici.

-
- -

{{SubpagesWithSummaries}}

- - - -

{{ListSubpages("", 2, 0, 1)}}

diff --git a/files/fr/archive/marketplace/api/domapplicationsregistry/getinstalled/index.html b/files/fr/archive/marketplace/api/domapplicationsregistry/getinstalled/index.html deleted file mode 100644 index c45592bda7..0000000000 --- a/files/fr/archive/marketplace/api/domapplicationsregistry/getinstalled/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Apps.getInstalled -slug: Archive/Marketplace/API/DOMApplicationsRegistry/getInstalled -tags: - - API Apps - - Apps -translation_of: Archive/Marketplace/API/DOMApplicationsRegistry/getInstalled ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Résumé

-

Obtient la liste de toutes les applications installées pour cette origine. Par exemple, si appelé depuis le Firefox OS Marketplace, vous aurez la liste de toutes les application installées par le Firefox OS Marketplace.

-
-

Note : Plusieurs applications pour une même origine ne sont pas supportées. Pour héberger plusieur applications depuis un domaine, créer un sous-domaine pour chaque application. Par exemple : monapp.mondomaine.com, autreapp.mondomaine.com, et ainsi de suite.

-
-

Syntaxe

-
var requete = window.navigator.mozApps.getInstalled();
-
-

Paramètre

-

Aucun.

-

Exemple

-
var requete = window.navigator.mozApps.getInstalled();
-requete.onerror = function(e) {
-  alert("Erreur lors de l'appel de getInstalled : " + requete.error.name);
-};
-requete.onsuccess = function(e) {
-  alert("Succès, nombre d'applications : " + requete.result.length);
-  var appsRecord = requete.result;
-};
-

Il est nécessaire de définir des callbacks pour les propriétés onsuccess et onerror, tel que montré dans cet exemple. Si l'appel est réussi, un tableau d'objet App sera renvoyé dans la propriété result de l'objet renvoyé. Dans cette exemple, il s'agit de requete.result.

-

Erreurs

-

La chaîne de caractère ERROR peut être renvoyé dans DOMRequest.error.

-

Sujets en relation

- diff --git a/files/fr/archive/marketplace/api/domapplicationsregistry/getself/index.html b/files/fr/archive/marketplace/api/domapplicationsregistry/getself/index.html deleted file mode 100644 index 4c307a8d38..0000000000 --- a/files/fr/archive/marketplace/api/domapplicationsregistry/getself/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Apps.getSelf -slug: Archive/Marketplace/API/DOMApplicationsRegistry/getSelf -tags: - - API Apps - - Apps -translation_of: Archive/Marketplace/API/DOMApplicationsRegistry/getSelf ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Résumé

-

Renvoie les informations sur l'application courante, ce qui veut dire une application installée dont le domaine correspond au domaine de l'application appelée.

-
-

Note : Plusieurs applications pour une même origine ne sont pas supportées. Pour héberger plusieurs applications depuis un domaine, créer un sous-domaine pour chaque application. Par exemple : monapp.mondomaine.com, autreapp.mondomaine.com, et ainsi de suite.

-
-

Syntaxe

-
var requete = window.navigator.mozApps.getSelf();
-
-

Paramètres

-

Aucun.

-

Renvoie

-

getSelf() renvoie un objet {{ domxref("DOMRequest") }}. Le champ DOMRequest.result contient un objet App, qui est un objet JavaScript décrivant l'application. Avant que l'opération soit terminée, DOMRequest.result est null.

-
-

Note : A cause du {{ Bug("806597") }}, requete.result retourne incorrectement null même sur l'application tourne sur l'ordinateur ou Firefox pour Android.

-
-

Si l'appel est un echec, DOMRequest.error contient un objet {{ domxref("DOMError") }}, qui contient des informations sur l'erreur.

-

Exemple

-

Un exemple montrant comme utiliser getSelf() avec les propriétés de callback DOMRequest.onsuccess et DOMRequest.onerror.

-
var requete = window.navigator.mozApps.getSelf();
-requete.onsuccess = function() {
-  // Affiche le nom de l'application depuis l'objet App
-  alert("Nom de l'application : " + requete.result.manifest.name);
-};
-requete.onerror = function() {
-  // Affiche le nom de l'erreur depuis l'objet DOMError
-  alert("Erreur : " + requete.error.name);
-};
-

Si l'appel est réussi, un objet {{ domxref("App") }} est renvoyé dans la propriété result de l'objet renvoyé. Dans cette exemple, il s'agit de requete.result.

-

Sujets en relation

- diff --git a/files/fr/archive/marketplace/api/domapplicationsregistry/index.html b/files/fr/archive/marketplace/api/domapplicationsregistry/index.html deleted file mode 100644 index 0a8dbc2490..0000000000 --- a/files/fr/archive/marketplace/api/domapplicationsregistry/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Apps -slug: Archive/Marketplace/API/DOMApplicationsRegistry -tags: - - API Apps - - Apps - - B2G - - Firefox OS - - Interface - - Non-standard -translation_of: Archive/Marketplace/API/DOMApplicationsRegistry ---- -

{{APIRef("Apps")}}

- -
-

Retrait du marketplace
- La fonctionnalité décrite ici ne fonctionne plus.  Firefox Marketplace a été décommisionné pour Android, les ordinateurs de bureau, les tablettes et les paiement. Voir Future of Marketplace FAQ pour plus d'informations.

-
- -

Permet d'installer, de gérer et de contrôler des applications Web depuis un navigateur pour une installation dans Firefox OS. Implémentée par navigator.mozApps.

- -

Propriétés

- -
-
DOMApplicationsRegistry.mgmt
-
Un objet mgmt qui expose les fonctions pour la gestion du tableau de bord et le lancement d'applications au nom de l'utilisateur.
-
- -

Méthodes

- -
-
DOMApplicationsRegistry.checkInstalled()
-
Vérifie si une application a déjà été installée avec le manifeste passé en paramètre.
-
DOMApplicationsRegistry.install()
-
Déclenche l'installation de l'application. Lors de l'installation, l'application est validée et l'utilisateur doit approuver l'installation.
-
DOMApplicationsRegistry.installPackage()
-
Installe une application empaquetée.
-
DOMApplicationsRegistry.getSelf()
-
Renvoie un objet contenant l'objet app de l'application.
-
DOMApplicationsRegistry.getInstalled()
-
Fournit une liste des applications installées.
-
- -

Méthodes obsolètes

- -
-
DOMApplicationsRegistry.amInstalled() {{Obsolete_Inline}}
-
Permet de vérifier si une application est installée.
-
DOMApplicationsRegistry.getInstalledBy() {{Obsolete_Inline}}
-
Renvoie les applications installées depuis le domaine appelant. Cela permet à un registre d'application de déterminer quelle application a été installée au nom de l'utilisateur.
-
diff --git a/files/fr/archive/marketplace/api/domapplicationsregistry/install/index.html b/files/fr/archive/marketplace/api/domapplicationsregistry/install/index.html deleted file mode 100644 index ba677690fa..0000000000 --- a/files/fr/archive/marketplace/api/domapplicationsregistry/install/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Apps.install -slug: Archive/Marketplace/API/DOMApplicationsRegistry/install -tags: - - API Apps - - Apps -translation_of: Archive/Marketplace/API/DOMApplicationsRegistry/install ---- -
- {{ApiRef}} {{non-standard_header}}
-

Résumé

-

Déclenche l'installation d'une application. Pendant le processus d'installation, l'application est validée et l'utilisateur doit approuver l'installation.

-

Si une application a déjà été installé depuis le même domaine, appeler install() à nouveau peux écraser silencieusement, les données déjà installées. Ceci peut être utilisé pour modifier le reçu d'achat, par exemple, quand un utilisateur passe d'une application gratuite à une application premium.

-

Syntaxe

-
var request = window.navigator.mozApps.install(url, [receipts]);
-

Paramètres

-
- Note : Il y a actuellement (Février 2013) un bug lorsque l'on passe un chemin relatif dans le paramètre url. Voir {{ Bug("745928") }}.
-
-
- url
-
- Une chaîne de caractères d'URL contenant l'adresse du manifeste à installer. Dans le cas d'une distribution personnel (quand l'origine d'installation est la même que celle de l'application), le site peut omettre l'origine dans l'URL et fournir un chemin absolu (commençant par /).
-
- receipts
-
- (facultatif) un objet JSON contenant un tableau d'un ou plusieurs reçus.
-
-
window.navigator.mozApps.install(url, {receipts: ["receipt1", ...]})
-
-
- Si receipts n'est pas renseigné, il est traité comme null.
-
-

La fonction install() lève une exception si l'argument requis  (url) est absent, ou si des arguments non supportés sont présent.

-

Renvoie

-
- Note : Il y a actuellement (Février 2013) un bug avec l'attribut DOMRequest.result affectant les appareils Android et les ordinateurs. Voir {{ Bug("806597") }}.
-

La fonction install() renvoie un objet {{ domxref("DOMRequest") }}. Le champ DOMRequest.result contient un objet App, qui est un objet JavaScript décrivant l'application venant d'être installée. Avant que l'opération soit finie, DOMRequest.result est null.

-

Si l'installation est infructueuse, DOMRequest.error contient un objet DOMError, qui a les informations à propos de l'erreur.

-

Exemple

-

Un exemple montrant comment utiliser install() avec les propriétés de callback DOMRequest.onsuccess et DOMRequest.onerror.

-
var request = window.navigator.mozApps.install(manifestUrl);
-request.onsuccess = function () {
-  // Enregistre l'objet App qui est renvoyé
-  var appRecord = this.result;
-  alert('Installation réussie !');
-};
-request.onerror = function () {
-  // Affiche le nom de l'erreur depuis l'objet DOMError
-  alert('Installation échouée, erreur : ' + this.error.name);
-};
-
-

Le callback onsuccess est appelé si l'installation est réussie. Ceci veut dire que les actions de l'installation ont eu lieu.

-

Si l'installation est un échec, le callback onerror est appelé. Sur une installation échouée, DOMRequest.error contient un objet DOMError qui a des informations sur l'erreur.

-

Le code peut vous apparaître étrange, avec les guetteurs d'évènement ajoutés après que la fonction ait été appelée. Cependant, c'est la façon dont l'objet DOMRequest opère. L'appel de la fonction attendra que les guetteurs d'évènement aient été définis, et ils seront déclenchés en fonction de la situation. La fonction install() marche aussi par elle-même sans les guetteurs d'évènement.onsuccess et .onerror.

-

Erreurs

-

Quand l'installation est un échec, l'une de ces erreurs peut être retournée dans DOMRequest.error.

-
-
- DENIED
-
- L'utilisateur a annulé l'installation.
-
- INVALID_MANIFEST
-
- Le manifeste, bien qu'étant un JSON correctement formé, n'a pas certains champs requis, ou est pour une raison quelconque non valide.
-
- MANIFEST_URL_ERROR
-
- Un autre code HTTP que le code statut 200 a été reçu, ou une autre erreur de connection.
-
- MANIFEST_PARSE_ERROR
-
- JSON mal formé pour le manifeste.
-
- NETWORK_ERROR
-
- Erreur de connection.
-
- - diff --git a/files/fr/archive/marketplace/api/index.html b/files/fr/archive/marketplace/api/index.html deleted file mode 100644 index 2d3a3d7bf3..0000000000 --- a/files/fr/archive/marketplace/api/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Marketplace API reference -slug: Archive/Marketplace/API -tags: - - API - - Archive - - Marketplace - - Overview - - Reference - - TopicStub -translation_of: Archive/Marketplace/API ---- -

Les API liées à la marketplace ont été supprimées, les informations les concernant ont donc été archivées.

- -
-
-
-
API d'installation et de gestion des applications
-
L'API JavaScript Open Web Apps est une interface de programmation permettant d'installer des applications Web et de gérer une collection côté client d'applications Web installées par un utilisateur. Cette collection est appelée le référentiel d'applications.
-
Gestionnaire d'applications DOM
-
Fournit une assistance pour la gestion et l'installation des applications Web ouvertes dans un navigateur. Un gestionnaire est accessible via Navigator.mozApps.mgmt
-
- -
-
-
- -
-
-
Registre des applications DOM
-
Fournit une assistance pour l'installation, la gestion et le contrôle des applications Web ouvertes dans un navigateur pour une installation sur Firefox OS. Actuellement implémenté en tant que navigator.mozApps.
-
Navigateur (Marketplace)
-
Extensions de navigateur spécifiques à Marketplace qui sont désormais dépréciés / obsolètes.
-
-
-
- -

{{IncludeSubnav("/en-US/docs/Archive/Marketplace")}}

diff --git a/files/fr/archive/marketplace/index.html b/files/fr/archive/marketplace/index.html deleted file mode 100644 index 29aa1090cc..0000000000 --- a/files/fr/archive/marketplace/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Marketplace -slug: Archive/Marketplace -tags: - - Archive - - Landing - - Marketplace - - TopicStub -translation_of: Archive/Marketplace ---- -

De nombreux aspects de Firefox Marketplace seront bientôt supprimés, d'autres suivront alors que les différents services proposés par Marketplace sont en fin de vie. La documentation associée sera déplacée ici au fur et à mesure de sa suppression. Consultez la FAQ sur le future de la Marketplace pour plus de réponses.

- -
-
-
-
Référence de l'API marketplace
-
Les API liées à la marketplace ont été supprimées, les informations les concernant ont donc été archivées.
-
Monétisation
-
Sujets de monétisation qui ont maintenant été archivés en raison de la suppression des fonctionnalités pertinentes de Firefox Marketplace.
-
- -
-
-
- -
-
-
Options
-
Options de publication qui ne sont plus disponibles, d'où l'archivage des informations.
-
Publication
-
Publication de détails qui ne sont plus disponibles, d'où l'archivage des informations.
-
-
-
- - diff --git a/files/fr/archive/mdn/index.html b/files/fr/archive/mdn/index.html deleted file mode 100644 index 42ad1f3fe5..0000000000 --- a/files/fr/archive/mdn/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: MDN -slug: Archive/MDN -tags: - - TopicStub -translation_of: Archive/MDN ---- -
-

Obsolète
- Cette fonctionnalité est obsolète. Bien qu'il puisse toujours fonctionner dans certains navigateurs, son utilisation est déconseillée car il peut être supprimé à tout moment. Essayez d'éviter de l'utiliser.

-
- - - -

La documentation répertoriée ci-dessous est un matériel archivé et obsolète sur MDN lui-même.

- - - -
-
-
-
Kits de contenu
-
Les kits de contenu MDN sont des collections de ressources techniques basées sur des sujets pour vous aider à organiser une réunion de développeurs locaux ou à faire une présentation technique lors d'un événement, d'une conférence ou d'un atelier.
-
Comment lier un compte GitHub à votre profil MDN
-
Tous les utilisateurs qui souhaitent contribuer à MDN doivent ajouter une connexion GitHub à leur compte MDN pour pouvoir modifier. Cet article décrit comment ajouter l'authentification GitHub à votre profil MDN.
-
Connexions MDN et Persona
-
À compter du 1er novembre 2016, nous ne prenons en charge que GitHub pour la connexion à MDN. Si vous n'avez pas ajouté de connexion GitHub à votre compte MDN avant que nous ayons désactivé les connexions Persona, veuillez déposer un bogue "Account Help" bug sur Bugzilla.
-
- -
-
-
- -
-
-
Experts en la matière
-
Le but de cet article est d'aider les rédacteurs à trouver les développeurs Mozilla qui ont des réponses aux questions sur diverses technologies. Si vous êtes ingénieur sur un projet Mozilla, s'il vous plait veuillez vous assurer que votre technologie figure sur cette liste et que les coordonnées de votre groupe sont fournies.
-
Zones
-
Une zone est une zone spéciale de MDN dont le contenu est présenté avec des éléments d'interface utilisateur supplémentaires, tels qu'une zone de navigation de zone spéciale et des éléments visuels améliorés dans la zone d'en-tête de la page.
-
-
-
diff --git a/files/fr/archive/meta_docs/index.html b/files/fr/archive/meta_docs/index.html deleted file mode 100644 index 86342ad94c..0000000000 --- a/files/fr/archive/meta_docs/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: MDN "meta-documentation" archive -slug: Archive/Meta_docs -tags: - - Archive - - MDN - - TopicStub -translation_of: Archive/Meta_docs ---- -

Vous trouverez ici la "méta-documentation" archivée; c'est-à-dire de la documentation sur la façon d'écrire de la documentation sur MDN. Les articles ici sont obsolètes et ne devraient plus être référencés; nous les conservons ici pour référence pendant que nous migrons certains contenus vers de nouveaux endroits, mais très peu de ces éléments sont utiles.

- - - -
-
-
-
-
- -
-
-
- -
-
-
Classes CSS personnalisées
-
Cette page liste les classes CSS qui ont été spécifiquement créées pour MDC. Si vous avez d'autres idées de classes CSS qui pourraient être utiles pour ce wiki, n'hésitez pas à contacter Dria (en).
-
-
-
diff --git "a/files/fr/archive/misc_top_level/images,_tableaux_et_d\303\251calages_myst\303\251rieux/index.html" "b/files/fr/archive/misc_top_level/images,_tableaux_et_d\303\251calages_myst\303\251rieux/index.html" deleted file mode 100644 index 508196322e..0000000000 --- "a/files/fr/archive/misc_top_level/images,_tableaux_et_d\303\251calages_myst\303\251rieux/index.html" +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: 'Images, tableaux et décalages mystérieux' -slug: 'Archive/Misc_top_level/Images,_tableaux_et_décalages_mystérieux' -tags: - - CSS -translation_of: 'Archive/Misc_top_level/Images,_Tables,_and_Mysterious_Gaps' ---- -

 

- -

Quelle que soit l'époque à laquelle vous avez créé vos premières pages Web, il y a de fortes chances pour vous ayez utilisé l'un ou l'autre graphisme basé sur le schéma classique « tableaux imbriqués et pléthore d'images ». Que vous ayez découpé un logo en plusieurs morceaux afin de l'adapter correctement à la mise en page, ou que vous ayez utilisé une multitude de GIF d'espacement à un seul pixel, les principes (et les dangers) restent les mêmes. Dans les premiers temps du Web, cette approche fonctionnait car les navigateurs adaptaient les dimensions des cellules de tableaux à celles des images qu'elles contenaient.

- -

Avançons rapidement jusqu'en 2001, avec l'apparition de nombreux navigateurs respectant les standards qui affichent les pages Web en utilisant HTML et CSS plutôt que leur propre algorithme propriétaire de rendu. Grâce à une partie obscure de la spécification CSS, chaque mise en page basée sur une disposition précise de petites images dans des cellules de tableau devient un désastre visuel ne demandant qu'à se produire. Il suffit d'un navigateur moderne et du bon DOCTYPE, et badaboum !

- -

Les composants

- -

Regardons de plus près à l'endroit où cela se produit, et pourquoi cela pose problème. Commençons par un exemple simple, illustré par le figure 1 : un tableau d'une seule cellule contenant une image.

- -

Figure 1

- -

Évidemment, la plupart des mises en page sont un peu plus compliquées que cela, mais cela convient parfaitement pour notre démonstration. Une image, une cellule — c'est tout ce qu'il faut. Il n'y a apparemment aucun problème dans cet exemple. Et il n'est pas censé y en avoir puisque cet exemple reproduit le comportement traditionnel des navigateurs.

- -

Voyons maintenant ce que cet exemple donne dans un navigateur moderne lorsque la page a un DOCTYPE strict.

- -

Figure 2

- -

Remarquez l'espace supplémentaire sous l'image de la figure 2. Le balisage du tableau et de la cellule n'a pas changé — c'est le mode de rendu qui est différent. Plutôt que « d'adapter » l'image elle-même, le navigateur enveloppe maintenant la ligne sur laquelle repose l'image. L'image repose sur une ligne parce que c'est, par défaut, un élément de type inline (en-ligne). Il n'en faut pas plus.

- -

Construction d'un contenu en-ligne

- -

Afin de comprendre ce qui se passe exactement, regardons de plus près la construction d'une boîte de type en-ligne, le placement d'une image dans une boîte en-ligne, et enfin, le placement d'une boîte en-ligne dans une cellule de tableau. Tout d'abord, prenons une boite en-ligne basique contenant du texte, telle que montrée sur la figure 3.

- -

Figure 3

- -

La partie la plus cruciale de la figure 3 est la ligne de référence (ou ligne de base, représentée par la ligne bleue), et sa position dans la boîte en-ligne. Le positionnement exact de cette ligne dépend de la police « par défaut » de la boîte en-ligne (représentée par le cadre rouge), qui est déterminée par la valeur de la propriété CSS font-family pour l'élément contenant la boîte en-ligne. Il n'est pas possible pour un auteur de changer directement la position de la ligne de référence, elle ne bougera pas d'où elle s'est mise. L'espace sous la ligne de base est appelé « espace descendant » car c'est l'endroit où s'affichent les jambages des lettres bas de casse comme « j » et « p ». La figure 4 montre ce qui arrive lorsqu'on ajoute une image à cet ensemble.

- -

Figure 4

- -

Remarquez l'endroit où se pose l'image par défaut : son bord inférieur est aligné avec la ligne de référence de la boîte en-ligne. Ce placement peut être modifié à l'aide de la propriété vertical-align — nous en reparlons plus loin — mais presque personne ne modifie sa valeur par défaut. Enlevons le texte et conservons l'image seule, comme sur la figure 5.

- -

Figure 5

- -

Nous avons donc une image posée sur la ligne de référence d'une boîte de type en-ligne qui ne contient que cette image. Imaginez maintenant ce que nous obtenons en mettant cette ligne dans une cellule de tableau (figure 6).

- -

Figure 6

- -

Et là, ça y est — des espaces s'ouvrent là où il n'y en avait pas auparavant. C'est pire avec de petites images comme celles qui ne font qu'un pixel, comme l'illustre la figure 7.

- -

Figure 7

- -

Maintenant, toutes sortes d'espaces s'ouvrent inopinément. C'est suffisant pour rendre fou un graphiste.

- -

Les solutions possibles

- -

Une solution évidente existe — arrêter de créer des mises en page dépendantes de tableaux ou utilisant des images découpées ou d'espacement de 1 pixel — mais elle n'est pas terriblement pratique pour de nombreux graphistes Web, et elle n'aide pas à corriger les anciennes conceptions qui volent en éclats dans les navigateurs récents. Une autre solution évidente consiste à vous assurer que votre document ne déclenchera pas le mode de rendu « standard ».

- -

Cela peut ce faire à l'aide d'une déclaration DOCTYPE qui appellera le mode « quirks » ou le mode « presque standard », ou en ne mettant tout simplement pas de DOCTYPE dans votre document. L'absence de DOCTYPE empêchera la validation et ce n'est par conséquent par recommandé. Pour les auteurs qui travaillent avec des documents récupérés d'autres personnes, un DOCTYPE pour le mode « quirks » est le meilleur choix. Dans le cas où l'auteur écrit un nouveau document ou s'il désire migrer une mise en page en respectant le plus possible les standards, alors le mode « presque standard » est probablement plus adapté.

- -

Bien sûr, les documents écrits en XHTML Strict ou en HTML Strict appelleront le mode de rendu « standard », aussi allons-nous voir deux méthodes basiques de résoudre ce problème dans les documents stricts, et un certain nombre de façons d'appeler les « corrections ».

- -

Définir les images comme éléments de type bloc

- -

Le premier choix, et un de ceux qui fonctionnera pour les graphismes chargés en images, est de convertir les images, qui sont par défaut des éléments en-ligne, en éléments de type bloc. Faites cela et une image ne créera plus de boîte en-ligne, ce qui résoudra le problème — en supposant que l'image est le seul élément contenu dans la cellule de tableau. Dans le cas le plus simple, il faudra ajouter une règle de style comme celle qui suit :

- -
td img {display: block;}
-
- -

Observons l'application de cette règle au code HTML suivant :

- -
<table cellspacing="0" cellpadding="0" border="0" width="500">
-
-  <tr>
-    <td>
-      <img src="nav1.gif"><img src="nav2.gif"><img src="nav3.gif">
-      <img src="nav4.gif"><img src="nav5.gif">
-    </td>
-  </tr>
-
-  <tr>
-    <td style="background: red;">
-      <img src="smallred.gif" height="1" width="1">
-    </td>
-  </tr>
-
-  <tr>
-    <td>
-      <p style="margin: 0.5em;">Ce texte est dans une
-      autre cellule de tableau. Au milieu du texte se
-      trouve une icône <img src="icon2.gif"> indiquant
-      un lien externe. It's very worldly.  Lorem
-      ipsum, dolor sit amet…</p>
-    </td>
-  </tr>
-
-</table>
-
- -

Comme on peut le voir sur la figure 8, cela fonctionne dans certain cas, mais ce n'est pas vrai toutes les images.

- -

Figure 8

- -

La fine ligne rouge indique que la cellule est redimensionnée à 1 pixel de hauteur par l'image GIF d'espacement de 1 pixel, comme le voulait le graphiste. Malheureusement, les boutons en haut de la cellule sont maintenant des éléments de type bloc et ils s'empilent les uns au dessus des autres au lieu de s'afficher côte-à-côte.

- -

Une solution possible consiste à ajouter une classe CSS pour toutes les images nécessitant une redéfinition en éléments de type bloc et d'écrire la règle qui correspond :

- -
td img.decoration {display: block;}
-
-<td>
-  <img src="reddot.gif" class="decoration">
-</td>
-
- -

Selon le graphisme, cela pourrait conduire à ajouter de nombreuses classes pour ce simple effet. Ce sera particulièrement vrai si de nombreuses cellules de 1 pixel destinées à créer des lignes d'empilement idéales sont présentes, ou quelque chose dans ce genre. Si vous disposez d'un balisage se prêtant bien à cette approche, vous pouvez définir des classes CSS sur les rangs de tableau plutôt que sur les images. Ainsi vous auriez :

- -
tr.decoration img { display: block; }
-
- -

… avec la modification du code HTML suivante :

- -
<tr class="decoration">
-  <td style="background: red;">
-    <img src="smallred.gif" height="1" width="1">
-  </td>
-</tr>
-
- -

Le résultat obtenu est que le GIF d'espacement devient un élément de type bloc, sans que l'on touche aux autres images. Cela conduit au résultat décrit par la figure 9.

- -

Figure 9

- -

Vous pouvez également classer les cellules plutôt que les rangs, si c'est le meilleur choix pour vous. Dans tous les cas, définir les images en élément de type bloc peut avoir des effets inattendus si vos cellules de tableau contiennent plus d'une image, comme sur la figure 8.

- -

Bien sûr, bien que nous ayons une cellule d'espacement de 1 pixel à la figure 9, nous avons toujours un espace indésirable sous les boutons et sur toute la largeur. Enlever cet espace pourrait être aussi facile que de mettre chaque image dans une cellule de tableau et de les définir en élément de type bloc, mais laissons-les toutes dans la même cellule que nous puissions illustrer une autre approche.

- -

Utilisation de l'alignement vertical

- -

L'autre solution consiste à laisser l'image comme élément en-ligne et de modifier son alignement vertical par rapport à la ligne de référence de la boîte en-ligne. Par exemple, vous pouvez essayez ce qui suit :

- -
td img { vertical-align: bottom; }
-
- -

Ceci alignera les bords inférieurs des images avec les bords inférieurs des boîtes de type en-ligne, plutôt qu'avec la ligne de base. Comme vous pouvez le voir sur la figure 10, nous obtenons l'effet souhaité : l'espace sous les images de la barre de navigation a disparu. Cependant, la cellule décorative est toujours trop grande, et les autres images sont mal alignées par rapport au texte qui les entoure.

- -

Figure 10

- -

Une fois encore, nous pourrions définir des classes d'images, de cellules ou de rangs afin de nous rapprocher de l'effet désiré. Cependant, les styles affichés ci-dessus ne surmonteront pas le problème des images d'espacement, parce que la boîte en-ligne qui les entoure aura la hauteur de la police pour la cellule, et ne rétrécira donc pas. L'image se déplacera vers le bas de la cellule, mais la cellule ne « rétractera » pas sur l'image. De plus, toute autre image de taille plus petite que la boîte en-ligne aura toujours un espace autour d'elle — comme cela se produit avec la cellule de séparation rouge. L'image d'espacement de 1 pixel est maintenant alignée dans la cellule avec le bord inférieur de celle-ci, mais la ligne de référence est de retour et elle a la taille du texte normal.

- -

Voyez, par exemple, la figure 11, où la taille de la police a été considérablement augmentée. Les images de la barre de navigation ont maintenant un espace en dessous d'elles, et la bande rouge est bien plus large.

- -

Figure 11

- -

Il est difficile d'éviter cela, parce que les images sont, dans cette solution, encore des éléments de type en-ligne et participent donc toujours à la création d'une boîte de type en-ligne. Si cette boîte devient suffisamment grande, l'espace commencera à apparaître autour des images.

- -

Voir plus loin

- -

Grâce à l'implémentation minutieuse de CSS2 dans Mozilla, ce problème des images en-ligne dans des cellules de tableaux créant des espaces non désirés a été porté à l'attention du groupe de travail CSS du W3C. Plusieurs propositions de corrections ont été soumises, mais l'une des plus prometteuses est la propriété line-box-contain, qui a été proposée pour l'intégration dans CSS3. Si cette propriété devait être adoptée, alors tous les navigateurs la supportant pourraient émuler le comportement traditionnel de « rétrécissement », sans risquer d'autre problème d'affichage avec la règle suivante :

- -
td {line-box-contain: font replaced;}  /* proposée pour CSS3 */
-
- -

Il existe d'autres solutions possibles dans le brouillon de travail CSS3, comme line-height-policy (en). Évidemment, plus vite des solutions seront trouvées et implémentées, plus les auteurs seront contents.

- -

Recommandations

- -

En l'absence du support de CSS3, il est difficile d'établir un ensemble précis de règles permettant de résoudre chaque occurrence de ces problèmes, car la meilleure solution pour un document donné dépendra grandement de sa structure. Si votre document utilise un balisage transitionnel, assurez-vous que son DOCTYPE corresponde et qu'il n'appelle pas le mode « standard ». Cela évitera aux navigateurs d'utiliser les modes de rendu standards, et ainsi tous les problèmes liés à la disposition des images seront résolus. Si vous utilisez un balisage strict, ou si vous avez besoin pour toute autre raison d'avoir un mode de rendu « standard », alors souvenez-vous de ces conseils :

- - - -

Avec un cocktail judicieux des différentes approches et une réduction du nombre de GIF d'espacement de 1 pixel — qui ne sont absolument pas nécessaires dans un navigateur respectant les standards CSS — il est toujours possible de contourner cet étrange effet du support des standards.

- -

La meilleure solution est de s'assurer que les images soient toujours dans les cellules elles-mêmes, ce qui permet de les définir comme éléments de type bloc, mais comme toujours, cela dépendra de la conception de l'auteur.

- -

Articles connexes

- - - -
-

Informations sur le document original

- - -
- -

Interwiki Languages Links

- -

diff --git a/files/fr/archive/misc_top_level/index.html b/files/fr/archive/misc_top_level/index.html deleted file mode 100644 index 95bf3b61ab..0000000000 --- a/files/fr/archive/misc_top_level/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Misc top level -slug: Archive/Misc_top_level -translation_of: Archive/Misc_top_level ---- -

In progress. These pages were moved from the top level of MDN in a spate of furious reorganization.

- -

diff --git a/files/fr/archive/misc_top_level/monitoring_wifi_access_points/index.html b/files/fr/archive/misc_top_level/monitoring_wifi_access_points/index.html deleted file mode 100644 index 11f243a830..0000000000 --- a/files/fr/archive/misc_top_level/monitoring_wifi_access_points/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Monitoring WiFi access points -slug: Archive/Misc_top_level/Monitoring_WiFi_access_points -translation_of: Archive/Misc_top_level/Monitoring_WiFi_access_points ---- -

- -

Avec les privilèges UniversalXPConnect le code peut scruter les points d'accès WiFi disponibles afin d'obtenir des informations à leur sujet, entre autres leur SSID, adresses MAC et la force du signal. Cette fonctionnalité a été introduite principalement pour permettre aux services de geolocalisation d'utiliser les services de localisation basés sur le WiFi.

- -

Exemple

- -

Cette exemple affiche simplement une liste des points d'accès diponibles.

- -
<html>
-<head>
-<title>Exemple de scrutation WiFi</title>
-<script>
-
-var count = 0;
-
-function test() {
-}
-
-test.prototype =
-{
-  onChange: function (accessPoints)
-  {
-    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-    var d = document.getElementById("d");
-    d.innerHTML = "";
-
-    for (var i=0; i<accessPoints.length; i++) {
-      var a = accessPoints[i];
-      d.innerHTML += "<p>" + a.mac + " " + a.ssid + " " + a.signal + "</p>";
-    }
-
-    var c = document.getElementById("c");
-    c.innerHTML = "<p>" + count++ + "</p>";
-
-  },
-
-  onError: function (value) {
-     alert("error: " +value);
-  },
-
-  QueryInterface: function(iid) {
-        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-        if (iid.equals(Components.interfaces.nsIWifiListener) ||
-            iid.equals(Components.interfaces.nsISupports))
-            return this;
-        throw Components.results.NS_ERROR_NO_INTERFACE;
-   },
-}
-
-  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-
-  var listener = new test();
-  var wifi_service = Components.classes["@mozilla.org/wifi/monitor;1"].getService(Components.interfaces.nsIWifiMonitor);
-
-  wifi_service.startWatching(listener);
-
-</script>
-</head>
-
-<body>
-<div id="d"><p></p></div>
-<div id="c"><p></p></div>
-</body>
-</html>
-
- -

L'objet nsIWifiListener

- -

La première action de ce code est de prototyper l'objet écouteur qui recevra les notifications de changement dna sla liste des points d'accès. Cet objet est décrit par les lignes 11 à 40.

- -

La méthode onChange() (lignes 13 à 27) commence par activer les privilèges UniversalXPConnect, puis vide le div (d) qui va recevoir la liste des points daccès mis à jour. La boucle lignes 19 à 22 itère ensuite sur la liste des points d'accès reçus dans le tableau accessPoints et les ajoute au contenu du div.

- -

Par la suite le div c est mis à jour avec le nombre de fois où liste a été  renouvellée.

- -

La méthode onError() fait simplement surgir une laert qui affiche le code erreur reçu.

- -

Lancer la scrutation des points d'accès

- -

Pour commencer la scrutation des points d'accès, on instancie l'écouteur (ligne 44) puis  on attrape une référence à l'interface de scrutation WiFi ligne 45. La scrutation commence ligne 47 en appelant la méthode startWatching() sur l'interface.

- -

Voir aussi

- - diff --git a/files/fr/archive/misc_top_level/utilisation_de_data_islands_xml_dans_mozilla/index.html b/files/fr/archive/misc_top_level/utilisation_de_data_islands_xml_dans_mozilla/index.html deleted file mode 100644 index 5e4e7d224e..0000000000 --- a/files/fr/archive/misc_top_level/utilisation_de_data_islands_xml_dans_mozilla/index.html +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: Utilisation de Data Islands XML dans Mozilla -slug: Archive/Misc_top_level/Utilisation_de_Data_Islands_XML_dans_Mozilla -tags: - - Obsolete - - XML -translation_of: Archive/Misc_top_level/Using_XML_Data_Islands_in_Mozilla ---- -

 

-

Cet article est obsolète. S'il vous plaît voir le nouvel article en anglais.

-

Une fonctionnalité pratique d'Internet Explorer est la possibilité d'utiliser des îlots de données (Data islands, en anglais) pour lier des données aux contrôles HTML sur une page. Cette fonctionnalité n'est pas intégrée telle quelle dans Mozilla, mais on peut aisément imiter ce comportement pour créer des applications Web multi-navigateurs.

-

L'îlot de données basique que nous allons utiliser est un élément XML simple, soit lié à la page, soit codé explicitement dans celle-ci. Voici un exemple simple pour illustrer ceci :

-
<xml id="xmlDataIsland">
-   <loaninfo>
-       <borrower id="1">
-           <firstname>Brian</firstname>
-           <middlename>Ellis</middlename>
-           <lastname>Johnson</lastname>
-       </borrower>
-   </loaninfo>
-</xml>
-
-

Avec cet îlot de données, nous pouvons placer sur une page autant de contrôles que désirés en liant simplement l'îlot de données à ces contrôles à l'aide de JavaScript et du DOM.

-

Pour lier ceci, tout ce que nous avons besoin de faire est de confier le remplissage des contrôles à une fonction telle que :

-
function loadFields()
-{
-   var xmlNode = window.document.getElementsByTagName('xml');
-   var borrowerNode = xmlNode[0].childNodes[1];
-   if(borrowerNode.hasChildNodes())
-   {
-       var i = 0;
-       var xmlChildNode, nodeVal=;
-       while(borrowerNode.childNodes[i])
-       {
-           // Recherche un nœud
-           xmlChildNode = borrowerNode.childNodes[i];
-           // Vérifie le type de nœud
-           if(xmlChildNode.nodeType != 3) // #text == 3
-           {
-               // Récupère la valeur du nœud (aka texte)
-               nodeVal += xmlChildNode.firstChild.nodeValue + ' ';
-           }
-           i++;
-       }
-       // Applique la valeur du contrôle au nœud
-       window.document.getElementById('txtBorrowerName').value = nodeVal;
-   }
-}
-
-

Exemple 1

-

Voici un autre exemple d'ilot de données XML utilisable dans Mozilla ou IE :

-
<xml id="mxxdataisland">
-   <mxxdataisland>
-       <rowset tagid="DATES"></rowset>
-       <rowset tagid="SUBJPRP"></rowset>
-       <rowset tagid="PRODUCT"></rowset>
-   </mxxdataisland>
-</xml>
-
-

Le role de cet îlot de données est d'apprendre au serveur d'applications à quels tableaux cette page va accéder.

-

Les contrôles de cette page sont alors liés au moyen des attributs personnalisés MXXOBJECT et MXXPROPERTY, très semblables aux attributs DATASRC et DATAFLD utilisés par IE. Ceci permet aux données XML retournées d'être analysées et liées ou « attachées » aux contrôles.

-

Remarque : Les noms MXXOBJECT et MXXPROPERTY ont été créés pour cet article, et peuvent être différents.

-

Lier les contrôles :

-
<input
-    type="text"
-    id="PropertyStAddr1"
-    name="PropertyStAddr1"
-    style="height:21px;width:302px;text-align:left;"
-    maxlength="35"
-    class="fldDefault"
-    mxxobject="SUBJPRP" mxxproperty="PropertyStAddr1" <-- voici nos balises "d'attache"
->
-
-<input
-    type="text"
-    class="fldZipCode"
-    name="PropertyZip"
-    id="PropertyZip"
-    size="10"
-    style="height:21px;width:69px;"
-    mxxobject="SUBJPRP" mxxproperty="PropertyZip" <-- voici nos balises "d'attache"
-    mxxxmlnode="xmldef_PropertyZip" <-- this links to a control-level data island
-    mxxtype="MXXZipCodeAutoLoadEdit" <-- type personnalisé et optionnel pour manipuler les contrôles
->
-
-

Comme nous envoyons du XML au serveur, nous pouvons également lui envoyer certaines informations supplémentaires dont un contrôle particulier pourrait avoir besoin, ou lui signaler d'autres contrôles sur la page liés ou dirigés par un contrôle. Ci-dessous, voici un exemples de DataIsland personnalisé pour un type spécifique de contrôle :

-
<select
-    id="PropertyState"
-    name="PropertyState"
-    style="height:20px;width:48px;"
-    class="cmbDefault"
-    mxxtype="GFXStateList"
-    mxxxmlnode="xmldef_PropertyState"
-    mxxobject="GOXSUBJPRP" mxxproperty="PropertyState"
->
-</select>
-
-<div style="width:0px; height:0px; visibility:hidden;z-index:1">
-    <xml id="xmldef_PropertyState">
-        <mxxstatelist>
-            <status value="initialize"></status>
-            <contenttype value="abbrev"></contenttype>
-            <controls>
-                <control type="countylist" tagid="PropertyCounty" contenttype="name"
-                         valuetype ="name"></control>
-            </controls>
-        </mxxstatelist>
-    </xml>
-</div>
-
-

Telles quelles, ces XMLDataIslands ne nous sont d'aucune utilité. Il nous faut d'abord accomplir deux choses.

-
    -
  1. Construire un gestionnaire de contrôle pour gérer les mises à jour et le rendu des différents types de contrôles.
    - (Note : Les types de contrôles peuvent être n'importe quoi ; objet formulaire, tableau, spans, divs, iFrames, et tout ce à quoi vous avez accès via le DOM et un ID est valide)
  2. -
  3. Construire un gestionnaire pour créer un DOM à envoyer au serveur, et transmettre la réponse une fois analysée aux contrôles.
  4. -
-

Tout ce qu'un gestionnaire de contrôle doit être capable est de mettre à jour une valeur de contrôle. Cela signifie que tous les TextInputs peuvent partager un même gestionnaire, les selects un autre, etc. Une façon d'y parvenir est de regrouper les contrôles d'une page donnée dans un tableau associatif. Puis, lorsqu'une réponse est retournée, nous pouvons analyser le code XML à l'aide d'un attribut ID pour faire correspondre les données utiles XML avec un contrôle.

-
<input type="text" id="FirstName" ...>
-
-

Exemple de fonction de collection d'objets :

-
   // Extraction de tous les éléments pour les analyser
-   var tags = window.document.body.getElementsByTagName("*");
-   var pPrevElem = null;
-   var pNextElem = null;
-   for (var i = 0; i < tags.length; i++)
-   {
-       pHTMLElement = tags[i];
-
-       switch (pHTMLElement.tagName.toLowerCase())
-       {
-           case "span":
-           case "table":
-               // this indexes by controlID and stores the elementObject
-               m_MXXPageObjectsArray[pHTMLElement.id] = pHTMLElement;
-               break;
-           case "input":
-           case "select":
-           case "textarea":
-           case "button":
-               // this indexes by controlID and stores the elementObject
-               m_MXXPageObjectsArray[pHTMLElement.id] = pHTMLElement;
-               break;
-           case "div":
-               // this indexes by controlID and stores the elementObject
-               m_MXXPageObjectsArray[pHTMLElement.id] = pHTMLElement;
-               break;
-       }
-   }
-
-

La charge XML sortante pourrait être :

-
<page id="NewUser">
-    <formcontrols>
-        <control id="FirstName">
-            <value />
-        </control>
-    </formcontrols>
-</page>
-
-

Le retour sera alors :

-
<page id="NewUser">
-    <formcontrols>
-        <control id="FirstName">
-            <value>Dennis</value>
-        </control>
-    </formcontrols>
-</page>
-
-

L'analyseur prend alors la réponse retournée, la charge dans un DOM XML, et passe chaque nœud au gestionnaire de contrôle approprié.

-
   processTextControl(control, xmlNode);
-
-

Exemple d'analyse XML retournée :

-
   // parseout to controls
-   var formControlNodes = xmlDoc.getElementsByTagName('formcontrols');
-   for(i=0; i<formControlNodes.length;++i)
-   {
-       var pFormControlNode = formControlNodes[i];
-       var pPageObject = m_MXXPageObjectsArray[pFormControlNode.getAttribute('id')];
-       if(!pPageObject)
-           continue;
-       processTextControl(pPageObject, pBoundControlNode);
-   }
-
-

Le gestionnaire de contrôles va alors extraire les données nécessaires pour remplir le contrôle. Dans ce cas, la valeur nodevalue sera utilisée pour l'attribut control.value. Un Select pourrait créer de nouvelles Options() avec ces données, ou même remplacer le noeud ou le HTML par les nouvelles données.

-

Voici une page exemple.

-

Finalement, voici un exemple simple de tableau utilisant les Data Islands XML qui fonctionne dans IE6 et dans Mozilla.

-

Pour que tout ce qui est décrit ci-dessus fonctionne, il nous faut envoyer cette information au serveur. Il y a plusieurs moyens, dont ASP, JSP et CGI. J'utilise XMLHTTP car il me permet de mettre à jour la page sans avoir à la recharger, qu'il permet aux contrôles de mettre à jour d'autres contrôles et qu'il agit comme une application 2-tiers classique en fournissant des mises à jour instantanées et la gestion des évènements.

-

 

-
-

Informations sur le document original

- -
-

Liens Interwikis

-

 

diff --git "a/files/fr/archive/misc_top_level/utilisation_des_pr\303\251f\303\251rences_de_contenu/index.html" "b/files/fr/archive/misc_top_level/utilisation_des_pr\303\251f\303\251rences_de_contenu/index.html" deleted file mode 100644 index bba4777f31..0000000000 --- "a/files/fr/archive/misc_top_level/utilisation_des_pr\303\251f\303\251rences_de_contenu/index.html" +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Utilisation des préférences de contenu -slug: Archive/Misc_top_level/Utilisation_des_préférences_de_contenu -tags: - - Firefox 3 -translation_of: Archive/Misc_top_level/Using_content_preferences ---- -

-Firefox 3 introduit le concept de préférences de contenu. Ceci permet à du code s'exécutant dans le chrome (en d'autres mots : les extensions et le navigateur lui-même, pas les sites Web) d'enregistrer localement des préférences sur une base site par site. Cela permet d'écrire une extension permettant à l'utilisateur de personnaliser l'apparence de sites Web particuliers (augmenter la taille de la police sur des sites qui utilisent des tailles très petites, par exemple). -

Le service de préférences de contenu, implémenté par nsIContentPrefService, offre des fonctions permettant de définir et de lire des préférences pour des sites particuliers ou dans l'espace global des préférences ; les préférences globales sont utilisées lorsqu'une préférence particulière à un site n'est pas disponible. -

-

Exemple : définition et lecture de préférences

-

Cet exemple montre comment enregistrer une préférence et ensuite retrouver sa valeur. -

-
var ioSvc = Components.classes["@mozilla.org/network/io-service;1"]
-            .getService(Components.interfaces.nsIIOService);
-var prefService = Components.classes["@mozilla.org/content-pref/service;1"]
-                  .getService(Components.interfaces.nsIContentPrefService);
-
-// Crée un objet URI référençant le site pour lequel enregistrer une préférence
-var uri = ioSvc.newURI("http://developer.mozilla.org/", null, null);
-
-// Définit la valeur de la préférence "devmo.somesetting" à "foo".
-
-prefService.setPref(uri, "devmo.somesetting", "foo");
-
-...
-
-// Récupère la valeur de la préférence "devmo.somesetting".
-
-var value = prefService.getPref(uri, "devmo.somesetting");
-
-

Voir également

-

nsIContentPrefService, nsIContentPrefObserver -


-

-
-
diff --git a/files/fr/archive/mozilla/drag_and_drop/index.html b/files/fr/archive/mozilla/drag_and_drop/index.html deleted file mode 100644 index bfe2d51f0e..0000000000 --- a/files/fr/archive/mozilla/drag_and_drop/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Drag and Drop -slug: Archive/Mozilla/Drag_and_drop -tags: - - TopicStub - - XUL -translation_of: Archive/Mozilla/Drag_and_drop ---- -

{{ Next("Drag and Drop JavaScript Wrapper") }}

- -

{{ deprecated_header("gecko1.9.1") }}

- -
Depuis Gecko 1.9.1 (Firefox 3.5), ces API sont officiellement obsolètes, les API portables plus récentes et plus simple doivent être utilisées à leur place.
- -

Cette section décrit comment implémenter des objets qui peuvent être glissés et déposés sur d'autres objets.

- -

L'interface glisser-déposer

- -

De nombreuses interfaces utilisateur permettent de faire glisser des objets particuliers dans l'interface. Par exemple, faire glisser des fichiers vers d'autres répertoires ou faire glisser une icône vers une autre fenêtre pour ouvrir le document auquel elle fait référence. Mozilla et XUL fournissent un certain nombre d'événements qui peuvent gérer lorsque l'utilisateur tente de faire glisser des objets.

- -

Un utilisateur peut commencer à faire glisser en maintenant le bouton de la souris enfoncé et en déplaçant la souris. Le glissement s'arrête lorsque l'utilisateur relâche la souris. Les gestionnaires d'événements sont appelés lorsque l'utilisateur démarre et termine le glissement, et à divers points intermédiaires.

- -

Mozilla implémente le glissement en utilisant une session de glissement. Lorsqu'un utilisateur demande à faire glisser quelque chose qui peut être glissé, une session de glissement doit être lancée. La session de glissement gère la mise à jour du curseur de la souris et l'emplacement où l'objet doit être déposé. Si quelque chose ne peut pas être glissé, il ne doit pas démarrer une session de glisser. Étant donné que l'utilisateur n'a généralement qu'une seule souris, une seule session de glissement est en cours d'utilisation à la fois.

- -

Notez que les sessions de glissement peuvent être créées depuis Mozilla lui-même ou depuis d'autres applications. Mozilla traduira les données glissées selon les besoins.

- -

La liste ci-dessous décrit les gestionnaires d'événements qui peuvent être appelés, qui peuvent être placés sur n'importe quel élément. Il vous suffit de mettre des valeurs pour les gestionnaires là où vous devez faire quelque chose lorsque l'événement se produit.

- -
-
ondrag {{ Fx_minversion_inline(3) }}
-
Appelé périodiquement tout au long de l'opération de glisser-déposer.
-
ondraggesture 
-
Appelé lorsque l'utilisateur commence à faire glisser l'élément, ce qui se produit normalement lorsque l'utilisateur maintient le bouton de la souris enfoncé et déplace la souris. Le script de ce gestionnaire doit configurer une session de glissement.
-
ondragstart {{ Fx_minversion_inline(3) }} 
-
Un alias pour ondraggesture; il s'agit du nom de spécification HTML 5 de l'événement et peut être utilisé en HTML ou XUL; cependant, pour une compatibilité descendante avec les anciennes versions de Firefox, vous souhaiterez peut-être continuer à utiliser ondraggesture dans XUL.
-
ondragover 
-
Ce gestionnaire d'événements est appelé pour un élément lorsque quelque chose est glissé dessus. Si l'objet peut être déposé sur l'élément, la session de glissement doit être notifiée.
-
ondragenter 
-
Appelé pour un élément lorsque le pointeur de la souris passe pour la première fois sur l'élément pendant que quelque chose est déplacé. Cela peut être utilisé pour modifier l'apparence de l'élément pour indiquer à l'utilisateur que l'objet peut être déposé dessus.
-
ondragexit 
-
Appelé pour un élément lorsque le pointeur de la souris sort d'un élément pendant que quelque chose est déplacé. Il est également appelé une fois qu'une suppression est terminée afin qu'un élément ait une chance de supprimer toute mise en évidence ou autre indication.
-
ondragdrop 
-
Ce gestionnaire d'événements est appelé pour un élément lorsque quelque chose est déposé sur l'élément. À ce stade, l'utilisateur a déjà relâché le bouton de la souris. L'élément peut simplement ignorer l'événement ou le gérer d'une manière ou d'une autre, par exemple en collant l'objet glissé sur lui-même.
-
ondragend {{ Fx_minversion_inline(3) }} 
-
Appelé lorsque l'opération de glissement est terminée.
-
- -

Il existe deux façons de gérer les événements par glisser-déposer. Cela consiste d'abord à utiliser directement les interfaces XPCOM glisser-déposer. La seconde consiste à utiliser un objet wrapper JavaScript qui gère une partie de cela pour vous. Le code de ce wrapper se trouve dans un fichier nommé {{ Source("toolkit/content/nsDragAndDrop.js nsDragAndDrop.js") }} qui est contenu dans le package widget-toolkit (ou global).

- -

Interfaces XPCOM Glisser-déposer

- -

Deux interfaces sont utilisées pour prendre en charge le glisser-déposer. Le premier est un service de glissement, nsIDragService et le second est la session de glissement, nsIDragSession.

- -

Le nsIDragService est responsable de la création de sessions de glissement lorsqu'un glissement démarre et de la suppression de la session de glissement lorsque le glissement est terminé. La fonction invokeDragSession doit être appelée pour démarrer un glissement dans un gestionnaire d'événements ondraggesture. Une fois cette fonction appelée, un glissement a commencé.

- -

La fonction invokeDragSession prend quatre paramètres, comme décrit ci-dessous:

- -
invokeDragSession(element,transferableArray,region,actions)
-
- -
-
element 
-
Une référence à l'élément qui est déplacé. Cela peut être récupéré en obtenant la propriété event.target pendant le gestionnaire d'événements.
-
transferableArray 
-
Un tableau d'objets nsITransferable, un pour chaque élément glissé. Un tableau est utilisé car vous souhaiterez peut-être faire glisser plusieurs objets à la fois, comme un ensemble de fichiers.
-
region 
-
Une région utilisée pour l'indication de rétroaction. Cela devrait généralement être défini sur null.
-
actions 
-
Les actions utilisées par le glissement. Cela doit être défini sur l'une des constantes suivantes, ou sur plusieurs ajoutées. L'action peut être modifiée pendant le glissement en fonction de ce qui est glissé.
-
- -
-
nsIDragService.DRAGDROP_ACTION_NONE 
-
-
-
Utilisé pour indiquer qu'aucun glissement n'est valide.
-
nsIDragService.DRAGDROP_ACTION_COPY 
-
L'élément déplacé doit être copié vers son emplacement de dépôt.
-
nsIDragService.DRAGDROP_ACTION_MOVE 
-
L'élément déplacé doit être déplacé vers son emplacement de dépôt.
-
nsIDragService.DRAGDROP_ACTION_LINK 
-
Un lien (ou un raccourci ou un alias) vers l'élément en cours de glissement doit être créé à l'emplacement de dépôt.
-
-
-
- -

L'interface {{ interface("nsIDragService") }} fournit également la fonction getCurrentSession qui peut être appelée depuis les gestionnaires d'événements de glissement pour obtenir et modifier l'état du glissement. La fonction renvoie un objet qui implémente {{interface ("nsIDragSession")}}.

- -

L'interface nsIDragSession est utilisée pour obtenir et définir les propriétés du glissement en cours. Les propriétés et méthodes suivantes sont disponibles:

- -
-
canDrop 
-
Définissez cette propriété sur true si l'élément sur lequel se trouve actuellement la souris peut accepter que l'objet actuellement glissé soit déposé dessus. Définissez la valeur sur false si cela n'a pas de sens d'y déposer l'objet. Cela doit être modifié dans les gestionnaires d'événements ondragover et ondragenter.
-
dragAction 
-
Défini sur l'action en cours à effectuer, qui doit être une ou plusieurs des constantes décrites précédemment. Cela peut être utilisé pour fournir des commentaires supplémentaires à l'utilisateur.
-
numDropItems 
-
Le nombre d'éléments glissés. Par exemple, il sera défini sur 5 si cinq signets sont déplacés.
-
getData(transfer,index) 
-
Récupérez les données glissées. Le premier argument doit être un objet nsITransferable pour contenir les données. Le deuxième argument, index, doit être l'index de l'élément à renvoyer.
-
sourceDocument 
-
Le document où le glissement a commencé
-
sourceNode 
-
Le nœud DOM où le glissement a commencé.
-
isDataFlavorSupported(flavor) 
-
Renvoie true si les données déplacées contiennent des données de la saveur spécifiée.
-
- -

{{ Next("Drag and Drop JavaScript Wrapper") }}

- -
-

Informations sur le Document Original

- - -
diff --git a/files/fr/archive/mozilla/firefox/index.html b/files/fr/archive/mozilla/firefox/index.html deleted file mode 100644 index 9e61c718ff..0000000000 --- a/files/fr/archive/mozilla/firefox/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Firefox -slug: Archive/Mozilla/Firefox -translation_of: Archive/Mozilla/Firefox ---- -

In progress. Out-of-date information about the Firefox project.

- -

diff --git "a/files/fr/archive/mozilla/firefox/les_\303\251tats_de_contenu_et_le_syst\303\250me_de_style/index.html" "b/files/fr/archive/mozilla/firefox/les_\303\251tats_de_contenu_et_le_syst\303\250me_de_style/index.html" deleted file mode 100644 index 9d070c55b1..0000000000 --- "a/files/fr/archive/mozilla/firefox/les_\303\251tats_de_contenu_et_le_syst\303\250me_de_style/index.html" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Les états de contenu et le système de style -slug: Archive/Mozilla/Firefox/Les_états_de_contenu_et_le_système_de_style -tags: - - Développement_de_Mozilla -translation_of: Archive/Mozilla/Firefox/Content_states_and_the_style_system ---- -

-Les états de contenu sont ce que Gecko utilise pour mettre en œuvre les différentes règles CSS dépendant de l'état du contenu (comme par exemple :hover, :active, :focus, target, :checked). Nous nous concentrerons sur la description de la façon dont les changements dans ces états de contenus sont manipulés. -

Généralement, quand l'état de contenu d'un nœud change, le style doit être résolu à nouveau (recalculé) pour ce nœud et tous ses descendants. C'est une opération coûteuse cependant, c'est pourquoi le système de style essaie de minimiser le nombre de styles qu'il doit recalculer. À cette fin, quand une notification <code>ContentStatesChanged</code>(en) est acheminée pour un nœud de contenu, la première chose qui est faite est de vérifier si ce changement dans les états de contenu pourrait affecter certains styles. -

Ceci est réalisé en parcourant la liste de tous les (en) sélecteurs simples CSS2.1 dans toutes les feuilles de style appliquées à la page qui ont une pseudo-classe de dépendance d'état faisant partie du sélecteur. Cette liste est créée durant l'analyse des feuilles de style impliquées. Pour chaque sélecteur de cette liste, on vérifie s'il a pu cesser correspondre au nœud ou commencer à le faire. Si c'est le cas, le style pourrait dépendre de l'état qui a changé et ce style doit donc être recalculé. -

Pour déterminer si le sélecteur pourrait avoir arrêté ou commencé à correspondre au nœud, on vérifie en fait s'il correspond à la règle selon laquelle toutes les pseudo-classes dépendantes de l'état correspondant aux états qui ont changé doivent être traitées comme concordantes avec le nœud (le fait qu'elles concordent, et leur éventuelle inversion). Ceci est nécessaire pour obtenir à la fois les sélecteurs qui se sont mis à concorder et ceux qui ne concordent plus. -

Par exemple, supposons que nous avons les sélecteurs suivants : -

-
 a:hover
- a:not(:hover)
- div:hover
-
-

et que l'état hover sur certains nœuds change. On essaie alors d'appliquer au nœud ces sélecteurs, en supposant qu'à la fois :hover et :not(:hover) correspondent au nœud. L'effet sera donc identique à essayer d'appliquer à chaque nœud les sélecteurs : -

-
 a
- a
- div
-
-

Le code qui met en œuvre ce procédé est dans la méthode SelectorMatches(en), à qui est passée la liste des états qui ont changé dans le paramètre aStateMask. -

diff --git a/files/fr/archive/mozilla/firefox/soap_dans_les_navigateurs_gecko/index.html b/files/fr/archive/mozilla/firefox/soap_dans_les_navigateurs_gecko/index.html deleted file mode 100644 index 34537b58ef..0000000000 --- a/files/fr/archive/mozilla/firefox/soap_dans_les_navigateurs_gecko/index.html +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: SOAP dans les navigateurs Gecko -slug: Archive/Mozilla/Firefox/SOAP_dans_les_navigateurs_Gecko -tags: - - SOAP - - Services_Web_XML -translation_of: Archive/Mozilla/Firefox/SOAP_in_Gecko-based_Browsers ---- -

Cet article décrit comment accéder à un service Web en utilisant SOAP et des fonctions JavaScript disponibles dans les navigateurs Gecko récents.

- -

Introduction

- -

Simple Object Access Protocol(SOAP) est la base de conception des services Web. C'est un protocole XML utilisé pour communiquer et interopérer avec les services Web. Avec Mozilla 1.0 (sur lequel est basé Netscape 7.0x) et Firefox, il est maintenant possible pour le navigateur de communiquer directement avec les services Web en utilisant son implémentation SOAP de bas niveau à l'aide de JavaScript.

- -

L'interface JavaScript de Gecko pour l'établissement des appels SOAP est une API de bas niveau qui requiert la construction de l'enveloppe SOAP en utilisant plusieurs objets JavaScript spécifiques à SOAP. Ce document couvre les opérations SOAP de base. Pour des informations plus détaillées sur l'API de bas niveau de SOAP dans Gecko, voir SOAP Scripts in Mozilla.

- -

L'utilisation de JavaScript pour les communications avec les services Web est sujette aux mêmes politiques de sécurité que tous les autres scripts en terme d'accès inter-domaines. Par conséquent accéder à des services Web situés sur des serveurs autres que celui où est exécuté le JavaScript constitue une violation de la politique inter-domaines. Ce document montrera comment détourner temporairement ces règles pour la conduite de tests.

- -

Paramétrer un appel SOAP

- -

L'objet le plus basique est SOAPCall, il est utilisé pour initier et invoquer un appel SOAP.

- -

Figure 1 : paramétrage de base et invocation d'un appel SOAP

- -
var mySOAPCall = new SOAPCall();
-mySOAPCall.transportURI = "http-based service URI"
-
-var parameters = new Array();
-mySOAPCall.encode(SOAPCall.VERSION_1_1,
-                  // method
-                  "method", "namespaceURI",
-                  // header block
-                  0, null,
-                  // parameter
-                  parameters.length, parameters);
-
-var response = mySOAPCall.invoke();
-
- -

Un objet SOAPCall à un membre appelé transportURI, qui est l'URI de l'emplacement où il doit envoyer l'appel SOAP. La méthode encode() requiert le nom de la méthode à appeler depuis le service Web, son namespaceURI, le nombre de SOAPParameters passé, et un tableau de SOAPParameters qui contient tous les paramètres. Tous ces paramètres peuvent sont regroupés dans le fichier WSDL du service Web, qui sera abordé dans les exemples suivants.

- -

Les paramètres SOAP sont créés à l'aide de l'objet SOAPParameter. Ce sont des paires nom/valeur qui sont passées au service Web.

- -

Figure 2 : Création d'un paramètre SOAP

- -
var param = new SOAPParameter();
-param.name = "translationmode";
-param.value = "en_fr";
-
- -

Traitement d'une réponse

- -

Une fois que invoke() a été appelé, Gecko génère l'enveloppe SOAP et l'envoie à l'URI spécifiée. Comme la requête est synchrone, la réponse sera la valeur retournée par invoke().

- -

Figure 3 : Traitement d'une réponse à un appel SOAP

- -
var returnObject = mySOAPCall.invoke();
-
-if(returnObject.fault){
-  alert("An error occured: " + returnObject.fault.faultString);
-} else {
-  var response = new Array();
-  response = returnObject.getParameters(false, {});
-  alert("Return value: " + response[0].value);
-}
-
- -

La valeur retournée par invoke() est stockée et examinée pour un membre fault. Si il existe, une erreur se produit du côté du service Web, et le message d'erreur est stocké dans fault.faultString. Si fault n'existe pas, nous appelons la fonction getParameters() sur l'objet retourné pour récupérer les SOAPParameters retournés.

- -

Exemple

- -

L'exemple utilise un service Web existant, Babelfish, fournit par xmethods.net. Le service Web Babelfish permet des traductions dans de nombreuses langues. Il prend deux paramètres en entrée : une chaîne au format « originalLanguage_resultLanguage » et le texte à traduire. Le fichier WSDL du service Web Babelfish est disponible à cette adresse et contient toutes les informations nécessaires au paramétrage d'un appel SOAP de bas niveau vers le service Web.

- -

La première étape est de déterminer l'emplacement du service Web, qui sera la valeur du membre transportURI de SOAPCall. Elle peut être trouvée dans l'élément service de WSDL, et plus spécifiquement dans l'attribut location de soap:address.

- -

Figure 4 : Détermination de l'emplacement d'un service Web depuis son WSDL

- -
WSDL:
-  <service name="BabelFishService">
-    <documentation>
-      Traduit des textes dans de nombreuses langues.
-    </documentation>
-    <port name="BabelFishPort" binding="tns:BabelFishBinding">
-      <soap:address location="http://services.xmethods.net:80/perl/soaplite.cgi"/>
-    </port>
-  <service>
-
-JavaScript:
-  var babelFishCall = new SOAPCall();
-  babelFishCall.transportURI = "http://services.xmethods.net:80/perl/soaplite.cgi";
-  ...
-
- -

L'étape suivante est plus complexe : déterminer exactement quels paramètres le service Web attend qu'on lui envoie. Le service Web Babelfish ne possède qu'une méthode, « BabelFish », qui est représentée dans le WSDL entre la balise operation, qui est un enfant de l'élément portType. Chaque operation WSDL possède deux enfants : les éléments d'entrée et de sortie, qui peuvent contenir les types attendus. Les types sont définis dans les éléments message, au nombre de deux : BabelFishRequest, qui est ce qu'on passe au service Web, et BabelFishResponse, le type de retour.

- -

BabelFish attend l'opération deux dans les paramètres translationmode et sourcedata. L'exemple de la figure 5 va traduire la chaîne « I am » d'anglais en français.

- -

Figure 5 : Définir les paramètres nécessaires

- -
WSDL:
-  <message name="BabelFishRequest">
-    <part name="translationmode" type="xsd:string"/>
-    <part name="sourcedata" type="xsd:string"/>
-  </message>
-
-  <message name="BabelFishResponse">
-      <part name="return" type="xsd:string"/>
-  </message>
-
-  <portType name="BabelFishPortType">
-    <operation name="BabelFish">
-      <input message="tns:BabelFishRequest"/>
-      <output message="tns:BabelFishResponse"/>
-    </operation>
-  </portType>
-
-JavaScript:
-  // SOAP parameters
-  var param1 = new SOAPParameter();
-  param1.value = "en_fr";
-  param1.name = "translationmode";
-
-  var param2 = new SOAPParameter();
-  param2.value = "I am";
-
-  param2.name = "sourcedate";
-
-  // combine the 2 params into an array
-  var myParamArray = [param1,param2];
-
- -

Ensuite, il faut définir et invoquer l'objet SOAPCall. « BabelFish » est la méthode que notre exemple veut utiliser pour le service Web. Le prochain paramètre est l'espace de nommage attendu qui doit être passé au service Web pour la méthode BabelFish.

- -

Ceci peut être trouvé dans le l'élément WSDL binding. L'élément binding possède un enfant operation pour la méthode BabelFish. L'espace de nommage voulu est la valeur de l'attribut namespace de soap:body qui se trouve dans l'élément input.

- -

Figure 6 : Définir la méthode d'encodage

- -
WSDL:
-  <binding name="BabelFishBinding" type="tns:BabelFishPortType">
-    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-    <operation name="BabelFish">
-      <soap:operation soapAction="urn:xmethodsBabelFish#BabelFish"/>
-      <input>
-        <soap:body use="encoded" namespace="urn:xmethodsBabelFish"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      ...
-    </operation>
-  </binding>
-
-JavaScript:
-  babelFishCall.encode(0, "BabelFish", "urn:xmethodsBabelFish", 0, null, myParamArray.length, myParamArray);
-
-  var translation = babelFishCall.invoke();
-
- -

Comme on l'a vu à la figure 5, la réponse de la méthode BabelFish ("BabelFishResponse") est un paramètre, à savoir une chaîne. Après avoir vérifier que fault n'a pas été retourné, la méthode getParameters() de l'objet retourné est utilisée pour récupérer un tableau de SOAPResponses. Comme on n'attend qu'un seul paramètre en retour -- le texte traduit -- la méthode alert() est utilisée pour afficher la traduction.

- -

Figure 7 : Traitement de la réponse

- -
JavaScript:
-  if(translation.fault){
-    // erreur retournée par le service Web
-    alert(translation.fault.faultString);
-  } else {
-    // nous attendons un seul SOAPParameter en retour - la chaîne traduite.
-    var response = new Array();
-    response = translation.getParameters(false, {});
-    alert("Translation: " + response[0].value);
-  }
-
- -

Comme indiqué dans l'introduction, les appels SOAP obéissent à une politique d'accès inter-domaines des scripts. Il existe deux façons de contourner cette politique de sécurité pour conduire des tests :

- -
    -
  1. -

    Exécutez le script depuis votre disque local.

    - -

    Enregistrez localement le code sur votre disque dur.

    - -

    Le modèle de sécurité inter-domaines ne concerne pas les codes exécutés depuis un disque local.

    -
  2. -
  3. -

    Activer l'accès inter-domaine

    - -

    Vous pouvez contourner la vérification inter-domaine en définissant une préférence comme expliqué dans l'article contournement des restrictions de sécurité et signature de code (à traduire) et en ajoutant une commande JavaScript pour demander une dérogation à la vérification inter-domaine.

    - -

    Après avoir contourner la vérification, démarrez le navigateur et chargez cette page exemple modifiée. Il vous sera demandé (dans une boîte de dialogue) l'autorisation de désactiver l'inter-domaine (pour cette session) de la fonction générant l'appel SOAP. Le seul changement est l'ajout de netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); à la fonction qui génère l'appel SOAP.

    -
  4. -
- -

Figure 8 : Code final - Exemple local (en), Exemple inter-domaine (en)

- -
JavaScript:
-  var babelFishCall = new SOAPCall();
-  babelFishCall.transportURI = "http://services.xmethods.net:80/perl/soaplite.cgi";
-
-  // paramètres SOAP
-  var param1 = new SOAPParameter();
-  param1.value = "en_fr";
-  param1.name = "translationmode";
-
-  var param2 = new SOAPParameter();
-  param2.value = "I am";
-  param2.name = "sourcedate";
-
-  // combinaison des 2 paramètres dans un tableau
-  var myParamArray = [param1,param2];
-
-  babelFishCall.encode(0, "BabelFish", "urn:xmethodsBabelFish", 0, null, myParamArray.length, myParamArray);
-
-  var translation = babelFishCall.invoke();
-
-  if(translation.fault){
-    // erreur retournée par le service Web
-    alert(translation.fault.faultString);
-  } else {
-   // nous attendons un seul SOAPParameter en retour - la chaîne traduite.
-   var response = new Array();
-   response = translation.getParameters(false, {});
-   alert("Translation: " + response[0].value);
- }
-
- -

Chemin de l'enveloppe Soap

- -

Voici unHTTP dump (utilisant l'outil multiplate-forme Ethereal) de ce qui a été vraiment envoyé et reçu lorsque l'exemple a été exécuté :

- -

Figure 9 : HTTP Dumps

- -
Sent:
-POST /perl/soaplite.cgi HTTP/1.1
-Host: services.xmethods.net:80
-...
-Content-Type: text/xml
-Content-Length: 516
-
-<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
-              xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/"
-              env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
-              xmlns:xs="http://www.w3.org/1999/XMLSchema"
-              xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
-  <env:Header/>
-  <env:Body>
-      <a0:BabelFish xmlns:a0="urn:xmethodsBabelFish">
-          <a0:translationmode xsi:type="xs:string">en_fr</a0:translationmode>
-          <a0:sourcedata xsi:type="xs:string">I am</a0:sourcedata>
-      </a0:BabelFish>
-  </env:Body>
-</env:Envelope>
-
-
-Recieved:
-HTTP/1.1 200 OK
-Date: Tue, 11 Mar 2003 20:28:11 GMT
-Server: Apache/1.3& (Unix) Enhydra-Director/3 PHP/4.0.6 DAV/1.0.3 AuthNuSphere/1.0.0
-SOAPServer: SOAP::Lite/Perl/0.52
-Content-Length: 532
-
-...
-Content-Type: text/xml; charset=utf-8
-
-<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
-                   SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
-                   xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-                   xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
-                   xmlns:xsd="http://www.w3.org/1999/XMLSchema">
-  <SOAP-ENV:Body>
-    <namesp1:BabelFishResponse xmlns:namesp1="urn:xmethodsBabelFish">
-      <return xsi:type="xsd:string">je suis</return>
-    </namesp1:BabelFishResponse>
-  </SOAP-ENV:Body>
-</SOAP-ENV:Envelope>
-
- -

Ressources

- -

SOAP Scripts in Mozilla (en) par Ray Whitmer
- Using the Mozilla SOAP API (en) par Scott Andrew LePera et Apple Developer Connection.
- The Latest w3.org SOAP Specification (en)
- Calling SOAP Servers from JS in Mozilla (en), article de OnLamp.com par Zachary Kessin
- SOAPCall documentation on XULPlanet.com (en)
- SOAPResponse documentation on XULPlanet.com (en)

diff --git a/files/fr/archive/mozilla/firefox/utilisation_de_microformats/index.html b/files/fr/archive/mozilla/firefox/utilisation_de_microformats/index.html deleted file mode 100644 index f45f86c6b4..0000000000 --- a/files/fr/archive/mozilla/firefox/utilisation_de_microformats/index.html +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Utilisation de microformats -slug: Archive/Mozilla/Firefox/Utilisation_de_microformats -tags: - - Firefox 3 - - Microformats -translation_of: Archive/Mozilla/Firefox/Using_microformats ---- -
- -

Les microformats permettent aux sites Web de fournir des données sémantiques au navigateur afin que celui-ci puisse présenter un résumé des informations présentes sur une page sans avoir à connaître de manière particulière d'analyser son contenu. Firefox 3 implémente un objet global Microformats permettant d'accéder aux microformats. Cet objet et l'API associée facilitent la recherche et la lecture de microformats.

- -

Chargement de l'API des microformats

- -

L'objet Microformats est créé à l'aide du nouveau chargeur de scripts JavaScript ajouté à Firefox 3. Pour utiliser l'API, il faut d'abord charger cet objet :

- -
Components.utils.import("resource://gre/modules/Microformats.js");
-
- -

Une fois l'API des microformats chargée, il est possible de gérer des microformats à l'aide des méthodes listées ici. Pour plus d'information sur l'analyse de microformats, consultez Analyse de microformats en JavaScript.

- -

Microformats prédéfinis

- -

Firefox 3 fournit des définitions implémentant divers microformats répandus :

- -
-
adr
-
Représente une adresse (comme une adresse de destination ou une adresse postale).
-
geo
-
Représente un emplacement géographique en utilisant sa latitude et sa longitude.
-
hCard
-
Représente les informations de contact d'une personne.
-
hCalendar
-
Représente une entrée de rendez-vous d'un agenda.
-
tag
-
Utilisé pour ajouter des balises à d'autres microformats.
-
- -

Méthodes

- -

add()

- -

Ajoute un nouveau microformat au module des microformats.

- -

Note : Si un microformat du nom spécifié existe déjà, il sera remplacé par le nouveau.

- -
add(nom, définition);
-
- -
Paramètres
- -
-
nom
-
Le nom du microformat à ajouter au module des microformats.
-
définition
-
Une structure JavaScript décrivant le microformat. Consultez Description de microformats en JavaScript pour plus de détails.
-
- -

count()

- -

Compte le nombre de microformats dans un document qui correspondent à des critères spécifiés.

- -
nbMicroformats = Microformats.count(nom, élémentRacine, options);
-
- -
Paramètres
- -
-
nom
-
Le nom du microformat à compter.
-
élémentRacine
-
Obligatoire. L'élément DOM où doit commencer la recherche. Pour rechercher dans le document entier, utiliser content.document.
-
options
-
Facultatif. Si ce paramètre est fourni, il s'agit d'un objet JavaScript contenant une série de drapeaux parmi les suivants : -
-
recurseExternalFrames
-
Si à true, les cadres enfants font partie de la recherche. La valeur par défaut est true.
-
showHidden
-
Si à true, les microformats cachés seront ajoutés ; autrement ils sont ignorés. La valeur par défaut est false.
-
debug
-
Spécifiez true si le mode debug est utilisé ; sinon indiquez false. La valeur par défaut est false.
-
-
-
- -
Valeur de retour
- -

Une valeur entière indiquant le nombre de microformats correspondant aux critères spécifiés.

- -

debug()

- -

Renvoie une chaîne qui décrit un objet de microformat.

- -

Note : Il est possible d'appeler simplement debug() sur un objet de microformat : objetMicroformat.debug() au lieu d'utiliser cette méthode, si cela vous convient mieux.

- -
dumpString = debug(objetMicroformat);
-
- -
Paramètres
- -
-
objetMicroformat
-
L'objet de microformat à afficher.
-
- -
Valeur de retour
- -

Une chaîne décrivant le contenu de l'objet de microformat spécifié.

- -

get()

- -

Renvoie un tableau d'objets de microformat correspondant aux critères spécifiés.

- -
microformats = Microformats.get(nom, élémentRacine, options, tableauCible);
-
- -
Paramètres
- -
-
nom
-
Le nom du microformat recherché.
-
élémentRacine
-
Obligatoire. L'élément DOM d'où sera lancée la recherche. Pour rechercher dans le document entier, indiquer content.document.
-
options
-
Facultatif. Si fourni, il s'agit d'un objet JavaScript contenant une série éventuellement vide des drapeaux suivants : -
-
recurseExternalFrames
-
Si défini à true, les cadres enfants référençant du contenu externe feront partie de la recherche. La valeur par défaut est true.
-
showHidden
-
Si défini à true, les microformats masqués seront ajoutés ; dans le cas contraire ils seront ignorés. La valeur par défaut est false.
-
debug
-
Indique d'utiliser le modedebug si à true. La valeur par défaut est false.
-
-
-
tableauCible
-
Facultatif. Si fourni, il s'agir d'un tableau d'objets microformat auquel ajouter les résultats de la recherche.
-
- -
Valeur de retour
- -

Un nouveau tableau d'objets microformat correspondant aux critères de recherche, ou le tableau spécifié par le paramètre microformats auquel les nouveaux objets microformat trouvés auront été ajoutés.

- -

getNamesFromNode()

- -

Renvoie une liste de noms de microformats séparés par des espaces qui correspondent au nœud de microformat spécifié.

- -
liste = Microformats.getNamesFromNode(nœud);
-
- -
Paramètres
- -
-
nœud
-
Le nœud pour lequel une liste de noms de microformats doit être obtenue.
-
- -
Valeur de retour
- -

Si le nœud spécifié est un microformat, le résultat est une chaîne listant tous les noms de microformats, séparés par des espaces, qui correspondent à ce nœud. Si le nœud n'est pas un microformat, rien ne sera renvoyé.

- -

getParent()

- -

Renvoie le nœud parent du microformat ou enfant de microformat spécifié.

- -
nœudParent = Microformats.getParent(nœud);
-
- -
Paramètres
- -
-
nœud
-
Le nœud dont le parent doit être retrouvé.
-
- -
Valeur de retour
- -

Le parent du nœud spécifié. Ne renvoie rien si le nœud spécifié n'est pas un microformat ou l'enfant d'un microformat.

- -

isMicroformat()

- -

Détermine si le nœud DOM spécifié est un microformat.

- -
valeur = Microformats.isMicroformat(nœud);
-
- -
Paramètres
- -
-
nœud
-
Le nœud DOM dont on veut savoir s'il est un microformat.
-
- -
Valeur de retour
- -

true si le nœud est un microformat, false sinon.

- -

Note : Cette méthode ne renvoiepas true si le nœud est l'enfant d'un microformat.

diff --git a/files/fr/archive/mozilla/index.html b/files/fr/archive/mozilla/index.html deleted file mode 100644 index 9bdeac9114..0000000000 --- a/files/fr/archive/mozilla/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Archived Mozilla and build documentation -slug: Archive/Mozilla -tags: - - TopicStub -translation_of: Archive/Mozilla ---- -

Ces articles sont des documents archivés et obsolètes sur Mozilla, Gecko et le processus de construction de projets Mozilla.

- - - -
-
Persona
-
Mozilla Persona est un système d'identification pour le web facile à utiliser et à déployer. Il fonctionne sur tous les principaux navigateurs, vous pouvez l'utiliser dès maintenant.
-
Plug-n-Hack
-
Plug-n-Hack (PnH) est un standard proposé par l'équipe de sécurité de Mozilla pour définir comment les outils de sécurité peuvent interagir avec les navigateurs de manière plus utile et utilisable.
-
Prism
-
Prism est une application XULRunner. En plus du moteur de navigation inclus dans XULRunner, elle est constituée de :
-
diff --git "a/files/fr/archive/mozilla/nouveau_mod\303\250le_de_s\303\251curit\303\251_des_services_web/index.html" "b/files/fr/archive/mozilla/nouveau_mod\303\250le_de_s\303\251curit\303\251_des_services_web/index.html" deleted file mode 100644 index a17843a89a..0000000000 --- "a/files/fr/archive/mozilla/nouveau_mod\303\250le_de_s\303\251curit\303\251_des_services_web/index.html" +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Nouveau modèle de sécurité des services Web -slug: Archive/Mozilla/Nouveau_modèle_de_sécurité_des_services_Web -tags: - - SOAP -translation_of: Archive/Mozilla/New_Security_Model_for_Web_Services ---- -

Securing Resources From Untrusted Scripts Behind Firewalls

- -

Introduction

- -

This page describes an alternative mechanism which can be used to protect all internal resources against requests from sandboxed scripts. This should especially be implemented for SOAP calls by untrusted scripts. When an attempt is made to access a resource at a previously-unknown URI, the sandbox reads a file at that domain with declarations to determine whether access is permitted to the script. If the file is not there, access is denied.

- -

The Problem

- -

External untrusted scripts loaded behind a firewall are executed in a sandbox. These scripts may legitimately require access to external resources, but permitting them to access internal resources permits the compromise of these resources that would normally not be available to applications outside of the firewall. The sandbox must distinguish and protect internal resources.

- -

Client-controlled Solutions

- -

Several client-controlled solutions have been designed to prevent sandboxed applications loaded behind a firewall from compromising other resources protected behind the firewall.

- -

Same Source Restriction

- -

By restricting sandboxed scripts to access only resources in the domain from which they were loaded, any script loaded from one domain into another is prevented from accessing resources in the domain into which it has been loaded. This policy has generally been successful in sandboxing Javascript and Java applets across the web.

- -

If the sandbox is unable to distinguish the common URI substring of the domain to be trusted from similar URIs of untrusted domains, then it could allow a script loaded from an indistinguishable domain to exploit firewall-protected resources.

- -

Also, this technique prevents the script from accessing many legitimate external resources not provided in the same domain as the script. This prevents a script from accessing web services and data published from any domain besides its own.

- -

White-listing

- -

By creating a white list of trusted URIs from which scripts are trusted to not compromise internal resources, it is possible to release domains from the stricter same-source sandbox. A white list is a good tool for including always-trusted domains, but on the web, it is often a script from a relatively-untrusted domain that must be granted access to other untrusted domains, without compromising internal domains.

- -

More-complex access lists could be created to try to establish, with finer granularity, which domains are to be accessible or permitted from which other domains, but this requires extensive management which at best is quite error-prone for the end user and easily opens holes in a firewall that do not directly hurt the user who reconfigured his browser to try to access some external service but hurts the owners of other services behind the firewall.

- -

Signed Scripts

- -

A certain degree of additional trust may be lent to a script by having the author digitally sign it. But signed scripts have not really caught on as they require certificates do not change the basic problem that some completely-unknown party has written a script that might now have access to internal resources.

- -

Asking the User

- -

Where the sandbox cannot otherwise determine whether the executing script should be permitted access to the resource, a dialog box may be raised to ask the user to grant special privileges. This is currently permitted for locally-saved scripts and signed scripts. This could be combined with the other options above such as whitelisting, signed scripts, etc. But the big problem with this is that the typical browser user really does not either understand or pay the consequences if he inadvertently opens a hole in his company's firewall. Quite complex settings may be required to permit the user to allow access to desired external services without risking other resources.

- -

Controlling Resource Access on the Server

- -

Access by untrusted scripts really needs to be under the control of the stake holder, which is the resource and server owner -- not the user -- to determine whether a resource should be insulated from web applications loaded from outside of the firewall.

- -

Using a SOAP Header for Verification

- -

SOAP messages have a distinct processing model allowing a header to be added that the recipient is required to understand and accept, which identifies the untrusted source of a script making a request. SOAP services which have not been cleared for access by untrusted scripts will reject the requests. This is offered in the Mozilla implementation of SOAP today.

- -

Unfortunately, this does not prevent SOAP messages from being sent to non-SOAP addresses, which is a big enough problem that the verification cannot stand alone to guarantee that untrusted service requests are always properly rejected by services that should be firewall-protected.

- -

It may also be inconvenient to modify a SOAP service to ignore the specific verification header.

- -

Using a Declarations File

- -

A more robust solution is to rely on getting a file named "web-scripts-access.xml" in the root directory of the server that the sandboxed script requests to communicate with. It should be fairly easy for most providers of public resources to create.

- -

Web Scripts Access Statements

- -

The syntax of statements of the access file are as follows.

- -
<!ELEMENT webScriptAccess (delegate?|allow*)>
-<!ELEMENT delegate EMPTY>
-<!ELEMENT allow EMPTY>
-<!ATTLIST allow type|from CDATA #IMPLIED>.
-
- -

L'élément racine

- -

Le premier élément du fichier doit être le suivant :

- -
<wsa:webScriptAccess xmlns:wsa="http://www.mozilla.org/2002/soap/security">
-
- -

Delegation

- -

If the <delegate/> element is present then "web-scripts-access.xml" is required in the subdirectory for URIs which are in a subdirectory. For example, if the script in question is "http://www.example.com/foo/bar.xml", then the declarations file http://www.example.com/web-scripts-access.xml which contains the "delegate" keyword delegates to http://www.example.com/foo/web-scripts-access.xml. If the URI is in a subdirectory, and the root directory's access file delegated but no access file exists in the subdirectory, then no access is granted. If the root's access file did not delegate, then that access file also handles all resources in subdirectories.

- -

Any syntax error in the document will result in the rest of the file to be ignored. Since the commands only allow access, the order of processing the "allow" commands that were successfully parsed is never significant.

- -

Autoriser l'accès de script Web

- -

Pour permettre aux scripts d'accéder aux ressources de ce serveur, utiliser la commande suivante:

- -
<wsa:allow type="<request-type>" from ="<uri-prefix>"/>
-
- -

Le type de requête, s'il est spécifié, sera vérifié par rapport au type de requête demandé par le script, comme "soap", "soapv", ou "load". Les types ne doivent pas contenir d'espace. Le type "any" permet à n'importe quel type de requête d'accéder aux ressources.

- -

Le principe URI du script sera vérifié par le préfixe URI spécifié.

- -

Si "from" n'est pas spécifié, tous les scripts seront autorisés.

- -

Note : On peut également utiliser n'importe quel(s) caractère(s) pour renseigner la valeur de "from".

- -

Par exemple:

- -
<wsa:allow type="soapv" from="http://www.mozilla.org"/>
-
- -

Cette commande autorise les reqêtes SOAP avec une vérification des en-têtes des scripts chargé depuis le domaine www.mozilla.org.

- -
<wsa:allow type="soapv" from="http://*.mozilla.org"/>
-
- -

Cette commande autorise les requêtes SOAP avec une vérification des en-têtes des scripts chargé depuis le domaine avec un nom d'hôte contenant mozilla.org.

- -

C'est à dire, http://www.mozilla.org/, http://lxr.mozilla.org, http://komodo.mozilla.org, etc. auront un droit d'accès.

- -

Implementation

- -

nsIWebScriptsAccessService

- -

This interface provides a way to check whether the running script has access to the server that the script wishes to communicate.

- - - -

nsWebScriptsAccess(Implements nsIWebScriptsAccessService)

- -

Maintains access information, for servers, in an access-info-cache ( hashtable ). If an entry was not found in the cache creates one by loading the declaration file (web-scripts-access.xml) and extracting information from it (declaration file); requested type and subject princple's prefix are compared to the allowed type and prefix in order to determine access. An entry is created if and only if the declaration file is considered valid (validation based on the syntax described above); an invalid document will result in access denial. Denies script access in the event of an xml-wellformedness error, or validation error, or if the declaration file does not grant access. Reports errors (validation, wellformedness, file not found, etc.) to the console via nsIConsoleService.

- -
-

Note: Script access is checked via declaration file only if the script security manager denies access.

-
- -

Summary

- -

Advantages

- -

The proposed declaration file places the server operator, not the client in control of access to his server by untrusted scripts. The access hole is no bigger than the service in question. The access is disabled by default, and there is nothing the user needs to do to open access, and nothing that can go wrong to make a hole in his firewall. It seems fairly easy to drop an access file into the root directory of the web server to allow access.

- -

Delegation with Mixed Ownership

- -

Independent owners of subdirectories cannot grant web script access to these subdirectories without getting the owner of the root directory to post a delegating access file. Normally a server will be either inside or outside of a firewall, so this is not a problem. Where a server spans multiple owners, the alternative would be to scan all directories in the path looking for a web scripts access file, which seems undesirable. On the other hand, perhaps it is not so bad, since it permits independent management in domains where the top level owner may not care about providing access to web services.

- -

Adjustments

- -

As this new model is applied to SOAP, and potentially document.load or xml-request, it may be desirable to eliminate the same source security bypass, because it is not clear that this is always secure. Other security adjustments may be desired as well.

- -

Feedback?

- -

Please send me some feedback on this proposal.

- -

See Also

- - - -

Interwiki Language Links

diff --git a/files/fr/archive/mozilla/persona/api_de_verification/index.html b/files/fr/archive/mozilla/persona/api_de_verification/index.html deleted file mode 100644 index 04a8400141..0000000000 --- a/files/fr/archive/mozilla/persona/api_de_verification/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: API de vérification -slug: Archive/Mozilla/Persona/API_de_verification -tags: - - Persona -translation_of: Archive/Mozilla/Persona/Remote_Verification_API ---- -

Résumé

-

Lorsqu'un utilisateur essaie de se connecter sur un site, son navigateur génère un objet de données appelé une assertion. Il s'agit essentiellement d'une adresse mail cryptée. Le navigateur envoie cette assertion au site, qui doit vérifier sa validité avant de connecter l'utilisateur.

-

Les assertions peuvent être vérifiées localement, ou en utilisant l'API disponible à l'adresse https://verifier.login.persona.org/verify. Cette page décrit comment utiliser l'API.

-

Méthode

-

Envoyez une requête HTTP POST à l'adresse https://verifier.login.persona.org/verify.

-

Paramètres

-
-
- assertion
-
- L'assertion est fournie par l'utilisateur. Disponible en tant que premier paramètre passé à la fonction onlogin dans navigator.id.watch().
-
- audience
-
- Le protocole, nom de domaine et port de votre site. Par exemple : "https://example.com:443".
-
-

Valeurs de retour

-

La requête retourne un objet JSON contenant une propriété status qui peut valoir "okay" ou "failure". En fonction de ces valeurs, l'objet peut contenir des éléments additionels listés ci-dessous.

-

"okay"

-

L'assertion est valide.

-

Dans ce cas, l'objet JSON contient en plus les propriétés suivantes :

- - - - - - - - - - - - - - - - - - - -
"email"L'adresse mail contenue dans l'assertion, pour permettre la connexion de l'utilisateur.
"audience"La valeur audience contenue dans l'assertion. Doit être l'URL de votre propre site.
"expires"La date à laquelle expire l'assertion, exprimée The date the assertion expires, exprimé comme une valeur primitive de l'objet Date qui est le nombre de secondes écoulées depuis le 1er Janvier 1970 00h00 GMT.
"issuer"Le nom du fournisseur d'identité ayant fourni l'assertion.
-

"failure"

-

L'assertion n'est pas valide.

-

Dans ce cas, l'objet JSON contient une propriété additionnelle :

- - - - - - - -
"reason"Une chaîne de caractère expliquant pourquoi la validation de l'assertion a échoué
-

Exemples

-

node.js

-

Cet exemple utilise un serveur node.js utilisant express.js

-
var express = require("express"),
-    app = express.createServer(),
-    https = require("https"),
-    querystring = require("querystring");
-/* ... */
-
-// La variable audience doit correspondre à ce qu'affiche la barre d'adresse du navigateur,
-// ce qui inclut le protocole, le nom de domaine et le port
-var audience = "http://localhost:8888";
-
-app.post("/authenticate", function(req, res) {
-  var vreq = https.request({
-    host: "verifier.login.persona.org",
-    path: "/verify",
-    method: "POST"
-  }, function(vres) {
-    var body = "";
-    vres.on('data', function(chunk) { body+=chunk; } )
-        .on('end', function() {
-          try {
-            var verifierResp = JSON.parse(body);
-            var valid = verifierResp && verifierResp.status === "okay";
-            var email = valid ? verifierResp.email : null;
-            req.session.email = email;
-            if (valid) {
-              console.log("l'assertion a été vérifiée avec succès pour le mail :", email);
-              res.json(email);
-            } else {
-              console.log("l'assertion n'a pas été validée pour la raison suivante :", verifierResp.reason);
-              res.send(verifierResp.reason, 403);
-            }
-          } catch(e) {
-            console.log("le verifier n'a pas renvoyé un objet JSON");
-            // bogus response from verifier!
-            res.send("bogue de la part du verifier !", 403);
-
-          }
-        });
-  });
-
-  vreq.setHeader('Content-Type', 'application/x-www-form-urlencoded');
-
-  var data = querystring.stringify({
-    assertion: req.body.assertion,
-    audience: audience
-  });
-
-  vreq.setHeader('Content-Length', data.length);
-  vreq.write(data);
-  vreq.end();
-
-  console.log("vérification de l'assertion");
-});
-
-
-

via Lloyd Hilaiel

-

PHP

-
$url = 'https://verifier.login.persona.org/verify';
-$assert = filter_input(
-    INPUT_POST,
-    'assertion',
-    FILTER_UNSAFE_RAW,
-    FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH
-);
-//utiliser la superglobale $_POST pour PHP < 5.2 et écrire votre propre filtre
-$params = 'assertion=' . urlencode($assert) . '&audience=' .
-           urlencode('http://example.com:80');
-$ch = curl_init();
-$options = array(
-    CURLOPT_URL => $url,
-    CURLOPT_RETURNTRANSFER => TRUE,
-    CURLOPT_POST => 2,
-    CURLOPT_POSTFIELDS => $params
-);
-curl_setopt_array($ch, $options);
-$result = curl_exec($ch);
-curl_close($ch);
-echo $result;
-

Via Christian Heilmann

-

Note: si vous envoyez les paramètres assertion et audience en tant qu'objet JSON, ils ne doivent pas être encodés. S'ils sont envoyés en tant que paramètres normaux d'une requête HTTP POST, comme dans l'exemple ci-dessus, ils doivent être encodés.

diff --git a/files/fr/archive/mozilla/persona/bootstrapping_persona/index.html b/files/fr/archive/mozilla/persona/bootstrapping_persona/index.html deleted file mode 100644 index ed8caf194e..0000000000 --- a/files/fr/archive/mozilla/persona/bootstrapping_persona/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Persona Hosted Services -slug: Archive/Mozilla/Persona/Bootstrapping_Persona -translation_of: Archive/Mozilla/Persona/Bootstrapping_Persona ---- -

Pour réussir et être vraiment décentralisé, Persona a besoin du soutien de trois groupes différent :

- - - -

Cela crée un cercle vicieux : aucun de ces groupes n'auraient un intêret significatif tant qu'il n'y avait un grand nombre d'utilisateur, mais un système distribué ne peut pas avoir un grand nombre d'utilisateur sans le soutien des groupes ci-dessus.

- -

Pour résoudre ce problème, https://login.persona.org enregistre trois resources :

- -
    -
  1. Un Fournisseur d'Identité de secours, qui es disponible pour les utilisateurs dont les fournisseurs d'email ne supporte pas Persona.
  2. -
  3. A cross-browser, JavaScript implementation of the navigator.id APIs for browsers without native support.
  4. -
  5. A hosted verification API to make it easy for sites to verify user credentials.
  6. -
- -

Together, this allows web sites to offer Persona to users regardless of browser and without email providers needing to get involved.

- -

These services are temporary, and the Persona system is designed such that they transparently and automatically drop away as native support gets added to browsers and email providers. Thus, they will become less relevant as Persona matures, and may eventually be removed all together. At that point, https://login.persona.org won't feature at all in the Persona system.

- -

Fallback Identity Provider

- -

Any domain can become an Identity Provider as long as relying parties are willing to trust the certificates issued by that domain. We expect email providers to act as an IdPs for the addresses they administer, making the user experience of Persona seamless for those users.  It allows the user to leverage their existing relationship with the email provider when authenticating at other sites.

- -

However, email providers won't become IdPs until there is significant demand from their users. In the meantime, Mozilla operates a fallback IdP at https://login.persona.org. This fallback allows users to sign into sites with their existing email address, regardless of whether or not the email provider supports Persona. The fallback IdP will certify email addresses from any domain using its own authentication flow and its own password, so long as the user is able to prove control of an address by clicking a link in a verification email.

- -

Once an email provider supports Persona natively, its users will transparently begin use it instead of the fallback IdP.

- -

Cross-browser API Library

- -

For Persona to work, the user's browser must support the navigator.id API. Eventually, browsers will add native support for these APIs, but until then a cross-browser implementation is available at https://login.persona.org/include.js. By including this file, web sites can already begin using Persona. Once native implementations of the API are available, the library will automatically defer to those.

- -

Remote verification service

- -

At https://login.persona.org Mozilla hosts a remote verification service that web sites can use to verify identity assertions sent from users. This makes it simpler for web sites to support Persona as it takes care of parsing the assertion and cryptographically verifying user identities.

- -

Once the Persona data formats stabilize, verification will most likely be done locally on each site's server. This transition is especially important for user privacy, since it will make it impossible for the fallback IdP to track its users. Even with remote verification, users of native IdPs can't be tracked by that IdP.

diff --git a/files/fr/archive/mozilla/persona/branding/index.html b/files/fr/archive/mozilla/persona/branding/index.html deleted file mode 100644 index 6baff2ccdc..0000000000 --- a/files/fr/archive/mozilla/persona/branding/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Ressources promotionnelles -slug: Archive/Mozilla/Persona/branding -tags: - - Persona -translation_of: Archive/Mozilla/Persona/User_interface_guidelines ---- -

Se connecter avec des boutons Persona

-

Images

-

Le bouton "Se connecter" est disponible en trois versions et trois couleurs:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Se connecter avec votre EmailSe connecter avec PersonaSe connecter
Noir
Bleu
Rouge
-

En CSS

-

Sawyer Hollenshead a créé une série d'excellents boutons en CSS. Télécharger (.zip)

-

Informations complémentaires

-

Vous pouvez obtenir des informations complémentaires sur la conception visuelle de Persona dans les embelissement du style de Sean Martell.

diff --git a/files/fr/archive/mozilla/persona/browser_compatibility/index.html b/files/fr/archive/mozilla/persona/browser_compatibility/index.html deleted file mode 100644 index 1bdf4c4e5d..0000000000 --- a/files/fr/archive/mozilla/persona/browser_compatibility/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Compatibilité des navigateurs -slug: Archive/Mozilla/Persona/Browser_compatibility -tags: - - Persona -translation_of: Archive/Mozilla/Persona/Browser_compatibility ---- - -

Persona est développé, testé, et supporté avec les navigateurs suivants. Grâce à la bibliothèque JavaScript inter-plateformes de Persona, les utilisateurs n'ont pas besoin de greffons pour utiliser Persona.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Navigateurs pour ordinateur de bureau
Internet Explorer8.0*, 9.0, 10.0** (mais voir le mode de compatibilité ci-dessous)
FirefoxVersions courante, stable, Beta, Aurora, Nightly, et ESR.
- Précédente version stable
ChromeDernière version stable
SafariDernière version stable
OperaDernière version stable
Navigateurs iOS
Safari MobileiOS 5.x — 6.x
Navigateurs Android
Navigateur par défaut2.x — 4.x
FirefoxVersions stable courante, Beta, Aurora, et Nightly
- Précédente version stable
ChromeDernière version stable
-

* : pour Windows XP.  : pour Windows Vista et Windows 7. ** : Windows 8.  : selon durée de vie.

- - -

Mode de compatibilité d'Internet Explorer

-

À partir de la version 8.0, Internet Explorer supporte une fonctionnalité appelée Mode de compatibilité, dans lequel le navigateur peut être amené à émuler une version antérieure à la 8.0, en affichant la page. Cette fonctionnalité peut être contrôlée de trois façons différentes :

- -

Parce que les versions Internet Explorer avant la 8.0 ne sont pas supportées par Persona, toute version d'Internet Explorer qui est configurée pour émuler une version antérieure à la 8.0, ne fonctionnera pas avec Persona.

-

Autres navigateurs

-

Bien qu'ils ne soient pas explicitement supportés, un navigateur incluant aussi bien window.postMessage() que localStorage devrait fonctionner. Ces API ont été rendues disponibles dans les principaux navigateurs depuis mars 2010.

-

Problèmes connus

- diff --git a/files/fr/archive/mozilla/persona/considerations_de_securite/index.html b/files/fr/archive/mozilla/persona/considerations_de_securite/index.html deleted file mode 100644 index d067791639..0000000000 --- a/files/fr/archive/mozilla/persona/considerations_de_securite/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Considérations de sécurité -slug: Archive/Mozilla/Persona/Considerations_de_securite -tags: - - Persona -translation_of: Archive/Mozilla/Persona/Security_Considerations ---- -

Lorsque vous ajoutez Persona sur votre site, il s'occupe du fardeau que représente la sécurité tant qu'il le peut. Cependant, certains aspects de la sécurité peuvent uniquement être gérés par votre site. Ils sont listés ci-dessous.

-

Pratiques essentielles

-

Vérifier les assertions côté serveur

-

Lorsque vous utilisez Persona, les assertions d'identité sont passées à la fonction onlogin passée à navigator.id.watch(). Vous devriez toujours envoyer l'assertion au serveur pour vérification, et seul votre serveur devrait décider de donner à l'utilisateur les permissions additionnelles selon le résultat de la vérification:

-
// Dans navigator.id.watch({ ...
-onlogin: function(assertion) {
-  // Un utilisateur veut se connecter ! Vous devez:
-  // 1. Envoyer l'assertion à votre backend pour vérification et création d'une session.
-  // 2. Mettre à jour l'interface.
-},
-
-

Si vous essayez de vérifier l'assertion en utilisant le JavaScript client, un utilisateur malveillant pourrait usurper l'identité d'un utilisateur légitime en injectant localement du code et en modifiant votre JavaScript. Ceci est possible parce que vous n'êtes pas en contrôle total de ce qui se passe dans le navigateur de l'utilisateur, là où le JavaScript est exécuté.

-

Encore une fois, vous devriez systématiquement envoyer l'assertion au serveur pour vérification. Même si vous utilisez l'API de vérification locale.

-

Spécifiez explicitement le paramètre audience

-

Pour vérifier une assertion, vous pouvez envoyer une requête POST à l'adresse https://verifier.login.persona.org/verify. La requêtre inclut un paramètre appelé audience :

-
assertion=<ASSERTION>&audience=https://monsite.com:443"
-

Le paramètre audience est requis. Vous devriez toujours spécifier l'audience explicitement dans votre code, où dans votre configuration. Attention à :

- -

Si vous faites confiance au navigateur pour vous fournir l'audience, alors il devient possible pour un site malveillant de réutiliser les assertions de son site pour se connecter sur votre site.

-

Vérifier les certificats SSL

-

Pour vérifier une assertion, vous pouvez envoyer une requête POST à l'adresse https://verifier.login.persona.org/verify. Vous devez vous assurer que la requête HTTPS vérifie le certificat envoyé par le serveur contre un certificat-racine sûr. Si vous ne le faites pas, alors un hacker pourrait se faire passer pour verifier.login.persona.org et renvoyer des vérifications erronées.

-

Vérifiez que la librairie utilisée vérifie les certicicats correctements, et que vous l'intialisez avec les certificats-racines appropriés.

-

Par exemple, le module standard de Python 2.7 ne valide pas les certificats serveurs. Nous recommandons plutôt d'utiliser les modules "requests" (en) ou "urllib3" (en) en Python 2.x, ou la classe standard http.client.HTTPSConnection en Python 3.x. En Perl, assurez-vous d'utiliser au moins la version 6.0 de libwww-perl. En fonction du langage, de la bibliothèque et du système d'exploitation utilisé, vous pourriez devoir fournir soit une liste de certificats-racines sûrs, soit le seul certificat utilisé par verifier.login.persona.org.

-

Implémenter une protection CSRF

-

Lors d'une attaque de connexion CSRF (Cross-Site Request Forgery, contrefaçon de requêtes trans-sites), un hacker utilise une contrefaçon de requête trans-site pour connecter un utilisateur sur un site en utilisant ses identifiants.

-

Par exemple : un utilisateur visite un site web malveillant contenant un élément form. L'attribut action du formulaire est défini sur une requête HTTP POST pointant vers http://www.google.com/login, en envoyant le nom d'utilisateur et le mot de passe du hacker. Lorsque l'utilisateur envoie le formulaire, sa requête est envoyée à Google, la connexion est faite avec succès et le serveur Google définit un cookie dans le navigateur de l'utilisateur. À présent, l'utilisateur est sans le savoir connecté sur le compte Google du hacker.

-

Cette attaque peut être utilisée pour récupérer des informations sensibles à propos de l'utilisateur. Par exemple, la fonctionnalité d'Historique Web de Google recense tous les mots-clefs de recherche de l'utilisateur. Si l'utilisateur est connecté sur le compte Google du hacker ayant la fonctionnalité d'Historique Web activée, alors l'utilisateur donne toutes ses informations au hacker.

-

Les attaques de connexion CSRF, et les défenses potentielles à mettre en place contre elles, sont documentées plus exhaustivement dans Défenses robustes contre les contrefaçons de requêtes trans-sites (PDF, en). Elles ne sont pas spécifiques à Persona : la plupart des mécanismes de connexion sont potentiellement vulnérables face à elles.

-

Il y a plusieurs techniques qui peuvent être utilisées pour protéger un site contre les attaques de connexion CSRF, qui sont documentées plus exhaustivement dans l'étude ci-dessus.

-

Une de ces approches est de créer un identifiant secret dans le serveur, partagé avec le navigateur et de demander au navigateur de le fournir lors de requêtes de connexions. Par exemple :

-
    -
  1. Dès que l'utilisateur arrive sur votre site, avant qu'il n'essaie de se connecter, créez une session pour lui sur le serveur. Enregistrez l'ID de la session dans un cookie de navigateur.
  2. -
  3. Sur le serveur, générez une chaîne de caractères aléatoire d'au moins 10 caractères alphanumériques. Un UUID généré aléatoirement est une bonne solution. C'est le jeton CSRF. Enregistrez-le dans la session.
  4. -
  5. Donnez le jeton CSRF au navigateur en l'incluant dans du JavaScript ou dans le HTML en tant que variable de formulaire cachée.
  6. -
  7. Assurez-vous que les envois AJAX ou les requêtes POST de formulaires incluent le jeton CSRF.
  8. -
  9. Côté serveur, avant d'accepter une assertion, assurez-vous que le jeton CSRF envoyé correspond au jeton CSRF enregistré dans la session.
  10. -
-

Améliorations

-

Politique de sécurité du contenu (CSP)

-

La Politique de sécurité du contenu (CSP) est une couche supplémentaire de sécurité qui aide à détecter et atténuer certains types d'attaques, dont le Scriptage Trans-sites (XSS) et les attaques d'injection de données. Ces attaques sont utilisées pour beaucoup de choses du vol de données à la dégradation du site ou la distribution de logiciels malveillants.

-

Si vous utilisez la CSP sur votre site, vous devriez modifier votre politique pour inclure Persona. En fonction de votre politique, vous pourriez avoir besoin de :

- -

Une configuration Apache d'example pourrait inclure :

-
Header set X-Content-Security-Policy: "default-src 'self'; frame-src 'self' https://login.persona.org ; script-src 'self' https://login.persona.org"
diff --git a/files/fr/archive/mozilla/persona/identity_provider_overview/index.html b/files/fr/archive/mozilla/persona/identity_provider_overview/index.html deleted file mode 100644 index 6a29be7c8f..0000000000 --- a/files/fr/archive/mozilla/persona/identity_provider_overview/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Identity Provider Overview -slug: Archive/Mozilla/Persona/Identity_Provider_Overview -translation_of: Archive/Mozilla/Persona/Identity_Provider_Overview ---- -

Un Fournisseur d'Identité (Identity Provider ou IdP) Persona  est un domaine qui enregistre et certifie directement l'identité de ses utilisateurs. Parce que les identités de Persona sont basées sur les adresses email, tous domaine offrant des emails à leurs utilisateurs peut simplement devenir un IdP.

- -

Si vous avez un nom de domaine, vous pouvez devenir un IdP Persona en implémentant un support pour le protocole BrowserID.

- -

If you have a domain name, you can become a Persona IdP by implementing support for the underlying BrowserID protocol.

- -

Le document support IdP

- -

Domains advertise their ability to act as IdPs by publishing a support document at /.well-known/browserid. This JSON-formatted document contains three values:

- - - -

Websites use the public-key to verify the authenticity of users' identity assertions.

- -

Browsers use the authentication and provisioning values to obtain certification of their user's identity.

- -

For more information, including how domains can delegate to other IdPs, see the /.well-known/browserid documentation.

- -

Comment le navigateur interagit-t-il avec les IdPs ?

- -

Pour montrer l'interaction entre les Navigateurs et les IdPs, nous allons regarder ce qui doit se passer la première fois que alice@example.com essaie de se connecter à un site en utilisant Persona.

- -
    -
  1. Le navigateur d'alice récupère le document support à l'url https://example.com/.well-known/browserid.
  2. -
  3. Alice's browser invisibly loads the provisioning page for example.com and asks it to sign a public key certifying Alice's identity.
  4. -
  5. Before signing the key, example.com needs proof that the user really is Alice, so it tells the browser that she needs to authenticate.
  6. -
  7. Alice's browser shows Alice the authentication page for example.com and she signs in, establishing a new session at example.com.
  8. -
  9. Alice's browser reloads the provisioning page and again asks it to sign a public key certifying Alice's identity.
  10. -
  11. The provisioning page can verify Alice's identity by inspecting the new session. Satisfied, it signs a certificate containing Alice's public key, her email address, and an expiration date for the certificate.
  12. -
- -

For the duration of the signed certificate, Alice's browser can create valid identity assertions for alice@example.com whenever she wants to log into a web site with Persona.

- -

Steps 3-5 can be skipped if Alice already has a valid session with example.com, for example, from logging into her webmail or an intranet portal.

- -

Comment les Sites Web interagissent avec les IdPs ?

- -

Let's say Alice wants to sign in to 123done.org. Her browser would generate and sign an identity assertion containing the certificate from above and present it as proof of her identity.

- -

By comparing Alice's signature on the identity assertion with the public key inside the signed certificate, 123done can be confident that the certificate was issued to the same person that generated the identity assertion. However, 123done still needs to check that the certificate itself is valid by examining its signature.

- -

Because the certificate was issued for alice@example.com, 123done fetches the support document from https://example.com/.well-known/browserid. It then extracts the public-key and compares that to the signature on Alice's certificate. If the key matches the signature, 123done knows that the certificate is legitimate and can finish logging Alice in.

- -

Note that 123done never "phoned home" or otherwise revealed Alice's identity when she logged in. Rather, it only needed to request a single, cacheable document from example.com.

- -

Security and trust

- -

The BrowserID protocol, and thus Persona, are built on standard public key crytography techniques.

- -

Feel free to explore our documentation on the cryptographic concepts behind how a Persona IdP works or read more detail on how IdPs are implemented.

diff --git a/files/fr/archive/mozilla/persona/index.html b/files/fr/archive/mozilla/persona/index.html deleted file mode 100644 index 160cdb0e3a..0000000000 --- a/files/fr/archive/mozilla/persona/index.html +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: Persona -slug: Archive/Mozilla/Persona -tags: - - Persona -translation_of: Archive/Mozilla/Persona ---- -
Un système de connexion simple et respectueux de la vie privée : laissez vos utilisateurs s'identifier avec leurs adresses e-mail, et libérez-vous de la gestion des mots de passe.
- -

Mozilla Persona est un système d'identification pour le web facile à utiliser et à déployer. Il fonctionne sur tous les principaux navigateurs, vous pouvez l'utiliser dès maintenant.

- -

Pourquoi utiliser Persona sur votre site web ?

- -
    -
  1. Persona élimine complètement les mots de passe spécifiques à un site web, libérant les utilisateurs et les sites web du fardeau de créer, gérer et sauvegarder de manière sécurisée les mots de passe.
  2. -
  3. Persona est facile à utiliser.  En deux clics seulement, un utilisateur de Persona peut se connecter sur un site web comme Voost,  en s'affranchissant des contraintes liées à la création d'un nouveau compte.
  4. -
  5. Persona est facile à mettre en oeuvre. Les développeurs peuvent ajouter Persona à leur site web en seulement un après-midi.
  6. -
  7. Bien mieux, il n'y a pas de contrainte. Les développeurs recoivent une adresse e-mail vérifiée pour chacun de leurs utilisateurs,  et l'utilisateur peut utiliser n'importe quelle adresse e-mail avec Persona.
  8. -
- -

De plus, Persona ne peut que s'améliorer : il est constuit sur un protocole ouvert et décentralisé, qui a été conçu pour permettre une intégration direct aux navigateurs et un support natif par les fournisseurs d'e-mail. Les sites qui implémentent Persona aujourd'hui profiteront automatiquement de ces améliorations sans avoir à modifier leur code.

- -
-
-

Utiliser Persona sur votre site

- - -
-

Pour commencer

- -
-
Pourquoi Persona ?
-
Qu'est ce qui rend Persona spécial comparé aux autres systèmes d'identification et authentification.
-
Configuration rapide
-
Une rapide introduction  montrant comment ajouter Persona à votre site web.
-
- -

Référence de l'API

- -
-
L'API navigator.id
-
Référence pour l'objet navigator.id.
-
L'API de vérification
-
Référence pour l'API de vérification.
-
-
- -
-

Guides

- -
-
Considérations de sécurité
-
Pratiques et techniques pour déployer votre Persona en toute sécurité.
-
Compatibilité des navigateurs
-
Découvrez  quels navigateurs sont supportés par Persona.
-
Internationalisation
-
Découvrez comment Persona supporte différents langages.
-
Le guide de l'implémenteur
-
Des astuces par les sites qui ont ajouté le support de Persona.
-
-
- -
-

Ressources

- -
-
Librairies et plugins
-
Vous trouverez une drop-in librairie pour votre langage de programmation favori, web framework, blog, ou CMS.
-
Le livre d'astuces Personna
-
Exemples de codes sources pour les sites Persona. Avec des extraits en C# (MVC3), PHP, Node.JS, et autres.
-
Ressources promotionnelles
-
Boutons se connecter et autres éléments graphiques pour aider à présenter Persona à vos utilisateurs.
-
-
-
- -
-

Devenir un fournisseur d'identité

- -

Si vous êtes un fournisseur d'adresses de messagerie ou d'un autre service d'identification, voyez les liens ci-dessous pour apprendre comment devenir un fournisseur d'identité Persona.

- -
-
-
-
IdP : vue d'ensemble
-
Une vue haut niveau des fournisseurs d'identité de Persona.
-
-
- -
-
-
Implémenter un IdP
-
Un guide précis sur les  détails techniques pour devenir un IdP.
-
-
- -
-
-
.well-known/browserid
-
Un aperçu de la structure et de l'objet du fichier .well-known/browserid que les IdPs utilisent pour signaler leur utilisation du protocole.
-
-
-
- -
-

Le projet Persona

- -
-
-
-
Glossaire
-
Définitions de la terminologie utilisée par BrowserID et Persona.
-
FAQ
-
Réponses aux questions fréquentes.
-
Protocole : vue d'ensemble
-
Un aperçu de niveau technique intermédiaire du protocole sous-jacent BrowserID.
-
-
- -
-
-
Crypto
-
Un aperçu des concepts cryptographiques derrière Persona et BrowserID.
-
Les Spécifications
-
Détails techniques approfondis.
-
-
- -
-
-
Le site web de Persona
-
Pour faire fonctionner Persona, nous hébergeons trois services sur https://login.persona.org: un fournisseur d'identité de substitution, une implémentation portable des APIs navigator.id et un service de vérification des affirmations d'identité.
-
Code source de Persona
-
Le code source de Persona pour les sites web est sur un dépot sur GitHub. Patches bienvenus !
-
-
-
- -

- -
-

Rejoignez la communauté Identity

-
-
Choisissez votre méthode préférée pour rejoindre la discussion :
- -
- -
-

- -

 

- - - -
    -
  1. Utiliser Persona sur votre site web - -
      -
    1. Pourquoi utiliser Persona ?
    2. -
    3. Configuration rapide
    4. -
    5. Astuces pour implémenter Persona
    6. -
    7. Considérations de sécurité
    8. -
    9. Compatibilité navigateurs
    10. -
    11. Internationalisation
    12. -
    13. L'API navigator.id
    14. -
    15. L'API de vérification à distance
    16. -
    17. Bibliothèques et plugins
    18. -
    19. Recommandations d'interface Utilisateur
    20. -
    -
  2. -
  3. Devenir un fournisseur d'identité -
      -
    1. Vue d'ensemble IdP
    2. -
    3. Implémenter un IdP
    4. -
    5. Format de .well-known-browserid
    6. -
    -
  4. -
  5. Le projet Persona -
      -
    1. Glossaire
    2. -
    3. FAQ
    4. -
    5. Services hébergés Persona
    6. -
    7. Vue d'ensemble du protocole
    8. -
    9. Cryptographie
    10. -
    -
  6. -
diff --git a/files/fr/archive/mozilla/persona/internationalisation/index.html b/files/fr/archive/mozilla/persona/internationalisation/index.html deleted file mode 100644 index 0989a4d086..0000000000 --- a/files/fr/archive/mozilla/persona/internationalisation/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Internationalisation -slug: Archive/Mozilla/Persona/Internationalisation -tags: - - Persona -translation_of: Archive/Mozilla/Persona/Internationalization ---- -

Qu'est-ce qui est traduit dans Persona ?

-

Dans le futur, l'interface pour se connecter sur des sites avec Persona sera intégrée directement dans le navigateur, et ainsi traduite avec la traduction du navigateur. Pour les navigateurs qui n'intégrent pas Persona, son interface consiste en une série de dialogues affichées depuis login.persona.org. Ces dialogues sont traduits par une équipe de volontaires de la communauté, et plus de 45 langues sont actuellement activées en production.

-

Comment Persona choisit la langue

-

Le service Persona sélectionne une langue en se basant sur le header Accept-Language envoyé dans les requêtes du navigateur. L'algorithme utilisé pour faire correspondre une langue au header Accept-Language est le même que celui utilisé par mozilla.org :

-
    -
  1. Pour chaque identifiant de langue dans le header Accept-Language : -
      -
    • vérifier s'il existe une correspondance exacte pour la langue associée à l'identifiant de langue
    • -
    • vérifier s'il existe une correspondance partielle de la première partie de l'identifiant de langue avec une langue
    • -
    -
  2. -
  3. Si une correspondance ne peut pas être établie en utilisant la première règle, s'en remettre à en-US. Cependant, en ou en-US est presque toujours le dernier header de langue préférée envoyé par la plupart des navigateurs.
  4. -
-

Par exemple, le tableau ci-dessous liste la langue choisie pour différents headers Accept-Language, si les langues suivantes étaient supportées : en-US, es, es-MX :

- - - - - - - - - - - - - - - - - - - - - - - - - -
Header Accept-LanguageLangue sélectionnée
es-AR,es;q=0.8,en-us;q=0.5es
es-MX,es;q=0.8,en-us;q=0.5es-MX
es-es,en-us;q=0.5en-US
es-esen-US
-

Il n'y a pour le moment pas de possibilité pour un site de forcer le dialogue d'être dans un langage prédéfini. C'est parce que l'interface de Persona est d'un point de vue logique (et tout comme les futures implémentations natives le seront) intégrée dans l'interface du navigateur, c'est pourquoi sa langue doit être cohérente avec la langue du navigateur.

-

Comment aider

-

Persona utilise Mozilla Verbatim pour permettre aux volontaires de créer de nouvelles traductions. Si vous souhaitez aider, lisez le guide « démarrer avec Verbatim (en) » et visitez le projet « BrowserID » (en) sur Verbatim.

diff --git a/files/fr/archive/mozilla/persona/libraries_and_plugins/index.html b/files/fr/archive/mozilla/persona/libraries_and_plugins/index.html deleted file mode 100644 index 54d297c63b..0000000000 --- a/files/fr/archive/mozilla/persona/libraries_and_plugins/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Bibliothèques et plugins -slug: Archive/Mozilla/Persona/Libraries_and_plugins -tags: - - Persona -translation_of: Archive/Mozilla/Persona/Libraries_and_plugins ---- -

Envie d'utiliser Persona sur votre site ou votre blog ? Implémenter Persona à partir de rien, c'est simple, mais les plugins et bibliothèques listées ici pourraient bien vous aider à aller plus vite !
-
- Cette page liste trois types de bibliothèques :
-
- 1. des plugins qui intégrent Persona dans des environnements de travail et systèmes de gestion de contenu (CMS) existants
- 2. des bibliothèques utilitaires, utiles lorsque vous développez de nouveaux plugins ou que vous intégrez Persona dans un site à partir de rien
- 3. n'importe quoi d'autre en rapport avec Persona, ce qui inclut des bibliothèques pour faire de votre domaine un Persona Identity Provider
-
- Ceci est une liste maintenue par la communauté. Si vous avez créé une bibliothèque ou un plugin, merci de l'ajouter à cette page.

- -
Cette page est actuellement en cours de tri, et certains plugins pourraient être obsolètes. N'oubliez pas de faire des recherches sur les plugins avant de les utiliser.
- -
-

Les liens vers les plugins listés ici sont des documents rédigés en anglais

-
- -

Plugins

- -

Clojure

- - - -

Cold Fusion

- - - -

Haskell

- - - -

Java

- - - -

JavaScript

- - - -

Node.js

- - - -

PHP

- - - -

Python

- - - -

Ruby

- - - -

Miscellaneous

- - - -

Vous n'avez pas vu votre langage ou environnement de travail ici ? LoginRadius, un widget d'authentification, offre une intégration de Persona pour beaucoup de plateformes.

- -

Bibliothèques utilitaires

- -

C

- - - -

Go

- - - -

Haskell

- - - -

.Net

- - - -

Node.js

- - - -

PHP

- - - -

Python

- - - -

Autres

- -

Perl

- - - -

Python

- - - -

Ruby

- - - -

PHP

- - - -

Racket

- - diff --git a/files/fr/archive/mozilla/persona/pourquoi_persona/index.html b/files/fr/archive/mozilla/persona/pourquoi_persona/index.html deleted file mode 100644 index 589c24e8be..0000000000 --- a/files/fr/archive/mozilla/persona/pourquoi_persona/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Pourquoi Persona ? -slug: Archive/Mozilla/Persona/Pourquoi_Persona -tags: - - Persona -translation_of: Archive/Mozilla/Persona/Why_Persona ---- -

Le mécanisme le plus répandu, basé sur le couple identifiant/mot de passe, n'est pas tenable : on demande aux utilisateurs de créer et de retenir un nouveau mot de passe complexe pour chaque site ou service qu'ils utilisent, et chaque site doit stocker de son côté les mots de passe de manière sécurisée. Pourtant, des intrusions récentes montrent que même des entreprises de premier plan peuvent avoir des failles dans la sécurité de leur base de mots de passe, ce qui met en danger les informations de leurs utilisateurs.

-

Persona est un système de gestion des identités ouvert, distribué, adapté à l'échelle d'internet, qui remplace le système des mots de passe par site. Il répond aux limitations en termes d'ergonomie et de vie privée que peuvent rencontrer des systèmes comme OpenID, sans avoir recours à une infrastructure centralisée comme le fait Facebook Connect.

-

Persona : la fin des mots de passe par site

-

Au lieu d'utiliser un mot de passe pour chaque site, Persona permet aux utillisateurs de se connecter en seulement deux clics après avoir réalisé un processus simple une seule fois pour chacune de leurs identités en ligne. Le processus est totalement sécurisé et basé sur les principes de la cryptographie à clé publique. Plutôt qu'un mot de passe, le navigateur internet de l'utilisateur génère ensuite une « assertion d'identité » chiffrée, qui expire après quelques minutes et n'est valable que pour un seul site. Du fait qu'il n'y a plus de mot de passe spécifique pour chaque site, les sites utilisant Persona n'ont plus à se préoccuper du stockage sécurisé des mots de passe ou de la perte éventuelle de leur base de mots de passe.

-

Cette méthode rapide d'authentification réduit aussi la complexité lors de la première connexion d'un utilisateur à un nouveau site.

-

Les identifiants Persona sont vos adresses de courriel

-

Plutôt que des identifiants à saisie libre, Persona utilise des adresses de courriel, ce qui a plusieurs avantages pour les utilisateurs comme pour les développeurs :

-

Avantages des adresses de courriel pour les utilisateurs

- -

Avantages des adresses de courriel pour les développeurs

- -

Sans oublier par ailleurs que le courriel est un système qui est déjà complètement distribué, avec des milliards de comptes existant chez d'innombrables fournisseurs.

-

En quoi Persona diffère-t-il des autres systèmes d'authentification unique (Single Sign-On) ?

-

Persona est sécurisé et facile à utiliser. Il protège la vie privée des utilisateurs, leur laisse le contrôle et une liberté de choix de façon inégalée.

-

De nombreux réseaux sociaux comme Facebook ou Google+ imposent aux utilisateurs l'utilisation de leurs vrais noms et leur limitent l'accès à un compte unique. En utilisant comme identifiant de base l'adresse de courriel, Persona permet aux utilisateurs de garder séparées leurs identités de travail, de maison, d'école ainsi que leurs autres identités.

-

Persona est ouvert et distribué : toute personne ayant une adresse de courriel peut se connecter à des sites web avec Persona. Plus encore, chacun peut héberger son propre service d'authentification ou le déléguer à d'autres, exactement comme dans le cas des courriels, et contrairement aux services uniques et centralisés utilisés par les réseaux sociaux.

-

Persona propose aussi une nouvelle approche de la protection de la vie privée en mettant le navigateur internet au centre du processus d'authentification : le navigateur obtient d'un côté des certificats du fournisseur de courriel de l'utilisateur, et les présente de l'autre côté au site web. Le service de courriel ne peut pas pister l'utilisateur, et les sites tiers peuvent avoir confiance dans l'identité de l'utilisateur grâce à la signature chiffrée des certificats. La plupart des systèmes concurrents comme OpenID exigent que les sites tiers envoient un message en retour avant d'autoriser l'utilisateur à se connecter.

diff --git a/files/fr/archive/mozilla/persona/quick_setup/index.html b/files/fr/archive/mozilla/persona/quick_setup/index.html deleted file mode 100644 index ee692b5274..0000000000 --- a/files/fr/archive/mozilla/persona/quick_setup/index.html +++ /dev/null @@ -1,241 +0,0 @@ ---- -title: Configuration rapide -slug: Archive/Mozilla/Persona/Quick_Setup -tags: - - Persona -translation_of: Archive/Mozilla/Persona/Quick_Setup ---- -

Seules cinq étapes sont nécessaires pour installer un système d'authentification Persona sur votre site :

- -
    -
  1. Inclure la bibliothèque JavaScript Persona sur vos pages.
  2. -
  3. Ajouter les boutons “connexion” et “déconnexion”.
  4. -
  5. Observer les actions connexion et déconnexion.
  6. -
  7. Vérifier l'identification de l'utilisateur.
  8. -
  9. Consulter les meilleures pratiques.
  10. -
- -

Vous devriez être en mesure de le faire fonctionner en un simple après-midi, mais chaque chose en son temps : si vous comptez utiliser Persona sur votre site, s'il vous plaît, prenez un moment pour vous inscrire sur la liste de diffusion Persona notices. Elle est à faible trafic, étant uniquement utilisée pour annoncer les changements et les problème de sécurité qui pourraient affecter votre site.

- -

Étape 1 : Inclure la bibliothèque Persona

- -

Persona est conçu pour ne pas être lié à un navigateur en particulier et fonctionne bien dans les principaux navigateurs de bureau et mobile.

- -

Dans le futur nous espérons que les navigateurs fourniront un support natif de Persona, mais en attendant nous fournissons une bibliothèque JavaScript qui implémente pleinement l'interface et l'API client du protocole. En incluant cette bibliothèque, vos utilisateurs seront en mesure de se connecter avec Persona, que leur navigateur en ait un support natif ou non.

- -

Une fois la bibliothèque chargée sur la page, les fonctions Persona dont vous avez besoin (watch(), request(), et logout()), seront accessible depuis l'objet global navigator.id.

- -

Pour inclure la bibliothèque JavaScript Persona, vous pouvez placer cette balise  <script> tout en bas de de votre code HTML, avant la fermeture de la balise <body> :

- -
<script src="https://login.persona.org/include.js"></script>
-
- -

Vous devez inclure ceci dans toutes les pages qui utilisent les fonctions de navigator.id. Persona étant toujours en développement, il est déconseillé d'héberger vous-même une copie du fichier include.js.

- -

Supprimer le Mode de Compatibilité

- -

Vous devez vous assurer que les utilisateurs d'Internet Explorer n'utilisent pas le Mode de Compatibilité, car il cassera Persona.

- -

Vous pouvez soit inclure cette balise <meta>, dans votre page, avant tout élément script :

- -
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
- -

Ou vous pouvez définir un entête HTTP sur votre page : X-UA-Compatible: IE=Edge.

- -

Étape 2 : Ajoutez des boutons de connexion et de déconnexion

- -

Persona étant conçu comme une API DOM, vous devez appeler des fonctions quand un utilisateur clique sur un bouton de connexion ou de déconnexion sur votre site. Pour ouvrir la boîte de dialogue Persona et demander à l'utilisateur de se connecter, vous devez appeler navigator.id.request(). Pour la déconnexion, appelez navigator.id.logout(). Notez que l'appel à logout() doit être fait depuis la fonction attachée à l'évènement.

- -

Par exemple :

- -
var signinLink = document.getElementById('signin');
-if (signinLink) {
-  signinLink.onclick = function() { navigator.id.request(); };
-};
-
-var signoutLink = document.getElementById('signout');
-if (signoutLink) {
-  signoutLink.onclick = function() { navigator.id.logout(); };
-};
-
- -

À quoi devraient ressembler ces boutons ? Consultez notres page de ressources graphiques pour des exemple complets basés sur du CSS !

- -

Étape 3 : Gérez les actions de connexion et de déconnexion

- -

Afin que Persona puisse fonctionner, vous devez lui dire quoi faire lorsqu'un utilisateur se connecte ou se déconnecte. Pour cela, appelez la fonction navigator.id.watch() et passez lui trois paramètres :

- -
    -
  1. L'adresse email de l'utilisateur actuellement connecté à votre site depuis cet ordinateur, ou null si aucun utilisateur n'est connecté. Par exemple, vous pouvez consulter un cookie du navigateur pour déterminer qui est connecté.
  2. -
  3. Une fonction à appeler lorsqu'une action onlogin est déclenchée. Cette fonction reçoit un seul paramètre, une "assertion d'identité" qui doit être vérifiée.
  4. -
  5. Une fonction à appeler lorsqu'une action onlogout est déclenchée. Cette fonction ne reçoit aucun paramètre.
  6. -
- -
-

Note: Vous devez toujours inclure à la fois onlogin et onlogout lorsque vous appelez navigator.id.watch().

-
- -

Par exemple, si vous pensez que Bob est connecté à votre site, vous pourriez faire ceci :

- -
var currentUser = 'bob@example.com';
-
-navigator.id.watch({
-  loggedInUser: currentUser,
-  onlogin: function(assertion) {
-    // Un utilisateur est connecté ! Voici ce qu'il faut faire :
-    // 1. Envoyer l'assertion à votre backend pour vérification et pour créer la session.
-    // 2. Mettre à jour l'interface utilisateur.
-    $.ajax({
-      type: 'POST',
-      url: '/auth/login', // Ceci est une URL sur votre site web.
-      data: {assertion: assertion},
-      success: function(res, status, xhr) { window.location.reload(); },
-      error: function(xhr, status, err) {
-        navigator.id.logout();
-        alert("Login failure: " + err);
-      }
-    });
-  },
-  onlogout: function() {
-    // Un utilisateur s'est déconnecté ! Voici ce qu'il faut faire :
-    // Détruire la session de l'utilisateur en redirigeant l'utilisateur ou en appelant votre backend.
-    // Assurez vous aussi de réinitialiser loggedInUser à null sur la prochain fois où la page sera chargée
-    // (Pas false, ni 0 ou undefined. null)
-    $.ajax({
-      type: 'POST',
-      url: '/auth/logout', // Ceci est une URL sur votre site web.
-      success: function(res, status, xhr) { window.location.reload(); },
-      error: function(xhr, status, err) { alert("Logout failure: " + err); }
-    });
-  }
-});
-
- -

Dans cet exemple, onlogin et onlogout sont tous deux implémentés en effectuant des requêtes POST asynchrones vers le backend de votre site. Le backend effectue ensuite la connexion ou la déconnexion de l'utilisateur, généralement en créant ou en effaçant des informations dans un cookie de session. Ensuite, si tout fonctionne bien, la page se recharge afin de prendre en compte le nouvel état de connexion.

- -

Notez que si l'assertion ne peut être vérifiée, vous devez appeler navigator.id.logout(), qui indique à Persona qu'aucun utilisateur n'est actuellement connecté. Si vous ne le faîtes pas, alors Persona peut appeler onlogin immédiatement à nouveau, avec la même assertion, et entrainer une boucle infinie d'échecs de connexion.

- -

Bien entendu vous pouvez utiliser des requêtes AJAX pour implémenter cela sans recharger la page ni rediriger l'utilisateur, mais cela ne fait pas partie du périmètre de ce tutoriel.

- -

Voici un autre exemple, cette fois-ci sans utiliser jQuery.

- -
function simpleXhrSentinel(xhr) {
-  return function() {
-    if (xhr.readyState == 4) {
-      if (xhr.status == 200) {
-        // recherche la page pour prendre en compte le nouveau statut de connexion
-        window.location.reload();
-      } else {
-        navigator.id.logout();
-        alert("XMLHttpRequest error: " + xhr.status);
-      }
-    }
-  };
-}
-
-function verifyAssertion(assertion) {
-  // Votre backend doit retourner un status code HTTP 200 pour indiquer la bonne
-  // vérification de l'adresse e-mail de l'utilisateur et il doit s'arranger pour que
-  // currentUser soit bien associer à cette adresse quand la page est rechargée
-  var xhr = new XMLHttpRequest();
-  xhr.open("POST", "/xhr/sign-in", true);
-  // voir http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
-  var param = "assertion="+assertion;
-  xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
-  xhr.setRequestHeader("Content-length", param.length);
-  xhr.setRequestHeader("Connection", "close");
-  xhr.send(param); // pour la vérification par votre backend
-  xhr.onreadystatechange = simpleXhrSentinel(xhr);
-}
-
-function signoutUser() {
-  // Votre backend doit retourner un code statut HTTP 200 pour indique la bonne déconnexion
-  // (habituellement après la réinitialisation de plusieurs variables de session)
-  // et s'arranger pour que l'association à currentUser soit 'null' quand la page est rechargée
-  var xhr = new XMLHttpRequest();
-  xhr.open("GET", "/xhr/sign-out", true);
-  xhr.send(null);
-  xhr.onreadystatechange = simpleXhrSentinel(xhr);
-}
-
-// C'est parti !
-navigator.id.watch({
-  loggedInUser: currentUser,
-       onlogin: verifyAssertion,
-      onlogout: signoutUser
-}};
-
- -

Vous devez appeler navigator.id.watch() sur toutes les pages comprenant un bouton de connexion ou de déconnexion. Pour gérer les améliorations de Persona comme la connexion automatique et la déconnexion globale de vos utilisateurs, il est conseillé d'appeler cette fonction sur toutes les pages de votre site.

- -

Persona comparera l'adresse e-mail que vous passez dans loggedInUser avec celle qu'il connaît pour l'utilisateur actuellement connecté. Si elles ne correspondent pas, il peut déclencher automatiquement onlogin ou onlogout au chargement de la page.

- -

Étape 4 : Vérifiez les identifiants de l'utilisateur

- -

Plutôt qu'un mot de passe, Persona utilise des "assertions d'identité" qui sont une sorte de mot de passe à usage unique, lié à un seul site et combiné à l'adresse e-mail de l'utilisateur. Lorsqu'un utilisateur désire se connecter, votre fonction de callback onlogin sera appelée et recevra en paramètre une assertion de cet utilisateur. Avant d'autoriser la connexion, vous devez vérifier la validité de cette assertion.

- -

Il est extrêmement important que vous vérifiiez cette assertion sur votre serveur et non en JavaScript (qui s'exécute dans le navigateur de votre utilisateur) car cela serait trop facile à contourner. L'exemple ci-dessous confie l'assertion au backend du site en utilisant le helper jQuery $.ajax() pour effectuer un POST de celle-ci vers /api/login.

- -

Une fois que le serveur dispose d'une assertion, comment la vérifier ? Le moyen le plus simple est d'utiliser un helper fourni par Mozilla. Effectuez un simple POST de l'assertion vers https://verifier.login.persona.org/verify avec deux paramètres :

- -
    -
  1. assertion: L'assertion d'identité fournie par l'utilisateur.
  2. -
  3. audience: Le nom de domaine et le port de votre site web. Vous devez coder cette valeur en dur dans votre backend ; ne la composez pas en fonction d'une quelconque donnée fournie par l'utilisateur.
  4. -
- -

Par exemple, si vous êtes example.com, vous pouvez utiliser la ligne de commande pour tester une assertion avec :

- -
$ curl -d "assertion=<ASSERTION>&audience=https://example.com:443" "https://verifier.login.persona.org/verify"
-
- -

Si elle est valide, vous recevrez une réponse en JSON comme celle-ci :

- -
{
-  "status": "okay",
-  "email": "bob@eyedee.me",
-  "audience": "https://example.com:443",
-  "expires": 1308859352261,
-  "issuer": "eyedee.me"
-}
-
- -

Pour en apprendre plus à propos du service de vérification, lisez l'API de vérification à distance. Un exemple d'implémentation de /api/login utilisant Python, le framework web Flask, et la librairie HTTP Requests ressemblerait à ça :

- -
@app.route('/api/login', methods=['POST'])
-def login():
-    # La requête doit avoir une assertion à vérifier
-    if 'assertion' not in request.form:
-        abort(400)
-
-    # Envoyer l'assertion au service de vérification de Mozilla.
-    data = {'assertion': request.form['assertion'], 'audience': 'https://example.com:443'}
-    resp = requests.post('https://verifier.login.persona.org/verify', data=data)
-
-    # Le vérificateur a-t-il répondu ?
-    if resp.ok:
-        # Décoder la réponse
-        verification_data = json.loads(resp.content)
-
-        # Si l'assertion est valide
-        if verification_data['status'] == 'okay':
-            # Connecter l'utilisateur en lui envoyant un cookie de session sécurisé
-            session.update({'email': verification_data['email']})
-            return resp.content
-
-    # Oups, quelque chose a échoué. Abandon.
-    abort(500)
-
- -

La gestion de session est probablement très similaire à votre système de connexion existant. Le premier grand changement est de vérifier l'identité de l'utilisateur en vérifiant une assertion plutôt que son mot de passe. L'autre grand changement est de s'assurer que l'adresse email de l'utilisateur est disponible pour la passer dans le paramètre loggedInEmail de navigator.id.watch().

- -

La déconnexion est simple : vous n'avez qu'à effacer le cookie de session de l'utilisateur.

- -

Étape 5 : Consultez les bonnes pratiques

- -

Une fois que tout fonctionne et que vous vous êtez connecté et déconnecté avec succès de votre site, vous devriez prendre un moment pour consulter les bonnes pratiques pour utiliser Persona de manière sûre et sécurisée.

- -

Si vous construisez un site de production, consulter le guide de l'implémenteur, où nous collections les astuces pour intégrer les fonctionnalités souvent requises dans les systèmes de connexion.

- -

Enfin, n'oubliez pas de vous inscrire à la liste de difussion Persona notices afin d'être informé des failles de sécurité ou de changements incompatibles avec de précédentes versions de l'API Persona. Cette liste a un taffic extrêmement faible : elle est uniquement utilisée pour annoncer des changements qui pourraient avoir un impact négatif sur votre site.

- -

 

diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/ajouter_adresse_email_supplementaire_avec_persona/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/ajouter_adresse_email_supplementaire_avec_persona/index.html deleted file mode 100644 index 2058fd4b0a..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/ajouter_adresse_email_supplementaire_avec_persona/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Ajouter des adresses e-mail supplémentaires avec Persona -slug: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Ajouter_adresse_email_supplementaire_avec_Persona -tags: - - Persona -translation_of: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Adding_extra_email_addresses_with_Persona ---- -

C'est une bonne idée de permettre à vos utilisateurs d'ajouter des adresses e-mail supplémentaires à leurs comptes. Ceci leur permet de changer leurs adresses e-mail, et d'accéder à leur compte même s'ils sont dans l'impossibilité d'accéder à leur compte e-mail principal.

-

Vous devrez vérifier les adresses supplémentaires. Vous pouvez le faire manuellement, en envoyant un e-mail contenant un lien de vérification à la nouvelle adresse, ou le faire en utilisant Persona.

-

Si vous utilisez Persona pour ajouter des adresses e-mail, il vous faut alors faire attention à plusieurs points : rendez le contexte de la requête explicite, et mettez à jour la valeur passer dans loggedInUser pour assurer que la transaction n'est pas cassée par le gestionnaire de session de Persona

-

Clarifier le context de la requête

-

Quand vous requêtez une nouvelle assertion en utilisant soit la vieille API navigator.id.get() ou l'API navigator.id.request(), Persona part du principe que l'utilisateur est en train d'essayer de se connecter au site web, et l'interface utilisateur est affiché en conséquence. Si vous utilisez Persona seulement pour vérifier une nouvelle adresse e-mail, votre site doit expliquer ceci clairement aux utilisateurs, afin qu'ils ne soient pas étonnés par la fenêtre de Persona.

-

Mettre à jour loggedInUser

-

Si vous utilisez l'API navigator.id.get() sur l'ensemble de votre site, alors vous pouvez simplement faire un nouvel appel à navigator.id.get() pour obtenir la nouvelle adresse e-mail.

-

Mais si vous utilisez navigator.id.request(), il vous faut alors utiliser navigator.id.request() pour obtenir l'adresse e-mail supplémentaire. Dans ce cas, quand vous avez vérifié l'assertion dans votre gestionnaire onlogin, vous devez mettre à jour l'argument loggedInUser de navigator.id.watch() avec la nouvelle adresse.

-

Si vous ne le faîtes pas, il y aura une mauvaise correspondance : Persona pensera que l'utilisateur connecté est nouvelle_adresseemail@example.org, mais votre site web dira que l'utilisateur connecté est vieille_adresseemail@example.org. Persona réagira en déclenchant onlogin avec une assertion pour nouvelle_adresseemail@example.org, que votre site web reconnatra sûrement comme un nouveau utilisateur souhaitant se connecter.

diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic/index.html deleted file mode 100644 index fb2c27e81b..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic/index.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Appeler request() seulement depuis un gestionnaire de clic -slug: >- - Archive/Mozilla/Persona/The_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic -tags: - - Persona -translation_of: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Call_request()_only_from_a_click_handler ---- -

Le fenêtre Persona est actuellement implémentée comme une fenêtre popup. Les navigateurs web modernes bloquent les popups, sauf s'ils sont déclenchés directement depuis un clic de la souris ou depuis un touche du clavier. Ceci veut dire que vous devez appeler navigator.id.request() ou navigator.id.get() directement depuis la fonction gérant le clic ou la touche pressée. Si c'est fait en réaction à un autre évènement, le popup ne s'affichera pas et l'utilisateur ne pourra pas s'identifier.

-

Par exemple : Supposons que votre site web diffère l'identification. Les utilisateurs peuvent parcourir le contenu, mais ils ne doivent s'identifier que lorsqu'ils souhaitent éditer le contenu. Si vous implémentez ceci en appelant navigator.id.request() en réponse à un évènement focus sur un champ texte, alors la popup sera bloquée.

-

Vous pouvez toujours implémenter l'identification sur le focus de cette façon : sur l'évènement focus, affichez un dialogue avec un bouton "Identifiez-vous", et attachez le déclenchement de navigator.id.request() sur l'évènement click.

diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/call_logout()_after_a_failed_login/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/call_logout()_after_a_failed_login/index.html deleted file mode 100644 index b587288f2d..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/call_logout()_after_a_failed_login/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Appeler logout() après une connexion échouée -slug: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Call_logout()_after_a_failed_login -tags: - - Persona -translation_of: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Call_logout()_after_a_failed_login ---- -

Après que votre gestionnaire onlogin a été appelé avec une assertion, si pour quelque raison, vous ne pouvez utiliser cette assertion pour connecter l'utilisateur, vous devez appeler navigator.id.logout().

-

Si vous ne le faîtes pas, la prochaine que vous appelerez navigator.id.watch(), Persona appelera immédiatement, à nouveau, votre gestionnaire onlogin, avec la même assertion. Ceci amène généralement à une boucle infinie d'echec de connexion :

-
    -
  1. L'utilisateur clique sur "Se connecter"
  2. -
  3. L'utilisateur intéragit avec l'interface de Persona, et Persona génère une assertion
  4. -
  5. Persona livre l'assertion au gestionnaire onlogin de la page
  6. -
  7. Le gestionnaire onlogin rejète l'assertion, et redirige l'utilisateur vers la page de connexion
  8. -
  9. La page de connexion se charge, et appelle navigator.id.watch(). Nous retournons à l'étape 3.
  10. -
-

Ceci car Persona essaye de se souvenir de l'adresse e-mail que vous voulez utilisez pour la connexion sur un site donné. Une fois que l'utilisateur a essayé de se connecté à votre site en tant que bob@example.org, Personna se souvient que c'est l'adresse que vous souhaitez utiliser pour ce site. Quand une nouvelle page se charge et appele navigator.id.watch() avec un loggedInUser à 'null', Persona compare à nouveau avec sa valeur "bob@example.org", et envoie l'assertion à nouveau.

-

Pour que Persona oublie l'association entre votre site l'adresse e-mail, appelez navigator.id.logout() si vous ne souhaitez pas identifier l'utilisateur avec cette assertion. Ceci parce que l'assertion n'est pas valide, ou parce que vous ne voulez pas utiliser cette adresse e-mail.

-

Un scénario commun, où ce problème peut survenir, est quand un service veut autoriser ses utilisateurs à se connecter avec Persona, mais ne veut pas permettre de s'inscrire avec Persona, préférant un système d'inscription personnalisé pour les nouveaux utilisateurs. Dans ce cas, quand vous recevez l'assertion, vous vérifiez que l'adresse e-mail est bien celui d'un de vos utilisateurs, et si ce n'est pas le cas, vous rejetez la connexion. Si vous rejetez l'assertion, vous devez appeler navigator.id.logout().

diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/index.html deleted file mode 100644 index 6057c265b6..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Guide de l'implémenteur -slug: Archive/Mozilla/Persona/The_implementor_s_guide -tags: - - Persona -translation_of: Archive/Mozilla/Persona/The_implementor_s_guide ---- -

Le guide de configuration rapide peut être suffisant pour démarrer, mais quand vous construisez un site complet pour la production, vous aurez probablement besoin de fonctionnalités qui n'ont pas été couvertes par ce guide. Dans cette page, nous avons rassemblé les fonctionnalités qui sont couramment nécessaires pour les systèmes de connexion, et nous expliquons les meilleures pratiques pour les implémenter avec Persona.

-
-
-
- Appeler logout() après une connexion échouée
-
- Appeler toujours logout() si vous rejetez une assertion, pour évider une différence entre votre idée de l'utilisateur courant et l'idée de Persona, qui pourrait amener à une boucle infinie d'échecs de connexion.
-
-
-
- Ajouter des adresses e-mail supplémentaires avec Persona
-
- Comment permettre à vos utilisateurs d'ajouter une adresse e-mail secondaire en utilisant Persona.
-
-
-
- Permettre aux utilisateurs de changer d'adresse e-mail
-
- Comme permettre à vos utilisateurs de changer d'adresse e-mail en utilisant Persona.
-
-
-
- Problèmes pour intégrer une protection CSRF
-
- Un problème causé par l'intération entre un mécanisme courant de protection CSRF et l'API Observer de Persona.
-
-
-
- Supporter les utilisateurs sans JavaScript
-
- Persona requiert JavaScript. Cette page a quelques astuces pour supporter les utilisateurs qui n'ont pas JavaScript.
-
-
-
-
-
- Appeler request() seulement depuis un gestionnaire de clic
-
- Parce que Persona utilise une fenêtre popup, vous devez appeler request() ou get() seulement dans la fonction attachée à l'évènement click ou keypress, pas à un autre type d'évènement.
-
-
-
- Tester votre système
-
- Quelques conseils pour simuler la connexion et la déconnexion des utilisateurs sur votre site web.
-
-
-

 

diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/permettre_utilisateurs_changer_adresse_email/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/permettre_utilisateurs_changer_adresse_email/index.html deleted file mode 100644 index be06388a44..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/permettre_utilisateurs_changer_adresse_email/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Permettre aux utilisateurs de changer d'adresse e-mail -slug: >- - Archive/Mozilla/Persona/The_implementor_s_guide/permettre_utilisateurs_changer_adresse_email -tags: - - Persona -translation_of: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Enabling_users_to_change_their_email_address ---- -

Parce que les noms d'utilisateur Persona sont des adresses e-mail, il n'est pas forcément évident de savoir comment vous pouvez permettre à vos utilisateurs de changer d'adresse e-mail. Nous sommes en train de travailler pour améliorer le processus, et pour le moment, c'est un peu particulier, mais faisable en suivant ces étapes :

-
    -
  1. Utilisez un identifiant qui est indépendant de l'adresse e-mail de l'utilisateur comme clef primaire dans votre table d'utilisateurs. Elle peut ainsi rester la même lorsque l'adresse e-mail change.
  2. -
  3. Permettez aux utilisateurs d'ajouter des adresses e-mail à leurs comptes. Vous devrez vérifier leurs adresses e-mail, ce que vous pouvez faire manuellement, en envoyer un lien de vérification dans un e-mail à leur nouvelle adresse, ou en utilisant Persona. Si vous utilisez Persona, lisez Ajouter des adresses e-mail supplémentaires avec Persona.
  4. -
  5. Permettez aux utilisateurs de se connecter avec n'importe quelle adresse e-mail de leur compte.
  6. -
  7. Permettez aux utilisateurs de supprimer leurs adresses e-mail.
  8. -
-

Avec ces fonctionnalités, les utilisateurs peuvent changer leur adresse e-mail de cette façon :

-
    -
  1. Connexion à leur compte en utilisant leur adresse e-mail courante
  2. -
  3. Ajout d'une nouvelle adresse e-mail à leur compte
  4. -
  5. Suppression de l'ancienne adresse e-mail de leur compte.
  6. -
diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/problemes_integrer_protection_crsf/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/problemes_integrer_protection_crsf/index.html deleted file mode 100644 index 134f7954ec..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/problemes_integrer_protection_crsf/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Problèmes pour intégrer une protection CSRF -slug: >- - Archive/Mozilla/Persona/The_implementor_s_guide/problemes_integrer_protection_CRSF -tags: - - Persona -translation_of: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Problems_integrating_with_CRSF_protection ---- -

Si vous implémentez une protection particulière contre les attaques de connexion CSRF (Cross-Site Request Forgery, contrefaçon de requêtes trans-sites), vous rencontrerez des problèmes quand un utilisateur a plusieurs pages ouvertes sur votre site, et essaie ensuite de se connecter avec l'une d'elles. Ce document explique ce problème, et comment le résoudre.

-

CSRF et les attaques de connexion CSRF

-

Dans le cas normal d'une attaque CSRF, l'utilisateur est déjà connecté au site ciblé (par exemple, leur banque). L'utilisateur charge alors une page sur un autre site, construite de manière malveillante. Cette page envoie une requête HTTP vers le site web ciblé : la requête présente un intérêt particulier (par exemple, le transfert d'argent vers l'attaqueur). Le site ciblé permet la requête car il pense que puisque l'utilisateur est connecté au site, elle est faite par l'utilisateur.

-

Dans le cas d'une attaque de connexion CSRF, l'utilisateur charge une page construite de manière malveillante qui connecte l'utilisateur sur le site ciblé, mais en tant que l'attaquant : le site ciblé dépose alors un cookie de session dans le navigateur de l'utilisateur. L'attaquant peut accéder au compte plus tard, et récupérer les informations que le site a collectées sur l'utilisateur.

-

Protection contre CSRF : jetons CSRF déclinés à partir de l'identifiant de session

-

Une protection courante contre les attaques normales CSRF consiste pour les sites web de générer un jeton à partir de l'identifiant de session de l'utilisateur, et l'inclure dans les pages qu'ils servent : ensuite les requêtes POST doivent inclure ce jeton, qui est vérifié par le serveur. Ceci veut dire que les requêtes POST ne peuvent pas être faites depuis d'autres domaines, car ils ne peuvent pas accéder au jeton utilisé pour la vérification.

-

Avec les attaques de connexion CSRF, bien sûr, l'utilisateur n'est pas encore connecté au site web. Donc le site prépare une première session dès que l'utilisateur visite une page. Elle est utilisée pour générer le jeton CSRF jusqu'à ce que l'utilisateur se connecte. Une fois l'utilisateur connecté, un nouvel identifiant de session est généré, et un jeton CSRF est regénéré.

-

Le problème avec Persona

-

Le problème avec Persona survient quand l'utilisateur n'est pas encore identifié, et a des pages de votre site web dans deux différents onglets, A et B. Les pages contiennent le même jeton CSRF, généré à partir de l'identifiant de la première session. Ensuite l'utilisateur se connecte dans l'onglet A, et le site genère un nouvel identifiant de session, et de par le fait, un nouveau jeton CSRF. Mais l'onglet B a toujours l'ancienne page de chargée, contenant l'ancien jeton, maintenant invalide.

-

Dans des circonstances ordinaires cela n'aurait pas d'importance : dès que l'onglet B recharge la page, ou que l'utilisateur navigue sur une nouvelle page, le jeton CSRF inclus est mis à jour. Mais lorsque Persona a généré une assertion en réponse à un appel à navigator.id.request(), Persona appelle onlogin pour chaque onglet qui a chargé le site Web, et pas seulement pour celui qui a réclamé l'assertion. Dès l'appel du gestionnaire onlogin sur l'onglet B, il essaie d'envoyer en POST l'assertion vers le serveur qui utilise l'ancien jeton CSRF — et le serveur lance alors une erreur CSRF.

-

La solution

-

La solution consiste pour le gestionnaire de onlogin à envoyer une requête GET qui réclame un nouveau jeton CSRF et vérifie que l'utilisateur est déjà identifié. Si l'utilisateur est bien identifié, le gestionnaire n'a plus qu'à recharger la page. Sinon il utilise le nouveau jeton CSRF pour envoyer l'assertion en POST au serveur.

diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/supporter_utilisateurs_sans_javascript/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/supporter_utilisateurs_sans_javascript/index.html deleted file mode 100644 index 429975768b..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/supporter_utilisateurs_sans_javascript/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Supporter les utilisateurs sans JavaScript -slug: >- - Archive/Mozilla/Persona/The_implementor_s_guide/supporter_utilisateurs_sans_javascript -tags: - - Persona -translation_of: >- - Archive/Mozilla/Persona/The_implementor_s_guide/Supporting_users_without_JavaScript ---- -

Persona requiert actuellement JavaScript. Si vous avez besoin de supporter les utilisateurs qui n'ont pas JavaScript activé, il vous faudra implémenter un système de connexion alternatif pour ces utilisateurs, et désactiver le bouton "Se connecter avec Persona", en l'activant avec le code JavaScript qui associe le bouton avec navigator.id.request().

diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/tester/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/tester/index.html deleted file mode 100644 index cc9db5711b..0000000000 --- a/files/fr/archive/mozilla/persona/the_implementor_s_guide/tester/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Tester -slug: Archive/Mozilla/Persona/The_implementor_s_guide/tester -tags: - - Persona -translation_of: Archive/Mozilla/Persona/The_implementor_s_guide/Testing ---- -

Si vous développez un système pour la production, vous aurez sûrement besoin d'écrire des tests d'intégration qui simuleront l'identification par un utilisateur et sa déconnexion, en utilisant Persona.

-

Si vous utilisez Selenium pour tester, considérez l'utilisation de la bibliothèque bidpom. Les sites mockmyid.com et personatestuser.org peuvent aussi être utiles.

-

Vous voudrez aussi peut-être regarder stubbyid.

diff --git a/files/fr/archive/mozilla/persona/vue_densemble_du_protocole/index.html b/files/fr/archive/mozilla/persona/vue_densemble_du_protocole/index.html deleted file mode 100644 index 2b14af2b69..0000000000 --- a/files/fr/archive/mozilla/persona/vue_densemble_du_protocole/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Vue d'ensemble du protocole -slug: Archive/Mozilla/Persona/vue_densemble_du_protocole -translation_of: Archive/Mozilla/Persona/Protocol_Overview ---- -

Persona est construit sur le protocole BrowserID. Cette page décrit le fonctionnement haut niveau de BrowserID.

-

Acteurs

-

Le protocole implique trois acteurs:

- -

Persona et le protocole BrowserID utilisent les adresses e-mail comme identifiant, il est donc naturel que les fournisseurs d'e-mail deviennent des IdPs.

-

Mozilla intervient en tant qu'IdP par défaut pour que les utilisateurs puissent utiliser n'importe quelle adresse e-mail, même si son fournisseur n'est pas un IdP.

-

Étapes du protocole

-

Il y a trois étapes distinctes dans le protocole :

-
    -
  1. Fourniture du certificat de l'utilisateur
  2. -
  3. Génération de l'assertion
  4. -
  5. Vérification de l'assertion
  6. -
-

Comme prérequis, l'utilisateur doit avoir une adresse e-mail active qu'il souhaite utiliser pour se connecter. Le protocole ne requière pas que le fournisseur d'identité soit un routeur SMTP, mais il requière que l'identité soit au format utilisateur@domaine.

-

Fourniture du certificat de l'utilisateur

-

Pour se connecter à un site, un utilisateur doit prouver qu'il est le propriétaire de l'e-mail. La base de cette preuve est un certificat signé et chiffré fourni par l'IdP attestant le lien entre le navigateur d'un utilisateur et une identité donnée par l'IdP.

-

Comme Persona utilise les techniques standard de cryptographie par clef publique, le certificat de l'utilisateur est signé avec la clef privée de l'IdP et contient :

- -

Le navigateur de l'utilisateur génére une paire de clef différente pour chaque adresse de l'utilisateur, et ces paires ne sont pas partagées entre les navigateurs. En conséquence, un utilisateur doit obtenir un nouveau certificat à chaque fois qu'un expire, ou à chaque fois qu'il utilise un nouveau navigateur ou ordinateur. Les certificats doivent expirer dans les 24h après leur emission.

-

Quand un utilisateur séléctionne une identité à utiliser quand il se connécte a un site, le navigateur vérifie s'il a un certificat valide pour cette identité. Si c'est le cas, l'étape est terminée et la navigation continue avec l'étape d'après : la génération de l'assertion.  Si le navigateur n'a pas de certificat valide, il essaye d'en obtenir un du domaine associé avec l'identité choisie.

-
    -
  1. Le navigateur va chercher le document de support /.well-known/browserid par SSL depuis le domaine de l'identité.
  2. -
  3. Avec les informations du document, le navigateur transmet l'adresse e-mail de l'utilisateur et la clef publique associée au fournisseur d'identité et demande un certificat signé.
  4. -
  5. Si nécessaire, l'utilisateur est invité à se connecter chez le fournisseur avant la fourniture du certificat.
  6. -
  7. Le fournissseur crée, signe et donne le certificat de l'utilisateur au navigateur de l'utilisateur.
  8. -
-

Le certificat en main, le navigateur peut continuer avec la génération de l'assertion et la connexion au site.

-

user-certificate-provisioning.png

-

Génération de l'assertion

-

Le certificat de l'utilisateur établie un lien vérifiable entre une adresse e-mail et une clef publique. Cependant, seul, ce n'est pas suffisant pour se connecter à un site web : l'utilisateur doit encore monter son lien avec le certificat en prouvant sa possession de la clef privée.

-

Pour cela, le navigateur de l'utilisateur crée et signe un nouveau document appelé "assertion de l'identité". Il contient :

- -

Le navigateur présente alors à la fois le certificat de l'utilisateur et l'assertion de l'identité au site web pour la vérification.

-

Vérification de l'assertion

-

La combinaison du certificat et de l'assertion est suffisante pour confirmer l'identité d'un utilisateur.

-

D'abord, le site vérifie le domaine et la date d'expiration dans l'assertion. Si l'assertion est expirée ou destinée a un domaine different, elle est rejetée. Cela évite la réutilisation malicieuse de l'assertion

-

Ensuite, le site valide la signature de l'assertion avec la clef publique de l'utilisateur contenu dans le certificat. Si la clef et la signature correspondent, le site est assuré que l'utilisateur posséde vraiment la clef associée au certificat.

-

En dernier, le site va chercher la clef publique du fournisseur depuis son document /.well-known/browserid et verifie qu'il correspond a la signature du certificat de l'utilisateur. Si c'est le cas, le site peut etre certain que le certificat a vraiment ete issue du domaine en question.

-

Une fois cela vérifié, this is a current login attempt for the proper RP, that the user certificate matches the current user, and that the user certificate is legitimate, the RP is done and can authenticate the user as the identity contained in the certificate.

-

assertion-generation-and-verify.png

-

The Persona Fallback IdP

-

What if a user's email provider doesn't support Persona? In that case, the provisioning step would fail. By convention, the user's browser handles this by asking a trusted third party, https://login.persona.org/, to certify the user's identity on behalf of the unsupported domain. After demonstrating ownership of the address, the user would then receive a certificate issued by the fallback IdP, login.persona.org, rather than the identity's domain.

-

RPs follow a similar process when validating the assertion: the RP would ultimately request the fallback IdP's public key in order to verify the certificate.

diff --git a/files/fr/archive/mozilla/when_to_use_ifdefs/index.html b/files/fr/archive/mozilla/when_to_use_ifdefs/index.html deleted file mode 100644 index d0c04f0367..0000000000 --- a/files/fr/archive/mozilla/when_to_use_ifdefs/index.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Quand utiliser les "ifdefs" ? -slug: Archive/Mozilla/When_To_Use_ifdefs -translation_of: Archive/Mozilla/When_To_Use_ifdefs ---- -

La base du code Mozilla est utilisée dans de nombreux projets et produits, incluant Firefox, Thunderbird, XULRunner et bien d'autres. Ce code de base est parfois utilisé dans plusieurs projets mais des différences dans certains endroits sont parfois nécessaires. Les "ifdefs", ou instructions conditionnelles, sont alors utilisées pour obtenir un code différent.

-

Qu'est-ce qu'un "ifdef" ?

-

Un "ifdef" est une directive de compilation conditionnelle pour le préprocesseur qui permet de sélectionner certains bouts de code lorsque certaines conditions sont remplies. Dans ce document, le terme est utilisé en vrac pour désigner n'importe quel type de conditions qui permettent de générer différentes configurations.

-

Quand les "ifdefs" sont utilisés ?

-

Il existe 3 principaux cas d'utilisations dans l'arborescence de Mozilla : les ifdefs pour la partie "platform/widget", les ifdefs définissant certaines fonctionnalités et les ifdefs spécifiques à une application:

-

ifdefs pour "Platform/widget"

-

Le code dans Mozilla aura fréquemment besoin d'être différent pour certaines plateformes et widgets. Ces ifdefs sont pour la plupart acceptés. La seule fois où ils peuvent poser problèmes est lorsque l'on a du code d'une extension multi-plateforme ou pour la localisation: étant donné que ces codes sont téléchargés à travers plusieurs plateformes, les ifdefs spécifiques à une seule plateforme sont interdits.

-

Pour un exemple d'ifdef spécifique à une plateforme, voir nsCRT.h.

-

ifdefs pour les fonctionnalités (ou "feature")

-

Le code dans Mozilla contient beaucoup de fonctionnalités pouvant être activées/désactivées via des flags dans un fichier configure. Par exemple, il est possible de désactiver une grande partie du moteur de rendu de XUL en spécifiant --disable-xul quand on crée une configuration pour un build. Quand on ajoute des ifdefs qui implémente ces flags de configuration, une grande attention doit être portée sur les dépendances de construction (build dependencies). Par exemple, XPCOM, le moteur Javascript SpiderMonkey et le moteur réseau ne connaissent rien de XUL et ne devraient avoir aucun ifdefs basé sur --disable-xul.

-

Un ifdef spécial mérite votre attention : "MOZ_XUL_APP". Cette variable permet de "marquer" toutes applications utilisant le "toolkit". Les ifdefs sur MOZ_XUL_APP ne sont pas acceptables pour le tier 9, mais sont tolérés (et parfois même indispensable) pour les tiers suivants.

-

Pour un exemple d'ifdef gérant des caractéristiques, voir layout/Makefile.in.

-

ifdefs spécifiques aux applications

-

Pour finir, chaque application/projet a besoin de générer différents morceaux de code. Les ifdefs liés à une application ne devraient se trouver que dans du code spécifique à cette application. C'est le ifdef le plus délicat à placer car il est souvent difficile de savoir quel code est partagé et quel code est spécifique à une application. En règle général, tout code dans le tier 2, tier 9, ou tier 50 est du code partagé et ne devrait pas contenir d'ifdef spécifique à une application. N'importe quel code dans les tiers suivants est spécifique à une application. Cette règle comporte de nombreuses exceptions dont certaines sont listées ici :

- -

Pour un exemple d'ifdef spécifique à une application mauvais et qui devrait être supprimé, voir nsNativeAppSupportWin.cpp.

-

Types d'ifdef

-

Il existe deux grands types d'ifdef : les ifdef pour le préprocesseur et les ifdefs pour le Makefile. Les ifdefs pour le préprocesseur sont généralement facile à repérer: dans du code C, C++ on les trouve avec des instructions comme #ifdef ou #if.

-

Les ifdefs dans un Makefile sont cependant plus dur à repérer et peuvent indirectement provoquer des erreurs ce qui est bien plus grave. Les ifdefs d'un Makefile sont utilisés pour construire ou non certains répertoires. Cela signifie qu'il existe des interfaces complètement différentes mais portant le même nom qui sont construites via des conditions. Par exemple (au moment de la rédaction), il existe 2 interfaces nsIExtensionManager : {{ Source("toolkit/mozapps/extensions/public/nsIExtensionManager.idl", "toolkit version") }} et {{ Source("xpfe/components/extensions/public/nsIExtensionManager.idl", "suite version") }}. Les ifdefs du Makefile qui choisissent l'un ou l'autre ne sont pas évidents à trouver (voir {{ Source("Makefile.in") }} et {{ Source("xpfe/components/Makefile.in") }}).

-

Si vous introduisez un quelconque ifdef dans un makefile, veuillez demander une revue de votre code à un des mainteneurs du "build-config": Benjamin Smedberg sera généralement ravi de vérifier vos changements.

diff --git a/files/fr/archive/mozilla/xbl/index.html b/files/fr/archive/mozilla/xbl/index.html deleted file mode 100644 index 126b055462..0000000000 --- a/files/fr/archive/mozilla/xbl/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: XBL -slug: Archive/Mozilla/XBL -tags: - - XBL -translation_of: Archive/Mozilla/XBL ---- -

-XML Binding Language (XBL, parfois aussi appelé langage de liaison extensible) est un langage permettant de décrire des liaisons pouvant être attachées à des éléments dans d'autres documents. L'élément auquel la liaison est attachée, appelé l'élément lié (bound element), acquiert le nouveau comportement spécifié par la liaison. -

Les liaisons peuvent contenir des gestionnaires d'évènements enregistrés sur l'élément lié, une implémentation de nouvelles méthodes et propriétés devenant accessibles depuis cet élément, et du contenu anonyme qui sera inséré par dessous l'élément lié. -

La plupart des éléments d'interface XUL sont au moins partiellement implémentés à l'aide de XBL. Vous pouvez construire vos propres éléments réutilisables à partir d'éléments XUL, HTML, SVG, et d'autres primitives à l'aide de XBL. -

-

Spécifications

- -

Certaines des différences entre sXBL et XBL2 ont été relevées dans un article d'Anne van Kesteren (en anglais). -

Une présentation des différences entre le XBL de Mozilla et XBL2 est disponible dans ce message de Jonas Sicking (avril 2007). -

-

Voir aussi

- -

Communauté

- -

-

diff --git "a/files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/index.html" "b/files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/index.html" deleted file mode 100644 index 19f7e528e9..0000000000 --- "a/files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/index.html" +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Référence XBL 1.0 -slug: Archive/Mozilla/XBL/Référence_XBL_1.0 -tags: - - XBL -translation_of: Archive/Mozilla/XBL/XBL_1.0_Reference ---- -

-

-

Résumé

-

Ce document décrit le langage de liaison extensible (Extensible Binding Language, XBL) 1.0 tel qu'implémenté dans les navigateurs basés sur Gecko. -

XBL est un langage de balisage basé sur XML pour implémenter des composants réutilisables (liaisons ou bindings) qui peuvent être liés à des éléments d'autres documents. L'élément pour lequel une liaison a été spécifiée, appelé l'élément lié ou bound element, reçoit un nouveau comportement spécifié par la liaison. Les liaisons peuvent être liées à des éléments à l'aide de feuilles de style en cascade (CSS) ou via le DOM. Un élément peut être lié à plusieurs liaisons différentes en même temps.

Fonctionnellement, les liaisons XBL peuvent être comparées avec les fonctionnalités Behaviors et Viewlink de Microsoft, mais implémentées comme une solution XML intégrée. -

Les liaisons peuvent contenir des gestionnaires d'évènements enregistrées sur l'élément lié, une implémentation de nouvelles méthodes et propriétés qui deviennent accessibles depuis celui-ci, et du contenu anonyme à insérer autour de cet élément. -

-
-

Différents ajustements dans l'implémentation actuelle ont été faits depuis les propositions XBL plus anciennes, et tous ne sont pas encore reflétés dans ce document. Le processus de documentation est toujours en cours : gardez cela à l'esprit lorsque vous utilisez les informations fournies. -

-
-

Éléments XBL

-

Les éléments XBL 1.0 sont dans l'espace de noms http://www.mozilla.org/xbl. -

- -

Attachement et détachement de liaisons

- -

Interfaces DOM

- -

Contenu anonyme

- -

Implémentations de liaisons

- -

Gestionnaires d'évènements

-

Exemple - Notes

-

Mis à jour et ajusté pour l'implémentation actuelle de Firefox. -

-
-

Cet exemple est destiné à montrer l'utilisation de XBL plutôt que pour être une application utile en pratique. Pour cette raison, il contient de nombreux commentaires et certains blocs qui auraient pu être évités dans une solution plus compacte mais sont utilisés ici à des fins de démonstration. -

-
- -

Voir cet exemple -


-Téléchargement de tous les fichiers (archive .zip) need to ask to adjust the server - it gives "Access denied" for zip files (?) -

-

Références

- -
-

Informations sur le document original

- -
diff --git "a/files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/\303\251l\303\251ments/index.html" "b/files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/\303\251l\303\251ments/index.html" deleted file mode 100644 index fffa11dcf9..0000000000 --- "a/files/fr/archive/mozilla/xbl/r\303\251f\303\251rence_xbl_1.0/\303\251l\303\251ments/index.html" +++ /dev/null @@ -1,462 +0,0 @@ ---- -title: Éléments -slug: Archive/Mozilla/XBL/Référence_XBL_1.0/Éléments -translation_of: Archive/Mozilla/XBL/XBL_1.0_Reference/Elements ---- -

bindings

- -

Cette section est testée et ajustée selon l'implémentation courante de Firefox. Veuillez ne la modifier que si le comportement réel diffère de celui qui est décrit. Veuillez ne pas le faire seulement sur base d'une autre spécification XBL.

- -
<!ELEMENT bindings ( binding* ) >
-
-Hiérarchie :   élément racine
-Peut contenir : <binding>
-
- -

L'élément bindings est l'élément racine de tout document XBL. Il doit habituellement déclarer XBL en tant qu'espace de noms par défaut (à moins qu'un préfixe d'espaces de noms XBL soit utilisé) et peut également déclarer d'autres préfixes d'espace de noms utilisés dans votre liaison.

- -

bindings contient zéro ou plus éléments binding comme enfants. Chaque élément binding enfant définit une liaison unique pouvant être attachée à des éléments dans d'autres documents.

- -

Un élément ne peut avoir qu'une liaison attachée (explicitement ou héritée) à un moment donné. Si plusieurs liaisons sont définies, seule la dernière de la séquence sera utilisée (comme avec toute règle CSS).

- -

helloworld.html :

- -
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html>
-<head>
-<title>Hello world!</title>
-<style type="text/css">
-p {
- -moz-binding: url(hello.xml#default);
-}
-#p03 {
- -moz-binding: url(hello.xml#hello2);
-}
-</style>
-</head>
-<body>
-
-  <p>Default content</p>
-  <p>Default content</p>
-  <p id="p03">Default content</p>
-
-</body>
-</html>
-
- -

hello.xml :

- -
<?xml version="1.0"?>
-<bindings xmlns="http://www.mozilla.org/xbl"
- xmlns:html="http://www.w3.org/1999/xhtml">
-  <binding id="default">
-    <content><html:b>Hello world! </html:b><children/></content>
-  </binding>
-  <binding id="hello2">
-    <content><html:b>Hello from my binding! </html:b><children/></content>
-  </binding>
-</bindings>
-
- -

Vous pouvez voir le résultat en ouvrant helloworld.html dans Firefox. hello.xml doit se trouver dans le même répertoire que helloworld.html.

- -

Suivant : bindings > élément binding.

- -

Notes

- - - -
<bindings xmlns="http://www.mozilla.org/xbl"
- xmlns:html = "http://www.w3.org/1999/xhtml"
- xmlns:xul  = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:svg  = "http://www.w3.org/2000/svg"
- xmlns:xlink= "http://www.w3.org/1999/xlink">
-
- -

binding

- -
<!ENTITY % binding-content "(resources?,content?,implementation?,handlers?)">
-<!ELEMENT binding %binding-content;>
-<!ATTLIST binding
-   id                     ID             #REQUIRED
-   extends                CDATA          #IMPLIED
-   display                CDATA          #IMPLIED
-   inheritstyle           true           #IMPLIED
->
-
- -

L'élément binding décrit une seule liaison XBL. Une liaison XBL peut ajouter du contenu anonyme, des champs, des propriétés, des méthodes et des gestionnaires d'évènements à des éléments HTML/XML.

- -

Une seule liaison XBL peut être attachée à un élément à l'aide de feuilles de style pour par script. (Consultez le bug 83830 pour les spécificités de <table>).

- -

CSS :

- -
div {
- -moz-binding: url(myBinding.xml#default);
-}
-
- -

DOM :

- -
elementReference.style.MozBinding = "url(myBinding.xml#default)";
-
- -

Dans les deux cas qui précèdent, on utilise binding avec id="default" dans un fichier myBinding.xml.

- -

À partir de Firefox 3, il est également possible d'utiliser une URL data: pour intégrer la liaison directement :

- -
div {
-  -moz-binding: url(data:text/xml;charset=utf-8,%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Cbindings%20id%3D%22xbltestBindings%22%20xmlns%3D%22http%3A//www.mozilla.org/xbl%22%3E%0A%20%20%3Cbinding%20id%3D%22xbltest%22%3E%3Ccontent%3EPASS%3C/content%3E%3C/binding%3E%0A%3C/bindings%3E%0A);
-}
-
- -

Comme les URL data: ne gèrent pas les identifiants de fragments, la première liaison trouvée dans le XML intégré est utilisée à la place. N'oubliez pas que la liaison doit toujours avoir un ID même si on ne la référence pas. De plus, les URL data: ne sont gérées que depuis du code chrome (autrement dit, depuis l'application ou une extension).

- -
Note : La politique de même origine est utilisée pour les sites web ; ils peuvent seulement lier des fichiers XBL du même domaine, ou dans le chrome.
- -

Pour des raisons de clarté, voici à quoi ressemble le XML intégré dans l'exemple qui précède :

- -
<?xml version="1.0"?>
-<bindings id="xbltestBindings" xmlns="http://www.mozilla.org/xbl">
-  <binding id="xbltest"><content>PASS</content></binding>
-</bindings>
-
- -

La seule manière simple d'attacher des liaisons à tout ensemble d'éléments est d'utiliser des déclarations CSS. Cela permet également de rendre l'implémentation des liaisons partiellement fonctionnelle si le scripting est désactivé. Dans ce dernier cas, toutes les méthodes et tous les gestionnaires d'évènements seront bloqués, mais le contenu anonyme et les styles seront toujours utilisés. C'est pourquoi que les déclarations CSS doivent toujours être utilisées — à moins que vous deviez ajouter des liaisons en cours d'exécution à des éléments particuliers.

- -

Un élément binding peut contenur une balise resources, une balise content, une balise implementation et une balise handlers.

- - - -

 

- -

content

- -
<!ELEMENT content ANY>
-<!ATTLIST content
-   id               ID           #IMPLIED
->
-
- -

Une liaison peut spécifier du nouveau contenu qui sera placé à l'intérieur de l'élément lié. Bien que ce contenu soit visible à l'écran comme s'il était directement dans le fichier, il est anonyme et est invisible du DOM normal. Pour accéder à des nœuds anonymes sur un élément XBL lié, vous pouvez utiliser les fonctions getAnonymousElementByAttribute et getAnonymousNodes. Le seul élément XBL pouvant apparaître dans la balise content est l'élément children. Les attributs de l'élément <content> dans la liaison sont définis sur l'élément lié.

- - - -

children

- -
<!ELEMENT children EMPTY>
-<!ATTLIST children
-   id               ID                           #IMPLIED
-   includes         CDATA                        #IMPLIED
->
-
- -

Spécifie l'emplacement où les éventuels enfants de l'élément lié seront placés dans le contenu généré.

- -

Normalement, si l'élément lié a son propre contenu, le contenu anonyme n'est pas généré. Cependant, avec un élément children, il est possible de fusionner le contenu de l'élément HTML/XML avec le contenu XBL.

- -

Si la balise children a elle-même un contenu, celui-ci deviendra le contenu par défaut. Si l'élément auquel la liaison est attachée a du contenu, le contenu par défaut sera ignoré. Si l'élément n'a aucun contenu, le contenu par défaut sera ajouté.

- - - -

implementation

- -
<!ENTITY % implementation-content "(method|property)*">
-<!ELEMENT implementation %implementation-content;>
-<!ATTLIST implementation
-   id               ID           #IMPLIED
-   name             CDATA        #IMPLIED
-   implements       CDATA        #IMPLIED
->
-
- -

The implementation element describes the set of methods and properties that are attached to the bound element. Once the binding is attached, these methods and properties can be invoked directly from the bound element.

- - - -

constructor

- -

The code inside the constructor is called when a binding has just been attached to an element. So full access to anonymous nodes generated by the binding is already possible. The constructor tag must be placed inside the implementation tag.

- - - -
Note: Prior to Firefox 3, the constructor could be called at a time when reflow of the document layout was locked down, so that attempting to get layout information from within the constructor could return out of date information. In Firefox 3 and later, the constructor is called when reflow can take place, which results in up-to-date information being returned. See bug 398404 for details.
- -

destructor

- -

The code inside the destructor is called when a binding is being removed from an element. You can use this to unload resources to free memory. However the destructor is often not called when it should, see bug 230086. The destructor tag must be placed inside the implementation tag.

- - - -

method

- -
<!ENTITY % method-content "(parameter*,body?)">
-<!ELEMENT method %method-content;>
-<!ATTLIST method
-   id               ID           #IMPLIED
-   name             CDATA        #REQUIRED
-   type             CDATA        #IMPLIED
->
-
- -

The method element is used to describe a single method of a binding implementation.

- - - -

Example

- -
<method name="scrollTo">
-  <parameter name="index"/>
-  <body>
-    this.setAttribute("scrollpos", index);
-  </body>
-</method>
-
- -

parameter

- -
<!ELEMENT parameter EMPTY>
-<!ATTLIST parameter
-   id               ID           #IMPLIED
-   name             CDATA        #REQUIRED
->
-
- -

The parameter element is used inside a method element. It represents a single parameter of a method.

- - - -

body

- -
<!ELEMENT body CDATA>
-<!ATTLIST body
-   id               ID           #IMPLIED
->
-
- -

The body element represents the implementation of its corresponding method. Its contents are the script that is executed when the method is invoked.

- - - -

field

- -
<!ELEMENT field EMPTY>
-<!ATTLIST field
-   id               ID                  #IMPLIED
-   name             CDATA               #REQUIRED
-   readonly         (true|false)        #IMPLIED
->
-
- -

A field is similar to a property, except that it should not have a getter or setter. It is useful as a simple holder for a value. The field element must have content which is code that determines the initial value of the field. The field tag must be inside the implementation tag.

- - - -
Note: In Firefox 3, fields are now evaluated the first time they're accessed instead of at binding attachment time. This shouldn't cause any problems in typical use cases, but there are cases in which this will impact the behavior of your code. See bug 372769 for details.
- -

Here are some examples of cases in which the behavior of your code may change due to this change in Firefox 3:

- -
    -
  1. If you have two fields, one named A and one named B, and field A sets .B, the value of .B will depend on whether or not .A has already been accessed.
  2. -
  3. If a proto is inserted into the proto chain after binding instantiation, doing so may affect field values (this wasn't the case in prior versions of Firefox).
  4. -
  5. At binding attachment time, <field name="parentNode">this.parentNode</field> is undefined instead of the value of parentNode.
  6. -
  7. A field no longer changes the value of a property set on the object itself (rather than a proto) before binding attachment.
  8. -
- -

property

- -
<!ENTITY % property-content "(getter?,setter?)">
-<!ELEMENT property %property-content;>
-<!ATTLIST property
-   id               ID                  #IMPLIED
-   name             CDATA               #REQUIRED
-   readonly         (true|false)        #IMPLIED
-   onget            CDATA               #IMPLIED
-   onset            CDATA               #IMPLIED
->
-
- -

The property element represents a single property of an implementation. A property consists of a pair of getter/setter functions that can be defined using onget/onset attributes or getter/setter elements underneath the property element. Like methods, once the binding is attached, the property can be obtained directly from the bound element. The property tag must be inside the implementation tag.

- - - -

getter

- -
<!ELEMENT getter PCDATA>
-<!ATTLIST getter
-   id               ID                  #IMPLIED
->
-
- -

The getter element contains script that gets executed when a specific property gets called. The getter tag must be inside the property tag.

- - - -

setter

- -
<!ELEMENT setter PCDATA>
-<!ATTLIST setter
-   id               ID                  #IMPLIED
->
-
- -

The setter element contains script that gets executed when a specific property is being set. The setter tag must be inside the property tag.

- - - -

handlers

- -
<!ENTITY % handlers-content "handler*">
-<!ELEMENT handlers %handlers-content;>
-<!ATTLIST handlers
-   id               ID                  #IMPLIED
->
-
- -

The handlers element contains event handlers that can be attached to elements within the bound document. These handlers are installed when the binding is attached and removed when the binding is detached. The handlers tag must be inside the binding tag.

- - - -

handler

- -
<!ENTITY % handler-content "PCDATA">
-<!ELEMENT handler %handler-content;>
-<!ATTLIST handler
-   id               ID                                  #IMPLIED
-   event            NMREF                               #REQUIRED
-   action           CDATA                               #IMPLIED
-   phase            (capturing|bubbling|target)         #IMPLIED
-   button           (1|2|3)                             #IMPLIED
-   modifiers        CDATA                               #IMPLIED
-   keycode          CDATA                               #IMPLIED
-   key              CDATA                               #IMPLIED
-   charcode         CDATA                               #IMPLIED
-   clickcount       (1|2|3)                             #IMPLIED
-   command          ID                                  #IMPLIED
-   preventdefault   false|true                          #IMPLIED
->
-
- -

The handler element describes a single event handler. This handler is attached to its target at the time the binding is attached and unhooked when the binding is detached from the bound element. The script inside the handler is executed when the event handler is matched. The handler tag must be inside the handlers tag.

- - - -

resources

- -
<!ENTITY % resources-content "(image?,stylesheet?)">
-<!ELEMENT resources %resources-content;>
-<!ATTLIST property
-   id               ID                  #IMPLIED
->
-
- -

Used for inclusion of image elements, to cache them for later use, and for inclusion of stylesheet elements. The resources tag must be used directly inside the binding tag.

- - - -

stylesheet

- -
<!ELEMENT stylesheet EMPTY>
-<!ATTLIST stylesheet
-   id               ID                  #IMPLIED
-   src              URI                 #REQUIRED
->
-
- -

The stylesheet element declares a style sheet used by the binding. The style rules in the style sheet will only be applied to the binding, not to other elements in the document. The stylesheet tag must be inside the resources tag.

- - - -

image

- -
<!ELEMENT image EMPTY>
-<!ATTLIST image
-   id               ID                  #IMPLIED
-   src              URI                 #REQUIRED
->
-
- -

Declares an image resource used by the binding. The image is loaded as soon as the binding is used. You can use this to preload a number of images for later use. The image tag must be inside the resources tag.

- - diff --git a/files/fr/archive/mozilla/xpinstall/index.html b/files/fr/archive/mozilla/xpinstall/index.html deleted file mode 100644 index 6c582079a1..0000000000 --- a/files/fr/archive/mozilla/xpinstall/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: XPInstall -slug: Archive/Mozilla/XPInstall -tags: - - XPInstall -translation_of: Archive/Mozilla/XPInstall ---- -
Cross-Platform Install (XPInstall) est une technologie utilisée par la suite d'applications Mozilla, Mozilla Firefox, Mozilla Thunderbird et d'autres applications basées sur XUL, pour l'installation d'extensions. Un module d'installation XPI (prononcez « zippy », dérivé de XPInstall) est un fichier ZIP contenant un script d'installation ou un manifeste (intitulé install.js ou install.rdf) à la racine de ce fichier.
- - - - - - - - -
-

Documentation

- -
-
Référence de l'API XPInstall
-
- -
-
Apprenez à créer un installeur XPI par l'exemple
-
Cet article utilise le script de l'installeur du paquetage d'installation de browser.xpi comme base générale de la discussion autour des installations XPI (à traduire de en:Learn XPI Installer Scripting by Example).
-
- -
-
Création de modules d'installation XPI
-
Cet article décrit le schéma de création de paquetage de Mozilla et offre un tutoriel pour la création d'un nouveau paquetage qui peut alors être redistribué, installé et rendu disponible pour les utilisateurs (à traduire de en:Creating XPI Installer Modules).
-
- -
-
Assistants d'installation (ou Stub Installers)
-
(à traduire de en:Install Wizards (aka: Stub Installers)).
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

{{ DiscussionList("dev-platform", "mozilla.dev.platform") }}

- -

Outils

- - - -

Sujets liés

- -
-
Extensions, XUL, XPI
-
-
- -

Categories

- -

Interwiki Language Links

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/codes_retourn\303\251s/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/codes_retourn\303\251s/index.html" deleted file mode 100644 index 8bd22877f9..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/codes_retourn\303\251s/index.html" +++ /dev/null @@ -1,274 +0,0 @@ ---- -title: Codes retournés -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Codes_retournés -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/Return_Codes ---- -

 

-

Codes retournés

-

Les méthodes décrites dans ce document peuvent retournés tous les codes d'erreur ci-dessous. Dans Mozilla/SeaMonkey, ces constantes sont définies comme des composants de l'objet xpinstall (anciennement l'objet SoftwareUpdate dans Netscape Communicator 4.5).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NomCodeExplication
SUCCESS0Succès.
REBOOT_NEEDED999Les fichiers ont été installés mais un ou plusieurs composants étaient en cours d'utilisation. Redémarrez l'application et votre ordinateur pour compléter l'installation. Sous Windows NT, vous ne devriez avoir besoin que de relancer l'application tant que vous n'avez pas modifié les fichiers système.
BAD_PACKAGE_NAME-200Un problème est survenu avec le nom de paquetage fourni à initInstall.
UNEXPECTED_ERROR-201Une erreur inconnue est survenue.
ACCESS_DENIED-202L'utilisateur (ou le système d'exploitation) ne possède pas les droits suffisant à l'installation.
TOO_MANY_CERTIFICATES-203Le script d'installation est signé par plus d'un certificat.
NO_INSTALL_SCRIPT-204Le script d'installation n'est pas signé.
NO_CERTIFICATE-205Le fichier extrait n'est pas signé ou le fichier (et donc son certificat) est introuvable.
NO_MATCHING_CERTIFICATE-206Le fichier extrait n'est pas signé avec le même certificat que celui utilisé pour signer le script d'installation.
CANT_READ_ARCHIVE-207Le paquetage XPI ne peut pas être lu.
INVALID_ARGUMENTS-208Les paramètres fournis à la fonction sont incorrects.
ILLEGAL_RELATIVE_PATH-209Chemin d'accès relatif illégal.
USER_CANCELLED-210L'utilisateur a annulé l'installation.
INSTALL_NOT_STARTED-211Il s'est produit un problème avec les paramètres fournis à initInstall, ou initInstall n'a pas été appelé en premier.
SILENT_MODE_DENIED-212Les droit pour une installation silencieuse ne sont pas accordés.
NO_SUCH_COMPONENT-213Le composant spécifié n'existe pas dans la - - Client Version Registry - .
DOES_NOT_EXIST-214Échec de la suppression. Le fichier spécifié n'existe pas.
READ_ONLY-215Échec de la suppression. Le fichier spécifié est en lecture seule.
IS_DIRECTORY-216Échec de la suppression. Le fichier spécifié est un répertoire.
NETWORK_FILE_IS_IN_USE-217Échec de la suppression. Le fichier spécifié est en cours d'utilisation.
APPLE_SINGLE_ERR-218Une erreur est survenue lors de la décompression d'un fichier au format AppleSingle.
INVALID_PATH_ERR-219Le chemin d'accès fourni à getFolder n'existe pas.
PATCH_BAD_DIFF-220Une erreur est survenue dans GDIFF.
PATCH_BAD_CHECKSUM_TARGET-221La somme de contrôle du fichier source ne correspond pas à celle indiquée dans le fichier XPI.
PATCH_BAD_CHECKSUM_RESULT-222La somme de contrôle du patch n'a pu être calculée.
UNINSTALL_FAILED-223Une erreur s'est produite durant la désinstallation d'un paquetage.
PACKAGE_FOLDER_NOT_SET-224Le répertoire d'installation n'est pas défini dans le script d'installation.
EXTRACTION_FAILED-225L'extraction du fichier XPI a échoué.
FILENAME_ALREADY_USED-226Un fichier portant ce nom existe déjà dans l'installation
INSTALL_CANCELLED-227L'installation est abandonnée.
DOWNLOAD_ERROR-228Problème lors du téléchargement.
SCRIPT_ERROR-229Erreur dans le script.
ALREADY_EXISTS-230Un fichier existe déjà localement.
IS_FILE-231Un fichier a été trouvé là où un répertoire cible était attendu.
SOURCE_DOES_NOT_EXIST-232Le fichier/répertoire source n'a pas été trouvé.
SOURCE_IS_DIRECTORY-233Un répertoire a été trouvé là où un fichier source était attendu.
SOURCE_IS_FILE-234Un fichier a été trouvé là où un répertoire source était attendu.
INSUFFICIENT_DISK_SPACE-235Espace disque insuffisant pour l'installation.
FILENAME_TOO_LONG-236 
UNABLE_TO_LOCATE_LIB_FUNCTION-237 
UNABLE_TO_LOAD_LIBRARY-238 
CHROME_REGISTRY_ERROR-239 
MALFORMED_INSTALL-240 
KEY_ACCESS_DENIED-241Accès refusé à la clef de registre
KEY_DOES_NOT_EXIST-242La clef de registre n'existe pas
VALUE_DOES_NOT_EXIST-243La valeur de registre n'existe pas
INVALID_SIGNATURE-260Signature du XPI invalide
OUT_OF_MEMORY-299Mémoire insuffisante pour cette opération.
GESTALT_UNKNOWN_ERROR-5550 
GESTALT_INVALID_ARGUMENT-5551 
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Return_Codes" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.macalias/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.macalias/index.html" deleted file mode 100644 index d114a737d6..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.macalias/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: File.macAlias -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/File.macAlias -translation_of: Archive/Mozilla/XPInstall/Reference/Examples/File.macAlias ---- -

 

-

File.macAlias

-

Dans cet exemple, on crée un alias mac pour le logiciel (AppleCD Audio Player) installé en local.

-
xpiSrc = "Miscellaneous Program";
-var vi = "1.1.1.1";
-initInstall(
-  "Macintosh Alias",
-  "misc",
-  vi,
-  0);
-f = getFolder("Program");
-g = getFolder("Mac Desktop");
-addFile(
-  "filemacalias",
-  "2.2.2.2",
-  xpiSrc,
-  f,
-  xpiSrc,
-  true);
-err = File.macAlias(f, xpiSrc, g, xpiSrc + " alias");
-logComment("File.macAlias returns: " + err);
-if (0 == getLastError())
-   performInstall();
-else
-   cancelInstall();
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Examples/File.macAlias" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.windowsshortcut/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.windowsshortcut/index.html" deleted file mode 100644 index b3877c949f..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/file.windowsshortcut/index.html" +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: File.windowsShortcut -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/File.windowsShortcut -translation_of: Archive/Mozilla/XPInstall/Reference/Examples/File.windowsShortcut ---- -

 

-

File.windowsShortcut

-

Dans cet exemple, la méthode windowsShortcut est utilisée pour ajouter un raccourci dans le répertoire - - Program - ( - - Program - est un mot clef pour désigner le répertoire d'installation du programme, par exemple, C:\Program Files\Netscape\Netscape 6\" sous Microsoft Windows) au logiciel Windows (misc.exe) installé dans le répertoire - - Windows - .

-
var xpiSrc = "misc.exe";
-var vi = "1.1.1.1";
-initInstall(
-  "Windows Shortcut",
-  "test",
-  vi,
-  0);
-f = getFolder("Windows");
-g = getFolder("Temporary");
-addFile(
-  "miscshortcut",
-  "2.2.2.2",
-  xpiSrc,
-  f,
-  xpiSrc,
-  true);
-target = getFolder(f, xpiSrc);
-shortcutpath = getFolder("Program");
-err = File.windowsShortcut(
-  target,
-  shortcutpath,
-  "misc shortcut",
-  g,
-  "",
-  target,
-  0);
-logComment("file.windowsShortcut returns: " + err);
-if (0 == getLastError())
-  performInstall();
-else
-  cancelInstall();
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Examples/File.windowsShortcut" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/index.html" deleted file mode 100644 index b379807ff9..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/index.html" +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Exemples -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples -translation_of: Archive/Mozilla/XPInstall/Reference/Examples ---- -

{{wiki.localize('System.API.page-generated-for-subpage')}}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.adddirectory/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.adddirectory/index.html" deleted file mode 100644 index 9c7ed53d4b..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.adddirectory/index.html" +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install.addDirectory -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/Install.addDirectory -translation_of: Archive/Mozilla/XPInstall/Reference/Examples/Install.addDirectory ---- -

 

-

Install.addDirectory

-

La méthode addDirectory de l'objet Install met en file d'attente un répertoire entier pour qu'il soit installé après l'appel de la méthode performInstall.

-
var vi = "10.10.10.10";
-var xpiSrc = "adddir1";
-initInstall("addFileNoVers1", "adddir_1", vi, 1);
-f = getFolder("Program");
-setPackageFolder(f);
-err = addDirectory(xpiSrc);
-logComment("the error = " + err);
-if (0 == getLastError())
-   performInstall();
-else
-   cancelInstall();
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Examples/Install.addDirectory" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.addfile/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.addfile/index.html" deleted file mode 100644 index 33f1e12e8a..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/install.addfile/index.html" +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Install.addFile -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/Install.addFile -translation_of: Archive/Mozilla/XPInstall/Reference/Examples/Install.addFile ---- -

 

-

Install.addFile

-

La méthode addFile de l'objet Install est la manière standard de mettre les fichiers en file d'attente pour l'installation.

-
var xpiSrc = "file.txt";
-initInstall(
-  "Ajout d'un fihcier",
-  "testFile",
-  "1.0.1.7",
-  1);
-f = getFolder("Program");
-setPackageFolder(f);
-addFile(xpiSrc);
-if (0 == getLastError())
-   performInstall();
-else
-   cancelInstall();
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Examples/Install.addFile" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.installchrome/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.installchrome/index.html" deleted file mode 100644 index 108b77fb85..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.installchrome/index.html" +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: InstallTrigger.installChrome -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/InstallTrigger.installChrome -translation_of: Archive/Mozilla/XPInstall/Reference/Examples/InstallTrigger.installChrome ---- -

 

-

InstallTrigger.installChrome

-

Les scripts de déclenchement sont généralement invoqués par des événements JavaScript sur des hyperliens. Lorsqu'un utilisateur clique sur le lien « Installer le thème "New Blue" » dans l'exemple ci-dessous, XPInstall télécharge, enregistre et installe le thème contenu dans le fichier <tt>newblue.xpi</tt> dans le répertoire de profil de l'utilisateur.

-
<a href="#"
-  onclick="InstallTrigger.installChrome(
-     InstallTrigger.SKIN,
-     'http://wildskins/newblue.xpi',
-     'newblue/1.0');">
-  Installer le thème "New Blue"</a>
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Examples/InstallTrigger.installChrome" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.startsoftwareupdate/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.startsoftwareupdate/index.html" deleted file mode 100644 index c70d1b55b1..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/installtrigger.startsoftwareupdate/index.html" +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: InstallTrigger.startSoftwareUpdate -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/InstallTrigger.startSoftwareUpdate -translation_of: >- - Archive/Mozilla/XPInstall/Reference/Examples/InstallTrigger.startSoftwareUpdate ---- -

 

-

InstallTrigger.startSoftwareUpdate

-

Ceci est un exemple très simple de la méthode principale de l'objet InstallTrigger, startSoftwareUpdate, qui prend une chaîne représentant le chemin vers le fichier <tt>xpi</tt> et l'installe sur la machine locale.

-
function triggerURL(url)
-{
-   InstallTrigger.startSoftwareUpdtate(url);
-}
-// Récupère l'URL du fichier .xpi depuis un formulaire
-// ou une entrée de champ texte. Puis exécute :
-... onclick="triggerURL(this.form.url.value);
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Examples/InstallTrigger.startSoftwareUpdate" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/scripts_de_d\303\251clenchement_et_scripts_d'installation/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/scripts_de_d\303\251clenchement_et_scripts_d'installation/index.html" deleted file mode 100644 index c46ff4a9ad..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/scripts_de_d\303\251clenchement_et_scripts_d'installation/index.html" +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Scripts de déclenchement et scripts d'installation -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/Scripts_de_déclenchement_et_scripts_d'installation -translation_of: >- - Archive/Mozilla/XPInstall/Reference/Examples/Trigger_Scripts_and_Install_Scripts ---- -

 

-

Scripts de déclenchement et scripts d'installation

-

Les scripts de déclenchement sont de simples installations qui peuvent être initialisées depuis des gestionnaires d'événements ou tout autre code JavaScript présent dans une page Web.

-

Ils utilisent les méthodes de l'objet InstallTrigger pour comparer les versions des logiciels, installer le chrome et exécuter des installations simples de logiciels.

-

Les scripts d'installation utilisent les méthodes des objets Install, File et InstallVersion ainsi que des méthodes d'objets spécifiques à chaque plate-forme pour initialiser, mettre en file d'attente, gérer et exécuter l'installation d'un ou de plusieurs paquetages de logiciels.

-

Ces scripts d'installation sont généralement localisés au plus haut niveau de l'arborescence des archives <tt>xpi</tt> dans lesquelles les installations sont stockées. Un script de déclenchement peut déclencher le téléchargement d'un <tt>xpi</tt>, qui utisera son propre script <tt>install.js</tt> pour gérer l'installation complète.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Examples/Trigger_Scripts_and_Install_Scripts" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/windows_install/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/windows_install/index.html" deleted file mode 100644 index 090866a4c1..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/exemples/windows_install/index.html" +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Windows Install -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Exemples/Windows_Install -translation_of: Archive/Mozilla/XPInstall/Reference/Examples/Windows_Install ---- -

Exemple d'installation Windows

-

Cet exemple décrit l'installation d'un fichier xpi dans lequel sont contenues les informations sur le profil de l'utilisateur.

-

La vérification de l'espace disque, l'édition du registre Windows, l'écriture du journal d'installation et la vérification des erreurs se font avant l'appel des méthodes performInstall ou cancelInstall.

-
// Cette fonction vérifie l'espace disque en kio
-function verifyDiskSpace(dirPath, spaceRequired)
-{
-  var spaceAvailable;
-  // Récupère l'espace disque pour le chemin donné
-  spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
-  // Convertit l'espace disque disponible en kio
-  spaceAvailable = parseInt(spaceAvailable / 1024);
-  // Fait la vérification
-  if(spaceAvailable < spaceRequired)
-  {
-    logComment("Espace disque insuffisant : " + dirPath);
-    logComment("  requis : " + spaceRequired + " kio");
-    logComment("  disponible : " + spaceAvailable + " kio");
-    return(false);
-  }
-  return(true);
-}
-
-function updateWinReg4Ren8dot3()
-{
-  var fProgram      = getFolder("Program");
-  var fTemp         = getFolder("Temporary");
-  // Notes :
-  // On ne peut pas utiliser un double backslash avant une sous-clef
-  // car Windows les met déjà.
-  // Les sous-clefs doivent exister avant d'y mettre une valeur.
-  var subkey;  // Le nom de la sous-clef dans laquelle vous voulez intervenir
-  var valname; // Le nom de la paire nom_de_valeur/valeur à modifier
-  var value;   // La nouvelle valeur chaîne
-  var winreg = getWinRegistry() ;
-  if(winreg != null)
-  {
-    // Ici, nous récupérons la version courante.
-    winreg.setRootKey(winreg.HKEY_CURRENT_USER) ;// CURRENT_USER
-    subkey  =
-      "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" ;
-    winreg.createKey(subkey,"");
-    valname = "ren8dot3";
-    value = fProgram + "ren8dot3.exe " + fTemp + "ren8dot3.ini";
-    err     = winreg.setValueString(subkey, valname, value);
-  }
-}
-
-function prepareRen8dot3(listLongFilePaths)
-{
-  var fTemp        = getFolder("Temporary");
-  var fProgram     = getFolder("Program");
-  var fRen8dot3Ini = getWinProfile(fTemp, "ren8dot3.ini");
-  var bIniCreated  = false;
-  var fLongFilePath;
-  var sShortFilePath;
-  if(fRen8dot3Ini != null)
-  {
-    for(i = 0; i < listLongFilePaths.length; i++)
-    {
-      fLongFilePath = getFolder(fProgram, listLongFilePaths[i]);
-      sShortFilePath  = File.windowsGetShortName(fLongFilePath);
-      if(sShortFilePath)
-      {
-        fRen8dot3Ini.writeString("rename",
-                sShortFilePath, fLongFilePath);
-        bIniCreated = true;
-      }
-    }
-    if(bIniCreated)
-      updateWinReg4Ren8dot3() ;
-  }
-  return(0);
-}
-
-// main
-var srDest;
-var err;
-var fProgram;
-srDest = 449;
-err    = initInstall(prettyName, regName, "6.0.0.2000110801");
-logComment("initInstall: " + err);
-fProgram = getFolder("Program");
-logComment("fProgram: " + fProgram);
-if(verifyDiskSpace(fProgram, srDest))
-{
-  setPackageFolder(fProgram);
-  err = addDirectory("",
-    "6.0.0.2000110801",
-    "bin", // Dans le jar, nom du répertoire à extraire
-    fProgram, // Où mettre le fichier (valeur retournée depuis GetFolder)
-     "", // Noms des sous-répertoires à créer, relativement à fProgram
-    true); // Force Flag
-  logComment("addDirectory() returned: " + err);
-  // Vérifie la valeur retournée
-  if(err == SUCCESS)
-  {
-    err = performInstall();
-    logComment("performInstall() returned: " + err);
-  }
-  else
-    cancelInstall(err);
-}
-else
-  cancelInstall(INSUFFICIENT_DISK_SPACE);
-// Fin de main
-
diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/index.html" deleted file mode 100644 index cc23e6ee7d..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/index.html" +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Référence de l'API XPInstall -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall -tags: - - Référence_de_l'API_XPInstall - - XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference ---- -

Cette page fait parti de la Référence de l'API XPInstall. Notez que si vous être un développeur d'extension, de thème, ou de plug-in, vous n'avez plus besoin d'une grande partie de cette API. Plus particulièrement, le script install.js utilisé pour l'installation et l'enregistrement du contenu des XPI est déprécié en faveur du nouveau manifeste déclaratif install.rdf et du nouveau schéma de paquetage.

- -

Objets

- -

Install

- -
-
Propriétés
-
Méthodes
-
- -
-
-
-
addDirectory
-
addFile
-
alert
-
cancelInstall
-
confirm
-
deleteRegisteredFile
-
execute
-
gestalt
-
getComponentFolder
-
getFolder
-
getLastError
-
getWinProfile
-
getWinRegistry
-
initInstall
-
loadResources
-
logComment
-
patch
-
performInstall
-
refreshPlugins
-
registerChrome
-
resetError
-
setPackageFolder
-
-
-
- -

InstallTrigger

- -
-
Aucune propriété
-
Méthodes
-
- -
-
-
-
compareVersion
-
enabled
-
getVersion
-
install
-
installChrome
-
startSoftwareUpdate
-
-
-
- -

InstallVersion

- -
-
Propriétés
-
Méthodes
-
- -
-
-
-
compareTo
-
init
-
toString
-
-
-
- -

File

- -
-
Aucune propriété
-
Méthodes
-
- -
-
-
-
copy
-
dirCreate
-
dirGetParent
-
dirRemove
-
dirRename
-
diskSpaceAvailable
-
execute
-
exists
-
isDirectory
-
isFile
-
macAlias
-
modDate
-
modDateChanged
-
move
-
remove
-
rename
-
size
-
windowsGetShortName
-
windowsRegisterServer
-
windowsShortcut
-
-
-
- -

WinProfile

- -
-
Aucune propriété
-
Méthodes
-
- -
-
-
-
getString
-
writeString
-
-
-
- -

WinReg

- -
-
Aucune propriété
-
Méthodes
-
- -
-
-
-
createKey
-
deleteKey
-
deleteValue
-
enumKeys
-
enumValueNames
-
getValue
-
getValueNumber
-
getValueString
-
isKeyWritable
-
keyExists
-
setRootKey
-
setValue
-
setValueNumber
-
setValueString
-
valueExists
-
-
-
- -
-
Constructeur WinRegValue
-
- -

Autres informations

- -

Codes retournés

- -
-
Voir la liste complète
-
- -

Exemples

- -
-
Scripts de déclenchement et scripts d'installation
-
- -
Extraits de code
- -
-
File.macAlias
-
File.windowsShortcut
-
Install.addDirectory
-
Install.addFile
-
InstallTrigger.installChrome
-
InstallTrigger.startSoftwareUpdate
-
Windows Install
-
diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/index.html" deleted file mode 100644 index fdfa76bd31..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Objet File -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object ---- -

 

-

File

-

L'objet File s'utilise pour manipuler des fichiers et des répertoires locaux lors d'un processus d'installation.

-

Présentation

-

L'objet File a des méthodes servant à l'analyse du système de fichiers et à sa préparation (dans le cas de création de répertoires, de raccourcis, de comparaison de versions ou de suppression de fichiers) pour les logiciels nouvellement installés. L'objet File fonctionne en conjonction avec l'objet Install.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/copy/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/copy/index.html" deleted file mode 100644 index 18343a62aa..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/copy/index.html" +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: copy -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/copy -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/copy ---- -

 

-

copy

-

Fait une copie mise en file d'attente du fichier spécifié.

-

Méthode de

-

Objet File

-

Syntaxe

-
int copy( FileSpecObject source, FileSpecObject dest )
-
-

Paramètres

-

La méthode copy a les paramètres suivants :

-
-
- source
-
- Un objet - - FileSpecObject - représentant le fichier à copier.
-
- dest
-
- Un objet - - FileSpecObject - représentant la destination.
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La destination peut être un nom de répertoire ou un nom de fichier. Si la destination n'existe pas, un nouveau fichier sera créé.

-

Inerwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/copy" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dircreate/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dircreate/index.html" deleted file mode 100644 index 84f235f369..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dircreate/index.html" +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: dirCreate -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/dirCreate -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/dirCreate ---- -

 

-

dirCreate

-

Crée un nouveau répertoire.

-

Méthode de

-

Objet File

-

Syntaxe

-
int dirCreate( FileSpecObject dirToCreate );
-
-

Paramètres

-

La méthode dirCreate a le paramètre suivant:

-
-
- dirToCreate
-
- Un - - FileSpecObject - représentant le chemin du répertoire à créer.
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

Le paramètre d'entrée est un FileSpecObject précédemment créé avec la méthode getFolder de l'objet Install. L'exemple suivant montre l'utilisation de la méthode dirCreate. On remarque que la méthode getFolder ne nécessite pas que le dossier ou répertoire spécifié existe pour que la référence objet soit valide.

-

Exemple

-
f = getFolder("Program", "myNewDirectory");
-err = File.dirCreate(f);
-
-


- Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/dirCreate" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirgetparent/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirgetparent/index.html" deleted file mode 100644 index eadcae9762..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirgetparent/index.html" +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: dirGetParent -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/dirGetParent -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/dirGetParent ---- -

 

-

dirGetParent

-

Retourne un objet représentant le répertoire parent du répertoire ou du fichier courant.

-

Méthode de

-

Objet File

-

Syntaxe

-
FileSpecObject dirGetParent( FileSpecObject fichierOuRépertoire );
-
-

Paramètres

-

La méthode dirGetParent a le paramètre suivant :

-
-
- fichierOuRépertoire
-
- Un - - FileSpecObject - représentant le chemin du fichier ou du répertoire dont il faut retourner le parent.
-
-

Retours

-

Un FileSpecObject si réussite ; null dans le cas contraire.

-

Exemple

-
f = getFolder("Program", "myNewDirectory");
-err = File.dirCreate(f);
-err = File.getParent(f) // retourne "Program"
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/dirGetParent" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirremove/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirremove/index.html" deleted file mode 100644 index d6030a3719..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirremove/index.html" +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: dirRemove -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/dirRemove -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/dirRemove ---- -

 

-

dirRemove

-

Supprime un répertoire.

-

Méthode de

-

Objet File

-

Syntaxe

-
int dirRemove( FileSpecObject dirToRemove [, booléen recursive] );
-
-

Paramètres

-

La méthode dirRemove a les paramètres suivants :

-
-
- dirToRemove
-
- Un objet - - FileSpecObject - représentant le répertoire à supprimer.
-
- recursive
-
- Une valeur booléenne optionnelle indiquant si l'opération de suppression doit être exécutée récursivement (1) ou non (0).
-
-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/dirRemove" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirrename/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirrename/index.html" deleted file mode 100644 index c86cd38cb4..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/dirrename/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: dirRename -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/dirRename -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/dirRename ---- -

 

-

dirRename

-

Renomme un répertoire.

-

Méthode de

-

Objet File

-

Syntaxe

-
int dirRename( FileSpecObject répertoire, Chaîne nouveauNom );
-
-

Paramètres

-

La méthode dirRename a les paramètres suivants :

-
-
- répertoire
-
- Un objet - - FileSpecObject - représentant le répertoire à renommer.
-
- nouveauNom
-
- Le nouveau nom terminal (ou nœud terminal) du répertoire.
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/dirRename" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/diskspaceavailable/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/diskspaceavailable/index.html" deleted file mode 100644 index 62847a38d4..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/diskspaceavailable/index.html" +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: diskSpaceAvailable -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/diskSpaceAvailable -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/diskSpaceAvailable ---- -

 

-

diskSpaceAvailable

-

Retourne la taille de l'espace disque disponible, en octets, sur le disque local.

-

Méthode de

-

Objet File

-

Syntaxe

-
double diskSpaceAvailable ( String NativeFolderPath );
-
-

Paramètres

-

La méthode diskSpaceAvailable a le paramètre suivant :

-
-
- NativeFolderPath
-
- Une chaîne représentant le chemin de la partition, un fichier ou un répertoire sur la partition, dont on veut connaître l'espace disponible.
-
-

Retour

-

Un nombre à double précision représentant la taille de l'espace disponible, en octets, du disque vérifié.

-

Description

-

Cette méthode est utilisée pour s'assurer qu'il y a assez d'espace disque pour l'extraction et l'installation des fichiers (voir l'exemple ci-dessous).

-

On peut utiliser une chaîne représentant n'importe quel fichier sur le disque à vérifier et XPInstall résoudra de lui-même la référence à la partition.

-

Exemple

-
var diskAmtNeeded = 10000;
-f = getFolder("Program");
-diskSpace = File.diskSpaceAvailable(f);
-g = getFolder(f, "myfile.txt");
-if (diskSpace > diskAmtNeeded)
-{
-  err = addFile(..., ... g, ...);
-  if (err == 0)
-     performInstall();
-  else
-    cancelInstall();
-}
-else
-{
-  alert("Espace disque insuffisant. Aucune installation);
-  cancelInstall();
-}
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/diskSpaceAvailable" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/execute/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/execute/index.html" deleted file mode 100644 index fb929d6424..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/execute/index.html" +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: execute -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/execute -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/execute ---- -

 

-

execute

-

Met en attente l'exécution d'un fichier local.

-

Méthode de

-

Objet File

-

Syntaxe

-
int execute ( FileSpecObject executableFile, [Chaîne aParameters] );
-
-

Paramètres

-

La méthode execute a les paramètres suivants :

-
-
- executableFile
-
- Un objet - - FileSpecObject - représentant le fichier local, déjà présent sur le disque, à exécuter. Les noms de fichier sont sensibles à la casse.
-
- aParameters
-
- Une chaîne optionnelle passée à l'exécutable (ignoré sous Mac OS).
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

Le fichier spécifié ne sera pas exécuté jusqu'à l'appel de la méthode performInstall. Pour plus d'informations sur la mise en attente des commandes pendant le processus d'installation, voir performInstall.

-

Exemple

-
f = getFolder("Program", "myTextEditor.exe");
-err = File.execute(f, "myfile.txt");
-// indique que 'myfile.txt' sera
-// ouvert dans l'éditeur
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/execute" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/exists/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/exists/index.html" deleted file mode 100644 index 35fb3b658f..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/exists/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: exists -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/exists -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/exists ---- -

 

-

exists

-

Retourne un valeur indiquant si le fichier ou le répertoire spécifié existe.

-

Méthode de

-

Objet File

-

Syntaxe

-
boolean exists( FileSpecObject cible )
-
-

Paramètres

-

La méthode exists a le paramètre suivant :

-
-
- cible
-
- Un - - FileSpecObject - représentant le fichier ou le répertoire dont on veut tester l'existence.
-
-

Retours

-

Une valeur booléenne indiquant si le fichier ou le répertoire existe ou pas.

-

Exemple

-
f = getFolder( "Program", "sample.txt" );
-if ( File.exists(f) ) // fait quelque chose avec le fichier
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/exists" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/index.html" deleted file mode 100644 index 7476871a02..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/index.html" +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Méthodes -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods ---- -

Méthodes

-
-
- dirCreate
-
- Crée un nouveau répertoire.
-
- dirGetParent
-
- Retourne un objet représentant le répertoire parent.
-
- dirRemove
-
- Supprime un répertoire.
-
- dirRename
-
- Renomme le répertoire spécifié.
-
- copy
-
- Copie le fichier spécifié.
-
- diskSpaceAvailable
-
- Retourne l'espace disque disponible en octets.
-
- exists
-
- Retourne une valeur booléenne indiquant l'existence ou non du fichier spécifié.
-
- execute
-
- Met un fichier en file d'attente pour son exécution lors du processus d'installation.
-
- isFile
-
- Retourne une valeur booléenne indiquant si un objet est un fichier.
-
- modDate
-
- Retourne un nombre représentant la dernière date de modification du fichier spécifié.
-
- modDateChanged
-
- Spécifie si la dernière modification d'un fichier est antérieure à la date spécifiée.
-
- move
-
- Déplace un fichier d'un répertoire vers un autre.
-
- remove
-
- Supprime un fichier.
-
- rename
-
- Renomme un fichier.
-
- size
-
- Retourne la taille du fichier en octets.
-
- windowsShortcut
-
- Crée un raccourci Windows pour un fichier.
-
- macAlias
-
- Crée un alias Macintosh pour un fichier.
-
- windowsGetShortName
-
- Retourne le nom Windows du chemin.
-
- windowsRegisterServer
-
- Enregistre les DLL dans le registre.
-
diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isdirectory/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isdirectory/index.html" deleted file mode 100644 index ad2c6f5d29..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isdirectory/index.html" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: isDirectory -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/isDirectory -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/isDirectory ---- -

 

-

isDirectory

-

Retourne une valeur booléenne indiquant si l'objet FileSpecObject spécifié est un répertoire ou non.

-

Méthode de

-

Objet File

-

Syntaxe

-
boolean isDirectory ( FileSpecObject NativeFolderPath );
-
-

Paramètres

-

La méthode isDirectory a le paramètre suivant :

-
-
- NativeFolderPath
-
- Un objet FileSpecObject représentant le répertoire questionné.
-
-

Retours

-

Une valeur booléenne indiquant si l'objet FileSpecObject spécifié est un répertoire ou non.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/isDirectory" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isfile/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isfile/index.html" deleted file mode 100644 index 19aca8da63..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/isfile/index.html" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: isFile -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/isFile -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/isFile ---- -

 

-

isFile

-

Retourne une valeur booléenne indiquant si le FileSpecObject donné est un fichier ou non.

-

Méthode de

-

Objet File

-

Syntaxe

-
boolean isFile (FileSpecObject NativeFolderPath);
-
-

Paramètres

-

La méthode isFile a le paramètre suivant :

-
-
- NativeFolderPath
-
- Un FileSpecObject représentant l'objet fichier demandé.
-
-

Retours

-

Une valeur booléenne indiquant si FileSpecObject est un fichier ou pas.

-

Exemple

-
f = getFolder( "Program", "sample.txt" );
-if ( File.isFile(f) ) // the object represents a file
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/isFile" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/macalias/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/macalias/index.html" deleted file mode 100644 index 1011ebfbe9..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/macalias/index.html" +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: macAlias -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/macAlias -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/macAlias ---- -

 

-

macAlias

-

Méthode de

-

Objet File

-

Syntaxe

-
int macAlias(
-   FileSpecObject destDir,
-   Chaîne fileName,
-   FileSpecObject aliasDir,
-   Chaîne aliasName );
-
-

Paramètres

-

La méthode macAlias a les paramètres suivants :

-
-
- destDir
-
- Un FileSpecObject représentant le répertoire dans lequel le fichier programme sera installé.
-
- fileName
-
- Une chaîne représentant le nom du fichier à installer.
-
- aliasDir
-
- Un FileSpecObject représentant le répertoire dans lequel le fichier alias sera installé (par exemple, - - Mac Desktop - ).
-
- aliasName
-
- Une chaîne représentant le nom de l'alias lui-même.
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Exemple

-

Voir File.macAlias dans les exemples de scripts.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/macAlias" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddate/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddate/index.html" deleted file mode 100644 index c333050427..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddate/index.html" +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: modDate -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/modDate -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/modDate ---- -

 

-

modDate

-

Retourne la dernière date de modification du fichier ou du répertoire spécifié.

-

Méthode de

-

Objet File

-

Syntaxe

-
double modDate ( FileSpecObject NativeFolderPath );
-
-

Paramètres

-

La méthode modDate a le paramètre suivant :

-
-
- NativeFolderPath
-
- Un FileSpecObject représentant le fichier demandé.
-
-

Retour

-

Un nombre à double précision représentant la date de dernière modification du fichier.

-

Exemple

-
f = getFolder("Program");
-fileSource = getFolder(f, "myfile.txt");
-err = File.modDate(fileSource);
-
-

Voir modDateChanged pour un exemple de comparaison des dates de deux fichiers.

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/modDate" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddatechanged/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddatechanged/index.html" deleted file mode 100644 index 87bc66f2ba..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/moddatechanged/index.html" +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: modDateChanged -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/modDateChanged -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/modDateChanged ---- -

 

-

modDateChanged

-

Retourne si le fichier a été modifié depuis une certaine date.

-

Méthode de

-

Objet File

-

Syntaxe

-
boolean modDateChanged (FileSpecObject aSourceFolder, Number anOldDate);
-
-

Paramètres

-

La méthode modDateChanged a les paramètres suivants :

-
-
- aSourceFolder
-
- Un objet - - FileSpecObject - représentant le fichier à interroger.
-
- anOldDate
-
- Un nombre à double précision représentant la date.
-
-

Retour

-

Une valeur booléenne indiquant si le fichier a été modifié ou non depuis la date spécifiée.

-

Description

-

Le plus souvent, la date passée comme second paramètre de la méthode modDateChanged est la valeur retournée par une méthode modDate appliquée à un fichier séparé, comme dans l'exemple ci-dessous, dans lequel on compare les dates de modification des deux fichiers.

-

Exemple

-
fileSource1 = getFolder("Program", "file1.txt");
-fileSource2 = getFolder("Program", "file2.txt");
-err1 = File.modDate(fileSource1);    // retourne la valeur de base
-
-err2 = File.modDateChanged(fileSource1, err1);
-logComment("File.modDateChanged doit retourner 'false' = " + err2);
-// La raison pour laquelle False est attendu, est que
-// nous comparons la valeur de date retournée pour
-// file1.txt avec le fichier réel file1.txt lui-même.
-// Ainsi, il n'y a pas de changement de la valeur de date (time stamp)
-
-err3 = File.modDateChanged(fileSource2, err1);
-logComment("File.modDateChanged doit retourner 'true' = " + err2);
-// La raison pour laquelle True est attendu, est que
-// nous comparons la valeur de date retournée pour
-// file1.txt avec un autre fichier, file2.txt, avec
-// une valeur de date différente.
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/modDateChanged" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/move/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/move/index.html" deleted file mode 100644 index 901530fde2..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/move/index.html" +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: move -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/move -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/move ---- -

 

-

move

-

Déplace un fichier d'un emplacement vers un autre.

-

Méthode de

-

Objet File

-

Syntaxe

-
int move( FileSpecObject source, FileSpecObject dest );
-
-

Paramètres

-

La méthode move a les paramètres suivants :

-
-
- source
-
- Un objet - - FileSpecObject - représentant le fichier source.
-
- dest
-
- Un objet - - FileSpecObject - représentant le répertoire de destination.
-
-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

Il faut créer un objet - - FileSpecObject - pour le répertoire de destination à passer à cette fonction. Si la destination n'existe pas, on suppose qu'elle correspond à un nom de fichier.

-

Exemple

-
source = getFolder("Program", "file.txt");
-dest = getFolder("Chrome");
-err = File.move(source, dest);
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/move" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/remove/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/remove/index.html" deleted file mode 100644 index 0838d0a68d..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/remove/index.html" +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: remove -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/remove -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/remove ---- -

 

-

remove

-

Efface un fichier spécifié.

-

Méthode de

-

Objet File

-

Syntaxe

-
int remove( FileSpecObject file )
-
-

Paramètres

-

La méthode remove a le paramètre suivant :

-
-
- file
-
- Un objet - - FileSpecObject - représentant le fichier à effacer.
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/remove" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/rename/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/rename/index.html" deleted file mode 100644 index f4c9147a62..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/rename/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: rename -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/rename -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/rename ---- -

 

-

rename

-

Renomme le fichier spécifié.

-

Méthode de

-

Objet File

-

Syntaxe

-
int rename( FileSpecObject fichier, Chaîne nouveauNom )
-
-

Paramètres

-

La méthode rename a les paramètres suivants :

-
-
- fichier
-
- Un objet - - FileSpecObject - représentant le fichier à renommer.
-
- nouveauNom
-
- Le nouveau nom terminal (ou nœud terminal) du fichier.
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/rename" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/size/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/size/index.html" deleted file mode 100644 index 752f615dc5..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/size/index.html" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: size -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/size -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/size ---- -

 

-

size

-

Retourne la taille en octets du fichier spécifié.

-

Méthode de

-

Objet File

-

Syntaxe

-
int size (Chaîne NativeFolderPath);
-
-

Paramètres

-

La méthode size a le paramètre suivant :

-
-
- NativeFolderPath
-
- Le chemin complet vers le fichier.
-
-

Retours

-

Un nombre représentant la taille, en octets, du fichier spécifié.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/size" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsgetshortname/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsgetshortname/index.html" deleted file mode 100644 index c81608787b..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsgetshortname/index.html" +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: windowsGetShortName -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/windowsGetShortName -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/windowsGetShortName ---- -

 

-

windowsGetShortName

-

Retourne un chemin conforme à la convention de nommage des fichiers de Windows, version 8.3.

-

Méthode de

-

Objet File

-

Syntaxe

-
string windowsGetShortName( Object localDirSpec )
-
-

Paramètres

-

La méthode windowsRegisterServer a le paramètre suivant :

-
-
- localDirSpec
-
- Un FileSpecObject représentant un répertoire obtenu par les méthodes getComponentFolder ou getFolder.
-
-

Retours

-

Une chaîne avec le nom raccourci windows. Si le chemin est déjà conforme à la convention de nommage 8.3, la valeur retournée est NULL.

-

Exemple

-
fLongFilePath  = getFolder(fProgram, "LongFileName.File");
-sShortFilePath = File.windowsGetShortName(fLongFilePath);
-if(sShortFilePath)
-{
-    // fait quelque chose
-}
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/windowsGetShortName" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsregisterserver/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsregisterserver/index.html" deleted file mode 100644 index 1dc5de1345..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsregisterserver/index.html" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: windowsRegisterServer -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/windowsRegisterServer -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/windowsRegisterServer ---- -

 

-

windowsRegisterServer

-

windowsRegisterServer enregistre, dans la base de registre Windows, les <tt>dll</tt> installées.

-

Méthode de

-

Objet File

-

Syntaxe

-
int windowsRegisterServer( Objet localDirSpec )
-
-

Paramètres

-

La méthode windowsRegisterServer a le paramètre suivant :

-
-
- localDirSpec
-
- Un FileSpecObject représentant un répertoire obtenu par les méthodes getComponentFolder ou getFolder.
-
-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Exemple

-
fileCdTool = getFolder("file:///", fAoD + "cdTool.dll");
-err = File.windowsRegisterServer(fileCdTool);
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/windowsRegisterServer" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsshortcut/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsshortcut/index.html" deleted file mode 100644 index 1d96217e38..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_file/m\303\251thodes/windowsshortcut/index.html" +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: windowsShortcut -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_File/Méthodes/windowsShortcut -translation_of: Archive/Mozilla/XPInstall/Reference/File_Object/Methods/windowsShortcut ---- -

 

-

windowsShortcut

-

Crée un raccourci Windows vers le logiciel installé.

-

Méthode de

-

Objet File

-

Syntaxe

-
int WindowsShortcut(
-  FolderObject aTarget,
-  FolderObject aShortcutPath,
-  String aDescription,
-  FolderObject aWorkingPath,
-  String aParams,
-  FolderObject aIcon,
-  Number aIconId);
-
-

Paramètres

-

La méthode windowsShortcut a les paramètres suivants :

-
-
- aTarget
-
- Un objet - - FileSpecObject - représentant le chemin absolu (nom de fichier inclus) vers le fichier pour lequel on veut créer un raccourci.
-
- aShortcutPath
-
- Un objet - - FileSpecObject - représentant le chemin absolu (nom de fichier exclu) vers l'emplacement où le raccourci sera créé.
-
- aDescription
-
- Chaîne de description du raccourci à utiliser comme nom de raccourci, avec l'extension <tt>.lnk</tt> (ne pas mettre l'extension dans la chaîne).
-
- aWorkingPath
-
- Un objet - - FileSpecObject - représentant le chemin absolu vers le répertoire de travail depuis lequel aTarget sera exécuté.
-
- aParams
-
- Paramètres requis par aTarget.
-
- aIcon
-
- Un objet - - FileSpecObject - représentant le chemin absolu (nom de fichier inclus) vers un fichier contenant l'icône. Le format de fichier peut être <tt>.ico</tt>, <tt>.dll</tt>, <tt>.exe</tt> ou tout autre fichier binaire contenant des icônes.
-
- aIconId
-
- Index de l'icône depuis aIcon à utiliser pour ce raccourci.
-
-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Exemple

-

Voir File.windowsShortcut dans les exemples de scripts.

-

Interwiki Langages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/File_Object/Methods/windowsShortcut" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/index.html" deleted file mode 100644 index c2ef84f7a1..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/index.html" +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Objet Install -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object ---- -

 

- -

Install

- -

Utilisez l'objet Install pour gérer le téléchargement et l'installation d'un logiciel à partir du gestionnaire d'installations XPI.

- -

Présentation

- -

L'objet Install est principalement utilisé dans les scripts d'installation. Dans tous les cas, l'objet Install est implicite, comme l'objet window dans les scripts de pages Web, et n'a pas besoin d'être mis en préfixe des méthodes de l'objet. Les deux lignes suivantes, par exemple, sont équivalentes :

- -
f = getFolder("Program");
-f = Install.getFolder("Program");
-
- -

Un script d'installation est composé d'appels à l'objet Install et possède généralement la structure suivante :

- -
-
Initialisation de l'installation
-
Appelle initInstall avec le nom de l'installation et les informations nécessaires d'enregistrement et de version.
-
Ajout des fichiers pour l'installation
-
Ajoute les fichiers à installer en appelant getFolder pour obtenir les objets fichier et passe ces références objet à addFile autant de fois que nécessaire.
-
Exécution de l'installation
-
Vérifie que les fichiers ont été ajoutés avec succès (c'est-à-dire, en vérifiant les codes d'erreur retournés depuis les principales méthodes de l'installation), et poursuit l'installation si tout est correct :
-
- -
performOrCancel();
-function performOrCancel()
-{
-  if (0 == getLastError())
-     performInstall();
-   else
-     cancelInstall();
-}
-
- -

Pour des exemples de scripts complets, voir des exemples de scripts.

- -

Interwiki Languages Links

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/adddirectory/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/adddirectory/index.html" deleted file mode 100644 index 00aebd4753..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/adddirectory/index.html" +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: addDirectory -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/addDirectory -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/addDirectory ---- -

 

-

addDirectory

-

Extrait un répertoire entier dans un emplacement temporaire.

-

Méthode de

-

Objet Install

-

Syntaxe

-
public int addDirectory (
-   Chaîne xpiSourcePath);
-
-public int addDirectory (
-   Chaîne registryName,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath);
-
-public int addDirectory (
-   Chaîne registryName,
-   Chaîne version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath);
-
-public int addDirectory (
-   Chaîne registryName,
-   Chaîne version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath,
-   Booléen forceUpdate);
-
-public int addDirectory (
-   Chaîne registryName,
-   InstallVersion version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath,
-   Booléen forceUpdate);
-
-

Paramètres

-

La méthode addDirectory a les paramètres suivants :

-
-
- registryName
-
- Le chemin, dans la - - Client Version Registry - , du répertoire racine dans lequel les fichiers seront installés. Ce paramètre peut être un chemin absolu (commençant par un /), tel que /royalairways/RoyalSW/executable ou un chemin relatif (ne commençant pas par un /), tel que executable. Un chemin absolu est utilisé comme spécifié. Un chemin relatif est ajouté au nom d'enregistrement du paquetage comme spécifié par la paramètre package de la méthode initInstall. Ce paramètre peut également être vide, dans ce cas le paramètre xpiSourcePath est utilisé comme un chemin relatif. Remarquez que le chemin de registre n'est pas l'emplacement du logiciel sur l'ordinateur, il s'agit de l'emplacement des informations concernant le logiciel dans la - - Client Version Registry - .
-
- version
-
- Un objet InstallVersion ou une Chaîne de 1 à 4 valeurs entières délimitées par des points, telle que 1.17.1999.1517. Pour les variantes de cette méthode, sans argument de version, la valeur de initInstall sera utilisée.
-
- xpiSourcePath
-
- Une chaîne spécifiant l'emplacement du répertoire dans l'archive <tt>xpi</tt>. Une chaîne vide ("") entraîne la création d'un sous-répertoire dans le registre sans extraire aucun fichier, ce qui peut être utile lors de la mise à jour d'un paquetage contenant des sous-composants, qui peuvent être mis à jour séparément. Lorsque xpiSourcePath est une chaîne vide, registryName ne peut pas être nul.
-
- localDirSpec
-
- Un objet représentant un répertoire. Le fichier est installé dans ce répertoire sur la machine de l'utilisateur. Vous pouvez créer cet objet en passant une chaîne représentant le répertoire à la méthode getFolder.
-
- subdir
-
- Le nom d'un répertoire à ajouter à localDirSpec, en utilisant '/' comme séparateur de chemin sans considération des conventions d'écriture de la plate-forme. Si subdir est absent, null ou "", les noms de fichiers sont ajoutés directement au nom du répertoire spécifié par localDirSpec.
-
- flags
-
- Un champ optionnel, réservé pour un usage futur. Passe 0 comme valeur par défaut.
-
-

Retour

-

Un code d'erreur entier. Pour la liste complète des valeurs possibles, voir Codes retournés. Dans certains cas, addDirectory peut retourner d'autres erreurs.

-

Description

-

La méthode addDirectory met les fichiers du répertoire spécifié dans un emplacement temporaire. Pour déplacer les fichiers et tous les autres sous-composants vers leurs emplacements finaux, appelez la méthode performInstall après avoir ajouté avec succès tous les sous-composants. Voir également les notes à propos des binaires Macintosh dans addFile.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/addDirectory" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/addfile/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/addfile/index.html" deleted file mode 100644 index daf8850363..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/addfile/index.html" +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: addFile -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/addFile -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/addFile ---- -

 

-

addFile

-

Extrait un sous-composant unique dans un répertoire temporaire. Met en file d'attente le sous-composant pour son ajout dans la - - Client Version Registry - et son installation dans le répertoire final.

-

Méthode de

-

Objet Install

-

Syntaxe

-
public int addFile (
-   Chaîne registryName,
-   InstallVersion version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath,
-   Booléen forceUpdate);
-
-public int addFile (
-   Chaîne registryName,
-   Chaîne version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath,
-   Booléen forceUpdate);
-
-public int addFile (
-   Chaîne xpiSourcePath);
-
-public int addFile (
-   Chaîne registryName,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath);
-
-public int addFile (
-   Chaîne registryName,
-   Chaîne version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath);
-
-

Paramètres

-

La méthode addFile a les paramètres suivants :

-
-
- registryName
-
- Le chemin dans la - - Client Version Registry - concernant le fichier. Ce paramètre peut être un chemin absolu (commençant par /), tel que /royalairways/RoyalSW/executable ou un chemin relatif (ne commençant pas par /), tel que executable. Généralement, les chemins absolus ne sont utilisés que pour composants partagés, ou les composants provenant d'autres éditeurs, tel que /Microsoft/shared/msvcrt40.dll. Généralement, les chemins relatifs le sont par rapport au chemin principal spécifié dans la méthode initInstall. Ce paramètre peut également être vide, dans ce cas le paramètre xpiSourcePath est utilisé comme un chemin relatif. Remarquez que le chemin de registre n'est pas l'emplacement du logiciel sur l'ordinateur, il s'agit de l'emplacement des informations concernant le logiciel dans la - - Client Version Registry - .
-
- version
-
- Un objet InstallVersion ou une Chaîne de 1 à 4 valeurs entières délimitées par des points, telle que 1.17.1999.1517. Pour les variantes de cette méthode sans argument de version, la valeur de initInstall sera utilisée.
-
- xpiSourcePath
-
- Une chaîne spécifiant l'emplacement du fichier dans l'archive <tt>xpi</tt>.
-
- localDirSpec
-
- Un objet représentant un répertoire. Le fichier est installé dans ce répertoire sur la machine de l'utilisateur. Vous pouvez créer cet objet en passant une chaîne représentant le répertoire à la méthode getFolder.
-
- relativeLocalPath
-
- Un chemin relatif au paramètre localDirSpec. Le fichier est installé dans ce répertoire sur la machine de l'utilisateur. Vous devez toujours utiliser des barres obliques (/) dans ce chemin, sans considération pour les conventions d'écritures du système d'exploitation. Si ce paramètre n'est pas renseigné ou NULL, xpiSourcePath est utilisé.
-
- flags
-
- Un champ optionnel, réservé pour un usage futur. Passe 0 comme valeur par défaut.
-
-

Retour

-

Un code d'erreur entier. Pour la liste des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode addFile met le fichier dans un répertoire temporaire. Pour le déplacer, ainsi que tous les autres fichiers, vers son emplacement final, appelez la méthode performInstall après avoir ajouté avec succès tous les fichiers.

-
- Note : Si vous installez des fichiers binaires sur un Macintosh, soyez attentif à ce que le format binaire de ces fichiers doit être AppleSingle pour que les informations de ressources soient installées proprement. Certains logiciels de transfert de fichiers convertissent les binaires Apple dans ce format si vous les transférez d'un Macintosh vers une machine Unix/Windows avant de compresser ces fichiers sur la machine de destination.
-

Exemple

-
var xpiSrc = "file.txt";
-initInstall("Ajout d'un fichier",
-   "addFile",
-   "1.0.1.7",
-   1);
-f = getFolder("Program");
-setPackageFolder(f);
-addFile(xpiSrc);
-if (0 == getLastError())
-   performInstall();
-else
-   cancelInstall();</pre>
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/addFile" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/alert/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/alert/index.html" deleted file mode 100644 index dbc61fd1c0..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/alert/index.html" +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: alert -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/alert -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/alert ---- -

 

-

alert

-

La fonction alert affiche une boîte de dialogue modale avec un message représentant l'entrée.

-

Méthode de

-

Objet Install

-

Syntaxe

-
void alert ( chaîne de message );
-
-

Paramètres

-

Bien qu'il soit plus courant d'entrer une chaîne pour afficher une boîte d'alerte, l'unique paramètre d'entrée de alert() peut être une valeur de n'importe quel type de données. Vous pouvez, par exemple, entrer une référence à un objet et voir cet objet affiché comme une chaîne dans la boîte d'alerte.

-

Retours

-

Rien.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/alert" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/cancelinstall/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/cancelinstall/index.html" deleted file mode 100644 index 26b6e38789..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/cancelinstall/index.html" +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: cancelInstall -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/cancelInstall -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/cancelInstall ---- -

 

-

cancelInstall

-

Annule l'installation d'un logiciel, exécute un nettoyage des fichiers temporaires.

-

Méthode de

-

Objet Install

-

Syntaxe

-
void cancelInstall()
-void cancelInstall( int errorCode )
-
-

Paramètres

-

Aucun.

-

Retour

-

Un nombre entier correspondant à un code d'erreur. L'argument optionnel est un code d'erreur qui peut être retourné à la page de déclenchement. Pour la plupart des cas, il est recommandé d'utiliser l'un des codes standards. Mais un script peut, en fait, retourner tout entier valide. Pour une liste des valeurs possibles, et les errorCode personnalisés créés par l'auteur du script d'installation, voir Codes retournés.

-

Exemple

-

Utilisez le code suivant pour annuler ou pour finaliser une installation, basé sur une variable que vous aurez définie précédemment dans votre code :

-
initInstall("Royal Airways TripPlanner","/RoyalAirways/
-TripPlanner","1.0.0.0");
-...
-err = getLastError();
-if (!err)
-   performInstall();
-else
-   cancelInstall(err);
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/cancelInstall" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/confirm/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/confirm/index.html" deleted file mode 100644 index 5f34e55971..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/confirm/index.html" +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: confirm -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/confirm -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/confirm ---- -

 

-

confirm

-

Affiche une boîte de dialogue modale de confirmation.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int confirm( Chaîne aText );
-
-
int confirm( Chaîne aText,
-             Chaîne aDialogTitle,
-             Nombre aButtonFlags,
-             Chaîne aButton0Title,
-             Chaîne aButton1Title,
-             Chaîne aButton2Title,
-             Chaîne aCheckMsg,
-             Objet aCheckState );
-
-

Paramètres

-

Pour la seconde syntaxe, la méthode étendue confirm() est supportée depuis Gecko 1.8. Elle accepte jusqu'à 8 paramètres. Dans les versions précédentes de Gecko seule la première syntaxe était supportée, méthode à un paramètre, qui retournera une erreur pour la forme étendue. Voir les notes à la fin de ce document pour une manière sûre d'implémenter une procédure de secours.

-
-
- aText
-
- La chaîne à afficher dans la boîte de confirmation. Cette chaîne est généralement sous la forme d'un message pour l'utilisateur (par exemple : « Êtes-vous sûr de vouloir effacer le(s) fichier(s) sélectionné(s) ? »).
-
-
-
- aDialogTitle
-
- La chaîne à utiliser comme titre de la boîte de dialogue. La valeur par défaut est - - Confirm - (ou son équivalent localisé).
-
-
-
- aButtonFlags
-
- Un ensemble de - - flags - définissant les boutons devant s'afficher dans la boîte de dialogue. La valeur est calculée en multipliant la position correspondante du bouton avec une constante de titre de bouton pour chaque bouton, puis en ajoutant les résultats et toutes autres options (voir Autre constantes).
-
-
-
- Constantes de position des boutons -
    -
  • BUTTON_POS_0: Le premier bouton logique
  • -
  • BUTTON_POS_1: Le deuxième bouton logique
  • -
  • BUTTON_POS_2: Le troisième bouton logique
  • -
-
-
-
-
- Constantes des titres des boutons -
    -
  • BUTTON_TITLE_OK: Un bouton - - OK -
  • -
  • BUTTON_TITLE_CANCEL: Un bouton - - Annuler -
  • -
  • BUTTON_TITLE_YES: Un bouton - - Oui -
  • -
  • BUTTON_TITLE_NO: Un bouton - - Non -
  • -
  • BUTTON_TITLE_SAVE: Un bouton - - Enregistrer -
  • -
  • BUTTON_TITLE_DONT_SAVE: Un bouton - - Ne pas enregistrer -
  • -
  • BUTTON_TITLE_REVERT: Un bouton - - Précédent -
  • -
  • BUTTON_TITLE_IS_STRING: Titre personnalisé spécifié par le paramètre correspondant aButtonXTitle
  • -
-
-
-
-
- Autres constantes -
    -
  • BUTTON_POS_0_DEFAULT: Définit le bouton 0 comme bouton par défaut. Sauf indication contraire, c'est la valeur par défaut.
  • -
  • BUTTON_POS_1_DEFAULT: Définit le bouton 1 comme bouton par défaut.
  • -
  • BUTTON_POS_2_DEFAULT: Définit le bouton 2 comme bouton par défaut.
  • -
  • BUTTON_DELAY_ENABLE: Spécifie que les boutons ne doivent être actifs que passé un certain délai. Ceci ne s'applique qu'aux bouton 0 et 2, mais pas au bouton 1 (le bouton - - Annuler - ).
  • -
  • STD_OK_CANCEL_BUTTONS: Utilisez cela plutôt que les constantes ci-dessus pour avoir les boutons standard - - OK - et - - Annuler - . Si vous n'utilisez pas aButtonFlags, c'est l'argument par défaut.
  • -
  • STD_YES_NO_BUTTONS: Utilisez cela plutôt que les constantes ci-dessus pour avoir les boutons standard - - Oui - et - - Non - .
  • -
-
-
-
-
- Avertissement : Ne faites aucune hypothèse quant au placement des boutons, l'implémentation de base peut librement décider de la place de chacun des trois boutons. Les exemples suivants montrent le résultat de l'appel de la fonction confirm() avec trois boutons 0='A', 1='B' et 2='C'. -
-
- Firefox sous Linux
-
- Suite Mozilla sous Win32
-
-
-
- Il est donc recommandé de n'utiliser que deux boutons dans la mesure du possible, et de garder à l'esprit que le bouton 1 à la même valeur de retour que « fenêtre fermée » (voir ci-dessous).
-
-
-
- aButton0Title
-
- Titre personnalisé pour le bouton 0.
-
-
-
- aButton1Title
-
- Titre personnalisé pour le bouton 1.
-
-
-
- aButton2Title
-
- Titre personnalisé pour le bouton 2.
-
-
-
- aCheckMsg
-
- Une chaîne à afficher comme étiquette d'une case à cocher.
-
-
-
- aCheckState
-
- Un objet avec une propriété - - valeur - booléenne représentant l'état de la case à cocher : lorsque la boîte de dialogue s'affiche, sa case à cocher sera cochée lorsque la valeur de cet objet est true. Après la sélection d'un bouton (ou la fermeture de la fenêtre) par l'utilisateur, la propriété est mise à jour selon l'état de la case à cocher.
-
-
var check = { value: false };
-var button = confirm("Êtes-vous sûr de vouloir installer FooBar 0.1?",
-                     "Confirmation",
-                     STD_YES_NO_BUTTONS,
-                     null,
-                     null,
-                     null,
-                     "Install FluxCompensator 0.4 as well",
-                     check);
-
-

Retour

-

La valeur retournée est un entier indiquant quel bouton l'utilisateur a sélectionné :

- - - - - - - - - - - - - - - - - - - -
ValeurBouton
0'Annuler' ou bouton 1. Également: l'utilisateur a fermé la fenêtre de dialogue
1'OK' ou bouton 0
2Le troisème bouton
-

Les versions précédentes de l'API XPInstall mentionnaient que la valeur de retour de confirm() était un booléen. C'est incorrect, confirm() retourne toujours un nombre entier (0 ou 1 dans les versions antérieures à pre-Gecko-1.8).

-

Notes

-

La meilleure méthode pour détecter le support des boîtes de dialogue personnalisées est de déterminer l'existence des constantes de bouton. Les autres approches (par exemple, comparaison des buildID) ne sont pas recommandées.

-
if ("BUTTON_POS_0" in Install) {
-  // Utilisation de la méthode étendue de confirm()
-} else {
-  // Utilisation de la méthode classique de confirm()
-}
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/confirm" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/deleteregisteredfile/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/deleteregisteredfile/index.html" deleted file mode 100644 index 91ca177e45..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/deleteregisteredfile/index.html" +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: deleteRegisteredFile -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/deleteRegisteredFile -translation_of: >- - Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/deleteRegisteredFile ---- -

 

-

deleteRegisteredFile

-

(Netscape 6 et Mozilla ne supportent pas cette méthode)

-

Efface le fichier spécifié et supprime son entrée dans la - - Client Version Registry - .

-

Méthode de

-

Objet Install

-

Syntaxe

-
int deleteRegisteredFile
-   (Chaîne registryName);
-
-

Paramètres

-

La méthode deleteRegisteredFile a la paramètre suivant :

-
-
- registryName
-
- Le chemin dans la - - Client Version Registry - du fichier à effacer.
-
-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode deleteRegisteredFile efface le fichier spécifié et supprime son entrée dans la - - Client Version Registry - . Si le fichier est en cours d'utilisation, le nom du fichier qui doit être effacé est enregistré et Netscape 6 essaiera de l'effacer à chaque lancement jusqu'à ce qu'il arrive à l'effacer. Cette méthode est utilisée pour effacer des fichiers qui ne peuvent pas être supprimés par la méthode uninstall, pour supprimer des fichiers qui ne sont plus utilisés ou dont le nom a changé.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/deleteRegisteredFile" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/execute/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/execute/index.html" deleted file mode 100644 index c1053c5399..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/execute/index.html" +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: execute -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/execute -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/execute ---- -

 

-

execute

-

Lance un fichier dans l'archive d'installation.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int execute (
-   Chaîne xpiSourcePath [, Booléen blocking]);
-
-
int execute (
-   Chaîne xpiSourcePath,
-   Chaîne args [, Booléen blocking]);
-
-

Paramètres

-

La méthode execute a les paramètres suivants :

-
-
- xpiSourcePath
-
- Le chemin du fichier à extraire et à exécuter. Notez que ce chemin pointe dans l'archive <tt>xpi</tt> elle-même.
-
- args
-
- Un paramètre chaîne passé à l'exécutable. Ignoré sous Mac OS. Voir les notes ci-dessous.
-
- blocking
-
- Une valeur booléenne qui spécifie si l'installation doit ou non attendre la fin de l'exécution du fichier avant de continuer. La valeur par défaut est false. Voir les notes ci-dessous. Le paramètre blocking n'est pas disponible comme partie de cette méthode dans les versions antérieures de Netscape 6.1/Mozilla 0.9.3.
-
-

Retour

-

Un code d'erreur entier. Pour la liste des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode execute extrait le fichier spécifié depuis l'archive <tt>xpi</tt> vers un fichier temporaire.

-

Le code doit appeler la méthode performInstall pour réellement exécuter le fichier. Cette méthode peut être utilisée pour lancer un installeur - - InstallShield - ou tout autre exécutable d'installation stocké dans l'archive <tt>xpi</tt>.

-
Exécution des fichiers installés
-
- Note : Si le fichier qu'on veut exécuter est l'un de ceux à installer (contrairement à un installeur exécutable qui sera effacé après utilisation), alors, il faut utiliser la méthode execute de l'objet File. File.execute() exécute un fichier installé (tel que le navigateur) après son installation et est généralement placé à la fin du script d'installation et en dehors du bloc principal.
-

La méthode execute de l'objet Install, d'un autre côté, efface l'exécutable de son emplacement temporaire une fois son exécution achevée. L'argument optionnel blocking, lorsqu'il est défini à true, spécifie que l'installation doit attendre que l'exécutable finisse avant de procéder à la prochaine commande d'installation mise en file d'attente. Si ce paramètre n'est pas défini et qu'un exécutable ne faisant pas partie de l'installation est lancé, une erreur survient lors du redémarrage du navigateur.

-
Passage d'arguments à l'exécutable
-

Le paramètre args, lorsqu'il est présent, passe une chaîne à l'exécutable comme paramètres de ligne de commande. La ligne suivante, par exemple, passe le paramètre de ligne de commande -c à l'exécutable :

-
err = file.execute(myfile, "-c", true);
-
-

Lorsqu'on désire passer plus d'un paramètre à l'exécutable, il est nécessaire de formater la chaîne args de façon particulière afin que les paramètres puissent être cassés et passés séparément comme requis. En général, il est possible d'utiliser les guillemets uniques pour la chaîne args et les doubles guillemets pour délimiter les arguments de ligne de commande dans la chaîne. Les règles d'analyse suivantes s'appliquent :

- -

Cela signifie qu'afin de passer trois arguments en ligne de commande (-c, -d et -s) à l'exécutable, il est nécessaire de formater la chaîne args comme suit :

-
err = file.execute(myfile, '"-c""-d""-s"', true);
-
-

Techniquement, en considérant les règles ci-dessus, il est possible de passer les mêmes arguments avec la ligne suivante, mais le résultat sera moins lisible :

-
err = file.execute(myfile, "\"-c\"\"-d\"\"-s\"", true);
-
-

Voir également la note sur les binaires Macintosh dans addFile.

-

Interwiki Language Links

-
-  
-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/execute" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/gestalt/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/gestalt/index.html" deleted file mode 100644 index f3b597571d..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/gestalt/index.html" +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: gestalt -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/gestalt -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/gestalt ---- -

 

-

gestalt

-

(Macintosh Uniquement)
- Récupère les informations sur le système d'exploitation.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int gestalt ( Chaîne selecteur );
-
-

Paramètres

-

La méthode gestalt a le paramètre suivant :

-
-
- selecteur
-
- Le code sélecteur de l'information que vous voulez.
-
-

Retour

-

Retourne l'information demandée. Le format dépend du code sélecteur spécifié dans le paramètre selecteur.

-

Description

-

La méthode gestalt est une classe enveloppante pour la fonction gestalt de la boîte à outils Macintosh. Pour plus d'informations, voir Inside Macintosh: Operating System Utilities (en) (obsolète). Cette méthode retourne null sur les plate-formes Unix et Microsoft Windows.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/deleteRegisteredFile" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getcomponentfolder/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getcomponentfolder/index.html" deleted file mode 100644 index b97f211388..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getcomponentfolder/index.html" +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: getComponentFolder -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/getComponentFolder -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/getComponentFolder ---- -

 

-

getComponentFolder

-

Retourne un objet représentant le répertoire dans lequel le composant est installé.

-

Méthode de

-

Objet Install

-

Syntaxe

-
Object getComponentFolder
-   (Chaîne registryName);
-
-Object getComponentFolder (
-   Chaîne registryName,
-   Chaîne subDirectory);
-
-

Paramètres

-

La méthode getComponentFolder a les paramètres suivants :

-
-
- registryName
-
- Dans la - - Client Version Registry - , le chemin du composant dont on veut obtenir le répertoire d'installation.
-
- subDirectory
-
- Une chaîne qui spécifie le nom d'un sous-répertoire. Si le sous-répertoire spécifié n'existe pas, il est créé. Ce paramètre est disponible dans Netscape 6 et peut être sensible à la casse (selon le système d'exploitation).
-
-

Retour

-

Un objet représentant le répertoire dans lequel le composant est installé ou NULL si le composant ne peut pas être trouvé ou si subDirectory se réfère à un fichier qui existe déjà.

-

Description

-

La méthode getComponentFolder récupère l'emplacement d'un paquetage logiciel précédemment installé. Généralement, cette méthode est utilisée avec les méthodes addFile ou addDirectory.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/getComponentFolder" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getfolder/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getfolder/index.html" deleted file mode 100644 index fa87bbb90e..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getfolder/index.html" +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: getFolder -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/getFolder -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/getFolder ---- -

 

-

getFolder

-

Retourne un objet représentant l'un des répertoires standard.

-

Méthode de

-

Objet Install

-

Syntaxe

-
FileSpecObject getFolder (
-   Chaîne FolderName);
-
-
FileSpecObject getFolder (
-   Chaîne folderName,
-   Chaîne subDirectory);
-
-
FileSpecObject getFolder (
-   Objet localDirSpec,
-   Chaîne subDirectory);
-
-

Paramètres

-

La méthode getFolder a les paramètres suivants :

-
-
- folderName
-
- Une chaîne représentant l'un des répertoires standard de Netscape. Il y a deux ensembles de valeurs possibles pour ce paramètre. Le premier ensemble contient tous les emplacements indépendants de la plate-forme. Le second ensemble contient les emplacements spécifiques à une plate-forme donnée. Vous êtes encouragés à utiliser des emplacements indépendants à la plate-forme. Voir la liste des emplacements des deux ensembles dans la section Description.
-
- subDirectory
-
- Une chaîne qui définit le nom d'un sous-répertoire. Si ce dernier n'existe pas, il est créé. Ce paramètre est disponible dans Netscape 6 et ultérieur et peut être sensible à la casse (en fonction du système d'exploitation).
-
- localDirSpec
-
- Un objet FileSpecObject représentant un répertoire obtenu par les méthodes getComponentFolder ou getFolder.
-
-

Retour

-

Un code d'erreur entier. Pour la liste des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode getFolder obtient un objet représentant l'un des répertoires standard de Netscape, qui sera utilisé avec les méthodes addFile et getWinProfile. La valeur de folderName doit être l'une des valeurs suivantes (informations basées sur la branche stable Mozilla 1.7, peuvent également être valables pour d'autres versions) :

- - - - - - - - - - - - -
-

"Chrome"
- "Components"
- "Current User"
- "Defaults"
- "file:///"
- "OS Drive"
- "Plugins"
- "Preferences"
- "Profile"
- "Program"
- "Temporary"

-
-

"Mac Apple Menu"
- "Mac Control Panel"
- "Mac Desktop"
- "Mac Documents"
- "Mac Extension"
- "Mac Fonts"
- "Mac Shutdown"
- "Mac Startup"
- "Mac System"
- "Mac Trash"
- "Mac Preferences"

-
-

"MacOSX Default Download"
- "MacOSX Home"
- "MacOSX Internet Sites"
- "MacOSX Local Applications"
- "MacOSX Local Desktop"
- "MacOSX Local Documents"
- "MacOSX Local Frameworks"
- "MacOSX Local Internet PlugIn"
- "MacOSX Local Preferences"
- "MacOSX Movie Documents"
- "MacOSX Music Documents"
- "MacOSX Picture Documents"
- "MacOSX User Applications"
- "MacOSX User Desktop"
- "MacOSX User Documents"
- "MacOSX User Frameworks"
- "MacOSX User Internet PlugIn"
- "MacOSX User Preferences"

-
-

"Unix Lib"
- "Unix Local"

-
-

"Windows"
- "Win AppData"
- "Win Common Files"
- "Win Desktop"
- "Win Desktop Common"
- "Win Program Files"
- "Win Programs"
- "Win Programs Common"
- "Win StartMenu"
- "Win StartMenu Common"
- "Win Startup"
- "Win Startup Common"
- "Win System"

-
-

La forme file:/// n'est valide que lorsque le paramètre subDirectory est utilisé. Elle doit être au format URL file: amputée de la partie file:///. Par exemple :

-
mydir = getFolder("file:///", "c|/mysoftco/somedir");
-
-

Remarquez l'utilisation de barre oblique (/), quelque soit la plate-forme.

-

Les dossiers dont les noms commencent par <tt>Win</tt>, <tt>Mac</tt> ou <tt>Unix</tt> sont spécifiques à leur plate-forme respective. Il faut donc faire attention à leur utilisation, car ils rendent l'installation spécifique à une plate-forme.

-

Exemple

-

Pour récupérer un objet représentant le répertoire standard des plugins, on peut utiliser l'appel suivant :

-
plugindir = getFolder("Plugins");
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/getFolder" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getlasterror/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getlasterror/index.html" deleted file mode 100644 index a937cbb5e5..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getlasterror/index.html" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: getLastError -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/getLastError -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/getLastError ---- -

 

-

getLastError

-

Retourne le plus récent code d'erreur non nul.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int getLastError ();
-
-

Paramètres

-

Aucun.

-

Retour

-

Le plus récent code d'erreur non nul. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode getLastError est utilisée pour obtenir le plus récent code d'erreur non nul survenu depuis l'appel de initInstall ou de resetError. Cette méthode permet de différer la vérification des codes d'erreur chaque fois que addFile ou addDirectory sont appelées jusqu'au dernier appel de addFile ou de addDirectory.

-

La méthode getLastError ne retourne pas d'erreur pour les méthodes qui retournent des objets, telle que la méthode getFolder.

-

Exemple

-

L'exemple suivant appelle la méthode getLastError après une série d'appels addFile :

-
addFile("npplug", ...);
-addFile("/MS/Shared/ctl3d.dll", ...);
-addFile("/NetHelp/royalplug/royalhelp.html",...);
-err = getLastError();
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/getLastError" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinprofile/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinprofile/index.html" deleted file mode 100644 index 2f0f4ca506..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinprofile/index.html" +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: getWinProfile -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/getWinProfile -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/getWinProfile ---- -

 

-

getWinProfile

-

(Microsoft Windows uniquement)

-

Construit un objet pour travailler avec un fichier <tt>.ini</tt> de Windows.

-

Méthode de

-

Objet Install

-

Syntaxe

-
WinProfile getWinProfile (
-   Objet dossier,
-   Chaîne fichier);
-
-

Paramètres

-

La méthode getWinProfile a les paramètres suivants :

-
-
- dossier
-
- Un objet représentant un répertoire. Cet objet est créé en passant une chaîne représentant le répertoire à la méthode getFolder.
-
- fichier
-
- Un chemin relatif vers un fichier d'initialisation dans le répertoire spécifié par le paramètre dossier, tel que royal/royal.ini.
-
-

Retour

-

Un objet WinProfile.

-

Description

-

La méthode getWinProfile crée un objet pour manipuler le contenu d'un fichier <tt>.ini</tt> de Windows. Une fois cet objet créé, on peut appeler cette méthode pour récupérer des chaînes du fichier ou lui en ajouter. Pour plus d'informations sur l'objet retourné, voir WinProfile.

-

Cette méthode retourne null sur les plate-formes Unix et Macintosh.

-

Exemple

-

Pour éditer le fichier win.ini, on crée un WinProfile par cet appel :

-
var myWinProfileObj =
-   getWinProfile (getFolder("Windows"), "win.ini");
-
-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/getWinProfile" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinregistry/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinregistry/index.html" deleted file mode 100644 index d38d05deb0..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/getwinregistry/index.html" +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: getWinRegistry -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/getWinRegistry -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/getWinRegistry ---- -

 

-

getWinRegistry

-

(Windows uniquement) Construit un objet pour travailler avec le registre de Microsoft Windows.

-

Méthode de

-

Objet Install

-

Syntaxe

-
WinReg getWinRegistry();
-
-

Paramètres

-

Aucun.

-

Retours

-

Un objet WinReg.

-

Description

-

La méthode getWinRegistry est utilisée pour créer un objet qui permettra de manipuler le contenu de la base de registre de Microsoft Windows. Une fois cet objet créé, on peut appeler sa méthode pour récupérer ou modifier le contenu du registre. Pour plus d'informations sur l'objet retourné, voir WinReg.

-

Cette méthode retourne NULL sur les plate-formes Unix et Macintosh.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/getWinRegistry" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/index.html" deleted file mode 100644 index ea30f5f01e..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/index.html" +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Méthodes -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods ---- -

Méthodes

-
-
- addDirectory
-
- Décompacte un sous-répertoire entier.
-
- addFile
-
- Décompacte un fichier unique.
-
- alert
-
- Affiche une boîte de dialogue contenant un message d'alerte et un bouton « OK ».
-
- cancelInstall
-
- Abandonne l'installation du logiciel.
-
- confirm
-
- Affiche une boîte de dialogue de confirmation contenant le message spécifié et les boutons « OK » et «Annuler ». Permet également des intitulés de bouton personnalisés et les cases à cocher.
-
- deleteRegisteredFile
-
- Efface le fichier spécifié et son entrée dans le - - Client Version Registry - .
-
- execute
-
- Extrait un fichier de l'archive <tt>xpi</tt> dans un répertoire temporaire et le programme pour une exécution ultérieure.
-
- gestalt
-
- Récupère les informations concernant le système d'exploitation (Mac OS uniquement).
-
- getComponentFolder
-
- Retourne un objet représentant le répertoire dans lequel le composant est installé.
-
- getFolder
-
- Retourne un objet représentant un répertoire, à utiliser avec la méthode addFile.
-
- getLastError
-
- Retourne le code d'erreur non nul le plus récent.
-
- getWinProfile
-
- Construit un objet pour travailler avec un fichier .ini de Windows.
-
- getWinRegistry
-
- Construit un objet pour travailler avec la base de registre de Windows.
-
- initInstall
-
- Initialise l'installation du logiciel et de la version indiqués.
-
- loadResources
-
- Retourne un objet dont les propriétés sont des chaînes localisées, chargées depuis le fichier de propriétés spécifié.
-
- logComment
-
- Ajoute une ligne de commentaire au rapport d'installation.
-
- patch
-
- Applique un ensemble de différences entre deux versions.
-
- performInstall
-
- Finalise l'installation du logiciel.
-
- refreshPlugins
-
- Rafraîchit la liste des plugins disponibles pour le navigateur.
-
- registerChrome
-
- Enregistre le chrome avec le registre chrome.
-
- resetError
-
- Réinitialise à zéro un code d'erreur sauvegardé.
-
- setPackageFolder
-
- Définit le dossier par défaut du paquetage qui est enregistré avec le nœud racine
-
diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/initinstall/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/initinstall/index.html" deleted file mode 100644 index a5a8394f71..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/initinstall/index.html" +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: initInstall -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/initInstall -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/initInstall ---- -

 

-

initInstall

-

Initialise l'installation du logiciel spécifié et de sa version.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int initInstall (
-   Chaîne displayName,
-   Chaîne package,
-   InstallVersion version,
-   int flags);
-
-
int initInstall (
-   Chaîne displayName,
-   Chaîne package,
-   Chaîne version,
-   int flags);
-
-
int initInstall (
-   Chaîne displayName,
-   Chaîne package,
-   Chaîne version);
-
-

int initInstall (

-
  String displayName,
-  String package,
-  InstallVersion version);
-
-

Paramètres

-

La méthode initInstall a les paramètres suivants :

-
-
- displayName
-
- Une chaîne qui contient le nom du logiciel à installer. Le nom du logiciel est visible par l'utilisateur.
-
- package
-
- Le chemin dans la - - Client Version Registry - concernant le logiciel (par exemple : Plugins/Adobe/Acrobat ou /royalairways/RoyalPI/).
-
- Fournir un nom vide ou null est une erreur.
-
- Le chemin peut être absolu ou relatif. Un chemin relatif est relatif à l'espace de nommage de Netscape 6. Un chemin relatif doit débuter par plugins/, pour être relatif à la partie plugins de cet espace de nommage ou par java/download/, pour être relatif à la partie Java. Toutes les autres parties de l'espace de nommage de Netscape 6 sont réservées à l'usage de Netscape.
-
- La - - Client Version Registry - est une description hiérarchique du logiciel enregistré pour être utilisé par Netscape 6. Le chemin fourni ici n'est pas l'emplacement du logiciel sur le disque local, il correspond aux informations concernant le logiciel dans le registre. La distinction est importante lorsque vous ajoutez des composants avec la méthode addFile.
-
- version
-
- Un objet InstallVersion ou une Chaîne représentant la version du paquetage à installer. Lorsque version est une Chaîne il peut contenir jusqu'à quatre nombres entiers, délimités par des points, tel que 1.17.1999.1517.
-
- flags
-
- Un champ optionnel, réservé pour un usage futur. Passe 0 comme valeur par défaut.
-
-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode initInstall initialise l'installation du logiciel spécifié. Elle doit être appelée immédiatement après le constructeur. Il est erroné d'appeler toute autre méthode de l'objet Install avant l'appel de initInstall.

-

Après l'appel de la méthode initInstall, le script d'installation doit appeler les méthodes performInstall ou cancelInstall avant qu'il ne se termine. Si ces appels ne sont pas faits, Netscape 6 ne sera pas en mesure de nettoyer proprement les fichiers temporaires après la fin de l'exécution du script.

-

Exemple

-

Pour débuter l'installation du plugin - - Royal Airways - , on peut utiliser ce code :

-
initInstall("Royal Airways TripPlanner","/RoyalAirways/
-TripPlanner","1.0.0.0");
-...
-err = getLastError();
-if (!err)
-   performInstall();
-else
-   cancelInstall(err);
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/initInstall" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/loadresources/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/loadresources/index.html" deleted file mode 100644 index 55aa01674d..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/loadresources/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: loadResources -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/loadResources -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/loadResources ---- -

 

-

loadResources

-

Charge un fichier de propriétés.

-

Méthode de

-

Objet Install

-

Syntaxe

-
Object loadResources( Chaîne xpiPath );
-
-

Paramètres

-

L'unique paramètre d'entrée de la méthode loadResources est une chaîne représentant le chemin vers le fichier de propriétés dans une archive <tt>xpi</tt> dans laquelle les paires clefs/valeurs sont définies.

-

Retours

-

Un objet JavaScript dont les noms des propriétés sont des clefs de ce fichier et dont les valeurs sont les chaînes.

-

Description

-

Le format du fichier de propriétés attendu par la méthode loadResources est le même que celui des fichiers de propriétés du chrome local. Cette méthode est utilisée pour internationaliser les scripts d'installation en permettant à l'installeur de récupérer les valeurs des chaînes localisées depuis un fichier annexe. Faites attention à ce que le paramètre spécifie correctement le fichier de l'archive <tt>xpi</tt> et non celui du système de fichiers, comme indiqué dans l'exemple ci-dessous.

-

Exemple

-

Soit un <tt>xpi</tt> avec la structure interne suivante :

-
install.js
-bin/res_eg_2.properties
-bin/somefile.exe
-bin/...
-
-

Les lignes suivantes récupèrent les propriétés comme objet JavaScript et rendent les valeurs accessibles avec la syntaxe habituelle des fichiers <tt>.property</tt> :

-
resEg2Obj = loadResources("bin/res_eg_2.properties");
-dump( resEg2Obj.title )
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/loadResources" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/logcomment/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/logcomment/index.html" deleted file mode 100644 index 5647853f3e..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/logcomment/index.html" +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: logComment -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/logComment -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/logComment ---- -

 

-

logComment

-

Ajoute une ligne de commentaire dans le journal d'installation.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int logComment( Chaîne aComment );
-
-

Paramètres

-

L'unique paramètre d'entrée de la méthode logComment est une chaîne dont la valeur sera écrite dans le journal pendant le processus d'installation.

-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

Le journal d'installation est créé, par défaut, dans le répertoire du produit si c'est possible (où se trouve l'exécutable du navigateur). Si l'installation n'a pas les droits requis, le journal d'installation est créé dans le répertoire du profile utilisateur. Respectivement, ces répertoires correspondent aux mots clefs - - Program - et - - Current User - pour la méthode getFolder.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/logComment" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/patch/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/patch/index.html" deleted file mode 100644 index eaa583ee2c..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/patch/index.html" +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: patch -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/patch -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/patch ---- -

 

-

patch

-

Met à jour un composant existant.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int patch (
-   Chaîne registryName,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath);
-
-
int patch (
-   Chaîne registryName,
-   InstallVersion version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath);
-
-
int patch (
-   Chaîne registryName,
-   Chaîne version,
-   Chaîne xpiSourcePath,
-   Objet localDirSpec,
-   Chaîne relativeLocalPath);
-
-

Paramètres

-

La méthode patch a les paramètres suivants :

-
-
- registryName
-
- Le chemin dans la - - Client Version Registry - du composant à patcher. Ce paramètre peut être un chemin absolu, tel que /royalairways/RoyalSW/executable ou un chemin relatif, tel que executable.
-
- Généralement, les chemins absolus ne sont utilisés que pour les composants partagés, ou ceux qui proviennent d'un autre éditeur, tel que /Microsoft/shared/msvcrt40.dll.
-
- Généralement, les chemins relatifs sont relatifs au chemin principal spécifié dans la méthode initInstall. Ce paramètre peut également être vide, auquel cas le paramètre xpiSourcePath est utilisé comme un chemin relatif.
-
- Le chemin du registre n'est pas l'emplacement du logiciel sur le disque local, il correspond à l'emplacement des informations concernant le logiciel dans la - - Client Version Registry - .
-
- version
-
- Un objet InstallVersion ou une Chaîne comportant jusqu'à quatre nombres entiers délimités par des points, tel que "1.17.1999.1517". Pour les variantes de cette méthode sans argument version, la valeur de initInstall sera utilisée.
-
- xpiSourcePath
-
- Une chaîne spécifiant l'emplacement des différents fichiers contenus dans l'archive <tt>xpi</tt>.
-
- localDirSpec
-
- Un objet représentant le répertoire où se trouve le sous-composant à patcher. Cet objet est créé en passant un chaîne représentant le répertoire à la méthode getFolder.
-
- relativeLocalPath
-
- Un chemin relatif vers le paramètre localDirSpec qui identifie le sous-composant à patcher. Il faut toujours utiliser des barres obliques (/) dans ce chemin, sans considération pour les conventions du système d'exploitation. Si ce paramètre est blanc ou NULL, xpiSourcePath est utilisé.
-
-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode patch met à jour un composant en appliquant un ensemble de différences entre les deux versions connues. L'ensemble des différences est au format GDIFF et est créé à l'aide de l'utilitaire NSDiff.

-

Un patch ne peut être appliqué qu'entre deux versions connues. Si la version existante du fichier ne correspond pas à la somme de contrôle stockée dans le fichier GDIFF, patch retourne une erreur sans appliquer le patch.

-

Après avoir appliqué les différences, la méthode patch compare la somme de vérification ( - - checksum - en anglais) du fichier résultant par rapport à celle stockée dans le fichier GDIFF. Si les sommes ne correspondent pas, la version originale du fichier est préservée, la version patchée est supprimée et un code d'erreur est retourné.

-

Tout processus d'installation unique peut appliquer plusieurs patches sur un même fichier. Si la méthode performInstall indique qu'un redémarrage est nécessaire, patch peut ne pas fonctionner dans le processus XPInstall en cours jusqu'à ce qu'un redémarrage soit exécuté.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/patch" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/performinstall/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/performinstall/index.html" deleted file mode 100644 index cd90e320fd..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/performinstall/index.html" +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: performInstall -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/performInstall -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/performInstall ---- -

 

-

performInstall

-

Exécute l'installation réelle du logiciel. Déplace tous les composants vers leur emplacement final, lance toutes les exécutions différées et enregistre le paquetage et tous ses composants dans la - - Client Version Registry - .

-

Méthode de

-

Objet Install

-

Syntaxe

-
int performInstall();
-
-

Paramètres

-

Aucun.

-

Retours

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés. Dans certains cas, cette méthode peut retourner d'autres codes d'erreur. Il peut arriver d'obtenir une erreur d'enregistrement.

-

Exemple

-

Le code suivant est utilisé pour annuler ou pour finaliser une installation, il est basé sur une variable définie précédemment dans le code :

-
initInstall("Royal Airways TripPlanner",
-   "/RoyalAirways/TripPlanner",
-   "1.0.0.0");
-...
-err = getLastError();
-if (!err)
-   performInstall();
-else
-   cancelInstall(err);
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/performInstall" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/refreshplugins/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/refreshplugins/index.html" deleted file mode 100644 index b8c13894e8..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/refreshplugins/index.html" +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: refreshPlugins -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/refreshPlugins -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/refreshPlugins ---- -

 

-

refreshPlugins

-

Rafraîchit la liste des plugins enregistrés pour le navigateur.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int refreshPlugins( [ aReloadPages ] );
-
-

Paramètres

-

La méthode refreshPlugins a le paramètre suivant :

-
-
- aReloadPages
-
- aReloadPages est une valeur booléenne optionnelle indiquant si vous voulez ou non recharger les pages Web ouvertes après le rafraîchissement de la liste des plugins.
-
-

Retours

-

Aucun.

-

Description

-

refreshPlugins permet d'enregistrer de nouveaux plugins sans avoir à redémarrer le navigateur. Lorsque cette méthode est utilisée dans un script d'installation, comme dans l'exemple ci-dessous, on peut installer de nouveaux plugins et les utiliser pour afficher les média demandés dans une page Web sans interrompre l'expérience utilisateur.

-
- Note : La méthode refreshPlugins doit être appelée après la méthode performInstall qui initie l'installation réelle.
-

Exemple

-
// Installe une DLL dans le répertoire "Plugins"
- // Installe un XPT dans le répertoire "Components"
-  var xpiSrc  = "NPMCult3DP.dll";
-  var xpiSrc2 = "nsIC3DPScriptablePeer.xpt";
-  initInstall(
-   "Cult3D Plugin File",
-   "@cycore.com/Cult3D;version=1.0.0",
-   "1.0.0");
-  setPackageFolder(getFolder("Plugins"));
-  addFile(xpiSrc);
-  addFile("",xpiSrc2,getFolder("Components"),"");
-  var err = getLastError();
-  if (err == SUCCESS)
-  {
-     err = performInstall();
-     if (err == SUCCESS)
-        refreshPlugins();
-  }
-  else
-     cancelInstall(err);</pre>
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/refreshPlugins" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/registerchrome/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/registerchrome/index.html" deleted file mode 100644 index 2248e87d1d..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/registerchrome/index.html" +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: registerChrome -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/registerChrome -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/registerChrome ---- -

 

-

registerChrome

-

Enregistre chrome dans le registre Chrome.

-

Méthode de

-

Objet Install

-

Syntaxe

-
int registerChrome(
-  SWITCH,
-  srcDir,
-  xpiPath);
-
-

Paramètres

-

La méthode registerChrome a les paramètres suivants :

-
-
- SWITCH
-
- SWITCH est le switch chrome indiquant le type de fichier à enregistrer. SKIN est utilisé pour les thèmes, LOCALE est utilisé pour les paquetages de localisation. PACKAGE, un troisième type possible, est équivalent à SKIN AND/OR LOCALE et assure que tout dans le <tt>xpi</tt> sera enregistré. Une option finale pour ce paramètre est DELAYED_CHROME, qui enregistre le switch uniquement après un redémarrage du navigateur.
-
-

Il est possible de combiner les switches comme dans l'exemple ci-dessous.

-
-
- srcDir
-
- srcDir est un objet FileSpecObject représentant la destination source de l'installation. Les - - FileSpecObjects - requis par cette fonction, sont créés en utilisant la méthode getFolder de l'objet Install.
-
-
-
- xpiPath
-
- xpiPath est le chemin, dans le <tt>xpi</tt>, où se trouve le fichier contents.rdf définissant le chrome. Par exemple, - - locale/myLocale/aim - pointe vers le sous-répertoire locale/myLocale/aim du même fichier <tt>xpi</tt> que le script d'installation.
-
-

Retour

-

Un nombre entier correspondant à un code d'erreur. Pour la liste complète des valeurs possibles, voir Codes retournés. Dans certains cas, cette méthode peut retourner d'autres codes d'erreur. Il peut arriver d'obtenir une erreur d'enregistrement.

-

Description

-

Lorsque le troisième paramètre est omis (pointage vers un emplacement précis dans l'archive <tt>xpi</tt>), cette fonction est utilisée de façon dépréciée. Dans ce cas, registerChrome supporte l'ancien format des archives d'installation, dans lequel le fichier manifest.rdf était toujours situé au plus haut niveau de l'archive d'installation. registerChrome ne nécessite alors pas de chemin dans l'archive, comme il le requiert maintenant afin de localiser le format plus flexible du fichier contents.rdf des archives d'installation.

-

Il est possible de regarder dans le fichier installed-chrome.txt du répertoire chrome pour savoir où et comment la fonction registerChrome a enregistré le paquetage dans le registre chrome.

-

Exemple

-

Cet exemple suppose que votre archive xpi se trouve dans le dossier Plugins et que le fichier RDF est dans le sous-dossier resources de l'archive.

-
-

Vous devriez évitez cet appel (au cas où vous feriez un copier/coller depuis un ancien script d'installation) pour l'installation de plugin pour Firefox 2.x. Il n'est pas certain de ce que produira cet « enregistrement chrome ».

-
-
registerChrome(
-  PACKAGE | DELAYED_CHROME,
-  getFolder("Plugins"),
-  "resources");
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/registerChrome" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/reseterror/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/reseterror/index.html" deleted file mode 100644 index 1b5c5d56ed..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/reseterror/index.html" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: resetError -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/resetError -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/resetError ---- -

 

-

resetError

-

Réinitialise à zéro un code d'erreur enregistré.

-

Méthode de

-

Objet Install

-

Syntaxe

-
void resetError ();
-
-

Paramètres

-

Aucun.

-

Retour

-

Aucun.

-

Description

-

La méthode resetError réinitialise à zéro tout code d'erreur enregistré. Pour plus d'informations, voir getLastError.

-

Exemple

-

Pour réinitialiser à zéro le dernier code d'erreur :

-
resetError();
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/resetError" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/setpackagefolder/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/setpackagefolder/index.html" deleted file mode 100644 index 73ab053260..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/m\303\251thodes/setpackagefolder/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: setPackageFolder -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Méthodes/setPackageFolder -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Methods/setPackageFolder ---- -

 

-

setPackageFolder

-

Définit le dossier par défaut du paquetage.

-

Méthode de

-

Objet Install

-

Syntaxe

-
void setPackageFolder (
-   Objet dossier);
-
-

Paramètres

-

La méthode setPackageFolder a le paramètre suivant :

-
-
- dossier
-
- Un objet représentant un répertoire. Cet objet est créé en passant une chaîne représentant le répertoire aux méthodes getFolder ou getComponentFolder.
-
-

Retour

-

Aucun.

-

Description

-

La méthode setPackageFolder définit le dossier par défaut du paquetage qui est enregistré avec le nœud racine. Lorsque le dossier du paquetage est défini, il est utilisé comme dossier par défaut pour les formulaires de la méthode addFile et de toutes celles qui ont un paramètre optionnel localDirSpec.

-

Cette méthode ne devrait être appelée qu'une seule fois, et devrait toujours l'être immédiatement après l'appel de initInstall. Au cas où elle serait appelée plusieurs fois, le dernier dossier défini est le dossier qui sera enregistré dans la - - Client Version Registry - et utilisé par défaut pour les autres installations.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Methods/setPackageFolder" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/propri\303\251t\303\251s/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/propri\303\251t\303\251s/index.html" deleted file mode 100644 index 65e0ccaa9f..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_install/propri\303\251t\303\251s/index.html" +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Propriétés -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_Install/Propriétés -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/Install_Object/Properties ---- -

 

-

Propriétés

-
-
- archive
-
- Le chemin local complet de l'archive après son téléchargement dans le dossier temporaire spécifique de la plate-forme (par exemple C:\TEMP\argstest.xpi)
-
- arguments
-
- Les arguments peuvent être passés par les API de déclenchement en attachant un ? puis la chaîne de l'argument à l'URL du xpi : startSoftwareUpdate("http://webserver/argstest.xpi?ARGUMENT_STRING") donnera ARGUMENT_STRING # comme valeur de Install.arguments. Remarquez que les espaces dans la chaîne de l'argument sont autorisés. Tout ce qui ce trouve après le point d'interrogation est traité comme une chaîne qui devient la propriété Install.arguments.
-
- buildID
-
- L'ID de compilation de l'application, sous la forme 20041231. Remarquez qu'à cause des différentes branches de développement (différentes versions de Gecko avec différentes fonctionnalités peuvent être compilées le même jour), l'utilisation de cette propriété pour « détecter » la version de l'application peut produire un résultat erroné. De plus, cet ID peut être égale à 0 pour les compilations personnalisées.
-
- jarfile
-
- Alias pour archive
-
- platform
-
- Contient les informations sur la plate-forme de compilation et d'exécution de XPInstall. Par exemple, la valeur peut débuter par « Windows », « Macintosh » ou « X11 » (pour Unix/Linux). Pour plus de détails, voir le code correspondant dans la méthode GetInstallPlatform de la classe nsInstall.
-
- url
-
- L'URL pleinement qualifiée du xpi (URL de fichier, URL http, URL ftp, etc.). Par exemple http://dolfin/sgehani/zzz/ip.xpi. Remarquez que, même si elle est déclenchée en utilisant des URL relatives, cela affichera l'URL complète (après qualification).
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/Install_Object/Properties" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installtrigger/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installtrigger/index.html" deleted file mode 100644 index 0c7e9f279b..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installtrigger/index.html" +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Objet InstallTrigger -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_InstallTrigger -tags: - - Référence_de_l'API_XPInstall -translation_of: Web/API/InstallTrigger ---- -

 

-

InstallTrigger

-

Un script de déclenchement sur une page Web utilise un objet InstallTrigger pour télécharger et installer un logiciel.

-

Présentation

-

Pour les installations simples, la méthode install sur l'objet InstallTrigger peut être la seule chose nécessaire dans le script d'installation.

-

Pour des installations plus complexes, vous pouvez avoir besoin d'utiliser les objet d'installation Install et/ou File. Dans tous les cas, vous devez déclencher le processus d'installation en créant un script sur une page Web dans lequel les méthodes InstallTrigger téléchargent le fichier <tt>xpi</tt> spécifié et « déclenchent » l'exécution du script <tt>install.js</tt> situé à la racine du <tt>xpi</tt>.

-

La principale méthode sur l'objet InstallTrigger est install, qui télécharge et installe un ou plusieurs paquetages logiciels archivés dans un fichier au format <tt>xpi</tt>. Ce qui suit est un exemple simple d'installation depuis une page Web :

-
xpi={'XPInstall Dialog Display Name':'simple.xpi'};
-InstallTrigger.install(xpi);
-
-

Vous pouvez également utiliser l'objet InstallTrigger pour vérifier les versions de logiciels, installer des thèmes Netscape6/Mozilla et des paquetages de langues, et exécuter des installations multi-paquetages avec install.

-

Interwiki Langiages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/InstallTrigger_Object", "ja": "ja/XPInstall_API_Reference/InstallTrigger_Object" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/index.html" deleted file mode 100644 index c3a6bcd3fa..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/index.html" +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Objet InstallVersion -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_InstallVersion -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/InstallVersion_Object ---- -

 

-

InstallVersion

-

Les objets InstallVersion sont utilisés pour stocker des informations sur la version du logiciel.

-

Présentation

-

Cet objet et ses méthodes sont utilisés aussi bien lors du déclenchement d'un téléchargement, afin de vérifier si une version particulière doit être installée, que lors de l'installation d'un logiciel.

-
-
- init()
-
- Associe une version particulière à un objet InstallVersion.
-
- toString()
-
- Convertit les différents formats de version en chaînes.
-
- compareTo()
-
- Compare ces chaînes et indique les relations entre les deux versions.
-
-

Chacun des paramètres de version est également disponible en tant que propriété séparée de l'objet InstallVersion.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/InstallVersion_Object" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/compareto/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/compareto/index.html" deleted file mode 100644 index 7c27d6d29e..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/compareto/index.html" +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: compareTo -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_InstallVersion/Méthodes/compareTo -translation_of: Archive/Mozilla/XPInstall/Reference/InstallVersion_Object/Methods/compareTo ---- -

 

-

compareTo

-

Compare les informations de version spécifiées dans cet objet à celles spécifiées dans le paramètre version.

-

Méthode de

-

Objet InstallVersion

-

Syntaxe

-
compareTo ( InstallVersion version);
-
-
compareTo ( String version);
-
-
compareTo ( int major, int minor, int release, int build);
-
-

Paramètres

-

La méthode compareTo a les paramètres suivants :

-
-
- maj
-
- Le numéro de version majeur.
-
- min
-
- Le numéro de version mineur.
-
- rev
-
- Le numéro de révision.
-
- bld
-
- Le numéro de compilation.
-
- version
-
- Une chaîne représentant les informations de version au format 4.1.2.1234.
-
-

Retour

-

Si les versions sont les mêmes, cette méthode retourne 0. Si la version de cet objet représente une version plus petite (précédente) que celle représentée dans le paramètre version, cette méthode retourne un nombre négatif. Autrement, elle retourne un nombre positif. En particulier, cette méthode retourne l'un des nombres suivants :

-
-
- -4 
-
- La version de l'objet a un numéro majeur plus petit (plus ancien) que le paramètre version.
-
- -3 
-
- La version de l'objet a un numéro mineur plus petit (plus ancien) que le paramètre version.
-
- -2 
-
- La version de l'objet a un numéro de version plus petit (plus ancien) que le paramètre version.
-
- -1 
-
- La version de l'objet a un numéro de compilation plus petit (plus ancien) que le paramètre version.
-
- 0 
-
- Les numéros de version sont égaux ; les deux objets représentent la même version.
-
- 1 
-
- La version de l'objet a un numéro de compilation plus grand (plus récent) que le paramètre version.
-
- 2 
-
- La version de l'objet a un numéro de version plus grand (plus récent) que le paramètre version.
-
- 3 
-
- La version de l'objet a un numéro mineur plus grand (plus récent) que le paramètre version.
-
- 4 
-
- La version de l'objet a un numéro majeur plus grand (plus récent) que le paramètre version.
-
-

Les constantes suivantes sont définies et disponible pour vérifier la valeur retournée par compareTo :

- -

Exemple

-

Ce code est utilise la méthode compareTo pour déterminer si oui ou non la version 3.2.1 du logiciel « Royal Airways » a été précédemment installée :

-
existingVI = InstallTrigger.getVersion("/royalairways/royalsw");
-
-if ( existingVI.compareTo("3.2.1") <= 0 ) {
-   // ... procède à la mise à jour ...
-   }
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/InstallVersion_Object/Methods/compareTo" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/index.html" deleted file mode 100644 index 1b8e8ec247..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/index.html" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Méthodes -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_InstallVersion/Méthodes -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/InstallVersion_Object/Methods ---- -

 

-

Méthodes

-
-
- compareTo()
-
- Compare les informations de version spécifiée dans l'objet à celles spécifiées dans le paramètre version.
-
- init()
-
- Initialise un objet InstallVersion.
-
- toString()
-
- Convertit un objet InstallVersion en chaîne.
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/InstallVersion_Object/Methods" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/init/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/init/index.html" deleted file mode 100644 index df326e2a0f..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/init/index.html" +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: init -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_InstallVersion/Méthodes/init -translation_of: Archive/Mozilla/XPInstall/Reference/InstallVersion_Object/Methods/init ---- -

 

-

init

-

Initialise un objet init.

-

Méthode de

-

Objet InstallVersion

-

Syntaxe

-
init ( int maj, int min, int rev, int bld );
-
-
init ( String version );
-
-

Paramètres

-

La méthode init a les paramètres suivants :

-
-
- maj
-
- Le numéro de version majeur.
-
- min
-
- Le numéro de version mineur.
-
- rev
-
- Le numéro de révision.
-
- bld
-
- Le numéro de compilation.
-
- version
-
- Une chaîne représentant les informations de version au format 4.1.2.1234.
-
-

Lorsque maj, min, rev et bld sont donnés comme paramètres, ils sont tout quatre obligatoires, mais ils peuvent tous être égaux à 0.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/InstallVersion_Object/Methods/init" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/tostring/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/tostring/index.html" deleted file mode 100644 index 8063509a39..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/m\303\251thodes/tostring/index.html" +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: toString -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_InstallVersion/Méthodes/toString -translation_of: Archive/Mozilla/XPInstall/Reference/InstallVersion_Object/Methods/toString ---- -

 

-

toString

-

Convertit un objet InstallVersion init en chaîne.

-

Méthode de

-

Objet InstallVersion

-

Syntaxe

-
String version = InstallVersion.toString ( initObj );
-
-

Paramètres

-

La méthode toString a le paramètre suivant :

-
-
- initObj
-
- initObj est un objet InstallVersion dont la méthode init a été appelée.
-
-

Retour

-

Les nombres majeurs, mineurs, de révision et de compilation représentés dans une chaîne unique.

-

La fonction init() peut entrer le numéro de version comme une chaîne unique ou comme une série de paramètres représentant les numéros de versions de l'installation. Pour sortir le numéro de version d'un objet InstallVersion afin de la comparer avec les autres versions, on peut appeler toString() et récupérer la version sous forme de chaîne au format ""maj.min.rev.bld".

-

Exemple

-
var vi = new InstallVersion();
-vi.init("999.888.777.666"); //Chaîne aléatoire
-viString = vi.toString();
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/InstallVersion_Object/Methods/toString" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/propri\303\251t\303\251s/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/propri\303\251t\303\251s/index.html" deleted file mode 100644 index 01c7a3cf90..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_installversion/propri\303\251t\303\251s/index.html" +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Propriétés -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_InstallVersion/Propriétés -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/InstallVersion_Object/Properties ---- -

 

-

Propriétés

-
-
- major
-
- Élément le plus significatif de l'objet InstallVersion. Par exemple, la version majeure de Netscape 6 est 6.
-
-
-
- minor
-
- Second élément significatif de l'objet InstallVersion. Par exemple la version mineure de Netscape Communicator 4.7 est 7.
-
-
-
- release
-
- Second élément de moindre signification de l'objet InstallVersion.
-
-
-
- build
-
- Élément de moindre signification de l'objet InstallVersion. Par exemple, le buildID, ou ID de compilation, de Netscape 6 est représenté par un datage au format AAAAMMJJHH : 2001031808 signifie que la compilation date de 2001, au mois de mars, le 18e jour du mois, à 8h00.
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/InstallVersion_Object/Properties" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/index.html" deleted file mode 100644 index 2b3678e354..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/index.html" +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Objet WinProfile -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinProfile -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/WinProfile_Object ---- -

WinProfile

-

(Microsoft Windows uniquement)

-

Cet objet peut être utilisé par les développeurs Windows pour manipuler le contenu d'un fichier .ini de Windows.

-

Présentation

-

Cet objet n'a pas de constructeur publique. À la place, vous construisez une instance de cet objet en appelant la méthode getWinProfile de l'objet Install.

-

Les deux méthodes de l'objet WinProfile, getString et writeString, permettent de lire et d'écrire des données dans les paires de clefs/valeurs d'un fichier .ini de Windows.

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/getstring/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/getstring/index.html" deleted file mode 100644 index 8d9f80bb76..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/getstring/index.html" +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: getString -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinProfile/Méthodes/getString -translation_of: Archive/Mozilla/XPInstall/Reference/WinProfile_Object/Methods/getString ---- -

 

-

getString

-

Récupère une valeur d'un fichier .ini.

-

Méthode de

-

Objet WinProfile

-

Syntaxe

-
String getString ( String section, String key);
-
-

Paramètres

-

Cette méthode a les paramètres suivants :

-
-
- section
-
- Le nom d'une section du fichier, tel que boot ou drivers.
-
- key
-
- La clef de la section dont il faut retourner la valeur.
-
-

Retour

-

La valeur de la clef ou une chaîne vide si rien n'a été trouvé.

-

Description

-

Cette méthode getString est semblable à la fonction getPrivateProfileString de l'API de Windows. Contrairement à cette dernière, cette méthode ne supporte pas l'utilisation d'une clef vide pour retourner les listes des clefs de la section.

-

Exemple

-

Pour récupérer le nom du fichier de fond d'écran depuis la section desktop du fichier win.ini, on utilise l'appel :

-
ini = getWinProfile (getFolder("Windows"), "win.ini");
-var wallpaperValue = ini.getString ("Desktop", "Wallpaper");
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinProfile_Object/Methods/getString" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/index.html" deleted file mode 100644 index 0c325a8588..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/index.html" +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Méthodes -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinProfile/Méthodes -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/WinProfile_Object/Methods ---- -

 

-

Méthodes

-
-
- getString
-
- Récupère une valeur dans un fichier .ini.
-
- writeString
-
- Modifie une valeur dans un fichier .ini.
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinProfile_Object/Methods" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/writestring/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/writestring/index.html" deleted file mode 100644 index 46ec4c3801..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winprofile/m\303\251thodes/writestring/index.html" +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: writeString -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinProfile/Méthodes/writeString -translation_of: Archive/Mozilla/XPInstall/Reference/WinProfile_Object/Methods/writeString ---- -

 

-

writeString

-

Changes a value in a .ini file.

-

Méthode de

-

Objet WinProfile

-

Syntaxe

-
Boolean writeString ( String section, String key, String value);
-
-

Paramètres

-

Cette méthode a les paramètres suivants :

-
-
- section
-
- Le nom d'une section du fichier, telle que boot ou drivers.
-
- key
-
- La clef dans cette section dont on veut modifier la valeur.
-
- value
-
- La nouvelle valeur.
-
-

Retour

-

True si correctement programmé, autrement, false.

-

Description

-

La méthode writeString est similaire à la fonction WritePrivateProfileString de l'API de Windows. Pour effacer une valeur existante, fournissez une valeur vide pour le paramètre value. Contrairement à la fonction WritePrivateProfileString, cette méthode ne supporte pas l'utilisation d'une clef vide pour effacer une section entière. Les valeurs ne seront écrites qu'après l'appel de la méthode performInstall.

-

Exemple

-

Pour définir le nom du fichier de fond d'écran depuis la section Desktop du fichier win.ini, on utilise cet appel :

-
ini = getWinProfile (getFolder("Windows"), "win.ini");
-ini.writeString ("Desktop", "Wallpaper", "newpathname");
-
-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinProfile_Object/Methods/writeString" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/index.html" deleted file mode 100644 index 84bff48cfa..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/index.html" +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Objet WinReg -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object ---- -

 

-

WinReg

-

(Microsoft Windows uniquement)

-

Cet objet peut être utilisé par les développeurs pour manipuler le contenu de la base de registre Windows.

-

Présentation

-

Cet objet n'a pas de constructeur public. À la place, vous devez construire une instance de cet objet en appelant la méthode getWinRegistry de l'objet Install.

-

Ce document suppose que vous êtes déjà familier avec la base de registre de Windows. Pour plus d'informations sur elle, voir la documentation de l'API pour Windows.

-

Lors de la construction d'un objet WinReg, il est définit pour opérer avec HKEY_CLASSES_ROOT comme clef racine. Pour utiliser une clef racine différente, il faut utiliser la méthode setRootKey.

-

Généralement, les valeurs de la base de registre sont des chaînes. Pour manipuler de telles chaînes, il faut utiliser les méthodes getValueString et setValueString. Pour manipuler des valeurs d'un autre type, il faut utiliser les méthodes getValue et setValue.

-

La lecture des valeurs de registre est immédiate. Cependant, l'écriture dans la base de registre est retardée jusqu'à l'appel de performInstall.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/createkey/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/createkey/index.html" deleted file mode 100644 index 79b12fcd7e..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/createkey/index.html" +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: createKey -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/createKey -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/createKey ---- -

 

-

createKey

-

Ajoute une clef à la base de registre.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
int createKey ( Chaîne subkey, Chaîne classname);
-
-

Paramètres

-

La méthode createKey a les paramètres suivants :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- classname
-
- Habituellement, une chaîne vide. Pour plus d'informations sur ce paramètre, voir la description de RegCreateKeyEx dans la documentation de l'API Windows.
-
-

Retour

-

0 en cas de succès ou un nombre non nul si l'ordonnancement de la création a échoué. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode createKey ajoute une clef à la base de registre. Il faut ajouter une clef au registre avant de pouvoir lui assigner une valeur.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/createKey" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletekey/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletekey/index.html" deleted file mode 100644 index e05e7dabc8..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletekey/index.html" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: deleteKey -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/deleteKey -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/deleteKey ---- -

 

-

deleteKey

-

Supprime une clef de la base de registre.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
int deleteKey ( String subkey);
-
-

Paramètres

-

La méthode deleteKey a le paramètre suivant :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clef, tel que"Software\\Netscape\\Navigator\\Mail".
-
-

Retours

-

0 en cas de succès ; un nombre non nul si l'ordonnancement de la suppression a échoué. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/deleteKey" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletevalue/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletevalue/index.html" deleted file mode 100644 index a69f08bcd9..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/deletevalue/index.html" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: deleteValue -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/deleteValue -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/deleteValue ---- -

 

-

deleteValue

-

Supprime la valeur d'un clef arbitraire.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
int deleteValue ( Chaîne subkey, Chaîne valname);
-
-

Paramètres

-

La méthode deleteValue a les paramètres suivants :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- valname
-
- Le nom de la paire nom_de_valeur/valeur à supprimer.
-
-

Retours

-

0 en cas de succès ou un nombre non nul si la suppression a échouée.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/deleteValue" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumkeys/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumkeys/index.html" deleted file mode 100644 index 760d620dcd..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumkeys/index.html" +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: enumKeys -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/enumKeys -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/enumKeys ---- -

 

-

enumKeys

-

Énumère les sous-clefs de registre de la clef donnée.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
String enumKeys ( Chaîne key, int subkeyIndex );
-
-

Paramètres

-

La méthode enumKeys a les paramètres suivants :

-
-
- key
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- subkeyIndex
-
- Un entier représentant l'index base 0 de la clef dont on cherche la valeur.
-
-

Retour

-

Le nom en cas de succès ou NULL si la valeur référencée n'existe pas.

-

Description

-

La méthode enumKeys peut être utilisée pour définir une itération dans les sous-clefs d'une clef donnée. L'exemple suivant montre comment utiliser la méthode enumKeys pour trouver le sous-répertoire des plugins dans les différentes installations des navigateurs basés sur Mozilla :

-
var winreg = getWinRegistry();
-winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
-var index = 0;
-var baseKey = "Software\\Mozilla";
-while ( (MozillaVersion = winreg.enumKeys(baseKey,index)) != null )
-{
-  logComment("MozillaVersion = " + MozillaVersion);
-  subkey = baseKey + "\\" + MozillaVersion + "\\Extensions";
-  pluginsDir = winreg.getValueString ( subkey, "Plugins" );
-  if ( pluginsDir )
-    logComment("pluginsDir = " +  pluginsDir);
-  else
-    logComment("No plugins dir for " + baseKey + "\\" + MozillaVersion);
-  index++;
-}
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/enumKeys" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumvaluenames/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumvaluenames/index.html" deleted file mode 100644 index 8eddf182b8..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/enumvaluenames/index.html" +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: enumValueNames -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/enumValueNames -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/enumValueNames ---- -

 

-

enumValueNames

-

Énumère la valeur d'une clef donnée.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
String enumValueNames ( Chaîne key, int subkeyIndex );
-
-

Paramètres

-

La méthode enumValueNames a les paramètres suivants

-
-
-  
-
- key
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- subkeyIndex
-
- Un entier représentant l'index base 0 de la clef dont on cherche la valeur.
-
-

Retour

-

La valeur de la clef en tant que chaîne si l'opération réussit ou NULL si la sous-clef indiquée n'existe pas.

-

Description

-

La méthode enumValueNames peut être utilisée pour exécuter une itération dans les valeurs d'une clef donnée. L'exemple suivant récupère la valeur d'une clef à l'aide de cette méthode :

-
var winreg = getWinRegistry();
-winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
-v1 = winreg.enumValueNames("SOFTWARE\\Mozilla\\", 0);
-logComment("The first subkey value of the Mozilla key: " + v1)
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/enumValueNames" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvalue/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvalue/index.html" deleted file mode 100644 index 09accbd416..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvalue/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: getValue -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/getValue -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/getValue ---- -

 

-

getValue

-

(Netscape 6 et Mozilla ne supportent pas cette méthode)

-

Récupère la valeur d'une clef arbitraire.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
WinRegValue getValue ( Chaîne subkey, Chaîne valname);
-
-

Paramètres

-

La méthode getValue a les paramètres suivants :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- valname
-
- Le nom de la paire nom_de_la_valeur/valeur dont on veut récupérer la valeur.
-
-

Retour

-

Un objet WinRegValue représentant la valeur de la paire nom_de_la_valeur/valeur ou null s'il n'y a pas de valeur ou s'il se produit une erreur. Pour plus d'informations sur ces valeurs, voir WinRegValue.

-

Description

-

La méthode getValue récupère la valeur d'une clef arbitraire. Cette méthode est utilisée si la valeur voulue n'est pas une chaîne. Si la valeur est une chaîne, la méthode getValueString est plus adpatée.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/getValue" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluenumber/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluenumber/index.html" deleted file mode 100644 index 72730a84dc..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluenumber/index.html" +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: getValueNumber -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/getValueNumber -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/getValueNumber ---- -

 

-

getValueNumber

-

Récupère la valeur d'un clef lorsque cette valeur est un nombre.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
Number getValueNumber ( Chaîne subkey, Chaîne valname);
-
-

Paramètres

-

La méthode getValueString a les paramètres suivants :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- valname
-
- Le nom de la paire nom_de_la_valeur/valeur dont on veut récupérer la valeur.
-
-

Retour

-

La valeur du nombre de la clef spécifiée ou null s'il se produit une erreur, la valeur n'a pas été trouvée ou cette valeur n'est pas un nombre.

-

Description

-

La méthode getValueNumber récupère la valeur d'une clef. Si cette valeur n'est pas un nombre, on utilise la méthode getValue.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/getValueNumber" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluestring/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluestring/index.html" deleted file mode 100644 index 176746ce8a..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/getvaluestring/index.html" +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: getValueString -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/getValueString -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/getValueString ---- -

 

-

getValueString

-

Récupère la valeur d'une clef lorsque cette valeur est une chaîne.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
String getValueString ( Chaîne subkey, Chaîne valname);
-
-

Paramètres

-

La méthode getValueString a les paramètres suivants :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- valname
-
- Le nom de la paire nom_de_la_valeur/valeur dont on veut récupérer la valeur.
-
-

Retour

-

Une chaîne représentant la valeur de la paire nom_de_la_valeur/valeur ou null si cela produit une erreur, si la valeur n'a pas été trouvée ou si la valeur n'est pas une chaîne.

-

Description

-

La méthode getValueString récupère la valeur d'une chaîne. Si cette valeur n'est pas une chaîne, on utilise la méthode getValue.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/getValueString" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/index.html" deleted file mode 100644 index df9d96ff76..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/index.html" +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Méthodes -slug: Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes -tags: - - Référence_de_l'API_XPInstall -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods ---- -

 

-

Méthodes

-
-
- createKey
-
- Ajoute une clef.
-
- deleteKey
-
- Supprime une clef.
-
- deleteValue
-
- Supprime la valeur d'un clef arbitraire.
-
- enumKeys
-
- Récupère les sous-clefs de registre de la clef donnée.
-
- enumValueNames
-
- Récupère la valeur de la sous-clef donnée.
-
- getValue
-
- Récupère la valeur d'un clef arbitraire.
-
- getValueNumber
-
- Récupère la valeur d'une clef, lorsque cette valeur est un nombre entier.
-
- getValueString
-
- Récupère la valeur d'une clef, lorsque cette valeur est une chaîne.
-
- isKeyWritable
-
- Retourne si la clef donnée est modifiable ou non.
-
- keyExists
-
- Retourne si la clef donnée existe ou si elle est lisible.
-
- setRootKey
-
- Change la clef racine à laquelle accéder.
-
- setValue
-
- Définit la valeur d'une clef arbitraire.
-
- setValueNumber
-
- Définit la valeur d'un clef, lorsque cette valeur est un nombre entier.
-
- setValueString
-
- Définit la valeur d'une clef, lorsque cette valeur est une chaîne.
-
- valueExists
-
- Retourne si la valeur donnée existe ou non.
-
-

Le constructeur WinRegValue crée un objet WinRegValue.

-

Interwiki Languages Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/iskeywritable/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/iskeywritable/index.html" deleted file mode 100644 index 8a95f850ed..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/iskeywritable/index.html" +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: isKeyWritable -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/isKeyWritable -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/isKeyWritable ---- -

 

-

isKeyWritable

-

Retourne si la clef est accessible en écriture ou non.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
boolean isKeyWritable( chaîne key);
-
-

Paramètres

-

La méthode isKeyWritable a le paramètre suivant :

-
-
- key
-
- Une chaîne représentant le chemin de la clef.
-
-

Retours

-

Une valeur booléenne : true si la clef est accessible en écriture ; false dans le cas contraire.

-

Exemple

-
winreg = getWinRegistry();
-if ( winreg != null )
-{
-    winreg.setRootKey ( winreg.HKEY_LOCAL_MACHINE );
-    if(winreg.isKeyWritable("SOFTWARE"))
-    {
-        //isKeyWritable retourne true
-    }
-    else
-    {
-        //isKeyWritable retourne false
-    }
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/isKeyWritable" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/keyexists/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/keyexists/index.html" deleted file mode 100644 index e13a16cde3..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/keyexists/index.html" +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: keyExists -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/keyExists -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/keyExists ---- -

 

-

keyExists

-

Indique si la clef existe ou non.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
boolean keyExists ( Chaîne key);
-
-

Paramètres

-

La méthode keyExists a le paramètre suivant :

-
-
- key
-
- Une chaîne représentant le chemin de la clef.
-
-

Retours

-

Une valeur booléenne.

-

Description

-

Si l'utilisateur n'a pas d'accès en lecture à la clef donnée, cette méthode retourne false.

-

Exemple

-
winreg = getWinRegistry();
-if ( winreg != null )
-{
-    winreg.setRootKey( winreg.HKEY_LOCAL_MACHINE);
-    if(winreg.keyExists("SOFTWARE\\mozilla"))
-    {
-
-    //keyExists retourne true
-
-    } else {
-
-    //keyExists retourne false
-
-    }
-}
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/keyExists" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setrootkey/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setrootkey/index.html" deleted file mode 100644 index df3bb58d97..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setrootkey/index.html" +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: setRootKey -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/setRootKey -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/setRootKey ---- -

 

-

setRootKey

-

Change la clef racine à laquelle on veut accéder.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
void setRootKey ( int key );
-
-

Paramètres

-

La méthode setRootKey a le paramètre suivant :

-
-
- key
-
- Un nombre entier représentant la clef racine dans la base de registre.
-
-

Retour

-

Aucun.

-

Description

-

La méthode setRootKey change la clef racine.

-

Lorsqu'on crée un objet WinReg, il est défini pour accéder aux clefs de la section HKEY_CLASSES_ROOT de la base de registre. Si on désire accéder à des clefs d'une autre section, il est nécessaire d'utiliser cette méthode pour changer la clef racine.

-

Sur les plate-formes Windows 16-bits, HKEY_CLASSES_ROOT est l'unique valeur validerel et cette méthode n'a aucun effet.

-

Ces clefs racines sont représentées comme champs de l'objet WinReg. Les valeurs possibles sont :

- -

Exemple

-

Pour utiliser la section HKEY_USERS section, utiliser ce code :

-
winreg = getWinRegistry();
-winreg.setRootKey(winreg.HKEY_USERS);
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/setRootKey" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvalue/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvalue/index.html" deleted file mode 100644 index c225685d24..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvalue/index.html" +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: setValue -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/setValue -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/setValue ---- -

 

-

setValue

-

(Netscape 6 and Mozilla ne supporte pas cette méthode)

-

Définit la valeur d'une clef arbitraire.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
String setValue ( Chaîne subkey, Chaîne valname, valeur WinRegValue);
-
-

Paramètres

-

La méthode setValue a les paramètres suivants :

-
-
-  
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clef, tel que"Software\\Netscape\\Navigator\\Mail".
-
- valname
-
- Le nom de la paire nom_de_valeur/valeur à modifier.
-
- value
-
- Un objet WinRegValue représentant une nouvelle valeur différente d'une chaîne. Pour plus d'informations sur ces valeurs, voir WinRegValue.
-
-
-
- subkey
-
-

Retours

-

0 en cas de succès ; un nombre non nul si l'ordonnancement de la modification a échoué. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

 

-

Description

-

La méthode setValue définit la valeur d'une clef arbitraire. Elle est utilisée si la valeur n'est pas une chaîne. Si la valeur est une chaîne, la méthode setValueString est plus appropriée.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/setValue" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluenumber/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluenumber/index.html" deleted file mode 100644 index f50c659e14..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluenumber/index.html" +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: setValueNumber -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/setValueNumber -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/setValueNumber ---- -

 

-

setValueNumber

-

Définit la valeur d'une clef lorsque cette valeur est un nombre.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
int setValueNumber ( Chaîne subkey, Chaîne valname, Nombre value );
-
-

Paramètres

-

La méthode a les paramètres suivants :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que"Software\\Netscape\\Navigator\\Mail".
-
- valname
-
- Le nom de la paire nom_de_valeur/valeur à modifier.
-
- value
-
- Un nombre représentant la nouvelle valeur.
-
-

Retour

-

0 en cas de succès ou un nombre non nul si l'ordonnancement de la modification a échoué. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode setValueNumber définit la valeur d'une clef lorsque cette valeur est un nombre. Cette méthode est utilisée si la valeur à définir est un nombre. Si la valeur n'est pas un nombre, il faut utiliser les méthodes setValue ou setValueString.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/setValueNumber" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluestring/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluestring/index.html" deleted file mode 100644 index bb0b166bd4..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/setvaluestring/index.html" +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: setValueString -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/setValueString -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/setValueString ---- -

 

-

setValueString

-

Définit la valeur d'une clef lorsque cette valeur est une chaîne.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
int setValueString ( Chaîne subkey, Chaîne valname, Chaîne value);
-
-

Paramètres

-

La méthode setValueString a les paramètres suivants :

-
-
- subkey
-
- Le chemin de la clef vers l'emplacement approprié dans la hiérarchie de clefs, tel que "Software\\Netscape\\Navigator\\Mail".
-
- valname
-
- Le nom de la paire nom_de_valeur/valeur à modifier.
-
- value
-
- La nouvelle valeur chaîne.
-
-

Retour

-

0 en cas de succès ou un nombre non nul si l'ordonnancement de la modification a échoué. Pour la liste complète des valeurs possibles, voir Codes retournés.

-

Description

-

La méthode setValueString définit la valeur d'une clef lorsque cette valeur est une chaîne. Cette méthode est utilisée si la valeur qu'on veut définir est une chaîne. Dans le cas contraire, il faut utiliser la méthode setValue.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/setValueString" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/valueexists/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/valueexists/index.html" deleted file mode 100644 index c879f01034..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/m\303\251thodes/valueexists/index.html" +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: valueExists -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/Méthodes/valueExists -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/Methods/valueExists ---- -

 

-

valueExists

-

Retourne si une valeur existe pour une clé données.

-

Méthode de

-

Objet WinReg

-

Syntaxe

-
boolean valueExists ( chaîne key, chaîne value );
-
-

Paramètres

-

La méthode valueExists a les paramètres suivants :

-
-
- key
-
- Une chaîne représentant le chemin de la clef.
-
- value
-
- Une chaîne représentant la valeur à chercher.
-
-

Retour

-

Une valeur booléenne : true si la clef existe et si l'utilisateur a accès en lecture, false dans le cas contraire.

-

Exemple

-
winreg = getWinRegistry();
-if ( winreg != null )
-{
-    winreg.setRootKey( winreg.HKEY_LOCAL_MACHINE);
-    if(winreg.valueExists("SOFTWARE\\mozilla", "value name"))
-    {
-    //valueExists retourne true
-    } else {
-    //valueExists retourne false
-    }
-}
-
-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/Methods/valueExists" } ) }}

diff --git "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/winregvalue/index.html" "b/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/winregvalue/index.html" deleted file mode 100644 index 2d3fe83cb1..0000000000 --- "a/files/fr/archive/mozilla/xpinstall/r\303\251f\303\251rence_de_l_api_xpinstall/objet_winreg/winregvalue/index.html" +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: WinRegValue -slug: >- - Archive/Mozilla/XPInstall/Référence_de_l_API_XPInstall/Objet_WinReg/WinRegValue -translation_of: Archive/Mozilla/XPInstall/Reference/WinReg_Object/WinRegValue ---- -

 

-

Constructeur winRegValue

-

(Microsoft Windows uniquement)

-

Crée un objet WinRegValue.

-

Syntaxe

-
WinRegValue ( int datatype, byte[] regdata);
-
-

Paramètres

-

Le contructeur WinRegValue a les paramètres suivants :

-
-
- datatype
-
- Un nombre entier indiquant le type de données compris dans cet objet. Les valeurs possibles sont : -
-
- WinRegValue.REG_SZ = 1
-
- WinRegValue.REG_EXPAND_SZ = 2
-
- WinRegValue.REG_BINARY = 3
-
- WinRegValue.REG_DWORD = 4
-
- WinRegValue.REG_DWORD_LITTLE_ENDIAN = 4
-
- WinRegValue.REG_DWORD_BIG_ENDIAN = 5
-
- WinRegValue.REG_LINK = 6
-
- WinRegValue.REG_MULTI_SZ = 7
-
- WinRegValue.REG_RESOURCE_LIST = 8
-
- WinRegValue.REG_FULL_RESOURCE_DESCRIPTOR = 9
-
- WinRegValue.REG_RESOURCE_REQUIREMENTS_LIST = 10
-
-
-
-
-
- regdata
-
- Un tableau Java - - bytes - contenant les données.
-
-

Retour

-

Un nouvel objet WinRegValue, avec le type de données compris et les données définies aux valeurs passées à ce constructeur.

-

Description

-

Les développeurs Windows avancés peuvent utiliser cet objet pour manipuler des valeurs qui ne sont pas des chaînes dans la base de registre de Microsoft Windows.

-

Un objet de ce type a deux champs : le type des données et la valeur. Pour plus d'informations sur les types des données possibles pour une valeur du registre, voir la documentation de l'API Windows. Vous fournissez la valeur de ces champs au constructeur de cette classe.

-

Interwiki Language Links

-

{{ languages( { "en": "en/XPInstall_API_Reference/WinReg_Object/WinRegValue" } ) }}

diff --git a/files/fr/archive/mozilla/xul/attributs/acceltext/index.html b/files/fr/archive/mozilla/xul/attributs/acceltext/index.html deleted file mode 100644 index c48e829509..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/acceltext/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: acceltext -slug: Archive/Mozilla/XUL/Attributs/acceltext -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/acceltext ---- -
- « Accueil de la référence XUL
-
-
- acceltext
-
- Type : chaîne de caractères
-
- Texte qui apparaîtra à côté du label d'un menu pour indiquer la touche de raccourci (accélérateur) à utiliser pour invoquer la commande. Si cette valeur est définie, elle écrase une clé assignée dans l'attribut key. Cet attribut ne s'applique pas aux menus directement sur la Barre de menus (menubar).
-
diff --git a/files/fr/archive/mozilla/xul/attributs/accesskey/index.html b/files/fr/archive/mozilla/xul/attributs/accesskey/index.html deleted file mode 100644 index 4b89962e66..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/accesskey/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: accesskey -slug: Archive/Mozilla/XUL/Attributs/accesskey -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/accesskey ---- -
« Accueil de la référence XUL
-
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
Elle sera généralement affichée soulignée, mais ce comportement est spécifique à la plateforme et au thème. Lorsque l'utilisateur appuie sur ALT (ou une touche similaire variant d'une plateforme à l'autre) et la touche d'accès, l'élément sera activé depuis n'importe où dans la fenêtre. Bien que la valeur ne soit pas sensible à la casse, la lettre correspondant à la casse de l'attribut accesskey sera utlisée si les deux casses existent dans le label. -
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

diff --git a/files/fr/archive/mozilla/xul/attributs/align/index.html b/files/fr/archive/mozilla/xul/attributs/align/index.html deleted file mode 100644 index 46e84c1900..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/align/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: align -slug: Archive/Mozilla/XUL/Attributs/align -tags: - - Attributs_XUL - - Référence_XUL - - XUL -translation_of: Archive/Mozilla/XUL/Attribute/align ---- -
- « Accueil de la référence XUL
-
-
- align
-
- Type : - - une des valeurs ci-dessous -
-
- L'attribut align spécifie la manière dont les éléments enfants de la boîte sont alignés lorsque la taille de celle-ci est plus grande que la taille totale de ses enfants. Pour les boîtes orientées horizontalement, il spécifie la manière dont les enfants seront alignés verticalement. Pour les boîtes dont l'orientation est verticale, il est utilisé pour indiquer la manière dont ils seront alignés horizontalement. L'attribut pack est lié à l'alignement mais est utilisé pour spécifier la position dans la direction opposée. Il est également possible de spécifier la valeur d'align à l'aide de la propriété de style -moz-box-align.
-
- -
-

Voir également

-

L'attribut pack.

-
diff --git a/files/fr/archive/mozilla/xul/attributs/allowevents/index.html b/files/fr/archive/mozilla/xul/attributs/allowevents/index.html deleted file mode 100644 index 79ccf6cd21..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/allowevents/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: allowevents -slug: Archive/Mozilla/XUL/Attributs/allowevents -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/allowevents ---- -
« Accueil de la référence XUL
-
allowevents -
Type : booléen -
Si défini à true, les évènements sont passés aux enfants de l'élément. Dans le cas contraire, ils ne sont passés qu'à l'élément lui-même. -
-
-

Sur les éléments listitem et titlebar, les évènements souris ne sont normalement pas envoyés aux enfants ; ils sont plutôt redirigés vers les éléments listitem et titlebar eux-mêmes. Cela signifie que les éléments placés dans un listitem ne répondent pas aux évènements, et qu'un clic de la souris sélectionne simplement cet objet dans la liste. En définissant l'attribut allowevents à true, ce comportement particulier est désactivé, et les évènements sont dirigés de la même manière que pour les autres éléments. -

Pour les éléments menu, menuseparator, menuitem et treecol, ainsi que les boutons de menus et le popup datepicker, les évènements souris sont également redirigés vers l'élément lui-même. Cependant, l'attribut allowevents est traité d'une manière différente. Il peut alors être défini à true sur un descendant à la place. C'est ce qui permet aux évènements d'être ciblés normalement, mais d'être différents pour chaque descendant. -

Ce comportement est notamment utilisé pour des menus, afin de permettre à un bouton de menu de se comporter comme un menu lors d'un clic, tandis qu'une partie du menu pourra se comporter comme un bouton. Pour cette dernière, l'attribut allowevents est défini à true pour qu'un clic sur le bouton enfant reçoive les évènements plutôt qu'il soient tous dirigés vers le menu. -

-
diff --git a/files/fr/archive/mozilla/xul/attributs/allownegativeassertions/index.html b/files/fr/archive/mozilla/xul/attributs/allownegativeassertions/index.html deleted file mode 100644 index f45b88d10c..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/allownegativeassertions/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: allownegativeassertions -slug: Archive/Mozilla/XUL/Attributs/allownegativeassertions -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/allownegativeassertions ---- -
« Accueil de la référence XUL
-
allownegativeassertions -
Type : booléen -
Valide sur tout élément disposant d'un attribut datasources. Lorsque plusieurs sources de données sont utilisées, l'une d'entre-elles peut écraser une assertion provenant d'une autre. Si cet attribut est à true, ce qui est sa valeur par défaut, une source de données peut contredire une assertion précédente. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/buttondisabledaccept/index.html b/files/fr/archive/mozilla/xul/attributs/buttondisabledaccept/index.html deleted file mode 100644 index 0e465ffa3a..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/buttondisabledaccept/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: buttondisabledaccept -slug: Archive/Mozilla/XUL/Attributs/buttondisabledaccept -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/buttondisabledaccept ---- -
« Accueil de la référence XUL
-
buttondisabledaccept -
Type : booléen -
Si défini à true, le bouton d'acceptation est initialement désactivé. -
-


-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/checked/index.html b/files/fr/archive/mozilla/xul/attributs/checked/index.html deleted file mode 100644 index 688f898817..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/checked/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: checked -slug: Archive/Mozilla/XUL/Attributs/checked -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/checked ---- -
- « Accueil de la référence XUL
-
-
- checked
-
- Type : - - booléen -
-
- Indique si l'élément est coché ou non.
-
- Utilisez hasAttribute() pour déterminer si cet attribut est défini plutôt que getAttribute().
- Pour les boutons, l'attribut type doit etre mis à checkbox ou à radio pour qu'un effet soit perceptible.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/class/index.html b/files/fr/archive/mozilla/xul/attributs/class/index.html deleted file mode 100644 index 04ee6410f4..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/class/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: class -slug: Archive/Mozilla/XUL/Attributs/class -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/class ---- -
« Accueil de la référence XUL
-
class -
Type : chaîne de caractères -
La classe de style de l'élément. Plusieurs classes peuvent être spécifiées en les séparant par des espaces. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/coalesceduplicatearcs/index.html b/files/fr/archive/mozilla/xul/attributs/coalesceduplicatearcs/index.html deleted file mode 100644 index 83dff23276..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/coalesceduplicatearcs/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: coalesceduplicatearcs -slug: Archive/Mozilla/XUL/Attributs/coalesceduplicatearcs -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/coalesceduplicatearcs ---- -
« Accueil de la référence XUL
-
coalesceduplicatearcs -
Type : booléen -
Valide sur tout élément disposant d'un attribut datasources. Lorsque plusieurs sources de données sont utilisées, l'une d'entre-elles peut écraser une assertion provenant d'une autre. Si cet attribut est à true, ce qui est sa valeur par défaut, une source de données peut contredire une assertion précédente. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/collapsed/index.html b/files/fr/archive/mozilla/xul/attributs/collapsed/index.html deleted file mode 100644 index c6b879a729..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/collapsed/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: collapsed -slug: Archive/Mozilla/XUL/Attributs/collapsed -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/collapsed ---- -
« Accueil de la référence XUL
-
collapsed -
Type : booléen -
Si défini à true, l'élément est réduit et n'est pas visible. C'est l'équivalent de définir la propriété CSS visibility à « collapse ». -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/command/index.html b/files/fr/archive/mozilla/xul/attributs/command/index.html deleted file mode 100644 index e240ec9f15..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/command/index.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: command -slug: Archive/Mozilla/XUL/Attributs/command -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/command ---- -
« Accueil de la référence XUL
-
command -
Type : id d'élément -
Défini à la valeur de l'id d'un élément command observé par l'élément. -
-
-

Exemple

-
<command id="cmd_openhelp" oncommand="alert('Aide');"/>
-<button label="Aide" command="cmd_openhelp"/>
-<button label="Plus d'aide" command="cmd_openhelp"/>
-
-

Voir également

-

L'élément command, l'attribut oncommand et l'élément commandset. -

-
diff --git a/files/fr/archive/mozilla/xul/attributs/container/index.html b/files/fr/archive/mozilla/xul/attributs/container/index.html deleted file mode 100644 index da385d1751..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/container/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: container -slug: Archive/Mozilla/XUL/Attributs/container -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/container ---- -
« Accueil de la référence XUL
-
container -
Type : booléen -
Défini à true si l'élément doit agir comme un conteneur pouvant avoir des éléments enfants. Ceci peut être utilisé pour des dossiers. Cet attribut sera défini par le constructeur de template si nécessaire. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/containment/index.html b/files/fr/archive/mozilla/xul/attributs/containment/index.html deleted file mode 100644 index 47d917f06b..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/containment/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: containment -slug: Archive/Mozilla/XUL/Attributs/containment -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/containment ---- -
« Accueil de la référence XUL
-
containment -
Type : URI d'un prédicat RDF -
Cet attribut spécifie des propriétés RDF indiquant qu'ne ressource est un conteneur. Lors de la génération de contenu depuis un template, ceci est utilisé pour déterminer quelles ressources de la source de données sont des conteneurs et peuvent donc avoir des nœuds enfants, et lesquelles ne le sont pas. -
-
Cet attribut doit être placé sur le même élément que les attributs datasources et ref. Il peut être défini comme une liste de propriétés ou ressources RDF séparées par des espaces. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/context/index.html b/files/fr/archive/mozilla/xul/attributs/context/index.html deleted file mode 100644 index 13e130ea04..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/context/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: context -slug: Archive/Mozilla/XUL/Attributs/context -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/context ---- -
« Accueil de la référence XUL
-
context -
Type : id de l'élément popup -
Doit être défini à la valeur de l'id de l'élément popup devant apparaître lorsque l'utilisateur fait un clic contextuel sur l'élément. La manière de réaliser un clic contextuel diffère selon la plateforme. Habituellement il s'agira d'un clic droit. La valeur spéciale « _child » peut être utilisée pour indiquer le premier menupopup enfant de l'élément. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/contextmenu/index.html b/files/fr/archive/mozilla/xul/attributs/contextmenu/index.html deleted file mode 100644 index 9f11c2f1d6..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/contextmenu/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: contextmenu -slug: Archive/Mozilla/XUL/Attributs/contextmenu -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/contextmenu ---- -
« Accueil de la référence XUL
-
contextmenu -
Type : id d'un élément popup -
Nom alternatif pour l'attribut context, mais dispose également d'une propriété de script correspondante « contextmenu ». -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/crop/index.html b/files/fr/archive/mozilla/xul/attributs/crop/index.html deleted file mode 100644 index 6ee6cd1d52..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/crop/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: crop -slug: Archive/Mozilla/XUL/Attributs/crop -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/crop ---- -
« Accueil de la référence XUL
-
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- -
-
Selon la plateforme et le thème utilisé, certains éléments auront une largeur maximale définie de sorte qu'ils seront toujours tronqués. Si vous décidez d'utiliser la valeur none et que le texte est plus grand que cette valeur maximale, vous pouvez faire usage de la propriété CSS max-width (ou de l'attribut maxwidth) pour agrandir cette taille. Par exemple, pour un élément de menu vous pouvez ajouter la règle CSS suivante lorsque vous désirez utiliser la valeur none : -
-
menupopup > menuitem, menupopup > menu { max-width: none; }
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/datasources/index.html b/files/fr/archive/mozilla/xul/attributs/datasources/index.html deleted file mode 100644 index 98dd93bbe1..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/datasources/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: datasources -slug: Archive/Mozilla/XUL/Attributs/datasources -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/datasources ---- -
« Accueil de la référence XUL
-
datasources -
Type : liste d'URI datasource séparées par des espaces -
Une liste séparée par des espaces de sources de données que le template d'un élément utilisera pour la génération de contenu. Il peut s'agir tant de sources de données internes comme rdf:bookmarks que de l'URL d'un fichier RDF. L'attribut datasources peut être placé sur la plupart des éléments, bien qu'il se trouve le plus souvent sur des arbres (tree) et menupopups. L'élément doit avoir un élément de template comme enfant. -
-
Les sources de données spécifiées sont combinées en une source de données composite unique qui conserve les données de toutes les sources. Cette source composite est accessible via un script au travers de la propriété database. -
-
Si vous envisagez d'ajouter une source de données à un élément mais ne désirez pas l'ajouter immédiatement, définissez cette propriété à « rdf:null ». Cela préparera l'élément à ce que son contenu soit généré depuis une source de données. Autrement, il ne sera pas possible d'en ajouter une par la suite. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/datepicker.type/index.html b/files/fr/archive/mozilla/xul/attributs/datepicker.type/index.html deleted file mode 100644 index 6046455950..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/datepicker.type/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: datepicker.type -slug: Archive/Mozilla/XUL/Attributs/datepicker.type -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/datepicker.type ---- -
- « Accueil de la référence XUL
-
-
- type
-
- Type : une des valeurs suivantes
-
- L'attribut type peut avoir l'une des valeurs ci-dessous afin de spécifier le type de sélecteur de date à utiliser :
-
- -
-
-
- Type normal
-
- Image:Controlsguide-datepicker.png
-
- Type grid
-
- Image:Controlsguide-datepicker-grid.png
-
- Type popup
-
- Image:Controlsguide-datepicker-popup.png
-
-
-

 

diff --git a/files/fr/archive/mozilla/xul/attributs/datepicker.value/index.html b/files/fr/archive/mozilla/xul/attributs/datepicker.value/index.html deleted file mode 100644 index a05c4e5b51..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/datepicker.value/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: datepicker.value -slug: Archive/Mozilla/XUL/Attributs/datepicker.value -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/datepicker.value ---- -
- « Accueil de la référence XUL
-
-
- value
-
- Type : chaîne
-
- La valeur initiale du sélecteur de date sous la forme AAAA/MM/JJ.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/dir/index.html b/files/fr/archive/mozilla/xul/attributs/dir/index.html deleted file mode 100644 index a2f4cce3d4..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/dir/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: dir -slug: Archive/Mozilla/XUL/Attributs/dir -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/dir ---- -
- « Accueil de la référence XUL
-
-
- dir
-
- Type : - - une des valeurs ci-dessous -
-
- La direction dans laquelle les éléments enfants de l'élément seront placés.
-
- -
-

Voir également

- -
-

 

diff --git a/files/fr/archive/mozilla/xul/attributs/disabled/index.html b/files/fr/archive/mozilla/xul/attributs/disabled/index.html deleted file mode 100644 index a397863950..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/disabled/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: disabled -slug: Archive/Mozilla/XUL/Attributs/disabled -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/disabled ---- -
« Accueil de la référence XUL
-
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
L'élément répondra cependant encore aux évènements souris. Pour activer l'élément, ne spécifiez simplement pas cet attribut plutôt que de définir sa valeur à false. -
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
diff --git a/files/fr/archive/mozilla/xul/attributs/empty/index.html b/files/fr/archive/mozilla/xul/attributs/empty/index.html deleted file mode 100644 index 0dc77fd889..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/empty/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: empty -slug: Archive/Mozilla/XUL/Attributs/empty -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/empty ---- -
« Accueil de la référence XUL
-
empty -
Type : booléen -
Défini à true si l'élément est un conteneur qui ne contient aucun enfant. Il sera défini par le constructeur de template si nécessaire. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/equalsize/index.html b/files/fr/archive/mozilla/xul/attributs/equalsize/index.html deleted file mode 100644 index c9af38b1aa..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/equalsize/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: equalsize -slug: Archive/Mozilla/XUL/Attributs/equalsize -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/equalsize ---- -
« Accueil de la référence XUL
-
equalsize -
Type : une des valeurs ci-dessous -
Cet attribut peut être utilisé pour rendre les enfants d'un élément égaux en taille. -
- -
-
diff --git a/files/fr/archive/mozilla/xul/attributs/firstdayofweek/index.html b/files/fr/archive/mozilla/xul/attributs/firstdayofweek/index.html deleted file mode 100644 index c94dc80095..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/firstdayofweek/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: firstdayofweek -slug: Archive/Mozilla/XUL/Attributs/firstdayofweek -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/firstdayofweek ---- -
« Accueil de la référence XUL
-
firstdayofweek -
Type : entier -
Indique le jour de la semaine à afficher comme premier jour dans la grille. Les valeurs vont de 0 à 6, où 0 est dimanche et 6 est samedi. La valeur par défaut est déterminée par la locale, n'utilisez donc cet attribut que si vous désirez l'écraser. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/flags/index.html b/files/fr/archive/mozilla/xul/attributs/flags/index.html deleted file mode 100644 index 28e4635cac..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/flags/index.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: flags -slug: Archive/Mozilla/XUL/Attributs/flags -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/flags ---- -
« Accueil de la référence XUL
-
flags -
Type : liste de valeurs (voir ci-dessous) séparées par des espaces -
Un ensemble de drapeaux destinés à différentes utilisations. Deux sont définis, et peuvent être la valeur de cet attribut. -
- -


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/flex/index.html b/files/fr/archive/mozilla/xul/attributs/flex/index.html deleted file mode 100644 index cd561f66c1..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/flex/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: flex -slug: Archive/Mozilla/XUL/Attributs/flex -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/flex ---- -
« Accueil de la référence XUL
-
flex -
Type : chaîne de caractères (représentant un entier) -
Indique la flexibilité de l'élément, c'est-à-dire la façon dont le conteneur d'un élément distribue l'espace libre restant parmi ses enfants. Les éléments flexibles s'étendent et rétrécissent pour remplir leur espace donné. Les éléments qui ont les plus grandes valeurs pour flex seront plus grands que ceux qui ont des valeurs plus petites, selon un rapport déterminé par les valeurs données par chaque élément. La valeur réelle n'est pas indicative, à moins qu'il y ait d'autres éléments flexibles dans le même conteneur. Une fois que les tailles par défaut des éléments dans une boîte ont été calculées, l'espace restant est divisé entre les éléments flexibles, selon leurs coefficients pour flex. Indiquer une valeur de 0 pour flex équivaut à ne pas préciser du tout d'attribut flex.
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/height/index.html b/files/fr/archive/mozilla/xul/attributs/height/index.html deleted file mode 100644 index 967d50b72f..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/height/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: height -slug: Archive/Mozilla/XUL/Attributs/height -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/height ---- -
« Accueil de la référence XUL
-
height -
Type : chaîne de caractères (représentant un entier) -
La hauteur préférée de l'élément en pixels. La hauteur réellement affichée peut être différentes si l'élément ou son contenu ont une hauteur minimum ou maximum. La propriété CSS height peut également être utilisée. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/helpuri/index.html b/files/fr/archive/mozilla/xul/attributs/helpuri/index.html deleted file mode 100644 index e168011f5e..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/helpuri/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: helpURI -slug: Archive/Mozilla/XUL/Attributs/helpURI -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/helpURI ---- -
- « Accueil de la référence XUL
-
-
- helpURI
-
- Type : URI
-
- L'URI de la page d'aide associée avec un panneau de préférences. Celle-ci sera ouverte dans une fenêtre d'aide lors de l'appui sur le bouton d'aide.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/hidden/index.html b/files/fr/archive/mozilla/xul/attributs/hidden/index.html deleted file mode 100644 index ad1afbfed5..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/hidden/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: hidden -slug: Archive/Mozilla/XUL/Attributs/hidden -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/hidden ---- -
« Accueil de la référence XUL
-
hidden -
Type : booléen -
Si défini à true, l'élément n'est pas affiché. Cet attribut est similaire à la valeur « none » de la propriété CSS display. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/hidechrome/index.html b/files/fr/archive/mozilla/xul/attributs/hidechrome/index.html deleted file mode 100644 index 9793b3aced..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/hidechrome/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: hidechrome -slug: Archive/Mozilla/XUL/Attributs/hidechrome -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/hidechrome ---- -
« Accueil de la référence XUL
-
hidechrome -
Type : booléen -
Définissez cet attribut à true pour que le chrome, en ce compris la barre de titre, soit caché. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/hideseconds/index.html b/files/fr/archive/mozilla/xul/attributs/hideseconds/index.html deleted file mode 100644 index 1ba80accbe..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/hideseconds/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: hideseconds -slug: Archive/Mozilla/XUL/Attributs/hideseconds -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/hideseconds ---- -
- « Accueil de la référence XUL
-
-
- hideseconds
-
- Type : booléen
-
- Indique si le champ des secondes doit être masqué.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/id/index.html b/files/fr/archive/mozilla/xul/attributs/id/index.html deleted file mode 100644 index 5c27d4d48d..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/id/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: id -slug: Archive/Mozilla/XUL/Attributs/id -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/id ---- -
« Accueil de la référence XUL
-
id -
Type : id d'élément, doit être unique dans la fenêtre -
Un identifiant unique permettant d'identifier l'élément. Celui-ci peut être utilisé comme paramètre pour getElementById() et d'autres fonctions DOM et pour référencer l'élément dans des feuilles de style. -
-
-

Exemple

-
<button id="foo" label="Cliquez ici" oncommand="doSomething()"/>
-
-<script>
-function doSomething(){
-    var myButton = document.getElementById('foo');
-    myButton.setAttribute('label','On a cliqué sur le bouton');
-}
-</script>
-
-

Une version plus abstraite de ce code serait un -

-
<button id="foo" label="Cliquez ici" oncommand="setWidgetLabel(this, 'On m\' a cliqué dessus')"/>
-<script>
-function setWidgetLabel(idName, newCaption){
-   document.getElementById( idName.id ).setAttribute('label',newCaption)
-}
-
-</script>
-
-

Voir également

-

name -

-
diff --git a/files/fr/archive/mozilla/xul/attributs/image/index.html b/files/fr/archive/mozilla/xul/attributs/image/index.html deleted file mode 100644 index b9e988be89..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/image/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: image -slug: Archive/Mozilla/XUL/Attributs/image -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/image ---- -
« Accueil de la référence XUL
-
image -
Type : URL d'une image -
L'URL de l'image devant apparaître sur l'élément. Si cet attribut est vide ou omis, aucune image n'apparaîtra. La position de l'image est déterminée par les attributs dir et orient. -
-
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/increment/index.html b/files/fr/archive/mozilla/xul/attributs/increment/index.html deleted file mode 100644 index 7c279c8953..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/increment/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: increment -slug: Archive/Mozilla/XUL/Attributs/increment -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/increment ---- -
- « Accueil de la référence XUL
-
-
- increment
-
- Type : - - entier -
-
- La quantité dont l'attribut value (pour les boîtes numériques et les échelles) or curpos<magic name="\"PAGENAME\"/"> (pour les barres de défilement) </magic> change lorsque l'on clique sur les flèches. La valeur par défaut est 1.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/index.html b/files/fr/archive/mozilla/xul/attributs/index.html deleted file mode 100644 index ca4be7d5ed..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/index.html +++ /dev/null @@ -1,281 +0,0 @@ ---- -title: Attributs -slug: Archive/Mozilla/XUL/Attributs -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute ---- -

« Accueil de la référence XUL

- -
- -
- -
 
diff --git a/files/fr/archive/mozilla/xul/attributs/insertafter/index.html b/files/fr/archive/mozilla/xul/attributs/insertafter/index.html deleted file mode 100644 index 8c5d0db612..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/insertafter/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: insertafter -slug: Archive/Mozilla/XUL/Attributs/insertafter -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/insertafter ---- -
« Accueil de la référence XUL
-
insertafter -
Type : id d'élément -
Lorsqu'un élément est un overlay, l'attribut insertafter spécifie l'id de l'élément dans la fenêtre de base après lequel l'élément overlay doit apparaitre. Cet attribut a priorité sur l'attribut insertbefore. Cette valeur peut être une liste d'id séparés par des virgules, et c'est alors le premier d'entre-eux trouvé dans la fenêtre qui sera utilisé. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/insertbefore/index.html b/files/fr/archive/mozilla/xul/attributs/insertbefore/index.html deleted file mode 100644 index ad0d6731d2..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/insertbefore/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: insertbefore -slug: Archive/Mozilla/XUL/Attributs/insertbefore -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/insertbefore ---- -
« Accueil de la référence XUL
-
insertbefore -
Type : id d'élément -
Lorsqu'un élément est un overlay, l'attribut insertafter spécifie l'id de l'élément dans la fenêtre de base avant lequel l'élément overlay doit apparaitre. Cette valeur peut être une liste d'id séparés par des virgules, et c'est alors le premier d'entre-eux trouvé dans la fenêtre qui sera utilisé. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/instantapply/index.html b/files/fr/archive/mozilla/xul/attributs/instantapply/index.html deleted file mode 100644 index 2b4c0b74bf..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/instantapply/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: instantApply -slug: Archive/Mozilla/XUL/Attributs/instantApply -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/instantApply ---- -
« Accueil de la référence XUL
-
instantApply -
Type : booléen -
Si sa valeur est true, la préférence sera modifiée dès que l'élément d'interface utilisateur est modifié. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/inverted/index.html b/files/fr/archive/mozilla/xul/attributs/inverted/index.html deleted file mode 100644 index 0b5241236e..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/inverted/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: inverted -slug: Archive/Mozilla/XUL/Attributs/inverted -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/inverted ---- -
« Accueil de la référence XUL
-
inverted -
Type : booléen -
Pour les préférences booléennes, l'indication de cet attribut à true indique que la valeur de la préférence est l'inverse de celle de l'élément d'interface utilisateur qui y est attaché. Par exemple, elle fait en sorte que cocher une case désactive la préférence associée au lieu de l'activer. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/label/index.html b/files/fr/archive/mozilla/xul/attributs/label/index.html deleted file mode 100644 index afe9b0ed31..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/label/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: label -slug: Archive/Mozilla/XUL/Attributs/label -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/label ---- -
« Accueil de la référence XUL
-
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
-
-

Voir également

- -

Exemples en JavaScript

-
<label value="Whaw" id="the-big-label" command="the-big-button"/>
-<button id="the-big-button" label="Cliquez ici"
-	oncommand="alert(document.getElementById('the-big-label').value)"/>
-
-<label id="myLabel" value="Mon label"/>
-<button label="Cliquez ici"
-	oncommand="document.getElementById('myLabel').setAttribute('value','Valeur modifiée');" />
-
-<checkbox label="ma case à cocher" id="myCheckboX"/>
-<button label="Un autre clic"
-	oncommand="document.getElementById('myCheckboX').setAttribute('label','Toujours pas cochée');"/>
-<button label="Afficher le label de la checkbox"
-	oncommand="alert( document.getElementById('myCheckboX').getAttribute('label') )"/>
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/left/index.html b/files/fr/archive/mozilla/xul/attributs/left/index.html deleted file mode 100644 index 1a4529d526..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/left/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: left -slug: Archive/Mozilla/XUL/Attributs/left -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/left ---- -
« Accueil de la référence XUL
-
left -
Type : chaîne de caractères (représentant un entier) -
Pour les éléments placés directement dans un stack, spécifie la distance en pixels du bord gauche de l'élément par rapport au bord gauche du stack. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/max/index.html b/files/fr/archive/mozilla/xul/attributs/max/index.html deleted file mode 100644 index 5d671a265e..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/max/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: max -slug: Archive/Mozilla/XUL/Attributs/max -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/max ---- -
- « Accueil de la référence XUL
-
-
- max
-
- Type : - - entier -
-
- La valeur maximum que peut prendre l'élément scale ou number box. La valeur par défaut est 100 pour les éléments scale et Infinity pour les boîtes numériques
-
diff --git a/files/fr/archive/mozilla/xul/attributs/maxheight/index.html b/files/fr/archive/mozilla/xul/attributs/maxheight/index.html deleted file mode 100644 index 57b9480a9a..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/maxheight/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: maxheight -slug: Archive/Mozilla/XUL/Attributs/maxheight -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/maxheight ---- -
« Accueil de la référence XUL
-
maxheight -
Type : chaîne de caractères (représentant un entier) -
La hauteur maximum de l'élément. Ceci correspond à la propriété CSS max-height. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/maxwidth/index.html b/files/fr/archive/mozilla/xul/attributs/maxwidth/index.html deleted file mode 100644 index 3bb415967d..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/maxwidth/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: maxwidth -slug: Archive/Mozilla/XUL/Attributs/maxwidth -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/maxwidth ---- -
« Accueil de la référence XUL
-
maxwidth -
Type : chaîne de caractères (représentant un entier) -
La largeur maximum de l'élément. Ceci correspond à la propriété CSS max-width. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/menu/index.html b/files/fr/archive/mozilla/xul/attributs/menu/index.html deleted file mode 100644 index d1c01d2937..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/menu/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: menu -slug: Archive/Mozilla/XUL/Attributs/menu -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/menu ---- -
« Accueil de la référence XUL
-
menu -
Type : id d'un élément popup -
Nom alternatif pour l'attribut popup, mais dispose également d'une propriété de script « menu ». -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/min/index.html b/files/fr/archive/mozilla/xul/attributs/min/index.html deleted file mode 100644 index 4bdf8e4479..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/min/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: min -slug: Archive/Mozilla/XUL/Attributs/min -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/min ---- -
- « Accueil de la référence XUL
-
-
- min
-
- Type : - - entier -
-
- La valeur minimum que peut prendre l'élément. La valeur par défaut est 0.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/minheight/index.html b/files/fr/archive/mozilla/xul/attributs/minheight/index.html deleted file mode 100644 index 95ea9f8ffb..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/minheight/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: minheight -slug: Archive/Mozilla/XUL/Attributs/minheight -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/minheight ---- -
« Accueil de la référence XUL
-
minheight -
Type : chaîne de caractères (représentant un entier) -
La hauteur minimum de l'élément. Ceci correspond à la propriété CSS min-height. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/minwidth/index.html b/files/fr/archive/mozilla/xul/attributs/minwidth/index.html deleted file mode 100644 index d1984bdb6b..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/minwidth/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: minwidth -slug: Archive/Mozilla/XUL/Attributs/minwidth -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/minwidth ---- -
« Accueil de la référence XUL
-
minwidth -
Type : chaîne de caractères (représentant un entier) -
La largeur minimum de l'élément. Ceci correspond à la propriété CSS min-width. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/mousethrough/index.html b/files/fr/archive/mozilla/xul/attributs/mousethrough/index.html deleted file mode 100644 index c178218f19..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/mousethrough/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: mousethrough -slug: Archive/Mozilla/XUL/Attributs/mousethrough -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/mousethrough ---- -
« Accueil de la référence XUL
-
mousethrough -
Type : une des valeurs ci-dessous -
Détermine si les évènements souris sont passés à l'élément. Si cet attribut n'est pas spécifié, la valeur est héritée du parent de l'élément. Si aucun ancêtre n'a d'attribut mousethrough défini, la valeur par défaut est never. -
- -
-

L'attribut mousethrough est typiquement utilisé en conjonction avec un stack pour permettre aux éléments d'être empilés au dessus d'autres tout en permettant aux évènements souris d'être envoyés aux éléments les plus bas. Dans l'exemple suivant, l'image apparait au dessus du bouton, cependant l'attribut mousethrough spécifié sur l'image permet aux évènements souris d'être ignorés sur celle-ci et d'être plutôt renvoyés vers le bouton. Si cet attribut n'avait pas été utilisé, l'image aurait reçu tous les évènements souris et il n'aurait pas été possible d'appuyer sur le bouton. -

-
<stack>
-  <button label="En dessous"/>
-  <image src="happy.png" mousethrough="always"/>
-</stack>
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/name/index.html b/files/fr/archive/mozilla/xul/attributs/name/index.html deleted file mode 100644 index 04b80a0c2c..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/name/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: name -slug: Archive/Mozilla/XUL/Attributs/name -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/name ---- -
« Accueil de la référence XUL -

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/noautofocus/index.html b/files/fr/archive/mozilla/xul/attributs/noautofocus/index.html deleted file mode 100644 index 307a2db967..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/noautofocus/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: noautofocus -slug: Archive/Mozilla/XUL/Attributs/noautofocus -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/noautofocus ---- -
« Accueil de la référence XUL
-
noautofocus -
Type : booléen -
Si mis à false, la valeur par défaut, l'élément ayant actuellement le focus le perdra si le popup est ouvert ou fermé. Si mis à true, le focus ne sera pas modifié. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/observes/index.html b/files/fr/archive/mozilla/xul/attributs/observes/index.html deleted file mode 100644 index 7d50606f14..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/observes/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: observes -slug: Archive/Mozilla/XUL/Attributs/observes -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/observes ---- -
« Accueil de la référence XUL
-
observes -
Type : id d'un élément diffuseur -
Défini à l'id d'un élément diffuseur (broadcaster) observé par l'élément. Si un attribut du broadcaster est modifié, il sera également modifié dans l'observateur. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/onchange/index.html b/files/fr/archive/mozilla/xul/attributs/onchange/index.html deleted file mode 100644 index 003e5162cb..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/onchange/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: onchange -slug: Archive/Mozilla/XUL/Attributs/onchange -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/onchange ---- -
« Accueil de la référence XUL
-
onchange -
Type : code de script -
Le code figurant dans l'attribut onchange est appelé lorsque la valeur de l'élément est modifiée. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/oncommand/index.html b/files/fr/archive/mozilla/xul/attributs/oncommand/index.html deleted file mode 100644 index 947dae79d8..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/oncommand/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: oncommand -slug: Archive/Mozilla/XUL/Attributs/oncommand -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/oncommand ---- -
« Accueil de la référence XUL
-
oncommand -
Type : code de script -
Ce gestionnaire d'évènement est appelé lorsque la commande est activée. Cela se produit quand un utilisateur sélectionne un élément de menu ou active un raccourci clavier attaché à la commande. -
-
-

Exemple

-
<button label="Cliquez ici" oncommand="alert('Salut')"/>
-
-

Voir également

-

L'élément command. -

-
diff --git a/files/fr/archive/mozilla/xul/attributs/onpaneload/index.html b/files/fr/archive/mozilla/xul/attributs/onpaneload/index.html deleted file mode 100644 index edaf560356..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/onpaneload/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: onpaneload -slug: Archive/Mozilla/XUL/Attributs/onpaneload -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/onpaneload ---- -
- « Accueil de la référence XUL
-
-
- onpaneload
-
- Type : code de script
-
- Le code défini ici est appelé après le chargement du panneau, de manière similaire à l'évènement load pour une fenêtre.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/onpopuphidden/index.html b/files/fr/archive/mozilla/xul/attributs/onpopuphidden/index.html deleted file mode 100644 index 83e7d64685..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/onpopuphidden/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: onpopuphidden -slug: Archive/Mozilla/XUL/Attributs/onpopuphidden -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/onpopuphidden ---- -
« Accueil de la référence XUL
-
onpopuphidden -
Type : code de script -
Cet évènement est envoyé à un popup après qu'il a été caché. http://www.langue-fr.net/index/A/apres-que.htm -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/onpopuphiding/index.html b/files/fr/archive/mozilla/xul/attributs/onpopuphiding/index.html deleted file mode 100644 index 454023d1a0..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/onpopuphiding/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: onpopuphiding -slug: Archive/Mozilla/XUL/Attributs/onpopuphiding -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/onpopuphiding ---- -
« Accueil de la référence XUL
-
onpopuphiding -
Type : code de script -
Cet évènement est envoyé à un popup lorsqu'il est sur le point d'être masqué. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/onpopupshowing/index.html b/files/fr/archive/mozilla/xul/attributs/onpopupshowing/index.html deleted file mode 100644 index 42f6d71edb..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/onpopupshowing/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: onpopupshowing -slug: Archive/Mozilla/XUL/Attributs/onpopupshowing -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/onpopupshowing ---- -
« Accueil de la référence XUL
-
onpopupshowing -
Type : code de script -
Cet évènement est envoyé à un popup juste avant son ouverture. On l'utilise généralement pour définir dynamiquement le contenu lorsque l'utilisateur demande son affichage. Si ce gestionnaire d'évènement renvoie false, le popup ne s'affichera pas. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/onpopupshown/index.html b/files/fr/archive/mozilla/xul/attributs/onpopupshown/index.html deleted file mode 100644 index 07314e2894..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/onpopupshown/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: onpopupshown -slug: Archive/Mozilla/XUL/Attributs/onpopupshown -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/onpopupshown ---- -
« Accueil de la référence XUL
-
onpopupshown -
Type : code de script -
Cet évènement est envoyé à un popup après son ouverture, de la même manière qu'un évènement onload est envoyé à une fenêtre à son ouverture. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/open/index.html b/files/fr/archive/mozilla/xul/attributs/open/index.html deleted file mode 100644 index fe008056f6..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/open/index.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: open -slug: Archive/Mozilla/XUL/Attributs/open -tags: - - Attributs_XUL - - Référence_XUL - - needsattention -translation_of: Archive/Mozilla/XUL/Attribute/open ---- -
« Accueil de la référence XUL
-
open -
Type : booléen -
Pour les boutons de type menu, l'attribut open est défini à true lorsque le menu est ouvert. L'attribut open n'est pas présent si le menu est fermé. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/ordinal/index.html b/files/fr/archive/mozilla/xul/attributs/ordinal/index.html deleted file mode 100644 index a9b8b0facc..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/ordinal/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: ordinal -slug: Archive/Mozilla/XUL/Attributs/ordinal -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/ordinal ---- -
« Accueil de la référence XUL
-
ordinal -
Type : chaîne de caractères (représentant un entier) -
Un entier spécifiant la position de l'élément au sein de son parent. Par défaut, les éléments sont affichés dans leur ordre d'apparition dans le code XUL. L'attribut ordinal peut être utilisé pour modifier cet ordre. Notez que la valeur par défaut d'ordinal pour les éléments est 1. L'ordre d'affichage peut être retrouvé à l'aide des propriétés de l'objet boxObject du conteneur. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/orient/index.html b/files/fr/archive/mozilla/xul/attributs/orient/index.html deleted file mode 100644 index 0313690837..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/orient/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: orient -slug: Archive/Mozilla/XUL/Attributs/orient -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/orient ---- -
« Accueil de la référence XUL
-
orient -
Type : une des valeurs ci-dessous -
Utilisé pour spécifier si les enfants de l'élément sont orientés horizontalement ou verticalement. La valeur par défaut dépend de l'élément. Il est également possible d'utiliser la propriété de style -moz-box-orient. -
- -
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/pack/index.html b/files/fr/archive/mozilla/xul/attributs/pack/index.html deleted file mode 100644 index 08f444a3f3..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/pack/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: pack -slug: Archive/Mozilla/XUL/Attributs/pack -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/pack ---- -
« Accueil de la référence XUL
-
pack -
Type : une des valeurs ci-dessous -
L'attribut pack spécifie où les éléments enfants de la boîte box sont placés lorsque celle-ci est plus grande que la taille de ses enfants. Pour les boîtes dont l'orientation est horizontale, il est utilisé pour indiquer la position verticale des enfants. Pour les boîtes dont l'orientation est verticale, il est utilisé pour indiquer la position horizontale des enfants. L'attribut align est utilisé pour spécifier la position dans la direction opposée. Il est également possible de spécifier la valeur de pack à l'aide de la propriété de style -moz-box-pack. -
- -
-

Voir également

-

Plus de détails sur l'empaquetage des boîtes dans le Tutoriel XUL -

-
diff --git a/files/fr/archive/mozilla/xul/attributs/pageincrement/index.html b/files/fr/archive/mozilla/xul/attributs/pageincrement/index.html deleted file mode 100644 index 17c3a22c10..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/pageincrement/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: pageincrement -slug: Archive/Mozilla/XUL/Attributs/pageincrement -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/pageincrement ---- -
- « Accueil de la référence XUL
-
-
- pageincrement
-
- Type : - - entier -
-
- La quantité de laquelle la valeur de l'attribut curpos ou value change lorsque l'utilisateur clique dans la colonne de la barre de défilement (la zone dans laquelle le curseur de la barre se déplace), ou lorsque les touches PgUp ou PgDown sont utilisées. La valeur par défaut est 10.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/persist/index.html b/files/fr/archive/mozilla/xul/attributs/persist/index.html deleted file mode 100644 index 9fe5feb99a..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/persist/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: persist -slug: Archive/Mozilla/XUL/Attributs/persist -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/persist ---- -
« Accueil de la référence XUL
-
persist -
Type : liste de noms d'attributs séparés par des espaces -
Une liste séparée par des espaces d'attributs à maintenir lorsque la fenêtre est fermée. À sa réouverture, les valeurs des attributs persistants sont restaurées. Dans Mozilla, les attributs persistants sont conservés dans le fichier localstore.rdf du profil. La persistance peut également être stockée à l'aide de la fonction document.persist. Afin qu'elle puisse fonctionner, l'élément doit également avoir un id. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/popup.left/index.html b/files/fr/archive/mozilla/xul/attributs/popup.left/index.html deleted file mode 100644 index bf6ab7d045..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/popup.left/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: popup.left -slug: Archive/Mozilla/XUL/Attributs/popup.left -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/popup.left ---- -
« Accueil de la référence XUL
-
left -
Type : entier -
Remplace la position horizontale du popup spécifiée par la méthode showPopup. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/popup.position/index.html b/files/fr/archive/mozilla/xul/attributs/popup.position/index.html deleted file mode 100644 index bcaf43a628..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/popup.position/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: popup.position -slug: Archive/Mozilla/XUL/Attributs/popup.position -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/popup.position ---- -
« Accueil de la référence XUL
-
position -
Type : une des valeurs ci-dessous -
L'attribut position détermine où le popup apparaît par rapport à l'élément sur lequel l'utilisateur a cliqué pour l'invoquer. C'est ce qui permet de placer le popup sur le bord d'un bouton. -
- -
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/popup.top/index.html b/files/fr/archive/mozilla/xul/attributs/popup.top/index.html deleted file mode 100644 index a451ed325b..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/popup.top/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: popup.top -slug: Archive/Mozilla/XUL/Attributs/popup.top -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/popup.top ---- -
« Accueil de la référence XUL
-
top -
Type : entier -
Remplace la position verticale du popup spécifiée par la méthode showPopup. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/popup/index.html b/files/fr/archive/mozilla/xul/attributs/popup/index.html deleted file mode 100644 index eccbe7f03e..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/popup/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: popup -slug: Archive/Mozilla/XUL/Attributs/popup -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/popup ---- -
« Accueil de la référence XUL
-
popup -
Type : id d'élément popup -
Doit être défini à la valeur de l'id de l'élément popup devant apparaitre lorsque l'utilisateur clique sur l'élément. -
-
-

Voir également

-

Plus d'informations sur l'élément popup dans le tutoriel XUL -

-
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/position/index.html b/files/fr/archive/mozilla/xul/attributs/position/index.html deleted file mode 100644 index 2d59e59231..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/position/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: position -slug: Archive/Mozilla/XUL/Attributs/position -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/position ---- -
« Accueil de la référence XUL
-
position -
Type : chaîne de caractères (représentant un entier) -
Lorsqu'un élément est un overlay, la position est un indice où l'enfant sera inséré. Les indices commencent à 1, utilisez donc une valeur de 1 pour placer un élément au début. Cet attribut est ignoré si un attribut insertbefore ou insertafter correspond à un élément. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/preference-editable/index.html b/files/fr/archive/mozilla/xul/attributs/preference-editable/index.html deleted file mode 100644 index d81a8aae06..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/preference-editable/index.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: preference-editable -slug: Archive/Mozilla/XUL/Attributs/preference-editable -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/preference-editable ---- -
« Accueil de la référence XUL
-
preference-editable -
Mozilla 1.8 -
Type : booléen -
Si défini à true, l'élément peut être utilisé pour modifier une préférence dans une prefwindow. L'attribut preference peut être utilisé pour se connecter à un élément preference. Cela peut servir aux éléments personnalisés implémentés en XBL. L'élément doit déclencher des évènements change ou select lorsque la valeur est modifiée afin que la préférence soit mise à jour en conséquence. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/preference.name/index.html b/files/fr/archive/mozilla/xul/attributs/preference.name/index.html deleted file mode 100644 index 1fd04497a2..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/preference.name/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: preference.name -slug: Archive/Mozilla/XUL/Attributs/preference.name -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/preference.name ---- -
« Accueil de la référence XUL
-
name -
Type : chaîne de caractères -
Le nom de la préférence à modifier. Par exemple, la page d'accueil du navigateur est définie par la préférence browser.startup.homepage. -
-
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/preference.type/index.html b/files/fr/archive/mozilla/xul/attributs/preference.type/index.html deleted file mode 100644 index 06e0ae3242..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/preference.type/index.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: preference.type -slug: Archive/Mozilla/XUL/Attributs/preference.type -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/preference.type ---- -
« Accueil de la référence XUL
-
type
Type : une des valeurs ci-dessous
Le type de préférence qui doit être une des valeurs suivantes.
-
- diff --git a/files/fr/archive/mozilla/xul/attributs/preference/index.html b/files/fr/archive/mozilla/xul/attributs/preference/index.html deleted file mode 100644 index f4be11503a..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/preference/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: preference -slug: Archive/Mozilla/XUL/Attributs/preference -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/preference ---- -
« Accueil de la référence XUL
-
preference -
Type : id d'élément -
Connecte l'élément à une préférence (élément preference) correspondante. Cet attribut n'a d'effet qu'utilisé au sein d'un prefwindow. La valeur de la préférence sera mise à jour pour correspondre à la propriété value de l'élément. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/prefpane.selected/index.html b/files/fr/archive/mozilla/xul/attributs/prefpane.selected/index.html deleted file mode 100644 index ddb5f5de30..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/prefpane.selected/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: prefpane.selected -slug: Archive/Mozilla/XUL/Attributs/prefpane.selected -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/prefpane.selected ---- -
- « Accueil de la référence XUL
-
-
- selected
-
- Type : booléen
-
- Cet attribut sera défini à true pour l'élément prefpane actuellement sélectionné. Pour changer le panneau sélectionné, utilisez la méthode showPane de prefwindow.
-
-
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/prefpane.src/index.html b/files/fr/archive/mozilla/xul/attributs/prefpane.src/index.html deleted file mode 100644 index f51cb011d3..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/prefpane.src/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: prefpane.src -slug: Archive/Mozilla/XUL/Attributs/prefpane.src -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/prefpane.src ---- -
- « Accueil de la référence XUL
-
-
- src
-
- Type : URL d'un overlay
-
- L'URL du contenu du panneau de préférences. Si cet attribut n'est pas spécifié, le contenu de l'élément prefpane sera utilisé.
-
- -
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/properties/index.html b/files/fr/archive/mozilla/xul/attributs/properties/index.html deleted file mode 100644 index 9939e0557f..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/properties/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: properties -slug: Archive/Mozilla/XUL/Attributs/properties -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/properties ---- -
« Accueil de la référence XUL
-
properties -
Type : liste de noms de propriétés séparés par des espaces -
Définit les propriétés de l'élément, qui peuvent être utilisées pour le styler. Pour plus d'informations, consultez Styler un arbre. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/querytype/index.html b/files/fr/archive/mozilla/xul/attributs/querytype/index.html deleted file mode 100644 index a1be9285d1..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/querytype/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: querytype -slug: Archive/Mozilla/XUL/Attributs/querytype -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/querytype ---- -
« Accueil de la référence XUL
-
querytype -
Type : chaîne de caractères -
Indique le type de source de données (datasource) utilisé dans un template. Firefox 3 fournit les types de données intégrés suivants : 'rdf', default, 'xml' et 'storage'. Des extensions peuvent ajouter une gestion d'autres types de données. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/readonly/index.html b/files/fr/archive/mozilla/xul/attributs/readonly/index.html deleted file mode 100644 index b9c4ee4a7a..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/readonly/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: readonly -slug: Archive/Mozilla/XUL/Attributs/readonly -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/readonly ---- -
« Accueil de la référence XUL
-
readonly -
Type : booléen -
Si défini à true, l'utilisateur ne peut pas modifier la valeur de l'élément. Cependant, celle-ci peut toujours être modifiée par un script. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/ref/index.html b/files/fr/archive/mozilla/xul/attributs/ref/index.html deleted file mode 100644 index 33ad444997..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/ref/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: ref -slug: Archive/Mozilla/XUL/Attributs/ref -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/ref ---- -
« Accueil de la référence XUL
-
ref -
Type : URI d'une ressource RDF -
Pour les éléments générés par des templates, cet attribut est utilisé pour indiquer le nœud racine RDF où la génération de contenu commence. Ceci correspondra à la valeur d'un attribut about sur un conteneur RDF. Cet attribut doit être placé en même temps que l'attribut datasources. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/removeelement/index.html b/files/fr/archive/mozilla/xul/attributs/removeelement/index.html deleted file mode 100644 index e818afecba..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/removeelement/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: removeelement -slug: Archive/Mozilla/XUL/Attributs/removeelement -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/removeelement ---- -
« Accueil de la référence XUL
-
removeelement -
Type : id d'élément -
Lorsque cet attribut est placé sur un élément dans un overlay, il indique que l'élément du fichier de base doit être retiré de la fenêtre. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/rows/index.html b/files/fr/archive/mozilla/xul/attributs/rows/index.html deleted file mode 100644 index 5f871bd6bc..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/rows/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: rows -slug: Archive/Mozilla/XUL/Attributs/rows -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/rows ---- -
« Accueil de la référence XUL
-
rows -
Type : entier -
Le nombre de lignes à afficher dans l'élément. Si l'élément contient plus que ce nombre de lignes, une barre de défilement apparaitra afin que l'utilisateur puisse consulter les autres lignes. Pour obtenir le nombre réel de lignes dans l'élément, utilisez la méthode getRowCount. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/screenx/index.html b/files/fr/archive/mozilla/xul/attributs/screenx/index.html deleted file mode 100644 index 3ec8680474..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/screenx/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: screenX -slug: Archive/Mozilla/XUL/Attributs/screenX -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/screenX ---- -
« Accueil de la référence XUL
-
screenX -
Type : entier -
La position horizontale à laquelle la fenêtre apparaît à l'écran. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/screeny/index.html b/files/fr/archive/mozilla/xul/attributs/screeny/index.html deleted file mode 100644 index 1cc65ea6d2..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/screeny/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: screenY -slug: Archive/Mozilla/XUL/Attributs/screenY -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/screenY ---- -
« Accueil de la référence XUL
-
screenY -
Type : entier -
La position verticale à laquelle la fenêtre apparaît à l'écran. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/selected/index.html b/files/fr/archive/mozilla/xul/attributs/selected/index.html deleted file mode 100644 index a1b6c466f8..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/selected/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: selected -slug: Archive/Mozilla/XUL/Attributs/selected -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/selected ---- -
« Accueil de la référence XUL
-
selected -
Type : booléen -
Indique si l'élément est sélectionné ou non. Cette valeur est en lecture seule. Pour changer la sélection, utilisez la propriété selectedIndex ou selectedItem de l'élément conteneur. -
-
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/seltype/index.html b/files/fr/archive/mozilla/xul/attributs/seltype/index.html deleted file mode 100644 index fcb9957382..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/seltype/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: seltype -slug: Archive/Mozilla/XUL/Attributs/seltype -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/seltype ---- -
- « Accueil de la référence XUL
-
-
- seltype<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - une des valeurs ci-dessous -
-
- Utilisé pour indiquer si les sélections multiples sont permises.
-
- -

<magic name="\"PAGENAME\"/">Des cellules individuelles peuvent être sélectionnées.</magic><magic name="\"PAGENAME\"/"> Des lignes sont sélectionnées, cependant, l'indicateur de sélection n'est visible que sur le texte de la colonne principale.</magic>

diff --git a/files/fr/archive/mozilla/xul/attributs/sizemode/index.html b/files/fr/archive/mozilla/xul/attributs/sizemode/index.html deleted file mode 100644 index 552e358e5f..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/sizemode/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: sizemode -slug: Archive/Mozilla/XUL/Attributs/sizemode -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/sizemode ---- -
« Accueil de la référence XUL
-
sizemode -
Type : une des valeurs ci-dessous -
L'état de la fenêtre (window). Les valeurs suivantes peuvent être utilisées : -
- -


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/sortdirection/index.html b/files/fr/archive/mozilla/xul/attributs/sortdirection/index.html deleted file mode 100644 index c563a7b193..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/sortdirection/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: sortDirection -slug: Archive/Mozilla/XUL/Attributs/sortDirection -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/sortDirection ---- -
« Accueil de la référence XUL
-
sortDirection -
Type : une des valeurs ci-dessous -
Cet attribut indique la direction dans laquelle le contenu généré par un template est trié. Utilisez l'attribut sortResource pour spécifier la clé de tri. -
- -


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/sortresource/index.html b/files/fr/archive/mozilla/xul/attributs/sortresource/index.html deleted file mode 100644 index ac33419cef..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/sortresource/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: sortResource -slug: Archive/Mozilla/XUL/Attributs/sortResource -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/sortResource ---- -
« Accueil de la référence XUL
-
sortResource -
Type : URI d'un prédicat RDF -
Pour du contenu généré par un template, spécifie la clé de tri si le contenu doit être trié. La clé doit être l'URI complète de la ressource par laquelle trier, par exemple « http://home.netscape.com/NC-rdf#Name ». Placez cet attribut sur le même élément que l'attribut datasources. Utilisez sortResource2 pour spécifier une clé de tri secondaire. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/sortresource2/index.html b/files/fr/archive/mozilla/xul/attributs/sortresource2/index.html deleted file mode 100644 index e1e156e2fd..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/sortresource2/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: sortResource2 -slug: Archive/Mozilla/XUL/Attributs/sortResource2 -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/sortResource2 ---- -
« Accueil de la référence XUL
-
sortResource2 -
Type : URI d'un prédicat RDF -
Une clé secondaire de tri pour le contenu. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/src/index.html b/files/fr/archive/mozilla/xul/attributs/src/index.html deleted file mode 100644 index adabab20d0..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/src/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: src -slug: Archive/Mozilla/XUL/Attributs/src -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/src ---- -
- « Accueil de la référence XUL
-
-
- src
-
- Type : URL
-
- L'adresse URL du contenu devant apparaître dans l'élément.
-
-
-

Exemples

-
<iframe id="content-body" src="http://www.mozilla.org/"/>
-<browser src="http://www.mozilla.org" flex="1"/>
-<image src="Firefoxlogo.png" width="135" height="130"/>
-
-

Voir également

- -
diff --git a/files/fr/archive/mozilla/xul/attributs/statustext/index.html b/files/fr/archive/mozilla/xul/attributs/statustext/index.html deleted file mode 100644 index dcbd921f3a..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/statustext/index.html +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: statustext -slug: Archive/Mozilla/XUL/Attributs/statustext -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/statustext ---- -
« Accueil de la référence XUL
-
statustext -
Type : chaîne de caractères -
Utilisé pour définir le texte apparaissant dans la barre d'état lorsque l'utilisateur passe le pointeur par dessus l'élément. Mozilla ne mettra cependant pas à jour la barre d'état automatiquement. Cet attribut sert juste à conserver le texte. Dans Firefox, celui-ci sera automatiquement placé dans l'élément statusbar pour les éléments menuitem de la barre de menus. -
-
-

Exemple

-
<!-- change le message d'état lorsque la souris survole les boutons -->
-<button label="Connexion" statustext="Se connecter au serveur distant"
-      onmouseover="setStatusMessage(this)" onmouseout="clearStatusMessage()"/>
-<button label="Ping" statustext="Envoyer un ping au serveur"
-      onmouseover="setStatusMessage(this)" onmouseout="clearStatusMessage()"/>
-
-<statusbar>
-  <statusbarpanel id="myStatusPanel" label="" flex="1"/>
-  <spacer flex="1"/>
-</statusbar>
-
-<script>
-function setStatusMessage(obj){
-  document.getElementById('myStatusPanel').label = obj.getAttribute('statustext');
-}
-function clearStatusMessage(obj){
-  document.getElementById('myStatusPanel').label = '';
-}
-</script>
-
-

Voir également

-

statusbar et statusbarpanel -

-
diff --git a/files/fr/archive/mozilla/xul/attributs/style/index.html b/files/fr/archive/mozilla/xul/attributs/style/index.html deleted file mode 100644 index 60fa847962..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/style/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: style -slug: Archive/Mozilla/XUL/Attributs/style -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/style ---- -
« Accueil de la référence XUL
-
style -
Type : style CSS inline -
Règles de style CSS à appliquer à l'élément. La syntaxe est identique à celle de l'attribut HTML style. Il est préférable de placer les règles de style dans des feuilles de style séparées. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/suppressonselect/index.html b/files/fr/archive/mozilla/xul/attributs/suppressonselect/index.html deleted file mode 100644 index 5f8cb6b1d5..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/suppressonselect/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: suppressonselect -slug: Archive/Mozilla/XUL/Attributs/suppressonselect -tags: - - Attributs_XUL - - Référence_XUL - - XUL -translation_of: Archive/Mozilla/XUL/Attribute/suppressonselect ---- -
- « Accueil de la référence XUL
-
-
- suppressonselect
-
- Type : - - booléen -
-
- Si cet attribut n'est pas spécifié, un évènement select est déclenché dès qu'un élément est sélectionné, que ce soit par l'utilisateur ou par l'appel d'une des méthodes de sélection. Si la valeur de l'attribut est true, l'évènement select n'est jamais déclenché.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/tabindex/index.html b/files/fr/archive/mozilla/xul/attributs/tabindex/index.html deleted file mode 100644 index 16d1e7e367..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/tabindex/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: tabindex -slug: Archive/Mozilla/XUL/Attributs/tabindex -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/tabindex ---- -
« Accueil de la référence XUL
-
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/template/index.html b/files/fr/archive/mozilla/xul/attributs/template/index.html deleted file mode 100644 index 8b88020822..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/template/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: template -slug: Archive/Mozilla/XUL/Attributs/template -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/template ---- -
« Accueil de la référence XUL
-
template -
Type : id d'élément -
Pour les éléments générés par des templates, cet attribut peut éventuellement être placé sur le nœud racine (l'élément disposant de l'attribut datasources) pour faire référence à un template existant autre part dans le code XUL. L'attribut template doit être défini à l'id de l'élément template. Celui-ci peut être utilisé pour partager un même template entre différents arbres ou menus. Si cet attribut n'est pas spécifié, il doit y avoir un élément template directement dans le nœud. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/timepicker.increment/index.html b/files/fr/archive/mozilla/xul/attributs/timepicker.increment/index.html deleted file mode 100644 index 53d622d39f..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/timepicker.increment/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: timepicker.increment -slug: Archive/Mozilla/XUL/Attributs/timepicker.increment -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/timepicker.increment ---- -
- « Accueil de la référence XUL
-
-
- increment
-
- Type : entier
-
- Indique le nombre de minutes à passer chaque fois que les flèches sont actionnées. Cet attribut est à utiliser en combinaison avec une définition de hideseconds à true.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/timepicker.value/index.html b/files/fr/archive/mozilla/xul/attributs/timepicker.value/index.html deleted file mode 100644 index 4cc2d5f336..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/timepicker.value/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: timepicker.value -slug: Archive/Mozilla/XUL/Attributs/timepicker.value -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/timepicker.value ---- -
- « Accueil de la référence XUL
-
-
- value
-
- Type : chaîne
-
- La valeur initiale du sélecteur de date au format HH:MM:SS ou HH:MM.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/title/index.html b/files/fr/archive/mozilla/xul/attributs/title/index.html deleted file mode 100644 index 2f123af87d..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/title/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: title -slug: Archive/Mozilla/XUL/Attributs/title -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/title ---- -
« Accueil de la référence XUL
-
title -
Type : chaîne de caractères -
Le texte qui doit apparaître dans la barre de titre de la fenêtre ou boîte de dialogue. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/tooltip/index.html b/files/fr/archive/mozilla/xul/attributs/tooltip/index.html deleted file mode 100644 index 8eb387f689..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/tooltip/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: tooltip -slug: Archive/Mozilla/XUL/Attributs/tooltip -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/tooltip ---- -
« Accueil de la référence XUL
-
tooltip -
Type : id d'un élément tooltip -
Doit être défini à la valeur de l'id de l'élément popup à utiliser comme fenêtre tooltip (bulle d'information) lorsque l'élément est survolé un certain temps par le pointeur de la souris. Le tooltip disparaîtra automatiquement lors d'un nouveau déplacement de la souris. Si cet attribut est défini à « _child », le premier élément tooltip enfant de l'élément sera utilisé. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/tooltiptext/index.html b/files/fr/archive/mozilla/xul/attributs/tooltiptext/index.html deleted file mode 100644 index f719b5b76a..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/tooltiptext/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: tooltiptext -slug: Archive/Mozilla/XUL/Attributs/tooltiptext -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/tooltiptext ---- -
« Accueil de la référence XUL
-
tooltiptext -
Type : chaîne de caractères -
Utilisé pour définir le texte qui apparaîtra dans la bulle d'information lorsque l'utilisateur place le pointeur de la souris sur l'élément. Ceci peut être utilisé à la place de la définition d'un tooltip vers un popup pour le cas habituel où celui-ci contient uniquement du texte. Le texte est par défaut affiché dans un simple label. Pour modifier le type de tooltip par défaut, définissez l'attribut default sur un élément tooltip. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/top/index.html b/files/fr/archive/mozilla/xul/attributs/top/index.html deleted file mode 100644 index 994e4a27e2..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/top/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: top -slug: Archive/Mozilla/XUL/Attributs/top -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/top ---- -
« Accueil de la référence XUL
-
top -
Type : chaîne de caractères (représentant un entier) -
Pour les éléments placés directement dans un stack, spécifie la distance en pixels entre le bord supérieur de l'élément et le bord supérieur du stack. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/type/index.html b/files/fr/archive/mozilla/xul/attributs/type/index.html deleted file mode 100644 index a2d6628e11..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/type/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: type -slug: Archive/Mozilla/XUL/Attributs/type -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/type ---- -
-

Voir

- -
-

 

diff --git a/files/fr/archive/mozilla/xul/attributs/uri/index.html b/files/fr/archive/mozilla/xul/attributs/uri/index.html deleted file mode 100644 index 2879d1f18c..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/uri/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: uri -slug: Archive/Mozilla/XUL/Attributs/uri -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/uri ---- -
« Accueil de la référence XUL
-
uri -
Type : chaîne de caractères -
Pour du contenu généré par un template, l'attribut doit être placé sur l'élément où la génération de contenu doit commencer. Donc, il doit être placé sur un élément qui est le descendant d'un template. La valeur doit être définie à rdf:*. -
-
Les éléments qui apparaissent à l'intérieur de l'élément portant cet attribut seront répétés pour chaque nœud dans la source de données RDF. Les éléments qui sont à l'extérieur n'apparaîtront qu'une seule fois. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/value/index.html b/files/fr/archive/mozilla/xul/attributs/value/index.html deleted file mode 100644 index 86904f020b..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/value/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: value -slug: Archive/Mozilla/XUL/Attributs/value -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/value ---- -
« Accueil de la référence XUL
-
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
-
-

Voir également

- -

.value]] -

-
diff --git a/files/fr/archive/mozilla/xul/attributs/wait-cursor/index.html b/files/fr/archive/mozilla/xul/attributs/wait-cursor/index.html deleted file mode 100644 index 23677d8118..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/wait-cursor/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: wait-cursor -slug: Archive/Mozilla/XUL/Attributs/wait-cursor -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/wait-cursor ---- -
« Accueil de la référence XUL
-
wait-cursor -
Type : booléen -
Définissez cet attribut à true pour que le curseur devienne un curseur d'attente lorsqu'il survole l'élément. Habituellement, on ne l'utilisera que sur l'élément window ou d'autres éléments de premier plan. -
-
-
diff --git a/files/fr/archive/mozilla/xul/attributs/width/index.html b/files/fr/archive/mozilla/xul/attributs/width/index.html deleted file mode 100644 index bee18c2365..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/width/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: width -slug: Archive/Mozilla/XUL/Attributs/width -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/width ---- -
« Accueil de la référence XUL
-
width -
Type : chaîne de caractères (représentant un entier) -
La largeur préférée de l'élément. La valeur ne doit pas préciser d'unité car elle est toujours exprimée en pixels. La largeur réellement affichée peut être différente si l'élément ou son contenu ont une largeur minimum ou maximum, ou que la taille est ajustée selon la flexibilité ou l'alignement de son parent. La propriété CSS width peut également être utilisée. -
-
-

Dans cet exemple, la largeur préférée de la boîte hbox intérieure sera de 40 pixels. La largeur affichée est également 40 pixels puisqu'aucun ajustement de flexibilité ou d'alignement ne s'applique. -

-
<hbox>
-  <hbox width="40" style="background-color: red;">
-    <label value="40"/>
-  </hbox>
-</hbox>
-
-

Cependant, dans l'exemple qui sit, malgré une largeur préférée de 30 pixels pour la boîte, sa largeur affichée sera plus grande pour prendre en compte le label plus grand. -

-
<vbox width="30" align="start" style="background-color: red;">
-  <label value="vbox xul width 10px red"/>
-</vbox>
-
-
Note : Lorsqu'il est utilisé sur des objets treecol l'attribut width peut permettre à ceux-ci d'être défilables horizontalement si la largeur additionnée des colonnes est supérieure à celle de l'objet conteneur.
-
diff --git a/files/fr/archive/mozilla/xul/attributs/windowtype/index.html b/files/fr/archive/mozilla/xul/attributs/windowtype/index.html deleted file mode 100644 index 6eb500663d..0000000000 --- a/files/fr/archive/mozilla/xul/attributs/windowtype/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: windowtype -slug: Archive/Mozilla/XUL/Attributs/windowtype -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Attribute/windowtype ---- -
« Accueil de la référence XUL
-
windowtype -
Type : chaîne de caractères -
Définit une chaîne pouvant être utilisée pour identifier le type de fenêtre. Celle-ci peut être utilisée, par exemple, pour faire la distinction entre une fenêtre de navigation et une fenêtre d'édition. Certaines des fonctions de gestion de fenêtres de Mozilla utilisent cet attribut pour grouper les fenêtres du même type. -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/box/index.html b/files/fr/archive/mozilla/xul/box/index.html deleted file mode 100644 index a2b2cc6dd4..0000000000 --- a/files/fr/archive/mozilla/xul/box/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: box -slug: Archive/Mozilla/XUL/box -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/box ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -
-

Un élément conteneur qui peut contenir n'importe quel nombre d'éléments enfants. Si l'élément box a un attribut orient défini à horizontal, les éléments enfants sont disposés de gauche à droite dans l'ordre de leur apparition dans l'élément box. Si orient est défini à vertical, ils seront positionnés de haut en bas. Les éléments enfants ne se superposent pas. L'orientation par défaut est horizontal.

-

Vous trouverez plus d'informations dans le Tutoriel XUL.

-

Exemples

-
Image:XUL_ref_box.png
-
<box orient="horizontal">
-  <label value="Zéro"/>
-  <box orient="vertical">
-    <label value="Un"/>
-    <label value="Deux"/>
-  </box>
-  <box orient="horizontal">
-    <label value="Trois"/>
-    <label value="Quatre"/>
-  </box>
-</box>
-
-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
-

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

-

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

-

Sujets liés

-
Éléments
vbox, hbox
diff --git a/files/fr/archive/mozilla/xul/button/index.html b/files/fr/archive/mozilla/xul/button/index.html deleted file mode 100644 index adce204aab..0000000000 --- a/files/fr/archive/mozilla/xul/button/index.html +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: button -slug: Archive/Mozilla/XUL/button -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/button ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un bouton qui peut être activé par l'utilisateur. Des gestionnaires d'évènements peuvent être utilisés pour capturer des évènements souris, claviers ou autres. Un bouton est typiquement affiché sous la forme d'un rectangle gris en relief. Le label d'un bouton peut être spécifié à l'aide de l'attribut label ou en plaçant du contenu dans l'élément button. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
accesskey, autoCheck, checkState, checked, command, crop, dir, disabled, dlgtype, group, icon, image, label, open, orient, tabindex, type -
-
Propriétés -
accessKey, accessibleType, autoCheck, checkState, checked, command, crop, dir, disabled, dlgType, group, image, label, open, orient, tabIndex, type -
-

Exemples

-
Image:XUL_ref_button.png
-
<button label="Appuyez"
-        oncommand="alert('Vous avez appuyé.');"/>
-
-

Attributs

-

-

- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
-
- -
-
- -
-
- checked
-
- Type : - - booléen -
-
- Indique si l'élément est coché ou non.
-
- Utilisez hasAttribute() pour déterminer si cet attribut est défini plutôt que getAttribute().
- Pour les boutons, l'attribut type doit etre mis à checkbox ou à radio pour qu'un effet soit perceptible.
-
-
-
- -
command -
Type : id d'élément -
Défini à la valeur de l'id d'un élément command observé par l'élément. -
- - -
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
-
- dir
-
- Type : - - une des valeurs ci-dessous -
-
- La direction dans laquelle les éléments enfants de l'élément seront placés.
-
- - -

 

-
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
-
- -
-
- -
image -
Type : URL d'une image -
L'URL de l'image devant apparaître sur l'élément. Si cet attribut est vide ou omis, aucune image n'apparaîtra. La position de l'image est déterminée par les attributs dir et orient. -
- - -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
open -
Type : booléen -
Pour les boutons de type menu, l'attribut open est défini à true lorsque le menu est ouvert. L'attribut open n'est pas présent si le menu est fermé. -
- - -
-
- -
orient -
Type : une des valeurs ci-dessous -
Utilisé pour spécifier si les enfants de l'élément sont orientés horizontalement ou verticalement. La valeur par défaut dépend de l'élément. Il est également possible d'utiliser la propriété de style -moz-box-orient. -
- - - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
- -

Propriétés

-

-

-
accessKey -
Type : caractère -
Obtient et définit la valeur de l'attribut accesskey. -
-


-

- -
-
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
dir -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut dir. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
-
image -
Type : URL d'image -
Obtient et définit la valeur de l'attribut image. -
- -
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
-
open -
Type : booléen -
Obtient et définit la valeur de l'attribut open. -
- -
-
-
orient -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut orient. -
- -
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
type -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut type. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Interfaces -
nsIAccessibleProvider, nsIDOMXULButtonElement -
diff --git "a/files/fr/archive/mozilla/xul/caract\303\250res_internationaux_dans_du_javascript_xul/index.html" "b/files/fr/archive/mozilla/xul/caract\303\250res_internationaux_dans_du_javascript_xul/index.html" deleted file mode 100644 index 756592e74b..0000000000 --- "a/files/fr/archive/mozilla/xul/caract\303\250res_internationaux_dans_du_javascript_xul/index.html" +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Caractères internationaux dans du JavaScript XUL -slug: Archive/Mozilla/XUL/Caractères_internationaux_dans_du_JavaScript_XUL -tags: - - Internationalisation - - JavaScript -translation_of: Archive/Mozilla/XUL/International_characters_in_XUL_JavaScript ---- -

 

-

Introduction

-

Gecko 1.8, qui est utilisé dans Firefox 1.5 et d'autres applications, a ajouté un support pour les caractères non-ASCII dans les fichiers JavaScript chargés depuis des fichiers XUL.

-

Cela signifie que de tels fichiers de script sont capables d'utiliser virtuellement tous les caractères de n'importe quelle langue dans le monde. Par exemple, ils pourraient contenir une ligne :

-
var text = "Ein schönes Beispiel eines mehrsprachigen Textes: 日本語";
-
-

Celle-ci mélange des caractères allemands et japonais.

-

Les versions précédentes interprétaient toujours les fichiers JS chargés depuis XUL en ISO-8859-1 (Latin-1) aussi bien en local qu'en fichiers distants. Les échappements Unicode, comme expliqué ci-dessous, ont toujours fonctionné.

-

Comment l'encodage des caractères est déterminé depuis Gecko 1.8

-

Lorsque le fichier JavaScript est chargé depuis une URL chrome://, un Byte Order Mark) est utilisé pour déterminer l'encodage des caractères du script. Autrement, l'encodage sera le même que celui utilisé par le fichier XUL (et spécifié par l'attribut encoding dans la balise <?xml?>). Par défaut, l'encodage sera l'UTF-8 qui peut représenter virtuellement l'ensemble des caractères dans le monde.

-

Si le fichier de script est chargé via HTTP, l'en-tête HTTP peut contenir une déclaration d'encodage de caractères comme faisant partie de Content-Type, par exemple :

-
Content-Type: application/x-javascript; charset=UTF-8
-
-

Si aucun paramètre charset n'est spécifié, les mêmes règles que précédemment sont appliquées.

-

Compatibilité inter-versions

-

Si vous voulez que le même code fonctionne à la fois avec Gecko 1.8 et ses versions antérieures, vous devez vous limiter à l'ASCII. Toutefois, vous pouvez employer les échappements unicode. Le précédent exemple réécrit deviendrait :

-
var text = "Ein sch\u00F6nes Beispiel eines mehrsprachigen Textes: \u65E5\u672C\u8A9E";
-
-

Une alternative serait d'utiliser des fichiers de propriétés via nsIStringBundle ou l\'élément XUL <stringbundle> ; ils permettent la localisation du XUL. Ce n'est toutefois pas permis dans des fichiers XUL chargés depuis le Web mais seulement dans un code avec privilèges, c'est-à-dire dans des extensions.

diff --git a/files/fr/archive/mozilla/xul/checkbox/index.html b/files/fr/archive/mozilla/xul/checkbox/index.html deleted file mode 100644 index cdb848ef56..0000000000 --- a/files/fr/archive/mozilla/xul/checkbox/index.html +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: checkbox -slug: Archive/Mozilla/XUL/checkbox -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/checkbox ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément qui peut être activé ou non. Il est le plus généralement affiché sous la forme d'une case vide lorsque l'élément est désactivé et une case avec une coche lorsqu'il est activé. L'utilisateur peut changer l'état de la case à cocher en la sélectionnant avec la souris. Un label, spécifié avec l'attribut label, peut être ajouté à côté de la case à cocher. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
accesskey, checked, command, crop, disabled, src, label, preference, tabindex -
-
Propriétés -
accessKey, accessibleType, checked, command, crop, disabled, src, label, tabIndex -
-

Exemples

-
Image:XUL_ref_checkbox.png
-
<checkbox label="Activer JavaScript" checked="true"/>
-<checkbox label="Activer Java" checked="false"/>
-
-

Attributs

-

-

- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
-
- checked
-
- Type : - - booléen -
-
- Indique si l'élément est coché ou non.
-
- Utilisez hasAttribute() pour déterminer si cet attribut est défini plutôt que getAttribute().
- Pour les boutons, l'attribut type doit etre mis à checkbox ou à radio pour qu'un effet soit perceptible.
-
-
-
- -
command -
Type : id d'élément -
Défini à la valeur de l'id d'un élément command observé par l'élément. -
- - -
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
preference -
Type : id d'élément -
Connecte l'élément à une préférence (élément preference) correspondante. Cet attribut n'a d'effet qu'utilisé au sein d'un prefwindow. La valeur de la préférence sera mise à jour pour correspondre à la propriété value de l'élément. -
- - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
- -

Propriétés

-

-

-
accessKey -
Type : caractère -
Obtient et définit la valeur de l'attribut accesskey. -
-


-

- -
-
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Interfaces
nsIAccessibleProvider, nsIDOMXULCheckboxElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/command/index.html b/files/fr/archive/mozilla/xul/command/index.html deleted file mode 100644 index 73dcad8053..0000000000 --- a/files/fr/archive/mozilla/xul/command/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: command -slug: Archive/Mozilla/XUL/command -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/command ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément command peut être utilisé pour invoquer une opération pouvant provenir de plusieurs sources différentes. Par exemple, une opération Coller depuis le Presse-papiers peut venir du menu Édition, d'un menu contextuel, ou d'un raccourci clavier. Le code s'attache à une commande avec l'attribut oncommand. Il sera appelé quelle que soit la manière dont la commande est invoquée par l'utilisateur. De plus, la désactivation de la commande désactivera automatiquement les éléments de menus et raccourcis clavier associés. -

Les commandes sont identifiées par leur attribut id. Si le script chrome://global/content/globalOverlay.js est inclus dans votre fenêtre, vous pouvez utiliser la fonction goDoCommand pour invoquer la commande. L'avantage est que la commande sera envoyée à la partie de l'interface utilisateur qui y répondra. Typiquement, il s'agira de l'élément ayant actuellement le focus. -

Comme avec un broadcaster, les commandes envoient des attributs à d'autres éléments. -

Vous trouverez plus d'informations dans le Tutoriel XUL. Voir également : l'attribut command, l'élément commandset. -

-
Attributs -
disabled, label, oncommand -
-

Exemples

-

Le code suivant enverra une commande Coller (cmd_paste) à l'élément détenant actuellement le focus : -

-
 // Inclure d'abord chrome://global/content/globalOverlay.js
- goDoCommand("cmd_paste");
-
-

Exemple avec deux boutons -

-
<command id="cmd_openhelp" oncommand="alert('Aide');"/>
-<button label="Aide" command="cmd_openhelp"/>
-<button label="Plus d'aide" command="cmd_openhelp"/>
-
-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
oncommand -
Type : code de script -
Ce gestionnaire d'évènement est appelé lorsque la commande est activée. Cela se produit quand un utilisateur sélectionne un élément de menu ou active un raccourci clavier attaché à la commande. -
- - -
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

- diff --git a/files/fr/archive/mozilla/xul/datepicker/index.html b/files/fr/archive/mozilla/xul/datepicker/index.html deleted file mode 100644 index 0425ec07fb..0000000000 --- a/files/fr/archive/mozilla/xul/datepicker/index.html +++ /dev/null @@ -1,231 +0,0 @@ ---- -title: datepicker -slug: Archive/Mozilla/XUL/datepicker -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/datepicker ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément datepicker permet à l'utilisateur d'entrer une date. Trois types sont disponibles, ce qui peut être spécifié à l'aide de l'attribut type. -

- -

Plusieurs manières de définir le jour sélectionné existent. En XUL, l'attribut value peut être défini à une valeur de la forme AAAA/MM/JJ pour initialiser le sélecteur de date à une certaine date. S'il n'est pas spécifié, il affichera par défaut le jour actuel. -

Pour changer la date sélectionnée, la propriété value peut être utilisée pour définir une nouvelle valeur de la forme AAAA/MM/JJ. La propriété dateValue peut être utilisée pour obtenir et définir la date à l'aide d'un objet Date. En outre, les propriétés date, month et year peuvent être utilisées pour obtenir et modifier chaque composant de la date séparément. -

-
Attributs -
disabled, firstdayofweek, readonly, type, tabindex, value -
-
Propriétés -
date, dateLeadingZero, dateValue, disabled, month, monthLeadingZero, open, readOnly, tabIndex, value, year, yearLeadingZero -
-

Exemples

-

Image:Controlsguide-datepicker-grid.png -

-
<datepicker type="grid" value="2007/03/26"/>
-
-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
firstdayofweek -
Type : entier -
Indique le jour de la semaine à afficher comme premier jour dans la grille. Les valeurs vont de 0 à 6, où 0 est dimanche et 6 est samedi. La valeur par défaut est déterminée par la locale, n'utilisez donc cet attribut que si vous désirez l'écraser. -
-


-

- - -
-
- -
readonly -
Type : booléen -
Si défini à true, l'utilisateur ne peut pas modifier la valeur de l'élément. Cependant, celle-ci peut toujours être modifiée par un script. -
- - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
-
- type
-
- Type : une des valeurs suivantes
-
- L'attribut type peut avoir l'une des valeurs ci-dessous afin de spécifier le type de sélecteur de date à utiliser :
-
- - -

 

-
-
- -
-
- value
-
- Type : chaîne
-
- La valeur initiale du sélecteur de date sous la forme AAAA/MM/JJ.
-
-
- -

Propriétés

-

-

-
-
- date
-
- Type : entier
-
- Le jour du mois actuellement sélectionné, entre 1 et 31. Modifiez cette propriété pour changer la date sélectionnée.
-
-
-
-
- dateLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro doit être affiché avant la date lorsqu'elle est inférieure à 10.
-
-
-
-
- dateValue
-
- Type : Date
-
- La date actuellement entrée ou sélectionnée dans le sélecteur de date sous la forme d'un objet Date.
-
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
- month
-
- Type : entier
-
- Le mois actuellement sélectionné entre 0 (janvier) et 11 (décembre). Définissez cette propriété pour changer le mois sélectionné.
-
-
-
-
- monthLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro doit être affiché devant le mois s'il est inférieur à 10.
-
-
-
-
- open
-
- Type : booléen
-
- Pour les sélecteurs de date de type popup, spécifie si celui-ci est ouvert. Définissez cette propriété pour ouvrir ou fermer le popup. Pour les autres types de sélecteurs de date, cette propriété est toujours à false.
-
-
-
-
- readonly
-
- Type : booléen
-
- Si définie à true, l'utilisateur ne peut pas modifier la valeur de l'élément.
-
-
- Cette propriété toute en minuscules n'est utilisée qu'avec l'élément preference et sera peut-être renommée en readOnly dans des versions ultérieures. D'autres éléments utilisent la propriété readOnly. L'attribut correspondant est cependant readonly en minuscules.
-
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
-
- value
-
- Type : chaîne
-
- La date actuellement sélectionnée au format AAAA/MM/JJ. Contrairement à la propriété month, les mois varient ici dans l'intervalle 01 à 12. Définissez cette propriété pour changer la date sélectionnée.
-
-
-
-
- year
-
- Type : entier
-
- L'année actuellement sélectionnée entre 1 et 9999. Définissez cette propriété pour changer la date sélectionnée.
-
-
-
-
- yearLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro doit être affiché devant l'année si elle est inférieure à 1000.
-
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Interfaces -
nsIDOMXULControlElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/description/index.html b/files/fr/archive/mozilla/xul/description/index.html deleted file mode 100644 index 2895ae7922..0000000000 --- a/files/fr/archive/mozilla/xul/description/index.html +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: description -slug: Archive/Mozilla/XUL/description -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/description ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Cet élément sert à créer un bloc de texte. Celui-ci peut être défini soit avec l'attribut value, soit en plaçant le texte entre les balises d'ouverture et de fermeture de l'élément description. L'attribut value sert à définir du texte apparaissant sur une seule ligne. Si du texte apparait comme enfant de l'élément description, il s'étalera éventuellement sur plusieurs lignes. Il peut contenir du balisage arbitraire, qui peut être stylé le cas échéant. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
crop, disabled, tabindex value -
-
Propriétés -
accessibleType, crop, disabled, tabIndex, value -
-
Classes de style -
header, indent, monospace, plain, small-margin -
-

Exemples

-
Image:XUL_ref_description.png
-
<description>
-  Ceci est une longue section de texte qui sera affichée.
-</description>
-
-

Attributs

-

-

- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Classes de style

-
-
header
-
A class used for headings. Typically, this will cause the text to appear bold.
-
-
-
indent
-
This class causes the text to be indented on its left side.
-
-
-
monospace
-
This class causes the text to be displayed in a monospace font.
-
-
-
plain
-
This class causes the element to be displayed with no border or margin.
-
-
-
small-margin
-
This class causes the text to be displayed with a smaller margin.
-
- -

Sujets liés

-

À faire. -

diff --git a/files/fr/archive/mozilla/xul/dropmarker/index.html b/files/fr/archive/mozilla/xul/dropmarker/index.html deleted file mode 100644 index 88f32fb59d..0000000000 --- a/files/fr/archive/mozilla/xul/dropmarker/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: dropmarker -slug: Archive/Mozilla/XUL/dropmarker -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/dropmarker ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un dropmarker est un bouton avec une flèche qui révèle plus de détails lorsque l'on appuie dessus. Il n'est pas prévu pour être utilisé comme un élément séparé, mais comme partie d'un autre élément. Par exemple, l'élément menulist et le type « popup » d'un sélecteur de date utilisent un dropmarker qui, lorsqu'on clique dessus, fera apparaître un menu popup. -

-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
-
diff --git "a/files/fr/archive/mozilla/xul/faq_et_r\303\250gles_pour_les_accesskeys_en_xul/index.html" "b/files/fr/archive/mozilla/xul/faq_et_r\303\250gles_pour_les_accesskeys_en_xul/index.html" deleted file mode 100644 index 12a2836539..0000000000 --- "a/files/fr/archive/mozilla/xul/faq_et_r\303\250gles_pour_les_accesskeys_en_xul/index.html" +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: FAQ et règles pour les accesskeys en XUL -slug: Archive/Mozilla/XUL/FAQ_et_règles_pour_les_accesskeys_en_XUL -tags: - - XUL -translation_of: Archive/Mozilla/XUL/XUL_Accesskey_FAQ_and_Policies ---- -

-

-

Qu'est-ce qu'une accesskey ?

-

Une accesskey ou touche mnémonique est une lettre soulignée dans une page Web, un menu ou un dialogue qui indique à l'utilisateur un raccourci clavier rapide simulant un clic sur cet élément. Par exemple, un bouton « Appliquer » peut avoir la lettre « A » soulignée. Sous Windows et UNIX, appuyer sur les touches <kbd>ALT+A</kbd> est une façon pratique de pousser le bouton. Sous Macintosh, les accesskeys ne sont disponibles qu'en HTML et pas en XUL, et elles sont activées en utilisant la touche <kbd>CTRL+</kbd> lettre au lieu de <kbd>ALT</kbd>. -

-

Comment une accesskey est-elle ajoutée à un contrôle de formulaire ?

-

Une accesskey peut être ajoutée à un contrôle ou libellé de formulaire HTML ou XUL en utilisant l'attribut accesskey. Par exemple, voici comment on peut ajouter une accesskey à un bouton XUL : -

- - - - -
<button label="Appliquer maintenant" accesskey="A" /> -Appliquer maintenant -
- ou - -
<button label="Appliquer maintenant" accesskey="a" /> -Appliquer maintenant -
-

Dans Mozilla, nous utilisons des DTD pour rajouter une autre couche d'abstraction à des fins d'internationalisation. L'exemple ci-dessus devrait donner : -

<button label="Appliquer maintenant" accesskey="&applyInstantly.accesskey" /> -

(Utilisez toujours accesskey au lieu de akey). -

Si des méthodes comme confirm(), confirmEx() ou prompt() sont utilisées pour créer un dialogue, utilisez un « & » devant le texte du bouton ou de la case à cocher fait du caractère qui suit une accesskey. Par exemple, &Maintenant transforme « M » en accesskey soulignée. Pour insérer un véritable caractère esperluète, utilisez &&. -

-

Comment choisir une lettre d'accesskey ?

- -

Y a-t-il des bogues critiques que je devrais connaître ?

- -

Où les accesskeys doivent-elles être ajoutées ?

-

Recherchez les dépendances du bug 129179 (le méta bogue de gestion des accesskeys XUL), ou recherchez les bogues avec « accesskey » ou « mnemonic » dans le résumé, ou recherchez les dialogues où il n'y a pas d'éléments avec des lettres soulignées. -

Ouvrez les bogues sous le composant « Keyboard Navigation », et rendez le méta bug 129179 dépendant de ceux-ci. -

-
-
diff --git a/files/fr/archive/mozilla/xul/guide_des_popups/index.html b/files/fr/archive/mozilla/xul/guide_des_popups/index.html deleted file mode 100644 index aaebd62a1b..0000000000 --- a/files/fr/archive/mozilla/xul/guide_des_popups/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Guide des popups -slug: Archive/Mozilla/XUL/Guide_des_popups -translation_of: Archive/Mozilla/XUL/PopupGuide ---- -

-

-

Popups et menus

-

Différents types de popups et menus peuvent être créés. Un popup est un menu ou une fenêtre flottante sans barre de titre, bordures ou autres décorations de fenêtre qui peut s'étendre au-delà des limites de la fenêtre principale. -

-

Types de popups

-

XUL fournit un certain nombre de types d'éléments différents qui peuvent être utilisés pour créer des menus popups ou d'autres types de widgets popups, qui varient selon la manière dont ils sont attachés à un élément et de s'ouvrir. Un aperçu rapide de chaque type est donné ici ; plus de détails pour chacun des types peuvent être obtenus en suivant les liens correspondants. -

Dans ce guide, le terme « popup » fait référence à tous les types de popups, tandis que le terme « menu » fait référence à un type particulier de popup. En particulier, les deux premiers types de la liste ci-dessous sont des menus. -

-
Menus -
Un menu s'utilise lorsque l'on désire avoir une série de commandes pouvant être activées par l'utilisateur, mais sans devoir utiliser la place que prendrait un bouton pour chaque commande. Un menu est normalement masqué, et lorsqu'il est activé un popup contenant la liste des commandes apparaît. L'utilisateur peut sélectionner une commande et le menu disparaît à nouveau. -
On crée un menu avec l'élément menupopup. Il affiche des éléments dans une liste, peut afficher des sous-menus et fournit une navigation au clavier entre les différents éléments. Un menu ne doit contenir que des éléments liés aux menus. -
Menus contextuels -
Un menu contextuel est comme un menu normal, sauf que les commandes qu'il contient s'appliquent à ce sur quoi l'utilisateur a cliqué pour ouvrir le menu. Souvent, selon l'élément sur lequel on a cliqué, certaines commandes seront masquées si elles ne sont pas applicables à cet élément.
Panels -
Un panel peut contenir tout type de contenu. Il est utile lorsque l'on veut afficher certains contrôles temporairement par dessus l'interface utilisateur existante. Par exemple, un champ de recherche dans un popup peut être utilisé pour permettre une recherche et disparaître dès qu'un terme de recherche a été entré. -
Un panel se crée à l'aide de l'élément panel. -
Tooltips -
Lorsque le pointeur de la souris est positionné au dessus d'un contrôle d'interface utilisateur, un tooltip fournit une bulle d'aide ou d'information, une petite boîte avec un texte descriptif concernant ce contrôle. Lorsque le pointeur est déplacé en dehors du contrôle, le tooltip disparaît automatiquement. -
Un tooltip peut être créé en définissant l'attribut tooltiptext sur un élément ou à l'aide de l'élément tooltip. -
-

Utilisation de popups

-

Les informations complémentaires suivantes sont disponibles concernant la manipulation de menus et de popups. -

-
Ouverture d'un menu ou d'un popup -
La plupart des menus et des popups sont ouverts automatiquement lorsqu'ils sont associés avec un élément. Pour ouvrir un popup à l'aide d'un script, utilisez les méthodes openPopup ou openPopupAtScreen. Pour des informations détaillées sur la manière d'ouvrir un popup, consultez Ouverture d'un popup ou Ouverture d'un menu. -
-
Fermeture d'un menu ou d'un popup -
Pour des informations sur la fermeture d'un popup, consultez Fermeture d'un popup ou Fermeture d'un menu. -
-
Comment sont placés les popups -
Pour en savoir plus sur la manière dont la position d'un popup à l'écran est déterminée, et comment aligner des popups sur d'autres éléments, consultez Positionnement des popups. -
-
Determiner si un popup est ouvert -
Pour déterminer si un popup ou un menu est ouvert, consultez Déterminer si un popup est ouvert. -
-
Déplacement d'un popup -
Les popups peuvent être déplacés à l'aide de la méthode moveTo. Consultez Déplacement d'un popup. -
-
Redimensionnement d'un popup -
La taille d'un popup peut être ajustée à l'aide de la méthode sizeTo. Consultez Redimensionnement d'un popup. -
-
Attacher des menus à un bouton -
Pour en savoir plus sur l'ouverture d'un menu lorsqu'un bouton est enfoncé, consultez Boutons de menus. -
-
Fonctionnalités des éléments d'un menu -
Pour en savoir plus sur les diverses fonctionnalités des éléments d'un menu, consultez Fonctionnalités de l'élément menuitem -
-
Modification des éléments d'un menu -
Pour ajouter, insérer et retirer des éléments d'un menu, consultez Modification d'un menu. -
-
Évènements d'ouverture ou fermeture de popups -
Les évènements popupshowing et popupshown se déclenchent lorsqu'un menu ou un popup s'ouvre. Les évènements popuphiding et popuphidden se déclenchent lorsqu'un menu ou un popup se ferme. Pour plus d'informations sur ces évènements, consultez Évènements des popups. -
-
Gestion des touches du clavier dans les popups -
Pour des informations sur la manière dont les touches du clavier sont gérées au sein des menus et panels, consultez Gestion des touches du clavier dans les popups. -
-
Considérations liées à la plateforme -
Consultez les considérations spéciales des menus par plateforme pour quelques notes concernant la gestion des menus sur certaines plateformes, par exemple la création d'un menu Application sur un Macintosh. -
-

Utilisation des popups dans des extensions

-

Les extensions peuvent ajouter des éléments de menus supplémentaires à un menu de la barre de menus ou au menu contextuel. De plus une extension peut ajouter un tout nouveau menu complet. Par exemple, une extension peut vouloir ajouter une nouvelle commande dans le menu Outils pour ouvrir un dialogue spécifique à l'extension. Une autre tâche courante est de créer une extension ajoutant un élément au menu contextuel du navigateur. Consultez Utilisation de menus et popups dans des extensions pour plus de détails. -

-
-
diff --git a/files/fr/archive/mozilla/xul/guide_des_popups/ouverture_et_fermeture/index.html b/files/fr/archive/mozilla/xul/guide_des_popups/ouverture_et_fermeture/index.html deleted file mode 100644 index ee61ae1e5f..0000000000 --- a/files/fr/archive/mozilla/xul/guide_des_popups/ouverture_et_fermeture/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Ouverture et fermeture -slug: Archive/Mozilla/XUL/Guide_des_popups/Ouverture_et_fermeture -tags: - - Guide Popup XUL - - XUL -translation_of: Archive/Mozilla/XUL/PopupGuide/OpenClose ---- -

Ouverture et fermeture de popups

- -

Les popups et menus peuvent être ouverts et fermés depuis un script.

- -

Ouverture d'un menu

- -

Les menus s'afficheront d'eux-mêmes automatiquement dès que nécessaire sans aucun travail supplémentaire. Par exemple, le popup d'un menu s'ouvrira lors d'un clic sur le label de menu, et un sous-menu s'ouvrira lors du passage de la souris sur l'élément du menu parent.

- -

Cependant, vous pourrez vouloir ouvrir un menu manuellement dans certaines situations. L'élement menu a une propriété open qui peut être définie à true pour ouvrir le menu, ou false pour le fermer. Un exemple simple :

- -
un_menu.open = true;
-
- -

Cette unique ligne de code ouvrira un menu référencé par la variable « un_menu ». Notez que la propriété open s'applique au menu ou au bouton, pas à l'élément menupopup. Voici un exemple complet utilisant un bouton pour ouvrir un menu :

- -
<button label="Ouvrir un menu"
-        oncommand="document.getElementById('editMenu').open = true;"/>
-
-<menu id="editMenu" label="Édition">
-  <menupopup>
-    <menuitem label="Couper"/>
-    <menuitem label="Copier"/>
-    <menuitem label="Coller"/>
-  </menupopup>
-</menu>
-
- -

Cette technique peut être utilisée pour les menupopups qui utilisent la balise menu tant que pour ceux qui utilisent les balises button et toolbarbutton. Pour les menupopups attachés à d'autres éléments à l'aide des attributs popup ou context, consultez Ouverture d'un popup plus bas.

- -

Comme avec les autres manières d'ouvrir un menu, l'évènement popupshowing sera déclenché pour permettre de personnaliser les commandes apparaissant dans le menu.

- -

Dans certaines situations, il n'est pas permis d'ouvrir un menu :

- - - -

Fermeture d'un menu

- -

Un menu se fermera automatiquement une fois que l'utilisateur a fait une sélection depuis celui-ci. Lorsqu'un élément de menu est sélectionné, il déclenche un évènement de commande afin que du code puisse être utilisé pour effectuer une action. L'utilisateur peut annuler la sélection d'une commande en appuyant sur la touche Échap. Ceci fermera un menu simple, mais s'il avait un menu parent, celui-ci restera ouvert. Un utilisateur peut également annuler la sélection en cliquant end ehors du menu. Dans ce cas, non seulement le menu sera fermé, mais tous les menus parents le seront également.

- -

Un menu peut être fermé par un script en définissant la propriété open à false, le contraire de ce qu'on ferait pour ouvrir le menu. La propriété open s'applique au menu ou au bouton, mais pas au menupopup.

- -
un_menu.open = false;
-
- -

Cette commande fermera uniquement un seul niveau de menus, de sorte que tout menu parent devra être fermé avec une commande semblable si nécessaire. Cependant, les éventuels menus enfants de « un_menu » dans cet exemple seront fermé puisque celui-ci ne sera plus ouvert. Par exemple, disons qu'un menu Fichier a un sous-menu contenant une liste de fichiers récemment utilisés. Si les deux menus sont ouverts et que l'on met la propriété open du sous-menu à false, celui-ci sera fermé mais le menu Fichier parent restera ouvert. D'un autre côté, si c'est la propriété open du menu Fichier qui est mise à false, les deux menus se fermeront.

- -

Cette technique peut être utilisée tant pour les menupopups qui utilisent les balises menu et button que toolbarbutton. Pour les menupopups attachés à d'autres éléments à l'aide des attributs popup ou context, consultez Fermeture d'un popup plus bas.

- -

Lorsqu'un menu est fermé, l'évènement popuphiding est déclenché sur celui-ci. On peut donc attacher un écouteur sur cet évènement pour retirer toute commande qui avait été ajoutée au cours de l'évènement popupshowing.

- -

Les menus et popups seront également fermés lorsque le document ou la fenêtre dans lesquels ils sont contenus seront fermés, ou si l'élément menupopup est retiré du document. Ce sont des situations dans lesquelles les évènements popuphiding et popuphidden peuvent ne pas se déclencher étant donné que les éléments concernés ne sont plus disponibles. Si des actions spécifiques doivent être effectués à ce moment-là, il vaut mieux utiliser un évènement unload.

- -

Test de l'état d'ouverture d'un menu

- -

Pour vérifier si un menu est ouvert, vérifiez l'état de sa propriété open. Si celle-ci vaut true, le menu est ouvert, sinon il est fermé.

- -
var open = un_menu.open;
-
- -

Ouverture d'un popup

- -

Pour ouvrir des popups de menu utilisant les balises menu, button et toolbarbutton, consultez Ouverture d'un menu plus haut.

- -

Les popups attachés à l'aide de l'attribut popup sont ouverts lors d'un clic gauche de la souris par l'utilisateur. Il n'y a pas moyen d'effectuer la même action à partir du clavier, vous devrez donc toujours fournir une manière alternative d'accéder aux fonctionnalités du menu. Cela peut se faire soit en plaçant des commandes alternatives ailleurs dans l'interface, ou en fournissant un raccourci clavier permettant d'ouvrir le menu. Une fois que celui-ci est ouvert, le clavier peut être utilisé pour y naviguer et sélectionner des éléments de la manière habituelle.

- -

Les popups attachés à l'aide de l'attribut context sont ouvert lorsque l'utilisateur effectue une action essayant d'ouvrir un menu contextuel. Cette action diffère selon la plateforme, mais en général il s'agit de cliquer sur l'élément avec le bouton de droite de la souris. Sur les systèmes Macintosh avec un seul bouton, un menu contextuel peut être ouvert soit en maintenant le bouton de la souris enfoncé, soit en appuyant sur la touche Control lors du clic sur le bouton. Sous Windows, le menu contextuel peut également être ouvert à l'aide de la touche menu sur le clavier (Il s'agit de la touche figurant sur de nombreux claviers à côté de la touche Ctrl de droite avec une image de menu) ou en appuyant sur Shift+F10. Pour cette raison, il ne faut pas supposer que l'utilisateur a forcément utilisé la souris pour ouvrir le menu contextuel.

- -
La méthode openPopup
- -

Quel que soit le type de popup, il peut être nécessaire de l'ouvrir programmatiquement. Pour ce faire, utilisez la méthode openPopup du popup. Cette méthode peut être utilisée pour tout type de popup, qu'il s'agisse d'un menupopup, d'un panel ou un tooltip, même ceux qui peuvent être ouverts par d'autres moyens, par exemple un popup attaché par l'attribut context.

- -

La méthode openPopup peut recevoir six paramètres qui sont utilisés pour indiquer comment et où le popup doit être positionné. Ils seront décrits plus loin. La méthode openPopup est définie comme suit :

- -
void openPopup(in DOMElement anchorElement,
-               in String position,
-               in long x,
-               in long y,
-               in boolean estMenuContextuel,
-               in boolean ecraserAttributs);
-
- -

Tout d'abord, un exemple :

- -
un_popup.openPopup(ancre, "after_start", 0, 0, false, false);
-
- -

Cet exemple ouvrira un popup situé juste sous un autre élément référencé par « ancre ». Ceci émula la façon dont s'ouvre un menu, où « ancre » serait l'élément menu. Il est possible d'utiliser la méthode openPopup avec un menu, cependant il est plus facile de définir simplement l'attribut open du menu à true, ce qui gèrera le positionnement du menu à votre place. Notez que si l'attribut open s'applique au menu ou bouton parent, la méthode openPopup s'applique à l'élément menupopup.

- -

L'ancre d'un popup est le nœud élément à côté duquel le popup sera affiché. Par exemple, pour qu'un popup apparaisse à côté d'un bouton, passez une référence au bouton comme premier paramètre de la méthode openPopup. Dans cet exemple, le popup sera ouvert relativement à l'élément du document.

- -
un_popup.openPopup(document.documentElement, "end_before", 0, 0, false, false);
-
- -

Le second paramètre d'openPopup est la position par rapport à l'ancre, qui indique de quel côté de celle-ci le popup sera positionné. Par exemple, la valeur « end_before » utilisée dans l'exemple précédent indique de placer le côté gauche du popup le long du bord droit de l'élément d'ancrage, avec les deux bords supérieurs alignés. Cela peut être compliqué à comprendre, consultez alors Positionnement d'un popup qui décrit ce processus plus en détail et fournit des images montrant les valeurs possibles et la façon dont serait aligné un popup pour chacune des valeurs.

- -

Les troisième et quatrième paramètres d'openPopup sont des décalages x et y. Après le positionnement initial du popup, il est possible de l'ajuster en spécifiant des valeurs non nulles pour ces décalages. Ceci permet de contrôler précisément le popup tout en étant toujours ancré à un élément particulier. Des valeurs positives peuvent être utilisées pour ajuster le popup vers la droite ou vers le bas et des valeurs négatives pour l'ajuster vers la gauche ou le haut.

- -

Dans l'exemple qui suit, le popup est ancré sous un élément, tout en étant décalé de 10 pixels vers la droite et de 2 pixels vers le haut.

- -
un_popup.openPopup(ancre, "after_start", 10, -2, false, false);
-
- -

Notez que l'ancre et les décalages spécifient uniquement la position lors de l'ouverture du popup. Si l'ancre est déplacée ou supprimée tandis que le popup est ouvert, le popup ne suivra pas. Cependant, il est possible de déplacer un popup pendant qu'il est ouvert, consultez Déplacement et redimensionnement d'un popup.

- -

Le cinquième paramètre d'openPopup, isContextMenu, indique si le popup est ouvert comme un menu contextuel. Passez true si c'est le cas et false dans le cas contraire. Le valeur à passer devrait être évidente selon l'endroit dont vous appelez openPopup. Notez que le même menu peut être ouvert des deux manières, ce paramètre n'influe donc pas sur la manière dont le popup apparaît. Ce qu'il modifie est la manière dont le focus et la sélection du menu sont gérés. Tant que vous passez la bonne valeur par rapport à la situation, il n'est pas très important de connaître les différences particulières entre les deux cas.

- -

Cependant, vous pouvez voir l'effet de ce paramètre en utilisant les marque-pages de Firefox. Essayez d'ouvrir un sous-menu des marque-pages et notez comme la sélection change toujours lorsque la souris est déplacé vers d'autres menus, et la manière dont le sous-menu est fermé lorsque la souris le quitte. Ouvrez à présent un menu contextuel sur le même marque-page et remarquez que les autres menus ne sont pas affectés par le mouvement de la souris. C'est cette différence qui est gérée par le paramètre isContextMenu.

- -

Enfin, le dernier paramètre de la méthode openPopup, ecraserAttributs indique si les attributs placés sur l'élément popup écrasent les paramètres fournis. Ceci permet à un popup d'utiliser un comportement particulier de positionnement avec les attributs position, left et top à la place. Plus de détails sur ces attributs peuvent être trouvés dans la section Positionnement d'un popup.

- -
Popups non ancrés avec openPopup
- -

Si le premier paramètre de la méthode openPopup vaut null, un popup non ancré est créé. Dans ce cas, le deuxième argument de positionnement n'est pas utilisé et une chaîne vide peut être utilisée. Voici un exemple :

- -
un_popup.openPopup(null, "", 60, 50, false, false);
-
- -

Un popup non ancré utilise les décalages x et y, dans ce cas 60 et 50 sont des décalages depuis le coin de la fenêtre ou du cadre. De cette manière, un popup peut être positionné relativement à la fenêtre plutôt qu'à un nœud spécifique. Par exemple, il peut être intéressant d'ouvrir un popup à la position courante de la souris au moment du clic. Voici un exemple de gestionnaire d'évènement de clic de souris :

- -
function mouseClicked(event)
-{
-  var panel = document.getElementById("un-panel");
-  panel.openPopup(null, "", event.clientX, event.clientY, false, false);
-}
-
- -
La méthode openPopupAtScreen
- -

Une seconde méthode, openPopupAtScreen, peut être utilisée pour ouvrir un popup et le placer à des coordonnées précise sur l'écran. Dans ce cas, le popup n'est pas ancré à un élément et apparaît simplement à l'emplacement spécifié par les paramètres x et y passés à cette méthode.

- -
void openPopupAtScreen(in long x, in long y, in boolean estMenuContextuel);
-
- -

Le paramètre ecraserAttributs indique qu'un menu contextuel est ouvert et fonctionne de la même façon que pour la méthode openPopup. Dans l'exemple qui suit, le popup est ouvert à la position horizontale 100 et à la position verticale 200 :

- -
popup.openPopupAtScreen(100, 200, false);
-
- -

Notez que si les coordonnées fournies auraient conduit à un popup situé partiellement ou totalement hors de l'écran, celui-ci sera déplacé de manière à être totalement visible, et pourra être redimensionné si nécessaire.

- -

Fermeture d'un popup avec la méthode hidePopup

- -

Un menu popup est fermé par l'utilisateur en appuyant sur la touche Échap ou en cliquant quelque part en dehors du popup.

- -

Pour fermer des menupopups utilisant les balises menu, button et toolbarbutton, consultez Fermeture d'un menu plus haut.

- -

Pour fermer un menu depuis un script utilisez sa méthode hidePopup. Elle ne prend aucun paramètre.

- -
popup.hidePopup();
-
- -

Déterminer si un popup est ouvert

- -

Pour les menus, il est possible de vérifier la propriété open de l'élément menu, button ou toolbarbutton. Si celle-ci vaut true, le menu est ouvert.

- -

Pour les autres types de popups, la propriété state peut être examinée à cette fin. Elle est disponible pour tous les types de popups, qu'il s'agisse de menus, panels ou de tooltips. Lorsqu'un menu est fermé, la propriété state aura la valeur closed, tandis que pour un popup visible, elle aura la valeur open. Cette propriété est en lecture seule et s'applique aux éléments menupopup, panel ou tooltip.

- -

La propriété state peut également avoir deux autres valeurs, utilisées lorsqu'un popup est en train de passer de l'état ouvert à l'état fermé et vice versa. Lorsqu'un popup est en train de s'ouvrir, la propriété state a une valeur de showing tandis qu'elle aura une valeur hiding au cours de de sa fermeture. La première se rencontrera au cours de l'évènement popupshowing, tandis que la seconde se rencontrera au cours de l'évènement popuphiding.

- -

Par exemple, la propriété state pourrait être utilisée pour déterminer si un panel est déjà ouvert. Si c'est le cas, vous pouvez vouloir éviter de manipuler l'interface utilisateur de la fenêtre principale, étant donné que l'utilisateur ne sera plus directement en train d'interagir avec elle.

- -
 
diff --git a/files/fr/archive/mozilla/xul/guide_des_popups/panels/index.html b/files/fr/archive/mozilla/xul/guide_des_popups/panels/index.html deleted file mode 100644 index 8ebe7d2ea8..0000000000 --- a/files/fr/archive/mozilla/xul/guide_des_popups/panels/index.html +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Panneaux (panels) -slug: Archive/Mozilla/XUL/Guide_des_popups/Panels -tags: - - Guide Popup XUL - - XUL -translation_of: Archive/Mozilla/XUL/PopupGuide/Panels ---- -

Un panneau est une fenêtre contextuelle pouvant gérer n'importe quel type de contenu. On l'utilise notamment comme support d'affichage temporaire pour la sélection ou la saisie de données.

- -

L'élément panel

- -

L'élément panel sert à créer des panneaux permettant d'afficher une série d'éléments quelconques, placés comme enfants de l'élément "panel". Par exemple, le "panel" suivant affichera une boîte de texte pour entrer un nom. Notez que le panneau n'est pas placé dans un fichier distinct et est placé à l'intérieur d'une autre fenêtre.

- -
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<button label="Details" type="panel">
-  <panel id="search-panel">
-    <label control="name" value="Name:"/>
-    <textbox id="name"/>
-  </panel>
-</button>
-
-</window>
- -

De nombreux panneaux seront associés à un bouton, comme dans cet exemple. Lorsque vous appuyez sur le bouton, le panneau est ouvert. En cliquant à l'extérieur du panneau ou en appuyant sur "Escape" (échappe), le panneau se ferme. Vous pouvez également placer un bouton de fermeture dans le panneau qui le fermera avec un script, si vous le souhaitez. Lorsque vous voulez associer un panneau à un bouton, placez l'élément <panel> directement à l'intérieur de l'élément button .  Vous devez aussi déterminer un attribut "type" avec la valeur "panel", ou le bouton se comportera comme un bouton régulier.

- -

Le panneau contextuel apparaît par défaut dans le coin en haut à gauche, juste sous le bord inférieur du bouton, comme le ferait un menu. Toutefois, la position peut être modifiée. Pour plus d'informations sur la position du panneau contextuel, voir Positioning Popups (en).

- -

Seuls les boutons (et les boutons de la barre d'outils) ont ce comportement automatique d'ouverture de la fenêtre contextuelle lorsqu'ils sont pressés. Pour d'autres types d'éléments, vous devrez utiliser une technique différente comme dans l'exemple suivant :

- -
label value="Search" popup="search-panel"/>
-
-<panel id="search-panel">
-  <label control="search" value="Terms:"/>
-  <textbox id="search"/>
-</panel>
- -

Image:Popupguide-panel.png

- -

Pour attacher un panneau à un élément qui n'est pas un bouton, par exemple pour qu'il s'ouvre lors de l'appui sur une étiquette, utilisez l'attribut popup. Celui-ci doit être défini comme l'id d'un "panel" au sein du même document. Lors d'un clic gauche sur l'élément portant l'attribut popup, le panneau correspondant s'affichera. Par exemple, pour attacher le panneau contextuel défini plus haut à une étiquette, utilisez le code qui suit :

- -
<label value="Rechercher" popup="search-panel"/>
-
- -

Le résultat est un bouton de recherche ouvrant un panneau permettant d'entrer des termes de recherche. Celui-ci apparaîtra avec son coin supérieur gauche à la position de la souris. Dans ce cas, il serait sans doute préférable qu'il apparaisse plutôt en dessous de l'étiquette. L'attribut position peut être utilisé afin de contrôler le placement du panneau contextuel. Voici un exemple complet :

- -
<panel id="search-panel" position="after_start">
-  <label control="search" value="Termes :"/>
-  <textbox id="search"/>
-</panel>
-
-<label value="Recherche" popup="search-panel"/>
-
- -

L'attribut position a été ajouté à l'élément "panel" avec la valeur « after_start ». Le résultat en est que le panel n'est plus affiché là où l'on a cliqué, mais le long du bord inférieur de l'étiquette. Pour plus d'informations concernant cet attribut et les autres valeurs possibles, consultez Positionnement des popups (en).

- -

Il est également possible d'ouvrir un panneau comme un menu contextuel à l'aide de l'attribut context à la place de l'attribut "popup". Celui-ci fonctionne de la même manière qu'un menu contextuel, à part qu'on utilise un élément "panel" à la place d'un élément "menupopup". Consultez Menus contextuels (en) pour plus de détails à ce sujet.

- -

Ouverture d'un panneau par script

- -

Un panneau, comme toutes les fenêtres contextuelles, dispose d'une méthode openPopup pouvant être utilisée pour son ouverture à partir d'un script. Par exemple, le code suivant ouvrirait un panneau sous un bouton :

- -
panel.openPopup(button, "after_start", 0, 0, false, false);
- -

De manière similaire, la méthode openPopupAtScreen ouvrira un panneau à une position précise de l'écran. Pour plus de détails concernant ces deux méthodes, consultez Ouverture et fermeture de fenêtres contextuelles.

- -

Fermeture d'un panneau

- -

Un panneau est fermé automatiquement lorsque l'utilisateur clique en dehors de celui-ci. Il est cependant courant d'avoir un élément comme un bouton de fermeture dans le panneau. Par exemple, dans le panneau de recherche présenté plus haut, nous pourrions ajouter un bouton fermant le panneau lorsqu'il est utilisé :

- -
<script>
-function doSearch() {
-  document.getElementById("search-panel").hidePopup();
-}
-</script>
-
-<toolbarbutton label="Rechercher" type="panel">
-  <panel id="search-panel" position="after_start">
-    <textbox id="search"/>
-    <button label="Rechercher" oncommand="doSearch();"/>
-  </panel>
-</toolbarbutton>
- -

Dans cet exemple, la fonction doSearch est appelée lors d'un clic sur le bouton "Rechercher". La fonction identifie le panneau contextuel et appelle sa méthode hidePopup. Naturellement, cette fonction devrait également comprendre des instructions pour lancer l'opération de recherche proprement dite.

- -

Interdiction de fermeture automatique des panneaux

- -

Un panneau contextuel est fermé  par un clic de l'utilisateur en-dehors de celui-ci ou l'appui sur la touche Échap. C'est la manière habituelle, pour un utilisateur, d'annuler l'opération. Il peut également être utile de placer un bouton d'annulation ou de fermeture dans le panneau, en particulier si celui-ci est grand et contient un grand nombre de contrôles.

- -

Cependant parfois, vous voudrez peut-être que le panneau reste ouvert même si l'utilisateur clique en dehors de celui-ci. C'est notamment utile pour créer des panneaux d'outils flottants. Pour ce faire, positionnez son attribut noautohide sur "true" (vrai).

- -
<panel id="search-panel" noautohide="true">
-  <textbox id="search"/>
-  <button label="Rechercher" oncommand="doSearch();"/>
-  <button label="Annuler" oncommand="this.parentNode.hidePopup();"/>
-</panel>
-
- -

Comme le panneau ne peut plus être fermé en cliquant ailleurs, il doit toujours fournir un moyen de le faire. Dans cet exemple, on a ajouté un bouton Annuler.

- -

Focus sur les panneaux

- -

Les éléments se trouvant dans des panneaux peuvent recevoir le focus de la souris, et l'élément ayant le focus peut changer en appuyant sur la touche Tab. Lors de l'ouverture d'un panneau contextuel, si un élément de la fenêtre principale a le focus, il le perd et reçoit un évènement blur. Bien qu'aucun élément du panneau ne reçoive le focus par défaut, l'utilisateur peut le donner à son premier élément en appuyant sur la touche Tab. Si vous désirez qu'il se trouve sur un élément particulier par défaut, lors de l'ouverture de panneau, modifiez le focus dans le gestionnaire d'évènement popupshown. Par exemple, pour que la boîte de texte de l'exemple précédent reçoive le focus initial :

- -
<panel id="search-panel" onpopupshown="document.getElementById('search').focus()">
-
- -

Pour désactiver l'ajustement du focus à l'ouverture d'un panneau, définissez l'attribut noautofocus à true :

- -
<panel noautofocus="true">
-
- -

Dans ce cas, le focus restera sur l'élément de la fenêtre principale qui avait le focus à l'ouverture du panneau. Notez que cela maintient également le focus à l'intérieur du panneau quand celui-ci est fermé.

- -

Lors de la fermeture d'un panneau, l'élément au sein de celui-ci, qui avait éventuellement le focus, le perd. L'élément qui avait le focus avant l'ouverture de la fenêtre contextuelle, quel qu'il soit, le récupère. Vous pouvez empêcher la suppression du focus avec l'attribut noautofocus  défini à true. De plus, l'attribut XULAttr("norestorefocus") }}  positionné sur true empêche le retour du focus sur l'élément qui l'avait avant. Normalement, seul ce dernier sera défini si besoin.

- -

Ce processus de perte du focus à l'ouverture et à la fermeture d'un popup se déroule après le déclenchement des évènements popupshowing ou popuphiding, ce qui signifie que si ces évènements sont annulés, le focus ne sera pas perdu.

- -
-

Letting panels be dragged by grabbing the background

- Requires Gecko 7.0(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4) -
(faire glisser les panneaux sur l'arrière-plan) - -

À partir de Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4), vous pouvez utiliser l'attribut backdrag pour créer des panneaux que l'utilisateur peut faire glisser (cliquer/glisser) n'importe où sur l'arrière-plan. C'est un simple attribut  booléen, avec lequel vous pouvez activer cette fonctionnalité comme ceci :

- -
panel backdrag="true">
diff --git a/files/fr/archive/mozilla/xul/hbox/index.html b/files/fr/archive/mozilla/xul/hbox/index.html deleted file mode 100644 index f0168f08d0..0000000000 --- a/files/fr/archive/mozilla/xul/hbox/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: hbox -slug: Archive/Mozilla/XUL/hbox -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/hbox ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément conteneur pouvant contenir un nombre illimité d'éléments enfants. C'est l'équivalent de l'élément box. -

Vous trouverez plus d'informations dans le Tutoriel XUL.

-

Exemple

-
<!-- Deux boutons à droite -->
-<hbox>
-  <spacer flex="1"/>
-  <button label="Connection"/>
-  <button label="Ping" />
-</hbox>
-
-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
box, vbox -
diff --git "a/files/fr/archive/mozilla/xul/ic\303\264nes_de_fen\303\252tre/index.html" "b/files/fr/archive/mozilla/xul/ic\303\264nes_de_fen\303\252tre/index.html" deleted file mode 100644 index f851d2c685..0000000000 --- "a/files/fr/archive/mozilla/xul/ic\303\264nes_de_fen\303\252tre/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Icônes de fenêtre -slug: Archive/Mozilla/XUL/Icônes_de_fenêtre -tags: - - API_du_toolkit - - Extensions - - XPInstall - - XUL -translation_of: Archive/Mozilla/XUL/Window_icons ---- -

-

À partir de Firefox 1.5, Thunderbird 1.5 et XULRunner 1.8, il est possible de spécifier une icône pour une fenêtre XUL en plaçant des fichiers nommés <tt>mafenetre.ico</tt> (pour Windows) et <tt>mafenetre.xpm</tt> (Linux), où mafenetre est l'id de l'élément <window> de la fenêtre à laquelle vous voulez attacher l'icône, dans le sous-dossier <tt>chrome/icons/default</tt> de votre paquet installable. -

Ces icônes prendront le pas sur les fichiers d'icônes globaux, qui sont situés dans <tt>app_dir/chrome/icons/default</tt>. -

-

Anciennes versions

-

Pour gérer les anciennes applications comme Firefox 1.0, vous devrez copier manuellement les icônes dans <tt>app_dir/chrome/icons/default</tt> au premier démarrage (exemple de code). -

diff --git a/files/fr/archive/mozilla/xul/index.html b/files/fr/archive/mozilla/xul/index.html deleted file mode 100644 index 14c9dad0bd..0000000000 --- a/files/fr/archive/mozilla/xul/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: XUL -slug: Archive/Mozilla/XUL -tags: - - XUL -translation_of: Archive/Mozilla/XUL ---- -
Tutoriel XUL
-Ce tutoriel vous guidera dans vos premiers pas avec XUL. Il est tiré de la version anglaise de XULPlanet.
- -
XUL est le langage d'interface utilisateur pour Mozilla basé sur XML. Il permet de construire des applications multiplatesformes riches en fonctionnalités, pouvant être ou non connectées à Internet. Ces applications peuvent facilement être personnalisées au niveau du texte, des graphiques et de leur mise en page et peuvent ainsi être facilement rhabillées selon leur destination et être fournies en plusieurs langues. Les développeurs Web qui sont déjà familiarisés avec le HTML dynamique peuvent apprendre le XUL rapidement et être opérationnels immédiatement.
- -

Vous pouvez essayer une démonstration XUL grâce à cette table périodique des éléments XUL.

- - - - - - - - -
-

Documentation

- -
-
Référence des éléments XUL
-
Consultez également la documentation en français sur xulfr ainsi que la documentation de MDC sur prefwindow.
-
- -
-
Les contrôles XUL
-
Une liste rapide de tous les contrôles XUL disponibles.
-
- -
-
Vulgarisation XUL
-
Un tutoriel clair sur le développement de modules complémentaire Mozilla.
-
- -
-
Présentation de XUL
-
Décrit les fonctionnalités et composants clés de XUL.
-
- -
-
Guide sur les menus et popups
-
Un guide sur l'utilisation des menus et panneaux popup.
-
- -
-
Comment réussir vos gabarits
-
Un guide détaillé sur les gabarits XUL (templates), qui sont un moyen de générer du contenu depuis une source de données. (à migrer vers XUL:Réussir vos gabarits)
-
- -
-
Adaptation des applications XUL pour Firefox 3.0
-
Une liste des changements dans Firefox 3 qui affectent les développeurs XUL.
-
- -
-
Adaptation des applications XUL pour Firefox 2.0
-
Une liste des changements dans Firefox 2 qui affectent les développeurs XUL.
-
- -
-
Adaptation des applications XUL pour Firefox 1.5
-
Une liste des changements dans Firefox 1.5 qui affectent les développeurs XUL.
-
- -

Tous les articles…

- -
-
-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

- - - -

Outils

- - - -

Tous les outils…

- -

Sujets liés

- -
-
JavaScript, XBL, CSS, RDF, Extensions, XULRunner
-
-
- -

Categories

- -

Interwiki Language Links

diff --git "a/files/fr/archive/mozilla/xul/introduction_\303\240_xul/index.html" "b/files/fr/archive/mozilla/xul/introduction_\303\240_xul/index.html" deleted file mode 100644 index 27d8f9b784..0000000000 --- "a/files/fr/archive/mozilla/xul/introduction_\303\240_xul/index.html" +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Introduction à XUL -slug: Archive/Mozilla/XUL/Introduction_à_XUL -tags: - - Aide_pour_les_éditeurs_de_MDC - - Traduction_en_cours - - XUL -translation_of: Archive/Mozilla/XUL/Introduction_to_XUL ---- -

Introduction

- -

Mozilla possède des "chromes" configurables et téléchargeables, ce qui veut dire que la position et même la présence ou l'absence d'un contrôle dans la fenêtre principale n'est pas figé dans l'application, mais chargé à partir de fichier d'interface IU (IU = Interface utilisateur). En effet, la plupart des fenêtres (principale et/ou dialogue) de Mozilla sont décrites en utilisant ce mécanisme. XUL, pour "XML User Interface Language" (Langage d'Interface Utilisateur format XML), est le nom pour le langage dans lequel ces descriptions d'interface sont faites.

- -

Les fichiers de "chrome" sont affichés et gérés par le même moteur que celui qui affiche les pages HTML dans le navigateur. Les description d'IU font très bon ménage avec le HTML 4. Le XUL est une application de XML. En effet, c'est juste du XML avec des éléments spécifiques qui peuvent être implémentés dans du HTML.

- -

Termes

- -

"XPFE" est le terme qu'utilise l'organisation Mozilla pour décrire la Cross Platform Front End du Navigateur de Mozilla, car X et C semblent être semblables si on les tape longtemps et fortement avec un marteau (humour américain...). Le but est de construire des applications cross-platform  comme des navigateurs et des clients de courrier électronique à partir d'un kit d'outils créés pour cet usage. L'intention n'est pas d'implanter un framework générique pour application toutes plateformes confondues. Cela a déjà été fait, et au prix d'un grand travail. Nous voulons fournir un sous-ensemble de fonctionnalités inter-plateformes approprié pour construire des applications réseau comme les navigateurs, améliorant les fonctionnalités inter-plateformes déjà inclues dans Gecko, le moteur de rendu HTML de Mozilla.

- -

Le terme de "cross-platform UI" est quelque peu trompeur. Les créateurs d'interface devront être capable de créer des IU qui marcheront sur des multiples plate-formes. Mais des descriptions claires d'UI, qui prennent en considération de nombreuses plateformes, diffèrent sur l'idée de la place correcte des divers contrôles comme les boutons de dialogue qui nécessitent des spécifications par rapport à chaque système. Un spécification XUL est seulement compatible à hauteur d'un "degree". Les designers d'UI ainsi que les ingénieurs doivent maintenir séparément les versions spécifiques à chaque plateforme.

- -

"XPToolkit" est plutôt synonyme de XPFE. Même si l'ancien terme parait plus expressif que l'autre, et pourtant ce n'est pas son remplaçant ; personne ne sais pourquoi il existe les deux.

- -

"XUL" déjà présenté, est une application du XML utilisé pour décrire la présentation de la plupart des fenêtres dans le navigateur Mozilla, incluant aussi la fenêtre principale, la fenêtre du navigateur.

- -

Portée

- -

Cet article n'est pas une tentative d'expliquer les exigences systèmes. Nous n'avons pas de document actuel sur les "exigences" . XPToolkit Architecture est un meilleur moyen pour comprendre de telles choses. Cet article contient une courte introduction à l'architecture Mozilla front-end , en se concentrant sur la tache de construire des UIs. Il est, comme toujours, incomplet.

- -

Les applications Mozilla seront construites de "petits" composants comme des boutons "dialogue" et des dossiers de boite de réception mail, que l'on appelle couramment "widgets." Avec un widget, le dessin et les interactions utilisateur sont complètement sous le contrôle d'un widget indépendant, et faites quand le widget est construit. Le placement relatif des widgets, leurs interactions entre les uns les autres, et en option une partie de leur configuration, sera contrôlé par un UI layout spécifié dans un script dont la structure est définie dans les documents connexes et présents.

- -

Les widgets sont des morceaux of the application largely self-contained, generally corresponding to a rectangle of window real estate. Widgets will generally live grouped in separate, dynamically loaded libraries. A widget may expect to own a piece of a window (a toolbar or toolbar set), or it may be expected to work within or without a window (menubars, depending on the platform). It may not be a part of the application UI at all.

- -

Widgets will have predefined behaviour, set at compilation. Buttons will respond to the mouse; toolbars will act as containers for buttons. The effect a widget will have on its application will be defined as a combination of predefined application behaviour and linkage between the widgets. This linkage can be accomplished by including JavaScript in the XUL, or by application code which walks the content model after it has been built from XUL, and hooks up event listeners. Generally a real application will use some combination of the two.

- -

Applications, for instance, will have preconceived notions of what to do when they receive an "open file" command. An "open" button is simply a button. It will send its command to the application for processing, generally using some simple JavaScript for linkage.

- -

We are at first primarily concerned with the obvious UI components: toolbars, menus and dialogs. Conceptually, the XUL language will allow someone with a text editor, given a package of components which can work together, the ability to put together an application by specifying something like this (for an application on an OS using menubars across the top of its applications' windows):

- -
main window containing
-  menubar area at top across width of window containing
-    menubar (and its contents)
-  toolbar area below menubar across width of window containing
-    main toolbar (and its contents)
-  application-specific content area below toolbar area
-
diff --git a/files/fr/archive/mozilla/xul/label/index.html b/files/fr/archive/mozilla/xul/label/index.html deleted file mode 100644 index fab098ae82..0000000000 --- a/files/fr/archive/mozilla/xul/label/index.html +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: label -slug: Archive/Mozilla/XUL/label -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/label ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Cet élément est utilisé pour fournit un label pour un élément de contrôle. Si l'utilisateur clique sur le label, le focus se placera sur le contrôle associé, tel que spécifié avec l'attribut control. -

Pour plus d'informations, consultez le Tutoriel XUL. -

-
Attributs -
accesskey, control, crop, disabled, href, value -
-
Propriétés -
accessKey, accessibleType, control, crop, disabled, value -
-
Classes de style -
header, indent, monospace, plain, small-margin, text-link
-

Exemples

-
Image:XUL_ref_label.png
-
<label value="Email address" control="email"/>
-<textbox id="email"/>
-
-

Attributs

-

-

- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
- -

Propriétés

-

-

-
accessKey -
Type : caractère -
Obtient et définit la valeur de l'attribut accesskey. -
-


-

- -
-
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Classes de style

-

Les classes suivantes peuvent être utilisées pour styler l'élément. Ces classes doivent être utilisées plutôt que de changer directement le style de l'élément, car elles s'intègreront plus naturellement dans le thème sélectionné par l'utilisateur. -

-
header
-
A class used for headings. Typically, this will cause the text to appear bold.
-
-
-
indent
-
This class causes the text to be indented on its left side.
-
-
-
monospace
-
This class causes the text to be displayed in a monospace font.
-
-
-
plain
-
This class causes the element to be displayed with no border or margin.
-
-
-
small-margin
-
This class causes the text to be displayed with a smaller margin.
-
-
-
text-link
-
Labels with this class may be focused and the click handler run or the address in the href attribute opened on a mouse click or Enter key press. Labels will appear like a link (blue and underlined).
-
- -

Sujets liés

-
Éléments -
description -
-
Attributs -
label -
-
Interfaces
nsIAccessibleProvider, nsIDOMXULLabelElement -
-

Notes d'utilisation

-

N'oubliez pas que l'élément label a un attribut « value », contrairement au HTML où les boutons et cases à cocher utilisent label="valeur" comme attribut. -

-
<label label="Une légende"/> <-- incorrect -->
-<label value="Une légende"/>
-
-<label value="Cliquez sur le bouton"/>
-<button label="Un bouton"/>
-<checkbox label="Une décision" value="1"/>
-
-
-
diff --git "a/files/fr/archive/mozilla/xul/les_contr\303\264les_xul/index.html" "b/files/fr/archive/mozilla/xul/les_contr\303\264les_xul/index.html" deleted file mode 100644 index 0277692977..0000000000 --- "a/files/fr/archive/mozilla/xul/les_contr\303\264les_xul/index.html" +++ /dev/null @@ -1,550 +0,0 @@ ---- -title: Les contrôles XUL -slug: Archive/Mozilla/XUL/Les_contrôles_XUL -tags: - - XUL -translation_of: Archive/Mozilla/XUL/XUL_controls ---- -

Le tableau suivant propose le listing des contrôles utilisateurs mis à disposition par XUL. Reportez-vous à la section Tutoriel XUL pour un guide pas-à-pas sur leurs utilisations et Référence XUL pour les informations de référence.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<button> - -

Un bouton pouvant être pressé par l'utilisateur.

- -
-<button label="Save" accesskey="S"/>
-
- -

 

- - -
Image:Controlsguide-button.png
<button type="menu"> -

Un bouton ayant un menu déroulant attaché. Appuyez sur le bouton pour ouvrir le menu.

- -
-<button type="menu" label="View">
-  <menupopup>
-    <menuitem label="List"/>
-    <menuitem label="Details"/>
-  </menupopup>
-</button>
-
- - -
Image:Controlsguide-button-menu.png
<button type="menu-button"> -

Un bouton associé à un bouton-flèche qui ouvre un menu déroulant. Le bouton-flèche est séparé du bouton principal. Contrairement au le type 'menu', des actions différentes peuvent être effectués en cliquant sur le bouton ou sur le bouton-flèche.

- -
-<button type="menu-button" label="New">
-  <menupopup>
-    <menuitem label="New Document"/>
-    <menuitem label="New Image"/>
-  </menupopup>
-</button>
-
- - -
Image:Controlsguide-button-menu-button.gif
<checkbox> -

Un contrôle pouvant être coché ou non ; typiquement utilisé pour créer des options pouvant être activées ou désactivées.

- -
-<checkbox label="Show Toolbar Labels" checked="true"/>
-
- - -
Image:Controlsguide-checkbox.png
<colorpicker> -

Un sélectionneur de couleurs pouvant être utilisé pour sélectionner une couleur.

- -
-<colorpicker color="#FF0000"/>
-
- - -
Image:Controlsguide-colorpicker.png
<colorpicker type="button"> -

Un bouton qui affiche la couleur sélectionnée. Lorsqu'on clique sur le bouton, un sélecteur de couleurs spécialisé s'affiche.

- -
-<colorpicker type="button" color="#CC0080"/>
-
- - -
Image:Controlsguide-colorpicker-button.png
<datepicker> - - -

Une série de boîtes de texte qui peuvent être utilisées pour saisir une date.

- -
-<datepicker value="2007/03/26"/>
-
- - -
Image:Controlsguide-datepicker.png
<datepicker type="grid"> - - -

Un sélecteur de date qui affiche un calendrier pour la sélection.

- -
-<datepicker type="grid" value="2007/02/20"/>
-
- - -
Image:Controlsguide-datepicker-grid.png
<datepicker type="popup" > - - -

Un sélecteur de date qui affiche une série de boîtes de texte pour la saisie et un bouton pour afficher un sélecteur de date sous forme de calendrier.

- -
-<datepicker type="popup" value="2008/08/24"/>
-
- - -
 
<description> -

L'élément description permet d'ajouter un texte descriptif.

- -
-<description>
-  Sélectionner l'heure du début de l'évènement
-</description>
-
- - -
Image:Controlguide-description.png
<groupbox> -

Un élément groupbox regroupe plusieurs contrôles d'interface usager et affiche une étiquette à l'aide de l'élément caption.

- -
-<groupbox>
-  <caption label="Network"/>
-</groupbox>
-
- - -
Image:Controlguide-groupbox.png
<image> -

Une image spécifiée par une URL.

- -
-<image src="start.png"/>
-
- - -
Image:Controlguide-image.png
<label> -

L'élément label permet d'ajouter une étiquette à côté d'un champ de saisie.

- -
-<label control="volume" value="Volume:"/>
-
- - -
Image:Controlguide-label.png
<listbox> -

Une liste permet la sélection d'items textuels.

- -
-<listbox>
-  <listitem label="Chocolat"/>
-  <listitem label="Bonbon"/>
-</listbox>
-
- - -
Image:Controlguide-listbox.png
<menulist> -

Une zone combinée est un contrôle texte attaché à une liste déroulante. La valeur est sélectionnée à l'aide de la liste déroulante. Aussi connu sous les noms de menulist, combobox et <select> en HTML.

- -
-<menulist>
-  <menupopup>
-    <menuitem label="Lions" value="l"/>
-    <menuitem label="Tigres" value="t"/>
-    <menuitem label="Ours" value="o"/>
-  </menupopup>
-</menulist>
-
- - -
Image:Controlguide-menulist.png
<menulist editable="true"> -

Une zone combinée éditable est comme une zone combinée standard, excepté que la valeur actuellement sélectionnée est affichée dans une zone de saisie où l'on peut  sélectionner directement une valeur, ou l'on peut entrer des valeurs absentes de la liste.

- -
-<menulist editable="true">
-  <menupopup>
-    <menuitem label="Elephants" value="Elephants"/>
-    <menuitem label="Kangaroos" value="Kangaroos"/>
-    <menuitem label="Bats" value="Bats"/>
-  </menupopup>
-</menulist>
-
- - -
Image:Controlguide-menulist-editable.png
<progressmeter> -

Une barre de progression est utilisée pour montrer la progression d'une tâche lente.

- -
-<progressmeter value="40"/>
-
- - -
Image:Controlguide-progressmeter.png
<radio> -

Un bouton radio est utilisé pour sélectionner uniquement une seule valeur d'une liste d'options à la fois.

- -
-<radiogroup>
-  <radio label="Light" value="light"/>
-  <radio label="Heavy" value="heavy"/>
-</radiogroup>
-
- - -
Image:Controlguide-radio.png
<richlistbox> -

The richlistbox displays a list of items where one or more may selected. Unlike the listbox which is designed to display only text, the richlistbox may display any type of content.

- -
-<richlistbox>
-  <richlistitem>
-    <image src="happy.png"/>
-  </richlistitem>
-  <richlistitem>
-    <image src="sad.png"/>
-  </richlistitem>
-  <richlistitem>
-    <image src="angry.png"/>
-  </richlistitem>
-</richlistbox>
-
- - -
Image:Controlguide-richlistbox.png
<scale> - - -

A scale displays a bar with a thumb that may be slid across the bar to select between a range of values.

- -
-<scale min="1" max="10"/>
-
- - -
Image:Controlguide-scale.png
<textbox> -

A textbox which allows a single line of text to be entered.

- -
-<textbox value="firefox"/>
-
- - -
Image:Controlguide-textbox.png
<textbox multiline="true"> -

A textbox which allows multiple lines of text to be entered.

- -
-<textbox multiline="true"/>
-
- - -
Image:Controlguide-textbox-multiline.png
<textbox type="autocomplete"> -

A textbox which provides a dropdown showing matches that would complete what the user types. The user can select one to have it filled into the textbox.

- -
-<textbox type="autocomplete" autocompletesearch="history"/>
-
- - -
 
<textbox type="number"> - - -

A textbox for entering numbers. Two arrow buttons are displayed for cycling through values.

- -
-<textbox type="number" min="1" max="20"/>
-
- - -
Image:Controlguide-textbox-number.png
<textbox type="password"> -

A textbox that hides the characters typed, used for entering passwords.

- -
-<textbox type="password"/>
-
- - -
Image:Controlguide-textbox-password.png
<timepicker> - - -

A timepicker displays a set of textboxes for entering a time.

- -
-<timepicker value="12:05"/>
-
- - -
Image:Controlguide-timepicker.png
<toolbarbutton> -

A button that is displayed on a toolbar.

- -
-<toolbarbutton label="Reload"/>
-
- - -
Image:Controlguide-toolbarbutton.png
<toolbarbutton type="menu"> -

A button that is displayed on a toolbar with a drop down menu attached to it.

- -
-<toolbarbutton type="menu" label="Show">
-  <menupopup>
-    <menuitem label="Toolbars"/>
-    <menuitem label="Status Bar"/>
-  </menupopup>
-</toolbarbutton>
-
- - -
 
<toolbarbutton type="menu-button"> -

A button on a toolbar that that has a separate arrow button with a menu attached to it. Unlike with the 'menu' type, a separate action may be performed when the main part of the button is pressed.

- -
-<toolbarbutton type="menu-button" label="Open">
-  <menupopup>
-    <menuitem label="Open Changed Files"/>
-    <menuitem label="Open All"/>
-  </menupopup>
-</toolbarbutton>
-
- - -
 
<tree> -

A tree displays a hierarchy of items in multiple columns.

- -
-<tree>
-  <treecols>
-    <treecol label="Name" flex="1"/>
-    <treecol label="Size" flex="1"/>
-  </treecols>
-  <treechildren>
-    <treeitem>
-      <treerow>
-        <treecell label="Popcorn"/>
-        <treecell label="Large"/>
-      </treerow>
-    </treeitem>
-    <treeitem>
-      <treerow>
-        <treecell label="Root Beer"/>
-        <treecell label="Small"/>
-      </treerow>
-    </treeitem>
-  </treechildren>
-</tree>
-
- - -
Image:Controlguide-tree.png
diff --git a/files/fr/archive/mozilla/xul/les_joies_de_xul/index.html b/files/fr/archive/mozilla/xul/les_joies_de_xul/index.html deleted file mode 100644 index 0d713c2334..0000000000 --- a/files/fr/archive/mozilla/xul/les_joies_de_xul/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Les joies de XUL -slug: Archive/Mozilla/XUL/Les_joies_de_XUL -tags: - - XUL -translation_of: Archive/Mozilla/XUL/The_Joy_of_XUL ---- -

Public visé : Les développeurs d'application et les chefs développeurs qui cherchent à mieux comprendre XUL et pourquoi il est à la base de la plate-forme Mozilla.

- -

Introduction

- -

XUL (prononcez « zoul ») est le langage d'interface utilisateur de Mozilla basé sur XML permettant de développer des applications multiplate-formes riches en fonctionnalités et pouvant tourner connectée ou non à Internet. Ces applications sont facilement modifiables avec des textes, graphismes, et mises en page alternatifs, de telle manière qu'elles peuvent être facilement marquées ou localisées pour différents marchés. Les développeurs Web déjà familiers avec le HTML Dynamique (DHTML) pourront développer tout des suite des applications .

- -

Ce document décrira les irrésistibles raisons pour les développeurs d'application de choisir XUL et la technologie Mozilla pour développer des applications multiplate-formes. Cette même enquête donnera des explications suffisantes des motivations de Mozilla dans le développement XUL et pourquoi la plate-forme de Mozilla est basée dessus. Les fonctionnalités clé et les avantages de XUL seront explorés suivis d'un tour d'horizon des technologies soutenues par Mozilla. Enfin, une petite étude de cas d'un logiciel calendrier écrit avec XUL montrera les avantages de développer une application avec Mozilla.

- -

Fonctionnalités clés et avantages

- - - - - - - - - - - - - - - - - - - - - - - - -
Langage de balisage puissant basé sur les widgetsLe but de XUL est de construire des applications multiplate-formes, a contrario du DHTML qui est conçu pour développer des pages Web. C'est pour cela que XUL est orienté vers des artefacts présents dans les applications comme les fenêtres, les labels et les boutons, au lieu d'être orienté vers les pages, niveaux de titre, et liens hypertextes. -

En fait, beaucoup de développeurs investissent des efforts considérables pour obtenir un résultat comparable dans leurs applications Web DHTML au prix de la complexité, des performances, et du respect des standards.

-
Basé sur des standards existantsXUL est un langage basé sur le standard XML 1.0 du W3C. Les applications écrites en XUL aussi sont basées sur d'autres standards du W3C tels que HTML 4.0; les Feuilles de Style en Cascade (CSS) 1 et 2; le modèle de document objet (DOM) niveaux 1 et 2; JavaScript 1.5, incluant ECMA-262 Edition 3 (ECMAscript); XML 1.0. -

Mozilla.org va plus loin en cherchant à obtenir une standardisation du W3C pour l'eXtensible Binding Language (XBL) (voir Technologies supportées, ci-dessous).

-
Portabilité de la plate-forme -

À l'instar du HTML, XUL est conçu pour être indépendant de la plate-forme, rendant ainsi les applications facilement portables à tous les systèmes d'exploitation sur lesquels Mozilla tourne. Si l'on considère le large éventail de plate-formes qui supportent actuellement Mozilla, cela peut être une des caractéristiques intéressantes de XUL en tant que technologie pour développer des applications.

- -

Puisque XUL donne une abstraction des composants de l'interface utilisateur, il tient la promesse d'écrire une fois, exécuter partout (NdT : write-once, run anywhere pour les anglophones). L'interface de toutes les applications phares de Mozilla (navigateur, client de messagerie, carnet d'adresse, etc.) est écrite en XUL avec un seul code fonctionnant sur toutes les plate-formes Mozilla.

-
Séparation de l'aspect et de la logique de l'applicationL'un des inconvénients majeurs de la plupart des application Web est le lien étroit entre les éléments de l'interface et la logique de l'application. Cela pose un problème qui n'est pas insignifiant lorsque que l'on travaille en équipe, parce que les compétences requises pour développer ces deux aspects appartiennent souvent à des personnes différentes. -

XUL donne une séparation clair entre la définition de l'application et la logique de programmation ("contenu" constitué de XUL, XBL, et JavaScript), la présentation (« skin » constitué de CSS et d'images), et les labels spécifiques au langage (« locale » constitué de DTDs, paquets de chaînes de caractères dans des fichiers .properties). La mise en page et l'apparence des applications XUL peuvent être transformées indépendamment de la définition de l'application et de sa logique. Encore mieux, l'application peut être localisée en différentes langues et régions indépendamment de sa logique ou de sa présentation.

- -

Ce degré de séparation permet d'avoir des applications plus faciles à maintenir par les programmeurs et rapidement modifiables pour les designers et les localisateurs.

- -

La superposition de ces deux activités indépendantes est plus facilement coordonnée qu'avec des applications basées sur du HTML, avec un impact moindre sur la stabilité générale et la qualité du système.

-
Modification, localisation ou marquage facilesUn autre bénéfice très pratique de la séparation entre ce que XUL fournit et la logique, la présentation, et le « texte du langage » est la facilité d'adaptation pour différents clients ou groupes d'utilisateurs. -

Un développeur peut maintenir une base de code primaire pour son application et adapter le logo et l'appellation pour chacun de ses clients en distribuant plusieurs skins. Une application qui est écrite et déployée avec une interface utilisateur en anglais peut être traduite en français pour le même client. Bien que ces changements soit extensifs et affectent la plus grande partie (sinon la totalité) de l'application, ils sont aussi isolés les uns des autres par la définition même de XUL et le partage de la logique de l'application entre toutes les versions personnalisées.

-
- -

Technologies supportées

- -

Il y a beaucoup d'autres technologies introduites par Mozilla qui complètent XUL pour développer des applications web multiplate-formes.

- - - - - - - - - - - - - - - - - - - - -
XBL -

L'eXtensible Bindings Language (XBL) est un langage de balisage qui définit de nouveaux éléments spéciaux, ou bindings pour les widgets XUL. Avec XBL, les développeurs peuvent définir du contenu nouveau pour les widgets XUL, ajouter des gestionnaires d'événement additionnel à un widget XUL, et ajouter aussi de nouvelles propriétés et méthodes d'interface. En bref, XBL octroie au développeur la capacité d'étendre XUL en modifiant des balises existantes ou en créant ses propres balises.

- -

En utilisant XBL, les développeurs peuvent facilement façonner des interfaces utilisateur de widgets personnalisées, comme des compteurs de progression, des menus pop-up fantaisistes, et même des barres d'outils et des formulaires de recherche. Ces composants personnalisés sont utilisable dans les applications XUL en spécifiant la balise personnalisée et les attributs qui y sont associés.

-
OverlaysLes overlays sont des fichiers XUL utilisés pour décrire un contenu supplémentaire pour l'interface utilisateur. Ils sont un mécanisme général pour ajouter des composants additionnels à l'interface, remplacer des portions de code XUL, sans avoir à modifier toute l'interface, et réutiliser des parties spécifiques de l'interface utilisateur. -

Ils fournissent un mécanisme puissant de personnalisation et d'extension des applications existantes parce qu'ils fonctionnent de deux manières complémentaires mais très différentes. Dans un sens, les overlays sont identiques aux fichiers include qu' on trouve dans d'autres langages parce qu'une application peut spécifier qu'un overlay est présent dans sa définition. Mais les overlays peuvent également être spécifié extérieurement, permettant à un concepteur de le superposer à une application sans modifier le code source original.

- -

En pratique, cela permet aux développeurs de maintenir un code unique pour une application donnée, puis d'y appliquer une marque particulière ou pour inclure des fonctionnalités spécifiques pour un client particulier, le tout dans un code complètement indépendant. Cela conduit à une solution globale qui est plus facile et moins coûteux de maintenir à long terme.

- -

Un bénéfice supplémentaires des overlays pour les développeurs de logiciels qui désirent ajouter des fonctionnalités aux logiciels Mozilla qu'ils désirent garder sous licence propriétaire. La Netscape Public License (NPL) et la Mozilla Public License (MPL) exige des développeurs qui modifie le code original (le code source fournit pas Mozilla) de fournir le code source de ces modifications à leurs clients. Les overlays peuvent être utilisés pour ajouter des fonctionnalités aux logiciels Mozilla sans contaminer le code source libre original avec des portions de code propriétaire.

-
XPCOM/XPConnectXPCOM et XPConnect sont des technologies complémentaires qui permettent l'intégration de bibliothèques externes dans les applications XUL. -

XPCOM, qui signifie Cross Platform Component Object Model, est un framework d'écriture de logiciels multiplate-forme et modulaires. Les composants XPCOM peuvent être écrit en C, C++ et JavaScript, et ils peuvent être utilisés avecs C, C++, JavaScript, Python, Java et Perl.

- -

XPConnect est une technologie qui autorise des interactions entre XPCOM et JavaScript. XPConnect permet aux objets JavaScript d'accéder de façon transparente aux objets XPCOM et de les manipuler. Elle permet également aux objets JavaScript de présenter des interfaces conformes à XPCOM qui pourront être appelées par des objets XPCOM.

- -

Ensemble, XPCOM et XPConnect permettent aux développeurs de créer des applications XUL qui applications exigent la puissance de traitement brut de langages compilés (C/C++) ou l'accès au système d'exploitation sous-jacent.

-
XPInstallXPInstall, l'utilitaire d'installation multiplate-forme de Mozilla, fournit un moyen standard d'empaquetage des composants d'un application XUL avec un script d'installation que Mozilla peut télécharger et exécuter. -

XPInstall permet aux utilisateurs d'installer sans effort une nouvelle applications XUL depuis Internet ou depuis des serveurs intranet d'entreprises. Pour installer une nouvelle application, l'utilisateur n'a besoin que de cliquer sur un lien hypertexte dans une page Web ou dans un courriel et d'accepter l'installation du nouveau paquetage.

-
- -

todo: describe cool toolkit and xul runner features

- -

Étude de cas : Un logiciel de calendrier pour Mozilla

- -

This mini case study describes how OEone Corporation (http://www.oeone.com) integrated its Calendar application with the core Mozilla product. The Calendar application is comprised of a XUL front end and an XPCOM component that leverages libical, a native library written in C, for date operations and calendar data storage. The Calendar was initially developed exclusively for Linux but was successfully ported to both Macintosh and Windows within a week.

- -

XUL provides a rich set of UI components. The user interface for the Calendar is written entirely in XUL, JavaScript, and CSS, which is a testament to the power and flexibility of this application building framework. It uses simple XUL components like boxes, grids, and stacks to compose views for the weeks, days, and months. The initial implementation of Calendar did not exploit XBL because the developers involved were not experienced with this complementary technology. But future plans for the Calendar include converting many of these UI components to XBL widgets to further simplify their implementation.

- -

XPCOM/XPConnect enables integration of native code. A fully-featured open source calendar library, libical (http://www.softwarestudio.org/libical/), was harvested for the Calendar project. Libical is an Open Source implementation of the IETF's iCalendar Calendaring and Scheduling protocols. (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. The library was initially integrated by writing an XPCOM wrapper to adapt its interface. To improve performance a greater proportion of application logic was migrated from JavaScript to the XPCOM component.

- -

Separation of presentation from logic makes applications resilient to change. The original UI implementation made extensive use of graphics for rendering the month and week views. Later, as the developers learned more about XUL and the implementation of the basic components matured, better ways were identified to simplify the composition of the UI. This lead to increased screen drawing performance and reduced memory and disk footprint requirements of the application. The UI for the month and week views was practically rewritten while the application logic remained virtually unchanged.

- -

Porting XUL applications to other platforms is trivial. The Calendar originated as a Linux application with no consideration given to porting it to other platforms. But later, when the original developer (OEone Corporation) contributed the source to the Mozilla project, the Calendar had to be migrated to the Windows and Macintosh platforms. The UI for the XUL application required zero porting effort because it worked with almost no alteration on both new platforms. Similarly, since the UI code is written in JavaScript, the interaction logic worked with no effort. However, since the libical library is written in C, more significant effort was required to migrate this component to the other platforms.

- -

Fortunately an implementation of the libical library was already available for Macintosh so, with the cross platform nature of XPCOM, a Macintosh calendar implementation was working within a few days. However, there was no existing Win32 port available, so developers had to undertake a porting effort to migrate libical to Windows. Within a week this too was complete and Mozilla had a working calendar for all three primary platforms: Linux, Macintosh, and Windows.

- -

XPInstall is easy for developers and for users. The Calendar is not a planned deliverable for the Mozilla 1.0 release, and therefore is not included as a standard component in regular nightly and milestone release builds. Developers who are equipped with the software and knowledge required to compile Mozilla can set an optional environment variable and build the Calendar themselves. But many Mozilla users who want to try out the Calendar can't afford this luxury. Using XPInstall it was easy for the developers to package a version of Calendar that could be installed directly over the Internet by clicking a link.

- -

Conclusion

- -

Mozilla, grâce à XUL, fournit une technologie irrésistible pour le développement d'applications multiplate-forme avec une même interface utilisateur riche et une expérience utilisateur identique aux applications natives. Les designers ayant l'expérience de la conception d'applications Web basées sur les technologies standard du W3C peuvent tirer parti de cette expérience directement du navigateur au bureau.

- -

Avant qu'Internet ne devienne le moyen privilégié de distribution des applications aux utilisateurs utilisant des architectures matérielles et logicielles disparates, ce problème était réglé à l'aide d'outils client-serveur multiplate-forme. Mais ces offres, invariablement propriétaires, coûtaient très cher en développeurs et le montant des licences vous liait solidement pour un certain temps au vendeur. Mozilla fournit much of the same value que ces outils multiplate-forme, mais avec des licences libres.

- -

As a rapidly maturing cross platform technology, XUL peut combler un vide intéressant pour des technologies telles que Java J2EE et Microsoft. Net qui sont axés sur l'activation de l'accès au réseau pour les objets distribués. La logique d'application dynamique peut bénéficier largement d'un niveau de présentation de l'interface utilisateur qui est basée sur des normes, des scripts, extensibles et de même distribuables sur Internet.

- -

XUL réduit la distinction entre les applications de bureau et le navigateur Internet, car il est bien implanté dans deux mondes. Certaines applications Web bénéficieront d'une migration vers XUL du fait de l'accroissement des capacités de l'interface utilisateur, d'une implémentation cohérente de la spécification à travers les plate-formes supportées et de l'accès aux ressources natives telles que les bibliothèques partagées et les fichiers locaux du système.

- -

Que vous désiriez migrer une application Web existante vers une application desktop, que cherchiez une technologie qui vous permettra facilement de porter vos applications sur différentes plate-formes ou que vous vouliez intégrer vos propres fonctionnalités au navigateur, XUL mérite d'être sérieusement considéré.

- -

Références

- -
    -
  1. Documentation XUL sur MDC, comprenant Tutoriel XUL et la Référence XUL
  2. -
  3. Overlays XUL
  4. -
  5. Documentation XBL: XBL introduction, XBL reference
  6. -
  7. Documentation XPCOM
  8. -
  9. Documentation XPConnect (Composants scriptables). Voir également XPConnect (Scriptable Components) (en)
  10. -
  11. Documentation sur les Extensions, comprenant un tutoriel de prise en main Construire une extension
  12. -
  13. Projet Calendar sur Mozilla .org (en)
  14. -
diff --git a/files/fr/archive/mozilla/xul/listbox/index.html b/files/fr/archive/mozilla/xul/listbox/index.html deleted file mode 100644 index 7f793d544a..0000000000 --- a/files/fr/archive/mozilla/xul/listbox/index.html +++ /dev/null @@ -1,276 +0,0 @@ ---- -title: listbox -slug: Archive/Mozilla/XUL/listbox -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/listbox ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Cet élément est utilisé pour créer une liste d'éléments dont l'un ou plusieurs d'entre-eux peuvent être sélectionnés. Une listbox peut contenir plusieurs colonnes. Différentes méthodes permettent aux éléments de la liste d'êtres récupérés et modifiés. -

Vous pouvez spécifier le nombre de lignes à afficher dans la liste à l'aide de l'attribut rows. Les lignes supplémentaires peuvent être consultées avec une barre de défilement. Une listbox est supposée contenir des éléments listitem. Toutes les lignes dans la listbox ont la même hauteur, qui est la hauteur du plus grand élément de la liste. Si vous désirez créer une liste dont les hauteurs de lignes sont variables, ou avec du contenu non textuel, utilisez plutôt l'élément richlistbox. -

Consultez le Tutoriel XUL pour plus d'informations.

-
Attributs -
disabled, disableKeyNavigation, preference, rows, seltype, suppressonselect, tabindex, value -
-
Propriétés -
accessibleType, currentIndex, currentItem, disabled, disableKeyNavigation, itemCount, listBoxObject, selectedCount, selectedIndex, selectedItem, selectedItems, selType, tabIndex, value -
-
Méthodes -
addItemToSelection, appendItem, clearSelection, ensureElementIsVisible, ensureIndexIsVisible, getIndexOfFirstVisibleRow, getIndexOfItem, getItemAtIndex, getNumberofVisibleRows, getRowCount, getSelectedItem, insertItemAt, invertSelection, moveByOffset, removeItemAt, removeItemFromSelection, scrollToIndex, selectAll, selectItem, selectItemRange, suppressOnSelect, timedSelect, toggleItemSelection -
-

Exemple

-
Image:XUL_ref_listbox.png
-
 <listbox id="theList">
-   <listitem label="Rubis"/>
-   <listitem label="Émeraude"/>
-   <listitem label="Saphir" selected="true"/>
-   <listitem label="Diamant"/>
- </listbox>
-
-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
preference -
Type : id d'élément -
Connecte l'élément à une préférence (élément preference) correspondante. Cet attribut n'a d'effet qu'utilisé au sein d'un prefwindow. La valeur de la préférence sera mise à jour pour correspondre à la propriété value de l'élément. -
- - -
-
- -
rows -
Type : entier -
Le nombre de lignes à afficher dans l'élément. Si l'élément contient plus que ce nombre de lignes, une barre de défilement apparaitra afin que l'utilisateur puisse consulter les autres lignes. Pour obtenir le nombre réel de lignes dans l'élément, utilisez la méthode getRowCount. -
- - -
-
- -
-
- seltype<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - une des valeurs ci-dessous -
-
- Utilisé pour indiquer si les sélections multiples sont permises.
-
- -

<magic name="\"PAGENAME\"/">Des cellules individuelles peuvent être sélectionnées.</magic><magic name="\"PAGENAME\"/"> Des lignes sont sélectionnées, cependant, l'indicateur de sélection n'est visible que sur le texte de la colonne principale.</magic>

-
-
- -
-
- suppressonselect
-
- Type : - - booléen -
-
- Si cet attribut n'est pas spécifié, un évènement select est déclenché dès qu'un élément est sélectionné, que ce soit par l'utilisateur ou par l'appel d'une des méthodes de sélection. Si la valeur de l'attribut est true, l'évènement select n'est jamais déclenché.
-
-
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
currentItem -
Type : élément listitem -
Renvoie le dernier élément sélectionné dans la liste de sélection, ce qui n'est utile que dans une liste à sélection multiple. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
-
listBoxObject -
Type : nsIListBoxObject -
L'objet nsIListBoxObject derrière la liste de sélection. Cette propriété est en lecture seule. La plupart des fonctionnalités de la liste de sélection sont déjà disponibles directement dans l'élément listbox, il sera donc rarement nécessaire d'utiliser cet objet de boîte directement. -
- -
-
-
-
selectedIndex -
Type : entier -
Renvoie l'indice de l'élément actuellement sélectionné. Un élément peut être sélectionné en assignant son indice à cette propriété. En lui assignant -1, tous les éléments seront désélectionnés. -
- -
-
-
selectedItem -
Type : élément -
Conserve l'élément actuellement sélectionné. Si aucun élément n'est sélectionné, sa valeur sera null. Vous pouvez sélectionner un élément en définissant cette valeur. Un évènement select sera envoyé à cet élément lorsqu'il est sélectionné en modifiant cette propriété, la propriété selectedIndex, ou par l'utilisateur. -
- -
-
-
-
-
- selType<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - chaîne de caractères -
-
- Obtient et définit la valeur de l'attribut seltype.
-
- -
-
-
-
- suppressOnSelect
-
- Type : - - booléen -
-
- Obtient et définit la valeur de l'attribut suppressonselect.
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
- - - - - - - - - -
getRowCount() -
Type de retour : entier -
Renvoie le nombre total de lignes dans l'élément, quel que soit le nombre de lignes affichées. -
- - - - - - - -
selectAll() -
Type de retour : aucune valeur renvoyée -
Sélectionne tous les éléments. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
selectItem( item ) -
Type de retour : aucune valeur renvoyée -
Désélectionne tous les éléments actuellement sélectionnés, puis sélectionne l'élément donné en argument. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
selectItemRange( startItem, endItem) -
Type de retour : aucune valeur renvoyée -
Sélectionne tous les éléments compris entre les deux éléments donnés en paramètre, y compris les éléments de début et de fin. Tous les autres éléments sont désélectionnés. Cette méthode n'a aucun effet sur les listes en mono-sélection. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
timedSelect( item, timeout ) -
Type de retour : aucune valeur renvoyée -
Sélectionne un élément spécifié par l'argument item après un nombre de millisecondes définit par l'argument timeout. Tous les autres éléments sont désélectionnés. -
-
toggleItemSelection( item ) -
Type de retour : aucune valeur renvoyée -
Modifie l'état de sélection de l'élément spécifié. S'il est sélectionné, il devient désélectionné. S'il est désélectionné, il devient sélectionné. Les autres éléments de la liste ne sont pas affectés et ils conservent leur état de sélection. -
- -

Sujets liés

-
Éléments -
listcell, listcol, listcols, listhead, listheader, listitem -
-
Interfaces -
nsIAccessibleProvider, nsIDOMXULMultiSelectControlElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/listitem/index.html b/files/fr/archive/mozilla/xul/listitem/index.html deleted file mode 100644 index cf28e6472b..0000000000 --- a/files/fr/archive/mozilla/xul/listitem/index.html +++ /dev/null @@ -1,265 +0,0 @@ ---- -title: listitem -slug: Archive/Mozilla/XUL/listitem -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/listitem ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Une ligne unique dans un élément listbox. Le texte de la ligne est généralement spécifié soit en utilisant des éléments listcell, soit en plaçant un attribut label directement sur l'élément listitem. Par défaut, contient un seul élément listcell du type et de la classe appropriées pour le listitem. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
accesskey, checked, command, crop, current, disabled, image, label, preference, selected, tabindex, type, value -
-
Propriétés -
accessKey, accessible, checked, control, crop, current, disabled, image, label, selected, tabIndex, value -
-
Classes de style -
listitem-iconic
-

Exemples

-
Image:XUL_ref_listbox.png
-
 <listbox id="laListe">
-   <listitem label="Rubis"/>
-   <listitem label="Émeraude"/>
-   <listitem label="Saphir" selected="true"/>
-   <listitem label="Diamant"/>
- </listbox>
-
-

Attributs

-

-

- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
-
- checked
-
- Type : - - booléen -
-
- Indique si l'élément est coché ou non.
-
- Utilisez hasAttribute() pour déterminer si cet attribut est défini plutôt que getAttribute().
- Pour les boutons, l'attribut type doit etre mis à checkbox ou à radio pour qu'un effet soit perceptible.
-
-
-
- -
command -
Type : id d'élément -
Défini à la valeur de l'id d'un élément command observé par l'élément. -
- - -
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
image -
Type : URL d'une image -
L'URL de l'image devant apparaître sur l'élément. Si cet attribut est vide ou omis, aucune image n'apparaîtra. La position de l'image est déterminée par les attributs dir et orient. -
- - -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
preference -
Type : id d'élément -
Connecte l'élément à une préférence (élément preference) correspondante. Cet attribut n'a d'effet qu'utilisé au sein d'un prefwindow. La valeur de la préférence sera mise à jour pour correspondre à la propriété value de l'élément. -
- - -
-
- -
selected -
Type : booléen -
Indique si l'élément est sélectionné ou non. Cette valeur est en lecture seule. Pour changer la sélection, utilisez la propriété selectedIndex ou selectedItem de l'élément conteneur. -
- - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessKey -
Type : caractère -
Obtient et définit la valeur de l'attribut accesskey. -
-


-

- -
-
-
accessible -
Type : nsIAccessible -
Renvoie l'objet d'accessibilité pour l'élément. -
-


-

- -
-
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
image -
Type : URL d'image -
Obtient et définit la valeur de l'attribut image. -
- -
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
- -
-
selected
-
Type : booléen
-
La valeur de cette propriété est true si cet élément est sélectionné, ou false s'il ne l'est pas. Cette propriété est en lecture seule.
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Classes de style

-

Les classes suivantes peuvent être utilisées pour styler l'élément. Il convient de les utiliser plutôt que de changer le style de l'élément directement afin de s'intégrer plus naturellement dans le thème choisi par l'utilisateur. -

-
listitem-iconic
-
Use this class to have an image appear on the listitem. Specify the image using the image attribute.
-
- -

Sujets liés

-
Éléments -
listbox, listcell, listcol, listcols, listhead, listheader -
-
Interfaces -
nsIAccessibleProvider, nsIDOMXULSelectControlItemElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/menu/index.html b/files/fr/archive/mozilla/xul/menu/index.html deleted file mode 100644 index 2a78b15497..0000000000 --- a/files/fr/archive/mozilla/xul/menu/index.html +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: menu -slug: Archive/Mozilla/XUL/menu -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/menu ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément, tout à fait semblable à un élément button, qui est placé dans un élément menubar. Lorsque l'utilisateur clique sur l'élément menu, le menupopup enfant du menu sera affiché. Cet élément est également utilisé pour créer des sous-menus. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
acceltext, accesskey, allowevents, command, crop, disabled, image, label, menuactive, open, sizetopopup, tabindex, value -
-
Propriétés -
accessibleType, accessKey, command, control, crop, disabled, image, itemCount, label, labelElement, menupopup, open, parentContainer, selected, tabIndex, value -
-
Méthodes -
appendItem, getIndexOfItem, getItemAtIndex, insertItemAt, removeItemAt -
-

Exemple

-
  <menubar id="sample-menubar">
-    <menu id="file-menu" label="Fichier">
-      <menupopup id="file-popup">
-        <menuitem label="Nouveau"/>
-        <menuitem label="Ouvrir"/>
-        <menuitem label="Enregistrer"/>
-        <menuseparator/>
-        <menuitem label="Quitter"/>
-      </menupopup>
-    </menu>
-    <menu id="edit-menu" label="Édition">
-      <menupopup id="edit-popup">
-        <menuitem label="Annuler"/>
-        <menuitem label="Rétablir"/>
-      </menupopup>
-    </menu>
-  </menubar>
-
-

Attributs

-

-

- -
-
- acceltext
-
- Type : chaîne de caractères
-
- Texte qui apparaîtra à côté du label d'un menu pour indiquer la touche de raccourci (accélérateur) à utiliser pour invoquer la commande. Si cette valeur est définie, elle écrase une clé assignée dans l'attribut key. Cet attribut ne s'applique pas aux menus directement sur la Barre de menus (menubar).
-
-
-
- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
allowevents -
Type : booléen -
Si défini à true, les évènements sont passés aux enfants de l'élément. Dans le cas contraire, ils ne sont passés qu'à l'élément lui-même. -
- - -
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
-
- -
open -
Type : booléen -
Pour les boutons de type menu, l'attribut open est défini à true lorsque le menu est ouvert. L'attribut open n'est pas présent si le menu est fermé. -
- - -
-
- -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
-
-
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
- - - - - - -

Sujets liés

-
Éléments -
menubar, menuitem, menulist, menupopup, menuseparator -
-
Interfaces -
nsIAccessibleProvider, nsIDOMXULContainerElement, nsIDOMXULContainerItemElement, nsIDOMXULSelectControlItemElement -
diff --git a/files/fr/archive/mozilla/xul/menubar/index.html b/files/fr/archive/mozilla/xul/menubar/index.html deleted file mode 100644 index 2d8a8d5660..0000000000 --- a/files/fr/archive/mozilla/xul/menubar/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: menubar -slug: Archive/Mozilla/XUL/menubar -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/menubar ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un conteneur généralement destiné à des éléments menu. Sur les ordinateurs Macintosh, la barre de menus est affichée en haut de l'écran, et tous les éléments non liés à un menu dans l'élément menubar seront ignorés. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
grippyhidden, statusbar -
-
Propriétés -
accessibleType, statusbar -
-

Exemples

-
Image:XUL_ref_menu.png
-
<menubar id="sample-menubar">
-  <menu id="action-menu" label="Action">
-    <menupopup id="action-popup">
-      <menuitem label="Nouvelle"/>
-      <menuitem label="Enregistrer" disabled="true"/>
-      <menuitem label="Fermer"/>
-      <menuseparator/>
-      <menuitem label="Quitter"/>
-    </menupopup>
-  </menu>
-  <menu id="edit-menu" label="Édition">
-    <menupopup id="edit-popup">
-      <menuitem label="Annuler"/>
-      <menuitem label="Rétablir"/>
-    </menupopup>
-  </menu>
-</menubar>
-
-

Attributs

-

-

- -
-
- -
- -

Propriétés

-
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
menu, menuitem, menulist, menupopup, menuseparator -
-
Interfaces -
nsIAccessibleProvider -
-
-
diff --git a/files/fr/archive/mozilla/xul/menuitem/index.html b/files/fr/archive/mozilla/xul/menuitem/index.html deleted file mode 100644 index 813096fdc4..0000000000 --- a/files/fr/archive/mozilla/xul/menuitem/index.html +++ /dev/null @@ -1,293 +0,0 @@ ---- -title: menuitem -slug: Archive/Mozilla/XUL/menuitem -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/menuitem ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un choix particulier dans un élément menupopup. Il agit de manière semblable à un élément button, mais est affiché dans un menu. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
acceltext, accesskey, allowevents, autocheck, checked, command, crop, description, disabled, image, key, label, name, selected, tabindex, type, validate, value -
-
Propriétés -
accessibleType, accessKey, command, control, crop, disabled, image, label, labelElement, parentContainer, selected, tabIndex, value -
-
Classes de style -
menuitem-iconic, menuitem-non-iconic -
-

Exemple

-
<menu id="edit-menu" label="Edit">
-  <menupopup id="edit-popup">
-     <menuitem label="Undo"/>
-     <menuitem label="Redo"/>
-  </menupopup>
-</menu>
-
-

Attributs

-

-

- -
-
- acceltext
-
- Type : chaîne de caractères
-
- Texte qui apparaîtra à côté du label d'un menu pour indiquer la touche de raccourci (accélérateur) à utiliser pour invoquer la commande. Si cette valeur est définie, elle écrase une clé assignée dans l'attribut key. Cet attribut ne s'applique pas aux menus directement sur la Barre de menus (menubar).
-
-
-
- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
allowevents -
Type : booléen -
Si défini à true, les évènements sont passés aux enfants de l'élément. Dans le cas contraire, ils ne sont passés qu'à l'élément lui-même. -
- - -
-
- -
-
- -
-
- checked
-
- Type : - - booléen -
-
- Indique si l'élément est coché ou non.
-
- Utilisez hasAttribute() pour déterminer si cet attribut est défini plutôt que getAttribute().
- Pour les boutons, l'attribut type doit etre mis à checkbox ou à radio pour qu'un effet soit perceptible.
-
-
- -
Note : si l'attribut checked est défini à true, et que sa valeur est rendue persistante avec l'attribut persist, Mozilla ne pourra pas conserver cette valeur lorsque l'élément menuitem est désélectionné suite au bug 15232. Pour contourner ceci, définissez l'attribut autocheck à false, puis définissez programmatiquement l'attribut checked lorsque l'utilisateur clique sur l'élément, et définissez-le à false au lieu de retirer l'attribut (c'est-à-dire qu'il faut faire menuitem.setAttribute("checked", "false") au lieu de menuitem.removeAttribute("checked")) lorsque l'utilisateur désélectionne le menuitem, car une valeur à false masquera correctement la marque cochée et conservera son état invisible.
-
- -
command -
Type : id d'élément -
Défini à la valeur de l'id d'un élément command observé par l'élément. -
- - -
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
image -
Type : URL d'une image -
L'URL de l'image devant apparaître sur l'élément. Si cet attribut est vide ou omis, aucune image n'apparaîtra. La position de l'image est déterminée par les attributs dir et orient. -
- - -
-
- -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
-
- -
selected -
Type : booléen -
Indique si l'élément est sélectionné ou non. Cette valeur est en lecture seule. Pour changer la sélection, utilisez la propriété selectedIndex ou selectedItem de l'élément conteneur. -
- - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
-
- -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
accessKey -
Type : caractère -
Obtient et définit la valeur de l'attribut accesskey. -
-


-

- -
-
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
image -
Type : URL d'image -
Obtient et définit la valeur de l'attribut image. -
- -
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
-
-
- -
-
selected
-
Type : booléen
-
La valeur de cette propriété est true si cet élément est sélectionné, ou false s'il ne l'est pas. Cette propriété est en lecture seule.
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Classes de style

-
-
menuitem-iconic
-
Use this class to have an image appear on the menuitem. Specify the image using the image attribute.
-
-
-
menuitem-non-iconic
-
Normally, menuitems have a margin to the left for an image or checkmark. This class may be used to remove this margin so that the menuitem appears on the left edge of the menupopup.
-
- -

Sujets liés

-
Éléments -
menu, menubar, menulist, menupopup, menuseparator
-
Interfaces -
nsIAccessibleProvider, nsIDOMXULContainerItemElement, nsIDOMXULSelectControlItemElement -
-


-

-
-
diff --git a/files/fr/archive/mozilla/xul/menulist/index.html b/files/fr/archive/mozilla/xul/menulist/index.html deleted file mode 100644 index 1f88ef35db..0000000000 --- a/files/fr/archive/mozilla/xul/menulist/index.html +++ /dev/null @@ -1,276 +0,0 @@ ---- -title: menulist -slug: Archive/Mozilla/XUL/menulist -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/menulist ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément pouvant être utilisé pour des listes de choix déroulantes. L'utilisateur peut sélectionner l'un des éléments affichés dans la liste menulist. Le choix actuellement sélectionné est affiché sur l'élément menulist lui-même. Pour créer la liste déroulante, ajoutez un élément menupopup dans l'élément menulist, avec les différents choix comme éléments menuitem. L'évènement command peut être utilisé pour exécuter du code lorsque la sélection change dans la liste. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
accesskey, crop, disableautoselect, disabled, editable, focused, image, label, oncommand, open, preference, readonly, sizetopopup, tabindex, value -
-
Propriétés -
accessibleType, crop, description, disableautoselect, disabled, editable, editor, image, inputField, itemCount, label, menuBoxObject, menupopup, open, selectedIndex, selectedItem, tabIndex, value -
-
Méthodes -
appendItem, contains, getIndexOfItem, getItemAtIndex, insertItemAt, removeAllItems, removeItemAt, select -
-

Exemples

-
  <menulist>
-    <menupopup>
-      <menuitem label="option 1" value="1"/>
-      <menuitem label="option 2" value="2"/>
-      <menuitem label="option 3" value="3"/>
-      <menuitem label="option 4" value="4"/>
-    </menupopup>
-  </menulist>
-
-

Attributs

-

-

- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
-
- -
image -
Type : URL d'une image -
L'URL de l'image devant apparaître sur l'élément. Si cet attribut est vide ou omis, aucune image n'apparaîtra. La position de l'image est déterminée par les attributs dir et orient. -
- - -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
oncommand -
Type : code de script -
Ce gestionnaire d'évènement est appelé lorsque la commande est activée. Cela se produit quand un utilisateur sélectionne un élément de menu ou active un raccourci clavier attaché à la commande. -
- - -
-
- -
open -
Type : booléen -
Pour les boutons de type menu, l'attribut open est défini à true lorsque le menu est ouvert. L'attribut open n'est pas présent si le menu est fermé. -
- - -
-
- -
preference -
Type : id d'élément -
Connecte l'élément à une préférence (élément preference) correspondante. Cet attribut n'a d'effet qu'utilisé au sein d'un prefwindow. La valeur de la préférence sera mise à jour pour correspondre à la propriété value de l'élément. -
- - -
-
- -
readonly -
Type : booléen -
Si défini à true, l'utilisateur ne peut pas modifier la valeur de l'élément. Cependant, celle-ci peut toujours être modifiée par un script. -
- - -
-
- -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
-
-
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
-
-
-
open -
Type : booléen -
Obtient et définit la valeur de l'attribut open. -
- -
-
-
selectedIndex -
Type : entier -
Renvoie l'indice de l'élément actuellement sélectionné. Un élément peut être sélectionné en assignant son indice à cette propriété. En lui assignant -1, tous les éléments seront désélectionnés. -
- -
-
-
selectedItem -
Type : élément -
Conserve l'élément actuellement sélectionné. Si aucun élément n'est sélectionné, sa valeur sera null. Vous pouvez sélectionner un élément en définissant cette valeur. Un évènement select sera envoyé à cet élément lorsqu'il est sélectionné en modifiant cette propriété, la propriété selectedIndex, ou par l'utilisateur. -
- -
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
- - - - - - - - - -

Sujets liés

-
Éléments -
menu, menubar, menuitem, menupopup, menuseparator -
-
Interfaces -
nsIAccessibleProvider, nsIDOMXULMenuListElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/menupopup/index.html b/files/fr/archive/mozilla/xul/menupopup/index.html deleted file mode 100644 index b71b919590..0000000000 --- a/files/fr/archive/mozilla/xul/menupopup/index.html +++ /dev/null @@ -1,229 +0,0 @@ ---- -title: menupopup -slug: Archive/Mozilla/XUL/menupopup -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/menupopup ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un conteneur utilisé pour afficher le contenu d'un menu popup. Lorsqu'un menupopup est ouvert, il flotte par dessus la fenêtre et peut s'étendre en dehors de celle-ci. Les menupopups peuvent être utilisés de plusieurs manières : -

-
  1. On peut les placer dans un élément menu, menulist ou button avec l'attribut type défini à « menu » pour créer un popup qui s'ouvrira lors d'un clic sur le bouton ou menu. -
  2. On peut les attacher à n'importe quel élément à l'aide de l'attribut popup. Lors d'un clic gauche sur l'élément, le menupopup sera affiché. -
  3. On peut les attacher à n'importe quel élément à l'aide de l'attribut context. Lors de l'ouverture d'un menu contextuel, le menupopup sera affiché. Un menu contextuel peut être ouvert par un clic droit sur l'élément ou l'appui sur la touche menu du clavier.
-

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
ignorekeys, left, onpopuphidden, onpopuphiding, onpopupshowing, onpopupshown, position, top -
-
Propriétés -
accessibleType, popupBoxObject, popup, state -
-
Méthodes -
hidePopup, moveTo, openPopup, openPopupAtScreen, showPopup, sizeTo -
-

Exemples

-

L'exemple suivant montre l'attachement d'un menupopup à un élément menulist. -

-
<menulist>
-  <menupopup>
-    <menuitem label="Mozilla" value="http://mozilla.org"/>
-    <menuitem label="Slashdot" value="http://slashdot.org"/>
-    <menuitem label="Sourceforge" value="http://sf.net"/>
-    <menuitem label="Freshmeat" value="http://freshmeat.net"/>
-  </menupopup>
-</menulist>
-
-

L'exemple qui suit montre l'utilisation d'un menupopup comme menu contextuel d'un élément. Lors d'un clic droit sur le label, le menu sera affiché. -

-
Image:XUL_ref_popup.png
-
<menupopup id="clipmenu">
-  <menuitem label="Couper"/>
-  <menuitem label="Copier"/>
-  <menuitem label="Coller"/>
-</menupopup>
-<label value="Clic droit pour ouvrir un popup" context="clipmenu"/>
-
-

Attributs

-

-

- -
-
- -
left -
Type : entier -
Remplace la position horizontale du popup spécifiée par la méthode showPopup. -
-


-

- - -
-
- -
onpopuphidden -
Type : code de script -
Cet évènement est envoyé à un popup après qu'il a été caché. http://www.langue-fr.net/index/A/apres-que.htm -
- - -
-
- -
onpopuphiding -
Type : code de script -
Cet évènement est envoyé à un popup lorsqu'il est sur le point d'être masqué. -
- - -
-
- -
onpopupshowing -
Type : code de script -
Cet évènement est envoyé à un popup juste avant son ouverture. On l'utilise généralement pour définir dynamiquement le contenu lorsque l'utilisateur demande son affichage. Si ce gestionnaire d'évènement renvoie false, le popup ne s'affichera pas. -
- - -
-
- -
onpopupshown -
Type : code de script -
Cet évènement est envoyé à un popup après son ouverture, de la même manière qu'un évènement onload est envoyé à une fenêtre à son ouverture. -
- - -
-
- -
position -
Type : une des valeurs ci-dessous -
L'attribut position détermine où le popup apparaît par rapport à l'élément sur lequel l'utilisateur a cliqué pour l'invoquer. C'est ce qui permet de placer le popup sur le bord d'un bouton. -
- - - -
-
- -
top -
Type : entier -
Remplace la position verticale du popup spécifiée par la méthode showPopup. -
-


-

- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
popupBoxObject -
Type : nsIPopupBoxObject -
Cette propriété en lecture seule conserve le nsIPopupBoxObject qui implémente le popup. Il n'est normalement pas nécessaire d'utiliser cette propriété étant donné que toutes ses fonctions sont disponibles via le popup lui-même. -
- -
-
-
position -
Type : chaîne -
Obtient et définit la valeur de l'attribut position. -
- -
-
-
state -
Type : chaîne -
Cette propriété en lecture seule indique si le popup est ouvert ou non. Quatre valeurs sont possibles : -
- - -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
-
hidePopup()
-
Type de retour : pas de valeur de retour -
Ferme le popup immédiatement. -
-
moveTo( x, y ) -
Type de retour : pas de valeur de retour -
Déplace le popup vers un nouvel emplacement. -
-
openPopup( anchor , position , x , y , isContextMenu, attributesOverride ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup relativement à un nœud spécifié à un emplacement spécifique. -

Le popup peut soit être ancré à un autre nœud ou ouvert librement. Pour ancrer un popup à un nœud, fournissez un nœud d'accrochage dans le paramètre anchor et définissez la position par une chaîne indiquant la manière dont le popup doit être ancré. -

Les valeurs possibles pour le paramètre position sont : before_start, before_end, after_start, after_end, start_before, start_after, end_before, end_after, overlap, after_pointer -

Le nœud d'accrochage ne doit pas nécessairement être dans le même document que le popup. -

Si le paramètre attributesOverride vaut true, l'attribut position sur le nœud popup a priorité sur la valeur du paramètre position. Si attributesOverride vaut false, l'attribut n'est utilisé que si le paramètre position est vide. -

Pour un popup ancré, les paramètres x et y peuvent être utilisés pour décaler le popup de sa position d'ancrage de quelques pixels (mesurés en pixels CSS). -

Les popups non ancrés peuvent être créés en fournissant null comme paramètre anchor. Un popup non ancré apparait à la position spécifiée par x et y relativement à la zone visible (viewport) du document contenant le nœud popup. Dans ce cas, les paramètres position et attributesOverride sont ignorés. -

-
openPopupAtScreen( x, y, isContextMenu ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup à une position spécifique sur l'écran spécifiée par x et y. Cette position peut être ajustée s'il s'avère qu'elle provoquerait l'apparition du popup en dehors de l'écran. Les coordonnées x et y sont mesurées en pixels CSS. -

-
showPopup( element, x, y, popupType, anchor, align ) Déprécié dans Mozilla 1.9 -
Type de retour : aucune valeur de retour -
Ouvre un élément popup. Deux moyens de spécifier l'emplacement où s'affichera la fenêtre popup existent, soit en spécifiant une position spécifique de l'écran, soit par rapport à un autre élément de la fenêtre. Si x ou y sont définies par une valeur, le popup apparaîtra aux coordonnées (x,y) de l'écran. Si x et y sont définies à -1, le popup sera positionné par rapport à l'element spécifié dans le premier paramètre. C'est cette dernière méthode qu'il faut utiliser, par exemple, pour afficher un popup sous un bouton. Dans ce cas, les paramètres anchor et align peuvent être utilisés pour contrôler plus avant l'endroit où apparaîtra le popup par rapport à l'élément. Le paramètre anchor correspond à l'attribut popupanchor de l'élément et le paramètre align correspond à l'attribut popupalign. Les paramètres anchor et align sont ignorés si ni x ni y ne valent -1. -
-
Pour qu'un popup apparaisse à une position relative à un autre élément tout en étant décalé de quelques pixels, déterminez la position réelle de l'élément à l'aide de ses propriétés boxObject.screenX et boxObject.screenY, et utilisez celles-ci comme paramètres x et y en y ajoutant les décalages souhaités. -
-
Le paramètre popupType doit être une des chaînes popup, context ou tooltip. Chaque type de popup est destiné à être affiché temporairement ; ils ne sont pas censés être affichés de façon permanente. On ne peut afficher qu'un popup à la fois. -
-
sizeTo( <i>largeur</i>, <i>hauteur</i> ) -
Type de retour : aucune valeur de retour -
Modifie la taille actuelle de la fenêtre popup avec les nouvelles dimensions largeur et hauteur. -
- -

Sujets liés

-
Éléments
menu, menubar, menuitem, menulist, menuseparator
-
Interfaces -
nsIAccessibleProvider, nsIDOMXULPopupElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/menuseparator/index.html b/files/fr/archive/mozilla/xul/menuseparator/index.html deleted file mode 100644 index 59a1fe1dda..0000000000 --- a/files/fr/archive/mozilla/xul/menuseparator/index.html +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: menuseparator -slug: Archive/Mozilla/XUL/menuseparator -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/menuseparator ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Utilisé pour créer un séparateur entre des éléments de menu. Typiquement affiché sous la forme d'une fine ligne. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
acceltext, accesskey, allowevents, command, crop, disabled, image, label, selected, tabindex, value -
-
Propriétés -
accessibleType, accessKey, command, control, crop, disabled, image, label, labelElement, parentContainer, selected, tabIndex, value -
-

Exemples

-
<menu label="Aide">
-  <menupopup>
-    <menuitem label="Rubriques d'aide"/>
-    <menuseparator/>
-    <menuitem label="Notes de version"/>
-  </menupopup>
-</menu>
-
-

Attributs

-

-

- -
-
- acceltext
-
- Type : chaîne de caractères
-
- Texte qui apparaîtra à côté du label d'un menu pour indiquer la touche de raccourci (accélérateur) à utiliser pour invoquer la commande. Si cette valeur est définie, elle écrase une clé assignée dans l'attribut key. Cet attribut ne s'applique pas aux menus directement sur la Barre de menus (menubar).
-
-
-
- -
accesskey
-
Type : caractère -
Cet attribut doit être une lettre utilisée comme touche de raccourci. Cette lettre doit être un des caractères apparaissant dans l'attribut label de l'élément.
-

Exemple

-
Image:XUL_ref_accesskey_attr.png
-
<vbox>
-  <label value="Entrez votre nom" accesskey="e" control="myName"/>
-  <textbox id="myName"/>
-  <button label="Annuler" accesskey="n"/>
-  <button label="OK" accesskey="O"/>
-</vbox>
-
-

Voir également

-

Les attributs label et acceltext -

-
-
- -
allowevents -
Type : booléen -
Si défini à true, les évènements sont passés aux enfants de l'élément. Dans le cas contraire, ils ne sont passés qu'à l'élément lui-même. -
- - -
-
- -
command -
Type : id d'élément -
Défini à la valeur de l'id d'un élément command observé par l'élément. -
- - -
-
- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
image -
Type : URL d'une image -
L'URL de l'image devant apparaître sur l'élément. Si cet attribut est vide ou omis, aucune image n'apparaîtra. La position de l'image est déterminée par les attributs dir et orient. -
- - -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
selected -
Type : booléen -
Indique si l'élément est sélectionné ou non. Cette valeur est en lecture seule. Pour changer la sélection, utilisez la propriété selectedIndex ou selectedItem de l'élément conteneur. -
- - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
accessKey -
Type : caractère -
Obtient et définit la valeur de l'attribut accesskey. -
-


-

- -
-
-
-
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
image -
Type : URL d'image -
Obtient et définit la valeur de l'attribut image. -
- -
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
-
-
- -
-
selected
-
Type : booléen
-
La valeur de cette propriété est true si cet élément est sélectionné, ou false s'il ne l'est pas. Cette propriété est en lecture seule.
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
menu, menubar, menuitem, menulist, menupopup -
-
Interfaces -
nsIAccessibleProvider, nsIDOMXULContainerItemElement, nsIDOMXULSelectControlItemElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/modification_dynamique_d'interfaces_utilisateur_en_xul/index.html b/files/fr/archive/mozilla/xul/modification_dynamique_d'interfaces_utilisateur_en_xul/index.html deleted file mode 100644 index 5275b8d97f..0000000000 --- a/files/fr/archive/mozilla/xul/modification_dynamique_d'interfaces_utilisateur_en_xul/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Modification dynamique d'interfaces utilisateur en XUL -slug: Archive/Mozilla/XUL/Modification_dynamique_d'interfaces_utilisateur_en_XUL -tags: - - DOM - - Extensions - - NeedsUpdate - - XUL -translation_of: Archive/Mozilla/XUL/Dynamically_modifying_XUL-based_user_interface ---- -

Cet article traite de la manipulation d'interfaces en XUL, à l'aide du DOM et d'autres API. Il explique le concept desdocuments DOM, présente quelques exemples simples d'appels DOM utilisés pour effectuer des manipulations basiques sur un document, et ensuite la façon de travailler avec ducontenu XBL anonyme à l'aide de méthodes spécifiques à Mozilla.

- -

Il est écrit pour des développeurs XUL débutants et de niveau moyen. Nous supposons que le lecteur a des connaissances de base à la fois en XUL et en JavaScript. Il peut également être intéressant de consulter quelques documents d'introduction relatifs au DOM, comme l'article À propos du Document Object Model ou la page d'introduction de la Référence du DOM Gecko.

- -

Introduction

- -

Comme vous le savez, XUL est un langage XML utilisé dans plusieurs applications basées sur Mozilla, comme Firefox et Thunderbird, pour décrire l'interface utilisateur. Dans les applications XUL, JavaScript définit le comportement, à l'aide des API DOM pour accéder au document XUL.

- -

En quoi consistent ces API DOM ?

- -

Ce sont les interfaces utilisées dans toute interaction entre un script et un document. Si vous avez écrit n'importe quel script interagissant avec un document XUL (ou HTML), vous avez déjà utilisé des appels DOM. La méthode DOM la plus connue est probablement document.getElementById(), qui renvoie un élément depuis son id. Vous avez peut-être utilisé d'autres appels, comme element.setAttribute(), ou, si vous avez écrit une extension, la méthode addEventListener(). Toutes celles-ci sont définies dans le DOM.

- -

D'autres méthodes DOM permettent également de créer, déplacer ou supprimer des éléments d'un document. Celles-ci seront présentées dans une section ultérieure. Pour l'instant, préoccupons-nous de ce qu'est undocument .

- -

Définition d'un document

- -

Un document est une structure de données manipulée à l'aide des API DOM. Une structure logique de tout élément est un arbre, dont les nœuds sont les éléments, attributes, instructions de traitement, commentaires, etc. Utilisez l'outil Inspecteur DOM pour voir la représentation sous forme d'arbre de n'importe quel document. Todo: simple example of a XUL document and a tree

- -

Vous pouvez penser à un document comme à une représentation en mémoire de HTML valide ou de XML bien formé (en ce compris du XUL).

- -

Il est important de se souvenir de différentes pages Web (et même différentes instances de la même page Web) correspondent à différents documents. Chaque fenêtre XUL possède son propre document distinct, et il peut même y avoir un certain nombre de documents différents dans une même fenêtre, lorsqu'uil y a des élements <iframe>, <browser>, ou encore <tabbrowser>. Vous devez vous assurer de toujours manipuler le bon document. (Consultez Travailler avec des fenêtres dans le chrome pour en savoir plus.) Lorsque votre script est inclus à l'aide d'une balise <script>, la propriété document référence le document DOM dont le script fait partie.

- -

Exemples : utilisation de méthodes DOM

- -

Cette section présente l'utilisation des méthodes DOM appendChild(), createElement(), insertBefore(), et removeChild().

- -

Suppression de tous les enfants d'un élément

- -

Cet exemple supprime tous les enfants d'un élément dont l'id est "unCertainElement" du document courant, en appelant la méthode removeChild() pour supprimer le premier enfant et ce jusqu'à ce que plus aucun d'entre-eux ne reste.

- -

Notez que hasChildNodes() et firstChild font également partie de l'API DOM.

- -
var element = document.getElementById("unCertainElement");
-while(element.hasChildNodes())
-  element.removeChild(element.firstChild);
-
- -

Insertion d'éléments de menu dans un menu

- -

Cet exemple ajoute deux nouveaux élements de menu à un <menupopup>, au début et à la fin de celui-ci. Il utilise la méthode document.createElementNS() pour créer les éléments, et insertBefore() avec appendChild() pour insérer les éléments créés dans le document.

- -

Notes :

- - - -
function createMenuItem(aLabel) {
-  const XUL_NS = "http://www.mozilla.org/keymaster/gat...re.is.only.xul";
-  var item = document.createElementNS(XUL_NS, "menuitem"); // crée un nouvel élément de menu XUL
-  item.setAttribute("label", aLabel);
-  return item;
-}
-var popup = document.getElementById("myPopup"); // un élément <menupopup>
-var first = createMenuItem("Premier choix");
-var last = createMenuItem("Dernier choix");
-popup.insertBefore(first, popup.firstChild);
-popup.appendChild(last);
-
- -

Il est également possible d'utiliser appendChild() et insertBefore() pour déplacer des éléments existants. Par exemple, vous pouvez déplacer l'élément nommé « First item » vers la fin du menu en ajoutant cette ligne à la fin du bout de code ci-dessus :

- -
popup.appendChild(first);
-
- -

Cette instruction supprimerait le nœud de sa position courante dans le document et le réinsèrerait à la fin du menu.

- -

Contenu anonyme (XBL)

- -

XBL est le langage utilisé dans Mozilla pour définir de nouveaux éléments d'interface. Ces outils définis en XBL peuvent choisir de définir un certain contenu qui sera inséré dans l'élément conteneur lorsque la liaison (binding) est attachée. Ce contenu, appelécontenu anonyme , n'est pas accessible à travers les méthodes DOM normales.

- -

Il est nécessaire d'utiliser les méthodes de l'interface nsIDOMDocumentXBL à la place. Par exemple :

- -
// récupère le premier enfant anonyme du nœud donné
-document.getAnonymousNodes(node)[0];
-
-// renvoie une NodeList d'éléments anonymes dont l'attribut anonid vaut el1
-document.getAnonymousElementByAttribute(node, "anonid", "el1");
-
- -

Une fois que vous avez une référence à un nœud anonyme, vous pouvez utiliser les méthodes DOM normales pour naviguer et manipuler les autres nœuds de cette liaison XBL.

- -

Voir aussi

- - diff --git a/files/fr/archive/mozilla/xul/modifications_xul_pour_firefox_1.5/index.html b/files/fr/archive/mozilla/xul/modifications_xul_pour_firefox_1.5/index.html deleted file mode 100644 index 851dd7ae7a..0000000000 --- a/files/fr/archive/mozilla/xul/modifications_xul_pour_firefox_1.5/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Modifications XUL pour Firefox 1.5 -slug: Archive/Mozilla/XUL/Modifications_XUL_pour_Firefox_1.5 -tags: - - XUL -translation_of: Archive/Mozilla/XUL/XUL_Changes_for_Firefox_1.5 ---- -

-

Cette page répertorie les modifications les plus remarquables au XUL dans Firefox 1.5 (Gecko 1.8). Pour les autres changements à connaître, voir Adaptation des applications XUL pour Firefox 1.5. -

-

<scrollcorner>

-

Un nouvel élément <scrollcorner> sert à créer une petite boîte à l'intersection entre les ascenseurs horizontal et vertical. -

-

<richlistbox> et <richlistitem>

-

Les éléments <richlistbox> et <richlistitem> sont utilisés pour la création de liste avec du contenu arbitraire. Cet élément fonctionne de manière similaire à <listbox> qui est principalement dédié aux listes de texte. Le <richlistbox> supporte presque la même API que le <listbox> et des items uniques créés avec l'élément <richlistitem> peuvent y être sélectionnés. Consultez XUL:Richlistbox pour plus d'information. -

-

Système de préférences

-

Plusieurs éléments ont été ajoutés pour la création de fenêtre de gestion des préférences. Ces fenêtres sont des types spéciaux de boîtes de dialogues supportant plusieurs panneaux qui peuvent être contenus dans le même fichier ou des fichiers séparés. Une série d'icônes apparaîtront en haut de la boîte de dialogue pour permettre à l'utilisateur de changer de panneaux. En plus de ces nouveaux éléments, quelques attributs supplémentaires pour des éléments existants ont été ajoutés pour rendre plus simple la configuration de préférences sans avoir à utiliser de code. Pour plus d'information, consultez Système de préférences. -

-

bfcache

-

Mozilla mémorise maintenant les résultats du DOM d'une page, afin de ne pas avoir à recharger la page en navigant vers l'arrière ou vers l'avant, ce qui rend la navigation beaucoup plus efficace. Les évènements pageshow et pagehide sont utilisés lors du basculement vers une page dans le cache, tandis que les évènements load et unload servent uniquement lorsqu'une page est chargée ou déchargée. -

Pour plus d'information, consultez Utilisation du cache de Firefox 1.5 -

-

tabIndex

-

La propriété tabIndex s'applique maintenant à plus d'éléments. -

-

<radiogroup>

-

L'affectation de la propriété value sur un élément <radiogroup> sélectionne directement l'élément <radio> du groupe ayant la valeur correspondante. -

-

Boîte de dialogue : propriété defaultButton

-

La liaison <dialog> supporte maintenant la propriété defaultButton. L'affectation de cette propriété modifie le bouton par défaut de la boîte de dialogue. Il peut être défini soit à l'un des boutons de la liaison <dialog> (en utilisant leurs noms) ou soit à none auquel cas aucun bouton ne sera défini par défaut. -

-

Bouton : propriété icon

-

La propriété icon d'un bouton peut servir à définir un stock d'icônes prédéfinies sur un bouton et utilisées sur certaines plateformes. Par exemple, <button icon="help"> va créer un bouton avec une icône d'aide. Les systèmes GNOME utilisent habituellement cette pratique où les valeurs possibles sont : -

accept, cancel, help, open, save, find, clear, yes, no, apply, close, print, add, remove, refresh, go-forward, go-back, properties, select-font, select-color, network. -

-

<menulist>

-

Les items dans un <menulist> supporte l'attribut description permettant d'inclure du texte descriptif à côté du libellé d'un item. Les méthodes appendItem et insertItemAt utilisées pour pour la création d'items dans un menulist prennent un argument supplémentaire pour cette description. -

-

<stringbundle>

-

L'élément <stringbundle> a une propriété strings servant à récupérer une énumération de toutes les chaînes de caractères dans le bundle. -

-

Onglets repositionnables

-

L'utilisateur peut maintenant réarranger les onglets de navigation en les faisant glisser. -

-

<tabbox>

-

L'élément <tabbox> supporte maintenant l'attribut selectedIndex pour définir l'onglet sélectionné par défaut. -

-

Chargement dynamique des overlays

-

XUL supporte maintenant le chargement dynamique des overlays grâce à la fonction document.loadOverlay. -

-
-

Informations sur le document d'origine

- -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/blur/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/blur/index.html" deleted file mode 100644 index c8078d98c9..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/blur/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: blur -slug: Archive/Mozilla/XUL/Méthodes/blur -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/blur ---- -
« Accueil de la référence XUL
-
blur() -
Type de retour : aucune valeur de retour -
Si le focus est sur l'élément, il sera retiré. Le focus n'est placé automatiquement sur aucun autre élément. Utilisé essentiellement pour appeler le gestionnaire d'évènement onblur. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/click/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/click/index.html" deleted file mode 100644 index ef23173bfb..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/click/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: click -slug: Archive/Mozilla/XUL/Méthodes/click -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/click ---- -
« Accueil de la référence XUL
-
click() -
Type de retour : aucune valeur de retour -
Appelle le gestionnaire d'évènement onclick pour l'élément. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/decrease/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/decrease/index.html" deleted file mode 100644 index 7e3bc38bfd..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/decrease/index.html" +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: decrease -slug: Archive/Mozilla/XUL/Méthodes/decrease -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/decrease ---- -
- « Accueil de la référence XUL
-
-
-
- Méthode de : scale, textbox
-
-
-
-
- decrease()
-
- Type de retour : - - aucune valeur de retour -
-
- Diminue la valeur de<magic name="\"PAGENAME\"/"> la boîte numérique l'échelle, l'échelle ou la boîte numérique</magic> de la valeur de l'incrément.
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/decreasepage/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/decreasepage/index.html" deleted file mode 100644 index 3d83d6c860..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/decreasepage/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: decreasePage -slug: Archive/Mozilla/XUL/Méthodes/decreasePage -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/decreasePage ---- -
« Accueil de la référence XUL
-
decreasePage()
-
Méthode de : scale
-
Type de retour : aucune valeur de retour -
Diminue la valeur de l'échelle de la valeur de pageIncrement. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/docommand/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/docommand/index.html" deleted file mode 100644 index 362e53a578..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/docommand/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: doCommand -slug: Archive/Mozilla/XUL/Méthodes/doCommand -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/doCommand ---- -
« Accueil de la référence XUL
-
doCommand() -
Type de retour : aucune valeur renvoyée -
Exécute l'évènement command pour l'élément. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/focus/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/focus/index.html" deleted file mode 100644 index 9f936eba19..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/focus/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: focus -slug: Archive/Mozilla/XUL/Méthodes/focus -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/focus ---- -
« Accueil de la référence XUL
-
focus() -
Type de retour : aucune valeur de retour -
Assigne le focus à l'élément, si celui-ci peut l'accepter. Le gestionnaire d'évènement onfocus est appelé. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/getelementsbyattribute/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/getelementsbyattribute/index.html" deleted file mode 100644 index 1eceb74073..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/getelementsbyattribute/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: getElementsByAttribute -slug: Archive/Mozilla/XUL/Méthodes/getElementsByAttribute -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/getElementsByAttribute ---- -
« Accueil de la référence XUL
-
getElementsByAttribute( attrib, value ) -
Type de retour : liste de nœuds DOM (NodeList) -
Renvoie un tableau contenant tous les éléments enfants de l'élément disposant de l'attribut donné comme premier paramètre avec la valeur donnée comme second paramètre. Si le second paramètre est « * », l'attribut peut avoir n'importe quelle valeur. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/getrowcount/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/getrowcount/index.html" deleted file mode 100644 index 3ffe5f059b..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/getrowcount/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: getRowCount -slug: Archive/Mozilla/XUL/Méthodes/getRowCount -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/getRowCount ---- -
« Accueil de la référence XUL
-
getRowCount() -
Type de retour : entier -
Renvoie le nombre total de lignes dans l'élément, quel que soit le nombre de lignes affichées. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/hasuservalue/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/hasuservalue/index.html" deleted file mode 100644 index e0c2b8202f..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/hasuservalue/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: hasUserValue -slug: Archive/Mozilla/XUL/Méthodes/hasUserValue -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/hasUserValue ---- -
« Accueil de la référence XUL
-
hasUserValue() -
Type de retour : booléen -
Renvoie true si la préférence a été modifiée par rapport à sa valeur par défaut. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/hidepopup/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/hidepopup/index.html" deleted file mode 100644 index d900d650db..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/hidepopup/index.html" +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: hidePopup -slug: Archive/Mozilla/XUL/Méthodes/hidePopup -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/hidePopup ---- -
« Accueil de la référence XUL
-
hidePopup()
-
Méthode de : popup, menupopup, tooltip
-
Type de retour : pas de valeur de retour -
Ferme le popup immédiatement. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/increase/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/increase/index.html" deleted file mode 100644 index c2308982af..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/increase/index.html" +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: increase -slug: Archive/Mozilla/XUL/Méthodes/increase -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/increase ---- -
- « Accueil de la référence XUL
-
-
-
- Méthode de : scale textbox
-
-
-
-
- increase()
-
- Type de retour : - - aucune valeur de retour -
-
- Augmente la valeur de <magic name="\"PAGENAME\"/">la boîte numérique, XUL:scale = l'échelle, l'échelle ou la boîte numérique</magic> de la valeur de l'incrément.
-
-

 

-
-  
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/increasepage/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/increasepage/index.html" deleted file mode 100644 index 9d3cbac780..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/increasepage/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: increasePage -slug: Archive/Mozilla/XUL/Méthodes/increasePage -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/increasePage ---- -
« Accueil de la référence XUL
-
increasePage()
-
Méthode de : scale
-
Type de retour : aucune valeur de retour -
Augmente la valeur de l'échelle de la valeur de pageIncrement. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/index.html" deleted file mode 100644 index 72e3cb3146..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/index.html" +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: Méthodes -slug: Archive/Mozilla/XUL/Méthodes -tags: - - Aide_pour_les_éditeurs_de_MDC - - Méthodes_XUL - - Traduction_en_cours -translation_of: Archive/Mozilla/XUL/Method ---- -

« Accueil de la référence XUL

- - - diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/moveto/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/moveto/index.html" deleted file mode 100644 index af8c9b8a47..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/moveto/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: moveTo -slug: Archive/Mozilla/XUL/Méthodes/moveTo -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/moveTo ---- -
« Accueil de la référence XUL
-
moveTo( x, y ) -
Type de retour : pas de valeur de retour -
Déplace le popup vers un nouvel emplacement. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/openpopup/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/openpopup/index.html" deleted file mode 100644 index 0dbebe88b9..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/openpopup/index.html" +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: openPopup -slug: Archive/Mozilla/XUL/Méthodes/openPopup -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/openPopup ---- -
« Accueil de la référence XUL
-
openPopup( anchor , position , x , y , isContextMenu, attributesOverride ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup relativement à un nœud spécifié à un emplacement spécifique. -

Le popup peut soit être ancré à un autre nœud ou ouvert librement. Pour ancrer un popup à un nœud, fournissez un nœud d'accrochage dans le paramètre anchor et définissez la position par une chaîne indiquant la manière dont le popup doit être ancré. -

Les valeurs possibles pour le paramètre position sont : before_start, before_end, after_start, after_end, start_before, start_after, end_before, end_after, overlap, after_pointer -

Le nœud d'accrochage ne doit pas nécessairement être dans le même document que le popup. -

Si le paramètre attributesOverride vaut true, l'attribut position sur le nœud popup a priorité sur la valeur du paramètre position. Si attributesOverride vaut false, l'attribut n'est utilisé que si le paramètre position est vide. -

Pour un popup ancré, les paramètres x et y peuvent être utilisés pour décaler le popup de sa position d'ancrage de quelques pixels (mesurés en pixels CSS). -

Les popups non ancrés peuvent être créés en fournissant null comme paramètre anchor. Un popup non ancré apparait à la position spécifiée par x et y relativement à la zone visible (viewport) du document contenant le nœud popup. Dans ce cas, les paramètres position et attributesOverride sont ignorés. -

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/openpopupatscreen/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/openpopupatscreen/index.html" deleted file mode 100644 index 56e83bb9c6..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/openpopupatscreen/index.html" +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: openPopupAtScreen -slug: Archive/Mozilla/XUL/Méthodes/openPopupAtScreen -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/openPopupAtScreen ---- -
« Accueil de la référence XUL
-
openPopupAtScreen( x, y, isContextMenu ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup à une position spécifique sur l'écran spécifiée par x et y. Cette position peut être ajustée s'il s'avère qu'elle provoquerait l'apparition du popup en dehors de l'écran. Les coordonnées x et y sont mesurées en pixels CSS. -

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/reset/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/reset/index.html" deleted file mode 100644 index 2e573454aa..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/reset/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: reset -slug: Archive/Mozilla/XUL/Méthodes/reset -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/reset ---- -
« Accueil de la référence XUL
-
reset() -
Type de retour : aucune valeur renvoyée -
Réinitialise la préférence à sa valeur par défaut. -
Pour un élément textbox, la liste de transactions d'annulation est également vidée (Gecko 1.9). -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/select/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/select/index.html" deleted file mode 100644 index 79d85de4e9..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/select/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: select -slug: Archive/Mozilla/XUL/Méthodes/select -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/select ---- -
« Accueil de la référence XUL
-
select() -
Type retourné : aucune valeur retournée -
Sélectionne l'intégralité du texte d'une boîte texte. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/selectall/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/selectall/index.html" deleted file mode 100644 index ff10b60952..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/selectall/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: selectAll -slug: Archive/Mozilla/XUL/Méthodes/selectAll -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/selectAll ---- -
« Accueil de la référence XUL
-
selectAll() -
Type de retour : aucune valeur renvoyée -
Sélectionne tous les éléments. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/selectitem/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/selectitem/index.html" deleted file mode 100644 index 2131fd8738..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/selectitem/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: selectItem -slug: Archive/Mozilla/XUL/Méthodes/selectItem -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/selectItem ---- -
« Accueil de la référence XUL
-
selectItem( item ) -
Type de retour : aucune valeur renvoyée -
Désélectionne tous les éléments actuellement sélectionnés, puis sélectionne l'élément donné en argument. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/selectitemrange/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/selectitemrange/index.html" deleted file mode 100644 index 36913d700c..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/selectitemrange/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: selectItemRange -slug: Archive/Mozilla/XUL/Méthodes/selectItemRange -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/selectItemRange ---- -
« Accueil de la référence XUL
-
selectItemRange( startItem, endItem) -
Type de retour : aucune valeur renvoyée -
Sélectionne tous les éléments compris entre les deux éléments donnés en paramètre, y compris les éléments de début et de fin. Tous les autres éléments sont désélectionnés. Cette méthode n'a aucun effet sur les listes en mono-sélection. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/setselectionrange/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/setselectionrange/index.html" deleted file mode 100644 index 6a527b231f..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/setselectionrange/index.html" +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: setSelectionRange -slug: Archive/Mozilla/XUL/Méthodes/setSelectionRange -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/setSelectionRange ---- -

« Accueil de la référence XUL -

-
setSelectionRange( début, fin ) -
Type retourné : aucune valeur retournée -
Cette méthode sélectionne une portion de texte dans une zone de texte (textbox ou textarea) où l'argument début est le premier caractère de la sélection et l'argument fin le dernier caractère de la sélection.
Renseigner les deux arguments avec la même valeur équivaut à déplacer le curseur d'écriture sans rien sélectionner. -
-


-Interwiki Language Links -

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/showpane/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/showpane/index.html" deleted file mode 100644 index fdb76134d5..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/showpane/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: showPane -slug: Archive/Mozilla/XUL/Méthodes/showPane -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/showPane ---- -
« Accueil de la référence XUL
-
showPane( <i>prefpane</i> ) -
Type retourné : aucune valeur retournée -
Bascule vers un panneau en particulier. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/showpopup/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/showpopup/index.html" deleted file mode 100644 index f320227bdb..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/showpopup/index.html" +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: showPopup -slug: Archive/Mozilla/XUL/Méthodes/showPopup -tags: - - Méthodes_XUL - - NeedsRewrite - - NeedsTechnicalReview -translation_of: Archive/Mozilla/XUL/Method/showPopup ---- -
« Accueil de la référence XUL
-
showPopup( element, x, y, popupType, anchor, align ) Déprécié dans Mozilla 1.9 -
Type de retour : aucune valeur de retour -
Ouvre un élément popup. Deux moyens de spécifier l'emplacement où s'affichera la fenêtre popup existent, soit en spécifiant une position spécifique de l'écran, soit par rapport à un autre élément de la fenêtre. Si x ou y sont définies par une valeur, le popup apparaîtra aux coordonnées (x,y) de l'écran. Si x et y sont définies à -1, le popup sera positionné par rapport à l'element spécifié dans le premier paramètre. C'est cette dernière méthode qu'il faut utiliser, par exemple, pour afficher un popup sous un bouton. Dans ce cas, les paramètres anchor et align peuvent être utilisés pour contrôler plus avant l'endroit où apparaîtra le popup par rapport à l'élément. Le paramètre anchor correspond à l'attribut popupanchor de l'élément et le paramètre align correspond à l'attribut popupalign. Les paramètres anchor et align sont ignorés si ni x ni y ne valent -1. -
-
Pour qu'un popup apparaisse à une position relative à un autre élément tout en étant décalé de quelques pixels, déterminez la position réelle de l'élément à l'aide de ses propriétés boxObject.screenX et boxObject.screenY, et utilisez celles-ci comme paramètres x et y en y ajoutant les décalages souhaités. -
-
Le paramètre popupType doit être une des chaînes popup, context ou tooltip. Chaque type de popup est destiné à être affiché temporairement ; ils ne sont pas censés être affichés de façon permanente. On ne peut afficher qu'un popup à la fois. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/sizeto/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/sizeto/index.html" deleted file mode 100644 index 162f0dab6a..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/sizeto/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: sizeTo -slug: Archive/Mozilla/XUL/Méthodes/sizeTo -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/sizeTo ---- -
« Accueil de la référence XUL
-
sizeTo( <i>largeur</i>, <i>hauteur</i> ) -
Type de retour : aucune valeur de retour -
Modifie la taille actuelle de la fenêtre popup avec les nouvelles dimensions largeur et hauteur. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/stop/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/stop/index.html" deleted file mode 100644 index 673344cdcf..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/stop/index.html" +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: stop -slug: Archive/Mozilla/XUL/Méthodes/stop -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/stop ---- -
-

« Accueil de la référence XUL -

-
-
stop() -
Type retourné : aucune valeur retournée -
Équivalent au clic sur le bouton Stop, cette méthode arrête le chargement en cours du document. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/syncsessions/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/syncsessions/index.html" deleted file mode 100644 index de76541536..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/syncsessions/index.html" +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: syncSessions -slug: Archive/Mozilla/XUL/Méthodes/syncSessions -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/syncSessions ---- -
-

« Accueil de la référence XUL -

-
-
syncSessions( autoCompleteElement ) -
Type retourné : ??? -
Copie les sessions depuis un autre élément autocomplété. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/timedselect/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/timedselect/index.html" deleted file mode 100644 index 2a30e67317..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/timedselect/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: timedSelect -slug: Archive/Mozilla/XUL/Méthodes/timedSelect -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/timedSelect ---- -
« Accueil de la référence XUL
-
timedSelect( item, timeout ) -
Type de retour : aucune valeur renvoyée -
Sélectionne un élément spécifié par l'argument item après un nombre de millisecondes définit par l'argument timeout. Tous les autres éléments sont désélectionnés. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/m\303\251thodes/toggleitemselection/index.html" "b/files/fr/archive/mozilla/xul/m\303\251thodes/toggleitemselection/index.html" deleted file mode 100644 index d6dac62e00..0000000000 --- "a/files/fr/archive/mozilla/xul/m\303\251thodes/toggleitemselection/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: toggleItemSelection -slug: Archive/Mozilla/XUL/Méthodes/toggleItemSelection -tags: - - Méthodes_XUL -translation_of: Archive/Mozilla/XUL/Method/toggleItemSelection ---- -
« Accueil de la référence XUL
-
toggleItemSelection( item ) -
Type de retour : aucune valeur renvoyée -
Modifie l'état de sélection de l'élément spécifié. S'il est sélectionné, il devient désélectionné. S'il est désélectionné, il devient sélectionné. Les autres éléments de la liste ne sont pas affectés et ils conservent leur état de sélection. -
-
-
diff --git a/files/fr/archive/mozilla/xul/panel/index.html b/files/fr/archive/mozilla/xul/panel/index.html deleted file mode 100644 index 64daec52df..0000000000 --- a/files/fr/archive/mozilla/xul/panel/index.html +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: panel -slug: Archive/Mozilla/XUL/panel -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/panel ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un panel est une fenêtre popup pouvant contenir n'importe quel type de contenu. Il n'a aucune décoration de fenêtre. Lorsqu'il est ouvert, il flotte par dessus la fenêtre et peut déborder même de la fenêtre principale. Typiquement, il sera attaché à un élément à l'aide de l'attribut popup afin d'apparaitre lorsque l'on clique avec le bouton de gauche de la souris sur l'élément. Un panel peut également être ouvert via un script à l'aide de la méthode openPopup. -

Le panel sera fermé lorsque l'utilisateur cliquera en dehors de celui-ci ou que sa méthode hidePopup sera appelée. -

-
Attributs -
left, noautofocus, onpopuphidden, onpopuphiding, onpopupshowing, onpopupshown, position, top -
-
Propriétés -
accessible, popupBoxObject, popup, state -
-
Méthodes -
hidePopup, moveTo, openPopup, openPopupAtScreen, sizeTo -
-

Exemples

-

L'exemple qui suit montre comment un panel peut être attaché à un label. -

-
<panel id="thepanel">
-  <hbox align="start">
-    <image src="warning.png"/>
-    <vbox>
-      <description value="Vous avez 6 nouveaux messages."/>
-      <hbox>
-        <button label="Lire le courrier"/>
-        <button label="Nouveau message"/>
-      </hbox>
-    </vbox>
-  </hbox>
-</panel>
-<description value="6 nouveaux messages" popup="thepanel"/>
-
-

Attributs

-

-

- -
left -
Type : entier -
Remplace la position horizontale du popup spécifiée par la méthode showPopup. -
-


-

- - -
-
- -
noautofocus -
Type : booléen -
Si mis à false, la valeur par défaut, l'élément ayant actuellement le focus le perdra si le popup est ouvert ou fermé. Si mis à true, le focus ne sera pas modifié. -
-


-

- - -
-
- -
onpopuphidden -
Type : code de script -
Cet évènement est envoyé à un popup après qu'il a été caché. http://www.langue-fr.net/index/A/apres-que.htm -
- - -
-
- -
onpopuphiding -
Type : code de script -
Cet évènement est envoyé à un popup lorsqu'il est sur le point d'être masqué. -
- - -
-
- -
onpopupshowing -
Type : code de script -
Cet évènement est envoyé à un popup juste avant son ouverture. On l'utilise généralement pour définir dynamiquement le contenu lorsque l'utilisateur demande son affichage. Si ce gestionnaire d'évènement renvoie false, le popup ne s'affichera pas. -
- - -
-
- -
onpopupshown -
Type : code de script -
Cet évènement est envoyé à un popup après son ouverture, de la même manière qu'un évènement onload est envoyé à une fenêtre à son ouverture. -
- - -
-
- -
position -
Type : une des valeurs ci-dessous -
L'attribut position détermine où le popup apparaît par rapport à l'élément sur lequel l'utilisateur a cliqué pour l'invoquer. C'est ce qui permet de placer le popup sur le bord d'un bouton. -
- - - -
-
- -
top -
Type : entier -
Remplace la position verticale du popup spécifiée par la méthode showPopup. -
-


-

- - -
- -

Propriétés

-

-

-
accessible -
Type : nsIAccessible -
Renvoie l'objet d'accessibilité pour l'élément. -
-


-

- -
-
-
popupBoxObject -
Type : nsIPopupBoxObject -
Cette propriété en lecture seule conserve le nsIPopupBoxObject qui implémente le popup. Il n'est normalement pas nécessaire d'utiliser cette propriété étant donné que toutes ses fonctions sont disponibles via le popup lui-même. -
- -
-
-
position -
Type : chaîne -
Obtient et définit la valeur de l'attribut position. -
- -
-
-
state -
Type : chaîne -
Cette propriété en lecture seule indique si le popup est ouvert ou non. Quatre valeurs sont possibles : -
- - -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
-
hidePopup()
-
Type de retour : pas de valeur de retour -
Ferme le popup immédiatement. -
-
moveTo( x, y ) -
Type de retour : pas de valeur de retour -
Déplace le popup vers un nouvel emplacement. -
-
openPopup( anchor , position , x , y , isContextMenu, attributesOverride ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup relativement à un nœud spécifié à un emplacement spécifique. -

Le popup peut soit être ancré à un autre nœud ou ouvert librement. Pour ancrer un popup à un nœud, fournissez un nœud d'accrochage dans le paramètre anchor et définissez la position par une chaîne indiquant la manière dont le popup doit être ancré. -

Les valeurs possibles pour le paramètre position sont : before_start, before_end, after_start, after_end, start_before, start_after, end_before, end_after, overlap, after_pointer -

Le nœud d'accrochage ne doit pas nécessairement être dans le même document que le popup. -

Si le paramètre attributesOverride vaut true, l'attribut position sur le nœud popup a priorité sur la valeur du paramètre position. Si attributesOverride vaut false, l'attribut n'est utilisé que si le paramètre position est vide. -

Pour un popup ancré, les paramètres x et y peuvent être utilisés pour décaler le popup de sa position d'ancrage de quelques pixels (mesurés en pixels CSS). -

Les popups non ancrés peuvent être créés en fournissant null comme paramètre anchor. Un popup non ancré apparait à la position spécifiée par x et y relativement à la zone visible (viewport) du document contenant le nœud popup. Dans ce cas, les paramètres position et attributesOverride sont ignorés. -

-
openPopupAtScreen( x, y, isContextMenu ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup à une position spécifique sur l'écran spécifiée par x et y. Cette position peut être ajustée s'il s'avère qu'elle provoquerait l'apparition du popup en dehors de l'écran. Les coordonnées x et y sont mesurées en pixels CSS. -

-
sizeTo( <i>largeur</i>, <i>hauteur</i> ) -
Type de retour : aucune valeur de retour -
Modifie la taille actuelle de la fenêtre popup avec les nouvelles dimensions largeur et hauteur. -
- -

Sujets liés

-
Interfaces -
nsIAccessibleProvider, nsIDOMXULPopupElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/popup/index.html b/files/fr/archive/mozilla/xul/popup/index.html deleted file mode 100644 index 4ee85f8e85..0000000000 --- a/files/fr/archive/mozilla/xul/popup/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: popup -slug: Archive/Mozilla/XUL/popup -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/popup ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

L'élément popup est équivalent à l'élément menupopup qu'il vaut mieux utiliser. Consultez la documentation sur l'élément menupopup pour plus d'informations. -


-

-
-
diff --git a/files/fr/archive/mozilla/xul/preference/index.html b/files/fr/archive/mozilla/xul/preference/index.html deleted file mode 100644 index ba56b6bb08..0000000000 --- a/files/fr/archive/mozilla/xul/preference/index.html +++ /dev/null @@ -1,219 +0,0 @@ ---- -title: preference -slug: Archive/Mozilla/XUL/preference -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/preference ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Déclare une préférence qui peut être ajustée dans un prefpane. Cet élément doit être placé à l'intérieur d'un élément preferences. Chaque élément preference correspond à une préférence qui est stockée dans le fichier de préférences de l'utilisateur. Il est possible de connecter un élément d'interface utilisateur comme une case à cocher à un élément de préférence à l'aide de l'attribut preference de l'élément d'interface utilisateur. -

Pour plus d'informations, consultez l'article Système de préférences. -

-
Attributs -
disabled, instantApply, inverted, name, onchange, readonly, tabindex, type -
-
Propriétés -
disabled, inverted, locked, name, preferences, readonly, tabIndex, type, value -
-
Méthodes -
hasUserValue, reset -
-

Exemples

-

(exemple nécessaire) -

-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
instantApply -
Type : booléen -
Si sa valeur est true, la préférence sera modifiée dès que l'élément d'interface utilisateur est modifié. -
-


-

- - -
-
- -
inverted -
Type : booléen -
Pour les préférences booléennes, l'indication de cet attribut à true indique que la valeur de la préférence est l'inverse de celle de l'élément d'interface utilisateur qui y est attaché. Par exemple, elle fait en sorte que cocher une case désactive la préférence associée au lieu de l'activer. -
-


-

- - -
-
- -
name -
Type : chaîne de caractères -
Le nom de la préférence à modifier. Par exemple, la page d'accueil du navigateur est définie par la préférence browser.startup.homepage. -
- - -
-
- -
onchange -
Type : code de script -
Le code figurant dans l'attribut onchange est appelé lorsque la valeur de l'élément est modifiée. -
-


-

- - -
-
- -
readonly -
Type : booléen -
Si défini à true, l'utilisateur ne peut pas modifier la valeur de l'élément. Cependant, celle-ci peut toujours être modifiée par un script. -
- - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
type
Type : une des valeurs ci-dessous
Le type de préférence qui doit être une des valeurs suivantes.
-
- - - -
- -

Propriétés

-

-

-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
inverted -
Type : booléen -
Obtient et définit la valeur de l'attribut inverted. -
-


-

- -
-
-
locked -
Type : booléen -
Si définie à true, la préférence a été verrouillée et désactivée dans la configuration système, ce qui empêche de changer sa valeur. Cette propriété est en lecture seule. -
-


-

- -
-
-
name -
Type : chaîne de caractères -
Le nom de la préférence (élément preference) à modifier. Par exemple, la page d'accueil du navigateur est définie par la préférence browser.startup.homepage. -
-


-

- -
-
-
preferences -
Type : élément -
Référence à l'élément preferences conteneur. -
-


-

- -
-
-
-
- readonly
-
- Type : booléen
-
- Si définie à true, l'utilisateur ne peut pas modifier la valeur de l'élément.
-
-
- Cette propriété toute en minuscules n'est utilisée qu'avec l'élément preference et sera peut-être renommée en readOnly dans des versions ultérieures. D'autres éléments utilisent la propriété readOnly. L'attribut correspondant est cependant readonly en minuscules.
-
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
type -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut type. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

-
hasUserValue() -
Type de retour : booléen -
Renvoie true si la préférence a été modifiée par rapport à sa valeur par défaut. -
-


-

-
reset() -
Type de retour : aucune valeur renvoyée -
Réinitialise la préférence à sa valeur par défaut. -
Pour un élément textbox, la liste de transactions d'annulation est également vidée (Gecko 1.9). -
-


-

- - -

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-

À faire -

-
-
-
diff --git a/files/fr/archive/mozilla/xul/preferences/index.html b/files/fr/archive/mozilla/xul/preferences/index.html deleted file mode 100644 index ac1884d0eb..0000000000 --- a/files/fr/archive/mozilla/xul/preferences/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: preferences -slug: Archive/Mozilla/XUL/preferences -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/preferences ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Utilisé pour regrouper un ensemble d'éléments preference. -

Pour plus d'informations, consultez l'article Système de préférences. -

-

Exemples

-

(example needed) -

-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-

À faire -

-
-
diff --git a/files/fr/archive/mozilla/xul/prefpane/index.html b/files/fr/archive/mozilla/xul/prefpane/index.html deleted file mode 100644 index eb01688a7a..0000000000 --- a/files/fr/archive/mozilla/xul/prefpane/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: prefpane -slug: Archive/Mozilla/XUL/prefpane -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/prefpane ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un seul panneau de préférences dans une prefwindow. Un prefpane est constitué de deux parties, les descriptions de préférences qui spécifient l'ensemble des préférences à modifier, et l'interface utilisateur permettant d'ajuster ces préférences. La première est spécifiée à l'aide d'un élément preferences tandis que la seconde peut être spécifiée avec d'autres éléments XUL. -

Chacune de ces parties peut être spécifiée directement comme enfant de l'élément prefpane, ou l'attribut src peut être utilisé pour placer un panneau dans un fichier séparé. Dans ce dernier cas, le fichier séparé doit utiliser une balise overlay comme racine, étant donné qu'il sera chargé comme overlay de la fenêtre de préférences principale. -

Pour plus d'informations, consultez l'article Système de préférences. -

-
Attributs -
helpURI, image, label, onpaneload, selected, src -
-
Propriétés -
image, label, preferenceElements, preferences, selected, src -
-
Méthodes -
preferenceForElement
-

Exemples

-

(exemple nécessaire) -

-

Attributs

-

-

- -
-
- helpURI
-
- Type : URI
-
- L'URI de la page d'aide associée avec un panneau de préférences. Celle-ci sera ouverte dans une fenêtre d'aide lors de l'appui sur le bouton d'aide.
-
-
-
- -
image -
Type : URL d'une image -
L'URL de l'image devant apparaître sur l'élément. Si cet attribut est vide ou omis, aucune image n'apparaîtra. La position de l'image est déterminée par les attributs dir et orient. -
- - -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
-
- onpaneload
-
- Type : code de script
-
- Le code défini ici est appelé après le chargement du panneau, de manière similaire à l'évènement load pour une fenêtre.
-
-
-
- -
-
- selected
-
- Type : booléen
-
- Cet attribut sera défini à true pour l'élément prefpane actuellement sélectionné. Pour changer le panneau sélectionné, utilisez la méthode showPane de prefwindow.
-
- -
-
- -
-
- src
-
- Type : URL d'un overlay
-
- L'URL du contenu du panneau de préférences. Si cet attribut n'est pas spécifié, le contenu de l'élément prefpane sera utilisé.
-
- - -
- -

Propriétés

-

-

-
image -
Type : URL d'image -
Obtient et définit la valeur de l'attribut image. -
- -
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
-
-
- -
-
selected
-
Type : booléen
-
La valeur de cette propriété est true si cet élément est sélectionné, ou false s'il ne l'est pas. Cette propriété est en lecture seule.
-
-
- -

Méthodes

-

- -

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-

À faire -

-
-
diff --git a/files/fr/archive/mozilla/xul/prefwindow/index.html b/files/fr/archive/mozilla/xul/prefwindow/index.html deleted file mode 100644 index 970f7c07a7..0000000000 --- a/files/fr/archive/mozilla/xul/prefwindow/index.html +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: prefwindow -slug: Archive/Mozilla/XUL/prefwindow -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/prefwindow ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Une fenêtre spécialisée utilisée pour les dialogues de préférences. Cet élément devrait être utilisé à la place de la balise window et contenir un ou plusieurs éléments prefpane. Une rangée de boutons apparait dans tout le dialogue de préférences, un par prefpane. Chaque panneau servira généralement à regrouper un ensemble de préférences liées. Si il n'y a qu'un prefpane, la zone de navigation n'apparaitra pas. -

Sur les plateformes où la convention est d'appliquer les changements immédiatement, les préférences sont ajustées dès que l'élément d'interface utilisateur a changé. Sur les autres plateformes, les préférences ne sont pas appliquées tant que le dialogue n'est pas fermé. -

Il est possible d'ouvrir une fenêtre de préférences à l'aide de la méthode openDialog d'une fenêtre comme pour d'autres dialogues. L'id d'un panneau particulier peut être passé comme quatrième paramètre de openDialog pour ouvrir un panneau particulier par défaut. Il est également possible de définir l'attribut lastSelected sur la balise prefwindow en lui donnant l'id du panneau avec lequel démarrer. Cet attribut n'est normalement pas défini, comme il sera positionné automatiquement afin que le panneau par défaut soit le dernier que celui qui était affiché la dernière fois que le dialogue a été fermé. -

Pour plus d'informations, consultez l'article Système de préférences. -

-
Attributs -
buttonalign, buttondir, buttonorient, buttonpack, buttons, defaultButton, lastSelected, onbeforeaccept, ondialogaccept, ondialogcancel, ondialogdisclosure, ondialoghelp, onpanelload, title, type -
-
Propriétés -
buttons, currentPane, defaultButton, lastSelected, preferencePanes, type -
-
Méthodes -
acceptDialog, addPane, cancelDialog, centerWindowOnScreen, getButton, openSubDialog, openWindow, showPane -
-

Exemples

-
   <prefwindow xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-     <prefpane id="saveoptions" label="Backups">
-       <preferences>
-         <preference id="pref-backup" name="myapp.mybackups" type="bool"/>
-         <preference id="pref-backupduration" name="myapp.mybackups.duration" type="int"/>
-       </preferences>
-       <checkbox label="Automatically Save Backups" preference="pref-backup"/>
-       <textbox label="Duration:" preference="pref-backupduration"/>
-     </prefpane>
-   </prefwindow>
-
-

Attributs

-

-

- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
title -
Type : chaîne de caractères -
Le texte qui doit apparaître dans la barre de titre de la fenêtre ou boîte de dialogue. -
-


-

- - -
-
- -

 

-
- -

Propriétés

-

-

-
-
-
-
-
-
type -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut type. -
- -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
- - - - - - - -
showPane( <i>prefpane</i> ) -
Type retourné : aucune valeur retournée -
Bascule vers un panneau en particulier. -
-


-

- -

Sujets liés

-

À faire -

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessible/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessible/index.html" deleted file mode 100644 index 8a78202c56..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessible/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: accessible -slug: Archive/Mozilla/XUL/Propriétés/accessible -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/accessible ---- -
« Accueil de la référence XUL
-
accessible -
Type : nsIAccessible -
Renvoie l'objet d'accessibilité pour l'élément. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessibletype/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessibletype/index.html" deleted file mode 100644 index 5a9527e78d..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accessibletype/index.html" +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: accessibleType -slug: Archive/Mozilla/XUL/Propriétés/accessibleType -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/accessibleType ---- -
« Accueil de la référence XUL
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-

Les valeurs possibles sont : -

- -
ConstanteValeur -
XULAlert1001 -
XULButton1002 -
XULCheckbox1003 -
XULColorPicker1004 -
XULColorPickerTile1005 -
XULCombobox1006 -
XULDropmarker1007 -
XULGroupbox1008 -
XULImage1009 -
XULLink100A -
XULListbox100B -
XULListCell1026 -
XULListHead1024 -
XULListHeader1025 -
XULListitem100C -
XULMenubar100D -
XULMenuitem100E -
XULMenupopup100F -
XULMenuSeparator1010 -
XULPane1011 -
XULProgressMeter1012 -
XULScale1013 -
XULStatusBar1014 -
XULRadioButton1015 -
XULRadioGroup1016 -
XULTab1017 -
XULTabBox1018 -
XULTabs1019 -
XULText101A -
XULTextBox101B -
XULThumb101C -
XULTree101D -
XULTreeColumns101E -
XULTreeColumnItem101F -
XULToolbar1020 -
XULToolbarSeparator1021 -
XULTooltip1022 -
XULToolbarButton1023 -
-

</div> -

diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accesskey/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accesskey/index.html" deleted file mode 100644 index 18c8cb6110..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/accesskey/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: accessKey -slug: Archive/Mozilla/XUL/Propriétés/accessKey -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/accessKey ---- -
« Accueil de la référence XUL
-
accessKey -
Type : caractère -
Obtient et définit la valeur de l'attribut accesskey. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/align/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/align/index.html" deleted file mode 100644 index ade556771a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/align/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: align -slug: Archive/Mozilla/XUL/Propriétés/align -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/align ---- -
« Accueil de la référence XUL
-
align -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut align. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/allowevents/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/allowevents/index.html" deleted file mode 100644 index 3a89398e48..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/allowevents/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: allowEvents -slug: Archive/Mozilla/XUL/Propriétés/allowEvents -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/allowEvents ---- -
« Accueil de la référence XUL
-
allowEvents -
Type : booléen -
Obtient et définit la valeur de l'attribut allowevents. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/amindicator/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/amindicator/index.html" deleted file mode 100644 index 3118629abd..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/amindicator/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: amIndicator -slug: Archive/Mozilla/XUL/Propriétés/amIndicator -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/amIndicator ---- -
« Accueil de la référence XUL
-
amIndicator -
Type : chaîne -
La valeur chaîne affichée pour les heures entre minuit et midi, par défaut « AM ». Cette valeur est déterminée selon la locale de l'utilisateur. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/boxobject/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/boxobject/index.html" deleted file mode 100644 index 68284b25f9..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/boxobject/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: boxObject -slug: Archive/Mozilla/XUL/Propriétés/boxObject -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/boxObject ---- -
« Accueil de la référence XUL
-
boxObject -
Type : nsIBoxObject -
Cette propriété est disponible pour les éléments dérivés de boîtes, ce qui est le cas de la plupart des éléments XUL visibles. L'objet boxObject pour les éléments non-XUL peut être obtenu à l'aide de la méthode getBoxObjectFor. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/builder/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/builder/index.html" deleted file mode 100644 index 78acdbec0d..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/builder/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: builder -slug: Archive/Mozilla/XUL/Propriétés/builder -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/builder ---- -
« Accueil de la référence XUL
-
builder -
Type : nsIXULTemplateBuilder -
Pour le contenu généré depuis un template, il s'agit de l'objet XPCOM responsable de la génération du contenu. Pour les scripts il est uniquement nécessaire dans le cas où vous voulez forcer le contenu du template à être régénéré. Vous pouvez en avoir besoin si vous avez ajusté les règles manuellement. Pour reconstruire le contenu, appelez la méthode rebuild du builder. -
-
Par exemple, à partir d'une référence à un arbre myTree, ce code reconstruira son contenu : myTree.builder.rebuild(); -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/classname/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/classname/index.html" deleted file mode 100644 index af031bec76..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/classname/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: className -slug: Archive/Mozilla/XUL/Propriétés/className -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/className ---- -
« Accueil de la référence XUL
-
className -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut class. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/collapsed/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/collapsed/index.html" deleted file mode 100644 index 95dd04a07a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/collapsed/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: collapsed -slug: Archive/Mozilla/XUL/Propriétés/collapsed -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/collapsed ---- -
« Accueil de la référence XUL
-
collapsed -
Type : booléen -
Obtient et définit la valeur de l'attribut collapsed. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/contextmenu/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/contextmenu/index.html" deleted file mode 100644 index 611425d9c8..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/contextmenu/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: contextMenu -slug: Archive/Mozilla/XUL/Propriétés/contextMenu -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/contextMenu ---- -
« Accueil de la référence XUL
-
contextMenu -
Type : id d'élément popup -
Obtient et définit la valeur de l'attribut contextmenu. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/controllers/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/controllers/index.html" deleted file mode 100644 index 28ca9b2f5e..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/controllers/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: controllers -slug: Archive/Mozilla/XUL/Propriétés/controllers -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/controllers ---- -
« Accueil de la référence XUL
-
controllers -
Type : nsIControllers -
Une liste de contrôleurs attachés à l'élément. Les contrôleurs servent à répondre à des commandes. Le répartiteur de commandes du document identifiera les contrôleurs pour gérer une commande à l'aide de la liste de l'élément ayant le focus. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/crop/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/crop/index.html" deleted file mode 100644 index 01aa418b56..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/crop/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: crop -slug: Archive/Mozilla/XUL/Propriétés/crop -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/crop ---- -
« Accueil de la référence XUL
-
crop -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut crop. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/currentitem/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/currentitem/index.html" deleted file mode 100644 index 66ca8b4596..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/currentitem/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: currentItem -slug: Archive/Mozilla/XUL/Propriétés/currentItem -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/currentItem ---- -
« Accueil de la référence XUL
-
currentItem -
Type : élément listitem -
Renvoie le dernier élément sélectionné dans la liste de sélection, ce qui n'est utile que dans une liste à sélection multiple. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/database/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/database/index.html" deleted file mode 100644 index a8ef04ee8b..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/database/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: database -slug: Archive/Mozilla/XUL/Propriétés/database -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/database ---- -
« Accueil de la référence XUL
-
database -
Type : nsIRDFCompositeDataSource -
Renvoie la source de données composite créée lorsque toutes les sources de données de l'élément sont combinées. Défini à null pour les éléments qui n'ont pas d'attribut datasources. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datasources/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datasources/index.html" deleted file mode 100644 index 567dd397fe..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datasources/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: datasources -slug: Archive/Mozilla/XUL/Propriétés/datasources -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/datasources ---- -
« Accueil de la référence XUL
-
datasources -
Type : liste d'URIs de sources de données séparée par des espaces -
Lit et définit la valeur de l'attribut datasources. Dans les nouvelles versions de Mozilla (>1.7), les sources de données seront rechargées et le gabarit reconstruit. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/date/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/date/index.html" deleted file mode 100644 index b82437977f..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/date/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: date -slug: Archive/Mozilla/XUL/Propriétés/date -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/date ---- -
- « Accueil de la référence XUL
-
-
- date
-
- Type : entier
-
- Le jour du mois actuellement sélectionné, entre 1 et 31. Modifiez cette propriété pour changer la date sélectionnée.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dateleadingzero/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dateleadingzero/index.html" deleted file mode 100644 index 2de143aeaa..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dateleadingzero/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: dateLeadingZero -slug: Archive/Mozilla/XUL/Propriétés/dateLeadingZero -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/dateLeadingZero ---- -
- « Accueil de la référence XUL
-
-
- dateLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro doit être affiché avant la date lorsqu'elle est inférieure à 10.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.open/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.open/index.html" deleted file mode 100644 index bd302b35f1..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.open/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: datepicker.open -slug: Archive/Mozilla/XUL/Propriétés/datepicker.open -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/datepicker.open ---- -
- « Accueil de la référence XUL
-
-
- open
-
- Type : booléen
-
- Pour les sélecteurs de date de type popup, spécifie si celui-ci est ouvert. Définissez cette propriété pour ouvrir ou fermer le popup. Pour les autres types de sélecteurs de date, cette propriété est toujours à false.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.value/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.value/index.html" deleted file mode 100644 index 0342ffd158..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datepicker.value/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: datepicker.value -slug: Archive/Mozilla/XUL/Propriétés/datepicker.value -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/datepicker.value ---- -
- « Accueil de la référence XUL
-
-
- value
-
- Type : chaîne
-
- La date actuellement sélectionnée au format AAAA/MM/JJ. Contrairement à la propriété month, les mois varient ici dans l'intervalle 01 à 12. Définissez cette propriété pour changer la date sélectionnée.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datevalue/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datevalue/index.html" deleted file mode 100644 index 4872d60184..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/datevalue/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: dateValue -slug: Archive/Mozilla/XUL/Propriétés/dateValue -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/dateValue ---- -
- « Accueil de la référence XUL
-
-
- dateValue
-
- Type : Date
-
- La date actuellement entrée ou sélectionnée dans le sélecteur de date sous la forme d'un objet Date.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/defaultvalue/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/defaultvalue/index.html" deleted file mode 100644 index cd6be12cb3..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/defaultvalue/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: defaultValue -slug: Archive/Mozilla/XUL/Propriétés/defaultValue -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/defaultValue ---- -
« Accueil de la référence XUL
-
defaultValue -
Type : chaîne de caractères -
Définit et obtient la valeur par défaut d'une boîte de texte. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dir/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dir/index.html" deleted file mode 100644 index 440727c354..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/dir/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: dir -slug: Archive/Mozilla/XUL/Propriétés/dir -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/dir ---- -
« Accueil de la référence XUL
-
dir -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut dir. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/disabled/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/disabled/index.html" deleted file mode 100644 index 03a25bf5ba..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/disabled/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: disabled -slug: Archive/Mozilla/XUL/Propriétés/disabled -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/disabled ---- -
« Accueil de la référence XUL
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/flex/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/flex/index.html" deleted file mode 100644 index 5514de566a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/flex/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: flex -slug: Archive/Mozilla/XUL/Propriétés/flex -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/flex ---- -
« Accueil de la référence XUL
-
flex -
Type : entier -
Obtient et définit la valeur de l'attribut flex. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/height/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/height/index.html" deleted file mode 100644 index db9a532281..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/height/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: height -slug: Archive/Mozilla/XUL/Propriétés/height -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/height ---- -
« Accueil de la référence XUL
-
height -
Type : entier -
Obtient et définit la valeur de l'attribut height. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hidden/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hidden/index.html" deleted file mode 100644 index d05bc8715b..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hidden/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: hidden -slug: Archive/Mozilla/XUL/Propriétés/hidden -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/hidden ---- -
« Accueil de la référence XUL
-
hidden -
Type : booléen -
Obtient et définit la valeur de l'attribut hidden. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hideseconds/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hideseconds/index.html" deleted file mode 100644 index f5711a3e24..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hideseconds/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: hideSeconds -slug: Archive/Mozilla/XUL/Propriétés/hideSeconds -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/hideSeconds ---- -
- « Accueil de la référence XUL
-
-
- hideSeconds
-
- Type : booléen
-
- Indique si le champ des secondes doit être masqué.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hour/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hour/index.html" deleted file mode 100644 index 0b8d5607d6..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hour/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: hour -slug: Archive/Mozilla/XUL/Propriétés/hour -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/hour ---- -
- « Accueil de la référence XUL
-
-
- hour
-
- Type : entier
-
- La valeur de l'heure actuellement sélectionnée entre 0 et 23. Modifiez cette propriété pour changer l'heure sélectionnée.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hourleadingzero/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hourleadingzero/index.html" deleted file mode 100644 index 88ac335836..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/hourleadingzero/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: hourLeadingZero -slug: Archive/Mozilla/XUL/Propriétés/hourLeadingZero -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/hourLeadingZero ---- -
- « Accueil de la référence XUL
-
-
- hourLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro initial doit être affiché avant l'heure lorsque celle-ci est inférieure à 10.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/id/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/id/index.html" deleted file mode 100644 index d5e6613076..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/id/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: id -slug: Archive/Mozilla/XUL/Propriétés/id -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/id ---- -
« Accueil de la référence XUL
-
id -
Type : id d'élément, doit être unique dans la fenêtre -
Obtient et définit la valeur de l'attribut id. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/image/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/image/index.html" deleted file mode 100644 index b180fa1bff..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/image/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: image -slug: Archive/Mozilla/XUL/Propriétés/image -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/image ---- -
« Accueil de la référence XUL
-
image -
Type : URL d'image -
Obtient et définit la valeur de l'attribut image. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/increment/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/increment/index.html" deleted file mode 100644 index ee048522a2..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/increment/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: increment -slug: Archive/Mozilla/XUL/Propriétés/increment -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/increment ---- -
- « Accueil de la référence XUL
-
-
- increment
-
- Type : entier
-
- Obtient et définit la valeur de l'attribut increment.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/index.html" deleted file mode 100644 index 046b0478cc..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/index.html" +++ /dev/null @@ -1,224 +0,0 @@ ---- -title: Propriétés -slug: Archive/Mozilla/XUL/Propriétés -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property ---- -

« Accueil de la référence XUL -

- -

Propriétés de DOM element liées

- diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/inverted/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/inverted/index.html" deleted file mode 100644 index 658135805f..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/inverted/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: inverted -slug: Archive/Mozilla/XUL/Propriétés/inverted -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/inverted ---- -
« Accueil de la référence XUL
-
inverted -
Type : booléen -
Obtient et définit la valeur de l'attribut inverted. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/is24hourclock/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/is24hourclock/index.html" deleted file mode 100644 index 74e27b6c04..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/is24hourclock/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: is24HourClock -slug: Archive/Mozilla/XUL/Propriétés/is24HourClock -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/is24HourClock ---- -
- « Accueil de la référence XUL
-
-
- is24HourClock
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si l'heure est affichée à l'aide d'une horloge à 24 ou 12 heures. Avec une horloge à 12 heures, un champ supplémentaire permet à l'utilisateur de choisir entre AM et PM.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ispm/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ispm/index.html" deleted file mode 100644 index 37be41eafc..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ispm/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: isPM -slug: Archive/Mozilla/XUL/Propriétés/isPM -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/isPM ---- -
- « Accueil de la référence XUL
-
-
- isPM
-
- Type : booléen
-
- Si cette propriété est à false, l'heure est entre 0 et 11. Si elle est à true, l'heure est supérieure ou égale à 12.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/label/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/label/index.html" deleted file mode 100644 index c913db90bc..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/label/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: label -slug: Archive/Mozilla/XUL/Propriétés/label -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/label ---- -
« Accueil de la référence XUL
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/left/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/left/index.html" deleted file mode 100644 index eca1301f70..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/left/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: left -slug: Archive/Mozilla/XUL/Propriétés/left -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/left ---- -
« Accueil de la référence XUL
-
left -
Type : entier -
Obtient et définit la valeur de l'attribut left. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/listboxobject/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/listboxobject/index.html" deleted file mode 100644 index 4d5b75170a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/listboxobject/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: listBoxObject -slug: Archive/Mozilla/XUL/Propriétés/listBoxObject -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/listBoxObject ---- -
« Accueil de la référence XUL
-
listBoxObject -
Type : nsIListBoxObject -
L'objet nsIListBoxObject derrière la liste de sélection. Cette propriété est en lecture seule. La plupart des fonctionnalités de la liste de sélection sont déjà disponibles directement dans l'élément listbox, il sera donc rarement nécessaire d'utiliser cet objet de boîte directement. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/locked/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/locked/index.html" deleted file mode 100644 index 5c097897c0..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/locked/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: locked -slug: Archive/Mozilla/XUL/Propriétés/locked -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/locked ---- -
« Accueil de la référence XUL
-
locked -
Type : booléen -
Si définie à true, la préférence a été verrouillée et désactivée dans la configuration système, ce qui empêche de changer sa valeur. Cette propriété est en lecture seule. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/max/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/max/index.html" deleted file mode 100644 index d8fd66793d..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/max/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: max -slug: Archive/Mozilla/XUL/Propriétés/max -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/max ---- -
« Accueil de la référence XUL
-
max -
Type : entier -
Obtient et définit la valeur de l'attribut max. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxheight/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxheight/index.html" deleted file mode 100644 index 5a36481266..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxheight/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: maxHeight -slug: Archive/Mozilla/XUL/Propriétés/maxHeight -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/maxHeight ---- -
« Accueil de la référence XUL
-
maxHeight -
Type : entier -
Obtient et définit la valeur de l'attribut maxheight. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxwidth/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxwidth/index.html" deleted file mode 100644 index 48d245dac9..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/maxwidth/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: maxWidth -slug: Archive/Mozilla/XUL/Propriétés/maxWidth -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/maxWidth ---- -
« Accueil de la référence XUL
-
maxWidth -
Type : entier -
Obtient et définit la valeur de l'attribut maxwidth. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/menu/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/menu/index.html" deleted file mode 100644 index a9dbbade7f..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/menu/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: menu -slug: Archive/Mozilla/XUL/Propriétés/menu -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/menu ---- -
« Accueil de la référence XUL
-
menu -
Type : id d'élément popup -
Obtient et définit la valeur de l'attribut menu. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/min/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/min/index.html" deleted file mode 100644 index cc96380d54..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/min/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: min -slug: Archive/Mozilla/XUL/Propriétés/min -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/min ---- -
« Accueil de la référence XUL
-
min -
Type : entier -
Obtient et définit la valeur de l'attribut min. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minheight/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minheight/index.html" deleted file mode 100644 index fc67f0823a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minheight/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: minHeight -slug: Archive/Mozilla/XUL/Propriétés/minHeight -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/minHeight ---- -
« Accueil de la référence XUL
-
minHeight -
Type : entier -
Obtient et définit la valeur de l'attribut minheight. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minute/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minute/index.html" deleted file mode 100644 index f9a70a888a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minute/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: minute -slug: Archive/Mozilla/XUL/Propriétés/minute -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/minute ---- -
- « Accueil de la référence XUL
-
-
- minute
-
- Type : entier
-
- Les minutes de l'heure actuellement sélectionnée entre 0 et 59. Modifiez cette propriété pour changer la minute sélectionnée.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minuteleadingzero/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minuteleadingzero/index.html" deleted file mode 100644 index 47911a397d..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minuteleadingzero/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: minuteLeadingZero -slug: Archive/Mozilla/XUL/Propriétés/minuteLeadingZero -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/minuteLeadingZero ---- -
- « Accueil de la référence XUL
-
-
- minuteLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro initial doit être affiché avant la valeur des minutes lorsque celle-ci est inférieure à 10.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minwidth/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minwidth/index.html" deleted file mode 100644 index 384dc60350..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/minwidth/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: minWidth -slug: Archive/Mozilla/XUL/Propriétés/minWidth -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/minWidth ---- -
« Accueil de la référence XUL
-
minWidth -
Type : integer -
Obtient et définit la valeur de l'attribut minwidth. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/month/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/month/index.html" deleted file mode 100644 index 2bca180dc7..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/month/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: month -slug: Archive/Mozilla/XUL/Propriétés/month -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/month ---- -
- « Accueil de la référence XUL
-
-
- month
-
- Type : entier
-
- Le mois actuellement sélectionné entre 0 (janvier) et 11 (décembre). Définissez cette propriété pour changer le mois sélectionné.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/monthleadingzero/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/monthleadingzero/index.html" deleted file mode 100644 index 942edc6094..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/monthleadingzero/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: monthLeadingZero -slug: Archive/Mozilla/XUL/Propriétés/monthLeadingZero -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/monthLeadingZero ---- -
- « Accueil de la référence XUL
-
-
- monthLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro doit être affiché devant le mois s'il est inférieur à 10.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/name/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/name/index.html" deleted file mode 100644 index 879ae4a5a0..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/name/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: name -slug: Archive/Mozilla/XUL/Propriétés/name -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/name ---- -
« Accueil de la référence XUL
-
name -
Type : chaîne de caractères -
Le nom de la préférence (élément preference) à modifier. Par exemple, la page d'accueil du navigateur est définie par la préférence browser.startup.homepage. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/observes/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/observes/index.html" deleted file mode 100644 index 642fd59922..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/observes/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: observes -slug: Archive/Mozilla/XUL/Propriétés/observes -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/observes ---- -
« Accueil de la référence XUL
-
observes -
Type : id d'élément broadcaster -
Obtient et définit la valeur de l'attribut observes. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/open/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/open/index.html" deleted file mode 100644 index 4d8deac2fb..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/open/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: open -slug: Archive/Mozilla/XUL/Propriétés/open -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/open ---- -
« Accueil de la référence XUL
-
open -
Type : booléen -
Obtient et définit la valeur de l'attribut open. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ordinal/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ordinal/index.html" deleted file mode 100644 index df77eb113a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ordinal/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: ordinal -slug: Archive/Mozilla/XUL/Propriétés/ordinal -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/ordinal ---- -
« Accueil de la référence XUL
-
ordinal -
Type : entier -
Obtient et définit la valeur de l'attribut ordinal. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/orient/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/orient/index.html" deleted file mode 100644 index f965b07278..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/orient/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: orient -slug: Archive/Mozilla/XUL/Propriétés/orient -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/orient ---- -
« Accueil de la référence XUL
-
orient -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut orient. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pack/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pack/index.html" deleted file mode 100644 index fd555d4c49..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pack/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: pack -slug: Archive/Mozilla/XUL/Propriétés/pack -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/pack ---- -
« Accueil de la référence XUL
-
pack -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut pack. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pageincrement/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pageincrement/index.html" deleted file mode 100644 index 17ccd723cd..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pageincrement/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: pageIncrement -slug: Archive/Mozilla/XUL/Propriétés/pageIncrement -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/pageIncrement ---- -
« Accueil de la référence XUL
-
pageIncrement -
Type : entier -
Obtient et définit la valeur de l'attribut pageincrement. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/persist/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/persist/index.html" deleted file mode 100644 index bdc1c330db..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/persist/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: persist -slug: Archive/Mozilla/XUL/Propriétés/persist -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/persist ---- -
« Accueil de la référence XUL
-
persist -
Type : liste de noms d'attributs séparés par des espaces -
Obtient et définit la valeur de l'attribut persist. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pmindicator/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pmindicator/index.html" deleted file mode 100644 index e35b07ba7b..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/pmindicator/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: pmIndicator -slug: Archive/Mozilla/XUL/Propriétés/pmIndicator -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/pmIndicator ---- -
- « Accueil de la référence XUL
-
-
- pmIndicator
-
- Type : chaîne
-
- La valeur chaîne affichée pour les heures entre midi et minuit, par défaut « PM ». Cette valeur est déterminée selon la locale de l'utilisateur.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/popupboxobject/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/popupboxobject/index.html" deleted file mode 100644 index 73c7b44900..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/popupboxobject/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: popupBoxObject -slug: Archive/Mozilla/XUL/Propriétés/popupBoxObject -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/popupBoxObject ---- -
« Accueil de la référence XUL
-
popupBoxObject -
Type : nsIPopupBoxObject -
Cette propriété en lecture seule conserve le nsIPopupBoxObject qui implémente le popup. Il n'est normalement pas nécessaire d'utiliser cette propriété étant donné que toutes ses fonctions sont disponibles via le popup lui-même. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/position/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/position/index.html" deleted file mode 100644 index a48b08003e..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/position/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: position -slug: Archive/Mozilla/XUL/Propriétés/position -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/position ---- -
« Accueil de la référence XUL
-
position -
Type : chaîne -
Obtient et définit la valeur de l'attribut position. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/preference.preferences/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/preference.preferences/index.html" deleted file mode 100644 index 04e39427d6..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/preference.preferences/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: preference.preferences -slug: Archive/Mozilla/XUL/Propriétés/preference.preferences -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/preference.preferences ---- -
« Accueil de la référence XUL
-
preferences -
Type : élément -
Référence à l'élément preferences conteneur. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/readonly/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/readonly/index.html" deleted file mode 100644 index f6fd6c6c5a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/readonly/index.html" +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: readonly -slug: Archive/Mozilla/XUL/Propriétés/readOnly -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/readOnly ---- -
- « Accueil de la référence XUL
-
-
- readonly
-
- Type : booléen
-
- Si définie à true, l'utilisateur ne peut pas modifier la valeur de l'élément.
-
-
- Cette propriété toute en minuscules n'est utilisée qu'avec l'élément preference et sera peut-être renommée en readOnly dans des versions ultérieures. D'autres éléments utilisent la propriété readOnly. L'attribut correspondant est cependant readonly en minuscules.
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ref/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ref/index.html" deleted file mode 100644 index 68f38ce84b..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/ref/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: ref -slug: Archive/Mozilla/XUL/Propriétés/ref -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/ref ---- -
« Accueil de la référence XUL
-
ref -
Type : URI d'une ressource RDF -
Obtient et définit la valeur de l'attribut ref. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/resource/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/resource/index.html" deleted file mode 100644 index d791d97a80..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/resource/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: resource -slug: Archive/Mozilla/XUL/Propriétés/resource -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/resource ---- -
« Accueil de la référence XUL
-
resource -
Type : nsIRDFResource -
Renvoie une ressource RDF avec la valeur de l'attribut ref de l'élément. Si cet élément ref n'est pas spécifié, l'attribut id sera utilisé à la place. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/second/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/second/index.html" deleted file mode 100644 index ae2c271580..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/second/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: second -slug: Archive/Mozilla/XUL/Propriétés/second -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/second ---- -
- « Accueil de la référence XUL
-
-
- second
-
- Type : entier
-
- La valeur des secondes de l'heure actuellement sélectionnée, entre 0 et 59. Modifiez cette propriété pour changer la seconde sélectionnée.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/secondleadingzero/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/secondleadingzero/index.html" deleted file mode 100644 index 72d843df5d..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/secondleadingzero/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: secondLeadingZero -slug: Archive/Mozilla/XUL/Propriétés/secondLeadingZero -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/secondLeadingZero ---- -
- « Accueil de la référence XUL
-
-
- secondLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro initial doit être affiché avant la valeur des secondes si celle-ci est inférieure à 10.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selected/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selected/index.html" deleted file mode 100644 index 680f617876..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selected/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: selected -slug: Archive/Mozilla/XUL/Propriétés/selected -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/selected ---- -
« Accueil de la référence XUL
- -
-
selected
-
Type : booléen
-
La valeur de cette propriété est true si cet élément est sélectionné, ou false s'il ne l'est pas. Cette propriété est en lecture seule.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selectedindex/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selectedindex/index.html" deleted file mode 100644 index 6d9e555cf2..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selectedindex/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: selectedIndex -slug: Archive/Mozilla/XUL/Propriétés/selectedIndex -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/selectedIndex ---- -
« Accueil de la référence XUL
-
selectedIndex -
Type : entier -
Renvoie l'indice de l'élément actuellement sélectionné. Un élément peut être sélectionné en assignant son indice à cette propriété. En lui assignant -1, tous les éléments seront désélectionnés. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selecteditem/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selecteditem/index.html" deleted file mode 100644 index 221bd2cf1a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/selecteditem/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: selectedItem -slug: Archive/Mozilla/XUL/Propriétés/selectedItem -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/selectedItem ---- -
« Accueil de la référence XUL
-
selectedItem -
Type : élément -
Conserve l'élément actuellement sélectionné. Si aucun élément n'est sélectionné, sa valeur sera null. Vous pouvez sélectionner un élément en définissant cette valeur. Un évènement select sera envoyé à cet élément lorsqu'il est sélectionné en modifiant cette propriété, la propriété selectedIndex, ou par l'utilisateur. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/seltype/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/seltype/index.html" deleted file mode 100644 index 7c2cb97223..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/seltype/index.html" +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: selType -slug: Archive/Mozilla/XUL/Propriétés/selType -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/selType ---- -
- « Accueil de la référence XUL
-
-
- selType<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - chaîne de caractères -
-
- Obtient et définit la valeur de l'attribut seltype.
-
-
-  
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/state/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/state/index.html" deleted file mode 100644 index 0539f20aea..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/state/index.html" +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: state -slug: Archive/Mozilla/XUL/Propriétés/state -tags: - - Attributs_XUL - - Référence_XUL -translation_of: Archive/Mozilla/XUL/Property/state ---- -
« Accueil de la référence XUL
-
state -
Type : chaîne -
Cette propriété en lecture seule indique si le popup est ouvert ou non. Quatre valeurs sont possibles : -
- -
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/statustext/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/statustext/index.html" deleted file mode 100644 index e8d0c5f93c..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/statustext/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: statusText -slug: Archive/Mozilla/XUL/Propriétés/statusText -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/statusText ---- -
« Accueil de la référence XUL
-
statusText -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut statustext. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/style/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/style/index.html" deleted file mode 100644 index 2ac332eb3b..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/style/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: style -slug: Archive/Mozilla/XUL/Propriétés/style -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/style ---- -
« Accueil de la référence XUL
-
style -
Type : style CSS inline -
Obtient et définit la valeur de l'attribut style. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/suppressonselect/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/suppressonselect/index.html" deleted file mode 100644 index fb43cec3fe..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/suppressonselect/index.html" +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: suppressOnSelect -slug: Archive/Mozilla/XUL/Propriétés/suppressOnSelect -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/suppressOnSelect ---- -
- « Accueil de la référence XUL
-
-
- suppressOnSelect
-
- Type : - - booléen -
-
- Obtient et définit la valeur de l'attribut suppressonselect.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tabindex/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tabindex/index.html" deleted file mode 100644 index cb59c74840..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tabindex/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: tabIndex -slug: Archive/Mozilla/XUL/Propriétés/tabIndex -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/tabIndex ---- -
« Accueil de la référence XUL
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/timepicker.value/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/timepicker.value/index.html" deleted file mode 100644 index 2629a7774d..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/timepicker.value/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: timepicker.value -slug: Archive/Mozilla/XUL/Propriétés/timepicker.value -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/timepicker.value ---- -
- « Accueil de la référence XUL
-
-
- value
-
- Type : chaîne
-
- L'heure actuellement entrée sous la forme HH:MM:SS. Modifiez cette propriété pour changer cette heure.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltip/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltip/index.html" deleted file mode 100644 index 0b2a5e95e3..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltip/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: tooltip -slug: Archive/Mozilla/XUL/Propriétés/tooltip -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/tooltip ---- -
« Accueil de la référence XUL
-
tooltip -
Type : id d'élément tooltip -
Obtient et définit la valeur de l'attribut tooltip. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltiptext/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltiptext/index.html" deleted file mode 100644 index 0ad5b618ee..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/tooltiptext/index.html" +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: tooltipText -slug: Archive/Mozilla/XUL/Propriétés/tooltipText -tags: - - Propriétés_XUL - - XUL -translation_of: Archive/Mozilla/XUL/Property/tooltipText ---- -
- « Accueil de la référence XUL
-
-
- tooltipText
-
- Type : - - chaîne de caractères -
-
- Obtient et définit la valeur de l'attribut tooltiptext.
-
-
-  
-

 

diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/top/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/top/index.html" deleted file mode 100644 index 204e928123..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/top/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: top -slug: Archive/Mozilla/XUL/Propriétés/top -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/top ---- -
« Accueil de la référence XUL
-
top -
Type : entier -
Obtient et définit la valeur de l'attribut top. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/type/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/type/index.html" deleted file mode 100644 index 450c40e124..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/type/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: type -slug: Archive/Mozilla/XUL/Propriétés/type -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/type ---- -
« Accueil de la référence XUL
-
type -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut type. -
-
-

Voir également

- -
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/value/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/value/index.html" deleted file mode 100644 index ff5257202b..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/value/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: value -slug: Archive/Mozilla/XUL/Propriétés/value -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/value ---- -
« Accueil de la référence XUL
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/width/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/width/index.html" deleted file mode 100644 index 9b58bd9c1a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/width/index.html" +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: width -slug: Archive/Mozilla/XUL/Propriétés/width -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/width ---- -
« Accueil de la référence XUL
-
width -
Type : entier -
Obtient et définit la valeur de l'attribut width. -
-


-

-
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/year/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/year/index.html" deleted file mode 100644 index 0c01e08e7a..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/year/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: year -slug: Archive/Mozilla/XUL/Propriétés/year -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/year ---- -
- « Accueil de la référence XUL
-
-
- year
-
- Type : entier
-
- L'année actuellement sélectionnée entre 1 et 9999. Définissez cette propriété pour changer la date sélectionnée.
-
diff --git "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/yearleadingzero/index.html" "b/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/yearleadingzero/index.html" deleted file mode 100644 index ef949e53e4..0000000000 --- "a/files/fr/archive/mozilla/xul/propri\303\251t\303\251s/yearleadingzero/index.html" +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: yearLeadingZero -slug: Archive/Mozilla/XUL/Propriétés/yearLeadingZero -tags: - - Propriétés_XUL -translation_of: Archive/Mozilla/XUL/Property/yearLeadingZero ---- -
- « Accueil de la référence XUL
-
-
- yearLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro doit être affiché devant l'année si elle est inférieure à 1000.
-
diff --git "a/files/fr/archive/mozilla/xul/recommandations_accessibilit\303\251_pour_xul/index.html" "b/files/fr/archive/mozilla/xul/recommandations_accessibilit\303\251_pour_xul/index.html" deleted file mode 100644 index 000f7b13c8..0000000000 --- "a/files/fr/archive/mozilla/xul/recommandations_accessibilit\303\251_pour_xul/index.html" +++ /dev/null @@ -1,484 +0,0 @@ ---- -title: Recommandations d'accessibilité pour XUL -slug: Archive/Mozilla/XUL/Recommandations_accessibilité_pour_XUL -tags: - - Accessibilité - - XUL -translation_of: Archive/Mozilla/XUL/XUL_accessibility_guidelines ---- -

Introduction

- -

Bienvenue dans les recommandations d'accessibilité pour XUL. En suivant ces principes et pratiques, vous pourrez écrire des applications XUL de manière à ce que tous les utilisateurs, même ceux souffrant de handicaps physiques, sensoriels ou communicatifs puissent l'utiliser et l'apprécier. L'accessibilité n'a rien de difficile, mais nécessite une compréhension basique des différents types de handicaps, des technologies assistives courantes et des fonctionnalités spéciales d'accessibilité fournies par le langage XUL. Plus que tout, l'accessibilité a besoin d'un effort conscient de votre part, et d'un désir d'intégrer tout le monde.

- -

Nous espérons que ces recommandations seront suffisamment claires et détaillées pour que tout le monde — même ceux qui n'ont aucune expérience dans le domaine de l'accessibilité — puisse les comprendre. Il existe également une communauté de développeurs spécialisés dans l'accessibilité au sein du projet Mozilla qui n'hésiteront pas à vous aider pour toutes les inquiétudes et questions suscitées par le fait de rendre vos applications XUL entièrement accessibles.

- - - - - - - - - - - - - - - -
Pour en savoir plus
AccessibilitéFonctionnalités de la plateformeCommunauté Mozilla
Software Accessibility - Where Are We Today? Introduction à l'accessibilité, aux technologies assistives et ressources concernant Mozilla. -

Introduction to Web Accessibility. Aperçu de l'accessibilité Web de WebAIM.

- -

Dive Into Accessibility. Livre téléchargeable sur l'accessibilité Web avec astuces et mises en situation.

- -

Technology Compatibility. Liste de technologies assistives courantes et de leurs niveaux de compatibilité respectifs avec XUL.

- #accessibility. Canal IRC sur l'accessibilité pour des discussions générales autour de l'accessibilité sur Internet. Utile lors de conférences.
Apple Accessibility. Portail d'accessibilité d'Apple. -

LARS (Linux Accessibility Resource Site). Portail sur l'accessibilité générale sous Linux.

- Microsoft Accessibility. Portail pour l'accessibilité chez Microsoft.
Accessibilité - MDC. Centre d'accessibilité sur le Mozilla Developer Center. -

mozilla.support.accessibility. Newsgroup sur l'accessibilité dans Mozilla.

- #accessibility. Canal sur l'accessibilité sur le serveur IRC de Mozilla.
- -

 

- -

Recommandations

- -

Accès au clavier

- -

L'accès au clavier est important pour les utilisateurs ne pouvant pas utiliser de souris. Beaucoup d'utilisateurs de lecteurs d'écran et de handicapés physiques s'appuient sur le clavier comme outil d'entrée principal. Ces utilisateurs ont besoin d'un contrôle au clavier aisé, prévisible et bien documenté.

- -

Ordre de tabulation

- -

Fournissez un ordre de tabulation logique et assurez-vous que les utilisateurs puissent naviguer parmi tout le contenu à l'aide d'un clavier. Par défaut, l'ordre de tabulation est déterminé par l'ordre des éléments dans le code sous-jacent. Il peut également être redéfini programmatiquement à l'aide de l'attribut tabindex si nécessaire, mais cela doit se faire avec modération et être testé en profondeur lorsqu'on l'utilise. L'ordre de navigation doit être logique, généralement de gauche à droite et de haut en bas. L'ordre de navigation peut varier selon la nature de l'application ou le sens de lecture de la langue utilisée.

- -

Assurez-vous que l'ordre de tabulation est logique et que l'on puisse accéder à tous les éléments interactifs simplement sans utiliser de souris. Vous devriez arriver à effectuer toutes les tâches possibles, que ce soit directement dans l'application ou depuis des éléments du menu ou de menus contextuels.

- -

Arbres

- -

Fournissez une manière alternative d'effectuer les opérations inaccessibles. Le sélecteur de colonne et les en-têtes de colonne dans les arbres XUL ne sont pas accessibles au clavier, pour respecter le comportement standard des arbres sur la plupart des systèmes d'exploitations actuels. Il est donc nécessaire de fournir une alternative accessible au clavier pour accéder à ces fonctions.

- -
Aperçu du menu Affichage de la gestion des marque-pages de Firefox.
- -

Un exemple d'arbre plus accessible est visible dans le gestionnaire de marque-pages de Firefox. Celui-ci permet aux utilisateurs de trier les marque-pages selon une certaine colonne d'information et de choisir les colonnes à afficher. Comme les en-têtes de colonne et le sélecteur de colonne, dans le coin supérieur droit de l'arbre, ne peuvent pas recevoir le focus, ils ne sont pas accessibles au clavier. Dans le gestionnaire de marque-pages, cette fonctionnalité est rendue accessible au clavier via le menu Affichage.

- -

Boutons de barres d'outils

- -

Par défaut, les boutons de barres d'outils ne peuvent pas recevoir le focus depuis le clavier. La manière conseillée de remédier à ce problème est de dupliquer toute fonctionnalité associée avec une barre d'outils ailleurs dans l'application, via un élément de menu principal ou contextuel par exemple. Dans les cas où cette duplication n'est pas possible (comme dans une fenêtre sans barre de menus), il est possible de permettre aux boutons de barres d'outils d'obtenir le focus en ajoutant la règle CSS spéciale -moz-user-focus: normal. (La fenêtre d'aperçu avant impression de Firefox utilise cette technique de secours.) Cela ne doit se faire qu'en dernier ressort, et être cohérent au sein d'une même fenêtre (c'est-à-dire que soit tous les boutons sont accessibles au clavier, soit aucun ne l'est).

- -

Raccourcis clavier

- -

Les raccourcis clavier sont très utiles pour les utilisateurs devant naviguer au clavier. Il existe de nombreuses manières d'en fournir. Celles-ci sont bien documentées dans le Tutoriel XUL:Raccourcis clavier.

- -

Il convient de faire particulièrement attention lors du choix des raccourcis clavier. Lors de la création d'une extension (que ce soit pour Firefox ou une autre application XUL), assurez-vous que les raccourcis clavier que vous définissez n'interfèrent pas avec ceux déjà définis par l'application de base. Reportez-vous aux ressources suivantes lors de la définition de raccourcis clavier.

- -
- - - - - - - - - - -
En savoir plus
Raccourcis clavier et touches d'accès rapides
Mozilla Keyboard Planning FAQ and Cross Reference. Un excellent guide pour déterminer les combinaisons de touches non utilisées et les problèmes dépendant de la plateforme. -

Mozilla Keyboard Shortcuts. Une liste complète des raccourcis clavier des diverses applications Mozilla.

- Mozilla's accesskey FAQ. Une courte référence sur l'utilisation de l'attribut accesskey.
-
- - - -

Le menu contextuel est le petit menu activé par un clic droit de la souris sur une zone de contenu ou un élément (ou à l'aide de Shift + F10 ou VK_APPS sous Windows et Ctrl + Click ou Ctrl + Espace sur un Mac). Utilisez le gestionnaire d'évènement oncontextmenu ou l'attribut context pour créer des menus contextuels. Ne les codez pas pour s'ouvrir spécifiquement lors d'un clic-droit. L'évènement oncontextmenu et l'attribut context fonctionnent avec les déclencheurs de menus spécifiques à chaque plateforme, que ce soient les touches du clavier ou les clics de souris appropriés.

- -

Scripts dépendant de la souris

- -

Les fonctions associées aux évènements souris comme onmouseover, onmousemove et ondrag peuvent uniquement être activés à l'aide de la souris. Fournissez des points d'accès alternatifs au clavier pour ces fonctions. Envisagez d'utiliser des éléments de menus contextuels ou d'autres éléments XUL parallèlement aux raccourcis clavier.

- -

Défilement

- -

Assurez-vous que le défilement est possible au clavier. Beaucoup d'éléments XUL peuvent être rendus défilables à l'aide de CSS. D'autres éléments, comme arrowscrollbox et listbox, sont conçus pour défiler automatiquement. En règle générale, les éléments prévus pour défiler sont inaccessibles si l'utilisateur ne peut pas faire défiler tout le contenu à l'aide du clavier. L'élément arrowscrollbox, par exemple, ne peut pas recevoir le focus ni défiler à l'aide du clavier. Un élément listbox, par contre, peut recevoir le focus et son contenu peut défiler. À peu près tous les éléments XUL peuvent être rendus défilables en définissant un style "overflow: auto" ou "overflow: scroll". Cette flexibilité doit être utilisée de manière réfléchie.

- -

Maintien du focus

- -

L'utilisateur doit typiquement pouvoir contrôler l'endroit où se trouve le focus actuel. Évitez de changer le focus automatiquement. Cependant, désactiver, masquer ou détruire l'élément qui a le focus (ou l'un de ses éléments parents) peut provoquer la perte du focus. Pour empêcher cela, déplacez le focus à l'élément suivant avant de désactiver, masquer ou détruire l'élément qui a le focus.

- -

L'exemple qui suit montre une fonction JavaScript qui peut être appelée avant de détruire un élément pour vérifier s'il a le focus et le déplacer si nécessaire.

- -
function moveFocus(element)
-{
-    if(element == document.commandDispatcher.focusedElement)
-    {
-        document.commandDispatcher.advanceFocus();
-        return true;
-    }
-
-    return false;
-}
-
- -


- Les changements de focus inattendus peuvent embrouiller ou désorienter les utilisateurs. Un exemple récurrent concerne les numéros de téléphones à entrer dans des champs de formulaire. Les numéros de téléphone aux États-Unis sont souvent affichés dans un format XXX-XXX-XXXX ou (XXX) XXX-XXXX. Pour conserver ce format, certains formulaires contiennent trois champs différents. Le problème se pose lorsqu'un développeur décide d'ajouter une fonctionnalité sautant vers le second champ du formulaire dès que 3 chiffres ont été entrés dans le premier champ de formulaire. Ce comportement se répète pour le champ suivant du formulaire. Les utilisateurs qui ont l'habitude de se déplacer eux-mêmes dans les champs de formulaire se retrouvent souvent à répéter l'opération de passage au champ suivant et passent donc au dessus d'un des champs du formulaire.

- -

Focus initial dans un dialogue

- -

Le focus initial dans une fenêtre de dialogue XUL (c'est-à-dire le focus à l'ouverture de la fenêtre) devrait toujours se trouver sur un contrôle spécifique et non sur le dialogue lui-même. Dans un dialogue comportant des onglets, le focus doit généralement commencer au premier contrôle de l'onglet sélectionné. Dans tous les autres dialogues, le focus doit commencer au premier contrôle (bien qu'il puisse s'agir de n'importe quel autre contrôle s'il y a une bonne raison de le faire, du moment que ce n'est pas le dialogue lui-même).

- -

Test de l'accès au clavier

- -

Pour tester l'accessibilité au clavier débranchez ou désactivez simplement votre souris et essayez d'utiliser votre application uniquement avec le clavier. Vérifiez que l'ordre de tabulation est logique. Assurez-vous de pouvoir accéder à toutes les fonctions soit directement, soit par des moyens alternatifs comme des choix de menus ou des menus contextuels. Assurez-vous également que l'utilisateur puisse lire tout le contenu.

- -

Informations assistives

- -

Les utilisateurs de technologies assistives ont souvent besoin d'un balisage supplémentaire pour comprendre des significations et associations qui peuvent être intuitives pour les utilisateurs valides. Ce balisage supplémentaire est appelé information assistive. Il est aisé de fournir ces informations, mais on l'oublie souvent car elles ne produisent que très peu de changements visuels, voire aucun.

- -

Texte alternatif

- -

Fournissez un texte alternatif pour les images significatives. Il n'est pas nécessaire d'ajouter un texte alternatif lorsqu'une image assure une fonction purement décorative. Utilisez l'attribut alt pour décrire les images HTML et l'attribut tooltiptext pour les éléments XUL utilisant des images (c'est-à-dire les éléments image et les boutons avec images). Pour les boutons de barres d'outils avec images, on recommande d'utiliser à la fois une étiquette textuelle dans l'attribut label et un texte alternatif pour l'image dans l'attribut tooltiptext. Voyez les exemples de code ci-dessous.

- -
<image src="stop.png" tooltiptext="Stop" />
-
-<html:img src="stop.jpg" alt="Stop" />
-<html:img src="image_decorative.jpg" alt="" /> <!-- En HTML, l'attribut alt est obligatoire. -->
-
-<toolbarbutton label="Stop" image="stop.png" tooltiptext="Arrêter le chargement de la page" />
-
- -

Titres

- -

Fournissez des titres uniques aux éléments conteneurs des fenêtres, assistants et dialogues. Les titres fournissent aux utilisateurs les informations les informations les plus basiques concernant l'application. Le titre est souvent la première chose qui est prononcée par un lecteur d'écran lorsqu'une application est ouverte ou activée. Les utilisateurs peuvent également se référer au titre pour comprendre où ils se situent. Les titres sont affichés dans la barre supérieure d'une application. Voyez les exemples de code ci-dessous.

- -
<dialog id="print_dialog" title="Imprimer"                  ...>
-<window id="mywindow"     title="Mon application"           ...>
-<wizard id="reg_window"   title="Enregistrer le logiciel"   ...>
-
- -

Labels de formulaires

- -

Les labels ne sont pas automatiquement associés aux éléments de formulaires. Utilisez l'attribut control pour lier une étiquette texte (d'un élément label ou de description) à un élément de formulaire. Les lecteurs d'écran liront alors le label lors du remplissage d'un champ de forumlaire.

- -
<label control="login-username" value="Utilisateur :"/>
-<textbox id="login-username"/>
-
-<description control="login-password">Mot de passe :</description>
-<textbox id="login-password" type="password"/>
-
- -

Les formulaires plus grand peuvent être difficiles à mettre en page et à structurer. Bien qu'il y ait toujours de nombreuses manières de structurer un formulaire visuellement, fournissez toujours un label texte pour chaque élément de formulaire. Il ne faut pas utiliser des éléments de formulaire pour en décrire d'autres.

- -
Capture d'écran du panneau Vie privé des options de Firefox.
- -

Lorsque des éléments de formulaire sont intégrés dans un groupbox avec une étiquette, les technologies assistives comme les lecteurs d'écran liront cette étiquette suivie du label de l'élément de formulaire. Par exemple, dans la section Vie privée des options, il y a trois groupes appelés Historique, Cookies et Vie privée. Si l'utilisateur se déplace avec la tabulation vers le bouton « Exceptions... », il entendra « cookies {pause} exceptions {pause} bouton. » L'élément suivant dira « cookies {pause} les conserver jusqu'à {pause} leur expiration {pause} un sur trois {pause} liste déroulante ». Si le lecteur d'écran lisait uniquement le label, l'utilisateur devrait deviner à quoi se référait le bouton « exceptions » ou la liste déroulante « les conserver jusqu'à ».

- -

Les groupes de contrôles sont essentiels pour les boutons radios ou groupes de cases à cocher concernant un thème similaire (c'est-à-dire où il faut cocher toutes celles qui s'appliquent). Si vous trouvez que des groupes de contrôles imbriqués sont peu agréables visuellement, utilisez CSS pour cacher la bordure du groupe interne afin qu'il reste visible dans le code pour servir aux utilisateurs de technologies assistives.

- -

Les formulaires complexes ont souvent besoin d'un système d'étiquetage plus avancé que ce qui est possible avec les attributs XUL standards. Par exemple, le premier élément du panneau Vie privée des options de Firefox (montré et décrit plus haut) est [case à cocher] Se souvenir des pages visitées lors des [textbox] derniers jours. La difficulté ici provient du fait que le label correct pour la case à cocher (« Se souvenir des pages visitées lors des x derniers jours ») est composé de trois pièces différentes, dont la seconde est la valeur actuellement entrée dans la boîte de texte. Le label correct pour la boîte de texte est en fait le même, mais on ne voudrait pas que les technologies assistives le lisent ou le montrent deux fois de suite. Ce qu'il faut, c'est une manière de spécifier dans le code source que la case à cocher, le champ d'édition et les labels textuels autour font tous partie d'une seule entité, et qu'ils s'étiquettent en quelque sorte l'un l'autre.

- -

Pour résoudre ce problème, on entourera d'abord tous ces contrôles dans un seul élément conteneur, comme (dans ce cas-ci) un hbox. On importe ensuite ce qu'on appelle « l'Accessible, Adaptable Applications Module » (du groupe WAI-ARIA du WC3) en ajoutant xmlns:aaa="http://www.w3.org/2005/07/aaa" comme attribut sur l'élément conteneur. Ceci nous permet d'utiliser l'attribut labelledby (notez le double L — aaa utilise l'orthographe anglaise du Royaume-Uni) pour spécifier que la case à cocher et la boîte de texte sont toutes deux décrites par l'ensemble du groupe de composants. Dans XUL, cela ressemblera à ce qui suit.

- -
<hbox id="historyBox" xmlns:aaa="http://www.w3.org/2005/07/aaa">
-  <checkbox id="rememberHistoryDays" aaa:labelledby="historyBox" label="Se souvenir des pages visitées lors des"/>
-  <textbox  id="historyDays"         aaa:labelledby="historyBox"/>
-  <label>derniers jours.</label>
-</hbox>
-
- -

Test des informations assistives

- -

La meilleure manière de tester est pour de nombreuses raisons de faire le test avec un lecteur d'écran, car la navigation au clavier et la structure sémantique sous-jacente de l'interface utilisateur peuvent être testées simultanément. C'est un excellent indicateur concernant l'accessibilité d'une interface utilisateur, mais en aucun cas un test complet. En fin de compte, pour les applications qui doivent être entièrement accessibles, il est préférable que l'application soit testée par un large panel d'utilisateurs disposant de différentes configurations logicielles et de différentes technologies assistives.

- -

Si vous ne disposez pas d'un logiciel lecteur d'écran (et ne connaissez personne dont c'est le cas), votre meilleure option est de vérifier attentivement le code source pour vous assurer que toutes les règles ci-dessus ont été suivies, et ensuite que les utilisateurs ont un moyen de vous contacter en retour sur l'accessibilité (et d'autres aspects) de votre application.

- -

Affichage

- -

On entend souvent que « la présentation fait tout ». Bien qu'il soit vrai que la présentation est quelque chose d'essentiel, les documents doivent également être structurés de manière à ce que l'utilisateur puisse appeler des préférences d'affichage qui peuvent être nécessaires pour l'accessibilité. La présentation doit aussi être flexible pour s'adapter au redimensionnement des fenêtres et polices. Les applications coopératives s'adaptent bien à l'environnement de l'utilisateur.

- -

Paramètres par défaut du système

- -

Respectez les réglages par défaut du système. Beaucoup d'utilisateurs configurent leur ordinateur pour utiliser des polices plus grandes et/ou des thèmes de couleur particuliers. Par défaut, les menus XUL, labels et autres contrôles obtiennent leur police, taille et paramètres de couleur des réglages de l'utilisateur spécifiés par le système d'exploitation. Respectez ces réglages à moins d'avoir une raison particulière et inévitable de les changer. Le cas échéant, utilisez CSS pour dimensionner les éléments par rapport à leurs tailles par défaut (par exemple, utilisez des tailles en % ou em plutôt que des tailles spécifiques en points ou en pixels).

- -

Couleurs

- -

La couleur est un outil important. Des couleurs différentes peuvent donner des significations différentes aux objets et au texte. Cependant, la couleur seule est inadéquate pour communiquer un sens ou une information particulière à l'utilisateur. Certains, principalement ceux qui sont aveugles ou ne voient pas les couleurs, n'arriveront pas à discerner certaines couleurs. Certains utilisateurs peuvent modifier le schéma de couleurs par défaut de votre application. La couleur doit uniquement être utilisée pour souligner la signification d'un objet ou d'un texte après avoir donné cette signification à l'utilisateur d'une autre manière.

- -

Tailles flexibles

- -

Un des avantages d'XUL est que l'apparence visuelle est très facile à contrôler. Sur le Web, la mise en page est souvent contrainte dans une taille spécifique. Avec XUL, vous pouvez permettre aux éléments de s'étendre lorsque la fenêtre de l'application est redimensionnée. Utilisez l'attribut flex pour fournir cette fonctionnalité.

- -

Test de l'affichage

- -

Vérifiez que votre application est fonctionnelle et que son apparence est plaisante en utilisant des polices et couleurs définies par l'utilisateur. Pour cela, changez les paramètres d'affichage du système en un thème accessible (comme le thème Contraste élevé sous Windows, disponible par Alt-Gauche + Maj-Gauche + Impr. Écran). Assurez-vous que le texte est mis en évidence correctement que que la couleur n'est pas utilisée comme seule manière de communiquer une signification. Assurez-vous également que lorsque les fenêtres sont redimensionnées, votre application s'adapte de bonne grâce.

- -

Interaction entre l'homme et la machine

- -

Lorsque vous utilisez une application, vous vous attendez à disposer d'un certain contrôle et d'un retour sur ce qui se passe. Fournissez aux utilisateurs des instructions et indications claires, et permettez-leur de corriger leurs erreurs. Certains utilisateurs handicapés ont des difficultés lorsqu'on leur demande une réponse rapide. Donnez-leur un temps adéquat pour effectuer leurs tâches.

- -

Instructions

- -

Fournissez une documentation d'aide aux utilisateurs. Même des applications très simples devraient contenir un document d'aide ou un manuel de référence pour l'utilisateur. Décrivez les raccourcis claver et toutes autres considérations concernant l'accessibilité. Les utilisateurs doivent avoir la possibilité de consulter une description complète de toutes les fonctionnalités majeures d'une application. Fournissez également des détails sur l'utilisation de la documentation d'aide lorsqu'elle est longue ou complexe.

- -

Avertissements

- -

Utilisez des avertissements accessibles pour présenter des informations importantes à l'utilisateur. Utilisez des scripts ou l'élément notificationbox pour déclencher des alertes.

- -

Évitez d'utiliser uniquement des alertes audio ou visuelles pour signaler des évènements urgents. Les utilisateurs qui ont réduit ou coupé le son, ou qui sont sourds ou malentendants ne pourront pas reconnaître des alertes uniquement sonores. Les utilisateurs souffrant de déficiences visuelles ne verront pas non plus les alertes qui sont purement visuelles (à moins que celles-ci soient présentées dans un texte fonctionnel également accessible à un lecteur d'écran).

- -

Éléments interactifs

- -

Évitez les petites cibles, qui sont difficiles à voir et à atteindre avec un clic de souris. Vérifiez que la mise en page et le contraste sont suffisants pour distinguer les éléments interactifs les un des autres et par rapport aux parties statiques de l'application.

- -

Récupération en cas d'erreur

- -

Lorsque l'utilisateur provoque une erreur dans une application, permettez une récupération aisée. Par exemple, si l'utilisateur entre des lettres là où un nombre est attendu dans un formulaire, cela ne doit pas faire planter l'application. L'utilisateur doit être averti du problème et pouvoir corriger l'erreur.

- -

Temps de réponse

- -

Le cas échéant, avertissez l'utilisateur des limites de temps et permettez-lui d'ajuster la limite ou de demander plus de temps. Un des miracles de la technologie moderne est qu'elle permet aux personnes souffrant même des plus sévères limitations physiques d'utiliser des ordinateurs. Certains utilisent des contrôles à la bouche ou des périphériques de détection de mouvements comme des capteurs oculaires pour entrer des informations. Ce processus peut être lent. D'autres utilisateurs ont simplement besoin de temps pour comprendre ce qui se produit dans l'application.

- -

Test de l'interaction homme machine

- -

Assurez-vous que la documentation d'aide est à jour. Vérifiez que les avertissements sont affichés à l'aides des éléments XUL appropriés. Assurez-vous que l'utilisateur est informé de toutes ses erreurs et que des instructions et la possibilité d'effectuer à nouveau l'opération correcte sont fournies. Assurez-vous également que les utilisateurs ont le contrôle de leur temps de réponse.

- -

Médias

- -

Audio

- -

Des fichiers audio d'information comme des podcasts peuvent être rendus accessibles en fournissant une transcription mot-à-mot. Les transcriptions doivent identifier correctement les intervenants et décrire les autres sons significatifs comme les rires ou les chansons. Ces transcriptions peuvent prendre du temps à réaliser, mais c'est la seule manière de rendre du contenu sonore accessible.

- -

Vidéos

- -

Un fichier vidéo peut être rendu accessible en ajoutant des sous-titres synchronisés. La plupart des formats vidéo fournissent un moyen d'afficher des sous-titres. Les vidéos devraient également être accompagnées de transcriptions descriptives. En général, ces deux opérations vont ensemble, une fois que vous avez l'une, il est facile de produire l'autre.

- - - - - - - - - - - -
En savoir plus
Sous-titrage
Article de WebAIM : Web Captioning Overview
-
- WebAIM : Captioning Resources
- -

Animations

- -

Les animations, le mouvement et les sons peuvent être dérangeantes pour certains utilisateurs souffrants de troubles de l'attention. Fournissez un mécanisme pour désactiver les médias et les mouvements.

- -

Les tremblements ou clignotements ne sont pas uniquement ennuyeux pour tout le monde, mais à une vitesse de plus de 3 cycles par seconde, ils peuvent provoquer un malaise chez les utilisateurs souffrant d'épilepsie photosensible. Si des tremblement ou clignotements sont nécessaires, avertissez l'utilisateur au préalable avant de les provoquer.

- -

Test de médias

- -

Assurez-vous que des alternatives aux médias sont disponibles dans un format accessible.

- -

Autres problèmes

- -

Contrôles personnalisés

- -

Évitez de recréer des fonctionnalités qui existent déjà. Assurez-vous que vos composants personnalisés sont construits en pensant à l'accessibilité. Utilisez les couleurs système CSS pour vous assurer que les nouveaux contrôles interagiront bien avec les autres contrôles ainsi qu'avec les thèmes et couleurs définis par l'utilisateur.

- - - - - - - - - - - -
En savoir plus
Contrôles personnalisés accessibles
ARIA : Applications riches Internet accessibles
-
- Réalisation de composants personnalisés accessibles en XUL
- -

Liste de contrôle d'accessibilité pour XUL

- -

Utilisez la liste de contrôle suivante pour vérifier rapidement l'accessibilité d'une nouvelle application XUL, ou comme point de départ pour régler les problèmes d'accessibilité dans une application existante.

- -

Accès au clavier

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Point à vérifierCorrectIncorrect
Ordre de tabulationUn ordre de tabulation logique est fourni.L'ordre de tabulation saute de manière inattendue.
ArbresUn accès au clavier est fourni pour les fonctions inaccessibles comme le sélecteur de colonnes ou le tri par colonnes.Aucun accès au clavier n'est fourni pour le choix des colonnes ou d'autres fonctionnalités.
Boutons de barres d'outilsDes alternatives au clavier sont fournies pour les fonctionnalités des boutons de barres d'outils.Aucune alternative au clavier n'est fournie pour les fonctionnalités des boutons de barres d'outils.
Raccourcis clavierDes raccourcis clavier sont présents pour les fonctionnalités importantesAucun raccourci clavier n'est fourni.
Menus contextuelsLes menus contextuels sont déclenchés par le gestionnaire d'évènement oncontextmenu.Les menus contextuels sont déclenchés directement par un clic droit de la souris ou un autre déclencheur spécifique.
Scripts dépendants de la sourisToutes les opérations à la souris ont des équivalents accessibles au clavier.Certaines opérations ne peuvent être réalisées qu'avec une souris.
DéfilementTous les éléments défilables peuvent être contrôlés au clavier.Le défilement ne peut pas se faire au clavier.
FocusLe focus clavier est conservé et ne se déplace pas de manière inattendue.Le focus se déplace ou est désactivé de manière inattendue.
- -

Informations assistives

- - - - - - - - - - - - - - - - - - - - - - - - -
Point à vérifierCorrectIncorrect
Texte alternatifUn texte alternatif est fourni pour les images significatives.Le texte alternatif est manquant sur des images significatives, o n'est pas approprié pour la fonction d'une image.
TitresToutes les fenêtres, y compris les dialogues et les assistants, ont un titre descriptif.Des fenêtres n'ont pas de titre ou un titre incorrect.
Labels de formulairesChaque élément de formulaire a un label associé et les boutons radios sont intégrés dans un groupbox.Des éléments de formulaire n'ont pas de label ou ces labels ne sont pas connectés programmatiquement, ou des boutons radios ne font pas partie d'un groupbox.
- -

Affichage

- - - - - - - - - - - - - - - - - - - - - - - - -
Point à vérifierCorrectIncorrect
Réglages par défaut du systèmeLes paramètres systèmes sont respectés.Les paramètres systèmes ne sont pas respectés.
CouleursLa couleur seule n'est pas utilisée pour donner une signification, et le contraste entre le texte et la couleur de fond est suffisant.La couleur seule est utilisée pour donner une signification, ou le contraste entre le texte et la couleur de fond est insuffisant.
FlexibilitéLes éléments visuels et leurs conteneurs se redimensionnent.Les éléments visuels et leurs conteneurs ne se redimensionnent pas.
- -

Interaction homme-machine

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Point à vérifierCorrectIncorrect
InstructionsUne documentation d'aide est fournie, avec une description des raccourcis clavier.Aucune documentation d'aide n'est fournie, ou celle-ci est incomplète.
AvertissementsLes alertes sont affichées à l'aide de la fonction de script alert() ou l'élément notificationbox.Les alertes sont uniquement visuelles ou audifives, ou utilisent une autre méthode que la fonction de script alert() ou l'élément notificationbox.
Éléments interactifsLes éléments interactifs sont suffisamment grands et visibles.Les éléments interactifs sont trop petits ou insuffisamment contrastés par rapport aux autres parties de l'application.
Récupération en cas d'erreurDes avertissements sont affichés lorsque l'utilisateur commet une erreur. Il reçoit ensuite la possibilité et des instructions pour la corriger.Aucun message d'erreur n'existe, ou des instructions inadéquates sont fournies.
Temps de réponseL'utilisateur est informé des limites des temps et a le contrôle de cette limite lorsque c'est possible.L'utilisateur n'est pas informé des limites de temps et/ou n'a aucun contrôle sur celles-ci.
- -

Médias

- - - - - - - - - - - - - - - - - - - - - - - - -
Point à vérifierCorrectIncorrect
AudioDes transcriptions sont fournies pour les pistes sonores.Aucune transcription n'est fournie.
VidéosLes vidéos sont sous-titrées et une transcription est fournie.Aucun sous-titre ou transcription n'est fourni.
AnimationsL'utilisateur peut contrôler les animations et est prévenu lorsque le contenu va clignoter.Il n'existe pas de contrôle pour les animations ni d'avertissements pour les clignotements.
- -

Autres

- - - - - - - - - - - - - - -
Point à vérifierCorrectIncorrect
Contrôles personnalisésLes contrôles personnalisés sont accessibles.Les contrôles personnalisés ne sont pas accessibles.
diff --git a/files/fr/archive/mozilla/xul/richlistbox/index.html b/files/fr/archive/mozilla/xul/richlistbox/index.html deleted file mode 100644 index db0f4dacc7..0000000000 --- a/files/fr/archive/mozilla/xul/richlistbox/index.html +++ /dev/null @@ -1,268 +0,0 @@ ---- -title: richlistbox -slug: Archive/Mozilla/XUL/richlistbox -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/richlistbox ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Cet élément est utilisé pour créer une liste d'éléments, de manière semblable à une listbox, mais est conçu pour être utilisé lorsque les éléments ne contiennent pas du simple contenu texte.

Note : Dans les versions de Firefox antérieures à Firefox 3, les richlistbox supportaient uniquement les sélections simples. Firefox 3 y permet les sélections multiples.
- -
Attributs -
disabled, disableKeyNavigation, preference, rows, seltype, suppressonselect, tabindex, value -
-
Propriétés -
accessibleType, currentIndex, currentItem, disabled, disableKeyNavigation, itemCount, selectedCount, selectedIndex, selectedItem, selectedItems, selType, suppressOnSelect, tabIndex, value -
-
Méthodes -
addItemToSelection, appendItem, clearSelection, ensureElementIsVisible, ensureIndexIsVisible, getIndexOfFirstVisibleRow, getIndexOfItem, getItemAtIndex, getNumberofVisibleRows, getRowCount, getSelectedItem, insertItemAt, invertSelection, moveByOffset, removeItemAt, removeItemFromSelection, scrollToIndex, selectAll, selectItem, selectItemRange, timedSelect, toggleItemSelection -
-

Exemples

-
<richlistbox>
-  <richlistitem>
-    <description>Une description XUL !</description>
-  </richlistitem>
-  <richlistitem>
-    <button label="Un bouton XUL"/>
-  </richlistitem>
-</richlistbox>
-
-

L'élément richlistbox contient plusieurs éléments richlistitem, qui peuvent contenir tout type de contenu. On peut cliquer sur n'importe quel élément richlistitem et utiliser le clavier pour déplacer la sélection. -

-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
preference -
Type : id d'élément -
Connecte l'élément à une préférence (élément preference) correspondante. Cet attribut n'a d'effet qu'utilisé au sein d'un prefwindow. La valeur de la préférence sera mise à jour pour correspondre à la propriété value de l'élément. -
- - -
-
- -
rows -
Type : entier -
Le nombre de lignes à afficher dans l'élément. Si l'élément contient plus que ce nombre de lignes, une barre de défilement apparaitra afin que l'utilisateur puisse consulter les autres lignes. Pour obtenir le nombre réel de lignes dans l'élément, utilisez la méthode getRowCount. -
- - -
-
- -
-
- seltype<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - une des valeurs ci-dessous -
-
- Utilisé pour indiquer si les sélections multiples sont permises.
-
- -

<magic name="\"PAGENAME\"/">Des cellules individuelles peuvent être sélectionnées.</magic><magic name="\"PAGENAME\"/"> Des lignes sont sélectionnées, cependant, l'indicateur de sélection n'est visible que sur le texte de la colonne principale.</magic>

-
-
- -
-
- suppressonselect
-
- Type : - - booléen -
-
- Si cet attribut n'est pas spécifié, un évènement select est déclenché dès qu'un élément est sélectionné, que ce soit par l'utilisateur ou par l'appel d'une des méthodes de sélection. Si la valeur de l'attribut est true, l'évènement select n'est jamais déclenché.
-
-
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
currentItem -
Type : élément listitem -
Renvoie le dernier élément sélectionné dans la liste de sélection, ce qui n'est utile que dans une liste à sélection multiple. -
- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
-
-
selectedIndex -
Type : entier -
Renvoie l'indice de l'élément actuellement sélectionné. Un élément peut être sélectionné en assignant son indice à cette propriété. En lui assignant -1, tous les éléments seront désélectionnés. -
- -
-
-
selectedItem -
Type : élément -
Conserve l'élément actuellement sélectionné. Si aucun élément n'est sélectionné, sa valeur sera null. Vous pouvez sélectionner un élément en définissant cette valeur. Un évènement select sera envoyé à cet élément lorsqu'il est sélectionné en modifiant cette propriété, la propriété selectedIndex, ou par l'utilisateur. -
- -
-
-
-
-
- selType<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - chaîne de caractères -
-
- Obtient et définit la valeur de l'attribut seltype.
-
- -
-
-
-
- suppressOnSelect
-
- Type : - - booléen -
-
- Obtient et définit la valeur de l'attribut suppressonselect.
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
- - - - - - - - - -
getRowCount() -
Type de retour : entier -
Renvoie le nombre total de lignes dans l'élément, quel que soit le nombre de lignes affichées. -
- - - - - - - -
selectAll() -
Type de retour : aucune valeur renvoyée -
Sélectionne tous les éléments. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
selectItem( item ) -
Type de retour : aucune valeur renvoyée -
Désélectionne tous les éléments actuellement sélectionnés, puis sélectionne l'élément donné en argument. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
selectItemRange( startItem, endItem) -
Type de retour : aucune valeur renvoyée -
Sélectionne tous les éléments compris entre les deux éléments donnés en paramètre, y compris les éléments de début et de fin. Tous les autres éléments sont désélectionnés. Cette méthode n'a aucun effet sur les listes en mono-sélection. Un évènement de sélection est envoyé après l'exécution de la sélection. -
-
timedSelect( item, timeout ) -
Type de retour : aucune valeur renvoyée -
Sélectionne un élément spécifié par l'argument item après un nombre de millisecondes définit par l'argument timeout. Tous les autres éléments sont désélectionnés. -
-
toggleItemSelection( item ) -
Type de retour : aucune valeur renvoyée -
Modifie l'état de sélection de l'élément spécifié. S'il est sélectionné, il devient désélectionné. S'il est désélectionné, il devient sélectionné. Les autres éléments de la liste ne sont pas affectés et ils conservent leur état de sélection. -
- -

Sujets liés

-
Interfaces -
nsIAccessibleProvider, nsIDOMXULMultiSelectControlElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/richlistitem/index.html b/files/fr/archive/mozilla/xul/richlistitem/index.html deleted file mode 100644 index ee24a5cf8e..0000000000 --- a/files/fr/archive/mozilla/xul/richlistitem/index.html +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: richlistitem -slug: Archive/Mozilla/XUL/richlistitem -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/richlistitem ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément individuel dans une richlistbox. -

-
Attributs -
disabled, selected, tabindex, value -
-
Propriétés -
accessible, control, disabled, label, selected, tabIndex, value -
-

Exemples

-

(exemple nécessaire) -

-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
selected -
Type : booléen -
Indique si l'élément est sélectionné ou non. Cette valeur est en lecture seule. Pour changer la sélection, utilisez la propriété selectedIndex ou selectedItem de l'élément conteneur. -
- - -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
accessible -
Type : nsIAccessible -
Renvoie l'objet d'accessibilité pour l'élément. -
-


-

- -
-
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
- -
-
selected
-
Type : booléen
-
La valeur de cette propriété est true si cet élément est sélectionné, ou false s'il ne l'est pas. Cette propriété est en lecture seule.
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Interfaces -
nsIAccessibleProvider, nsIDOMXULSelectControlItemElement -
-
-
diff --git "a/files/fr/archive/mozilla/xul/r\303\251f\303\251rence_xul/index.html" "b/files/fr/archive/mozilla/xul/r\303\251f\303\251rence_xul/index.html" deleted file mode 100644 index 0ab0677e2f..0000000000 --- "a/files/fr/archive/mozilla/xul/r\303\251f\303\251rence_xul/index.html" +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Référence XUL -slug: Archive/Mozilla/XUL/Référence_XUL -tags: - - Aide_pour_les_éditeurs_de_MDC - - Référence_XUL - - Traduction_en_cours - - XUL -translation_of: Archive/Mozilla/XUL/XUL_Reference ---- -

« XUL Reference «Consultez également la Référence XUL du wiki XULfr.org.

- - - - - - - - - - - - -
Tous les éléments XUL
-

action (en, xulfr)
- arrowscrollbox (en, xulfr)
- assign (en)
- bbox (en, xulfr)
- binding (en, xulfr)
- bindings (en, xulfr)
- box (en, xulfr)
- broadcaster (en, xulfr)
- broadcasterset (en, xulfr)
- button (en, xulfr)
- browser (, xulfr)
- checkbox (en, xulfr)
- caption (en, xulfr)
- colorpicker (en, xulfr)
- column (en, xulfr)
- columns (en, xulfr)
- commandset (en, xulfr)
- command (en, xulfr)
- conditions (en, xulfr)
- content (en, xulfr)
- datepicker
- deck (en, xulfr)
- description (en, xulfr)
- dialog (en, xulfr)
- dialogheader (en)
- dropmarker
- editor (en, xulfr)
- grid (en, xulfr)
- grippy (en, xulfr)
- groupbox (en, xulfr)
- hbox (en, xulfr)
- iframe (en, xulfr)
- image (en, xulfr)
- key (en, xulfr)
- keyset (en, xulfr)
- label (en, xulfr)
- listbox (en, xulfr)
- listcell (en, xulfr)
- listcol (en, xulfr)
- listcols (en, xulfr)
- listhead (en, xulfr)
- listheader (en)
- listitem (en, xulfr)

-
-

member (en, xulfr)
- menu (en, xulfr)
- menubar (en, xulfr)
- menuitem (en, xulfr)
- menulist (en, xulfr)
- menupopup (en, xulfr)
- menuseparator (en, xulfr)
- notification (en)
- notificationbox (en)
- observes (en, xulfr)
- overlay (en, xulfr)
- page (en, xulfr)
- panel
- param (en)
- popup (en, xulfr)
- popupset (en, xulfr)
- preference
- preferences
- prefpane
- prefwindow
- progressmeter (en, xulfr)
- query (en)
- queryset (en)
- radio (en, xulfr)
- radiogroup (en, xulfr)
- resizer (en)
- richlistbox
- richlistitem
- row (en, xulfr)
- rows (en, xulfr)
- rule (en, xulfr)
- scale
- script (en, xulfr)
- scrollbar (en, xulfr)
- scrollbox (en, xulfr)
- scrollcorner (en)
- separator (en, xulfr)
- spacer (en, xulfr)
- spinbuttons
- splitter (en, xulfr)
- stack (en, xulfr)
- statusbar (en, xulfr)

-
-

statusbarpanel (en, xulfr)
- stringbundle (en, xulfr)
- stringbundleset (en, xulfr)
- tab (en, xulfr)
- tabbrowser (en, xulfr) (Firefox uniquement
- à partir de Firefox 3/Gecko 1.9)
- tabbox (en, xulfr)
- tabpanel (en, xulfr)
- tabpanels (en, xulfr)
- tabs (en, xulfr)
- template (en, xulfr)
- textnode (en, xulfr)
- textbox (en, xulfr)
- textbox (autocomplétion de Firefox) (en)
- textbox (autocomplétion de Mozilla) (en)
- timepicker
- titlebar (en, xulfr)
- toolbar (en, xulfr)
- toolbarbutton (en, xulfr)
- toolbargrippy (en, xulfr)
- toolbaritem (en, xulfr)
- toolbarpalette (en, xulfr)
- toolbarseparator (en, xulfr)
- toolbarset (en, xulfr)
- toolbarspacer ({en)
- toolbarspring (en)
- toolbox (en, xulfr)
- tooltip ({en, xulfr)
- tree (en, xulfr)
- treecell ({en, xulfr)
- treechildren (en, xulfr)
- treecol (en, xulfr)
- treecols (en, xulfr)
- treeitem ({en, xulfr)
- treerow (en, xulfr)
- treeseparator (en, xulfr)
- triple ({en, xulfr)
- vbox (en, xulfr)
- where (en)
- window (en, xulfr)
- wizard (en, xulfr)
- wizardpage (en, xulfr)

-
- -

Autres listes sur XUL

- - diff --git a/files/fr/archive/mozilla/xul/scale/index.html b/files/fr/archive/mozilla/xul/scale/index.html deleted file mode 100644 index a4ae7e44e9..0000000000 --- a/files/fr/archive/mozilla/xul/scale/index.html +++ /dev/null @@ -1,255 +0,0 @@ ---- -title: scale -slug: Archive/Mozilla/XUL/scale -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/scale ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément scale (parfois appelé slider) permet à l'utilisateur de sélectionner une valeur dans un intervalle. Une barre affichée horizontalement ou verticalement lui permet de choisir une valeur en glissant une poignée sur la barre. -

Utilisez l'attribut orient pour spécifier l'orientation de l'échelle. La valeur par défaut est <tt>horizontal</tt> qui affiche une barre horizontale. Les valeurs inférieures sont à gauche et les valeurs supérieurs à droite. Pour utiliser une échelle verticale, définissez l'attribut orient à <tt>vertical</tt>. -

L'utilisateur peut utiliser les touches fléchées du clavier pour incrémenter ou décrémenter la valeur d'une unité, ou les touches PagePréc et PageSuiv pour incrémenter ou décrémenter la valeur d'une page, telle que spécifiée par l'attribut pageincrement. Les touches Origine et Fin définissent respectivement la valeur au minimum et au maximum. Un évènement change sera déclenché par l'élément chaque fois que sa valeur est modifiée. -

-
Attributs -
dir, disabled, increment, max, min, pageincrement, tabindex, value -
-
Propriétés -
disabled, max, min, increment, pageIncrement, tabIndex, value,
-
Méthodes -
decrease, decreasePage, increase, increasePage, -
-

Exemples

-

Échelle horizontale : -

-
<scale min="1" max="10"/>
-
-

Image:Controlguide-scale.png -

Échelle verticale : -

-
<scale min="1" max="10" orient="vertical"/>
-
-

Attributs

-

-

- -
-
- dir
-
- Type : - - une des valeurs ci-dessous -
-
- La direction dans laquelle les éléments enfants de l'élément seront placés.
-
- - -

 

-
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- increment
-
- Type : - - entier -
-
- La quantité dont l'attribut value (pour les boîtes numériques et les échelles) or curpos<magic name="\"PAGENAME\"/"> (pour les barres de défilement) </magic> change lorsque l'on clique sur les flèches. La valeur par défaut est 1.
-
-
-
- -
-
- min
-
- Type : - - entier -
-
- La valeur minimum que peut prendre l'élément. La valeur par défaut est 0.
-
-
-
- -
-
- max
-
- Type : - - entier -
-
- La valeur maximum que peut prendre l'élément scale ou number box. La valeur par défaut est 100 pour les éléments scale et Infinity pour les boîtes numériques
-
-
-
- -
-
- pageincrement
-
- Type : - - entier -
-
- La quantité de laquelle la valeur de l'attribut curpos ou value change lorsque l'utilisateur clique dans la colonne de la barre de défilement (la zone dans laquelle le curseur de la barre se déplace), ou lorsque les touches PgUp ou PgDown sont utilisées. La valeur par défaut est 10.
-
-
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

-

-

-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
- increment
-
- Type : entier
-
- Obtient et définit la valeur de l'attribut increment.
-
-
-
min -
Type : entier -
Obtient et définit la valeur de l'attribut min. -
-


-

- -
-
-
max -
Type : entier -
Obtient et définit la valeur de l'attribut max. -
-


-

- -
-
-
pageIncrement -
Type : entier -
Obtient et définit la valeur de l'attribut pageincrement. -
-


-

- -
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
value -
Type : chaîne -
Obtient et définit la valeur de l'attribut value. -
- -
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

-
-
- decrease()
-
- Type de retour : - - aucune valeur de retour -
-
- Diminue la valeur de<magic name="\"PAGENAME\"/"> la boîte numérique l'échelle, l'échelle ou la boîte numérique</magic> de la valeur de l'incrément.
-
-
decreasePage()
-
Type de retour : aucune valeur de retour -
Diminue la valeur de l'échelle de la valeur de pageIncrement. -
-


-

-
-
- increase()
-
- Type de retour : - - aucune valeur de retour -
-
- Augmente la valeur de <magic name="\"PAGENAME\"/">la boîte numérique, XUL:scale = l'échelle, l'échelle ou la boîte numérique</magic> de la valeur de l'incrément.
-
-

 

- - -
increasePage()
-
Type de retour : aucune valeur de retour -
Augmente la valeur de l'échelle de la valeur de pageIncrement. -
-


-

- -

Sujets liés

-
Interfaces -
nsIDOMXULControlElement -
-
-
diff --git a/files/fr/archive/mozilla/xul/spacer/index.html b/files/fr/archive/mozilla/xul/spacer/index.html deleted file mode 100644 index 259c7f355f..0000000000 --- a/files/fr/archive/mozilla/xul/spacer/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: spacer -slug: Archive/Mozilla/XUL/spacer -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/spacer ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément qui occupe de l'espace mais n'affiche rien. On l'utilise généralement pour occuper de la place dans un conteneur. Si l'on ne spécifie pas de taille ou de flexibilité à cet élément, le spacer n'occupe aucune place. Si vous voulez créer un léger espacement, pensez à utiliser plutôt un élément separator. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-

Exemples

-
<box>
-  <button label="Gauche"/>
-  <spacer flex="1"/>
-  <button label="Droite"/>
-</box>
-
-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
separator, splitter -
-
-
diff --git a/files/fr/archive/mozilla/xul/spinbuttons/index.html b/files/fr/archive/mozilla/xul/spinbuttons/index.html deleted file mode 100644 index e493ea9919..0000000000 --- a/files/fr/archive/mozilla/xul/spinbuttons/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: spinbuttons -slug: Archive/Mozilla/XUL/spinbuttons -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/spinbuttons ---- -

-

-
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -
-


-Les spinbuttons sont constitués de deux flèches, une pour augmenter une valeur et une autre pour la diminuer. Ils ne sont pas utilisés comme des éléments distincts, mais en combinaison avec d'autres éléments pour créer un contrôle dont la valeur peut être augmentée et diminuée. -

Par exemple, on utilise les spinbuttons pour les boîtes texte (textbox) de type numérique, ainsi qu'avec les éléments timepicker et datepicker. -

-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
-
diff --git a/files/fr/archive/mozilla/xul/stack/index.html b/files/fr/archive/mozilla/xul/stack/index.html deleted file mode 100644 index ac42647df3..0000000000 --- a/files/fr/archive/mozilla/xul/stack/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: stack -slug: Archive/Mozilla/XUL/stack -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/stack ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément qui affiche ses enfants en pile les uns au dessus des autres. Le premier élément est placé en bas et chacun des enfants successifs est placé au dessus du précédent. Tous les éléments sont affichés en une fois. Des éléments enfants peuvent également être placés à des positions absolues dans la pile. -

Les attributs left et top sur un enfant de l'élément stack spécifient la position de cet élément.

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-

Exemples

-

(exemple nécessaire) -

-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-

deck -

diff --git a/files/fr/archive/mozilla/xul/tabpanels/index.html b/files/fr/archive/mozilla/xul/tabpanels/index.html deleted file mode 100644 index 9c55a5f6dc..0000000000 --- a/files/fr/archive/mozilla/xul/tabpanels/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: tabpanels -slug: Archive/Mozilla/XUL/tabpanels -translation_of: Archive/Mozilla/XUL/tabpanels ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -
- -

Conteneur pour maintenir l'ensemble des pages dans tabbox. tabpanels doit être placé dans tabbox bien qu'il n'a pas besoin d'être un enfant direct. Les enfants de tabpanels deviennent les panneaux de tabbox. Dans la plupart des cas vous pouvez utilisez vbox, mais ils peuvent être des éléments quelconques. En cliquant sur le premier onglet, le premier panneau sera affiché. En cliquant sur le deuxième onglet, le deuxième panneau sera affiché et ainsi de suite. Il devrait y avoir le même nombre de panneaux que d'onglets. Les panneaux ne doivent jamais être cachés; le masquage d'un onglet suffit pour rendre son panneau inaccessible.

- -

Plus d'informations sont disponibles dans le tutoriel XUL .

- -
-
Attributs
-
selectedIndex
-
- -
-
Propriétés
-
selectedIndex, selectedPanel
-
- -

Exemples

- -

(Exemple nécessaire)

- -

Attributs

- -
- -
- - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

-
accessible -
Type : nsIAccessible -
Renvoie l'objet d'accessibilité pour l'élément. -
-


-

- -
-
selectedIndex -
Type : entier -
Renvoie l'indice de l'élément actuellement sélectionné. Un élément peut être sélectionné en assignant son indice à cette propriété. En lui assignant -1, tous les éléments seront désélectionnés. -
- -
- -

Méthodes

- -

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- - - -
-
Elements
-
tabbox, tabs, tab, tabpanel.
-
diff --git a/files/fr/archive/mozilla/xul/textbox/index.html b/files/fr/archive/mozilla/xul/textbox/index.html deleted file mode 100644 index 7511b915f2..0000000000 --- a/files/fr/archive/mozilla/xul/textbox/index.html +++ /dev/null @@ -1,348 +0,0 @@ ---- -title: textbox -slug: Archive/Mozilla/XUL/textbox -tags: - - Méthodes_XUL - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/textbox ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un champ dans lequel l'utilisateur peut entrer du texte. Il est similaire à l'élément HTML input. Par défaut, une seule ligne de texte est affichée. L'attribut multiline peut être spécifié pour afficher un champ multiligne. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
cols, decimalplaces, disabled, empty, emptytext, hidespinbuttons, increment, label, max, maxlength, min, multiline, newlines, onchange, oninput, preference, readonly, rows, size, spellcheck, tabindex, timeout, type, value, wrap, wraparound -
-
Propriétés -
accessibleType, clickSelectsAll, decimalPlaces, decimalSymbol, defaultValue, disabled, editor, emptyText, increment, inputField, label, max, maxLength, min, readOnly, selectionEnd, selectionStart, size, spinButtons, tabIndex, textLength, timeout, type, value, valueNumber, wrapAround -
-
Méthodes -
decrease, increase, reset, select, setSelectionRange -
-
Classes de style -
plain -
-

Exemples

-
Image:XUL_ref_textbox.png
-
<vbox>
-<label control="your-name" value="Enter your name:"/>
-<textbox id="your-name" value="John"/>
-</vbox>
-
-

Attributs

-

-

- -
-
- -
-
- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
-
- -
-
- -
-
- increment
-
- Type : - - entier -
-
- La quantité dont l'attribut value (pour les boîtes numériques et les échelles) or curpos<magic name="\"PAGENAME\"/"> (pour les barres de défilement) </magic> change lorsque l'on clique sur les flèches. La valeur par défaut est 1.
-
-
-
- -
-
- -
-
- max
-
- Type : - - entier -
-
- La valeur maximum que peut prendre l'élément scale ou number box. La valeur par défaut est 100 pour les éléments scale et Infinity pour les boîtes numériques
-
-
-
- -
-
- -
-
- min
-
- Type : - - entier -
-
- La valeur minimum que peut prendre l'élément. La valeur par défaut est 0.
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
preference -
Type : id d'élément -
Connecte l'élément à une préférence (élément preference) correspondante. Cet attribut n'a d'effet qu'utilisé au sein d'un prefwindow. La valeur de la préférence sera mise à jour pour correspondre à la propriété value de l'élément. -
- - -
-
- -
readonly -
Type : booléen -
Si défini à true, l'utilisateur ne peut pas modifier la valeur de l'élément. Cependant, celle-ci peut toujours être modifiée par un script. -
- - -
-
- -
rows -
Type : entier -
Le nombre de lignes à afficher dans l'élément. Si l'élément contient plus que ce nombre de lignes, une barre de défilement apparaitra afin que l'utilisateur puisse consulter les autres lignes. Pour obtenir le nombre réel de lignes dans l'élément, utilisez la méthode getRowCount. -
- - -
-
- -
-
- -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
-
- -
-
- -
-
- -
-
- -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
-
-
defaultValue -
Type : chaîne de caractères -
Définit et obtient la valeur par défaut d'une boîte de texte. -
-


-

- -
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
-
-
- increment
-
- Type : entier
-
- Obtient et définit la valeur de l'attribut increment.
-
-
-
-
-
max -
Type : entier -
Obtient et définit la valeur de l'attribut max. -
-


-

- -
-
-
-
min -
Type : entier -
Obtient et définit la valeur de l'attribut min. -
-


-

- -
-
-
-
- readonly
-
- Type : booléen
-
- Si définie à true, l'utilisateur ne peut pas modifier la valeur de l'élément.
-
-
- Cette propriété toute en minuscules n'est utilisée qu'avec l'élément preference et sera peut-être renommée en readOnly dans des versions ultérieures. D'autres éléments utilisent la propriété readOnly. L'attribut correspondant est cependant readonly en minuscules.
-
-
-
-
-
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
-
-
type -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut type. -
- -
-
-
-
- -

Méthodes

-
-
- decrease()
-
- Type de retour : - - aucune valeur de retour -
-
- Diminue la valeur de<magic name="\"PAGENAME\"/"> la boîte numérique l'échelle, l'échelle ou la boîte numérique</magic> de la valeur de l'incrément.
-
-
-
- increase()
-
- Type de retour : - - aucune valeur de retour -
-
- Augmente la valeur de <magic name="\"PAGENAME\"/">la boîte numérique, XUL:scale = l'échelle, l'échelle ou la boîte numérique</magic> de la valeur de l'incrément.
-
-

 

- - -
reset() -
Type de retour : aucune valeur renvoyée -
Réinitialise la préférence à sa valeur par défaut. -
Pour un élément textbox, la liste de transactions d'annulation est également vidée (Gecko 1.9). -
-


-

-
select() -
Type retourné : aucune valeur retournée -
Sélectionne l'intégralité du texte d'une boîte texte. -
-


-

-

« Accueil de la référence XUL -

-
setSelectionRange( début, fin ) -
Type retourné : aucune valeur retournée -
Cette méthode sélectionne une portion de texte dans une zone de texte (textbox ou textarea) où l'argument début est le premier caractère de la sélection et l'argument fin le dernier caractère de la sélection.
Renseigner les deux arguments avec la même valeur équivaut à déplacer le curseur d'écriture sans rien sélectionner. -
-


-Interwiki Language Links -

- - -

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Classes de style

-

Les classes suivantes peuvent être utilisées pour styler l'élément. Ces classes devraient être utilisées au lieu de changer le style de l'élément directement, car elles s'accorderont plus naturellement avec le thème sélectionné par l'utilisateur. -

-
plain
-
This class causes the element to be displayed with no border or margin.
-
- -

Sujets liés

-
Interfaces -
nsIAccessibleProvider, nsIDOMXULTextboxElement -
-
-
-
diff --git a/files/fr/archive/mozilla/xul/timepicker/index.html b/files/fr/archive/mozilla/xul/timepicker/index.html deleted file mode 100644 index 7dda702b6b..0000000000 --- a/files/fr/archive/mozilla/xul/timepicker/index.html +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: timepicker -slug: Archive/Mozilla/XUL/timepicker -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/timepicker ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

L'élément timepicker est utilisé pour permettre à l'utilisateur d'entrer une heure. Il contient trois champs pour entrer les heures, les minutes et les secondes. Des boutons fléchés à côté de ces champs permettent d'ajuster les valeurs à la souris. Une quatrième boîte de texte apparaît pour les horloges à 12 heures, permettant de sélectionner AM ou PM. -

Pour spécifier la valeur initiale, utilisez l'attribut value sous une forme HH:MM:SS ou HH:MM. La valeur peut être obtenue et modifiée à l'aide des propriétés value ou dateValue. La première spécifie l'heure sous la forme d'une chaîne de la forme HH:MM:SS tandis que la seconde le fait sous la forme d'un objet Date. En outre, les propriétés hour, minute et second peuvent être utilisées pour obtenir ou modifier chaque composante individuellement. -


-

-
Attributs -
disabled, hideseconds, increment, readonly, tabindex, value -
-
Propriétés -
amIndicator, dateValue, disabled, hideSeconds, hour, hourLeadingZero, increment, is24HourClock, isPM, minute, minuteLeadingZero, pmIndicator, readOnly, second, secondLeadingZero, tabIndex, value -
-

Exemples

-
<timepicker value="12:05"/>
-
-

Image:Controlguide-timepicker.png -

-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- hideseconds
-
- Type : booléen
-
- Indique si le champ des secondes doit être masqué.
-
-
-
- -
readonly -
Type : booléen -
Si défini à true, l'utilisateur ne peut pas modifier la valeur de l'élément. Cependant, celle-ci peut toujours être modifiée par un script. -
- - -
-
- -
-
- increment
-
- Type : entier
-
- Indique le nombre de minutes à passer chaque fois que les flèches sont actionnées. Cet attribut est à utiliser en combinaison avec une définition de hideseconds à true.
-
-
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
-
- -
-
- value
-
- Type : chaîne
-
- La valeur initiale du sélecteur de date au format HH:MM:SS ou HH:MM.
-
-
- -

Propriétés

-

-

-
amIndicator -
Type : chaîne -
La valeur chaîne affichée pour les heures entre minuit et midi, par défaut « AM ». Cette valeur est déterminée selon la locale de l'utilisateur. -
-


-

- -
-
-
-
- dateValue
-
- Type : Date
-
- La date actuellement entrée ou sélectionnée dans le sélecteur de date sous la forme d'un objet Date.
-
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
- hideSeconds
-
- Type : booléen
-
- Indique si le champ des secondes doit être masqué.
-
-
-
-
- hour
-
- Type : entier
-
- La valeur de l'heure actuellement sélectionnée entre 0 et 23. Modifiez cette propriété pour changer l'heure sélectionnée.
-
-
-
-
- hourLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro initial doit être affiché avant l'heure lorsque celle-ci est inférieure à 10.
-
-
-
-
- increment
-
- Type : entier
-
- Obtient et définit la valeur de l'attribut increment.
-
-
-
-
- is24HourClock
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si l'heure est affichée à l'aide d'une horloge à 24 ou 12 heures. Avec une horloge à 12 heures, un champ supplémentaire permet à l'utilisateur de choisir entre AM et PM.
-
-
-
-
- isPM
-
- Type : booléen
-
- Si cette propriété est à false, l'heure est entre 0 et 11. Si elle est à true, l'heure est supérieure ou égale à 12.
-
-
-
-
- minute
-
- Type : entier
-
- Les minutes de l'heure actuellement sélectionnée entre 0 et 59. Modifiez cette propriété pour changer la minute sélectionnée.
-
-
-
-
- minuteLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro initial doit être affiché avant la valeur des minutes lorsque celle-ci est inférieure à 10.
-
-
-
-
- pmIndicator
-
- Type : chaîne
-
- La valeur chaîne affichée pour les heures entre midi et minuit, par défaut « PM ». Cette valeur est déterminée selon la locale de l'utilisateur.
-
-
-
-
- readonly
-
- Type : booléen
-
- Si définie à true, l'utilisateur ne peut pas modifier la valeur de l'élément.
-
-
- Cette propriété toute en minuscules n'est utilisée qu'avec l'élément preference et sera peut-être renommée en readOnly dans des versions ultérieures. D'autres éléments utilisent la propriété readOnly. L'attribut correspondant est cependant readonly en minuscules.
-
-
-
-
-
- second
-
- Type : entier
-
- La valeur des secondes de l'heure actuellement sélectionnée, entre 0 et 59. Modifiez cette propriété pour changer la seconde sélectionnée.
-
-
-
-
- secondLeadingZero
-
- Type : booléen
-
- Une valeur en lecture seule indiquant si un zéro initial doit être affiché avant la valeur des secondes si celle-ci est inférieure à 10.
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
-
- value
-
- Type : chaîne
-
- L'heure actuellement entrée sous la forme HH:MM:SS. Modifiez cette propriété pour changer cette heure.
-
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Interfaces -
nsIDOMXULControlElement -
-
-
diff --git "a/files/fr/archive/mozilla/xul/toolbars/cr\303\251ation_de_boutons_de_barre_d'outils/index.html" "b/files/fr/archive/mozilla/xul/toolbars/cr\303\251ation_de_boutons_de_barre_d'outils/index.html" deleted file mode 100644 index 0b38c79357..0000000000 --- "a/files/fr/archive/mozilla/xul/toolbars/cr\303\251ation_de_boutons_de_barre_d'outils/index.html" +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Création de boutons de barre d'outils -slug: Archive/Mozilla/XUL/Toolbars/Création_de_boutons_de_barre_d'outils -tags: - - Extensions -translation_of: Archive/Mozilla/XUL/Toolbars/Creating_toolbar_buttons ---- -

 

-

Cet article explique comment ajouter un bouton à la barre d'outils d'une application (comme Firefox, Thunderbird, Nvu, etc.) en utilisant la technique des overlays. Cet article s'adresse aux développeurs d'extensions connaissant les bases de XUL et CSS.

-

Le lecteur est supposé être familiarisé avec les bases de la création d'extensions pour Firefox et avoir fait fonctionner sa première extension. Un tutoriel vous guidant à travers le processus depuis le début est également disponible.

-

 

-

Création d'un overlay

-

Avant tout, vous devez créer un overlay pour le document qui contient la barre d'outils que vous souhaitez améliorer. Le but de ce tutoriel n'est pas d'expliquer les overlays — vous pouvez trouver de précieuses informations à ce sujet dans le Tutoriel XUL.

-

Pour créer un overlay sur un document, vous devez connaître son URI. Vous trouverez en bas de cette page la liste des documents où les overlays sont créés le plus fréquemment.

-
- Note : certains placent un overlay sur - - chrome://messenger/content/mailWindowOverlay.xul - . Cela devrait faire apparaitre le bouton sur toutes les fenêtres auxquelles mailWindowOverlay.xul s'applique (c'est-à-dire la fenêtre principale et la fenêtre de messages). Cela doit être vérifié.
-

Ajout d'un bouton à la barre d'outils

-

Les applications toolkit ont une barre d'outils personnalisable. La méthode la plus pratique dans une extension est donc d'ajouter les boutons de la barre d'outils dans la palette plutôt que de les ajouter directement dans la barre d'outils. Cette dernière option est possible mais peu recommandée et plus difficile à mettre en œuvre.

-

L'ajout d'un bouton à la palette de la barre d'outils est très simple. Il suffit d'ajouter ce code à l'overlay :

-
-<toolbarpalette id="BrowserToolbarPalette">
-  <toolbarbutton id="myextension-button" class="toolbarbutton-1"
-    label="&toolbarbutton.label;" tooltiptext="&toolbarbutton.tooltip;"
-    oncommand="MyExtension.onToolbarButtonCommand(event);"/>
-</toolbarpalette>
-
-

Notes :

- -
onclick: function(event) {
-  switch(event.button) {
-    case 0:
-      // Clic gauche
-      break;
-    case 1:
-      // Clic milieu
-      break;
-    case 2:
-      // Clic droit
-      break;
-  }
-}
-
-

Pour ajouter plus de boutons, il suffit de mettre d'autres éléments <toolbarbutton> dans l'élément <toolbarpalette>. Placez les éléments autres que des boutons de barre d'outils dans un élément <toolbaritem>.

-

Application d'un style sur le bouton

-

Le plus souvent, les boutons ont des icônes. Pour attacher une image à un bouton, on utilise une des fonctionnalités standard de Mozilla pour le personnaliser. Si vous n'êtes pas familier avec celle-ci, lisez la section skinning de l'excellent Toolbar Tutorial de Jonah Bishop (en anglais). Bien que l'article décrive la création d'une barre d'outils complètement personnalisée plutôt que d'un simple bouton, il contient une très bonne explication des techniques que nous allons employer.

-

Taille des icônes

-

Les boutons pour la barre d'outils peuvent avoir deux tailles différentes — grande et petite. Ceci implique que vous allez devoir fournir de icônes différentes pour chaque bouton de votre barre d'outils. Vous trouverez ci-dessous les dimensions des icônes dans diverses applications (n'hésitez pas à en ajouter d'autres) :

-

<tr> <td>Firefox 1.0 (Winstripe)</td> <td>24x24</td> <td>16x16</td> </tr> <tr> <td>Thunderbird 1.0 (Qute)</td> <td>24x24</td> <td>16x16</td> </tr> </table>

-

Feuille de style

-

Pour paramétrer l'image de votre bouton de barre d'outils, utilisez les règles CSS suivantes :

-
/*  skin/toolbar-button.css  */
-
-#myextension-button {
-  list-style-image: url("chrome://myextension/skin/btn_large.png");
-}
-
-toolbar[iconsize="small"] #myextension-button {
-  list-style-image: url("chrome://myextension/skin/btn_small.png");
-}
-
-

Appliquer la feuille de style

-

Souvenez-vous d'associer la feuille de style que vous avez créée à la fois à l'overlay et à la fenêtre de personnalisation de la barre d'outils.

-
<?xml-stylesheet href="chrome://myextension/skin/toolbar-button.css" type="text/css"?>
-
-

Pour l'associer à la fenêtre de personnalisation (chrome://global/content/customizeToolbar.xul), vous pouvez utiliser <tt>skin/contents.rdf</tt>, comme ceci :

-
<?xml version="1.0"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
-
-  <Seq about="urn:mozilla:skin:root">
-    <li resource="urn:mozilla:skin:classic/1.0"/>
-  </Seq>
-
-  <Description about="urn:mozilla:skin:classic/1.0">
-    <chrome:packages>
-      <Seq about="urn:mozilla:skin:classic/1.0:packages">
-        <li resource="urn:mozilla:skin:classic/1.0:myextension"/>
-      </Seq>
-    </chrome:packages>
-  </Description>
-
-  <Seq about="urn:mozilla:stylesheets">
-    <li resource="chrome://global/content/customizeToolbar.xul"/>
-  </Seq>
-
-  <Seq about="chrome://global/content/customizeToolbar.xul">
-    <li>chrome://myextension/skin/toolbar-button.css</li>
-  </Seq>
-</RDF>
-
-

Les extensions pour Firefox et Thunderbird 1.5 doivent plutôt utiliser quelque chose de semblable à ceci dans le chrome.manifest :

-
skin	myextension	classic/1.0	chrome/skin/
-style	chrome://global/content/customizeToolbar.xul	chrome://myextension/skin/toolbar-button.css
-
-

Erreurs fréquentes

-

Voici une liste des erreurs fréquemment commises par les auteurs d'extensions, avec leurs symptômes et leurs solutions.

-

Problème : un assemblage de tous les boutons standards est dessiné à la place de votre propre icône.

-

Cause : feuille de style mal formée ou non appliquée.

-

Solution : vérifiez votre feuille de style, vérifiez si votre content.rdf (ou chrome.manifest) est correct, assurez-vous que vous n'avez pas oublié d'appliquer la feuille de style à customizeToolbar.xul.

-

Liste des fenêtres où les overlays de la barre d'outils sont fréquents

- - - - - - -
Application (nom du thème)</th> -
-   <td class="header">Taille de la grande icône</th>
-   <td class="header">Taille de la petite icône</th>
-
-
-

URL Applications et fenêtres modifiées Id de la palette chrome://browser/content/browser.xulFirefox - Fenêtre principaleBrowserToolbarPalette chrome://messenger/content/messenger.xulThunderbird - Fenêtre principaleMailToolbarPalette chrome://messenger/content/ messengercompose/messengercompose.xulThunderbird - Fenêtre de rédaction MsgComposeToolbarPalette chrome://messenger/content/addressbo...ddressbook.xulThunderbird - Carnet d'adressesAddressBookToolbarPalette chrome://editor/content/editor.xulNvu - Fenêtre principaleNvuToolbarPalette chrome://calendar/content/calendar.xulSunbird - Fenêtre principalecalendarToolbarPalette

-

Plus d'informations

- diff --git a/files/fr/archive/mozilla/xul/toolbars/index.html b/files/fr/archive/mozilla/xul/toolbars/index.html deleted file mode 100644 index 7e4f743d2a..0000000000 --- a/files/fr/archive/mozilla/xul/toolbars/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Toolbars -slug: Archive/Mozilla/XUL/Toolbars -tags: - - TopicStub -translation_of: Archive/Mozilla/XUL/Toolbars ---- -

Les barres d'outils, implémentées à l'aide de l'élément XUL toolbar, sont des conteneurs pour les boutons de la barre d'outils et d'autres objets d'interface utilisateur. Les articles suivants fournissent des détails sur l'implémentation et l'utilisation des barres d'outils.

- - - - - - - - -
-

Documentation

- -
-
XUL School: Ajout de barres d'outils et de boutons de barre d'outils
-
Un didacticiel utile pour créer des barres d'outils et des boutons de barre d'outils.
-
Événements de personnalisation de la barre d'outils
-
Un aperçu des événements envoyés lors de la personnalisation de la barre d'outils; vous pouvez les utiliser pour être informé des modifications apportées aux barres d'outils.
-
Création de boutons de barre d'outils
-
Comment utiliser les superpositions pour ajouter des boutons de barre d'outils aux applications Mozilla.
-
Bouton de la barre d'outils personnalisée
-
Un autre exemple de création d'un bouton de barre d'outils, avec un exemple d'extension que vous pouvez télécharger et essayer.
-
Extraits de code: barre d'outils
-
Extraits de code utiles lorsque vous utilisez des barres d'outils.
-
-
- -

Afficher toutes les pages marquées avec "Barres d'outils"...

-
-

Communauté

- - - -

Outils

- - - -

... plus d'outils ...

- - - - -
diff --git a/files/fr/archive/mozilla/xul/toolbox/index.html b/files/fr/archive/mozilla/xul/toolbox/index.html deleted file mode 100644 index 459d64989d..0000000000 --- a/files/fr/archive/mozilla/xul/toolbox/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: toolbox -slug: Archive/Mozilla/XUL/toolbox -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/toolbox ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un conteneur pour les éléments toolbar. C'est un type de boîte dont l'orientation par défaut est verticale. Si un élément toolbar est placé dans un toolbox, une poignée (élément grippy) est affichée sur son bord gauche ou supérieur. L'utilisateur peut cliquer sur le grippy pour réduire l'élément toolbar. Si plusieurs barres d'outils sont placées dans le même toolbox, elles seront toutes réduites dans la même ligne. Le navigateur Firefox n'a pas ces contrôles grippy, les barres d'outils ne peuvent donc pas y être réduites. -

Vous trouverez plus d'informations dans le Tutoriel XUL.

-
Propriétés -
accessible, customToolbarCount, palette, toolbarset -
-
Méthodes -
appendCustomToolbar, collapseToolbar, expandToolbar -
-

Exemples

-

(exemple nécessaire) -

-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

-

-

-
accessible -
Type : nsIAccessible -
Renvoie l'objet d'accessibilité pour l'élément. -
-


-

- -
-
-
-
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
- - - - -

Sujets liés

-
Éléments -
toolbar, toolbarbutton, toolbargrippy, toolbaritem, toolbarpalette, toolbarseparator, toolbarset, toolbarspacer, toolbarspring -
-
Interfaces -
nsIAccessibleProvider -
-
-
diff --git a/files/fr/archive/mozilla/xul/tooltip/index.html b/files/fr/archive/mozilla/xul/tooltip/index.html deleted file mode 100644 index abc9a0ffbd..0000000000 --- a/files/fr/archive/mozilla/xul/tooltip/index.html +++ /dev/null @@ -1,225 +0,0 @@ ---- -title: tooltip -slug: Archive/Mozilla/XUL/tooltip -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/tooltip ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Cet élément est utilisé pour les popups de bulles d'information. Pour les tooltip texte, il n'est pas nécessaire d'utiliser cet élément ; vous pouvez dans ce cas simplement ajouter un attribut tooltiptext à l'élément.

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
crop, default, label, noautohide, onpopuphidden, onpopuphiding, onpopupshowing, onpopupshown, position -
-
Propriétés -
accessibleType, label, popupBoxObject, position, state -
-
Méthodes -
hidePopup, moveTo, openPopup, openPopupAtScreen, showPopup, sizeTo -
-

Exemples

-
Image:XUL_ref_tooltip.png
-
<tooltip id="moretip" orient="vertical" style="background-color: #33DD00;">
-  <label value="Cliquez ici pour obtenir plus d'infomations"/>
-  <label value="Vraiment !" style="color: red;"/>
-</tooltip>
-
-<vbox>
-  <button label="Simple" tooltiptext="Un popup simple"/>
-  <button label="Plus" tooltip="moretip"/>
-</vbox>
-
-

Attributs

-

-

- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
-
- -
onpopuphidden -
Type : code de script -
Cet évènement est envoyé à un popup après qu'il a été caché. http://www.langue-fr.net/index/A/apres-que.htm -
- - -
-
- -
onpopuphiding -
Type : code de script -
Cet évènement est envoyé à un popup lorsqu'il est sur le point d'être masqué. -
- - -
-
- -
onpopupshowing -
Type : code de script -
Cet évènement est envoyé à un popup juste avant son ouverture. On l'utilise généralement pour définir dynamiquement le contenu lorsque l'utilisateur demande son affichage. Si ce gestionnaire d'évènement renvoie false, le popup ne s'affichera pas. -
- - -
-
- -
onpopupshown -
Type : code de script -
Cet évènement est envoyé à un popup après son ouverture, de la même manière qu'un évènement onload est envoyé à une fenêtre à son ouverture. -
- - -
-
- -
position -
Type : une des valeurs ci-dessous -
L'attribut position détermine où le popup apparaît par rapport à l'élément sur lequel l'utilisateur a cliqué pour l'invoquer. C'est ce qui permet de placer le popup sur le bord d'un bouton. -
- - - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
label -
Type : chaîne de caractères -
Obtient et définit la valeur de l'attribut label. -
- -
-
-
popupBoxObject -
Type : nsIPopupBoxObject -
Cette propriété en lecture seule conserve le nsIPopupBoxObject qui implémente le popup. Il n'est normalement pas nécessaire d'utiliser cette propriété étant donné que toutes ses fonctions sont disponibles via le popup lui-même. -
- -
-
-
position -
Type : chaîne -
Obtient et définit la valeur de l'attribut position. -
- -
-
-
state -
Type : chaîne -
Cette propriété en lecture seule indique si le popup est ouvert ou non. Quatre valeurs sont possibles : -
- - -
- -

Méthodes

- - - - - - -
-

Héritées de XUL element
- blur, click, doCommand, focus, getElementsByAttribute getElementsByAttributeNS

Héritées de DOM element
- addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -
-
hidePopup()
-
Type de retour : pas de valeur de retour -
Ferme le popup immédiatement. -
-
moveTo( x, y ) -
Type de retour : pas de valeur de retour -
Déplace le popup vers un nouvel emplacement. -
-
openPopup( anchor , position , x , y , isContextMenu, attributesOverride ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup relativement à un nœud spécifié à un emplacement spécifique. -

Le popup peut soit être ancré à un autre nœud ou ouvert librement. Pour ancrer un popup à un nœud, fournissez un nœud d'accrochage dans le paramètre anchor et définissez la position par une chaîne indiquant la manière dont le popup doit être ancré. -

Les valeurs possibles pour le paramètre position sont : before_start, before_end, after_start, after_end, start_before, start_after, end_before, end_after, overlap, after_pointer -

Le nœud d'accrochage ne doit pas nécessairement être dans le même document que le popup. -

Si le paramètre attributesOverride vaut true, l'attribut position sur le nœud popup a priorité sur la valeur du paramètre position. Si attributesOverride vaut false, l'attribut n'est utilisé que si le paramètre position est vide. -

Pour un popup ancré, les paramètres x et y peuvent être utilisés pour décaler le popup de sa position d'ancrage de quelques pixels (mesurés en pixels CSS). -

Les popups non ancrés peuvent être créés en fournissant null comme paramètre anchor. Un popup non ancré apparait à la position spécifiée par x et y relativement à la zone visible (viewport) du document contenant le nœud popup. Dans ce cas, les paramètres position et attributesOverride sont ignorés. -

-
openPopupAtScreen( x, y, isContextMenu ) -
Type de retour : pas de valeur de retour -
-

Ouvre le popup à une position spécifique sur l'écran spécifiée par x et y. Cette position peut être ajustée s'il s'avère qu'elle provoquerait l'apparition du popup en dehors de l'écran. Les coordonnées x et y sont mesurées en pixels CSS. -

-
showPopup( element, x, y, popupType, anchor, align ) Déprécié dans Mozilla 1.9 -
Type de retour : aucune valeur de retour -
Ouvre un élément popup. Deux moyens de spécifier l'emplacement où s'affichera la fenêtre popup existent, soit en spécifiant une position spécifique de l'écran, soit par rapport à un autre élément de la fenêtre. Si x ou y sont définies par une valeur, le popup apparaîtra aux coordonnées (x,y) de l'écran. Si x et y sont définies à -1, le popup sera positionné par rapport à l'element spécifié dans le premier paramètre. C'est cette dernière méthode qu'il faut utiliser, par exemple, pour afficher un popup sous un bouton. Dans ce cas, les paramètres anchor et align peuvent être utilisés pour contrôler plus avant l'endroit où apparaîtra le popup par rapport à l'élément. Le paramètre anchor correspond à l'attribut popupanchor de l'élément et le paramètre align correspond à l'attribut popupalign. Les paramètres anchor et align sont ignorés si ni x ni y ne valent -1. -
-
Pour qu'un popup apparaisse à une position relative à un autre élément tout en étant décalé de quelques pixels, déterminez la position réelle de l'élément à l'aide de ses propriétés boxObject.screenX et boxObject.screenY, et utilisez celles-ci comme paramètres x et y en y ajoutant les décalages souhaités. -
-
Le paramètre popupType doit être une des chaînes popup, context ou tooltip. Chaque type de popup est destiné à être affiché temporairement ; ils ne sont pas censés être affichés de façon permanente. On ne peut afficher qu'un popup à la fois. -
-
sizeTo( <i>largeur</i>, <i>hauteur</i> ) -
Type de retour : aucune valeur de retour -
Modifie la taille actuelle de la fenêtre popup avec les nouvelles dimensions largeur et hauteur. -
- -

Sujets liés

-

À faire -

-
-
diff --git a/files/fr/archive/mozilla/xul/tree/index.html b/files/fr/archive/mozilla/xul/tree/index.html deleted file mode 100644 index 22056c4d02..0000000000 --- a/files/fr/archive/mozilla/xul/tree/index.html +++ /dev/null @@ -1,313 +0,0 @@ ---- -title: tree -slug: Archive/Mozilla/XUL/tree -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/tree ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Représente un arbre, un conteneur pouvant être utilisé pour un ensemble de lignes d'éléments tabulaires ou hiérarchiques. L'arbre peut contenir un nombre quelconque de lignes et de colonnes. Chaque ligne de l'arbre peut contenir des lignes filles qui seront affichées avec un décalage par rapport à leur parent. Contrairement aux autres éléments, les données à afficher à l'intérieur de l'arbre ne sont pas spécifiées à l'aide de balises, mais sont déterminées par un objet de vue. L'objet de vue implémente l'interface nsITreeView. La vue est interrogée pour les données à afficher dans l'arbre. Les arbres sont utilisées de différentes manières, comme montré dans la table ci-dessous. La deuxième colonne liste les interfaces disponibles via la propriété view de l'arbre. La troisième colonne indique si l'élément treeitem est utilisé. -

Si vous désirez que l'arbre puisse défiler horizontalement, définissez simplement l'attribut width pour chaque colonne de sorte que l'arbre soit plus large que son objet conteneur. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type d'arbreInterfaces de la vueA des nœuds DOM ?Description
Arbre de contenunsITreeView, nsITreeContentViewOuiCet arbre dispose d'éléments treeitem placés au sein de l'élément treechildren. Dans cette situation, une vue de contenu (qui implémente l'interface nsITreeContentView) qui est un type de vue plus spécialisé, utilise les éléments treeitem et leurs descendants pour déterminer les données à afficher dans l'arbre. Toutefois, les éléments treeitem ne sont pas affichés directement ; ils ne sont utilisés que comme données pour la vue de contenu. La vue de contenu mettra cependant automatiquement à jour l'arbre si les éléments treeitem sont modifiés.
Arbre RDFnsITreeView, nsIXULTreeBuilderNonCet arbre est généré depuis une source de données RDF. Il est utilisé lorsqu'un arbre a un attribut datasources, ainsi que la valeur dont-build-content dans son attribut flags. Pour cet arbre, les données viennent directement de la source de données RDF. Aucun élément DOM treeitem n'est créé. Même si le template utilise des éléments treeitem pour définir le contenu, aucun nœud DOM correspondant ne sera créé. C'est le type à utiliser pour les arbres générés par RDF avec beaucoup de lignes.
Arbre de contenu RDFnsITreeView, nsIXULTreeBuilder, nsITreeContentViewOuiCet arbre est généré depuis une source de données RDF. Il est similaire au type précédent, mais est utilisé lorsque l'arbre n'a pas la valeur dont-build-content dans son attribut flags. Des éléments treeitem sont créés dans le DOM, afin de pouvoir y accéder à l'aide de fonctions RDF ou DOM. Ce type convient aux arbres générés par RDF qui n'ont pas beaucoup de lignes.
Vue d'arbre personnaliséensITreeViewNonPour ce type d'arbre, vous implémentez vous-même l'interface nsITreeView. Les données de l'arbre sont obtenues depuis cette vue personnalisée. La vue personnalisée doit être attachée à l'arbre à l'aide de la propriété view.
-

Vous trouverez plus d'informations dans le Tutoriel XUL. Consultez également Changements dans les contrôles d'arbres. -

- -
Recommandations d'accessibilité liées -
  • Fournissez un accès alternatif (par exemple via des menus) aux sélecteurs de colonnes et pour les actions sur les en-têtes comme les tris (ceux-ci ne sont pas accessible au clavier par défaut). -
-
-
Attributs -
disableKeyNavigation, disabled, editable, enableColumnDrag, flags, hidecolumnpicker, onselect, rows, seltype, statedatasource, tabindex -
-
Propriétés -
accessibleType, builderView, columns, contentView, currentIndex, disableKeyNavigation, disabled, editingColumn, editingRow, enableColumnDrag, firstOrdinalColumn, inputField, selType, selstyle, tabIndex, treeBoxObject, view -
-

Exemples

-
<tree flex="1">
-
-  <treecols>
-    <treecol id="sender" label="Expéditeur" flex="1"/>
-    <treecol id="subject" label="Sujet" flex="2"/>
-  </treecols>
-
-  <treechildren>
-    <treeitem>
-      <treerow>
-        <treecell label="pat@example.com"/>
-        <treecell label="Plans top secrets"/>
-      </treerow>
-    </treeitem>
-    <treeitem>
-      <treerow>
-        <treecell label="mel@example.com"/>
-        <treecell label="Allons manger quelque part"/>
-      </treerow>
-    </treeitem>
-  </treechildren>
-
-</tree>
-
-
Image:trees1.png
-

Un arbre avec des éléments imbriqués : -

-
<tree id="myTree" flex="1" hidecolumnpicker="false" seltype="single" class="tree">
-  <treecols id="myTree2-treeCols">
-    <treecol id="myTree2-treeCol0" primary="true" flex="2" label="Colonne A"
-             persist="width" ordinal="1"/>
-    <splitter class="tree-splitter" ordinal="2"/>
-    <treecol id="myTree2-treeCol1" flex="1" label="Colonne B"
-             persist="width" ordinal="3"/>
-  </treecols>
-  <treechildren>
-    <treeitem>
-      <treerow>
-        <treecell label="1"/>
-        <treecell label="a"/>
-      </treerow>
-    </treeitem>
-    <!-- Assurez-vous de mettre container="true" -->
-    <treeitem container="true" open="true">
-      <treerow>
-        <treecell label="2"/>
-        <treecell label="b"/>
-      </treerow>
-      <treechildren>
-        <treeitem>
-          <treerow>
-            <treecell label="2a"/>
-            <treecell label="ba"/>
-          </treerow>
-        </treeitem>
-      </treechildren>
-    </treeitem>
-  </treechildren>
-</tree>
-
-

Attributs

-

-

- -
disabled -
Type : booléen -
Indique si l'élément est ou non désactivé. Si cette valeur est définie à true, l'élément est désactivé. Les éléments désactivés sont habituellement affichés avec leur texte grisé. Si l'élément est désactivé, il ne répond pas aux actions de l'utilisateur, il ne peut pas recevoir le focus, et l'évènement command ne se déclenchera pas.
-


-

-
Image:XUL_ref_attr_disabled.png
-
<!-- La case à cocher active/désactive le bouton -->
-<checkbox label="Enable button"
-    onclick="document.getElementById('buttRemove').disabled = this.checked"/>
-<button id="buttRemove" label="Remove All" disabled="true"/>
-
-
-
- -
-
- -
-
- -
-
- -
flags -
Type : liste de valeurs (voir ci-dessous) séparées par des espaces -
Un ensemble de drapeaux destinés à différentes utilisations. Deux sont définis, et peuvent être la valeur de cet attribut. -
- -


-

- - -
-
- -
-
- -
-
- -
rows -
Type : entier -
Le nombre de lignes à afficher dans l'élément. Si l'élément contient plus que ce nombre de lignes, une barre de défilement apparaitra afin que l'utilisateur puisse consulter les autres lignes. Pour obtenir le nombre réel de lignes dans l'élément, utilisez la méthode getRowCount. -
- - -
-
- -
-
- seltype<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - une des valeurs ci-dessous -
-
- Utilisé pour indiquer si les sélections multiples sont permises.
-
- -

<magic name="\"PAGENAME\"/">Des cellules individuelles peuvent être sélectionnées.</magic><magic name="\"PAGENAME\"/"> Des lignes sont sélectionnées, cependant, l'indicateur de sélection n'est visible que sur le texte de la colonne principale.</magic>

-
-
- -
-
- -
tabindex -
Type : entier -
L'ordre de tabulation de l'élément. L'ordre de tabulation est l'ordre dans lequel le focus se déplace lorsque l'utilisateur appuie sur la touche « tab ». Les éléments dont le tabindex est plus haut se trouvent plus tard dans la séquence de tabulation. -
- - -
- -

Propriétés

-

-

-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
-
-
-
-
-
-
disabled -
Type : booléen -
Obtient et définit la valeur de l'attribut disabled. -
- -
-
-
-
-
-
-
-
-
-
- selType<magic name="\"PAGENAME\"/"></magic>
-
- Type : - - chaîne de caractères -
-
- Obtient et définit la valeur de l'attribut seltype.
-
- -
-
-
-
tabIndex -
Type : entier -
Obtient et définit la valeur de l'attribut tabindex. -
- -
-
-
- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- - - -

Sujets liés

-
Éléments -
treecols, treecol, treechildren, treeitem, treerow, treecell et treeseparator. -
Interfaces -
nsIAccessibleProvider, nsIDOMXULTreeElement, nsIDOMXULMultiSelectControlElement -
-

Exemples de scripts

-

Pour alterner les couleurs de fond pour chaque ligne, utilisez des règles de styles comme les souvantes : pma at daffodil dot uk dot com -

-
treechildren::-moz-tree-row(selected) { background-color: #FFFFAA; }
-treechildren::-moz-tree-row(odd) { background-color: #EEEEEE; }
-treechildren::-moz-tree-row(odd, selected) { background-color: #FFFFAA; }
-treechildren::-moz-tree-cell-text(selected) { color: #000000; }
-treechildren::-moz-tree-cell-text(odd, selected) { color: #000000; }
-
-

Si vous utilisez une vie d'arbre de contenu, utilisez le code suivant pour obtenir la valeur de l'attribut id de chacune des lignes sélectionnées de l'arbre : tcooper_mont at yahoo dot com -

-
var rangeCount = tree.view.selection.getRangeCount();
-for (var i = 0; i < rangeCount; i++)
-{
-   var start = {};
-   var end = {};
-   tree.view.selection.getRangeAt(i, start, end);
-   for (var c = start.value; c <= end.value; c++)    {
-      idList.push(tree.view.getItemAtIndex(c).firstChild.id);
-   }
-}
-
-

Le code qui soit renvoie un tableau des indices de lignes pour lesquelles la valeur est cochée dans une colonne de type checkbox : -jfabre at ismans dot fr -

-
function getCellChecked(tree, columnid)
-{
-  var arr = [];
-  var column = tree.columns.getNamedColumn(columnid);
-  for (var i = 0; i < tree.view.rowCount; i++) {
-    if (tree.view.getCellValue(i, column) == 'true')
-      arr.push(i);
-  }
-  return arr;
-}
-
-

Pour obtenir la valeur textuelle d'une colonne particulière (par exemple la colonne age) de la ligne ayant actuellement le focus dans l'arbre : -

-
var t = document.getElementById('mytree');
-document.title = t.view.getCellText(t.currentIndex, t.columns.getNamedColumn('age'));
-
diff --git a/files/fr/archive/mozilla/xul/treecell/index.html b/files/fr/archive/mozilla/xul/treecell/index.html deleted file mode 100644 index b54c0485bd..0000000000 --- a/files/fr/archive/mozilla/xul/treecell/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: treecell -slug: Archive/Mozilla/XUL/treecell -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/treecell ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Une cellule unique dans un arbre (élément tree). Cet élément doit être placé dans un treerow. Le texte de la cellule peut être défini à l'aide de l'attribut label. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
editable, label, mode, properties, ref, src, value -
-

Attributs

-

-

- -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
-
- -
properties -
Type : liste de noms de propriétés séparés par des espaces -
Définit les propriétés de l'élément, qui peuvent être utilisées pour le styler. Pour plus d'informations, consultez Styler un arbre. -
- - -
-
- -
ref -
Type : URI d'une ressource RDF -
Pour les éléments générés par des templates, cet attribut est utilisé pour indiquer le nœud racine RDF où la génération de contenu commence. Ceci correspondra à la valeur d'un attribut about sur un conteneur RDF. Cet attribut doit être placé en même temps que l'attribut datasources. -
- - -
-
- -
-
- -
value -
Type : chaîne -
Cet attribut chaîne permet d'associer une valeur de données avec un élément. Il n'est destiné à aucune utilisation particulière, mais vous pouvez y accéder avec un script pour votre usage propre.. -
- - -
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
tree treecols, treecol, treechildren, treeitem, treerow et treeseparator. -
-
-
diff --git a/files/fr/archive/mozilla/xul/treechildren/index.html b/files/fr/archive/mozilla/xul/treechildren/index.html deleted file mode 100644 index a0e1d2a21a..0000000000 --- a/files/fr/archive/mozilla/xul/treechildren/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: treechildren -slug: Archive/Mozilla/XUL/treechildren -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/treechildren ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Cet élément est le corps d'un élément tree. Pour les arbres de contenu, celui-ci sera placé dans cet élément. Cet élément est également utilisé pour définir des lignes de contenu dans l'arbre. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
alternatingbackground -
-

Exemples

-

(exemple nécessaire)

-

Attributs

-
- -
- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
tree, treecols, treecol, treeitem, treerow, treecell et treeseparator. -
-
-
diff --git a/files/fr/archive/mozilla/xul/treecol/index.html b/files/fr/archive/mozilla/xul/treecol/index.html deleted file mode 100644 index 4073cfd1ce..0000000000 --- a/files/fr/archive/mozilla/xul/treecol/index.html +++ /dev/null @@ -1,187 +0,0 @@ ---- -title: treecol -slug: Archive/Mozilla/XUL/treecol -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/treecol ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Une colonne dans un élément tree. Cet élément affiche l'en-tête de colonne et conserve la taille et d'autres informations sur la colonne. VOus pouvez également placer des éléments splitter entre les colonnes pour permettre leur redimensionnement. Placez toujours un attribut id sur un élément treecol pour vous assurer que son positionnement sera géré correctement. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
crop, cycler, dragging, editable, fixed, hidden, hideheader, ignoreincolumnpicker, label, primary, sort, sortActive, sortDirection, src, type, width -
-
Propriétés -
accessibleType -
-
Classes de style -
treecol-image -
-

Exemples

-
Image:Xul_tree_col_checked.png
-

Cet exemple montre une case à cocher dans la première colonne, et utilise le style présenté plus bas. -

-
<tree flex="1">
-
-  <treecols>
-    <treecol label="Actif" type="checkbox" editable="true"/>
-    <treecol label="Nom" flex="1" />
-  </treecols>
-
-  <treechildren>
-    <treeitem>
-      <treerow>
-      	<treecell value="true"/>
-        <treecell label="Alice"/>
-      </treerow>
-    </treeitem>
-    <treeitem>
-      <treerow>
-        <treecell value="false"/>
-        <treecell label="Bob"/>
-      </treerow>
-    </treeitem>
-  </treechildren>
-
-</tree>
-
-

Pour rendre la case à cocher visible sur certaines plateformes, les styles suivants doivent être ajoutés à la feuille de style (voir treecol.type). Dans Firefox 2.x et 3.x, tous les systèmes autres que Mac OS X utilisent déjà ces styles par défaut. Si vous visez Firefox sous Mac OS X, assurez-vous d'utiliser ces styles tout en fournissant votre propre image de case à cocher. Notez que chrome://global/skin/checkbox/cbox-check.gif est disponible dans SeaMonkey sous Mac OS X. -

-
treechildren::-moz-tree-checkbox {
-  /* cases à cocher non cochées dans des treecells. Ce style DOIT être avant treechildren::-moz-tree-checkbox(checked), autrement il n'aura aucun effet.  */
-  list-style-image: none;
-}
-
-treechildren::-moz-tree-checkbox(checked){
-  /* style pour les cases cochées. cbox-check.gif n'est pas disponible dans Firefox 1, 2 et 3 sous Mac OS X, vous devrez donc spécifier l'URL d'une image
-     dans votre extension ou ailleurs. */
-  list-style-image: url("chrome://global/skin/checkbox/cbox-check.gif");
-}
-
-

Attributs

-

-

- -
crop -
Type : une des valeurs ci-dessous -
Si le label de l'élément est trop long pour être contenu dans son espace donné, le texte sera tronqué du côté indiqué par l'attribut crop. Une ellipse (…) sera utilisée à la place du texte tronqué. Si la direction de la boîte est inversée, le tronquage l'est également. -
- - - -
-
- -
-
- -
-
- -
-
- -
-
- -
hidden -
Type : booléen -
Si défini à true, l'élément n'est pas affiché. Cet attribut est similaire à la valeur « none » de la propriété CSS display. -
- - -
-
- -
-
- -
-
- -
label -
Type : chaîne de caractères -
Le label qui apparaîtra sur l'élément. S'il n'est pas spécifié, aucun texte n'apparaîtra. -
- - -
-
- -
-
- -
-
- -
-
- -
sortDirection -
Type : une des valeurs ci-dessous -
Cet attribut indique la direction dans laquelle le contenu généré par un template est trié. Utilisez l'attribut sortResource pour spécifier la clé de tri. -
- -


-

- - -
-
- -
-
- -
-
- -
- -

Propriétés

-
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Classes de style

-

La classe suivante peut être utilisée pour styler l'élément. Cette classe doit être utilisée plutôt que de changer le style de l'élément directement, car elle s'adaptera plus naturellement au thème sélectionné par l'utilisateur. -

-
- treecol-image
-
- Use this class to have an image appear on the tree column header. Specify the image using the src attribute.
-
- -

Sujets liés

-
Éléments -
tree, treecols, treechildren, treeitem, treerow, treecell et treeseparator. -
Interfaces -
nsIAccessibleProvider -
-
-
diff --git a/files/fr/archive/mozilla/xul/treecols/index.html b/files/fr/archive/mozilla/xul/treecols/index.html deleted file mode 100644 index 439ef88631..0000000000 --- a/files/fr/archive/mozilla/xul/treecols/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: treecols -slug: Archive/Mozilla/XUL/treecols -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/treecols ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un groupe d'éléments treecol. Il doit y avoir un et un seul élément treecols dans un tree. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
pickertooltiptext
-
Propriétés -
accessibleType -
-

Exemples

-

(exemple nécessaire) -

-

Attributs

-
- -
- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

-
-
accessibleType -
Type : entier -
Une valeur indiquant le type d'objet d'accessibilité pour l'élément. -
-
- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
tree, treecol, treechildren, treeitem, treerow, treecell et treeseparator. -
Interfaces -
nsIAccessibleProvider -
-
-
diff --git a/files/fr/archive/mozilla/xul/treeitem/index.html b/files/fr/archive/mozilla/xul/treeitem/index.html deleted file mode 100644 index d52ffb8260..0000000000 --- a/files/fr/archive/mozilla/xul/treeitem/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: treeitem -slug: Archive/Mozilla/XUL/treeitem -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/treeitem ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un treeitem doit être placé dans un élément treechildren et contenir des éléments treerow. L'utilisateur peut cliquer sur l'élément treeitem pour sélectionner la ligne de l'arbre. L'élément treeitem contient une seule ligne et tout ce qui apparait à l'utilisateur comme les descendants de cette ligne. -

Dans une condition de template, utilisez un treeitem plutôt qu'un élément content lorsque le paramètre dont-build-content est spécifié. Définissez l'attribut uri au nom de variable à lier à un nœud de contenu lors de la correspondance. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
container, empty, label, open, uri -
-

Exemples

-

(exemple nécessaire) -

-

Attributs

-

-

- -
container -
Type : booléen -
Défini à true si l'élément doit agir comme un conteneur pouvant avoir des éléments enfants. Ceci peut être utilisé pour des dossiers. Cet attribut sera défini par le constructeur de template si nécessaire. -
-


-

- - -
-
- -
empty -
Type : booléen -
Défini à true si l'élément est un conteneur qui ne contient aucun enfant. Il sera défini par le constructeur de template si nécessaire. -
- - -
-
- -
-
- -
open -
Type : booléen -
Pour les boutons de type menu, l'attribut open est défini à true lorsque le menu est ouvert. L'attribut open n'est pas présent si le menu est fermé. -
- - -
-
- -
uri -
Type : chaîne de caractères -
Pour du contenu généré par un template, l'attribut doit être placé sur l'élément où la génération de contenu doit commencer. Donc, il doit être placé sur un élément qui est le descendant d'un template. La valeur doit être définie à rdf:*. -
-
Les éléments qui apparaissent à l'intérieur de l'élément portant cet attribut seront répétés pour chaque nœud dans la source de données RDF. Les éléments qui sont à l'extérieur n'apparaîtront qu'une seule fois. -
-


-

- - -
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
tree, treecols, treecol, treechildren, treerow, treecell et treeseparator. -
-
-
diff --git a/files/fr/archive/mozilla/xul/treerow/index.html b/files/fr/archive/mozilla/xul/treerow/index.html deleted file mode 100644 index d14176ddcc..0000000000 --- a/files/fr/archive/mozilla/xul/treerow/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: treerow -slug: Archive/Mozilla/XUL/treerow -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/treerow ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Une ligne unique dans un arbre (élément tree). Cet élément doit être placé dans un élément treeitem. Les enfants de treerow doivent être des éléments treecell. Si des lignes filles sont nécessaires, il convient de les placer dans un élément treechildren au sein de l'élément treeitem parent. -

Vous trouverez plus d'informations dans le Tutoriel XUL. -

-
Attributs -
properties -
-

Exemples

-

(exemple nécessaire) -

-

Attributs

-
- -
properties -
Type : liste de noms de propriétés séparés par des espaces -
Définit les propriétés de l'élément, qui peuvent être utilisées pour le styler. Pour plus d'informations, consultez Styler un arbre. -
- - -
- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
tree, treecols, treecol, treechildren, treeitem, treecell et treeseparator. -
-
-
diff --git a/files/fr/archive/mozilla/xul/treeseparator/index.html b/files/fr/archive/mozilla/xul/treeseparator/index.html deleted file mode 100644 index 7e6af95185..0000000000 --- a/files/fr/archive/mozilla/xul/treeseparator/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: treeseparator -slug: Archive/Mozilla/XUL/treeseparator -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/treeseparator ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Utilisé pour placer une nouvelle ligne séparatrice dans un tree. -

-
Attributs -
properties -
-

Exemples

-

(exemple nécessaire) -

-

Attributs

-
- -
properties -
Type : liste de noms de propriétés séparés par des espaces -
Définit les propriétés de l'élément, qui peuvent être utilisées pour le styler. Pour plus d'informations, consultez Styler un arbre. -
- - -
- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
tree, treecols, treecol, treechildren, treeitem, treerow et treecell. -
-
-
diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_d'\303\251l\303\251ments_html/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_d'\303\251l\303\251ments_html/index.html" deleted file mode 100644 index 6dfeea624f..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_d'\303\251l\303\251ments_html/index.html" +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Ajout d'éléments HTML -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajout_d'éléments_HTML -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_HTML_Elements ---- -
-

« PrécédentSuivant »

-
- -

Maintenant que nous avons ajouté quelques boutons, ajoutons d'autres éléments.

- -

Ajout d'éléments HTML dans une fenêtre

- -

En plus de tous les éléments XUL déjà disponibles, vous pouvez également ajouter des éléments HTML directement dans un fichier XUL. En réalité, vous pouvez ajouter n'importe quel élément HTML dans des fichiers XUL, ce qui signifie que des applets Java ou des tableaux peuvent être placés directement dans une fenêtre. Vous devriez proscrire l'emploi de ces éléments HTML dans vos fichiers XUL dès que vous le pouvez (il existe plusieurs raisons à cela, et la principale concerne la mise en page qui sera décrite plus tard). Cette section va néanmoins décrire comment les employer. Souvenez-vous que le langage XML est sensible à la casse, et que de ce fait vous devrez taper les balises et les attributs en minuscules.

- -

Espace de nommage XHTML

- -

Afin de pouvoir utiliser des éléments HTML dans un fichier XUL, vous devez déclarer l'espace de nommage XHTML correspondant (NdT : namespace). De cette façon, Mozilla peut faire la distinction entre les balises de HTML de celles de XUL. L'attribut ci-dessous doit être ajouté à la balise window du fichier XUL, ou à l'élément HTML le plus extérieur.

- -
xmlns:html="http://www.w3.org/1999/xhtml"
-
- -

Il s'agit d'une déclaration HTML comme celle que nous avons utilisée pour déclarer XUL. Pour fonctionner, elle doit être saisie exactement comme indiquée ci-dessus.

- -
Notez qu'en réalité, Mozilla ne télécharge pas cette URL, mais il la reconnaît comme étant une déclaration HTML.
- -
-

Voici un exemple qui peut être ajouté à notre fenêtre de Recherche de fichiers :

- -
<?xml version="1.0" encoding="ISO-8859-1"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<window
-   id="findfile-window"
-   title="Recherche de fichiers"
-   orient="horizontal"
-   xmlns:html="http://www.w3.org/1999/xhtml"
-   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- -

Ensuite, vous pouvez employer des balises HTML comme vous le feriez normalement, en gardant à l'esprit ceci :

- - - -

Utilisation d'éléments HTML

- -

Vous pouvez utiliser n'importe quelle balise HTML bien que certaines comme head et body ne soient d'aucune utilité. Des exemples d'emploi des éléments HTML sont montrés ci-dessous :

- -
<html:img src="banner.jpg"/>
-
-<html:input type="checkbox" value="true"/>
-
-<html:table>
-  <html:tr>
-    <html:td>
-       Un tableau simple
-    </html:td>
-  </html:tr>
-</html:table>
-
- -

Ces exemples vont créer une image à partir du fichier 'banner.jpg', une case à cocher et un tableau avec une unique cellule. Vous devriez toujours employer des éléments XUL s'ils sont disponibles et vous ne devriez pas employer des tableaux pour la mise en page sous XUL (des éléments XUL permettent de le faire).

- -
Notez que le préfixe html: a été ajouté au début de chaque balise, pour que Mozilla sache qu'il s'agit d'une balise HTML et non d'une balise XUL. Si vous oubliez un préfixe html:, le navigateur croira qu'il s'agit d'un élément XUL et il n'affichera probablement rien car les balises img, input, table, etc. ne sont pas des balises XUL valides.
- -

En XUL, vous pouvez ajouter des libellés avec l'élément description ou label. Vous devriez utiliser ces éléments dès que vous le pouvez. Vous pouvez également ajouter des libellés à des contrôles soit en utilisant la balise HTML label, soit en mettant simplement le texte dans un autre élément bloc HTML (tel que p ou div) comme dans l'exemple ci-dessous.

- -

Exemple 1: Source Voir

- -
<html:p>
-  Rechercher :
-  <html:input id="find-text"/>
-  <button id="okbutton" label="OK"/>
-</html:p>
-
- -

Ce code va afficher le texte 'Rechercher :', suivi d'un champ de saisie de texte et d'un bouton « OK ». Notez que le bouton XUL peut apparaître dans un bloc de balise HTML, comme c'est le cas ici. Du texte ne sera affiché que s'il est placé à l'intérieur de balises HTML qui sont normalement employées pour afficher du texte (comme une balise p). Tout texte placé en dehors de balises ne sera pas affiché, sauf si l'élément XUL contenant le texte le permet (l'élément description par exemple).

- -

Les exemples suivants vont vous aider.

- -

Exemple d'éléments HTML

- -

Les exemples suivants illustrent l'ajout de balises HTML dans une fenêtre. Dans chaque cas, l'élément window et d'autres informations basiques ont été retirés pour plus de clarté.

- -

Une boîte de dialogue avec une case à cocher

- -

Exemple 2: Source Voir

- -
<html:p>
-  Cliquez sur la boîte ci-dessous pour mémoriser cette décision.
-  <html:p>
-    <html:input id="rtd" type="checkbox"/>
-    <html:label for="rtd">Mémoriser cette décision</html:label>
-  </html:p>
-</html:p>
-
- -
Image:xultu_htmlelem1.png
- -

Dans ce cas, une première balise p a été utilisée pour placer du texte et une autre a été utilisée pour séparer le texte en plusieurs lignes. (NdT : selon la norme XHTML, une balise p ne peut pas inclure une autre balise p, l'exemple est donc en principe erroné.)

- -

Texte en dehors de blocs HTML

- -

Exemple 3: Source Voir

- -
<html:div>
-   Voulez-vous sauvegarder les documents suivants ?
-   <html:hr/>
-</html:div>
-Rapport de dépense 1 que j'ai fait l'été dernier
-<button id="yes" label="Oui"/>
-<button id="no" label="Non"/>
-
- -
Image:xultu_htmlelem2.png
- -

Comme vous pouvez le voir sur cette image, le texte placé à l'intérieur des balises div a été affiché mais l'autre texte ('Rapport de dépense 1' et 'que j'ai fait l'été dernier') ne l'a pas été. Ceci est dû au fait qu'il n'y a pas d'éléments HTML ou XUL entourant le texte à afficher et capables de le faire. Pour rendre ce texte apparent, vous devez le placer à l'intérieur de balises div, ou l'inclure dans une balise description.

- -

Les éléments HTML invalides

- -
<html:po>Cas 1</html:po>
-<div>Cas 2</div>
-<html:description value="Cas 3"/>
-
- -

Aucun des trois cas ci-dessus ne s'affichera pour les raisons suivantes :

- -
-
Cas 1 
-
po n'est pas une balise HTML valide et Mozilla n'a aucune idée de ce qu'il faut en faire.
-
Cas 2 
-
div est une balise valide mais seulement en HTML. Pour qu'elle fonctionne, vous devez ajouter le qualificateur 'html:'.
-
Cas 3 
-
un élément description est valide en XUL mais pas en HTML. Il ne devrait pas avoir de qualificateur 'html:'.
-
- -
-

Dans la page suivante, nous apprendrons comment ajouter de l'espace entre les éléments.

- - -Interwiki
- -

 

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaire_d_\303\251v\303\250nements/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaire_d_\303\251v\303\250nements/index.html" deleted file mode 100644 index 9eab0ef687..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaire_d_\303\251v\303\250nements/index.html" +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: Ajout de gestionnaire d'évènements -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajout_de_gestionnaire_d_évènements -tags: - - Tutoriel_XUL - - Tutoriels - - XBL - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_Event_Handlers_to_XBL-defined_Elements ---- -
-

« PrécédentSuivant »

-
- -

Nous allons voir comment ajouter des gestionnaires d'événements aux éléments XBL.

- -

Les gestionnaires d'événements

- -

Comme vous pouvez le prévoir, des clics de souris, des touches pressées et d'autres événements sont passés à chacun des éléments à l'intérieur du contenu. Cependant, vous voudrez maîtriser les événements et les gérer à votre façon. Vous pouvez ajouter des gestionnaires d'événements aux éléments au sein du contenu si besoin. Le dernier exemple de la section précédente en faisait une démonstration. Dans cet exemple, des gestionnaires oncommand avaient été ajoutés sur quelques boutons.

- -

Gestionnaires d'événements

- -

Toutefois, vous pouvez vouloir ajouter un gestionnaire d'événement à tout le contenu, ce qui représente tous les éléments définis au sein de la balise content. Cela pourrait être utile pour maîtriser les événements de sélection et de désélection. Pour définir un gestionnaire d'événement, utilisez l'élément handler. Chacun de ces éléments décrit l'action d'un seul gestionnaire d'événement. Vous pouvez utiliser plus d'un gestionnaire si nécessaire. Si un événement ne correspond pas à l'un des événements handler, il est passé simplement dans le contenu comme d'habitude.

- -

La syntaxe générale du gestionnaire est la suivante :

- -
<binding id="nom-liaison">
-  <handlers>
-    <handler event="nom-evenement" action="script"/>
-  </handlers>
-</binding>
-
- -

Placez tous vos gestionnaires dans l'élément handlers. Chaque élément handler définit l'action prise pour un événement particulier grâce à son attribut event. Les événements valides sont ceux supportés par XUL et JavaScript, tels que 'click' et 'focus'. Utilisez le nom de l'événement sans son préfixe 'on'.

- -

La principale raison nécessitant la déclaration de gestionnaires est la modification des propriétés personnalisées lorsqu'un événement se produit. Par exemple, une case à cocher personnalisée pourrait avoir une propriété checked qui doit être modifée lorsque l'utilisateur clique sur la case à cocher :

- -
<handlers>
-  <handler event="mouseup" action="this.checked=!this.checked"/>
-</handlers>
-
- -

Lorsque l'utilisateur clique et relâche le bouton de la souris au dessus de la case à cocher, l'événement 'mouseup' lui est envoyé, et le gestionnaire défini ici est appelé, entraînant le renversement de l'état de la propriété checked. De même, vous pouvez modifier une propriété lorsque l'élément est sélectionné. Vous devrez ajouter des gestionnaires pour ajuster les propriétés lors de sollicitations de la souris ou du clavier.

- -

Gestionnaire d'événements de souris

- -

Pour des événements concernant la souris, vous pouvez utiliser l'attribut button pour que le gestionnaire n'accepte que les événements qui correspondent à un certain bouton. Sans cet attribut, le gestionnaire intercepterait tous les événements concernant la souris sans se soucier du bouton qui a été pressé. L'attribut button doit être défini à '0' pour le bouton gauche de la souris, '1' pour le bouton du milieu de la souris ou '2' pour le bouton droit de la souris.

- -
<handlers>
-  <handler event="click"   button="0" action="alert('Le bouton gauche est pressé');"/>
-  <handler event="mouseup" button="1" action="alert('Le bouton du milieu est pressé')"/>
-  <handler event="click"   button="2" action="alert('Le bouton droit est pressé');"/>
-</handlers>
-
- -

Gestionnaire d'événements clavier

- -

Pour les événements provenant des touches du clavier, vous pouvez utiliser plusieurs attributs similaires à ceux de l'élément key pour les faire correspondre à une touche spécifique et seulement lorsque certaines touches alternatives sont pressées. L'exemple précédent pourrait être complété de telle sorte que la propriété checked de la case à cocher soit modifiée lorsque la barre d'espacement est pressée.

- -
<handlers>
-  <handler event="keypress" key=" " action="this.checked=!checked"/>
-</handlers>
-
- -

Vous pouvez aussi utiliser l'attribut keycode pour tester les touches non imprimables. La section sur les raccourcis clavier fournit plus d'informations. Les touches alternatives peuvent être vérifiées en ajoutant un attribut modifiers. Il peut être défini avec l'une des valeurs suivante :

- -
-
'alt' 
-
L'utilisateur doit presser la touche Alt.
-
'control' 
-
L'utilisateur doit presser la touche Ctrl.
-
'meta' 
-
L'utilisateur doit presser la touche Meta.
-
'shift' 
-
L'utilisateur doit presser la touche Maj.
-
'accel' 
-
L'utilisateur doit presser la touche alternative spéciale qui est habituellement utilisée pour les raccourcis clavier sur sa plateforme.
-
- -

S'il est déclaré, le gestionnaire est appelé uniquement lorsque la touche alternative est pressée. Vous pouvez combiner plusieurs touches modificatrices en les séparant par des espaces.

- -

La syntaxe alternative suivante peut être utilisée lorsque le code dans un gestionnaire est plus complexe :

- -
<binding id="nom-liaison">
-  <handlers>
-    <handler event="nom-evenement">
-      -- le code du gestionnaire vient ici --
-    </handler>
-  </handlers>
-</binding>
-
- -

Exemple de gestionnaires

- -

L'exemple suivant ajoute des gestionnaires de touches pour créer un presse-papiers local très primitif :

- -

Exemple 1 : Source

- -
<binding id="clipbox">
-  <content>
-    <xul:textbox/>
-  </content>
-  <implementation>
-    <field name="clipboard"/>
-  </implementation>
-  <handlers>
-    <handler event="keypress" key="x" modifiers="control"
-      action="this.clipboard=document.getAnonymousNodes(this)[0].value; document.getAnonymousNodes(this)[0].value='';"/>
-    <handler event="keypress" key="c" modifiers="control"
-      action="this.clipboard=document.getAnonymousNodes(this)[0].value;"/>
-    <handler event="keypress" key="v" modifiers="control"
-      action="document.getAnonymousNodes(this)[0].value=this.clipboard ? this.clipboard : '';"/>
-  </handlers>
-</binding>
-
- -

Le contenu est un champ de saisie simple. Un champ clipboard lui a été ajouté pour stocker le contenu du presse-papiers. Il signifie que les opérations de presse-papiers sont limitées à ce seul champ de saisie. Le tampon sera propre à ce champ.

- -

Trois gestionnaires ont été ajoutés, un pour couper, un pour copier et l'autre pour coller. Chacun d'eux a sa propre combinaison de touche appelante. Le premier gestionnaire est l'opération Couper et est appelé lorsque la touche Ctrl est pressée suivie de la touche x. Le script à l'intérieur de l'attribut action est utilisé pour couper le texte du champ de saisie et pour le mettre dans le champ du presse-papiers. Pour faire simple, le texte entier est coupé et pas seulement le texte sélectionné. Le code fonctionne comme suit :

- -
    -
  1. -
    this.clipboard=document.getAnonymousNodes(this)[0].value;
    - On récupère le premier élément du tableau de contenu anonyme qui donne une référence à l'élément textbox qui s'avère être le premier (et le seul) élément au sein de l'élément content. On récupère la propriété value qui fournira le texte du champ de saisie. Elle est ainsi assignée au champ du presse-papiers. Le résultat est que le texte qui se trouve dans la champ de saisie est copié dans ce presse-papiers spécial.
  2. -
  3. -
    document.getAnonymousNodes(this)[0].value=''
    - On assigne ainsi au texte de l'élément textbox une chaîne de caractères vide. Elle efface le texte dans le champ de saisie.
  4. -
- -

Une opération de copie est similaire mais n'efface pas le texte. Le collage est l'opération inverse si ce n'est que la valeur du champ de saisie est assignée à partir de la valeur du champ du presse-papiers. Si nous étions en train de créer une réelle implémentation de ces raccourcis clavier de presse-papiers, nous utiliserions probablement l'interface réelle du presse-papiers et nous gèrerions également la sélection courante.

- -
-

Dans la prochaine section, nous verrons comment étendre les définitions XBL existantes.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaires_d'\303\251v\303\250nements/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaires_d'\303\251v\303\250nements/index.html" deleted file mode 100644 index df33636311..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_gestionnaires_d'\303\251v\303\250nements/index.html" +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Ajout de gestionnaires d'évènements -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajout_de_gestionnaires_d'évènements -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_Event_Handlers ---- -

 

- -
-

« PrécédentSuivant »

-
- -

La boîte de dialogue de recherche de fichiers est tout à fait correcte à ce stade. Nous ne l'avons pas beaucoup optimisée mais nous avons facilement créé une interface utilisateur. Dans ce qui suit, nous allons montrer comment lui ajouter des scripts.

- -

Utilisation de scripts

- -

Pour rendre la boîte de dialogue de recherche de fichiers fonctionnelle, nous avons besoin d'ajouter des scripts qui vont s'exécuter quand l'utilisateur interagira avec le dialogue. Nous voudrions ajouter un script pour gérer le bouton « Rechercher », le bouton « Annuler » et pour gérer chaque commande du menu. Nous écrirons ces scripts en utilisant des fonctions JavaScript de la même manière qu'en HTML.

- -

Vous pouvez utiliser l'élément script pour inclure des scripts dans des fichiers XUL. Vous pouvez aussi inclure le script directement dans le fichier XUL entre les balises script ouvrante et fermante, mais il est préférable de placer le code dans un fichier séparé. Votre fenêtre XUL se chargera un peu plus rapidement. Nous utiliserons alors l'attribut src pour lier un fichier de script externe.

- -
-

Notre exemple de recherche de fichiers

- -

Ajoutons un script au dialogue de recherche de fichiers. Bien que le nom du fichier de script n'ait pas d'importance, il est courant de lui donner le même nom que celui du fichier XUL, avec l'extension 'js'. Dans ce cas, on utilisera 'findfile.js'. Ajoutez la ligne ci-dessous juste après la balise window ouvrante et AVANT tout autre élément.

- -
<script src="findfile.js"/>
-
- -

Nous créerons le fichier de script plus tard, quand nous connaîtrons son contenu. Nous y définirons des fonctions que nous pourrons appeler dans des gestionnaires d'événements.

-
- -

Nous pouvons inclure de multiples scripts dans un fichier XUL en utilisant de multiples balises script, chacune pointant vers un script différent. Nous pouvons utiliser des URLs relatives ou absolues. Par exemple, nous pouvons utiliser des URLs sous les formes suivantes :

- -
<script src="findfile.js"/>
-<script src="chrome://findfiles/content/help.js"/>
-<script src="http://www.example.com/js/items.js"/>
-
- -

Ce tutoriel n'a pas pour but de décrire comment écrire du JavaScript. C'est un sujet vaste et il existe déjà beaucoup de documentation le traitant.

- -
Par défaut, la console JavaScript n'affiche que les erreurs provenant des contenus Web. Pour voir les erreurs JavaScript du chrome, il est nécessaire de modifier la préférence javascript.options.showInConsole à 'true'. Vous pouvez également faire du débogage en modifiant la préférence javascript.options.strict. En la définissant à 'true', les erreurs causés par des codes non standard, mal écrits, ou syntaxiquement erronés seront affichés dans la console d'erreurs.
- -

Réponse aux événements

- -

Le script contiendra le code qui répondra aux différents événements déclenchés par l'utilisateur ou par d'autres situations. Il existe environ une trentaine d'événements pouvant être gérés de différentes manières. Un événement classique est le bouton de souris ou la touche pressée par l'utilisateur. Chaque élément XUL a la capacité de déclencher certains événements dans des situations différentes. Quelques déclenchements d'événements sont spécifiques à certains éléments.

- -

Chaque événement a un nom, par exemple, 'mousemove' est le nom de l'événement qui est déclenché quand l'utilisateur passe la souris au-dessus d'un élément d'interface utilisateur. XUL utilise le mécanisme d'événement défini par le DOM Events (Version traduite). Quand survient une action devant déclencher un événement, telle que le déplacement de la souris par l'utilisateur, un objet 'event' correspondant à ce type d'événement est créé. Des propriétés sont assignées à cet objet event telles que la position de la souris, la touche pressée, etc.

- -

L'événement est ensuite envoyé au XUL par phases.

- - - -

Vous pouvez réagir à un événement pendant la phase de capture ou de diffusion. Une fois que l'événement a terminé de se propager, l'action correspondant au comportement natif de l'élément est déclenchée.

- -

Par exemple, quand la souris passe sur un bouton inclus dans une boîte, un événement 'mousemove' est généré et envoyé d'abord à la fenêtre, puis au document et ensuite à la boîte. Cela complète la phase de capture. Ensuite, l'événement 'mousemove' est envoyé au bouton. Enfin la phase de diffusion se traduit par le renvoi de l'événement vers la boîte, puis le document et enfin la fenêtre. La phase de diffusion est par essence l'inverse de la phase de capture. Notez que certains événements ne passent pas par la phase de diffusion.

- -

Vous pouvez attacher des scrutateurs à chaque élément pour être à l'écoute des événements pendant chaque étape de leur propagation. Étant donné qu'un simple événement est passé à tous les ancêtres, vous pouvez attacher un scrutateur à un élément spécifique ou à un élément supérieur dans la hiérarchie. Naturellement, un événement attaché à un élément parent recevra une notification de tous les éléments qu'il contient, alors qu'un événement attaché à un bouton recevra seulement des événements concernant ce bouton. C'est utile si vous désirez gérer plusieurs éléments avec un code identique ou similaire.

- -

Une fois que vous gérez un événement, sans vous souciez du stade de sa propagation, vous voudrez probablement le stopper avant qu'il ne soit envoyé à d'autres éléments, ce qui, en substance, signifie que vous voulez interrompre les phases de capture et de diffusion. Il existe plusieurs façons d'y parvenir, en fonction de la manière avec laquelle vous avez attaché le scrutateur d'événement à un élément.

- -

L'événement le plus utilisé est l'événement 'command'. L'événement 'command' est déclenché quand l'utilisateur active un élément, par exemple en pressant un bouton, en cochant une case ou en sélectionnant une entrée d'un menu. L'événement 'command' est pratique car il gère automatiquement les différentes méthodes d'activation d'un élément. Par exemple, l'événement 'command' se produira indifféremment si l'utilisateur utilise sa souris pour cliquer le bouton ou s'il presse la touche Entrée.

- -

Il y a deux manières d'attacher un scrutateur d'événement à un élément. Premièrement, en utilisant un attribut avec un script comme valeur. Deuxièmement, en appelant la méthode addEventListener d'un élément. La première manière peut seulement gérer les événements en phase de diffusion mais est plus simple à écrire. La seconde peut gérer les événements sur chaque phase et peut aussi être utilisée pour attacher plusieurs scrutateurs pour un événement à un élément. L'utilisation de la « forme par attribut » est une manière plus commune pour la plupart des événements.

- -

Scrutateurs d'événements par attributs

- -

Pour utiliser la forme par attribut, placez un attribut sur un élément à l'endroit que vous voulez, son nom devra être le nom de l'événement précédé par le mot « on ». Par exemple, l'attribut correspondant à l'événement 'command' est oncommand. La valeur de l'attribut devra être le code à exécuter quand l'événement se produira. Typiquement, ce code sera court et appellera une fonction définie dans un script séparé. Voici un exemple de réponse lorsqu'un bouton est pressé :

- -

Exemple 1: Source Voir

- -
<button label="OK" oncommand="alert('Le bouton a été pressé !');"/>
- -

Puisque l'événement 'command' va se diffuser, il est également possible de placer le scrutateur d'événement sur un élément conteneur. Dans l'exemple ci-dessous, le scrutateur a été placé sur une boîte et il recevra les événements pour tous ses éléments.

- -

Exemple 2: Source Voir

- -
<vbox oncommand="alert(event.target.tagName);">
-   <button label="OK"/>
-   <checkbox label="Voir les images"/>
-</vbox>
-
- -

Dans cet exemple, l'événement 'command' va se diffuser du bouton ou de la case à cocher jusqu'à la boîte, où il sera traité. Si un second scrutateur (l'attribut oncommand) était placé sur le bouton, son code serait appelé en premier, suivi par le gestionnaire de la boîte. L'objet event est transmis aux gestionnaires d'événements comme un argument implicite nommé 'event'. Il est utilisé pour obtenir des informations spécifiques à propos de l'événement. Une des plus utilisées est la propriété 'target' (cible) de l'événement, qui cible l'élément à partir duquel l'événement s'est produit. Dans l'exemple, nous affichons une alerte contenant le nom de l'élément cible. La cible est très utile lors de l'utilisation d'un événement en diffusion dans le cas où vous auriez une série de boutons gérée par un même script.

- -

Vous noterez que la syntaxe de l'attribut est identique à celle utilisée pour les événements dans les documents HTML. En fait, HTML et XUL partagent le même mécanisme d'événement. Une différence importante est que l'événement 'click' (ou l'attribut onclick) est utilisé en HTML pour répondre aux boutons, alors qu'on devra utiliser l'événement 'command' en XUL. XUL possède un événement 'click', mais il répond uniquement aux clics de souris, pas à l'utilisation du clavier. Ainsi, l'événement 'click' devra être évité en XUL, sauf si vous avez une raison d'avoir un élément uniquement géré avec la souris. De plus, tandis que l'événement 'command' ne sera pas envoyé si un élément est désactivé, l'événement 'click' sera envoyé sans tenir compte de l'état activé ou non de l'élément.

- -
-

Notre exemple de recherche de fichiers

- -

Un gestionnaire oncommand peut être placé sur les boutons « Rechercher » et « Annuler » dans le dialogue de recherche de fichiers. L'appui sur le bouton « Rechercher » devrait démarrer la recherche. Comme nous n'implémenterons pas cette partie, nous l'omettrons. En revanche, l'appui sur le bouton « Annuler » devrait fermer la fenêtre. Le code ci-dessous montre comment le faire. Pendant que nous y sommes, ajoutons le même code à l'item de menu « Fermer ».

- -
<menuitem label="Fermer" accesskey="c" oncommand="window.close();"/>
-...
-
-<button id="cancel-button" label="Annuler"
-     oncommand="window.close();"/>
-
-Deux gestionnaires ont été ajoutés ici. L'attribut oncommand a été ajouté à l'item de menu « Fermer ». En utilisant ce gestionnaire, l'utilisateur pourra fermer la fenêtre en cliquant sur l'item de menu ou en le sélectionnant par le clavier. Le gestionnaire oncommand a également été ajouté au bouton « Annuler ».
- -

Scrutateurs d'événements DOM

- -

La seconde façon d'ajouter un gestionnaire d'événement est d'appeler la méthode addEventListener d'un élément. Celle-ci vous permet d'attacher dynamiquement un scrutateur d'événement et de scruter les événements durant la phase de capture. La syntaxe est la suivante :

- -

Exemple 3: Source Voir

- -
<button id="okbutton" label="OK"/>
-
-<script>
-function buttonPressed(event) {
-   alert('Le bouton a été pressé !');
-}
-
-var button = document.getElementById("okbutton");
-button.addEventListener('command', buttonPressed, true);
-</script>
-
- -

La fonction getElementById() retourne l'élément ayant un identifiant id, dans notre cas, le bouton. La fonction addEventListener() est appelée pour ajouter un nouveau scrutateur d'événement en phase de capture. Le premier argument est le nom de l'événement à scruter. Le deuxième argument est la fonction du scrutateur d'événement qui sera appelée quand l'événement se produira. Enfin, le dernier argument devra être 'true' pour les scrutateurs en phase de capture. Vous pouvez également scruter durant la phase de diffusion en donnant la valeur 'false' au dernier argument. La fonction scrutateur d'événement passée comme deuxième argument devra avoir un argument, l'objet 'event', comme vous le voyez dans la déclaration de la fonction buttonPressed ci-dessus.

- -
-
-

Le dialogue de recherche de fichiers à ce stade : Source Voir

-
- -

Dans la prochaine section, nous aborderons plus en détail l'objet event.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

- -

 

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_m\303\251thodes/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_m\303\251thodes/index.html" deleted file mode 100644 index c0adc86eaa..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_m\303\251thodes/index.html" +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Ajout de méthodes -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajout_de_méthodes -tags: - - Tutoriel_XUL - - Tutoriels - - XBL - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_Methods_to_XBL-defined_Elements ---- -
-

« PrécédentSuivant »

-
- -

Nous allons voir comment ajouter des méthodes personnalisées aux éléments définis en XBL.

- -

Les méthodes

- -

En plus d'ajouter des propriétés de script à l'élément défini en XBL, vous pouvez aussi y ajouter des méthodes. Ces méthodes peuvent être appelées à partir d'un script. Les méthodes sont des fonctions d'objets, comme window.open(). Vous pouvez définir des méthodes personnalisées pour vos éléments en utilisant l'élément method. La syntaxe générale des méthodes est définie comme suit :

- -
<implementation>
-  <method name="method-name">
-    <parameter name="parameter-name1"/>
-    <parameter name="parameter-name2"/>
-    .
-    .
-    .
-    <body>
-      -- le script de la méthode vient ici --
-    </body>
-  </method>
-</implementation>
-
- -

Une déclaration de méthode se fait au travers de l'élément implementation, comme pour les champs et les propriétés. L'élément method contient deux types d'éléments fils, les éléments parameter qui décrivent les paramètres de la méthode et body qui contient le script de la méthode.

- -

La valeur de l'attribut name devient le nom de la méthode. De même, les attributs name des éléments parameter deviennent les noms de chaque paramètre. Chaque élément parameter est utilisé pour déclarer l'un des paramètres pour la méthode. Par exemple, si la méthode a trois paramètres, il y aura trois éléments parameter. Si vous n'avez pas besoin d'en avoir, la méthode n'aura pas de balise parameter.

- -

L'élément body contient le script qui est exécuté lorsque la méthode est appelée. Les noms des paramètres sont définis comme des variables dans le script comme s'ils étaient passés en paramètre. Par exemple, la fonction JavaScript suivante serait écrite en tant que méthode XBL comme ceci :

- -
function getMaximum(num1,num2)
-{
-  if (num1<=num2) return num2;
-  else return num1;
-}
-
-XBL:
-
-<method name="getMaximum">
-  <parameter name="num1"/>
-  <parameter name="num2"/>
-  <body>
-    if (num1&lt;=num2) return num2;
-    else return num1;
-  </body>
-</method>
-
- -

Cette fonction, getMaximum, retourne la plus grande des valeurs passées chacune comme un paramètre dans la méthode. Notez que le symbole inférieur doit être un caractère d'échappement parce qu'autrement il ressemblerait au commencement d'une balise. Vous pouvez aussi utiliser une section CDATA pour échapper le bloc entier de code. Vous pouvez appeler la méthode en utilisant un code comme element.getMaximum(5,10)element est une référence à un élément défini par l'élément XBL contenant la méthode getMaximum (L'élément de liaison).

- -

La balise parameter vous permet de définir des paramètres pour une méthode. Comme Mozilla utilise JavaScript pour son langage de script, et que JavaScript est un langage non typé, vous n'avez pas besoin de spécifier le type des paramètres. Cependant, dans le futur, d'autres langages devraient être utilisés avec XBL.

- -

Accès au contenu anonyme

- -

Il peut y avoir des fois où vous voulez modifier certains aspects des éléments définis dans l'élément content, que ce soit à partir d'une méthode body ou d'ailleurs. Ces éléments sont créés anonymement et ne sont pas accessibles à partir des fonctions habituelles du DOM (Modèle Objet de Document). Elles sont cachées de telle sorte que les développeurs n'aient pas besoin de savoir comment l'élément est implémenté pour l'utiliser. Cependant, il existe un moyen spécial pour obtenir ce contenu anonyme.

- -

Les éléments auxquels un comportement XBL est attaché ont une propriété spéciale qui contient un tableau des éléments fils anonymes. Chaque élément du tableau stocke chaque élément fils direct de l'élément XBL défini. Cette propriété spéciale ne peut pas être accessible directement. À la place, vous devez appeler la méthode getAnonymousNodes du document.

- -
var value=document.getAnonymousNodes(element);
- -

Ici, 'element' devrait être une référence à l'élément dont vous voulez obtenir le contenu anonyme. La fonction retourne un tableau d'éléments qui est le contenu anonyme. Pour obtenir des éléments en-dessous de celui-ci, vous pouvez utiliser les fonctions habituelles du DOM (Modèle Objet de Document) car elles ne sont pas cachées. Notez qu'il est possible pour un élément XBL lié d'être placé à l'intérieur d'un autre, auquel cas vous devrez utiliser une nouvelle fois la fonction getAnonymousNodes.

- -

L'exemple suivant crée une rangée de boutons :

- -
<binding id="buttonrow">
-  <content>
-    <button label="Oui"/>
-    <button label="Non"/>
-    <button label="Trier par"/>
-  </content>
-</binding>
-
- -

Pour vous référer à chaque bouton, vous pouvez utiliser la fonction getAnonymousNodes, en lui passant une référence à l'élément auquel la liaison est attachée, en tant que paramètre. Dans le tableau renvoyé, le premier bouton est stocké dans le premier item du tableau (getAnonymousNodes(element)[0]), le deuxième bouton est stocké dans le deuxième item du tableau et le troisième est stocké dans le troisième item du tableau. Pour coder à l'intérieur d'une méthode de liaison, vous pouvez passer this comme paramètre à getAnonymousNodes.

- -

Le prochain exemple peut être utilisé pour créer un texte avec un libellé. La méthode showTitle sert à montrer ou à cacher un libellé. Elle fonctionne en obtenant une référence à l'élément titre en utilisant le tableau anonyme et en changeant sa visibilité.

- -
XUL:
-
-<box id="num" class="labeledbutton" title="Plusieurs choses :" value="52"/>
-
-<button label="Montrer" oncommand="document.getElementById('num').showTitle(true)"/>
-<button label="Cacher" oncommand="document.getElementById('num').showTitle(false)"/>
-
-XBL:
-
-<binding id="labeledbutton">
-  <content>
-    <xul:label xbl:inherits="value=title"/>
-    <xul:label xbl:inherits="value"/>
-  </content>
-  <implementation>
-    <method name="showTitle">
-      <parameter name="state"/>
-      <body>
-        if (state) document.getAnonymousNodes(this)[0].
-          setAttribute("style","visibility: visible");
-        else document.getAnonymousNodes(this)[0].
-          setAttribute("style","visibility: collapse");
-      </body>
-    </method>
-  </implementation>
-</binding>
-
- -

Les deux boutons ajoutés dans le contenu XUL ont des gestionnaires oncommand qui sont utilisés pour changer la visibilité du libellé. Chacun d'eux appelle la méthode showTitle. Cette méthode vérifie le paramètre state pour voir si l'élément sera caché ou montré. Dans un cas comme dans l'autre, elle récupère le premier élément du tableau anonyme. Celui-ci se rapporte au premier fils de l'élément content qui ici est le premier élément label de l'élément graphique. La visibilité est changée en modifiant le style de l'élément.

- -

Accès depuis l'intérieur du contenu anonyme

- -

Pour aller dans l'autre sens, et obtenir l'élément XUL liée depuis l'intérieur du contenu anonyme, utilisez la propriété parentNode du DOM (Modèle Objet de Document). Elle permet d'obtenir l'élément parent d'un élément. Par exemple, nous pourrions déplacer les boutons 'Montrer' et 'Cacher' dans le fichier XBL et faire la chose suivante :

- -

Exemple 1 : Source

- -
<binding id="labeledbutton">
-  <content>
-    <xul:label xbl:inherits="value=title"/>
-    <xul:label xbl:inherits="value"/>
-    <xul:button label="Montrer" oncommand="parentNode.showTitle(true);"/>
-    <xul:button label="Cacher" oncommand="parentNode.showTitle(false);"/>
-  </content>
-  <implementation>
-    <method name="showTitle">
-      <parameter name="state"/>
-      <body>
-        if (state) document.getAnonymousNodes(this)[0].setAttribute("style","visibility: visible");
-        else document.getAnonymousNodes(this)[0].setAttribute("style","visibility: collapse");
-      </body>
-    </method>
-  </implementation>
-</binding>
-
- -

Les gestionnaires oncommand obtiennent ici d'abord une référence à leur élément parent. Il ne s'agit pas de l'élément content mais de l'élément XUL auquel l'élément XBL est lié (Dans cet exemple, c'est la boîte avec la classe 'labeledbutton'). Ainsi, la méthode showTitle est appelée, et fonctionne comme avant.

- -

Les propriétés et méthodes personnalisées sont ajoutées seulement à l'élément XUL externe auquel l'élément XBL est lié. Aucun des éléments déclarés au sein de la balise content n'ont ces propriétés ou méthodes. C'est pourquoi nous devons obtenir l'élément parent d'abord.

- -

Les fils d'un élément placés dans le fichier XUL peuvent être récupérés par la voie normale et ne bougent pas même si vous utilisez la balise children. Par exemple :

- -
XUL:
-
-<box id="outer" class="container">
-  <button label="Un"/>
-  <button label="Deux"/>
-  <button label="Trois"/>
-  <button label="Quatre"/>
-</box>
-
-XBL:
-
-<binding id="labeledbutton">
-  <content>
-    <description value="Une pile :"/>
-    <stack>
-      <children/>
-    </stack>
-  </content>
-</binding>
-
- -

Si vous utilisez les fonctions du DOM (Modèle Objet de Document) telles que childNodes pour obtenir les fils d'un élément, vous verrez que la boîte XUL qui a l'id 'outer', a 4 fils. Ceux-ci correspondent à ses 4 boutons, même si ces boutons sont dessinés à l'intérieur de la pile (stack). La pile n'a qu'un seul fils, l'élément children lui-même. La longueur du tableau anonyme de la boîte externe est de deux, le premier élément étant l'élément description et le second étant l'élément stack.

- -

Constructeurs et Destructeurs

- -

XBL supporte deux méthodes spéciales créées avec des balises séparées, constructor et destructor. Un constructeur est appelé chaque fois qu'une liaison est attachée à un élément. Il est utilisé pour initialiser le contenu tel que le chargement de préférences ou l'initialisation des valeurs par défaut de champs. Le destructeur est appelé lorsqu'une liaison est enlevée d'un élément. Il peut s'avérer utile pour sauvegarder des informations.

- -

Il y a deux points à savoir lorsqu'une liaison est attachée à un élément. Le premier se produit lorsqu'une fenêtre est affichée. Tous les constructeurs des éléments qui ont un contenu XBL attaché seront invoqués. L'ordre dans lequel ils sont appelés ne devrait pas être pris en compte, car ils sont chargés à partir divers fichiers. Le gestionnaire de chargement de la fenêtre (onload) n'est pas appelé tant que toutes les liaisons n'ont pas été attachées et leurs constructeurs exécutés. Le second point quand une liaison est attachée, est lorsque vous changez la propriété de style -moz-binding d'un élément. Après que son destructeur ait été appelé, la liaison existante sera enlevée. Ainsi, la nouvelle liaison sera ajoutée à sa place et son constructeur sera invoqué.

- -

Le script pour un constructeur ou un destructeur devrait être placé directement à l'intérieur de la balise appropriée. Il ne doit y avoir qu'un seul de chaque par liaison et ils ne prennent aucun argument. Voici quelques exemples :

- -
<constructor>
-  if (this.childNodes[0].getAttribute("open") == "true"){
-    this.loadChildren();
-  }
-</constructor>
-
-<destructor action="saveMyself(this);"/>
-
- -
-

La prochaine section montre comment ajouter des gestionnaires d'événements aux éléments XBL définis.

- -
-

« PrécédentSuivant »

-
diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_propri\303\251t\303\251s/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_propri\303\251t\303\251s/index.html" deleted file mode 100644 index 0294706900..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajout_de_propri\303\251t\303\251s/index.html" +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Ajout de propriétés -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajout_de_propriétés -tags: - - Tutoriel_XUL - - Tutoriels - - XBL - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_Properties_to_XBL-defined_Elements ---- -
-

« PrécédentSuivant »

-
- -

Nous allons voir comment ajouter des propriétés personnalisées aux éléments XBL (eXtended Binding Language).

- -

L'interface XBL

- -

JavaScript et le DOM fournissent un moyen pour obtenir et définir les propriétés des éléments. Avec XBL, vous pouvez définir vos propres propriétés pour les éléments que vous créez. Vous pouvez aussi ajouter des méthodes qui peuvent être appelées. De cette façon, tout ce dont vous avez besoin est d'obtenir une référence à l'élément (en utilisant getElementById ou une fonction similaire) et ainsi obtenir ou modifier ses propriétés additionnelles et appeler ses méthodes.

- -

Il y a trois types d'items que vous pouvez ajouter.

- - - -

Chacun des trois est défini dans un élément implementation, qui doit être un fils de l'élément de liaison binding. À l'intérieur de la balise implementation, vous définirez pour chacun d'eux un élément field, un élément property et un élément method selon ce que vous voulez. La syntaxe générale est celle-ci :

- -
<binding id="nom-élément">
-  <content>
-    -- le contenu vient ici --
-  </content>
-  <implementation>
-    <field name="nom-champ-1"/>
-    <field name="nom-champ-2"/>
-    <field name="nom-champ-3"/>
-
-    <property name="nom-propriété-1"/>
-    <property name="nom-propriété-2"/>
-    <property name="nom-propriété-3"/>
-    .
-    .
-    .
-    <method name="nom-méthode-1">
-      -- le contenu vient ici --
-    </method>
-    .
-    .
-    .
-  </implementation>
-</binding>
-
- -

Les champs

- -

Chaque champ est défini en utilisant l'élément field. Souvent, les champs correspondent à un attribut placé sur l'élément comme label ou disabled, mais ils ne le devraient pas.

- -

L'attribut name de field est utilisé pour indiquer le nom du champ. Vous pouvez utiliser le nom dans un script pour obtenir et déterminer une valeur. L'exemple ci-dessous crée un bouton qui génère et stocke un nombre aléatoire. Vous pouvez rechercher ce même nombre plusieurs fois en obtenant la propriété number du bouton. Le plus gros du travail ici est fait par les gestionnaires oncommand. Plus tard, nous verrons comment transformer cela en XBL.

- -
XUL:
-
-<box id="random-box" class="randomizer"/>
-
-<button label="Générer"
-           oncommand="document.getElementById('random-box').number=Math.random();"/>
-<button label="Voir"
-           oncommand="alert(document.getElementById('random-box').number)"/>
-
-XBL:
-
-<binding id="randomizer">
-  <implementation>
-    <field name="number"/>
-  </implementation>
-</binding>
-
- -

Un champ number mémorisant le nombre aléatoire a été défini dans la liaison. Les deux boutons spéciaux définissent et obtiennent la valeur de ce champ. La syntaxe est très similaire pour obtenir et définir les propriétés des éléments HTML. Dans cet exemple, aucun contenu n'a été placé à l'intérieur que ce soit la boîte XUL ou sa définition dans XBL, ce qui est parfaitement valide.

- -

Cet exemple n'est pas tout à fait correct car il n'y a pas de valeur par défaut assignée dans le champ. Pour en mettre une, ajoutez la valeur par défaut dans le contenu de la balise field. Par exemple :

- -
<field name="number">
-  25
-</field>
-
- -

Ici, la valeur '25' sera affectée comme valeur par défaut du champ "number". En fait, vous pourriez aussi insérer un script au sein de la balise field pour calculer la valeur par défaut. Cela pourrait être nécessaire si la valeur a besoin d'être calculée. Par exemple, le champ suivant donne une valeur par défaut égale à l'heure courante :

- -
<field name="currentTime">
-  new Date().getTime();
-</field>
-
- -

Les propriétés

- -

Parfois vous voulez valider la donnée qui est assignée à une propriété. Ou bien, vous souhaitez que la valeur soit calculée dynamiquement lorsqu'on le lui demande. Par exemple, si vous souhaitez une propriété qui prenne en compte l'heure courante, vous voudrez que sa valeur soit générée au besoin. Dans ces cas là, vous avez besoin d'utiliser une balise property à la place de la balise field. Sa syntaxe est similaire mais comporte des particularités supplémentaires.

- -

Attributs onget et onset

- -

Vous pouvez utiliser les attributs onget et onset pour que le code soit exécuté lorsque la propriété est lue ou modifiée. Ajoutez les à l'élément property et définissez leur valeur dans un script qui, au choix, obtient ou déclare la valeur de la propriété.

- -

Par exemple, vous pouvez assigner un script à la valeur de onget pour calculer le temps courant. Chaque fois qu'un script tente d'accéder à la valeur de la propriété, le script onget sera appelé pour fournir la valeur. Le script devra retourner la valeur qui devrait être traitée comme étant la valeur de la propriété.

- -

Le gestionnaire onset est similaire mais est appelé chaque fois qu'un script tente d'assigner une nouvelle valeur à la propriété. Ce script devrait stocker la valeur quelque part, ou la valider. Par exemple, certaines propriétés pourraient juste être capables de stocker des nombres. Les tentatives pour assigner des caractères alphabétiques à ce genre de propriétés ne devraient pas fonctionner.

- -
<property name="size"
-          onget="return 77;"
-          onset="alert('Modifié en :'+val); return val;"/>
-
- -

Cette propriété retournera toujours '77' lorsqu'elle sera récupérée. Lorsqu'elle sera affectée, un message d'alerte s'affichera et indiquera la valeur à assigner à la propriété. La variable spéciale val contient cette valeur. Utilisez-la pour la valider ou la stocker. La propriété onset devrait aussi retourner la nouvelle valeur.

- -

Ce qui suit décrit le comportement d'un cas typique :

- -

Il y a deux éléments, l'un appelé "banana" et l'autre "orange". Chacun d'eux a une propriété spécifique appelée 'size'. Lorsque la ligne de script suivante est exécutée :

- -
banana.size = orange.size;
-
- -
    -
  1. Le script onget est appelé pour la propriété "size" de "orange". Il calcule la valeur et la retourne.
  2. -
  3. Le gestionnaire onset de la propriété "size" de "banana" est appelé. Ce script utilise la valeur passée dans la variable val et l'assigne à la propriété "size" de "banana" de façon quelconque.
  4. -
- -

Notez que contrairement à un champ, une propriété ne contient pas de valeur. Tenter de définir une propriété qui n'a pas de gestionnaire onset provoquera une erreur. Vous utiliserez souvent un champ séparé pour mémoriser la valeur actuelle de la propriété. Il est aussi commun que les propriétés correspondent à un attribut dans l'élément défini XBL. L'exemple suivant fait correspondre une propriété à un attribut sur un élément.

- -
<property name="size"
-          onget="return this.getAttribute('size');"
-          onset="return this.setAttribute('size',val);"
-/>
-
- -

Chaque fois qu'un script tente d'obtenir la valeur de la propriété, elle est récupérée d'un attribut de même nom de l'élément XUL. Chaque fois qu'un script tente de définir la valeur de la propriété, elle est affectée à l'attribut 'size' de l'élément. C'est pratique parce qu'ainsi vous pouvez modifier la propriété ou l'attribut et tous les deux auront la même valeur.

- -

Éléments getter et setter

- -

Vous pouvez utiliser une syntaxe alternative pour les attributs onget et onset pouvant être utile pour des scripts plus longs. Vous pouvez remplacer l'attribut onget par l'élément fils nommé getter. De même, vous pouvez remplacer l'attribut onset par l'élément setter. L'exemple ci-dessous le montre :

- -
<property name="number">
-  <getter>
-    return this.getAttribute('number');
-  </getter>
-  <setter>
-    var v = parseInt(val,10);
-    if (!isNaN(v)) return this.setAttribute('number',''+v);
-    else return this.getAttribute('number');"
-  </setter>
-</property>
-
- -

La propriété dans cet exemple ne pourra contenir que des valeurs d'entiers. Si d'autres caractères sont entrés, ils sont supprimés. S'il n'y a aucun chiffre, la valeur n'est pas modifiée. Ces opérations sont effectuées dans le code au sein de l'élément setter. La valeur réelle de la propriété est stockée dans l'attribut number.

- -

Vous pouvez utilisez l'une ou l'autre syntaxe pour créer des gestionnaires de lecture et d'affectation.

- -

Attribut readonly

- -

Vous pouvez rendre un champ ou une propriété en lecture seule en ajoutant un attribut readonly à la balise field ou à la balise property, et en le déclarant à 'true'. Toute tentative d'affecter une valeur à une propriété en lecture seule échouera.

- -
-

La prochaine section montre comment ajouter des méthodes aux éléments définis en XBL.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_boutons/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_boutons/index.html deleted file mode 100644 index 33d1b2f376..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_boutons/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Ajouter des boutons -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajouter_des_boutons -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_Buttons ---- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous regarderons comment ajouter quelques boutons simples dans une fenêtre.

- -

Ajouter des boutons dans une fenêtre

- -

La fenêtre que nous avons créée jusqu'ici était vide, aussi n'est-elle pas encore très intéressante. Dans cette section, nous y ajouterons deux boutons, un bouton de recherche et un bouton d'annulation. Nous apprendrons également une manière simple de les positionner dans la fenêtre.

- -

Comme pour HTML, XUL dispose d'un certain nombre de balises qui peuvent être utilisées pour créer des éléments d'interface utilisateur. Le plus basique d'entre eux est l'élément button. Cet élément sert à créer de simples boutons.

- -

L'élément bouton a deux propriétés principales : un libellé label et une image image. Vous avez besoin soit de l'un, soit de l'autre, soit des deux en même temps. Ainsi, un bouton peut avoir seulement un libellé, seulement une image ou un libellé et une image à la fois. Les boutons sont souvent utilisés dans une boîte de dialogue pour valider ou annuler, par exemple.

- -

Syntaxe des boutons

- -

L'élément button a la syntaxe suivante :

- -
<button
-       id="identifier"
-       class="dialog"
-       label="OK"
-       image="images/image.jpg"
-       disabled="true"
-       accesskey="t"/>
-
- -

Les attributs sont définis comme suit, et ils sont tous optionnels :

- -
-
id 
-
Identifiant unique vous permettant d'identifier le bouton. Vous verrez cet attribut sur tous les éléments XUL. Vous pouvez l'utiliser pour vous référer au bouton dans une feuille de style ou dans un script. Cependant, vous devriez ajouter cet attribut à presque tous les éléments. Notez que pour des raisons de simplicité, il n'est pas toujours spécifié dans les exemples de ce tutoriel.
-
class 
-
La classe de style du bouton. Elle fonctionne de la même manière qu'en HTML. Elle indique l'aspect du bouton dans la fenêtre. Dans le cas présent, la valeur 'dialog' est utilisée. Dans la plupart des cas, vous n'emploierez pas de classe pour un bouton.
-
label 
-
Le libellé qui apparaîtra sur le bouton. Par exemple : 'OK' ou 'Annuler'. S'il est omis, aucun texte n'apparaît.
-
image 
-
L'URL de l'image qui apparaît sur le bouton. Si cet attribut est omis, aucune image n'apparaîtra. Vous pouvez également indiquer l'image dans une feuille de style en utilisant la propriété list-style-image.
-
disabled 
-
Si cet attribut prend la valeur true, le bouton est désactivé. Celui-ci est habituellement dessiné avec le texte écrit en gris. Si le bouton est désactivé, la fonction du bouton ne peut pas être exécutée. Si cet attribut est omis, le bouton est activé. Vous pouvez commuter l'état d'activation du bouton en utilisant Javascript.
-
accesskey 
-
Cet attribut doit spécifier une lettre qui est employée comme raccourci clavier. Cette lettre doit apparaître, généralement soulignée, dans le libellé. Quand l'utilisateur presse la touche alt (ou une touche équivalente, qui varie en fonction de la plate-forme) et la touche de raccourci, à partir de n'importe où dans la fenêtre, le focus sera mis sur le bouton.
-
- -
Notez qu'un bouton supporte plus d'attributs que ceux énumérés ci-dessus. Les autres seront abordés plus tard.
- -

Quelques exemples de boutons :

- -

Exemple 1: Source Voir

- -
<button label="Normal"/>
-<button label="Désactivé" disabled="true"/>
-
- -
Image:xultu_buttons1.png
- -

Les exemples ci-dessus produiront des boutons comme dans la capture. Le premier bouton est un bouton normal. Le second bouton est désactivé, aussi apparaît-il grisé.

- -

Nous commencerons par créer un bouton simple de recherche qui permettra de lancer la recherche de fichiers. Le code de l'exemple ci-dessous nous montre comment faire :

- -
<button id="find-button" label="Rechercher"/>
-
- -
Notez que Firefox ne vous permet pas d'ouvrir des fenêtres chrome à partir de pages Web. Aussi les liens « voir » dans le tutoriel s'ouvriront dans une fenêtre normale de navigation. À cause de cela, les boutons apparaîtront agrandis le long de la fenêtre. Vous pouvez ajouter align="start" sur l'élément window pour éviter cette déformation.
- -
-

L'exemple findfile.xul

- -

Ajoutons ce code au fichier findfile.xul que nous avons créé dans la section précédente. Le code doit être inséré entre les balises window. Le code à ajouter est mis en rouge ci-dessous :

- -
<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<window id="findfile-window"
-        title="Recherche de fichiers"
-        orient="horizontal"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <button id="find-button" label="Rechercher"/>
-  <button id="cancel-button" label="Annuler"/>
-
-</window>
-
- -
Image:buttons2.png
-Vous noterez que le bouton 'Annuler' a été également ajouté. La fenêtre a une orientation horizontale de sorte que les deux boutons apparaissent l'un à côté de l'autre. Si vous ouvrez le fichier dans Mozilla, vous devriez obtenir quelque chose de similaire à l'image montrée ici.
- -
Notez que nous ne devrions pas mettre le texte des libellés directement dans le fichier XUL. Nous devrions plutôt employer des entités de sorte que le texte puisse être facilement traduit.
- -

PAS SUR MDC L'exemple de la boîte de recherche&nbsp;: <a href='exemples/findfile/findfile-buttons.xul.txt'>Source</a> <a href="exemples/findfile/findfile-buttons.xul" onclick="window.open(this.href,'xulff','chrome,resizable'); return false;">Voir</a>

- -
-

Dans la section suivante, nous découvrirons comment ajouter des libellés et des images dans une fenêtre XUL.

- -


-

-

« PrécédentSuivant »

-
diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_feuilles_de_style/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_feuilles_de_style/index.html deleted file mode 100644 index e357b89163..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_feuilles_de_style/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Ajouter des feuilles de style -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajouter_des_feuilles_de_style -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_Style_Sheets ---- -

 

-
-

« PrécédentSuivant »

-
-

Jusqu'à présent, nous avons à peine modifier l'aspect visuel des éléments que nous avons créés. XUL utilise CSS (Cascading Style Sheets) pour personnaliser les éléments.

-

Feuilles de styles

-

Une feuille de styles est un fichier qui contient des informations de style pour les éléments. Les styles ont été conçus au départ pour des éléments HTML mais ils peuvent également être appliqués à des éléments XUL ou à n'importe quels éléments XML. La feuille de styles contient des informations telles que les polices, couleurs, bordures et taille des éléments.

-

Mozilla applique une feuille de styles par défaut pour chaque fenêtre XUL. Dans la plupart des cas, il sera suffisant de laisser les valeurs par défaut telles quelles. Toutefois, vous pouvez fournir une feuille de styles personnalisée. En général vous associerez une seule feuille de styles à chaque fichier XUL.

-

Vous pouvez placer une feuille de styles où vous le désirez. Si votre fichier XUL se trouve sur un serveur distant et doit être accédé via une URL HTTP, vous pouvez également stocker la feuille de styles à distance. Si vous créez un paquetage XUL destiné à faire partie du système chrome, vous avez deux choix. Premièrement, vous pouvez placer la feuille de styles dans le même répertoire que le fichier XUL. Cette méthode a l'inconvénient d'interdire le changement du thème graphique de votre application. La seconde méthode consiste à placer vos fichiers à l'intérieur d'un thème.

-
Imaginons que nous construisions la boîte de dialogue de recherche de fichiers pour permettre le choix d'un thème. Comme la fenêtre peut être appelée par l'URL 'chrome://findfile/content/findfile.xul', la feuille de styles sera enregistrée dans 'chrome://findfile/skin/findfile.css'.
-

Tous les exemples XUL ont utilisé une feuille de styles jusqu'à présent. La seconde ligne a toujours été :

-
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-

Cette ligne indique que nous voulons utiliser le style fourni par chrome://global/skin/. Sous Mozilla, elle sera traduit par le fichier global.css qui contient les informations du style par défaut pour les éléments XUL. Si vous enlevez cette ligne, les éléments fonctionneront, toutefois ils apparaîtront dans un style plus simple. La feuille de styles utilise diverses polices, couleurs et bordures pour rendre l'apparence des éléments plus appropriée.

-

Modifier les styles

-

Il arrivera toutefois que l'apparence par défaut des éléments ne soit pas celle désirée. Dans ces cas, nous devons ajouter notre propre feuille de styles. Jusqu'à présent, nous avons appliqué différents styles en utilisant l'attribut style sur des éléments. Bien que ce soit une technique fonctionnelle, elle n'est pas la meilleure. Il est de loin préférable de créer une feuille de styles séparée. La raison est que des styles ou des thèmes différents peuvent êtres appliqués très facilement.

-

Il peut y avoir des cas où l'utilisation de l'attribut style est acceptable. Un bon exemple serait lorsqu'un script modifie le style d'un élément, ou quand une différence d'agencement pourrait modifier la signification de l'élément. Cependant vous devriez l'éviter autant que possible.

-

Pour des fichiers installés, vous aurez à créer ou à modifier un fichier manifeste et installer le thème.

-
-

Notre exemple de recherche de fichiers

-

Modifions la boîte de dialogue de recherche de fichiers pour que son style provienne d'un fichier style séparé. Tout d'abord, voici les lignes modifiées de findfile.xul  :

-
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="findfile.css" type="text/css"?>
-  ...
-<spacer class="titlespace"/>
-  <groupbox orient="horizontal">
-    <caption label="Critères de recherche"/>
-
-      <menulist id="searchtype">
-        <menupopup>
-          <menuitem label="Nom"/>
-          <menuitem label="Taille"/>
-          <menuitem label="Date de modification"/>
-        </menupopup>
-      </menulist>
-      <spacer class="springspace"/>
-      <menulist id="searchmode">
-        <menupopup>
-          <menuitem label="Est"/>
-          <menuitem label="N'est pas"/>
-        </menupopup>
-      </menulist>
-
-      <spacer class="springspace"/>       <menulist id="find-text" flex="1"
-          editable="true"
-          datasources="file:///mozilla/recents.rdf"
-          ref="http://www.xulplanet.com/rdf/recent/all"/>
-  ...
-<spacer class="titlespace"/> <hbox>    <progressmeter id="progmeter" value="50%" style="display:none;"/>
-
-

La nouvelle ligne xml-stylesheet est utilisée afin d'importer la feuille de styles. Elle contiendra les styles au lieu de les avoir directement dans le fichier XUL. Vous pouvez inclure un nombre indéterminé de feuilles de styles de la même façon. Ici la feuille de styles est placée dans le même répertoire que findfile.xul.

-

Certains des styles dans le code ci-dessus ont été enlevés. La propriété display du progressmeter ne l'a pas été. Elle sera modifiée par un script donc, le style a été maintenu, car la barre de progression n'a pas à être visible au lancement. Vous pouvez toujours mettre le style dans une feuille de styles séparée si vous le souhaitez vraiment. Une classe a été ajoutée aux éléments spacer pour qu'ils puissent être appelés.

-

Une feuille de styles a également besoin d'être créée. Créez un fichier findfile.css dans le même répertoire que le fichier XUL (Il devrait normalement être mis dans un thème séparé). Dans ce fichier, nous allons ajouter la déclaration de styles, comme indiqué ci-dessous :

-
#find-text {
-  min-width: 15em;
-}
-
-#progmeter {
-  margin: 4px;
-}
-
-.springspace {
-  width: 10px;
-}
-
-.titlespace {
-  height: 10px;
-}
-
-

Remarquez que ces styles sont équivalents aux styles que nous avions précédemment. Cependant, il est beaucoup plus facile pour quelqu'un de changer l'apparence de la boîte de dialogue de recherche de fichiers maintenant car il est possible d'ajouter ou modifier la déclaration de styles en modifiant le fichier ou en changeant le thème. Si l'utilisateur change le thème, les fichiers dans un répertoire autre que celui par défaut seront utilisés.

-
-

Importer des feuilles de styles

-

Nous avons déjà vu comment importer des feuilles de styles. Un exemple est montré ci-dessous :

-
<?xml-stylesheet href="chrome://bookmarks/skin/" type="text/css"?>
-

Cette ligne peut être la première d'une fenêtre 'bookmarks'. Elle importe la feuille de style bookmarks, qui est 'bookmarks.css'. Le système de thème de Mozilla est assez intelligent pour savoir quelle feuille de styles utiliser, car le nom spécifique du fichier n'a pas été indiqué ici. Nous avons fait une chose similaire avec la feuille de styles globale (chrome://global/skin).

-

Une feuille de styles peut importer des styles d'une autre feuille en utilisant la directive import. Normalement, vous n'importerez qu'une seule feuille de styles de chaque fichier XUL. La feuille de styles globale peut être importée à partir de celle associée avec le fichier XUL. Ceci peut être fait grâce au code ci-dessous, vous permettant de retirer l'import du fichier XUL :

-
Importation de styles à partir de XUL :
-<?xml-stylesheet href="chrome://global/skin/"  type="text/css"?>
-
-Importation de styles à  partir de CSS :
-@import url(chrome://global/skin/);
-
-

La seconde syntaxe est préférable car elle réduit le nombre de dépendances à l'intérieur du fichier XUL lui-même.

-
-

Retirez l'importation de la feuille de styles globale dans findfile.xul et ajoutez l'importation dans findfile.css.

-
-

Tous les éléments peuvent être décorés à l'aide de CSS. Vous pouvez utiliser des sélecteurs pour sélectionner l'élément que vous souhaitez styler (Le sélecteur est la partie avant l'accolade dans une règle de style). La liste suivante résume quelques-uns des sélecteurs disponibles :

-
button 
Désigne toutes les balises button.
#special-button 
Désigne les éléments avec un id de 'special-button'
.bigbuttons 
Désigne tous les éléments avec une classe 'bigbuttons'
button.bigbuttons 
Désigne tous les éléments button avec une classe à 'bigbuttons'
toolbar > button 
Désigne tous les boutons directement insérés dans un élément toolbar.
toolbar > button.bigbuttons 
Désigne tous les éléments button avec une classe 'bigbuttons', directement insérés dans un élément toolbar.
button.bugbuttons:hover 
Désigne tous les éléments button avec une classe 'bigbuttons' mais seulement lorsque la souris se trouve au dessus d'eux.
button#special-button:active 
Désigne tous les éléments button avec un id 'special-button' mais seulement lorsqu'ils sont actifs (en train d'être cliqués).
box[orient="horizontal"] 
Désigne tous les éléments box avec un attribut orient réglé sur 'horizontal'.
-
-

Vous pouvez combiner ces règles comme vous le désirez. C'est toujours une bonne idée d'être aussi précis que possible lorsque vous spécifiez ce qui doit être décoré et comment. C'est bien plus efficace et réduit également les risques de décorer un mauvais élément.

-
-

La boîte de dialogue de recherche de fichiers à ce stade : Source Voir

-
-
-

Dans la prochaine section, nous verrons comment appliquer des styles aux arbres.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_libell\303\251s_et_des_images/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_libell\303\251s_et_des_images/index.html" deleted file mode 100644 index 691fda155e..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_des_libell\303\251s_et_des_images/index.html" +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Ajouter des libellés et des images -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajouter_des_libellés_et_des_images -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_Labels_and_Images ---- -
-

« PrécédentSuivant »

-
-

Cette section décrit la façon d'ajouter des libellés et des images dans une fenêtre. En complément, nous verront comment inclure des éléments dans des groupes.

-

Éléments de texte

-

Vous ne pouvez pas écrire du texte directement dans un fichier XUL sans le placer entre des balises, et espérer qu'il s'affiche. Vous avez deux éléments XUL à votre disposition pour cela.

-

Élément label

-

La façon la plus basique pour inclure du texte dans une fenêtre est d'utiliser l'élément label. Il sert à placer un libellé à côté d'un contrôle, tel qu'un bouton. Voici un exemple :

-

Exemple 1: Source Voir

-
<label value="ceci est du texte"/>
-

L'attribut value sert à spécifier le texte à afficher. Le texte ne sera pas coupé, et donc apparaîtra sur une seule ligne. Il s'agit de la syntaxe la plus courante pour des libellés.

-

Si le texte doit être coupé, vous pouvez placer son contenu à l'intérieur de balises ouvrantes et fermantes comme dans l'exemple suivant :

-

Exemple 2 :

-
<label>Ceci est un texte plus long qui peut être coupé sur plusieurs lignes.</label>
-

Comme en HTML, les césures de ligne et espaces supplémentaires sont réduits à un simple espace. Plus tard, nous verrons comment imposer la largeur des éléments pour que la césure se voit plus facilement.

-

Attribut control

-

Vous pouvez utiliser l'attribut control pour définir quel contrôle est associé au libellé. Lorsque l'utilisateur clique sur le libellé associé, le contrôle obtient le focus. Cette association est également importante pour l'accessibilité, permettant aux lecteurs vocaux de lire le libellé du contrôle que l'utilisateur a tabulé. Définissez la valeur de l'attribut control avec l'id de l'élément obtiendra le focus.

-

Exemple 2: Source Voir

-
<label value="Cliquez ici" control="open-button" />
-<button id="open-button" label="Ouvrir"/>
-
-

Dans l'exemple du dessus, en cliquant sur le libellé, le focus sera mis sur le bouton.

-

Élément description

-

Pour du texte descriptif non associé avec un contrôle particulier, vous pouvez utiliser l'élément description. Cet élément est utile pour du texte informatif placé en haut d'une boîte de dialogue ou d'un groupe de contrôles par exemple. Comme pour l'élément label, vous pouvez soit utiliser l'attribut value pour une seule ligne de texte, soit placer le contenu du texte dans des balises ouvrantes et fermantes description pour des blocs de texte plus long. L'usage veut que la syntaxe avec attribut serve pour les libellés et que celle avec le contenu de texte serve pour des descriptions.

-

Exemple 4: Source Voir

-
<description>
-     Cette longue section de texte est affichée.
-</description>
-
-

Intrinsèquement, les deux éléments label et description sont les mêmes. Les éléments label sont généralement utilisés pour des libellés, tels que ceux des champs de saisie. L'élément description est généralement employé pour d'autres textes descriptifs telle qu'une information placée en haut d'une boîte de dialogue.

-

Les images

-

Comme en HTML, XUL a un élément pour afficher des images à l'intérieur d'une fenêtre. Cet élément est nommé naturellement image. Notez que le nom de la balise est différent de celle en HTML (image au lieu de img). Vous pouvez utiliser l'attribut src pour indiquer l'URL de l'image. L'exemple suivant le montre :

-
<image src="images/banner.jpg" />
-
-

Bien que vous pouvez utiliser cette syntaxe, il est préférable d'utiliser une feuille de styles pour spécifier une URL. Une section ultérieure vous décriera comment utiliser des feuilles de styles, mais l'exemple ci-dessous vous permettra d'appréhender le sujet. Vous pouvez utiliser le style CSS list-style-image pour définir l'URL de l'image. Voici des exemples :

-
XUL:
- <image id="image1"/>
- <image id="search"/>
-
-
Style Sheet:
- #image1 {
-   list-style-image: url("chrome://findfile/skin/banner.jpg");
- }
-
- #search {
-   list-style-image: url("http://example.com/images/search.png");
- }
-
-

Ces images proviennent du répertoire chrome, dans le thème du paquetage findfile. Comme les images varient selon le thème graphique, vous devez normalement mettre les images dans le répertoire skin.

-
-

Dans la section suivante, nous apprendrons comment ajouter des contrôles de saisie à une fenêtre.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_plus_d'\303\251l\303\251ments/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_plus_d'\303\251l\303\251ments/index.html" deleted file mode 100644 index d7ca633691..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/ajouter_plus_d'\303\251l\303\251ments/index.html" +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Ajouter plus d'éléments -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Ajouter_plus_d'éléments -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Adding_More_Elements ---- -

 

-
-

« PrécédentSuivant »

-
-

Nous allons conclure ce chapitre en ajoutant des boîtes sur notre fenêtre de recherche de fichiers.

-
-

Ajout d'éléments à notre exemple de recherche de fichiers

-

Nous allons ajouter maintenant des éléments à notre boîte de dialogue de recherche de fichiers. Premièrement, nous allons ajouter la possiblité de faire une recherche sur d'autres informations, comme la taille et la date du fichier.

-
<hbox>
-  <menulist id="searchtype">     <menupopup>       <menuitem label="Nom"/>       <menuitem label="Taille"/>       <menuitem label="Date de modification"/>     </menupopup>   </menulist>   <spacer style="width: 10px;"/>   <menulist id="searchmode">     <menupopup>       <menuitem label="Est"/>       <menuitem label="N'est pas"/>     </menupopup>   </menulist>   <spacer style="width: 10px;"/>
-  <textbox id="find-text" flex="1" style="min-width: 15em;"/>
-</hbox>
-
-
- Image:xultu_boxfinal1.png
-

Deux listes déroulantes ont été ajoutées à la boîte de dialogue. Un espacement (spacer) a été inséré entre chaque élément pour les séparer. Ces espacements ont une taille explicite de 10 pixels chacun. Vous noterez que si la fenêtre est redimensionnée, le champ de saisie s'agrandit mais pas les autres composants. Vous noterez également que le libellé a été enlevé.

-

Si vous redimensionnez la fenêtre verticalement, les éléments ne changeront pas de taille. C'est parce qu'ils sont à l'intérieur de boîtes horizontales. Ce serait mieux si les boutons « Rechercher » et « Annuler » restaient toujours en bas de la fenêtre. Il est facile de le faire en ajoutant un spacer entre les deux boîtes horizontales.

-
<spacer style="height: 10px"/>
-<hbox>
-  <menulist id="searchtype">
-    <menupopup>
-      <menuitem label="Nom"/>
-      <menuitem label="Taille"/>
-      <menuitem label="Date de modification"/>
-    </menupopup>
-  </menulist>
-  <spacer style="width: 10px;"/>
-  <menulist id="searchmode">
-    <menupopup>
-      <menuitem label="Est"/>
-      <menuitem label="N'est pas"/>
-    </menupopup>
-  </menulist>
-  <spacer style="width: 10px;"/>
-  <textbox id="find-text" flex="1" style="min-width: 15em;"/>
-</hbox>
-
-<spacer style="height: 10px" flex="1"/>
-
-<hbox>
-
-

Maintenant, quand la boîte de dialogue est redimensionnée, les deux boutons resteront en place tout en bas de la boîte de dialogue. Le premier spacer ajoute un espacement entre le titre du libellé et les éléments des critères de recherche.

-

Il serait plus joli d'avoir une bordure autour des critères de recherche. Il y a deux moyens pour le faire. Vous pouvez utiliser la propriété CSS border ou vous pouvez utiliser l'élément groupbox. La première méthode nécessite que nous appliquions le style sur la boîte elle-même. Nous utiliserons plutôt l'autre méthode. Un élément groupbox a l'avantage de dessiner une boîte avec un joli effet d'incrustation, en adéquation avec le thème courant.

-

Changeons maintenant la boîte box en groupbox :

-
<groupbox orient="horizontal">
-  <caption label="Critères de recherche"/>
-  <menulist id="searchtype">
-  .
-  .
-  .
-  <spacer style="width: 10px;"/>
-  <textbox id="find-text" flex="1" style="min-width: 15em;"/>
-</groupbox>
-
-

Source Voir

-

Image:xultu_boxfinal2.png

-

Il reste d'autres problèmes cosmétiques. Nous pourrions avoir un groupbox qui s'étend verticalement vers le bas de la boîte. Mais aussi, nous pourrions modifier quelques marges afin de mieux positionner les éléments.

-
-
-

Nous verrons dans la suite comment créer des piles.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/arbres/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/arbres/index.html deleted file mode 100644 index e566557c9a..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/arbres/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Arbres -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Arbres -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Trees ---- -

 

-
-

« PrécédentSuivant »

-
-

XUL fournit un moyen de créer des listes tabulaires ou hiérarchiques en utilisant un arbre.

-

L'élément tree

-

Un des éléments les plus complexes de XUL est l'arbre. Un arbre peut être utilisé pour afficher des lignes de texte en colonnes. Il peut servir pour des listes tabulaires ou arrangées hiérarchiquement. Un arbre permet également à l'utilisateur de réarranger, redimensionner et masquer individuellement certaines colonnes. Les messages dans une application courrier ou les marque-pages dans Mozilla sont des exemples d'utilisation d'arbres.

-

D'une certaine manière, un arbre a des similitudes avec une boîte de liste listbox. Tous deux peuvent être utilisés pour créer des tableaux de données avec des lignes et des colonnes multiples, et ils peuvent contenir des en-têtes de colonnes. Les arbres supportent également les lignes imbriquées, alors que les boîtes de liste ne le peuvent pas. Toutefois, les boîtes de liste peuvent contenir n'importe quel type de contenu, alors que les arbres ne peuvent contenir que du texte et des images (par le biais de fonctionnalités avancées, des barres de progression et cases à cocher peuvent également être mis dans un arbre).

-

Un arbre comporte deux parties : un ensemble de colonnes et le corps de l'arbre.

- -

L'arbre est un élément XUL particulier dans le sens où son corps est constitué d'un seul composant graphique qui dessine toutes les données dans l'arbre. Cette définition contraste avec la boîte de liste où des balises individuelles listitem et listcell sont utilisées pour spécifier chaque ligne dans l'élément listbox. Dans un arbre, toutes les données à afficher sont fournies par un objet séparé, appelé la vue d'arbre. Lorsqu'une cellule doit être affichée, le composant graphique de l'arbre fait appel à cet objet de vue d'arbre pour déterminer ce qui doit être affiché, et le dessine ensuite dans l'arbre. L'arbre est suffisamment intelligent pour ne solliciter les informations de la vue que pour les lignes qui ont besoin d'être affichées. Ainsi, l'affichage est optimisé par le chargement des données le nécessitant réellement. Par exemple, un arbre peut contenir des milliers de lignes, la plupart d'entre elles étant en dehors du cadre de l'arbre, cachées à la vue. Ainsi, l'arbre peut contenir un grand nombre de lignes sans rien perdre en performance. Bien entendu, ceci est indépendant de la performance de l'objet de vue lui-même.

-

L'objet vue d'arbre implémente l'interface nsITreeView. Cette interface contient trente propriétés et fonctions que vous pourrez implémenter. Ces fonctions seront appelées par l'arbre, au besoin, pour récupérer les données et les états de l'arbre. Par exemple, la fonction getCellText() sera appelée pour obtenir le libellé d'une cellule particulière dans l'arbre.

-

L'utilisation d'une vue a l'avantage de vous permettre de stocker vos données d'une façon plus adaptée à l'arbre, ou de charger les données sur demande seulement lorsque les lignes sont affichées. Elle offre une plus grande souplesse dans l'utilisation des arbres.

-

Naturellement, devoir implémenter une vue d'arbre avec une trentaine de propriétés et méthodes peut être très encombrant, surtout pour des arbres simples. Fort heureusement, XUL fournit un ensemble d'implémentations natives réalisant le gros du travail pour vous. Pour la plupart des arbres, surtout lorsque vous débutez, vous utiliserez un de ces types natifs. Cependant, vous pouvez créer également une vue d'arbre entièrement de A à Z. Dans ce cas, vous devrez stocker vos données dans un tableau ou une structure JavaScript, ou les charger à partir d'un fichier XML.

-

Comme le corps de l'arbre dans sa totalité est un unique élément graphique, vous ne pouvez pas modifier le style des lignes ou des cellules individuellement de manière classique. En fait, il n'existe pas d'éléments affichant des cellules individuelles comme il en existe avec les boîtes de liste. À la place, tout l'affichage est effectué par le corps de l'arbre grâce aux données fournies par la vue de l'arbre. Ce point important peut dérouter bien des développeurs XUL. Pour modifier l'apparence d'une cellule d'un arbre, la vue doit associer un jeu de mots clefs pour une ligne et une cellule. Une syntaxe CSS spéciale est employée entre les composants de styles du corps d'un arbre grâce à ces mots clefs. Dans un sens, le mécanisme est similaire aux classes CSS. L'application d'un style à un arbre sera détaillée dans une section ultérieure.

-

Les éléments d'arbre

-

Les arbres sont créés avec l'élément tree qui sera décrit dans les prochaines sections. Il existe également deux éléments définissant l'affichage des colonnes dans l'arbre.

-
tree 
L'élément entourant d'un arbre
treecols 
L'élément initialisant une série de treecol
treecol 
Cet élément déclare une colonne d'arbre. Avec l'utilisation de cet élément, vous pouvez spécifier des informations supplémentaires sur le tri des données en colonne ou encore la possibilité ou non pour l'utilisateur de redimensionner les colonnes. Vous devez toujours placer un attribut id sur une colonne, car Mozilla utilise cet identifiant pour les colonnes à réarranger ou à masquer. Il n'est plus nécessaire sous les versions 1.8 et suivantes de Mozilla, mais c'est une bonne habitude à conserver.
treechildren 
Cet élément contient le corps principal de l'arbre, là où les lignes individuelles de données seront affichées
-
-

Voici un exemple d'arbre avec deux colonnes :

-

Exemple 1 : Source Voir

-
<tree flex="1">
-
-  <treecols>
-    <treecol id="nameColumn" label="Nom" flex="1"/>
-    <treecol id="addressColumn" label="Adresse" flex="2"/>
-  </treecols>
-
-  <treechildren/>
-
-</tree>
-
-

Tout d'abord, l'ensemble du tableau est entouré avec l'élément tree. Il déclare un élément qui servira de tableau ou d'arbre. Comme avec les tables HTML, les données d'un arbre sont toujours organisées en lignes. Les colonnes sont spécifiées grâce à la balise treecols.

-

Vous pouvez mettre dans un arbre autant de colonnes que vous le souhaitez. Comme pour les boîtes de listes, une ligne d'en-tête apparaîtra avec les libellés des colonnes. Un menu déroulant apparaîtra dans le coin supérieur droit de l'arbre et permettra à l'utilisateur d'afficher ou de masquer les colonnes individuellement. Chaque colonne est créée avec l'élément treecols. Vous pouvez définir le libellé d'en-tête en utilisant l'attribut label. Vous pouvez également rendre vos colonnes flexibles si votre arbre l'est aussi, ainsi les colonnes s'ajusteront en fonction de l'arbre. Dans cet exemple, la seconde colonne sera deux fois plus large que la première. Toutes les colonnes doivent être définies à l'intérieur de l'élément treecols.

-

Dans ce cas, nous n'avons pas indiqué à la vue les données de l'arbre, seuls les en-têtes de colonnes et un arbre vide seront visibles. Vous pouvez redimensionner la fenêtre, mais rien n'apparaîtra puisqu'il n'y a aucune donnée à afficher. Puisque la flexibilité de l'arbre a été spécifiée, son corps s'ajustera à l'espace disponible. La flexibilité d'un arbre est couramment appliquée, car les données de l'arbre sont souvent les informations les plus significatives affichées, donc il est logique que l'arbre puisse ajuster sa dimension. Toutefois, vous pouvez spécifier un nombre de lignes à afficher dans l'arbre en affectant l'attribut rows sur l'élément tree. Notez que cet attribut indique le nombre de lignes qui seront affichées dans l'interface utilisateur et non le nombre de lignes de données. Le nombre total de lignes de données est fourni par la vue d'arbre. S'il y a trop de lignes de données à afficher dans l'arbre, une barre de défilement apparaîtra pour permettre à l'utilisateur de visualiser le reste. Si vous ne spécifiez aucun attribut rows, la valeur par défaut sera '0' signifiant qu'aucune ligne ne s'affichera. Dans ce cas, vous devrez rendre votre arbre flexible. Si votre arbre est flexible, il n'a pas besoin d'un attribut rows puisqu'il s'ajustera toujours à l'espace disponible.

-

Le contenu de la vue d'arbre

-

Nous avons vu que les données à afficher dans un arbre proviennent d'une vue et non de balises XUL, en passant par une construction interne de la vue d'arbre à partir des balises XUL. Ce mécanisme peut paraître légèrement confus. Retenez simplement que la construction des vues d'arbre emploie une série de balises servant à définir l'information sur les données dans l'arbre. Les éléments suivants sont utilisés :

-
treeitem 
Il contient une unique ligne de niveau supérieur et tous ses descendants. Il sert également d'item pouvant être sélectionné par l'utilisateur. La balise treeitem entoure toute une ligne en permettant de la sélectionner entièrement.
treerow 
Une seule ligne d'un arbre devant être placée à l'intérieur d'une balise treeitem.
treecell 
Une seule cellule d'un arbre. Cet élément est placé à l'intérieur d'un élément treerow.
-
-

Par convention, ces balises peuvent être placées directement à l'intérieur de la balise treechildren, imbriquées dans l'ordre mentionné ci-dessus. Ces balises définissent les données à afficher dans le corps de l'arbre. Dans ce cas, l'arbre utilise la construction interne de la vue d'arbre, appelée le contenu de la vue d'arbre, qui utilise les libellés et les valeurs spécifiés sur ces éléments comme données pour l'arbre. Lorsque l'arbre a besoin d'afficher une ligne, il demande à la vue d'arbre le libellé de la cellule en appelant la fonction getCellText() de la vue qui, dans la continuité, obtient la donnée de l'élément treecell correspondant.

-

Cependant, les trois éléments listés ci-dessus ne sont pas affichés directement. Ils ne sont utilisés que comme source de données pour la vue. Ainsi, seuls des attributs utiles sont appliqués sur l'élément treeitem et les éléments associés. Par exemple, vous ne pouvez pas modifier l'apparence des lignes d'un arbre en utilisant un attribut style ou d'autres propriétés CSS, et les fonctionnalités existantes pour les boîtes, telles que la flexibilité et l'orientation, ne peuvent pas être employées.

-

En fait, à part quelques attributs spécifiques aux arbres, les seuls qui auront un effet sont l'attribut label pour définir un texte libellé d'une cellule et l'attribut src pour définir une image. Toutefois, dans les sections ultérieures, nous verrons des moyens spéciaux de modifier le style d'un arbre et d'appliquer d'autres fonctionnalités.

-

De même, les événements ne sont pas générés par un élément treeitem et ses enfants ; en revanche, ils seront générés par l'élément treechildren.

-

Le fait que les éléments treeitem soient si différents des autres éléments XUL est une source classique de confusion pour les développeurs XUL. Essentiellement, le contenu de la vue d'arbre est une vue où les données des cellules sont fournies à partir des balises placées à l'intérieur de l'arbre. Naturellement, si vous utilisez un type différent de vue, les données seront fournies par une autre source, et il n'y aura aucun élément treeitem du tout.

-

Commençons par regarder comment créer un arbre simple avec des colonnes multiples en utilisant la vue d'arbre de contenu. Il pourrait servir à créer une liste de messages mél (mails). Il y aura plusieurs colonnes, telles que l'expéditeur et le sujet.

-

Exemple avec treechildren

-

Exemple 2: Source Voir

-

Image:xultu_trees1.png

-
<tree flex="1">
-
-  <treecols>
-    <treecol id="sender" label="Expéditeur" flex="1"/>
-    <treecol id="subject" label="Sujet" flex="2"/>
-  </treecols>
-
-  <treechildren>
-    <treeitem>
-      <treerow>
-        <treecell label="joe@somewhere.com"/>
-        <treecell label="Plans Top secret"/>
-      </treerow>
-    </treeitem>
-    <treeitem>
-      <treerow>
-        <treecell label="mel@whereever.com"/>
-        <treecell label="Invitation à déjeuner"/>
-      </treerow>
-    </treeitem>
-  </treechildren>
-
-</tree>
-
-

Comme vous pouvez le voir sur cette image, l'arbre a été créé avec deux lignes de données.

-

Cet arbre a deux colonnes dont la seconde occupe plus de place que la première. Vous rendrez généralement les colonnes flexibles. Vous pouvez également imposer les largeurs grâce à l'attribut width. Vous devez inclure le même nombre d'éléments treecol qu'il y a de colonnes dans l'arbre. Dans le cas contraire, des choses étranges pourraient se produire.

-

Les en-têtes sont créés automatiquement. Le bouton situé dans le coin supérieur droit sert à afficher ou à masquer les colonnes. Vous pouvez placer un attribut hidecolumnpicker sur l'élément tree et le définir à 'true' si vous désirez masquer ce bouton. Si ce bouton est masqué, l'utilisateur ne sera pas en mesure de masquer des colonnes.

-

Assurez-vous d'avoir défini un attribut id sur chaque colonne, sinon les actions de masquage et d'affichage ne fonctionneront pas avec toutes les versions de Mozilla.

-

L'élément treechildren entoure toutes les lignes. Les lignes individuelles à l'intérieur du corps peuvent contenir d'autres lignes. Pour l'arbre le plus simple, chaque ligne est créée avec les éléments treeitem et treerow. L'élément treerow entoure toutes les cellules d'une ligne, tandis que l'élément treeitem entoure une ligne et tous ses enfants. Les arbres avec des lignes imbriquées seront décrits dans la section suivante.

-

Dans les cellules, vous placerez les cellules individuelles. Elles sont créées avec l'élément treecell. Vous pouvez définir un texte dans une cellule en utilisant l'attribut label. Le premier élément treecell d'une ligne détermine le contenu qui apparaîtra dans la première colonne, le deuxième élément treecell détermine le contenu qui apparaîtra dans la deuxième colonne, et ainsi de suite.

-

L'utilisateur peut sélectionner les items de l'arbre en cliquant sur eux avec la souris, ou en mettant en surbrillance avec le clavier. Il peut en sélectionner plusieurs en maintenant la touche Maj ou Ctrl appuyée et en cliquant sur d'autres lignes. Pour désactiver la sélection multiple, placez un attribut seltype sur l'élément tree avec la valeur 'single'. Ainsi, l'utilisateur ne pourra sélectionner qu'une seule ligne à la fois.

-
-

Ajout d'un arbre sur notre exemple de recherche de fichiers

-

Ajoutons un arbre à notre exemple de recherche de fichiers dans lequel les résultats de la recherche seront affichés. L'arbre utilisera une vue de contenu d'arbre. Le code suivant doit être ajouté à la place de la balise iframe.

-

Exemple : Source Voir

-
<tree flex="1">
<treecols>
<treecol id="name" label="Nom de fichier" flex="1"/>
<treecol id="location" label="Emplacement" flex="2"/>
<treecol id="size" label="Taille" flex="1"/>
</treecols>

<treechildren>
<treeitem>
<treerow>
<treecell label="mozilla"/>
<treecell label="/usr/local"/>
<treecell label="2520 bytes"/>
</treerow>
</treeitem>
</treechildren>
</tree>
- -<splitter collapse="before" resizeafter="grow"/> -
-

Nous avons ajouté un arbre avec les trois colonnes 'Nom de fichier', 'Emplacement' et 'Taille'. La deuxième colonne sera deux fois plus large grâce à une flexibilité plus grande. Une seule ligne a été ajoutée pour les besoins de la démonstration de l'apparence du tableau avec une ligne. Dans une implémentation réelle, les lignes seront ajoutées par un script à l'issue de la recherche, ou une vue personnalisée sera créée pour contenir les données.

-
-
-

Nous verrons ensuite comment créer des arbres plus complexes.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/arbres_et_gabarits/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/arbres_et_gabarits/index.html deleted file mode 100644 index 34bbdd2a6c..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/arbres_et_gabarits/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Arbres et Gabarits -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Arbres_et_Gabarits -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Trees_and_Templates ---- -

 

-
-

« PrécédentSuivant »

-
-

Nous allons voir maintenant comment utiliser un gabarit avec un arbre.

-

Ajout de sources de données aux arbres

-

Avec un arbre, vous utiliserez souvent un gabarit pour construire son contenu, pour manipuler un grand volume de données hiérarchisées. L'utilisation d'un gabarit avec un arbre est très proche au niveau de la syntaxe aux autres éléments. Vous avez besoin d'ajouter un attribut datasources et ref à la balise tree, ce qui spécifie la source des données et le nœud racine à afficher. De nombreuses règles peuvent être utilisées pour indiquer différents contenus pour différents types de données.

-

L'exemple suivant utilise l'historique comme source de données :

-
<tree datasources="rdf:history" ref="NC:HistoryByDate"
-          flags="dont-build-content">
-
-

Comme il est décrit dans la section précédente, l'arbre peut utiliser un constructeur d'arbre pour la génération du gabarit à la place du constructeur normal de contenu. Les éléments ne seront pas créés pour chacune des lignes dans l'arbre, afin de le rendre plus performant. Lorsque l'attribut flags a pour valeur 'dont-build-content', comme dans l'exemple ci-dessus, il indique que le constructeur de l'arbre doit être utilisé. Si l'attribut n'est pas renseigné, le constructeur de contenu sera utilisé. Vous pouvez voir la différences en utilisant l'inspecteur DOM de Mozilla sur un arbre avec, puis sans l'attribut.

-

Si vous utilisez le constructeur normal à la place, notez que le contenu ne sera pas construit avant qu'il soit nécessaire. Avec les arbres hiérarchiques, les enfants ne sont pas générés avant que le nœud parent ne soit ouvert par l'utilisateur.

-

Dans le gabarit, il n'y aura qu'une cellule treecell pour chaque colonne dans l'arbre. Les cellules devront avoir un attribut label afin de mettre un libellé à la cellule. Normalement, une propriété RDF se charge de récupérer le libellé à partir de la source de données.

-

Exemple d'arbre construit par un gabarit

-

L'exemple suivant montre un arbre construit à partir d'un gabarit, dans ce cas le système de fichier.

-

Exemple 1 : Source

-
<tree id="my-tree" flex="1"
-       datasources="rdf:files" ref="file:///" flags="dont-build-content">
-  <treecols>
-    <treecol id="Name" label="Nom" primary="true" flex="1"/>
-    <splitter/>
-    <treecol id="Date" label="Date" flex="1"/>
-  </treecols>
-
-    <template>
-      <rule>
-        <treechildren>
-          <treeitem uri="rdf:*">
-            <treerow>
-              <treecell label="rdf:http://home.netscape.com/NC-rdf#Name"/>
-              <treecell label="rdf:http://home.netscape.com/WEB-rdf#LastModifiedDate"/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </rule>
-    </template>
-</tree>
-
-

Ici, un arbre est créé avec deux colonnes, pour le nom et la date d'un fichier. L'arbre doit afficher une liste de fichiers situés dans le répertoire racine. Une seule règle est utilisée, mais vous pouvez en ajouter d'autres si vous en avez besoin. Comme avec les autres gabarits, l'attribut uri d'un élément indique où commencer pour générer du contenu. Les deux cellules puisent le nom et la date dans la source et place les valeurs dans le libellé de la cellule.

-

Cet exemple montre pourquoi l'attribut uri devient utile. Notez comment il a été placé dans le treeitem dans l'exemple, même si ce n'est pas un descendant direct de l'élément rule. Nous avons besoin de mettre cet attribut seulement sur les éléments que nous voulons répéter pour chaque ressource. Comme nous ne voulons pas des éléments treechildren multiples, l'attribut est placé ailleurs. Nous le mettons plutôt dans l'élément treeitem. En fait, les éléments à l'extérieur (ou au-dessus) de l'élément qui a l'attribut uri ne sont pas dupliqués tandis que les éléments avec l'attribut uri et les éléments à l'intérieur sont répétés pour chaque ressource.

-
Image:xultu_rdfoutl1.jpg
-

Comme un constructeur d'arbre est utilisé et non un constructeur de contenu, la structure des éléments dans l'exemple ci-dessus doit être comme indiqué, avec l'élément treechildren à l'intérieur de rule. Bien que le constructeur d'arbres ne génère pas ces éléments, cette structure est nécessaire pour déterminer comment les générer correctement.

-

Notez dans l'image que des éléments fils additionnels ont été ajoutés automatiquement sous les éléments du niveau supérieur. XUL sait comment ajouter des éléments fils quand les modèles ou règles contiennent des éléments arbre ou menu. Il génère alors les éléments d'arbre imbriqués selon les données disponibles dans le RDF.

-

Une partie intéressante des sources de données RDF est que les valeurs sont déterminées seulement quand les données sont requises. Les valeurs qui sont plus profondes dans la hiérarchie de ressource ne sont pas déterminées jusqu'à ce que l'utilisateur atteigne ce nœud dans l'arbre. Ce mécanisme devient utile pour certaines sources où les données sont déterminées dynamiquement.

-

Trier les colonnes

-

Si vous essayez l'exemple précédent, vous pouvez noter que la liste de dossiers n'est pas triée. Les arbres qui produisent leurs données à partir d'une source ont la capacité facultative de trier leurs données. Vous pouvez trier de façon croissante ou décroissante sur n'importe quelle colonne. L'utilisateur peut changer la colonne de tri et la direction de tri en cliquant sur les en-têtes de colonne. Ce dispositif de tri n'est pas disponible pour des arbres dont le contenu est statique, bien que vous puissiez écrire un script pour trier ces données.

-

Le tri implique trois attributs, qui doivent être placés sur les colonnes. Le premier attribut, sort, doit être placé sur une propriété de RDF qui est employée alors comme critère de tri. Habituellement, c'est la même que celle utilisée pour le libellé de la cellule de cette colonne. Si vous le placez sur une colonne, les données seront triées dans cette colonne. L'utilisateur peut changer la direction de tri en cliquant sur l'en-tête de colonne. Si vous ne placez pas l'attribut sort sur une colonne, les données ne pourront pas être triées par cette colonne.

-

L'attribut sortDirection (notez la casse mixte) est utilisé pour définir la direction dans laquelle la colonne sera triée par défaut. Trois valeurs sont possibles :

-
ascending 
les données sont affichées par ordre croissant.
descending 
les données sont affichées par ordre décroissant.
natural 
les données sont affichées dans le sens "naturel", c'est-à-dire l'ordre dans lequel elles sont apparaissent dans la source RDF.
-
-

Le dernier attribut, sortActive, doit être défini à 'true' sur une seule colonne, celle qui sera triée par défaut.

-

Bien que le tri fonctionnera correctement avec seulement ces attributs, vous pouvez également utiliser la classe de style sortDirectionIndicator sur une colonne qui peut être triée. Un petit triangle apparaîtra dans l'en-tête de colonne et indiquera le sens du tri. Sans cela, l'utilisateur pourra toujours trier les colonnes mais il n'aura pas d'indication sur la colonne triée.

-

L'exemple suivant modifie les colonnes de l'exemple précédent pour inclure les fonctionnalités supplémentaires :

-
<treecols>
-  <treecol id="Name" label="Nom" flex="1" primary="true"
-            class="sortDirectionIndicator" sortActive="true"
-            sortDirection="ascending"
-            sort="rdf:http://home.netscape.com/NC-rdf#Name"/>
-  <splitter/>
-  <treecol id="Date" label="Date" flex="1" class="sortDirectionIndicator"
-           sort="rdf:http://home.netscape.com/WEB-rdf#LastModifiedDate"/>
-</treecols>
-
-

L'état persistant des colonnes

-

Une chose supplémentaire que vous voudrez faire est de rendre persistant la colonne qui est actuellement triée, ainsi cet état est mémorisé entre chaque session. Pour ce faire, nous utilisons l'attribut persist sur chaque élément treecol. Il peut être utile de rendre persistant cinq attributs : la taille de la colonne, l'ordre des colonne, la visibilité de la colonne, quelle colonne est actuellement triée et dans quel ordre. L'exemple suivant montre une simple colonne :

-
<treecol id="Date" label="Date" flex="1"
-             class="sortDirectionIndicator"
-             persist="width ordinal hidden sortActive sortDirection"
-             sort="rdf:http://home.netscape.com/WEB-rdf#LastModifiedDate"/>
-
-

D'autres détails sur l'attribut persist seront décrits dans une section ultérieure.

-

Attributs supplémentaires pour les règles

-

Deux attributs supplémentaires peuvent être ajoutés sur l'élément rule, lui permettant d'appliquer des correspondances dans certaines circonstances. Les deux sont des booléens.

-
iscontainer 
Si cet attribut est mis à 'true', alors la règle s'appliquera sur toutes les ressources qui peuvent avoir des enfants. Par exemple, nous pouvons appliquer cette règle pour récupérer les dossiers des marque-pages. Il est utile car la source de données n'a pas besoin d'inclure un attribut spécial pour l'indiquer.
isempty 
Si cet attribut est mis à 'true', alors la règle s'appliquera sur toutes les ressources qui n'ont pas d'enfants.
-
-

Une ressource pourrait être un conteneur et être vide en même temps. Toutefois, c'est différent pour une ressource qui n'est pas un conteneur. Par exemple, un dossier de marque-pages est un conteneur mais il peut avoir ou ne pas avoir d'enfants. Cependant, un simple marque-page ou un séparateur n'est pas un conteneur.

-

Vous pouvez combiner ces deux éléments avec d'autres attributs de critères pour des règles plus spécifiques.

-
-

Dans la section suivante, nous verrons quelques unes des sources de données fournies par Mozilla.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/assistant_avan\303\247\303\251/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/assistant_avan\303\247\303\251/index.html" deleted file mode 100644 index 1c1073bd15..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/assistant_avan\303\247\303\251/index.html" +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Assistant avançé -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Assistant_avançé -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/More_Wizards ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section décrit quelques fonctionnalités supplémentaires sur les assistants.

-

Une navigation plus complexe

-

Normalement, un assistant affiche chaque page dans l'ordre où vous les placez dans le fichier XUL. Dans certains cas cependant, vous pouvez vouloir que les pages de l'assistant apparaissent en fonction des choix effectués par l'utilisateur sur les pages précédentes.

-

Dans ce cas, placez un attribut pageid sur chacune des pages. Un identifiant devra être placé sur chaque page. Ensuite, pour naviguer d'une page à l'autre, utilisez une des deux méthodes suivantes :

-
  1. Affectez à l'attribut next de chaque page la valeur de l'identifiant de la page qui doit la suivre. Vous pouvez changer ces attributs comme vous le souhaitez pour naviguer vers d'autres pages.
  2. Appelez la méthode goTo() de l'assistant. Elle prend comme unique argument l'identifiant de la page suivante. Vous pouvez appeler cette méthode dans les gestionnaires onpageadvanced ou onwizardnext. Dans ce cas, n'oubliez pas de retourner la valeur 'false', car vous avez déjà changé la page par vous-même. Notez que la méthode goTo() charge une nouvelle page, par conséquent les événements liés sont lancés. Vous devez donc vous assurer d'avoir prévu ce cas.
  3. -
-

Par exemple, nous avons ici un ensemble de pages d'assistant (le contenu interne a été omis) :

-
<wizardpage pageid="type" next="font">
-<wizardpage pageid="font" next="done">
-<wizardpage pageid="color" next="done">
-<wizardpage pageid="done">
-
- -

Un script ajustera la valeur de l'attribut next dès qu'il sera nécessaire d'aller sur la page identifiée 'color'.

-

Fonctions d'assistant

-

L'assistant fonctionne presque comme un panneau d'onglets, sauf que les onglets ne sont pas affichés et que l'utilisateur navigue entre les pages en utilisant les boutons de bas de page. Comme toutes les pages font parties d'un même fichier, toutes les valeurs des champs sur toutes les pages sont conservées. Par conséquent, il est inutile de sauvegarder ou charger ces informations entre les pages.

-

Cependant, vous pourriez vouloir faire quelques validations sur chaque champ de chaque page. Pour ce faire, utilisez les gestionnaires décrits dans la section précédente. Si un champ est invalide, vous pouvez afficher un message d'alerte. Dans certains cas, il serait plus judicieux de désactiver le bouton 'Suivant' jusqu'à ce qu'une valeur valide soit saisie.

-

L'assistant possède une propriété canAdvance qui, quand elle est mise a 'true', indique que le bouton 'Suivant' doit être actif. Si elle a la valeur 'false', le bouton 'Suivant' est désactivé. Vous pouvez changer cette propriété en fonction de la validité des données saisies.

-

Dans l'exemple suivant, l'utilisateur doit entrer un code secret dans le champ de saisie sur la première page de l'assistant. La fonction checkCode() est appelée dés que la première page est affichée comme indiqué par l'attribut onpageshow. Elle est aussi appelée dès qu'une touche est pressée dans le champ textbox, pour déterminer si le bouton 'Suivant' doit être à nouveau actif.

-

Exemple d'assistant

-

Exemple 1 : Source

-
<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<wizard id="theWizard" title="Code secret de l'assistant"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<script>
-function checkCode(){
-  document.getElementById('theWizard').canAdvance = (document.getElementById('secretCode').value == "cabbage");
-}
-</script>
-
-  <wizardpage onpageshow="checkCode(); return true;">
-       <label value="Saisir le code secret:"/>
-       <textbox id="secretCode" onkeyup="checkCode();"/>
-  </wizardpage>
-
-  <wizardpage>
-       <label value="Le code est correct."/>
-  </wizardpage>
-
-</wizard>
-
-

Il existe aussi une propriété correspondante canRewind que vous pouvez utiliser pour activer ou désactiver le bouton 'Précédent'. Les deux propriétés sont ajustées automatiquement dès que vous changez de page. Par conséquent, le bouton 'Précédent' sera désactivé sur la première page, vous n'avez pas à le faire.

-

Une autre propriété utile de l'assistant est currentPage qui donne une référence à la page wizardpage actuellement affichée. Vous pouvez aussi changer la page courante en modifiant cette propriété. Si vous modifiez sa valeur, les différents événements de changement de page seront invoqués.

-
-

Ensuite, nous allons voir comment utiliser les overlays pour gérer du contenu.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/autres_caract\303\251ristiques_des_arbres/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/autres_caract\303\251ristiques_des_arbres/index.html" deleted file mode 100644 index 5852dbcfd7..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/autres_caract\303\251ristiques_des_arbres/index.html" +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Autres caractéristiques des arbres -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Autres_caractéristiques_des_arbres -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/More_Tree_Features ---- -

 

-
-

« PrécédentSuivant »

-
-

Nous allons voir ici des caractéristiques supplémentaires sur les arbres.

-

Arbres hiérarchiques

-

L'élement tree est aussi utilisé pour créer des listes hiérarchiques, comme on en trouve dans un gestionnaire de fichiers ou dans les listes de marque-pages d'un navigateur. La vue d'arbre a plusieurs fonctions qui spécifient la hiérarchie des éléments dans un arbre. Chaque élément dans l'arbre possède un niveau commençant à 0. Les éléments les plus élevés dans l'arbre auront un niveau à 0, Les fils de ces éléments auront un niveau à 1, les fils en dessous auront un niveau à 2, et ainsi de suite. L'arbre demandera l'affichage pour le niveau de chaque élément afin de déterminer comment dessiner les rangées.

-

L'arbre dessinera les flèches d'ouverture et de fermeture pour ouvrir et fermer un élément parent ainsi que les lignes reliant les fils à leurs parents. L'arbre se chargera aussi de dessiner les rangées avec le niveau correct d'indentation. Cependant, la vue devra s'assurer de conserver l'état des niveaux de chaque ligne si nécessaire. Ce travail peut parfois être un peu délicat, mais heureusement, le module natif de vue d'arbre réalise tout le travail difficile pour nous.

-

Pour créer un ensemble de rangées imbriquées, tout ce que nous devons faire est d'ajouter un second treechildren élément à l'intérieur du parent treeitem. Vous pouvez ensuite ajouter des éléments à l'intérieur pour spécifier les rangées filles d'un élément. Ne mettez pas d'élément treechildren à l'intérieur de treerow car ceci ne marchera pas.

-

Vous pouvez répéter ce processus pour créer les arbres profondément imbriqués. Essentiellement, un élément treeitem peut contenir soit une simple ligne déclarée avec l'élément treerow, soit un ensemble de lignes déclarées avec l'élément treechildren.

-

Il y a deux autres choses à faire pour vous assurer que la hiérarchie fonctionne correctement. Premièrement, vous devez marquer l'élément treeitem possédant des fils comme conteneur. Il vous suffit d'ajouter l'attribut container comme ceci :

-
<treeitem container="true"/>
-

Cet attribut permet à l'utilisateur de double-cliquer sur le treeitem pour déplier ou replier les lignes intérieures. Vous pouvez faire que les lignes filles soient initialement affichées en ajoutant l'attribut open. Quand l'utilisateur déplie ou replie le parent, la fonction toggleOpenState de la vue est appelée pour basculer l'item de l'état ouvert vers l'état fermé. Pour une vue d'arbre de type contenu, il sera ajouté un attribut open pour refleter l'état courant.

-

Le second changement vous impose de mettre l'attribut primary sur la première colonne. Il fait apparaître un petit triangle ou un signe + devant les cellules dans cette colonne pour indiquer les cellules pouvant être dépliées. De plus, les lignes filles sont indentées. Notez aussi que l'utilisateur ne peut pas cacher cette colonne via le petit menu déroulant à droite des colonnes.

-

Exemple d'arbre hiérarchique

-

Voici un exemple simple :

-

Exemple 1: Source Voir

-
Image:xultu_advtrees1.png
-
<tree rows="6">
-  <treecols>
-      <treecol id="firstname" label="Prénoms" primary="true" flex="3"/>
-      <treecol id="lastname" label="Noms" flex="7"/>
-  </treecols>
-
-  <treechildren>
-    <treeitem container="true" open="true">
-      <treerow>
-        <treecell label="Personnes"/>
-      </treerow>
-
-      <treechildren>
-        <treeitem>
-          <treerow>
-            <treecell label="Bob"/>
-            <treecell label="Carpenter"/>
-          </treerow>
-        </treeitem>
-        <treeitem>
-          <treerow>
-            <treecell label="Jerry"/>
-            <treecell label="Hodge"/>
-          </treerow>
-        </treeitem>
-      </treechildren>
-    </treeitem>
-  </treechildren>
-</tree>
-
-

Cet exemple crée un arbre hiérarchique. Comme on peut le voir sur l'image, un petit signe plus ou moins (souvent appelé « twisty ») est apparu sur la première ligne, indiquant qu'elle contient des lignes filles. En double-cliquant sur la ligne, l'utilisateur ouvre ou ferme la liste. Les lignes filles sont indentées. Notez comment la ligne « Personnes » n'a besoin que d'une colonne.

-

L'élément treeitem externe contient un seul élément treerow et un élément treechildren. Le premier crée la donnée pour la ligne parente et le deuxième contient les items fils.

-

Vous pouvez imbriquer autant de lignes que vous le désirez. Souvenez-vous que vous devez utiliser l'attribut container sur les lignes qui ont des lignes filles. La simple présence de lignes filles n'est pas suffisante pour l'indiquer, car vous pourriez avoir un conteneur sans enfants mais qui devrait quand même être traité comme un conteneur. Par exemple, un répertoire sans fichier devrait être traité comme un conteneur alors qu'un fichier ne le devrait pas.

-

Plus sur les colonnes d'arbres

-

enableColumnDrag est un attribut supplémentaire que vous pouvez ajouter à l'arbre. S'il est mis à 'true', l'utilisateur peut alors déplacer les en-têtes de colonne afin de réarranger l'ordre des colonnes.

-

Un utilisateur peut également vouloir modifier la largeur des colonnes. Il vous suffit de placer un élément splitter entre chaque élément treecol. Une petite encoche apparaissant entre chaque en-tête de colonne pourra être déplacée par l'utilisateur pour changer la largeur d'une colonne. Vous pouvez utiliser la classe de style 'tree-splitter' pour masquer l'encoche bien que la colonne puisse encore être retaillée.

-

Vous pouvez affecter une largeur minimale ou maximale à une colonne, en utilisant les attributs minwidth et maxwidth sur les en-têtes de colonnes.

-

Vous pouvez mettre l'attribut hidden à 'true' pour cacher par défaut une colonne. L'utilisateur pourra afficher la colonne en la sélectionnant dans la liste déroulante au bout de la ligne des en-têtes de colonne.

-

mémorisation de l'état des colonnes

-
Image:xultu_advtrees2.png
-

Comme avec tous les éléments XUL, l'attribut persist peut être utilisé pour sauvegarder l'état des colonnes entre chaque session. Ainsi, la façon dont l'utilisateur aura choisi l'affichage des colonnes sera automatiquement sauvegardé pour sa prochaine session. Vous pouvez sauvegarder plusieurs attributs, comme indiqué dans l'exemple ci-dessous :

-

Exemple 2: Source Voir

-
<tree enableColumnDrag="true" flex="1">
-  <treecols>
-    <treecol id="runner" label="Coureur" flex="2" persist="width ordinal hidden"/>
-    <splitter class="tree-splitter"/>
-    <treecol id="city" label="Ville" flex="2" persist="width ordinal hidden"/>
-    <splitter class="tree-splitter"/>
-    <treecol id="starttime" label="Heure de départ" flex="1" persist="width ordinal hidden"/>
-    <splitter class="tree-splitter"/>
-    <treecol id="endtime" label="Heure d'arrivée" flex="1" persist="width ordinal hidden"/>
-  </treecols>
-
-  <treechildren>
-    <treeitem>
-      <treerow>
-        <treecell label="Joshua Granville"/>
-        <treecell label="Vancouver"/>
-        <treecell label="7:06:00"/>
-        <treecell label="9:10:26"/>
-      </treerow>
-    </treeitem>
-    <treeitem>
-      <treerow>
-        <treecell label="Robert Valhalla"/>
-        <treecell label="Seattle"/>
-        <treecell label="7:08:00"/>
-        <treecell label="9:15:51"/>
-      </treerow>
-    </treeitem>
-  </treechildren>
-</tree>
-
-

Trois attributs des colonnes doivent être persistants,

- -
-

Dans la prochaine section, nous allons voir comment récupérer ou spécifier une sélection sur un arbre.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_d\303\251filement/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_d\303\251filement/index.html" deleted file mode 100644 index 16ab8ccae4..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_d\303\251filement/index.html" +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Barres de défilement -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Barres_de_défilement -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Scroll_Bars ---- -

 

-
-

« PrécédentSuivant »

-
-

Maintenant, voyons comment ajouter des barres de défilement à une fenêtre.

-

Ajout de barres de défilement

-

Une barre de défilement est typiquement employée pour permettre à un utilisateur de parcourir un grand document. Vous pouvez aussi l'utiliser quand vous avez besoin de demander une valeur comprise entre un certain intervalle. Les barres de défilement peuvent être créées de différentes manières. Sous XUL, l'une d'entre elle nécessite l'emploi de la balise scrollbar. Certains éléments, comme des champs de saisie, vont également ajouter des barres de défilement si nécessaire lorsque leur contenu devient trop grand.

-

Dans cette section, nous verrons la création d'une barre de défilement seule. L'utilisateur choisira une valeur en déplaçant la barre de défilement. Vous n'utiliserez probablement pas très souvent cette méthode. Une barre de défilement est constituée de plusieurs partie, l'ascenseur, qui est la partie centrale de la barre, et les deux flèches boutons à chaque extrémités. Une barre de défilement crée tous ces éléments automatiquement.

-

Image:xultu_scroll1.jpg

-

La syntaxe d'une barre de défilement est la suivante :

-
<scrollbar
-   id="identifier"
-   orient="horizontal"
-   curpos="20"
-   maxpos="100"
-   increment="1"
-   pageincrement="10"/>
-
-

Les attributs sont les suivants :

-
id 
L'identifiant unique de la barre de défilement.
orient 
Il spécifie l'orientation de la barre de défilement. Sa valeur par défaut 'horizontal' crée une barre qui s'étend de gauche vers la droite. Vous pouvez également spécifier 'vertical' qui crée une barre s'étendant du haut vers le bas.
curpos 
Il indique la position actuelle de l'ascenseur (le rectangle que vous pouvez déplacer). La valeur s'étend de '0' à la valeur de maxpos. Cette valeur n'a pas besoin d'unité. La valeur par défaut est de '0'.
maxpos 
Il indique la valeur de la position maximale de l'ascenseur. Il s'agit d'une valeur numérique qui n'a pas d'unité. La valeur par défaut est de '100'.
increment 
Ici, le nombre spécifie de combien la valeur de curpos doit être changée quand l'utilisateur clique sur une des flèches de la barre de défilement. La valeur par défaut est de '1'.
pageincrement 
Ici, le nombre spécifie de combien la valeur de curpos doit être changée quand l'utilisateur clique sur la page à travers la barre de défilement, c'est à dire dans la zone entre l'ascenseur et les flèches. La valeur par défaut est de '10'.
-
-

L'exemple donné ci-dessus crée une barre de défilement qui s'étend des valeurs de '0' à '100'. La valeur de '100' peut être considérée comme le nombre de ligne d'une liste, mais elle peut représenter n'importe quoi d'autre. La valeur initiale de cet exemple est de '20'. Quand l'une des flèches de la barre de défilement est cliquée, la valeur incrémente ou décrémente de '1'. En cliquant à travers la barre de défilement, la valeur change de '10'.

-

Lorsque l'utilisateur clique sur l'une des flèches de la barre de défilement, l'ascenseur se déplace d'autant qu'indiqué par la valeur increment. Augmenter la valeur de cet attribut fera que la barre défilera plus vite à chaque clic. Les positions la plus à gauche et la plus élevée de l'ascenseur ont une valeur de '0', et celles la plus à droite et la plus basse ont une valeur donnée par maxpos.

-

En ajustant les valeurs de la barre de défilement, vous pouvez positionner et contrôler le déplacement de l'ascenseur comme vous le souhaitez.

-
-

Ensuite, nous verrons comment créer des barres d'outils.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_menus_simples/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_menus_simples/index.html deleted file mode 100644 index 31800f91cb..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/barres_de_menus_simples/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Barres de menus simples -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Barres_de_menus_simples -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Simple_Menu_Bars ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous allons voir comment créer une barre de menu avec des menus dessus.

- -

Créer un menu

- -

XUL dispose de plusieurs façons différentes de créer des menus. Le moyen le plus basique est d'ajouter une barre de menu avec une ligne de menus dessus comme sur de nombreuses applications. Vous pouvez aussi créer des menus surgissants. Les fonctionnalités de menu XUL se composent de différents éléments qui vous permettent de créer des barres de menus ou des menus surgissants. Les items des menus peuvent être personnalisés assez facilement. Nous avons déjà vu en partie comment faire des menus en utilisant menulist. Cette section sera construite là-dessus.

- -

Les barres de menu sont généralement créées de la même façon que les barres d'outils. La barre de menu peut-être placée dans une toolbox et le menu fonctionne juste comme n'importe quel autre barre d'outils. XUL a quelques éléments spéciaux qui fournissent des fonctionnalités spéciales propres aux menus.

- -

Il y a cinq éléments associés à la création d'une barre de menu et de ses menus, qui sont expliqués brièvement ici et en détail après :

- -
-
menubar 
-
Le container de la ligne de menu.
-
menu 
-
En dépit du nom, il s'agit en fait seulement du titre du menu sur la barre de menu. Cet élément peut être placé sur une barre de menu ou séparément.
-
menupopup 
-
La boîte déroulante qui apparaît quand vous cliquez sur le titre du menu. Cette boîte contient la liste des commandes de menu.
-
menuitem 
-
Une commande individuelle sur un menu. Il est placé dans un menupopup.
-
menuseparator 
-
Une barre de séparation sur un menu. Il est placé dans un menupopup.
-
- -
-

Vous pouvez personnaliser les menus sur la barre de menu comme vous le souhaitez pour toutes les plates-formes excepté pour le Macintosh. C'est parce que le Macintosh a son propre menu spécial en haut de l'écran contrôlé par le système. Bien que vous puissiez créer des menus personnalisés, toutes règles spéciales de style ou éléments non-menu que vous placez sur un menu peuvent ne pas être appliqués. Vous devez garder cette notion à l'esprit quand vous créez des menus.

-
- -

Exemple d'une simple barre de menu

- -

Exemple 1: Source Voir

- -
Image:xultu_menubar_1.png
- -
<toolbox flex="1">
-  <menubar id="sample-menubar">
-    <menu id="file-menu" label="Fichier">
-      <menupopup id="file-popup">
-        <menuitem label="Nouveau"/>
-        <menuitem label="Ouvrir"/>
-        <menuitem label="Enregistrer"/>
-        <menuseparator/>
-        <menuitem label="Quitter"/>
-      </menupopup>
-    </menu>
-    <menu id="edit-menu" label="Edition">
-      <menupopup id="edit-popup">
-        <menuitem label="Annuler"/>
-        <menuitem label="Refaire"/>
-      </menupopup>
-    </menu>
-  </menubar>
-</toolbox>
-
- -

Ici, une simple barre de menu est créée en utilisant l'élément menubar. Il va créer une ligne pour y placer des menus. Deux menus, Fichier et Edition ont été créés ici. L'élément menu crée le titre en haut du menu, qui apparaît sur la barre de menu. Les menus déroulants sont créés en utilisant l'élément menupopup. Le menu va s'ouvrir quand l'utilisateur cliquera sur le titre du menu parent. La taille du menu sera suffisamment large pour que les commandes tiennent à l'intérieur. Les commandes elles-mêmes sont créées en utilisant l'élément menuitem. Chacune d'elles représente une unique commande dans le menu déroulant.

- -

Vous pouvez aussi créer des séparateurs sur les menus en utilisant l'élément menuseparator. Il est utilisé pour séparer des groupes d'items de menu.

- -

Élément menubar

- -

La barre de menu est une boîte contenant des menus. Notez qu'elle a été placée dans une toolbox flexible. La barre de menu n'a pas d'attributs spéciaux mais c'est un type de boîte. De ce fait, vous pouvez créer une barre de menu verticale en affectant la valeur 'vertical' à l'attribut orient.

- -

Élément menu

- -

L'élément menu fonctionne comme l'élément button. Il accepte certains attributs semblables plus quelques autres :

- -
-
id 
-
L'identifiant unique du bouton de titre du menu.
-
label 
-
Le texte qui apparaît sur le menu, comme Fichier ou Edition.
-
disabled 
-
Cet attribut booléen détermine si le menu est désactivé. Bien que ce soit permis, il est rarement utile de désactiver un menu entier. Cet attribut peut être mis à 'true' (vrai) ou 'false' (faux). Bien sûr, cette dernière valeur est celle par défaut.
-
accesskey 
-
Il s'agit de la touche que l'utilisateur peut presser pour activer le menu. Cette lettre est habituellement soulignée dans le titre du menu. Mozilla va regarder dans l'attribut label et ajouter un caractère soulignement au caractère spécifié ici. Pour cette raison, vous devez spécifier un caractère qui existe dans le texte (bien que la touche fonctionnera toujours si ce n'est pas le cas).
-
- -
Image:xultu_menubar_2.png
- -

L'élément menu est normalement placé sur une barre de menu, bien que ce ne soit pas nécessaire. Cependant, il donnera une autre apparence. L'image montre à quoi l'exemple précédent ressemblerait sans la barre de menu.

- -

Élément menupopup

- -

L'élément menupopup crée la fenêtre déroulante contenant les commandes de menu. C'est un type de boîte qui est orienté verticalement par défaut. Vous pouvez passer en orientation horizontale si vous le voulez, les menuitems seront alors placés sur une même ligne. Normalement seuls les menuitems et les menuseparators sont placés dans un menupopup. Vous pouvez placer n'importe quel élément dans un menupopup, cependant ils seront ignorés sur un Macintosh.

- -

Élément menuitem

- -

L'élément menuitem est comme l'élément menu et comporte quelques attributs semblables.

- -
-
id 
-
L'identifiant unique du bouton du menu.
-
label 
-
Le texte qui apparaît sur l'item de menu, comme Ouvrir ou Enregistrer.
-
disabled 
-
Cet attribut booléen détermine si l'item de menu est désactivé. Cet attribut peut être mis à 'true' (vrai) ou 'false' (faux), qui est la valeur par défaut.
-
accesskey 
-
Il s'agit de la touche que l'utilisateur peut presser pour activer l'item de menu. Cette lettre est habituellement soulignée dans le libellé de l'item de menu. Mozilla va regarder dans l'attribut label et ajouter un caractère soulignement au caractère spécifié ici. Pour cette raison, vous devez spécifier un caractère qui existe dans le texte.
-
acceltext 
-
Cet attribut spécifie le texte de la touche de raccourci qui apparaît près du texte de la commande de menu. Cependant, il n'associe pas de touche d'action avec l'item de menu. Nous verrons comment faire cela plus tard.
-
- -

Élément menuseparator

- -

Le menuseparator n'a pas d'attribut spécial. Il crée juste une barre horizontale entre les items de menu.

- -
-

Nous allons maintenant voir quelques autres fonctions de menu.

- -
-

« PrécédentSuivant »

-
diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/bo\303\256te_de_dialogue_de_fichier/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/bo\303\256te_de_dialogue_de_fichier/index.html" deleted file mode 100644 index 8e22677407..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/bo\303\256te_de_dialogue_de_fichier/index.html" +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Boîte de dialogue de fichier -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Boîte_de_dialogue_de_fichier -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Open_and_Save_Dialogs ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Un type commun de boîtes de dialogue est celui avec lequel un utilisateur peut sélectionner un fichier à ouvrir où à enregistrer.

- -

Sélecteurs de fichiers

- -

Un sélecteur de fichiers est une boîte dialogue qui permet à l'utilisateur de sélectionner un fichier. Il est fréquemment utilisé pour les commandes de menu « Ouvrir... » ou « Enregistrer sous... », mais vous pouvez l'utiliser dès que l'utilisateur a besoin de sélectionner un fichier. L'appel à l'interface XPCOM nsIFilePicker est nécessaire pour implémenter un sélecteur de fichiers.

- -
Notez que le sélecteur de fichiers ne fonctionne qu'avec des URLs chrome.
- -

Vous pouvez utiliser le sélecteur de fichiers dans l'un de ces trois modes :

- - - -

L'apparence de la boîte de dialogue sera différente pour chaque type et variera selon la plateforme. Une fois que l'utilisateur aura sélectionné le fichier ou le répertoire/dossier, celui-ci pourra être lu ou enregistré.

- -

L'interface du sélecteur de fichiers nsIFilePicker est responsable de l'affichage de la boîte de dialogue dans l'un des trois modes. Vous pouvez définir plusieurs fonctionnalités de la boîte de dialogue en utilisant cette interface. Une fois que la boîte de dialogue est fermée, vous pouvez utiliser les fonctions de l'interface pour obtenir le fichier qui a été sélectionné.

- -

Création d'un sélecteur de fichier

- -

Pour commencer, vous devez créer un composant du sélecteur de fichiers et l'initialiser.

- -
var nsIFilePicker = Components.interfaces.nsIFilePicker;
-var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
-fp.init(window, "Sélectionnez un fichier", nsIFilePicker.modeOpen);
-
- -

Tout d'abord, un nouvel objet sélecteur de fichiers est créé et stocké dans une variable fp. La fonction init est utilisée pour initialiser le sélecteur de fichiers. Cette fonction prend trois arguments : la fenêtre qui ouvre la boîte de dialogue, le titre de la boîte de dialogue et son mode. Ici, le mode est 'modeOpen' qui est utilisé pour une boîte de dialogue Ouvrir. Vous pouvez aussi utiliser 'modeGetFolder' et 'modeSave' pour les deux autres modes. Ces modes sont des constantes de l'interface nsIFilePicker.

- -

Répertoire par défaut et filtres

- -

Il y a deux fonctionnalités que vous pouvez définir pour la boîte de dialogue avant qu'elle ne soit affichée.

- - - -

Vous pouvez définir le répertoire par défaut en renseignant la proprieté displayDirectory de l'objet du sélecteur de fichiers. Le répertoire doit être un objet nslLocalFile. Si vous ne le définissez pas, un répertoire par défaut sera sélectionné pour vous. Pour appliquer des filtres, appelez la fonction appendFilters() pour définir les types de fichiers que vous souhaitez voir s'afficher.

- -
fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterImages);
-fp.appendFilters(nsIFilePicker.filterText | nsIFilePicker.filterAll);
-
- - - -

Vous pouvez aussi utiliser 'filterXML' et 'filterXUL' pour filtrer les fichiers XML et XUL. Si vous voulez filtrer des fichiers personnalisés, vous pouvez utiliser la fonction appendFilter() :

- -
fp.appendFilter("Fichiers Audio","*.wav; *.mp3");
-
- -

Cette ligne ajoutera un filtre pour les fichiers audio Wav et MP3. Le premier argument est le titre du type de fichier et le second est une liste de masques de fichiers séparés par un point virgule. Vous pouvez mettre autant de masques que vous le souhaitez. Vous pouvez appeler appendFilter autant de fois que nécessaire pour ajouter les filtres supplémentaires. L'ordre dans lequel vous les ajoutez détermine leur priorité. Habituellement, le premier ajouté est sélectionné par défaut.

- -

Obtention du fichier sélectionné

- -

Enfin, vous pouvez afficher la boîte de dialogue en appelant la fonction show(). Elle ne prend aucun argument mais retourne un code d'état qui indique ce que l'utilisateur a sélectionné. Notez que la fonction ne retourne aucune valeur tant que l'utilisateur n'a pas sélectionné un fichier. La fonction retourne une des trois constantes suivantes :

- -
-
'returnOK' 
-
 : l'utilisateur a sélectionné un fichier et a pressé le bouton « OK ». Le fichier que l'utilisateur a sélectionné sera stocké dans la propriété file du sélecteur de fichiers.
-
'returnCancel' 
-
 : l'utilisateur a pressé le bouton « Annuler ».
-
'returnReplace' 
-
 : dans le mode enregistrement, cette valeur de retour signifie que l'utilisateur a sélectionné un fichier à remplacer ('returnOK' sera retournée lorsque l'utilisateur aura rentré le nom d'un nouveau fichier).
-
- -

Vous devrez tester la valeur de retour et ensuite utiliser l'objet file du sélecteur de fichiers en utilisant la propriété file.

- -
var res = fp.show();
-if (res == nsIFilePicker.returnOK){
-  var thefile = fp.file;
-  // --- faire quelque chose avec le fichier ici ---
-}
-
- -
-

Par la suite, nous verrons comment créer un assistant.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/broadcasters_et_observateurs/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/broadcasters_et_observateurs/index.html deleted file mode 100644 index dd1a8bbbae..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/broadcasters_et_observateurs/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Broadcasters et Observateurs -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Broadcasters_et_Observateurs -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Broadcasters_and_Observers ---- -

 

-
-

« PrécédentSuivant »

-
-

Parfois, vous voulez que plusieurs éléments répondent à des événements ou changent d'état aisément. Pour cela, nous pouvons utiliser les « broadcasters » (diffuseurs).

-

Commandes de transmission d'attributs

-

Nous avons vu précédemment que les éléments tels que les boutons peuvent être ancrés à des commandes. De plus, si vous placez l'attribut disabled sur l'élément command, tous les éléments ancrés sur celui-ci seront eux aussi désactivés automatiquement. C'est une façon utile de diminuer la taille du code nécessaire. Cette technique fonctionne aussi pour les autres attributs. Par exemple, si vous placez un attribut label sur un élément command, chaque bouton attaché à la commande partagera ce libellé.

-

Exemple 1: Source Voir

-
<command id="ma_commande" label="Ouvrir"/>
-
-<button command="ma_commande"/>
-<checkbox label="Ouvrir une nouvelle fenêtre" command="ma_commande"/>
-
-

Dans cet exemple, le bouton n'a pas d'attribut label, néanmoins il est attaché à une commande qui en possède un. Le bouton va donc le partager avec la commande. La case à cocher a déjà un libellé, néanmoins, il va être surchargé par celui de la commande. Le résultat est que le bouton et la case à cocher auront le même libellé 'Ouvrir'.

-

Si vous modifiez l'attribut label de la commande, les libellés du bouton et de la case à cocher changeront eux aussi. Nous avons vu une application similaire dans une section précédente où l'attribut disabled était défini puis propagé aux autres éléments.

-

Cette transmission d'attribut est relativement utile pour plusieurs raisons. Par exemple, disons que nous voulons désactiver l'action « Page précédente » dans un navigateur. Nous aurions besoin de désactiver cette action dans le menu, dans la barre des tâches, le raccourci clavier (Alt+Gauche par ex.) et chaque commande « Page précédente » des menus déroulants. Écrire un script pour le faire n'est pas très simple. Le désavantage est de devoir prévoir tous les endroits où pourraient se trouver les boutons « Page précédente ». Si quelqu'un a ajouté un nouveau bouton « Page précédente » en utilisant une extension, il ne serait pas pris en compte. Il est plus pratique de désactiver simplement l'action « Page précédente » et que tous les éléments utilisant cette action se désactivent eux-mêmes. Nous pouvons utiliser la transmission d'attributs des commandes pour accomplir cela.

-

Broadcasters

-

Il y existe un élément similaire appelé broadcaster. Les broadcasters supportent la transmission d'attributs de la même manière que les commandes. Ils fonctionnent de la même manière excepté le fait qu'une commande est utilisée pour les actions, alors qu'un broadcaster est utilisé pour contenir l'information d'un état. Par exemple, un élément command serait utilisé pour une action comme « Page précédente », « Couper » ou « Supprimer ». Un broadcaster serait utilisé pour contenir, par exemple, un drapeau indiquant si l'utilisateur est en ligne ou non. Dans le premier cas, les éléments du menu et de la barre des tâches nécessiteraient d'être désactivés lorsqu'il n'y a pas de page de retour, ou aucun texte à couper, à effacer. Dans le second cas, plusieurs éléments de l'interface auraient besoin d'être mis à jour lorsque l'utilisateur passerait du mode en ligne au mode hors ligne.

-

Le broadcaster le plus simple est défini ci-dessous. Vous devriez toujours utiliser un attribut id afin qu'il puisse être référencé à partir d'autres éléments.

-
<broadcasterset>
-   <broadcaster id="isOffline" label="Hors ligne"/>
-</broadcasterset>
-
-

Tous les éléments qui « observent » le broadcaster seront modifiés automatiquement chaque fois que l'attribut label du broadcaster change. Ces éléments auront comme résultat un nouveau libellé. Tout comme d'autres éléments non affichés, l'élément broadcasterset est un conteneur pour les broadcasters. Vous devez déclarer tous vos broadcasters dans un élément broadcasterset afin de les réunir.

-

Création d'éléments observateurs

-

Les éléments qui observent le broadcaster sont appelés observateurs car ils « observent » l'état du broadcaster. Pour qu'un élément devienne un observateur, ajoutez lui un attribut observes. Il est analogue à l'attribut command utilisé pour attacher un élément à un élément command. Par exemple, pour qu'un bouton devienne un observateur du broadcaster décrit ci-dessus :

-
<button id="offline_button" observes="isOffline"/>
-

L'attribut observes a été placé sur le bouton et sa valeur a été affectée à la valeur de l'id du broadcaster à observer. Ici, le bouton va observer le broadcaster avec l'id 'isOffline' qui a été défini un peu plus haut dans le code. Si la valeur de l'attribut label du broadcaster change, les observateurs mettront à jour leur valeur de l'attribut label.

-

Nous pourrions continuer avec d'autres éléments. Autant d'éléments que vous voulez peuvent observer le même broadcaster. Vous pouvez aussi n'avoir qu'un seul élément observateur, mais cela ne servirait pas à grand chose puisque la raison principale d'utiliser les broadcasters est d'avoir des attributs transmis à de multiples endroits. Vous ne devriez utiliser les broadcasters que lorsque vous avez besoin que plusieurs éléments aient à observer un attribut. D'autres observateurs sont décrits ci-dessous :

-
<broadcaster id="offline_command" label="Hors ligne" accesskey="f"/>
-
-<keyset>
-  <key id="goonline_key" observes="offline_command" modifiers="accel" key="O"/>
-</keyset>
-<menuitem id="offline_menuitem" observes="offline_command"/>
-<toolbarbutton id="offline_toolbarbutton" observes="offline_command"/>
-
-

Dans cet exemple, label et l'accesskey seront transmis par le broadcaster au raccourci clavier, à l'item de menu et au bouton de la barre d'outils. Le raccourci clavier n'utilisera aucun des attributs reçus, mais il sera désactivé lorsque le broadcaster le sera.

-

Vous pouvez utiliser un broadcaster pour observer n'importe quel attribut désiré. Les observateurs récupèreront les valeurs de chaque attribut, via les broadcasters, dès qu'ils changeront. Si jamais la valeur d'un seul attribut change, les observateurs seront avisés et ajusteront leurs propres attributs en conséquence. Les attributs des observateurs que le broadcaster ne possède pas lui-même ne sont pas modifiés. Les seuls attributs qui ne sont pas modifiés sont les attributs id et persist ; ces attributs ne sont jamais partagés. Vous pouvez également utiliser vos propres attributs si vous le désirez.

-

Les broadcasters ne sont pas fréquemment utilisés, car les commandes peuvent en général convenir à la majorité des usages. Une chose à préciser est qu'il n'y a pas vraiment de différence entre l'élément command et l'élément broadcaster. Ils font tous les deux la même chose. La différence est plutôt sémantique. Utilisez les commandes pour les actions et utilisez les broadcasters pour les états. En fait, chaque élément peut agir comme un broadcaster, tant que vous l'observez en utilisant l'attribut observes.

-

L'élément Observes

-

Il existe un moyen de spécifier plus précisemment les attributs du broadcaster à observer. Cela implique un élément observes. Tout comme son attribut l'indique, il vous permet d'indiquer à un élément qu'il est un observateur. L'élément observes doit être placé en tant qu'enfant de l'élément qui doit être l'observateur. Voici un exemple :

-

Exemple 2: Source Voir

-
<broadcasterset>
-  <broadcaster id="isOffline" label="Hors ligne" accesskey="f"/>
-</broadcasterset>
-
-<button id="offline_button">
-  <observes element="isOffline" attribute="label"/>
-</button>
-
-

Deux attributs ont été ajoutés à l'élément observes. Le premier, element, spécifie l'identifiant du broadcaster à observer. Le second, attribute, spécifie l'attribut à observer. Le résultat est que le bouton recevra son libellé du broadcaster, et quand l'attribut label sera modifié, le libellé du bouton sera changé. L'élément observes ne change pas, contrairement à l'élément qui le contient, qui est dans ce cas un button. Notez que l'attribut accesskey n'est pas transmis au bouton, puisque il n'est pas observé. Si vous voulez que ce soit le cas, un autre élément observes devra être ajouté. Si vous n'utilisez aucun élément observes, et qu'à la place vous utilisez l'attribut observes directement sur le bouton, tous les attributs seront observés.

-

Événement broadcast

-

Il existe un gestionnaire d'événements supplémentaire, onbroadcast, que nous pouvons placer sur l'élément observes. L'événement est appelé dès que l'observateur détecte un changement dans l'attribut du broadcaster qu'il observe. Un exemple est décrit ci-dessous :

-

Exemple 3: Source Voir

-
<broadcasterset>
-  <broadcaster id="colorChanger" style="color: black"/>
-</broadcasterset>
-
-<button label="Test">
-  <observes element="colorChanger" attribute="style" onbroadcast="alert('La couleur a changé');"/>
-</button>
-
-<button label="Observer"
-  oncommand="document.getElementById('colorChanger').setAttribute('style','color: red');"
-/>
-
-

Deux boutons ont été créés, un nommé 'Test' et l'autre 'Observateur'. Si vous cliquez sur le bouton « Test », rien ne se produit. En revanche, si vous cliquez sur le bouton « Observateur », deux choses surviennent. Premièrement, le texte du bouton devient rouge, deuxièmement, un message d'alerte apparaît avec le message 'La couleur a changé'.

-

Voilà ce qui se passe : le gestionnaire oncommand du second bouton est appelé lorsque l'utilisateur appuie dessus. Le script dispose ici d'une référence au broadcaster et change le style de celui-ci afin qu'il ait une couleur (color) rouge. Le broadcaster n'est pas affecté par le changement de style car il n'est pas affiché à l'écran. Néanmoins, le premier bouton a un observateur qui tient compte du changement de style. Les attributs element et attribute sur la balise observes détecte le changement de style. Le style est appliqué automatiquement au premier bouton.

-

Ensuite, puisque la transmission se fait, le gestionnaire d'événement onbroadcast est appelé. Il en résulte l'affichage d'un message d'alerte. Notez que la transmission ne se fait que si les attributs de l'élément broadcaster sont modifiés. Changer le style du bouton directement ne déclenchera aucune diffusion d'événement et le message d'alerte ne s'affichera pas.

-

Si vous essayez de dupliquer le code du premier bouton (button) plusieurs fois, vous verrez une série de messages d'alerte, un pour chaque bouton, car chaque bouton est un observateur et sera prévenu du changement de style.

-
-

Nous verrons dans la section suivante l'utilisation du Modèle Objet de Document (DOM) avec les éléments XUL.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/cadres_de_contenu/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/cadres_de_contenu/index.html deleted file mode 100644 index d63d0e1d7c..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/cadres_de_contenu/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Cadres de contenu -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Cadres_de_contenu -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Content_Panels ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous regarderons comment ajouter des cadres qui peuvent afficher des pages HTML ou d'autres fichiers XUL.

- -

Ajout de cadres enfants

- -

Parfois, vous souhaitez qu'une partie d'un document soit chargée à partir d'une autre page. D'autres fois, vous voulez changer une partie de la fenêtre. Un bon exemple est un assistant qui vous guide pas-à-pas à travers un certain nombre d'écrans, en vous posant une série de questions. Chaque fois que l'utilisateur clique sur le bouton suivant, l'écran suivant de l'assistant est affiché.

- -

Vous pouvez créer une interface d'assistant en ouvrant une fenêtre différente pour chaque écran. Cette approche pose trois problèmes. Premièrement, chaque fenêtre peut apparaître à une position différente sur l'écran (bien qu'il existe une alternative à cela). Deuxièmement, les éléments tels que les boutons suivant ou précédent sont les mêmes tout au long de l'interface. Ce serait bien mieux si seul le contenu de l'assistant changeait. Troisièmement, il sera difficile de coordonner les scripts tournant dans les différentes fenêtres.

- -
Notez que XUL a un élément wizard qui peut être utilisé pour créer des assistants. Il sera décrit dans une prochaine section.
- -

Une meilleure approche est d'utiliser l'élément iframe, qui fonctionne comme l'élément HTML du même nom. Il crée un document séparé dans la fenêtre. Il a l'avantage de pouvoir être placé n'importe où et son contenu chargé à partir d'un fichier différent. Indiquez l'URL que vous souhaitez afficher dans le cadre avec l'attribut src. Cette URL peut pointer sur n'importe quelle sorte de fichiers, bien qu'elle pointe habituellement sur un fichier HTML ou un autre fichier XUL. Vous pouvez utiliser un script pour changer le contenu de ce cadre sans affecter la fenêtre principale.

- -

Dans la fenêtre du navigateur Mozilla, l'endroit où la page Web doit être affichée est créé en utilisant un cadre iframe. Lorsque l'utilisateur entre une URL ou clique sur un lien du document, la source du cadre est changée.

- -

Exemple iframe

- -

Exemple 1: Source Voir

- -
<toolbox>
-   <toolbar id="nav-toolbar">
-     <toolbarbutton label="Précédent"/>
-     <toolbarbutton label="Suivant"/>
-     <textbox id="urlfield"/>
-   </toolbar>
-</toolbox>
-
-<iframe id="content-body" src="http://www.mozilla-europe.org/fr/" flex="1"/>
-
- -
Image:xultu_cpanels1.png
- -

Ici, l'exemple crée une interface très simple pour un navigateur Web. Une boîte contenant deux éléments a été créée : un élément toolbox et un élément iframe. Un bouton « Précédent », un bouton « Suivant » et un champ de saisie des URLs ont été ajoutés sur la barre d'outils. Les pages Web apparaissent à l'intérieur du cadre iframe. Dans ce cas, c'est la page d'accueil du site qui apparaîtra par défaut.

- -

Cet exemple n'est pas fonctionnellement complet. Par la suite, nous ajouterons un script qui changera l'attribut de src au moment désiré, par exemple quand l'utilisateur appuie sur la touche Entrée.

- - - -

Il existe un second type de cadre de contenu, utilisant la balise browser. Vous l'utiliserez quand vous voudrez créer un cadre qui montre le contenu comme un navigateur. En réalité, l'élément iframe peut aussi le faire, mais le navigateur (browser) possède certaines caractéristiques supplémentaires. Par exemple, l'élément browser conserve un historique pour utiliser les boutons « Précédent » et « Suivant ». Le navigateur peut aussi charger des pages avec des referers et d'autres états. La balise browser doit être utilisée essentiellement lorsque vous voulez créer une interface semblable au navigateur, mais l'iframe peut être utilisé lorsque vous avez juste besoin d'un cadre simple.

- -

Un élément similaire, tabbrowser, fournit la fonctionnalité du browser, mais fournit également une barre d'onglets pour basculer entre de multiples pages. C'est le composant graphique utilisé par le navigateur Mozilla pour son interface de navigation par onglets. L'élément tabbrowser est en réalité implémenté comme un tabbox contenant un ensemble d'éléments browser. Ces deux types de navigateur offrent un contrôle similaire sur les pages à afficher.

- -

Exemple de browser

- -

Exemple 2: Source Voir.

- -
<browser src="http://www.mozilla.org" flex="1"/>
- -

Comme avec l'iframe, vous pouvez indiquer l'URL dans un navigateur utilisant l'attribut src. Pour un tabbrowser, vous ne pouvez pas définir l'url directement comme ceci, étant donné qu'il n'affiche pas qu'une seule URL. À la place, vous devez utiliser un script et appeler la fonction loadURI.

- -

Il y a trois catégories de navigateurs, selon le genre de contenu que vous voulez afficher. Le type peut être indiqué en utilisant l'attribut type.

- -

Le premier type est le type par défaut utilisé si vous omettez cet attribut. Dans ce cas, le contenu chargé à l'intérieur du navigateur est traité comme s'il faisait partie de la même application et avait accès à la fenêtre extérieure. Cela signifie que lorsqu'un script chargé à l'intérieur du navigateur essaie d'obtenir la fenêtre la plus élevée, il obtiendra la fenêtre XUL extérieure.

- -

Ce comportement conviendrait pour un cadre XUL fils qui fait partie de votre application, mais il ne serait pas adapté pour un navigateur qui chargerait des pages Web. À la place, vous voudrez restreindre la page Web au seul accès de son contenu. Vous pouvez noter qu'une fenêtre de navigateur Mozilla possède du contenu XUL pour les barres d'outils et de statut et ainsi de suite avec un tabbrowser formant la zone principale. Cette zone interne affiche une page Web, mais celle-ci ne peut pas accéder au XUL l'entourant. C'est parce le second type de navigateur est utilisé en définissant l'attribut type avec la valeur 'content'. Il empêche le contenu de remonter jusqu'à la fenêtre XUL. Un exemple :

- -
<browser src="http://www.mozilla.org" type="content" flex="1"/>
- -
Il est important que vous définissiez l'attribut type correctement si vous envisagez d'afficher des sites Web distants à l'intérieur de l'élément browser.
- -

Le tabbrowser définit le type 'content' automatiquement sur tous les onglets de navigation qu'il crée. Vous n'avez donc pas à le définir explicitement pour les onglets de navigation.

- -

Le troisième type sert lorsque votre fenêtre contient plusieurs éléments browser, comme par exemple si vous aviez un panneau latéral affichant du contenu supplémentaire. Renseignez l'attribut type sur l'élément browser principal avec la valeur 'content-primary' pour spécifier le contenu primaire. Il fonctionne comme avec la valeur 'content' excepté le fait que le contenu à l'intérieur est accessible en utilisant la propriété 'content' de la fenêtre XUL. L'accès au contenu du navigateur principal en utilisant un script s'en trouve simplifié. tabbrowser définit automatiquement l'attribut type avec cette valeur 'content-primary' pour tous les navigateurs visibles, ce qui vous permet de cette manière de toujours pouvoir avoir accès au contenu visible.

- -
-

Dans la section suivante, nous allons voir comment créer des séparateurs.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/caract\303\251ristiques_d'une_fen\303\252tre/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/caract\303\251ristiques_d'une_fen\303\252tre/index.html" deleted file mode 100644 index 4f063b5790..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/caract\303\251ristiques_d'une_fen\303\252tre/index.html" +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Caractéristiques d'une fenêtre -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Caractéristiques_d'une_fenêtre -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Features_of_a_Window ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Nous avons déjà vu quelques caractéristiques de fenêtres. Nous allons en aborder d'autres dans cette section.

- -

Créer une autre fenêtre

- -

Vous pouvez créer une seconde fenêtre pour votre application de la même manière que vous avez créé la première. Il suffit de créer un second fichier XUL contenant le code de la nouvelle fenêtre. Comme en HTML, vous pouvez utiliser la fonction window.open() pour ouvrir la seconde fenêtre. Cette fonction retournera une référence à la fenêtre nouvellement ouverte. Vous pouvez utiliser cette référence pour appeler des fonctions de l'autre fenêtre.

- -

La fonction open prend trois arguments. Le premier est l'URL du fichier que vous souhaitez ouvrir. Le deuxième est le nom interne de la fenêtre. Le troisième est une liste de drapeaux de paramètres d'affichage. Le drapeau chrome est important pour ouvrir la fenêtre comme un fichier chrome. Si vous n'ajoutez pas le drapeau chrome, le fichier sera ouvert dans une nouvelle fenêtre du navigateur.

- -

Par exemple :

- -
var myWin = window.open("chrome://findfile/content/findfile.xul","findfile","chrome");
- -

Spécifier la largeur et la hauteur

- -

Vous aurez noté que lorsque des éléments sont ajoutés à une fenêtre, la largeur de la fenêtre s'étend pour s'adapter aux nouveaux éléments. La fenêtre n'est en fait qu'une boîte flexible et qui prend par défaut une orientation verticale. Vous pouvez également spécifier la largeur et la hauteur directement dans la balise window. Cela, bien sûr, oblige la fenêtre à prendre une taille spécifique. Si vous ôtez ces spécifications, la taille sera déterminée par les éléments qui la constituent.

- -
<window
-  id="findfile-window"
-  title="Recherche de fichiers"
-  width="400"
-  height="450"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- -

Dans cet exemple, la fenêtre sera ouverte avec une largeur de 400 pixels et une hauteur de 450 pixels. Même s'il n'y a pas assez d'éléments pour lui faire adopter cette taille, la fenêtre s'ouvrira toujours à cette taille et il y aura un espace vierge dans l'espace restant. S'il y a trop d'éléments, la fenêtre n'adaptera pas ses dimensions pour en tenir compte. L'utilisateur devra alors redimensionner la boîte de dialogue. Vous devez faire attention, lorsque vous spécifiez une largeur et une hauteur, à ce que la fenêtre ne soit ni trop petite, ni trop grande. Vous devez considérer les thèmes graphiques ou la langue propres à l'utilisateur.

- -
Notez que vous devez spécifier à la fois la largeur et la hauteur. Si vous ne spécifiez qu'une des deux valeurs, l'autre sera mise à '0'. Pour que la fenêtre détermine sa taille automatiquement, omettez les toutes les deux.
- -

La largeur et la hauteur déterminent seulement la taille initiale de la fenêtre. L'utilisateur peut toujours redimensionner la fenêtre, à condition que celle-ci soit redimensionnable.

- -

Autres propriétés de fenêtre

- -

Les drapeaux ci-après peuvent être utilisés comme troisième argument de la fonction window.open. Votre système d'exploitation peut ne pas les supporter tous. Vous pouvez également utiliser un des drapeaux pré-existants, que vous devriez trouver dans une référence JavaScript. Vous pouvez désactiver une propriété en la réglant sur 'no', par exemple dialog='no'.

- -
-
alwaysLowered
-
La fenêtre apparaîtra toujours derrière les autres fenêtres.
-
alwaysRaised
-
La fenêtre apparaîtra toujours devant les autres fenêtres.
-
centerscreen
-
À son ouverture, la fenêtre sera centrée à l'écran.
-
dependent
-
La position de la fenêtre sera toujours relative à la fenêtre qui l'a ouverte. Si la position de la fenêtre initiale est modifiée, la seconde fenêtre bougera automatiquement de même manière.
-
dialog
-
la fenêtre est une boîte de dialogue pouvant apparaître différemment.
-
modal
-
La boite de dialogue est modale. La fenêtre qui a ouvert la fenêtre modale ne peut pas être utilisée tant que la fenêtre modale n'est pas fermée.
-
resizable
-
L'utilisateur peut redimensionner la fenêtre.
-
- -

Voir également la référence DOM de window.open().

- -
-

Nous allons voir ensuite comment ouvrir des boîtes de dialogue secondaires.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/commandes/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/commandes/index.html deleted file mode 100644 index baedcbfcdf..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/commandes/index.html +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Commandes -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Commandes -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Commands ---- -

 

-
-

« PrécédentSuivant »

-
-

Une commande est une opération qui peut être invoquée.

-

Les éléments de commande

-

L'élément command est utilisé pour créer des commandes qui pourront être utilisées pour exécuter des opérations. Vous n'avez pas besoin d'utiliser les commandes si vous avez juste à appeler un script pour manipuler des choses. Cependant, une commande a l'avantage de pouvoir être désactivée automatiquement quand c'est nécessaire, et de pouvoir être invoquée de l'extérieur sans avoir besoin de connaître les détails de son implémentation. Les commandes fournissent un moyen pour séparer de façon abstraite les opérations et le code. Elles deviennent très utiles pour les grosses applications.

-

Par exemple, pour implémenter les commandes de menus du presse-papiers, couper, copier et coller, vous pouvez utiliser les commandes. Si vous ne les utilisiez pas, vous devriez trouver quel champ a le focus, ensuite s'assurer que l'opération est valable pour cet élément. De plus, les commandes de menus devraient être activées ou désactivées selon que l'élément cible a du texte sélectionné ou pas, et pour les opérations de collage, si le presse-papiers contient quelque chose qui peut être collé. Comme vous pouvez le voir, cela devient compliqué. En utilisant les commandes, votre travail est simplifié.

-

Vous pouvez utiliser une commande pour n'importe quelle opération. Mozilla les utilise la plupart du temps pour les menus. De plus, les champs de saisie de texte et autres composants graphiques disposent de plusieurs commandes natives que vous pouvez invoquer. Vous devriez les utiliser quand les opérations dépendent de l'élément sélectionné.

-

Une commande est identifiée par son attribut id. Mozilla utilise une convention : les id de commandes commencent par 'cmd_'. Vous voudrez probablement utiliser le même identifiant que celui d'une commande déjà utilisée, cependant, pour vos propres commandes, vous pouvez utiliser n'importe quel id de commande souhaité. Pour éviter les conflits, il est préférable d'inclure le nom de l'application dans l'id de la commande. Un moyen simple d'utilisation des commandes est montré ci-après :

-

Exemple : command simple

-

Exemple 1: Source Voir.

-
<command id="cmd_openhelp" oncommand="alert('Aide !');"/>
-<button label="Aide" command="cmd_openhelp"/>
-
-

Dans cet exemple, au lieu de placer l'attribut oncommand sur l'élément button, nous le plaçons sur un élément command. Les deux sont alors liés en utilisant l'attribut command qui a la valeur de l'id de la commande. Ainsi, quand le bouton est pressé, la commande 'cmd_openhelp' est invoquée.

-

Cette approche présente deux avantages.

- -

De plus,

- -

Exemple : Activer/Désactiver command

-

Exemple 2: Source Voir

-
<command id="cmd_openhelp" oncommand="alert('Aide');"/>
-<button label="Aide" command="cmd_openhelp"/>
-<button label="Plus d'aide" command="cmd_openhelp"/>
-
-<button label="Désactiver" oncommand="document.getElementById('cmd_openhelp').setAttribute('disabled','true');"/>
-<button label="Activer" oncommand="document.getElementById('cmd_openhelp').removeAttribute('disabled');"/>
-
-

Dans cet exemple, les deux boutons utilisent la même commande. Quand le bouton « Désactiver » est pressé, la commande est désactivée en définissant son attribut disabled, et les deux boutons seront aussi désactivés.

-

Habituellement, un groupe de commandes se place à l'intérieur d'un élément commandset, près du début du fichier XUL, comme dans l'exemple suivant :

-
<commandset>
-   <command id="cmd_open" oncommand="alert('Ouvrir !');"/>
-   <command id="cmd_help" oncommand="alert('Aide !');"/>
-</commandset>
-
-

Une commande est invoquée quand l'utilisateur active le bouton ou les autres éléments rattachés à la commande. Vous pouvez aussi invoquer une commande en appelant la méthode doCommand, que ce soit de l'élément command ou d'un élément rattaché à la commande, comme un bouton.

-

Le répartiteur de commandes

-

Vous pouvez aussi utiliser les commandes sans utiliser l'élément command, ou, au moins, sans ajouter un attribut oncommand sur la commande. Dans ce cas, la commande n'invoquera pas un script directement, mais recherchera plutôt un élément ou une fonction qui traitera la commande. Cette fonction peut être séparée du XUL lui-même, et peut être embarquée par un élément graphique en interne. Afin de trouver ce qui traitera la commande, XUL utilise un objet appelé répartiteur de commande (NdT : command dispatcher). Cet objet localise le gestionnaire d'une commande. Le gestionnaire d'une commande est appelé contrôleur. Ainsi, quand une commande est invoquée, le répartiteur de commande localise un contrôleur qui traite la commande. Vous pouvez déduire que l'élément command est un type de contrôleur pour une commande.

-

Le répartiteur de commandes localise un contrôleur en regardant l'élément sélectionné pour voir s'il a un contrôleur qui gère la commande. Les éléments XUL ont une propriété controllers qui est utilisée pour la vérification. Vous pouvez l'utiliser pour ajouter vos propres contrôleurs. Vous pourriez l'utiliser pour avoir une boîte de liste qui répond aux opérations de couper, copier et coller. Un exemple sera fourni plus tard. Par défaut, seuls les champs de saisie (textbox) ont un contrôleur fonctionnel. Ce contrôleur gère aussi bien les opérations de presse-papiers, sélection, défaire et refaire, que les opérations d'édition. Notez qu'un élément peut avoir plusieurs contrôleurs, qui seront alors tous pris en compte.

-

Si l'élément courant sélectionné n'a pas le contrôleur attendu, la fenêtre sera alors vérifiée. L'élément window a aussi une propriété controllers que vous pouvez modifier comme bon vous semble. Si le focus est à l'intérieur d'un cadre frame, chaque cadre parent est également vérifié. Ainsi, les commandes fonctionneront même si le focus est à l'intérieur d'un cadre. Ce mécanisme fonctionne bien pour un navigateur ; les commandes d'édition invoquées à partir du menu principal fonctionneront à l'intérieur de la zone de contenu. Notez que HTML a aussi un système de commandes et de contrôleur, bien que vous ne puissiez pas l'utiliser sur des pages Web sans privilèges. Mais vous pouvez l'utiliser, par exemple, dans une extension du navigateur. Si la fenêtre ne fournit pas un contrôleur capable de gérer la commande, rien ne se passera.

-

Vous pouvez récupérer le répartiteur de commande en utilisant la propriété commandDispatcher de l'objet document, ou à partir des contrôleurs listés dans un élément ou la fenêtre. Le répartiteur de commande contient des méthodes pour récupérer les contrôleurs pour les commandes et pour récupérer et modifier le focus.

-

Ajout de contrôleurs

-

Vous pouvez implémenter vos propres contrôleurs pour répondre aux commandes. Vous pouvez tout aussi bien surcharger la gestion par défaut d'une commande en plaçant le contrôleur correctement. Un contrôleur doit implémenter quatre méthodes qui sont listées ci-dessous :

-
supportsCommand (command) 
Cette méthode doit renvoyer 'true' si le contrôleur gère la commande. Si vous renvoyez 'false', la commande n'est pas gérée et le répartiteur de commande interrogera un autre contrôleur. Un contrôleur peut gérer plusieurs commandes.
-
-
isCommandEnabled (command) 
Cette méthode doit renvoyer 'true' si la commande est activée, 'false' sinon. Les boutons correspondants seront désactivés automatiquement.
-
-
doCommand (command) 
exécute la commande. C'est ici que vous mettrez le code pour gérer la commande.
-
-
onEvent (event) 
Cette méthode gère un événement.
-
-

Exemple : implémentation d'un contrôleur

-

Imaginons que nous voulions implémenter une boîte de liste (listbox) qui gère la commande « Supprimer ». Quand un utilisateur sélectionne « Supprimer » dans le menu, la boîte de liste efface la ligne sélectionnée. Dans ce cas, vous avez juste à attacher un contrôleur à l'élément listbox qui exécutera l'action correspondante dans sa méthode doCommand.

-

Essayez d'ouvrir l'exemple qui suit (Source Voir) dans une fenêtre du navigateur et sélectionnez des items de la liste. Vous noterez que la commande « Supprimer » du menu « Edition » du navigateur est activée et qu'elle effacera la ligne sélectionnée. L'exemple n'est cependant pas complet. Nous devrions nous assurer que la sélection et le focus soient ajustés comme il faut après l'effacement.

-
<window id="controller-example" title="Exemple de contrôleur" onload="init();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<script>
-function init()
-{
-  var list = document.getElementById("theList");
-
-  var listController = {
-    supportsCommand : function(cmd){ return (cmd == "cmd_delete"); },
-    isCommandEnabled : function(cmd){
-      if (cmd == "cmd_delete") return (list.selectedItem != null);
-      return false;
-    },
-    doCommand : function(cmd){
-      list.removeItemAt(list.selectedIndex);
-    },
-    onEvent : function(evt){ }
-  };
-
-  list.controllers.appendController(listController);
-}
-</script>
-
-<listbox id="theList">
-  <listitem label="Océan"/>
-  <listitem label="Désert"/>
-  <listitem label="Jungle"/>
-  <listitem label="Marécage"/>
-</listbox>
-
-</window>
-
-

Le contrôleur listController implémente les quatre fonctions décrites plus haut. La méthode supportsCommand renvoie 'true' pour la commande 'cmd_delete', qui est le nom de la commande utilisée lorsque l'item de menu « Supprimer » est sélectionné. Pour les autres commandes, 'false' est renvoyé puisque le contrôleur ne gère aucune autre commande. Si vous voulez gérer d'autres commandes, vous devrez les tester ici, car il est fréquent d'un simple contrôleur gère de multiples commandes apparentées.

-

La méthode isCommandEnabled renvoie 'true' si la commande est activée. Dans le cas présent, nous vérifions s'il y a un item sélectionné dans la liste et renvoyons 'true' si c'est le cas. S'il n'y a pas de sélection, 'false' est renvoyé. Si vous effacez toutes les lignes dans l'exemple, la commande « Supprimer » deviendra inactive. Vous devrez cliquer sur la liste pour mettre à jour le menu dans cet exemple simple. La méthode doCommand sera appelée lorsque l'item de menu « Supprimer » sera sélectionné, et elle provoquera l'effacement de la ligne sélectionnée dans la liste. Rien ne doit se produire pour la méthode onEvent, aussi nous n'ajouterons pas de code pour celle-ci.

-

Surcharger un contrôleur par défaut

-

Nous attachons ce contrôleur à l'élément listbox en appelant la méthode appendController des objets contrôleurs de la liste. L'objet controller a un certain nombre de méthodes qui peuvent être utilisées pour manipuler les contrôleurs. Par exemple, il possède une méthode insertControllersAt qui insère un contrôleur dans un élément avant les autres. Elle peut être utile pour surcharger des commandes. Par exemple, le code suivant désactivera le collage du presse-papiers dans un champ de saisie.

-
var tboxController = {
-  supportsCommand : function(cmd){ return (cmd == "cmd_paste"); },
-  isCommandEnabled : function(cmd){ return false; },
-  doCommand : function(cmd){ },
-  onEvent : function(evt){ }
-};
-
-document.getElementById("tbox").controllers.insertControllerAt(0,tboxController);
-
-

Dans cet exemple, nous insérons le contrôleur à l'index '0', c'est-à-dire avant tous les autres. Le nouveau contrôleur supporte la commande 'cmd_paste' et indique qu'elle est désactivée. Le contrôleur par défaut de textbox ne sera jamais appelé parce que le répartiteur de commande trouve un contrôleur avant celui-ci, prenant en charge la commande en premier.

-
-

Dans la section suivante, nous allons voir comment mettre à jour les commandes.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/contenu_anonyme/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/contenu_anonyme/index.html deleted file mode 100644 index 92fc00f9e5..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/contenu_anonyme/index.html +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: Contenu anonyme -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Contenu_anonyme -tags: - - Tutoriel_XUL - - Tutoriels - - XBL - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Anonymous_Content ---- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous allons voir comment créer un contenu avec XBL (eXtended Binding Language).

- -

Le contenu XBL

- -

XBL peut être utilisé pour ajouter automatiquement un ensemble d'éléments à l'intérieur d'un autre élément. Le fichier XUL a uniquement besoin de spécifier l'élément externe tandis que l'élément interne est décrit dans un fichier XBL. C'est utile pour créer un élément graphique simple qui est construit à partir d'un ensemble d'autres éléments, mais qui peut être référencé comme un seul élément graphique. Des mécanismes sont fournis pour ajouter des attributs aux éléments internes qui étaient spécifiés dans l'élément externe.

- -

Exemple de déclaration d'une barre de défilement

- -

L'exemple ci-dessous montre comment une barre de défilement pourrait être déclarée (il a été un peu simplifié par rapport à la réalité) :

- -
<bindings xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <binding id="scrollbarBinding">
-    <content>
-      <xul:scrollbarbutton type="decrement"/>
-      <xul:slider flex="1">
-        <xul:thumb/>
-      </xul:slider>
-      <xul:scrollbarbutton type="increment"/>
-    </content>
-  </binding>
-</bindings>
-
- -

Ce fichier contient une seule liaison, déclarée avec l'élément binding. L'attribut id doit être déclaré avec l'identifiant de la liaison. De cette façon il y est fait référence au travers de la propriété CSS -moz-binding.

- -

La balise content est utilisée pour déclarer le contenu anonyme qui sera ajouté à la barre de défilement. Tous les éléments à l'intérieur de la balise content seront ajoutés au sein de l'élément auquel la liaison est liée. Cette liaison sera vraisemblablement liée à une barre de défilement, bien qu'elle puisse ne pas l'être. Chaque élément dont la propriété CSS -moz-binding est déclarée avec l'URL de la liaison, va l'utiliser.

- -

L'utilisation de la liaison ci-dessus a pour résultat que la ligne de XUL ci-dessous soit interprétée comme suit, en supposant que la barre de défilement est liée au XBL ci-dessus :

- -
<scrollbar>
-
-devient :
-
-<scrollbar>
-  <xul:scrollbarbutton type="decrement"/>
-    <xul:slider flex="1">
-      <xul:thumb/>
-    </xul:slider>
-  <xul:scrollbarbutton type="increment"/>
-</scrollbar>
-
- -

Les éléments au sein de la balise content sont ajoutés anonymement à la barre de défilement. Bien que le contenu anonyme soit affiché à l'écran, vous ne pouvez pas y accéder à l'aide d'un script par la voie normale. Dans XUL, c'est comme s'il n'y avait qu'un seul élément, bien qu'il se compose en réalité de plusieurs éléments.

- -

Si vous observez une barre de défilement dans une fenêtre Mozilla, vous verrez qu'elle est composée d'un bouton en forme de flèche, d'une zone de coulissement, d'une poignée à l'intérieur et d'un second bouton en forme de flèche à la fin, ce sont les éléments qui apparaissent dans le contenu XBL ci-dessus. Ces éléments pourraient à leur tour être liés à d'autres liaisons qui utilisent les éléments XUL de base. Notez que les éléments de contenu ont besoin de l'espace de nommage de XUL (ils apparaissent précédés de xul:), parce que ce sont des éléments de XUL et qu'ils ne sont pas valides dans XBL. Cet espace de nommage a été déclaré dans la balise bindings. Si vous n'utilisez pas l'espace de nommage sur les éléments de XUL, Mozilla supposera que ce sont des éléments XBL et il ne les comprendra pas, et vos éléments ne fonctionneront pas correctement.

- -

Exemple d'un champ de saisie de nom de fichier

- -

Un autre exemple, cette fois pour un champ dans lequel vous pourriez entrer un nom de fichier :

- -
<binding id="fileentry">
-  <content>
-    <textbox/>
-    <button label="Parcourir..."/>
-  </content>
-</binding>
-
- -

L'attachement de cette liaison sur un élément lui fera contenir un champ de saisie de texte, suivi d'un bouton 'Parcourir...'. Ce contenu interne est créé anonymement et ne peut être vu en utilisant le DOM (Modèle Objet de Document).

- -

Remplacement de l'élément de liaison

- -

Le contenu anonyme est créé automatiquement chaque fois qu'une liaison est attachée à un élément. Si vous placez des éléments fils à l'intérieur du contenu XUL, ils vont écraser les éléments fournis par la liaison. Par exemple, prenez cet extrait XUL, en supposant qu'il soit lié à la barre de défilement XBL de tout à l'heure :

- -
<scrollbar/>
-
-<scrollbar>
-  <button label="Écraser"/>
-</scrollbar>
-
- -

Puisque la première barre de défilement n'a pas de contenu qui lui est propre, celui-ci sera généré à partir de la définition de la liaison du fichier XBL. La seconde barre de défilement a son propre contenu donc elle l'utilisera à la place du contenu XBL, ce qui a pour résultat quelque chose qui ne ressemble plus à une barre de défilement. Notez que beaucoup d'éléments natifs de construction, comme les barres de défilement, ont leur définition XBL stockée dans des fichiers situés dans le répertoire "bindings" du paquetage toolkit.jar.

- -

Ce mécanisme s'applique seulement aux éléments définis à l'intérieur de la balise content. Les propriétés, les méthodes et d'autres aspects d'XBL restent disponibles, que le contenu provienne d'XBL ou que XUL fournisse son propre contenu.

- -

Utilisation de l'élément children

- -

Il peut y avoir des fois où vous souhaitez que soient montrés à la fois le contenu XBL et celui fournit par le fichier XUL. Il vous suffit d'utiliser l'élément children. Les éléments fils dans XUL sont ajoutés en lieu et place de l'élément children. C'est pratique pour créer des éléments graphiques de menu personnalisés. Par exemple, une version simplifiée d'un élément menulist éditable, pourrait être créée comme ceci :

- -
XUL:
-
-<menu class="dropbox">
-  <menupopup>
-    <menuitem label="1000"/>
-    <menuitem label="2000"/>
-  </menupopup>
-</menu>
-
-CSS:
-
-menu.dropbox {
-    -moz-binding:  url('chrome://example/skin/example.xml#dropbox');
-}
-
-XBL:
-
-<binding id="dropbox">
-  <content>
-    <children/>
-    <xul:textbox flex="1"/>
-    <xul:button src="chrome://global/skin/images/dropbox.jpg"/>
-  </content>
-</binding>
-
- -

Cet exemple crée un champ de saisie suivi d'un bouton. Le menupopup sera ajouté au contenu à l'emplacement spécifié par l'élément children. Notez que pour les fonctions du DOM, le contenu apparaîtra comme s'il était dans le fichier XUL, ainsi le menupopup sera un fils du menu. Le contenu XBL est caché ainsi le développeur d'une application sous XUL n'a même pas besoin de savoir qu'il est là.

- -

Le contenu résultant serait :

- -
<menu class="dropbox">
-  <menupopup>
-    <menuitem label="1000"/>
-    <menuitem label="2000"/>
-  </menupopup>
-  <textbox flex="1"/>
-  <button src="chrome://global/skin/images/dropbox.jpg"/>
-</menu>
-
- -

Attribut includes

- -

Dans certains cas, vous souhaiterez n'inclure que des types de contenus spécifiques et non d'autres. Ou bien, vous souhaiterez placer différents types de contenus à différents endroits. L'attribut includes peut être utilisé pour n'autoriser que certains éléments à apparaître dans le contenu. Sa valeur doit être déclarée pour un simple nom de balise, ou pour une liste de balises séparées par des barres verticales (Le symbole |).

- -
<children includes="button">
- -

Cette ligne va ajouter tous les boutons qui sont fils de l'élément lié en lieu et place de la balise children. Les autres éléments ne correspondront pas avec cette balise. Vous pouvez placer plusieurs éléments children dans une liaison pour placer différents types de contenus à différents endroits. Si un élément dans XUL ne correspond pas aux éléments children, cet élément (et les autres n'y correspondant pas) sera utilisé à la place du contenu lié.

- -

Voici un autre exemple. Disons que nous voulions créer un élément graphique qui affiche une image avec un bouton de zoom "Agrandir" et un bouton de zoom "Réduire" de part et d'autre. Il pourrait être créé avec une boîte qui contiendrait l'image et deux boutons. L'élément image doit être placé à l'extérieur du fichier XBL car il sera différent selon l'usage.

- -
XUL:
-
-<box class="zoombox">
-  <image src="images/happy.jpg"/>
-  <image src="images/angry.jpg"/>
-</box>
-
-XBL:
-
-<binding id="zoombox">
-  <content>
-    <xul:box flex="1">
-      <xul:button label="Agrandir"/>
-      <xul:box flex="1" style="border: 1px solid black">
-        <children includes="image"/>
-      </xul:box>
-      <xul:button label="Réduire"/>
-    </xul:box>
-  </content>
-</binding>
-
- -

Les fils explicites dans le fichier XUL seront placés à l'endroit où se trouve la balise children. Il y a deux images, ainsi toutes les deux seront ajoutées à côté de l'une et l'autre. Cela a pour conséquence un affichage équivalent au code suivant :

- -
<binding id="zoombox">
-  <content>
-    <xul:box flex="1">
-      <xul:button label="Agrandir"/>
-      <xul:box flex="1" style="border: 1px solid black">
-        <image src="images/happy.jpg"/>
-        <image src="images/angry.jpg"/>
-      </xul:box>
-      <xul:button label="Réduire"/>
-    </xul:box>
-  </content>
-</binding>
-
- -

D'un point de vue du DOM, les éléments fils sont toujours à leur emplacement original. En effet, la boîte XUL externe a deux fils qui sont les deux images. La boîte interne avec la bordure a un fils, la balise children. C'est une distinction importante lorsqu'on utilise le DOM avec XBL. Elle s'applique également aux règles du sélecteur CSS.

- -

Les éléments fils multiples

- -

Vous pouvez également utiliser plusieurs éléments children et avoir certains éléments placés à un endroit et d'autres éléments placés à un autre. En ajoutant l'attribut includes contenant une liste de nom de balises séparés par des barres verticales, vous pouvez placer uniquement les éléments correspondants à cet endroit. Par exemple, le fichier XBL suivant va faire apparaître des libellés et des boutons à un endroit différent des autres éléments :

- -

Exemple 1 : Source

- -
<binding id="navbox">
-  <content>
-    <xul:vbox>
-      <xul:label value="Libellés et boutons"/>
-      <children includes="label|button"/>
-    </xul:vbox>
-    <xul:vbox>
-      <xul:label value="Autres éléments"/>
-      <children/>
-    </xul:vbox>
-  </content>
-</binding>
-
- -

Le premier élément children n'inclut que les éléments label et button, comme indiqué dans son attribut includes. Le second élément children, parce qu'il n'a pas d'attribut includes, ajoute tous les éléments restants.

- -
-

Dans la prochaine section, nous verrons comment des attributs peuvent être hérités dans le contenu anonyme.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_assistant/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_assistant/index.html" deleted file mode 100644 index 8ca985799e..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_assistant/index.html" +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Création d'un assistant -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Création_d'un_assistant -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Creating_a_Wizard ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Beaucoup d'applications utilisent des assistants pour aider l'utilisateur dans des tâches complexes. XUL fournit un moyen de créer des assistants facilement.

- -

L'élément wizard

- -

Un assistant est un type spécial de boîte de dialogue, contenant un certain nombre de pages. Des boutons de navigation apparaissent en bas de la boîte de dialogue pour passer d'une page à l'autre. Les assistants sont habituellement utilisés pour aider l'utilisateur à effectuer des tâches complexes. Chaque page contient une seule question ou un ensemble de questions associées. À la dernière page, l'opération est effectuée.

- -

XUL fournit un élément wizard qui peut être utilisé pour créer des assistants. Le contenu à l'intérieur de l'élément wizard inclut tout le contenu de chaque page. Les attributs placés sur l'élément wizard sont utilisés pour contrôler la navigation. Quand vous créez un assistant, utilisez la balise wizard à la place de la balise window.

- -
Notez que pour le moment les assistants ne fonctionnent correctement qu'à partir d'URLs chrome.
- -

Un assistant consiste en un ensemble de sections, bien que la mise en page exacte variera pour chaque plateforme. L'aspect visuel de l'assistant s'adaptera à la plateforme de l'utilisateur. Une mise en page type inclura un titre en haut, un ensemble de boutons de navigations en bas, et le contenu de la page entre les deux.

- -

Le titre du haut est créé en utilisant l'attribut title comme on le ferait pour les fenêtres normales. Les boutons de navigation sont créés automatiquement. Les pages de l'assistant sont créées en utilisant l'élément wizardpage. Vous pouvez y placer tout contenu que vous voulez.

- -

Exemple d'assistant

- -

Exemple 1 : Source

- -
<?xml version="1.0" encoding="iso-8859-1"?>
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<wizard id="example-window" title="Assistant de sélection de chien"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <wizardpage>
-    <description>
-      Cet assistant vous aidera à sélectionner le type de chien qui sera le mieux pour vous.
-    </description>
-    <label value="Pourquoi voulez vous un chien ?"/>
-    <menulist>
-      <menupopup>
-        <menuitem label="Pour faire peur aux gens"/>
-        <menuitem label="Pour se débarrasser d'un chat"/>
-        <menuitem label="J'ai besoin d'un meilleur ami"/>
-      </menupopup>
-    </menulist>
-  </wizardpage>
-
-  <wizardpage description="Détails sur le chien">
-    <label value="Fournissez plus de détails sur le chien que vous désirez :"/>
-    <radiogroup>
-      <caption label="Taille"/>
-      <radio value="small" label="Petit"/>
-      <radio value="large" label="Grand"/>
-    </radiogroup>
-    <radiogroup>
-      <caption label="Sexe"/>
-      <radio value="male" label="Male"/>
-      <radio value="female" label="Femelle"/>
-    </radiogroup>
-  </wizardpage>
-
-</wizard>
-
- -
Image:xultu_wizard1.jpg
- -

L'assistant a deux pages, une qui a une liste déroulante et une autre qui a un ensemble de boutons radios. L'assistant sera formaté automatiquement, avec un titre en haut et un ensemble de boutons le long du bas de la fenêtre. L'utilisateur peut naviguer entre les pages de l'assistant avec les boutons 'Précédent' et 'Suivant'. Ces boutons s'activeront ou se désactiveront eux-mêmes aux moments appropriés. De plus, sur la dernière page, le bouton 'Terminer' apparaîtra. Tout ceci est automatique, aussi, vous n'avez rien à faire pour manipuler les pages.

- -

L'attribut description peut être éventuellement placé sur l'élément wizardpage pour fournir un sous-titre pour la page concernée. Dans l'exemple du dessus, il est placé sur la seconde page, mais pas sur la première.

- -

Gestion des changements de page

- -

Généralement, vous souhaitez réaliser une action après que le bouton 'Terminer' ait été pressé. Vous pouvez mettre un attribut onwizardfinish sur l'élément wizard pour accomplir cette tâche. Spécifiez-y un script qui exécutera ce que vous voulez et qui renverra 'true'. Le script peut être utilisé pour sauvegarder les informations que l'utilisateur a saisi dans l'assistant. Par exemple :

- -
<wizard id="example-window" title="Assistant de sélection de chien"
-  onwizardfinish="return saveDogInfo();"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- -

Quand l'utilisateur clique sur le bouton 'Terminer', la fonction saveDogInfo définie dans un script sera appelée pour sauvegarder les informations saisies. Si la fonction renvoie 'true', l'assistant se fermera. Si elle renvoie 'false', alors l'assistant ne se fermera pas, ce qui pourrait signifier par exemple que la fonction saveDogInfo a rencontré une saisie invalide.

- -

Il existe également les attributs similaires onwizardback, onwizardnext et onwizardcancel qui sont appelés quand les boutons 'Précédent', 'Suivant' et 'Annuler' sont respectivement pressés. Ces fonctions sont appelées quelque soit la page en cours affichée.

- -

Pour appeler un code différent en fonction de la page où vous êtes, utilisez les attributs onpagerewound ou onpageadvanced sur un élément wizardpage. Ils fonctionnent de manière similaire aux autres fonctions, excepté que vous pouvez utiliser un script différent pour chaque page. Cette méthode vous permet de valider les informations saisies sur chaque page avant que l'utilisateur ne continue.

- -

Une troisième méthode est l'utilisation des attributs onpagehide et onpageshow sur l'élément wizardpage. Ils sont appelés lorsque la page est cachée ou affichée, indifféremment du bouton pressé (excepté quand le bouton 'Annuler' est pressé ; vous devez utiliser onwizardcancel pour le vérifier).

- -

Ces trois méthodes devraient fournir suffisamment de souplesse pour gérer la navigation comme vous le souhaitez. Ce qui suit est un résumé des fonctions d'attributs appelées quand l'utilisateur presse 'Suivant', dans l'ordre dans lequel elles sont vérifiées. Dés que l'une renvoie 'false', la navigation est annulée.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributPlacé sur la baliseQuand est-il appelé ?
pagehidewizardpageAppelé sur la page que l'utilisateur quitte.
pageadvancedwizardpageAppelé sur la page que l'utilisateur quitte.
wizardnextwizardAppelé sur l'assistant.
pageshowwizardpageAppelé sur la page sur laquelle l'utilisateur entre.
- -

Un processus similaire existe pour le bouton 'Précédent'.

- -
À chaque fois que vous utiliserez une fonction dans un des événements ci-dessus, tel que pageadvanced, vous devrez utiliser return NomFonct() au lieu de simplement appeler NomFonct(). - -
<wizardpage pageadvanced='return NomFonct()'></wizardpage>
-
- -
-

Dans la prochaine section, nous verrons des fonctionnalités supplémentaires sur les assistants.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_programme_d'installation/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_programme_d'installation/index.html" deleted file mode 100644 index c83ee8d774..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251ation_d'un_programme_d'installation/index.html" +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Création d'un programme d'installation -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Création_d'un_programme_d'installation -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Creating_an_Installer ---- -

 

- -
-

« PrécédentSuivant »

-
- -
NdT : Attention, cette section décrit le mécanisme XPInstall propre à la suite Mozilla et à des versions anciennes de Mozilla Firefox. Pour les versions récentes de Mozilla Firefox, ce mode d'installation n'est plus le même, mais il n'est pas encore décrit dans ce tutoriel. Voir comment faire des extensions pour firefox sur xulfr.org.
- -

Cette section va décrire le paquetage d'une application XUL dans un programme d'installation.

- -

Paquetages d'installation XPI

- -

Mozilla propose un mécanisme qui peut être utilisé pour empaqueter des fenêtres XUL, des scripts, des thèmes graphiques et d'autres fichiers dans un seul installateur. Il suffit de placer le fichier d'installation quelque part où les utilisateurs pourront le télécharger. Un simple script peut être utilisé pour assurer le téléchargement et l'installation du paquetage. Ce mécanisme est appelé XPInstall (Cross Platform Install).

- -

Les installateurs XPI sont empaquetés dans des fichiers JAR. À l'intérieur d'un fichier JAR, vous pouvez ajouter toutes sortes de fichiers que vous voulez voir installés. De plus, les installateurs doivent contenir un script (un fichier nommé install.js) qui décrit le processus d'installation. Ce script a accès à quelques fonctions d'installation qui peuvent être employées pour installer des fichiers et des composants.

- -

Les fichiers d'installation JAR ont typiquement l'extension .xpi (prononcez zippy) pour les distinguer des autres fichiers d'archives. Les installateurs seront habituellement utilisés pour installer des composants Mozilla tels que des thèmes graphiques, des extensions et d'autres paquetages.

- -

Il y a plusieurs étapes pour démarrer et installer les composants. Elles sont décrites pas à pas ci dessous :

- -
    -
  1. Créer une page Web à partir de laquelle l'utilisateur peut charger l'application à installer. La page doit contenir un déclencheur d'installation qui est un petit script lançant l'installation.
  2. -
  3. Une boîte de dialogue présente à l'utilisateur le paquetage qui doit être installé. Il est possible pour le déclencheur de lancer de multiples installations. Dans ce cas, elles seront présentées dans une liste. L'utilisateur doit choisir de continuer ou d'annuler.
  4. -
  5. Si l'utilisateur choisit de continuer, le fichier d'installation XPI est téléchargé. Une barre de progression est affichée durant le processus.
  6. -
  7. Le fichier install.js est extrait de l'archive et exécuté. Le script va appeler les fonctions d'installation qui indiqueront quels fichiers de l'archive doivent être installés.
  8. -
  9. Une fois le script terminé, le nouveau paquetage a été installé. Si de multiples paquetages doivent être installés, leurs scripts se lanceront l'un après l'autre.
  10. -
- -

Déclencheurs d'installation

- -

Comme indiqué ci-dessus, le processus d'installation est lancé par un déclencheur d'installation. Il requiert l'utilisation de l'objet global spécial InstallTrigger. Il contient un certain nombre de méthodes qui peuvent être utilisées pour démarrer une installation. Vous pouvez utiliser cet objet dans un contenu local ou à distance, ce qui signifie qu'il est adapté pour un téléchargement à partir d'un site Web.

- -

Créons un exemple de déclencheur d'installation. Il nécessite l'utilisation de la fonction InstallTrigger.install(). Cette fonction a deux arguments, le premier est la liste des paquetages à installer, et le second est la référence à une fonction de rappel qui sera appelée lorsque l'installation est terminée. Voici un exemple :

- -
function doneFn ( name , result ){
-  alert("Le paquetage " + name + " a été installé avec un résultat de " + result);
-}
-
-var xpi = new Object();
-xpi["Calendar"] = "calendar.xpi";
-InstallTrigger.install(xpi,doneFn);
-
- -

Premièrement, nous définissons la fonction doneFn() qui sera appelée lorsque l'installation est terminée. Bien entendu, vous pouvez nommer cette fonction comme vous le souhaitez. Cette fonction a deux arguments. Le premier argument est le nom du paquetage qui vient juste d'être installé. Celui ci est important si vous installez de multiples composants. Le second argument est un code de résultat. Un code de valeur '0' signifie que l'installation s'est terminée avec succès. Si le code de résultat n'est pas nul, une erreur a eu lieu et la valeur représente un code d'erreur. Ici, la fonction doneFn() affiche simplement une boîte d'alerte à l'utilisateur.

- -

Ensuite, nous créons un tableau xpi qui contient le nom ('Calendar') et l'URL ('calendar.xpi') du programme d'installation. Vous pouvez ajouter une ligne similaire pour chaque paquetage que vous souhaitez installer. Finalement, nous appelons la fonction d'installation.

- -

Lorsque cette portion de script sera exécutée, le fichier calendar.xpi sera installé.

- -
-

Notre exemple de recherche de fichiers

- -

Essayons ce script avec notre exemple de recherche de fichiers.

- -
function doneFn ( name , result ){
-  if (result) alert("L'erreur suivante a eu lieu: " + result);
-}
-
-var xpi = new Object();
-xpi["Find Files"] = "findfile.xpi";
-InstallTrigger.install(xpi,doneFn);
-
-
- -

L'archive XPI

- -
Note : Si vous créez une nouvelle application XULRunner, extension, ou thème, consultez la page Bundles.
- -

Le fichier d'installation XPI doit obligatoirement contenir au minimum un fichier appelé install.js qui est un fichier JavaScript exécuté lors de l'installation. Les autres fichiers sont les fichiers à installer. Ces derniers sont typiquement placés dans des répertoires de l'archive mais ils n'ont pas lieu de l'être. Pour des fichiers chrome, ils devraient être structurés comme le répertoire chrome.

- -

Souvent, les seuls fichiers trouvés dans une archive XPI sont le script d'installation (install.js) et un fichier JAR. Ce fichier JAR contient tous les fichiers utilisés par votre application. Les composants de Mozilla sont installés de cette manière.

- -

Parce que les fichiers XPI ne sont rien d'autres que des fichiers ZIP, vous pouvez les créer en utilisant un utilitaire zip (NdT : les fichiers JAR sont également des fichiers ZIP).

- -
-

Notre exemple de recherche de fichiers

- -

Pour notre exemple de recherche de fichiers, nous créerons une structure dans l'archive comme ce qui suit :

- -
install.js
-findfile
-  content
-    contents.rdf
-    findfile.xul
-    findfile.js
-  skin
-    contents.rdf
-    findfile.css
-  locale
-    contents.rdf
-    findfile.dtd
-
- -

Un répertoire a été ajouté pour chaque partie du paquetage, pour le contenu, pour le thème graphique et pour la localisation. Des fichiers 'contents.rdf' ont également été ajoutés car ils sont nécessaires pour l'enregistrement des fichiers chrome.

-
- -
-

Dans la section suivante, nous aborderons le script d'installation.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

- -

 

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_des_bo\303\256tes_de_dialogue/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_des_bo\303\256tes_de_dialogue/index.html" deleted file mode 100644 index cc2a63e092..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_des_bo\303\256tes_de_dialogue/index.html" +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: Créer des boîtes de dialogue -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Créer_des_boîtes_de_dialogue -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Creating_Dialogs ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Une application XUL requiert souvent l'affichage de boîtes de dialogue. Cette section décrit comment les construire.

- -

Création d'une boîte de dialogue

- -

La fonction openDialog() est utilisée pour ouvrir une fenêtre. Une fonction apparentée est open(). Cette fonction a plusieurs différences importantes. Au lieu d'une fenêtre (window), elle affiche une boîte de dialogue (dialog), ce qui implique qu'elle demande quelque chose à l'utilisateur. Elle peut avoir des différences subtiles dans sa manière de fonctionner et d'apparaître à l'utilisateur suivant les différentes plateformes.

- -

De plus, la fonction openDialog() peut prendre des arguments additionnels en plus des trois premiers habituels. Ces arguments sont passés à la nouvelle boîte de dialogue et placés dans un tableau stocké dans la propriété arguments de la nouvelle fenêtre. Vous pouvez passer autant d'arguments que nécessaire. C'est un moyen pratique de fournir des valeurs par défaut aux champs de la boîte de dialogue.

- -
var somefile=document.getElementById('enterfile').value;
-
-window.openDialog("chrome://findfile/content/showdetails.xul","showmore",
-                  "chrome",somefile);
-
- -

Dans cet exemple, la boîte de dialogue showdetails.xul sera affichée. L'argument 'somefile' provenant d'un élément d'id 'enterfile' lui est transmis. Dans un script utilisé par la boîte de dialogue, nous pouvons alors faire référence à l'argument en utilisant la propriété arguments de la fenêtre. Par exemple :

- -
var fl = window.arguments[0];
-
-document.getElementById('thefile').value = fl;
-
- -

C'est un moyen efficace de passer des valeurs à la nouvelle fenêtre. Vous pouvez renvoyer des valeurs de la fenêtre ouverte vers la fenêtre originelle de deux manières. Première méthode : vous pouvez utiliser la propriété window.opener qui contient une référence à la fenêtre qui a ouvert la boîte de dialogue. Seconde méthode : vous pouvez passer une fonction ou un objet en argument, puis appeler la fonction ou modifier l'objet dans la boîte de dialogue ouverte.

- -
Note : openDialog() nécessite un privilège UniversalBrowserWrite. Cela signifie que cette méthode ne fonctionnera pas sur des sites distants ; pour ces sites, utilisez la méthode window.open() à la place.
- -

L'élément dialog

- -

L'élément dialog doit être utilisé à la place de l'élément window lors de la création d'une boîte de dialogue. Il offre la possibilité de construire jusqu'à quatre boutons au bas de la boîte de dialogue, pour « OK », « Annuler », etc. Vous n'avez pas besoin d'inclure le code XUL pour chaque bouton mais vous devez fournir le code à exécuter quand l'utilisateur les presse. Ce mécanisme est nécessaire car les différentes plateformes ont un ordre d'affichage spécifique de ces boutons.

- -

Exemple de boîte de dialogue

- -

Exemple 1: Source Voir

- -
<?xml version="1.0" encoding="iso-8859-1"?>
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-
-<dialog id="donothing" title="Ne fait rien"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        buttons="accept,cancel"
-        ondialogaccept="return doOK();"
-        ondialogcancel="return doCancel();">
-
-<script>
-function doOK(){
-  alert("Vous avez appuyé sur OK !");
-  return true;
-}
-
-function doCancel(){
-  alert("Vous avez appuyé sur Annuler !");
-  return true;
-}
-</script>
-
-<description value="Veuillez sélectionner un bouton"/>
-
-</dialog>
-
- -

Vous pouvez placer tous les éléments que vous souhaitez dans une boîte de dialogue. L'élément dialog a des attributs que les fenêtres n'ont pas. L'attribut buttons, par exemple, est utilisé pour spécifier quels boutons doivent apparaître dans la boîte de dialogue. Les valeurs suivantes peuvent être utilisées en les séparant par des virgules :

- - - -

Vous pouvez exécuter du code lors de l'appui des boutons en utilisant les attributs ondialogaccept, ondialogcancel, ondialoghelp et ondialogdisclosure. Si vous essayez l'exemple ci-dessus, vous remarquerez que la fonction doOK est appelée quand le bouton 'OK' est pressé et que la fonction doCancel est appelée quand le bouton 'Annuler' est pressé.

- -

Les deux fonctions doOK et doCancel renvoient 'true', ce qui indique que la boîte de dialogue doit être fermée. Si la valeur 'false' était renvoyée, la boîte de dialogue resterait ouverte. Ce fonctionnement pourrait être utilisé dans le cas où une valeur invalide serait entrée dans un champ de la boîte de dialogue.

- -

Voici d'autres attributs utiles :

- - - -
Note : Les attributs label sont nécessaires pour les sites distants et ont probablement été omis dans les exemples précédents à cause du bug 224996.
- -

Exemple de dialogue avec plus de fonctionnalités

- -
<?xml version="1.0" encoding="iso-8859-1?>
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-
-<dialog id="myDialog" title="Mon dialogue"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        onload="window.sizeToContent();"
-        buttons="accept,cancel"
-        buttonlabelaccept="Choix favori"
-        buttonaccesskeyaccept="S"
-        ondialogaccept="return doSave();"
-        buttonlabelcancel="Annuler"
-        buttonaccesskeycancel="n"
-        ondialogcancel="return doCancel();">
-
-<script>
-function doSave(){
- //faireTraitement()
- return true;
-}
-function doCancel(){
-  return true;
-}
-</script>
-
-<dialogheader title="Mon dialogue" description="Exemple de dialogue"/>
-<groupbox flex="1">
-  <caption label="Sélectionnez votre fruit préféré"/>
-  <radio id="orange" label="Des oranges car elles sont juteuses"/>
-  <radio id="violet" selected="true" label="Des frises à cause de leur couleur"/>
-  <radio id="yellow" label="Des bananes car elles sont déjà emballées"/>
-</groupbox>
-
-</dialog>
-
- -

Les éléments correspondants aux boutons sont accessibles en JavaScript par le script suivants :

- -
// le bouton d'acceptation
-var acceptButt = document.documentElement.getButton("accept")
-
- -

Autres exemples

- -

D'autres exemples sont disponibles dans Dialogues et invites.

- -
-

Dans la prochaine section, nous allons voir comment ouvrir des boîtes de dialogue de sélection de fichiers.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_un_th\303\250me/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_un_th\303\250me/index.html" deleted file mode 100644 index 55430426d5..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_un_th\303\250me/index.html" +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Créer un thème -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Créer_un_thème -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Creating_a_Skin ---- -

 

- -
-

« PrécédentSuivant »

-
- -
-

Cette documentation n'a pas été mise à jour pour Firefox Quantum. Il n'y aucune garantie que la modification du fichier userChrome.css fonctionne encore d'une version à l'autre de Firefox. Celle-ci pourrait également provoquer la survenue de bugs difficiles à diagnostiquer. À utiliser à vos risques et périls !

-
- -

Cette section décrit comment créer un thème simple. Nous ne l'appliquerons qu'à la fenêtre de recherche de fichiers.

- -

Un thème simple

- -

L'image ci-dessous montre la boîte de dialogue de recherche de fichiers actuelle. Créons un thème que nous pourrons lui appliquer. Normalement, un thème doit s'appliquer à l'application entière, mais, pour plus de facilité, nous allons nous concentrer sur la boîte de dialogue de recherche de fichiers. Pour cette raison, nous n'allons modifier que le fichier 'findfile.css' plutôt que le fichier 'global.css'. Cette section suppose que vous démarriez avec le thème Classic. Si vous le souhaitez, faites une copie des fichiers utilisés par la boîte de dialogue de recherche de fichiers avant de les modifier.

- -

Image:xultu_cskin1.jpg

- -
Note du traducteur : Pour les versions récentes de mozilla (> 1.6) et de firefox (>0.8), avec le fichier findfile.css tel qu'il est, il se peut que vous n'obteniez pas un design identique à ce que montre l'image. En effet, dans le thème classic, des styles -moz-appearance ont été ajoutés depuis aux différents éléments, leur permettant d'avoir le même aspect que les éléments natifs de l'interface graphique utilisée (windows ou kde, macos, etc.). Ce style empêche certains styles d'être appliqués correctement. Pour pouvoir modifier complètement l'apparence des éléments utilisés dans notre exemple et afin de suivre le tutoriel, il a été rajouté le code suivant dans la feuille de styles de l'exemple : - -
tab, button, menulist, menubar,menupopup,toolbar,tabpanels {
-   -moz-appearance:none;
-}
-
-
- -

Vous devez créer un fichier 'findfile.css' dans un thème personnalisé, ou vous pouvez placer ce fichier temporairement dans le répertoire "content" et y faire référence en utilisant une directive de la feuille de styles. Vous pouvez modifier le fichier 'findfile.css' existant directement pour voir à quoi cela ressemble, ou vous pouvez créer un thème personnalisé et y faire un lien.

- -

Création d'un paquetage de thème personnalisé

- -

Pour créer un thème, faites ce qui suit : (si vous utilisez Firefox 1.5 ou supérieur, consultez plutôt les fichiers manifest)

- -
    -
  1. Créez un répertoire quelque part où vous placerez les fichiers du thème.
  2. -
  3. Copiez un fichier manifeste (contents.rdf) du thème Classic ou Modern dans ce nouveau répertoire.
  4. -
  5. Modifiez les références dans le fichier manifeste à un nom personnalisé pour votre thème. Par exemple, changez les références de 'classic/1.0' vers 'blueswayedshoes/1.0'.
  6. -
  7. Ajoutez une ligne de la forme suivante au fichier 'chrome/installed-chrome.txt' :
    - skin,install,url,file:///stuff/blueswayedshoes/
    - où la dernière partie pointe vers le répertoire que vous avez créé. Vérifiez bien que vous avez mis un slash à la fin.
  8. -
- -

Copiez le fichier 'findfile.css' original dans le nouveau répertoire. Nous l'utiliserons comme base pour le nouveau thème. Nous pourrons y faire référence par la suite en utilisant l'URL 'chrome://findfile/skin/findfile.css'.

- -

Ajout de règles de styles

- -

Décidons d'abord quels types de changements nous voulons effectuer. Nous allons faire de simples changements de couleurs, modifier les styles des boutons et modifier un peu l'espacement. Commençons par les menus, les barres d'outils et le panneau global des onglets.

- -

L'ajout des règles de styles suivantes à 'findfile.css' provoquera les changements montrés dans l'image qui suit.

- -
window > box {
-  background-color: #0088CC;
-}
-
-menubar,menupopup,toolbar,tabpanels {
-  background-color: lightblue;
-  border-top: 1px solid white;
-  border-bottom: 1px solid #666666;
-  border-left: 1px solid white;
-  border-right: 1px solid #666666;
-}
-
-caption {
-  background-color: lightblue;
-}
-
- -

Image:xultu_cskin2.jpg

- - - -

La première règle au-dessus (pour window > vbox) spécifie que la boîte enfant de la fenêtre principale a une couleur différente. Ce n'est probablement pas la meilleure façon de procéder. Nous devrions plutôt modifier la fenêtre et plutôt utiliser une classe de style. C'est ce que nous allons faire. De cette manière, nous pourrons modifier le code XUL sans avoir besoin de conserver la boîte comme premier élément enfant de la fenêtre.

- -
CSS:
-.findfilesbox {
-  background-color: #0088CC;
-}
-
-XUL:
-<vbox class="findfilesbox" orient="vertical" flex="100%">
-<toolbox>
-
- -

Arrondis sur les onglets

- -

Ensuite, modifions les onglets. Nous allons rendre l'onglet sélectionné en gras et changer les arrondis sur les onglets.

- -
tab:first-child {
-  -moz-border-radius: 4px 0px 0px 0px;
-}
-
-tab:last-child {
-  -moz-border-radius: 0px 4px 0px 0px;
-}
-
-tab[selected="true"] {
-  color: #000066;
-  font-weight: bold;
-  text-decoration: underline;
-}
-
- -
Image:xultu_cskin3.jpg
- -

Deux règles changent l'apparence normale de l'élément tab. La première met un arrondi sur le premier onglet et la seconde met un arrondi sur le dernier. On utilise ici une règle de styles propre à Mozilla, -moz-border-radius, qui crée des coins arrondis. La bordure supérieure gauche du premier onglet et la bordure supérieure droite du second onglet sont arrondies de quatre pixels et les autres coins sont arrondis de zéro pixels, ce qui équivaut à aucun arrondi. Augmentez ces valeurs pour un arrondi plus prononcé et diminuez-les pour une apparence plus rectangulaire.

- -

La dernière règle ne s'applique qu'aux onglets qui ont leur attribut selected à la valeur 'true'. Elle met le texte d'un onglet sélectionné en gras, souligné et bleu foncé. Notez dans l'image que ce style n'est appliqué qu'au premier onglet, puisqu'il est sélectionné.

- -

Ajout des icônes de barres d'outils

- -

Il est assez difficile de distinguer les boutons de la barre d'outils des commandes du menu. Nous pourrions ajouter des icônes aux boutons pour les rendre plus clairs. L'éditeur Mozilla Composer fournit des icônes pour les boutons ouvrir et sauvegarder que nous utilisons pour gagner du temps. Nous pouvons choisir l'image d'un bouton en utilisant la propriété CSS list-style-image.

- -
#opensearch {
-  list-style-image: url("chrome://editor/skin/icons/btn1.gif");
-  -moz-image-region: rect(48px 16px 64px 0);
-  -moz-box-orient: vertical;
-}
-
-#savesearch {
-  list-style-image: url("chrome://editor/skin/icons/btn1.gif");
-  -moz-image-region: rect(80px 16px 96px 0);
-  -moz-box-orient: vertical;
-}
-
- -
Image:xultu_cskin4.jpg
- -

Mozilla met à disposition une propriété de style spécifique, -moz-image-region, qui permet à un élément d'utiliser une partie d'une image. Vous pouvez vous la représenter comme un découpage de l'image. Vous mettez comme valeur de la propriété une position et une taille comprise dans une image et le bouton n'affichera que cette section de l'image. Cette technique vous permet d'utiliser la même image pour plusieurs boutons et de mettre une portion différente pour chacun d'entre eux. Quand vous avez beaucoup de boutons, avec chacun d'eux des états pour hover, active et disabled, elle fait gagner de l'espace qui serait sinon occupé par plusieurs images. Dans le code ci-dessus, nous utilisons la même image pour tous les boutons, mais nous mettons une portion différente de l'image pour chacun. Si vous regardez cette image (btn1.gif), vous remarquerez qu'elle contient une grille d'images plus petites, de 16 fois 16 pixels chacune.

- -
Note du traducteur : étant donné que l'image en question fait partie de Mozilla Composer, si vous ouvrez l'exemple avec Firefox, vous ne verrez pas les images des boutons, car Mozilla Composer n'est livré qu'avec la suite Mozilla.
- -

La propriété -moz-box-orient est utilisée pour orienter le bouton verticalement, pour que l'image apparaisse au-dessus de son libellé. Cette propriété a la même signification que l'attribut orient. Elle est pratique puisque le thème ne peut pas modifier le code XUL. La plupart des attributs de l'élément box ont des propriétés CSS qui leur correspondent.

- -

Autres modifications

- -

Nous allons maintenant faire quelques changements aux boutons situés en bas de la boîte de dialogue, en réutilisant des icônes de Mozilla pour gagner du temps. Si vous créez votre propre thème, vous aurez besoin de créer de nouvelles icônes ou de copier les icônes dans de nouveaux fichiers. Si vous suivez l'exemple de cette section, copiez juste les fichiers vers votre nouveau thème et modifiez les URL en conséquence.

- -
#find-button {
-  list-style-image: url("chrome://global/skin/checkbox/images/cbox-check.jpg");
-  font-weight: bold;
-}
-
-#cancel-button {
-  list-style-image: url("chrome://global/skin/icons/images/close-button.jpg");
-}
-
-button:hover {
-  color: #000066;
-}
-
- -
Image:xultu_cskin5.jpg
- -

Nous ajoutons des images aux boutons et mettons le texte du bouton « Rechercher » en gras pour indiquer que c'est le bouton par défaut. La dernière règle s'applique aux boutons quand la souris les survole (état hover). Nous mettons une couleur de texte bleu foncé dans ce cas. Finalement, quelques changements mineurs de l'espacement autour des éléments, par l'utilisation de marges :

- -
tabbox {
-  margin: 4px;
-}
-
-toolbarbutton {
-  margin-left: 3px;
-  margin-right: 3px;
-}
-
- -

Après ces changements, la boîte de dialogue de recherche de fichiers apparaît maintenant comme ceci :

- -

Image:xultu_cskin-fin.jpg

- -

Comme vous pouvez le voir, de simples changements des règles de styles apportent une apparence assez différente à la fenêtre de recherche de fichiers. Nous pourrions continuer en modifiant les menus, les poignées sur la barre d'outils et les éléments textbox et checkbox.

- -

Création d'un thème global

- -

Le thème créé ci-dessus est simple et ne s'applique qu'à la boîte de dialogue de recherche de fichiers. Certaines des modifications du thème pourraient être placées dans les feuilles de styles globales (situées dans le répertoire global du thème) pour s'appliquer à toutes les applications. Par exemple, il serait peu cohérent d'avoir des images différentes entre les cases à cocher de la fenêtre de recherche de fichiers et celles d'autres fenêtres. Ce changement devrait vraiment être intégré dans la feuille de styles globale.

- -

Essayez de déplacer les styles CSS de 'findfile.css' dans 'global.css' puis regardez les fenêtres de dialogue de Mozilla (Le visualisateur de cookie est un bon exemple). Vous remarquerez qu'elles ont adopté les règles que nous avons ajoutées. Certaines des règles entrent en conflit avec celles déjà dans les feuilles de styles globales. Par exemple, des règles sont déjà définies pour les boutons, les onglets, etc., et nous avons défini des règles additionnelles pour ces éléments. Quand vous modifiez le thème global, vous devez fusionner les changements avec les règles existantes.

- -

Pour une meilleure adaptation du thème graphique, il vaut mieux déclarer les règles de styles liées à l'apparence dans le répertoire global plutôt que dans des fichiers de styles séparés. Les couleurs, les polices de caractère et l'apparence générale des composants graphiques doivent y être inclus. Si vous modifiez la couleur d'un élément dans un fichier de thème local (comme 'findfile.css'), la fenêtre de dialogue peut paraître bizarre si l'utilisateur change son style global. N'espérez pas que l'utilisateur utilise le thème par défaut.

- -
-

L'exemple du dialogue de recherche de fichier avec ce thème : Source Voir

-
- -
-

La section suivante explique comment rendre une application XUL localisable.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_une_fen\303\252tre/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_une_fen\303\252tre/index.html" deleted file mode 100644 index 3cff976726..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/cr\303\251er_une_fen\303\252tre/index.html" +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Créer une fenêtre -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Créer_une_fenêtre -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Creating_a_Window ---- -
-

« PrécédentSuivant »

-
- -

Nous allons créer un simple outil de recherche de fichiers tout au long de ce tutoriel. Avant tout, cependant, nous devons étudier la syntaxe de base d'un fichier XUL.

- -

Création d'un fichier XUL

- -

Un fichier XUL peut avoir n'importe quel nom mais il doit avoir l'extension .xul. Le fichier XUL le plus simple a la structure suivante :

- -
<?xml version="1.0" encoding="ISO-8859-1"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window
-       id="findfile-window"
-       title="Recherche de fichiers"
-       orient="horizontal"
-       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-...
-</window>
-
- -

Cette fenêtre ne sert à rien puisqu'elle ne comporte pas d'élements d'interface utilisateur. Ceux ci seront ajoutés dans la section suivante. Voici l'analyse ligne par ligne du code ci-dessus :

- -
    -
  1. <?xml version="1.0"?>
    - Cette ligne déclare simplement qu'il s'agit d'un fichier XML. Vous devrez normalement ajouter cette ligne à l'identique au début de chaque fichier xul, tout comme vous mettriez la balise HTML au début d'un fichier HTML.
  2. -
  3. <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
    - Cette ligne est utilisée pour spécifier la feuille de style à utiliser pour le fichier. C'est la syntaxe que les fichiers XML emploient pour importer des feuilles de style. Dans ce cas, nous importons les styles trouvés dans le répertoire chrome global/skin. Nous n'avons pas indiqué de fichier spécifique ainsi Mozilla déterminera quels fichiers du dossier il emploiera. Ici, le fichier le plus important, global.css, est sélectionné. Ce fichier contient toutes les déclarations par défaut pour tous les éléments XUL. Puisque XML ne connaît pas la manière dont les éléments doivent être affichés, ce fichier s'en charge. De façon générale, vous mettrez cette ligne au debut de chaque fichier XUL. Vous pouvez également importer d'autres feuilles de style en utilisant la même syntaxe. Notez que vous devrez normalement importer la feuille de style globale à l'intérieur du fichier de votre propre feuille de style.
  4. -
  5. <window
    - Cette ligne déclare que vous allez décrire une fenêtre window. Chaque fenêtre d'interface utilisateur est décrit dans un fichier différent. Cette balise s'apparente à une balise HTML qui entoure l'ensemble d'un document HTML, sauf qu'elle décrit une interface utilisateur au lieu d'un document. Plusieurs attributs peuvent être placés dans la balise window -- dans ce cas, ils sont au nombre de quatre. Dans cet exemple, chaque attribut est placé sur une ligne séparée bien que ce ne soit pas une obligation.
  6. -
  7. id="findfile-window"
    - L'attribut id est utilisé comme un identifiant, de sorte que des scripts puissent y faire référence. Vous mettrez normalement un attribut id sur tous les éléments. Vous êtes libre de choisir n'importe quel nom, toutefois, il est préférable qu'il soit pertinent.
  8. -
  9. title="Recherche de fichiers"
    - L'attribut title décrit le texte qui apparaîtra dans la barre de titre de la fenêtre quand elle sera affichée. Dans le cas présent, le texte 'Recherche de fichiers' sera affiché.
  10. -
  11. orient="horizontal"
    - L'attribut orient spécifie l'arrangement des éléments de la fenêtre. La valeur 'horizontal' indique que les éléments doivent être placés horizontalement dans la fenêtre. Vous pouvez également utiliser la valeur 'vertical' signifiant que les éléments seront affichés en colonne. Comme c'est la valeur par défaut, vous pouvez omettre cet attribut si vous souhaitez avoir l'orientation verticale.
  12. -
  13. xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    - Cette ligne déclare l'espace de nommage pour XUL que vous devrez mettre dans l'élément window pour indiquer que tous ses enfants sont du XUL. Notez que cette URL n'est jamais téléchargée réellement. Mozilla reconnaîtra cette URL en interne.
  14. -
  15. ...
    - Mettez ici les éléments (les boutons, les menus et les autres composants de l'interface utilisateur) à afficher dans la fenêtre. Nous en ajouterons quelques uns dans les prochaines sections.
  16. -
  17. </window>
    - Et enfin, nous devons fermer la balise window à la fin du fichier. -

    Ouverture d'une fenêtre

    - -

    Afin d'ouvrir une fenêtre XUL, plusieurs méthodes peuvent être employées. Si vous n'êtes qu'à l'étape de développement, vous pouvez juste taper l'URL (commençant par chrome:, file: ou d'autre type d'URL) dans la barre d'adresses du navigateur Mozilla. Vous pouvez également double-cliquer sur le fichier dans votre gestionnaire de fichiers, en supposant que les fichiers XUL soient associés à Mozilla. La fenêtre XUL apparaîtra cependant dans la fenêtre de navigateur et non dans une nouvelle, mais c'est souvent suffisant durant les premières étapes de développement.

    - -

    La manière correcte, naturellement, est d'ouvrir la fenêtre en utilisant JavaScript. Aucune nouvelle syntaxe n'est nécessaire, vous pouvez employer la fonction window.open() comme pour tout document HTML. Cependant, une option additionnelle, appelée 'chrome' est nécessaire pour indiquer au navigateur que le document à ouvrir est un chrome. Celle-ci s'ouvrira sans barre d'outils, sans menu et sans aucun élément qu'une fenêtre de navigateur dispose normalement. La syntaxe est décrite ci-dessous :

    - -
    window.open(url,windowname,flags);
    -
    -où l'argument flags contient "chrome" comme dans cet exemple :
    -
    -window.open("chrome://navigator/content/navigator.xul", "bmarks", "chrome,width=600,height=300");
    - -
    -

    L'exemple findfile.xul

    - -

    Commençons par créer le fichier de base pour la boîte de dialogue de recherche de fichiers. Créez un fichier appelé findfile.xul et mettez le dans le répertoire content spécifié dans le fichier findfile.manifest (nous l'avons créé dans la section précédente). Ajoutez au fichier le squelette XUL montré au début de cette page et sauvegardez le.

    - -

    Vous pouvez utiliser le paramètre en ligne de commande '-chrome' pour indiquer le fichier XUL à ouvrir au démarrage de mozilla. S'il n'est pas spécifié, la fenêtre par défaut s'ouvrira (habituellement la fenêtre de navigateur). Par exemple, nous pourrions ouvrir la boite de dialogue de recherche de fichiers avec l'une des commandes suivantes :

    - -
    mozilla -chrome chrome://findfile/content/findfile.xul
    -mozilla -chrome resource:/chrome/findfile/content/findfile/findfile.xul
    -
    - Si vous utilisez cette commande en ligne (dans l'hypothèse que cela soit possible sur votre plateforme), la boite de dialogue de recherche de fichiers s'ouvrira par défaut au lieu de la fenêtre de navigateur de Mozilla. Naturellement, puisque nous n'avons pas mis d'éléments graphiques dans la fenêtre, vous ne verrez rien. Dans la section suivante, quelques éléments y seront ajoutés.
    - -

    Pour en voir quand même l'effet, la commande en ligne suivante ouvrira la fenêtre des marque-pages :

    - -
    mozilla -chrome chrome://communicator/content/bookma...rksManager.xul
    -
    -Si vous utilisez Firefox, essayez :
    -firefox -chrome chrome://browser/content/places/places.xul
    - -

    L'option '-chrome' ne donne aucun privilège supplémentaire au fichier. Au lieu de cela, il entraine l'ouverture du fichier spécifié dans une fenêtre racine sans aucune interface chrome de navigation, comme la barre d'adresses ou le menu. Seules les URLs chrome ont des privilèges supplémentaires.

    - -
    L'Éditeur dynamique XUL vous permet de taper du code XUL et de voir immédiatement le résultat dans Mozilla !
    - -

    Problèmes

    - -
      -
    • Si la fenêtre XUL ne se montre pas sur le bureau mais a un icône sur la barre de tâches, vérifiez la déclaration xml-stylesheet. Assurez vous que vous avez inclus correctement la feuille de style :
    • -
    - -
    <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
    -
    - -
    -

    Dans la section suivante, nous ajouterons des boutons dans la fenêtre.

    - - -
  18. -
diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/document_object_model/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/document_object_model/index.html deleted file mode 100644 index 6b269306e4..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/document_object_model/index.html +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: Document Object Model -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Document_Object_Model -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Document_Object_Model ---- -

 

-
-

« PrécédentSuivant »

-
-

Le Document Object Model (DOM, modèle objet d'un document) peut être utilisé pour modifier les éléments XUL ou obtenir des informations à leur propos.

-

Introduction au DOM

-

Le DOM est utilisé pour stocker l'arbre des nœuds XUL. Quand un fichier XUL est chargé, les balises sont interprétées et converties dans une structure hiérarchique de nœuds du document, un pour chaque balise et bloc de texte. La structure DOM peut être examinée et modifiée en utilisant des méthodes dédiées. Des éléments XUL spécifiques fournissent également des fonctions additionnelles pouvant être utilisées.

-

Chaque fichier XUL chargé aura son propre document affiché dans une fenêtre ou un cadre. Bien qu'il ne puisse y avoir qu'un seul document associé à une fenêtre à un moment donné, vous pouvez charger des documents supplémentaires en utilisant plusieurs méthodes.

-

Dans Mozilla, on peut accéder au DOM et le manipuler en utilisant JavaScript. Les divers objets DOM possèdent des fonctions accessibles par script, pourtant, il est important de noter que le DOM est une API qui est accessible par JavaScript. JavaScript lui-même n'est jamais qu'un langage de script pouvant accéder à ces objets parce que Mozilla fournit ces objets à l'utilisation.

-

Dans JavaScript, il existe un unique objet global toujours disponible. Vous pouvez vous reférer aux propriétés et méthodes de l'objet global sans avoir à les qualifier avec un objet. Par exemple, si l'objet global possède une propriété name, vous pouvez changer le nom avec le code name=7 sans avoir à spécifier l'objet à utiliser. Dans un contexte de navigateur, la fenêtre est l'objet global. Il en va de même pour XUL. Naturellement, l'objet global sera différent pour chaque fenêtre. Chaque cadre aura également un objet window séparé.

-

On se refère souvent à la fenêtre en utilisant la propriété window, bien que ce soit optionnel. Quelquefois, cette pratique sert uniquement à clarifier la portée de la méthode à laquelle vous vous reférez. Par exemple, les deux lignes suivantes qui ouvrent une nouvelle fenêtre, sont fonctionnellement équivalentes :

-
window.open("test.xul","_new");
-open("test.xul","_new");
-
-

Lorsque vous déclarez une fonction ou une variable en tête de script, en dehors d'une fonction, vous êtes en train de déclarer une propriété de l'objet global. En XUL, chaque fonction que vous déclarez sera définie comme une propriété de l'objet window. Par exemple, le code suivant affichera deux fois le texte 'message' dans une alerte.

-
function getText(){
-  return "Message";
-}
-
-alert(getText());
-alert(window.getText());
-
-

De fait, si vous vouler accéder à des variables ou appeler une fonction déclarée dans un script utilisé par une autre fenêtre, vous pouvez y accéder juste en utilisant l'objet window de l'autre fenêtre. Par exemple, si nous avions combiné les deux derniers exemples dans un seul fichier, nous pourrions appeler la fonction getText au sein de l'autre fenêtre (par ex. la fenêtre test.xul). Pour cela, nous pouvons faire la chose suivante :

-
alert(window.opener.getText());
-

Chaque fenêtre possède une propriété opener contenant l'objet window l'ayant ouverte. Dans cet exemple, nous récupérons la fenêtre responsable de l'ouverture et appelons la fonction getText déclarée dans un script situé dans celle-ci. Notez que nous qualifions la propriété avec l'identifiant window uniquement pour plus de clarté.

-

La méthode open() de la fenêtre retourne également une référence à la nouvelle fenêtre, donc vous pouvez appeler des fonctions de la nouvelle fenêtre à partir de l'ouvrante. Toutefois, il est important de noter que la méthode open() renvoie sa valeur de retour avant que la fenêtre soit complètement chargée, donc les fonctions ne seront pas forcément disponibles pour autant.

-

L'objet window n'est défini par aucune spéficication DOM, mais est quelquefois considéré, dans Mozilla, comme faisant partie du DOM niveau 0, un nom utilisé par des développeurs pour se reférer aux fonctions assimilées DOM avant que celles-ci ne soient ajoutées aux spécifications. Le document actuel affiché dans une fenêtre peut être récupéré en utilisant la propriété document du document. Depuis qu'elle est devenue la propriété de la fenêtre la plus couramment utilisée, la propriété document est habituellement utilisée sans le qualifieur document.

-

Mozilla founit divers objets de document en fonction de son type. Les trois documents principaux sont les HTMLDocument, XMLDocument et XULDocument, respectivement pour les documents HTML, XML et XUL. Évidemment, c'est ce dernier type de document qui est utilisé pour le XUL. Les trois types de document sont très similaires. Concrètement, ils partagent tous la même implémentation de base. Mais il existe des fonctions spécifiques à chacun de ces documents.

-

Récupérer des éléments

-

La méthode la plus courante pour récupérer un élément dans un document est de lui affecter un attribut id et d'utiliser la méthode getElementById() du document. Nous avons ajouté l'attribut id à un certain nombre d'éléments dans la boîte de recherche de fichiers. Par exemple, nous pouvons obtenir l'état de la case à cocher en utilisant le code ci-dessous :

-
var state = document.getElementById('casecheck').checked;
-

La valeur 'casecheck' correspond à l'id de la case à cocher définissant la sensibilité à la casse. Une fois que nous savons si elle est cochée ou non, nous pouvons utiliser cette indication pour effectuer la recherche. Nous pourrions procéder de façon similaire pour l'autre case à cocher, ou n'importe quel autre élément qui a un attribut id. Nous aurons par exemple besoin de récupérer le texte dans le champ de saisie.

-
-

Notre exemple de recherche de fichiers

-

Il n'est pas nécessaire d'afficher la barre de progression et l'arbre de données vide quand la boîte de dialogue pour la recherche de fichiers est affichée pour la première fois. Ceux-ci ont été ajoutées de façon à ce que nous puissions les voir. Retirons-les maintenant, et affichons-les seulement lorsque le bouton « Rechercher » sera pressé. Au départ, nous devons les rendre invisible. L'attribut hidden est utilisé pour contrôler la visibilité d'un élément.

-

Nous allons modifier la barre de progression de façon à ce qu'elle soit cachée au départ. Nous allons aussi lui ajouter un attribut id pour qu'un script puisse y faire référence pour pouvoir la cacher ou l'afficher. Profitons-en pour cacher aussi le séparateur et l'arbre des résultats, puisque nous n'en aurons besoin qu'après avoir effectué une recherche.

-
<tree id="results" hidden="true" flex="1">
-  .
-  .
-  .
-<splitter id="splitbar" resizeafter="grow" hidden="true"/>
-
-<hbox>
-
-  <progressmeter id="progmeter" value="50%"
-    style="margin: 4px;" hidden="true"/>
-
-

Nous avons ajouté l'attribut hidden et mis sa valeur à 'true'. L'élément est ainsi caché lors de sa première apparition.

-

Ensuite, ajoutons une fonction qui sera appelée quand le bouton « Rechercher » sera pressé. Nous mettrons les scripts dans le fichier séparé 'findfile.js'. Dans une section précédente, nous avons ajouté l'élément script dans le fichier XUL. Si vous ne l'avez pas encore fait, faites-le maintenant, comme ci-dessous. Nous ajouterons aussi un gestionnaire oncommand au bouton « Rechercher ».

-
<script src="findfile.js"/>
-  .
-  .
-  .
-<button id="find-button" label="Rechercher"
-   oncommand="doFind();"/>
-
-

À présent, créez un autre fichier nommé 'findfile.js' dans le même répertoire que 'findfile.xul'. Nous ajouterons la fonction doFind() dans ce fichier. La balise script de ce fichier XUL peut contenir du code. Cependant, pour diverses raisons, notamment pour de meilleures performances, vous devriez toujours mettre vos scripts dans des fichiers séparés, excepté pour les courts morceaux de code qui peuvent se trouver directement dans les gestionnaires d'événement.

-
function doFind(){
-  var meter = document.getElementById('progmeter');
-  meter.hidden = false;
-}
-
-

Cette fonction récupère d'abord une référence à la barre de progression en utilisant son id, 'progmeter'. La seconde ligne du corps de la fonction change l'état de hidden pour rendre l'élément visible.

-

Finalement, ajoutons une boîte de dialogue qui affiche ce que nous sommes en train de rechercher. Évidemment nous n'en voudrons pas dans la version finale, mais ajoutons la maintenant pour nous assurer que quelque chose se produise.

-
function doFind(){
-  var meter=document.getElementById('progmeter');
-  meter.hidden = false;
-  var searchtext=document.getElementById('find-text').value;   alert("Recherche de \"" + searchtext + "\"");
-}
-
-

Maintenant, avec cette boîte d'alerte placée ici, nous saurons ce qui se produit quand nous cliquons sur le bouton « Rechercher ». Nous pouvons ajouter du code pour obtenir aussi ce qui est sélectionné dans les listes déroulantes.

-

Source Voir

-
-

Le DOM des éléments XUL

-

Chaque élément XUL possède un lot d'attributs, un lot de propriétés et un lot d'enfants.

- -

Il est possible de manipuler dynamiquement les attributs, propriétés et enfants d'un élément en utilisant les méthodes du DOM.

-

Il est important de noter que les attributs et les propriétés sont deux choses différentes. Tout simplement car le fait qu'un attribut avec un nom donné existe ne signifie pas qu'il existe une propriété correspondante ayant le même nom. Pourtant, c'est souvent le cas. Par exemple, pour obtenir le flex d'un élément, vous pouvez utiliser la propriété flex. Dans ce cas, le code implicite retourne simplement la valeur de l'attribut. Pour d'autres propriétés, XUL accomplira des calculs plus complexes.

-

Vous pouvez manipuler les attributs d'un élément en utilisant l'une des méthodes suivantes :

-
getAttribute ( nomAttribut ) 
Renvoie la valeur de l'attribut 'nomAttribut'
hasAttribute ( nomAttribut ) 
Renvoie 'true' si l'attribut de nom 'nomAttribut' a une valeur
setAttribute ( nomAttribut , valeurAdonner ) 
Fixe la valeur de l'attribut 'nomAttribut' à la valeur 'valeurAdonner'
removeAttribute ( nomAttribut ) 
Supprime l'attribut 'nomAttribut'
-
-

Ces fonctions vous permettent d'obtenir ou de modifier la valeur d'un attribut à tout moment. Par exemple, pour utiliser la valeur de l'attribut flex, vous pourriez utiliser le code suivant :

-
 var box = document.getElementById('uneboite');
- var flex = box.getAttribute("flex");
-
- var box2 = document.getElementById('uneautreboite');
- box2.setAttribute("flex", "2");
-
-

Pourtant, l'attribut flex a une propriété de script correspondante pouvant être utilisée à la place. Ce n'est pas plus efficace, mais c'est légèrement plus court à écrire. L'exemple suivant fait la même chose qu'au-dessus, en utilisant la propriété flex à la place :

-
 var box = document.getElementById('uneboite');
- var flex = box.flex;
-
- var box2 = document.getElementById('uneautreboite');
- box2.flex = 2;
-
-

Une fois que vous avez une référence à un élément, vous pouvez appeler les propriétés de cet élément. Par exemple, pour obtenir la propriété hidden d'un élément, vous pouvez utiliser la syntaxe element.hidden où "element" est une référence à l'élément. Notez que la plupart des propriétés listées dans la référence est en corrélation avec les attributs communs des éléments. Il y a des différences, bien sûr, par exemple, alors que getAttribute("hidden") retournera la chaîne '"true"' pour un élément caché, la propriété hidden retournera une valeur 'true' booléenne. Dans ce cas, la conversion de type est faite pour vous, donc la propriété est plus commode.

-

Comme pour chaque document, l'objet "element" pour les éléments XUL n'est pas le même que pour des éléments HTML et XML. Chaque élément XUL implémente l'interface XULElement. Un élément XUL est un élément déclaré avec l'espace de nommage (namespace) XUL. Ainsi, les éléments XUL auront cette interface même s'ils sont ajoutés à d'autres documents XML, et les éléments non-XUL ne l'auront pas. L'interface XULElement possède un certain nombre de propriétés et méthodes spécifiques aux éléments XUL, pour beaucoup héritées de l'interface générique des éléments DOM.

-

Un espace de nommage est un URI qui spécifie le type d'élément. Voici quelques exemples :

-
<button xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
-<button xmlns="http://www.w3.org/1999/xhtml"/>
-<html:button xmlns:html="http://www.w3.org/1999/xhtml"/>
-<html:button xmlns:html="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
-
-

Les espaces de nommages sont spécifiés en utilisant l'attribut xmlns.

- -

C'est une distinction importante. En fait, le texte utilisé pour le préfixe n'est pas significatif lorsqu'il détermine quel type d'élément est utilisé.

-

Le DOM fournit un certain nombre de fonctions relatives aux espaces de nommage, similaires aux fonctions de base. Par exemple, la fonction getAttributeNS() est similaire à la fonction getAttribute(), excepté un argument supplémentaire pouvant être fourni pour spécifier un attribut dans un espace de nommage spécifique.

-

Quelques éléments XUL disposent de leurs propres propriétés qui leurs sont spécifiques. Reportez-vous à la référence pour un guide complet des attributs et propriétés disponibles pour un élément.

- -

Le DOM est une structure en arbre composé d'un unique nœud racine avec ses enfants. Vous pouvez obtenir une référence au nœud racine en utilisant la propriété documentElement du document. Le nœud racine est toujours un élément, mais ce n'est pas le cas pour tous les nœuds de l'arbre. Un élément correspond à une balise dans la source XUL, mais vous pouvez également trouver des nœuds de texte, des nœuds de commentaire et quelques autres types dans un arbre de document. Dans le cas de XUL, l'élément racine sera la balise window dans le document XUL. Chaque nœud de l'arbre peut avoir des enfants et ces enfants peuvent avoir des nœuds fils à leur tour. Comme le DOM est une structure en arbre, vous pouvez naviguer au sein de cet arbre en utilisant une grande variété de propriétés. Quelques méthodes, parmi les plus communes, sont listées ci-après :

-
firstChild 
Référence au premier nœud fils d'un élément
lastChild 
Référence au dernier nœud fils d'un élément
childNodes 
Contient la liste des enfants d'un élément
parentNode 
Référence au père d'un nœud
nextSibling 
Référence au prochain nœud de même niveau
previousSibling 
Référence au nœud précédent de même niveau
-
-

Ces propriétés vous permettent de naviguer de diverses manières au sein d'un document. Par exemple, vous pouvez obtenir un premier enfant d'un élément en utilisant la propriété firstChild et ensuite, naviguer au sein de tous ses enfants en utilisant la propriété nextSibling. Ou vous pourriez accomplir la même chose en parcourant les items du tableau childNodes listant tous les enfants. Dans Mozilla, la dernière façon est plus efficace.

-

L'exemple suivant montre comment parcourir tous les enfants du n½ud racine :

-
var childNodes = document.documentElement.childNodes;
-for (var i = 0; i < childNodes.length; i++) {
-  var child = childNodes[i];
-  // faire quelque chose avec child
-}
-
-

La variable 'childNodes' contiendra les enfants de l'élément racine du document. Nous pouvons donc utiliser une boucle for pour parcourir les enfants, en accédant à chaque item comme pour un tableau.

-
-

Dans la prochaine section, nous découvrirons comment modifier le DOM.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/donn\303\251es_persistantes/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/donn\303\251es_persistantes/index.html" deleted file mode 100644 index 696401deaf..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/donn\303\251es_persistantes/index.html" +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Données persistantes -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Données_persistantes -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Persistent_Data ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section décrit comment sauvegarder l'état d'une fenêtre XUL.

-

Mémorisation d'un état

-

Lors de la création d'une application importante, il est fréquent de vouloir sauvegarder l'état d'une fenêtre tout au long des sessions. Par exemple, la fenêtre doit se souvenir quelles étaient les barres d'outils masquées après que l'utilisateur l'ait quitté.

-

Une possibilité serait d'écrire un script chargé de collecter l'information que vous voulez sauvegarder et de l'enregistrer dans un fichier. Toutefois, cette opération deviendrait pénible à chaque application. Heureusement, XUL propose un mécanisme pour sauvegarder les états d'une fenêtre.

-

L'information est collectée et stockée dans un fichier RDF (localstore.rdf) dans le même répertoire que les autres préférences de l'utilisateur. Ce fichier retient les états de chaque fenêtre. Cette méthode a l'avantage de fonctionner avec les profils utilisateurs de Mozilla, ainsi chaque utilisateur a ses propres paramètres.

-

XUL vous permet de sauvegarder l'état de n'importe quel élément. Typiquement, vous pouvez sauvegarder les états des barres d'outils, les positions des fenêtres et si certains panneaux sont affichés ou non, mais vous pouvez sauvegarder presque tout.

-

Attribut persist

-

Pour permettre la sauvegarde d'états, vous devez simplement ajouter l'attribut persist à l'élément qui contient la valeur que vous voulez sauvegarder. L'attribut persist doit être affecté par une liste d'éléments séparés par des espaces. L'élément concerné doit également avoir un attribut id pour permettre de l'identifier.

-

Par exemple, pour sauvegarder la position d'une fenêtre, vous devrez procéder comme ceci :

-
<window
-  id="someWindow"
-  width="200"
-  height="300"
-  persist="width height"
-  .
-  .
-  .
-
-

Les deux attributs de l'élément window, width et height, seront sauvegardés. Vous pourriez ajouter à l'attribut persist des attributs supplémentaires à mémoriser tout en les séparant par un espace. Vous pouvez ajouter l'attribut persist à n'importe quel élément et mémoriser n'importe quel attribut. Vous pouvez utiliser des valeurs inhabituelles si vous ajustez les attributs par un script.

-
-

Exemple de recherche de fichiers

-

Ajoutons un attribut persist à quelques éléments de notre boîte de dialogue de recherche de fichiers. Pour sauvegarder la position de la fenêtre, nous devons modifier l'élément window :

-
<window
-  id="findfile-window"
-  title="Recherche de fichiers"
-  persist="screenX screenY width height"
-  orient="horizontal"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-

Cette modification va sauvegarder la position x et y de la fenêtre, sa largeur et sa hauteur. Nous poursuivrons plus tard la mémorisation de l'état du séparateur. La mémorisation de l'onglet sélectionné n'aurait aucun sens.

-

Exemple de recherche de fichiers : Source Voir

-
-
-

Dans la section suivante, nous verrons comment appliquer des feuilles de styles à des fichiers XUL.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_le_mod\303\250le_de_bo\303\256te/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_le_mod\303\250le_de_bo\303\256te/index.html" deleted file mode 100644 index 974efe3272..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_le_mod\303\250le_de_bo\303\256te/index.html" +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Détails sur le modèle de boîte -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Détails_sur_le_modèle_de_boîte -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Box_Model_Details ---- -

 

-
-

« PrécédentSuivant »

-
-

Nous avons déjà vu beaucoup de fonctionnalités sur le modèle de boîtes. Dans cette section, nous verrons quelques détails supplémentaires en nous appuyant sur des exemples.

-

Plus de détails sur la mise en page

-

Les propriétés de style comme min-width et max-height peuvent être appliquées à n'importe quels éléments. Nous les avons ajouté aux boutons et aux champs de saisie, mais nous pouvons aussi les ajouter aux éléments d'espacement ou aux boîtes. De même, l'attribut flex peut être appliqué à n'importe quel élément.

-

Exemple 1: Source Voir

-
<hbox flex="1">
-   <button label="Gauche" style="min-width: 100px;" flex="1"/>
-   <spacer flex="1"/>
-   <button label="Droite" style="min-width: 100px;" flex="1"/>
-</hbox>
-
-

Dans l'exemple ci-dessus, les trois éléments se redimensionnent eux-mêmes car il sont tous flexibles. Les deux boutons ont une largeur minimum de 100 pixels. Les deux boutons ne seront jamais plus petits que cette taille mais ils pourront toujours s'élargir. Ici, la fenêtre doit apparaître avec une largeur d'un peu plus de 200 pixels. C'est suffisant pour les deux boutons. Car si les trois éléments sont flexibles, ils ne nécessitent pas pour autant plus de place, la flexibilité n'ajoute pas d'espace supplémentaire.

-
Image:xultu_boxdet1.png
-

Comme il est montré dans l'image ci-dessus, il y a deux boutons qui s'étirent verticalement pour remplir leur élément conteneur, qui dans ce cas est le hbox. L'attribut align contrôle ce comportement sur une boîte horizontale. Vous pouvez aussi empêcher cet étirement en précisant une hauteur maximale sur l'élément ou mieux, sur la boîte elle-même. Si une boîte a une hauteur maximale, les éléments qu'elle contient sont limités en hauteur par celle-ci. Cependant, le problème est que vous devez connaître au préalable la taille d'un élément pour pouvoir le spécifier à la boîte.

-

Exemple 2: Source Voir

-
<hbox flex="1" align="top">
-   <button label="Gauche" style="min-width: 100px;" flex="1"/>
-   <spacer flex="1"/>
-   <button label="Droite" style="min-width: 100px;" flex="1"/>
-</hbox>
-
-

Résumé du modèle de boîte

-

Pour parfaire une mise en page complexe, vous devrez généralement ajouter des boîtes imbriquées, spécifier une taille minimale et maximale pour quelques éléments, et rendre certains éléments flexibles. La meilleure interface est celle qui peut être affichée sans problème dans différentes tailles. Le modèle de boîte peut être difficile à appréhender si vous n'essayez pas différentes choses par vous-même.

-

Voici une courte description des deux types de boîtes :

-

Boîtes horizontales

-
  1. Affichent chaque élément les uns à coté des autres horizontalement.
  2. Les éléments flexibles le sont horizontalement.
  3. Le groupement (NdT : attribut pack) contrôle le placement horizontal des éléments fils.
  4. L'alignement contrôle la manière dont les lignes d'éléments seront alignées verticalement.
  5. -
-

Boîtes verticales

-
  1. Affichent chaque élément verticalement en colonnes.
  2. Les éléments flexibles le sont verticalement.
  3. Le groupement contrôle le placement vertical des éléments fils.
  4. L'alignement contrôle la manière dont les colonnes d'éléments seront alignées horizontalement.
  5. -
-

Vous pouvez mettre des boîtes n'importe où dans un fichier XUL, même dans un élément HTML comme une table. Cependant, l'affichage sera en partie dépendant de l'élément HTML. Cela signifie que l'attribut flex risque de ne pas réagir exactement comme vous le voudriez. Rappelez-vous que la flexibilité n'a de sens que pour les éléments qui sont directement à l'intérieur d'une boîte, ou d'un élément qui est assimilé à une boîte.

-

Exemples de mise en page

-

1. Utiliser les spacers

-

Exemple 3: Source Voir

-
<hbox>
-   <button label="Un"/>
-   <spacer style="width: 5px"/>
-   <button label="Deux"/>
-</hbox>
-
-

Ici, un espacement est utilisé comme séparateur entre deux boutons, en précisant une largeur de 5 pixels. Vous pouvez aussi utiliser les marges de la propriété CSS margin.

-

2. Centrer des boutons

-

Exemple 4: Source Voir

-
<hbox pack="center" align="center" flex="1">
-   <button label="Regardez Moi!"/>
-   <button label="Cliquez Moi!"/>
-</hbox>
-
-

Cet exemple propose une boîte horizontale flexible contenant deux boutons. La boîte possède l'attribut pack qui est utilisé pour centrer les boutons horizontalement. L'attribut align, quant à lui, aligne verticalement les boutons. Le résultat est que les boutons seront centrés dans la boîte dans les deux directions. Cet exemple fonctionnera aussi avec une boîte verticale, sauf que le second bouton sera alors sous le premier, au lieu d'être à coté de lui.

-

3. Une fenêtre de recherche dans le texte

-

Exemple 5: Source Voir

-
<?xml version="1.0" encoding="iso-8859-1" ?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window id="findtext" title="Recherche dans un texte" orient="horizontal"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <vbox flex="3">
-    <label control="t1" value="Mots clés :"/>
-    <textbox id="t1" style="min-width: 100px;" flex="1"/>
-  </vbox>
-
-  <vbox style="min-width: 150px;" flex="1" align="start">
-    <checkbox id="c1" label="Ignorer la casse"/>
-    <spacer flex="1" style="max-height: 30px;"/>
-    <button label="Rechercher"/>
-  </vbox>
-
-</window>
-
-
Image:xultu_boxdet-ex3.png
-

Ici, deux boîtes verticales sont créées, une pour le champ texte et l'autre pour la case à cocher et le bouton de recherche. La boîte de gauche a une flexibilité 3 fois plus grande que celle de droite donc elle prendra toujours 3 fois plus de place quand la taille de la fenêtre augmentera. La boîte de droite impose une largeur minimum de 150 pixels.

-

Le champ de saisie est flexible donc il s'ajustera à la taille de la fenêtre. Il impose aussi une largeur minimum de 100 pixels. La case à cocher apparaît dans la boîte de droite avec son libellé. Juste en dessous de la case à cocher, il y a un spacer (espacement). L'espacement s'agrandira ou se rétrécira mais n'excédera pas 30 pixels. Le résultat est que la case à cocher et le bouton de recherche seront séparés par un espace qui ne fera pas plus de 30 pixels.

-

La seconde boîte a un alignement de valeur 'start'. Les trois éléments fils seront par conséquent alignés sur le bord gauche. Si l'alignement n'était pas précisé, sa valeur par défaut serait 'stretch', ce qui aurait pour effet de positionner les éléments fils les uns à coté des autres horizontalement. Puisque nous ne voulons pas que le bouton de recherche change de taille, nous devons préciser un alignement.

-
-

Dans la prochaine section, nous allons en apprendre un peu plus sur un type de boîte plus spécifique, le groupe de boîte.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_les_vues_d'arbres/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_les_vues_d'arbres/index.html" deleted file mode 100644 index d9257abad2..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/d\303\251tails_sur_les_vues_d'arbres/index.html" +++ /dev/null @@ -1,298 +0,0 @@ ---- -title: Détails sur les vues d'arbres -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Détails_sur_les_vues_d'arbres -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Tree_View_Details ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section décrit quelques fonctionnalités supplémentaires des vues d'arbre.

-

Création d'une vue hiérarchique personnalisée

-

Dans la section précédente, nous avons créé une vue d'arbre simple qui était implémentée avec un minimum de fonctionnalités. À présent, regardons quelques fonctions supplémentaires que les vues peuvent implémenter. Ici, nous examinerons comment créer un ensemble hiérarchique d'items utilisant la vue. C'est un processus relativement astucieux qui implique de conserver une trace des items qui sont des enfants et une trace de l'état des lignes, ouvertes ou fermées.

-

Imbrication de niveaux

-

Chaque ligne dans l'arbre possède un niveau d'imbrication. Les lignes les plus hautes ont un niveau 0, les enfants de ces lignes ont un niveau 1, leurs enfants le niveau 2 et ainsi de suite. L'arbre interroge la vue pour chaque ligne en appelant sa méthode getLevel() pour connaître le niveau de cette ligne. La vue devra retourner 0 pour les premiers parents et des valeurs plus élevées pour les lignes intérieures. L'arbre utilisera cette information pour déterminer la structure hiérarchique de ces lignes.

-

En complément de la méthode getLevel(), la fonction hasNextSibling() retourne pour une ligne donnée la valeur 'true' si elle est suivie d'une autre ligne de même niveau qu'elle. Cette fonction est spécifiquement utilisée pour dessiner l'imbrication des lignes sur le côté de la vue de l'arbre.

-

La méthode getParentIndex() est supposée retourner la ligne parente d'une ligne donnée, c'est-à-dire : la ligne précédente qui a un niveau d'imbrication inférieur. Toutes ces méthodes doivent être implémentées par la vue pour que les enfants soient manipulés correctement.

-

Conteneurs

-

Trois autres fonctions, isContainer, isContainerEmpty et isContainerOpen sont utilisées pour manipuler un item parent dans l'arbre.

- -

Notez que l'arbre n'appellera ni isContainerEmpty, ni isContainerOpen pour les lignes qui ne sont pas conteneurs en se basant sur la valeur de retour de la méthode isContainer.

-

Un conteneur peut être affiché différemment d'un non-conteneur. Par exemple, un conteneur peut avoir un icône de dossier devant lui. Une feuille de styles peut être utilisée pour personnaliser l'aspect des items en se basant sur diverses propriétés telles que l'ouverture d'une ligne conteneur. La stylisation sera décrite dans une prochaine section. Un conteneur non vide sera agrémenté d'une poignée (NdT&nbsp;: "twisty", petit '+' ou '-' ou un triangle sur les Macintosh) permettant à l'utilisateur d'ouvrir ou de fermer la ligne pour voir les items enfants. Les conteneurs vides n'auront pas de poignées, mais seront toujours considérés comme des conteneurs.

-

Lorsque l'utilisateur clique sur la poignée pour ouvrir une ligne, l'arbre appellera la méthode toggleOpenState(). La vue met alors en œuvre les opérations nécessaires pour intégrer les lignes enfants et mettre à jour l'arbre avec les nouvelles lignes.

-

Résumé des méthodes

-

Voici un récapitulatif des méthodes nécessaires pour implémenter des vues hiérarchiques :

-
getLevel(ligne)
-hasNextSibling(ligne, apresIndex)
-getParentIndex(ligne)
-isContainer(ligne)
-isContainerEmpty(ligne)
-isContainerOpen(ligne)
-toggleOpenClose(ligne)
-
-

L'argument apresIndex de la fonction hasNextSibling est utilisée pour une raison d'optimisation, afin de démarrer la recherche à partir de la prochaine ligne sœur (ligne de même niveau d'imbrication). Par exemple, l'appelant pourrait déjà connaître la position de la prochaine ligne sœur. Imaginez une situation où une ligne possède des sous-lignes et que ces sous-lignes aient des lignes enfants dont quelques-unes sont ouvertes. Dans ce cas, la détermination de l'index de la prochaine ligne sœur prendrait du temps dans certaines implémentations.

-

Exemple d'une vue personnalisée hiérarchique

-

Voyons tous ces points dans un exemple simple qui construit un arbre à partir d'un tableau. Cet arbre ne supporte qu'un niveau parent avec un seul niveau enfant, mais il est possible de l'étendre facilement avec d'autres niveaux. Nous l'examinerons portion par portion.

-
<window onload="init();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<tree id="elementList" flex="1">
-  <treecols>
-    <treecol id="element" label="Élément" primary="true" flex="1"/>
-  </treecols>
-  <treechildren/>
-</tree>
-
-</window>
-
-

Nous utilisons un arbre simple qui ne contient pas de données dans treechildren. La fonction init est appelée au chargement de la fenêtre pour initialiser l'arbre. Elle définit simplement la vue personnalisée en récupérant l'arbre et en définissant sa propriété view. Nous définirons treeView plus tard.

-
function init() {
-  document.getElementById("elementList").view = treeView;
-}
-
-

La vue d'arbre personnalisée aura besoin d'implémenter un certain nombre de méthodes dont les plus importantes seront examinées individuellement. Cet arbre supporte un seul niveau de parenté avec un niveau enfant interne, mais il peut être étendu pour intégrer sans trop d'effort des niveaux supplémentaires. Tout d'abord, nous définirons deux structures pour conserver les données de l'arbre, la première contiendra une carte relationnelle entre les parents et leurs éventuels enfants, et la seconde contiendra un tableau des lignes visibles. Souvenez-vous qu'une vue doit conserver elle-même une trace des lignes visibles.

-
var treeView = {
-  childData : {
-    Solids: ["Argent", "Or", "Plomb"],
-    Liquids: ["Mercure"],
-    Gases: ["Hélium", "Azote"]
-  },
-
-  visibleData : [
-    ["Solides", true, false],
-    ["Liquides", true, false],
-    ["Gaz", true, false]
-  ],
-
-

La structure childData contient un tableau des enfants pour chacun des trois nœuds parents. Le tableau visibleData commence avec seulement trois items visibles, les trois items de haut niveau. Des items seront ajoutés et supprimés depuis ce tableau quand les items sont ouverts ou fermés. Le principe est le suivant : lorsqu'une ligne parente est ouverte, ses enfants sont récupérés depuis la carte childData et insérés dans le tableau visibleData. Par exemple, si la ligne 'Liquides' est ouverte, son enfant unique dans le tableau childData, l'enfant 'Mercure', sera inséré dans le tableau visibleData après 'Liquides' mais avant 'Gaz'. La taille du tableau sera incrémentée de un. Les deux valeurs booléennes présentes dans chaque ligne dans la structure visibleData indiquent respectivement si une ligne est un conteneur et si elle est ouverte. Évidemment, le nouvel enfant inséré aura ces deux valeurs initialisées à 'false'.

-

Implémentation de l'interface de vue d'arbre

-

Ensuite, nous avons besoin d'implémenter l'interface de vue de l'arbre. Tout d'abord, les fonctions simples :

-
  treeBox: null,
-  selection: null,
-
-  get rowCount()                     { return this.visibleData.length; },
-  setTree: function(treeBox)         { this.treeBox = treeBox; },
-  getCellText: function(idx, column) { return this.visibleData[idx][0]; },
-  isContainer: function(idx)         { return this.visibleData[idx][1]; },
-  isContainerOpen: function(idx)     { return this.visibleData[idx][2]; },
-  isContainerEmpty: function(idx)    { return false; },
-  isSeparator: function(idx)         { return false; },
-  isSorted: function()               { return false; },
-  isEditable: function(idx, column)  { return false; },
-
-

La fonction rowCount retournera la taille du tableau visibleData. Notez qu'elle devrait retourner le nombre courant de lignes visibles, pas le nombre total de lignes. Donc, au début, seulement trois items sont visibles et la valeur retournée par rowCount devrait être trois, même si six lignes sont cachées.

-

La fonction setTree sera appelée pour définir l'objet boîte de l'arbre. L'objet boîte de l'arbre est un type spécialisé d'objet boîte propre aux arbres qui sera examiné en détail dans la prochaine section. Il est utilisé pour aider à la représentation graphique de l'arbre. Dans cet exemple, nous avons seulement besoin d'une fonction de l'objet boîte capable de redessiner l'arbre quand des items sont ajoutés ou supprimés.

-

Les fonctions getCellText, isContainer et isContainerOpen retournent juste l'élément correspondant dans le tableau visibleData. Enfin, les fonctions restantes peuvent retourner 'false' puisque nous n'avons pas besoin de leurs fonctionnalités. Si nous avions eu des lignes parents sans enfant, nous aurions implémenté la fonction isContainerEmpty pour quelle retourne 'true' pour ces éléments.

-
  getParentIndex: function(idx) {
-    if (this.isContainer(idx)) return -1;
-    for (var t = idx - 1; t >= 0 ; t--) {
-      if (this.isContainer(t)) return t;
-    }
-  },
-
-

La fonction getParentIndex sera nécessaire pour retourner l'index du parent d'un item donné. Dans notre exemple simple, il y a seulement deux niveaux d'imbrication, donc nous savons que les conteneurs n'ont pas de parents, la valeur '-1' est retournée pour ces items. Dans le cas contraire, nous devons parcourir les lignes en arrière pour rechercher celle qui est un conteneur. Ensuite, la fonction getLevel.

-
  getLevel: function(idx) {
-    if (this.isContainer(idx)) return 0;
-    return 1;
-  },
-
-

La fonction getLevel est simple. Elle retourne juste '0' pour une ligne conteneur et '1' pour une ligne non-conteneur. Si nous voulions ajouter un niveau d'imbrication supplémentaire, ces lignes enfants auraient un niveau de '2'.

-
  hasNextSibling: function(idx, after) {
-    var thisLevel = this.getLevel(idx);
-    for (var t = idx + 1; t < this.visibleData.length; t++) {
-      var nextLevel = this.getLevel(t)
-      if (nextLevel == thisLevel) return true;
-      else if (nextLevel < thisLevel) return false;
-    }
-  },
-
-

La fonction hasNextSibling doit retourner 'true' quand une ligne donnée est suivie d'une ligne de même niveau (une sœur). Le code ci-dessus utilise une méthode basique qui consiste à parcourir les lignes après celle donnée, en retournant 'true' si une ligne de même niveau est trouvée et 'false' si une ligne de niveau inférieur est rencontrée. Dans cet exemple simple, cette méthode est bonne, mais un arbre avec davantage de données aura besoin d'utiliser une méthode optimisée pour déterminer s'il existe une ligne suivante sœur.

-

Ouverture ou fermeture d'une ligne

-

La dernière fonction est toggleOpenState. C'est la plus complexe. Elle a besoin de modifier le tableau visibleData lorsqu'une ligne est ouverte ou fermée.

-
  toggleOpenState: function(idx) {
-    var item = this.visibleData[idx];
-    if (!item[1]) return;
-
-    if (item[2]) {
-      item[2] = false;
-
-      var thisLevel = this.getLevel(idx);
-      var deletecount = 0;
-      for (var t = idx + 1; t < this.visibleData.length; t++) {
-        if (this.getLevel(t) > thisLevel) deletecount++;
-        else break;
-      }
-      if (deletecount) {
-        this.visibleData.splice(idx + 1, deletecount);
-        this.treeBox.rowCountChanged(idx + 1, -deletecount);
-      }
-    }
-    else {
-      item[2] = true;
-
-      var label = this.visibleData[idx][0];
-      var toinsert = this.childData[label];
-      for (var i = 0; i < toinsert.length; i++) {
-        this.visibleData.splice(idx + i + 1, 0, [toinsert[i], false]);
-      }
-      this.treeBox.rowCountChanged(idx + 1, toinsert.length);
-    }
-  },
-
-

D'abord nous vérifions si la ligne est un conteneur. Si elle ne l'est pas, la fonction retourne juste que les non-conteneurs ne peuvent pas être ouverts ou fermés. Comme le troisième élément du tableau (celui avec l'index 2) indique si une ligne est ouverte ou fermée, nous utilisons deux blocs de code, le premier pour fermer une ligne et le second pour ouvrir une ligne. Examinons chaque bloc de code, mais en commençant par le second, chargé d'ouvrir une ligne.

-
      item[2] = true;
-
-      var label = this.visibleData[idx][0];
-      var toinsert = this.childData[label];
-      for (var i = 0; i < toinsert.length; i++) {
-        this.visibleData.splice(idx + i + 1, 0, [toinsert[i], false]);
-      }
-      this.treeBox.rowCountChanged(idx + 1, toinsert.length);
-
-

La première ligne de code définit la ligne item comme étant ouverte dans le tableau, ainsi le prochain appel de la fonction toggleOpenState saura qu'elle doit fermer la ligne. Ensuite, regardons les données pour la ligne dans la carte childData. Le résultat est que la variable 'toinsert' sera définie avec un des tableaux enfants, par exemple '["Argent", "Or", "Plomb"]' si la ligne 'Solides' est celle qu'on demande d'ouvrir. Ensuite, nous utilisons la fonction de tableau splice pour insérer une nouvelle ligne pour chaque item. Pour 'Solides', trois items seront insérés.

-

Enfin, la fonction de boîte d'arbre rowCountChanged a besoin d'être appelée. Rappelez-vous que l'objet treeBox est un objet de boîte d'arbre qui a été défini plus tôt par un appel de la fonction setTree. L'objet de boîte d'arbre sera créé par l'arbre pour vous et vous pourrez appeler ses fonctions. Dans ce cas, nous utilisons la fonction rowCountChanged pour informer l'arbre que quelques lignes de données ont été ajoutées. L'arbre redessinera son contenu avec pour résultat que les lignes enfants apparaîtront à l'intérieur du conteneur. Les autres fonctions implémentées ci-dessus, telles que getLevel et isContainer, sont utilisées par l'arbre pour déterminer son affichage.

-

La fonction rowCountChanged prend deux arguments, l'index de la ligne où doit se faire l'insertion et le nombre de lignes à insérer. Dans le code ci-dessus nous indiquons que la ligne de départ est la valeur de 'idx' + 1, elle sera la première ligne enfant sous le parent. L'arbre utilisera cette information et ajoutera l'espace nécessaire pour le nombre approprié de lignes en poussant les lignes suivantes vers le bas. Assurez-vous de fournir le nombre correct, ou l'arbre pourrait se redessiner incorrectement ou essayer de dessiner plus de lignes que nécessaire.

-

Le code suivant est utilisé pour supprimer des lignes quand une ligne est fermée.

-
      item[2] = false;
-
-      var thisLevel = this.getLevel(idx);
-      var deletecount = 0;
-      for (var t = idx + 1; t < this.visibleData.length; t++) {
-        if (this.getLevel(t) > thisLevel) deletecount++;
-        else break;
-      }
-      if (deletecount) {
-        this.visibleData.splice(idx + 1, deletecount);
-        this.treeBox.rowCountChanged(idx + 1, -deletecount);
-      }
-
-

Premièrement, l'item est déclaré fermé dans le tableau. Ensuite, nous scannons les lignes suivantes jusqu'à ce que nous atteignions une ligne de même niveau. Toutes celles qui ont un niveau supérieur auront besoin d'être supprimées, mais une ligne de même niveau sera le prochain conteneur qui ne devra pas être supprimé.

-

Enfin, nous utilisons la fonction splice pour supprimer les lignes du tableau visibleData et appelons la fonction rowCountChanged pour redessiner l'arbre. Lors de la suppression des lignes, vous aurez besoin de fournir un chiffre négatif correspondant au nombre de lignes à supprimer.

-

Exemple en entier

-

Il existe plusieurs autres fonctions de vue pouvant être implémentées mais nous n'en avons pas l'utilité dans cet exemple, donc nous créons des fonctions qui ne font rien ici. Elles sont placées à la fin de notre exemple complet :

-
<?xml version="1.0" encoding="iso-8859-1?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window onload="init();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<tree id="elementList" flex="1">
-  <treecols>
-    <treecol id="element" label="Élément" primary="true" flex="1"/>
-  </treecols>
-  <treechildren/>
-</tree>
-
-<script>
-<![CDATA[
-
-var treeView = {
-  childData : {
-    Solids: ["Argent", "Or", "Plomb"],
-    Liquids: ["Mercure"],
-    Gases: ["Hélium", "Azote"]
-  },
-
-  visibleData : [
-    ["Solides", true, false],
-    ["Liquides", true, false],
-    ["Gaz", true, false]
-  ],
-
-  treeBox: null,
-  selection: null,
-
-  get rowCount()                     { return this.visibleData.length; },
-  setTree: function(treeBox)         { this.treeBox = treeBox; },
-  getCellText: function(idx, column) { return this.visibleData[idx][0]; },
-  isContainer: function(idx)         { return this.visibleData[idx][1]; },
-  isContainerOpen: function(idx)     { return this.visibleData[idx][2]; },
-  isContainerEmpty: function(idx)    { return false; },
-  isSeparator: function(idx)         { return false; },
-  isSorted: function()               { return false; },
-  isEditable: function(idx, column)  { return false; },
-
-  getParentIndex: function(idx) {
-    if (this.isContainer(idx)) return -1;
-    for (var t = idx - 1; t >= 0 ; t--) {
-      if (this.isContainer(t)) return t;
-    }
-  },
-  getLevel: function(idx) {
-    if (this.isContainer(idx)) return 0;
-    return 1;
-  },
-  hasNextSibling: function(idx, after) {
-    var thisLevel = this.getLevel(idx);
-    for (var t = idx + 1; t < this.visibleData.length; t++) {
-      var nextLevel = this.getLevel(t)
-      if (nextLevel == thisLevel) return true;
-      else if (nextLevel < thisLevel) return false;
-    }
-  },
-  toggleOpenState: function(idx) {
-    var item = this.visibleData[idx];
-    if (!item[1]) return;
-
-    if (item[2]) {
-      item[2] = false;
-
-      var thisLevel = this.getLevel(idx);
-      var deletecount = 0;
-      for (var t = idx + 1; t < this.visibleData.length; t++) {
-        if (this.getLevel(t) > thisLevel) deletecount++;
-        else break;
-      }
-      if (deletecount) {
-        this.visibleData.splice(idx + 1, deletecount);
-        this.treeBox.rowCountChanged(idx + 1, -deletecount);
-      }
-    }
-    else {
-      item[2] = true;
-
-      var label = this.visibleData[idx][0];
-      var toinsert = this.childData[label];
-      for (var i = 0; i < toinsert.length; i++) {
-        this.visibleData.splice(idx + i + 1, 0, [toinsert[i], false]);
-      }
-      this.treeBox.rowCountChanged(idx + 1, toinsert.length);
-    }
-  },
-
-  getImageSrc: function(idx, column) {},
-  getProgressMode : function(idx,column) {},
-  getCellValue: function(idx, column) {},
-  cycleHeader: function(col, elem) {},
-  selectionChanged: function() {},
-  cycleCell: function(idx, column) {},
-  performAction: function(action) {},
-  performActionOnCell: function(action, index, column) {},
-  getRowProperties: function(idx, column, prop) {},
-  getCellProperties: function(idx, column, prop) {},
-  getColumnProperties: function(column, element, prop) {},
-};
-
-function init() {
-  document.getElementById("elementList").view = treeView;
-}
-
-]]></script>
-
-</window>
-
-
-

Ensuite, nous verrons plus en détails l'objet de boîte d'arbre.

-
-

« PrécédentSuivant »

-
-

Interwiki

-

 

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/exemple_xbl/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/exemple_xbl/index.html deleted file mode 100644 index b8b61c00ae..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/exemple_xbl/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Exemple XBL -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Exemple_XBL -tags: - - Tutoriel_XUL - - Tutoriels - - XBL - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/XBL_Example ---- -
-

« PrécédentSuivant »

-
- -

Cette section va décrire un exemple d'élément XBL.

- -

Un élément de diaporama

- -

Construisons un exemple complet d'un élément XBL. Il s'agira de créer un élément graphique qui stocke un paquet d'objets, en les affichant un par un. Des boutons de navigation situés sur le bas permettront à l'utilisateur d'afficher les objets les uns aprés les autres tandis qu'un élément graphique textuel entre les boutons affichera le numéro de la page courante. Vous pourriez mettre n'importe quoi dans les pages, cependant, cet élément graphique pourrait être utile pour afficher une série d'images. Nous l'appellerons élément de diaporama.

- -

Contenu du diaporama

- -

Tout d'abord, déterminons quels sont les éléments qui ont besoin d'aller dans le contenu XBL. Puisque nous voulons un changement de page, un élément deck sera le plus approprié pour contenir les pages. Le contenu des pages sera spécifié dans le fichier XUL, et non dans XBL, mais nous aurons besoin de l'ajouter au sein du paquet (deck). La balise children devra être utilisée. En bas, nous aurons besoin d'un bouton pour aller à la page précédente, d'un élément graphique pour afficher la numéro de la page courante, et d'un bouton pour aller à la page suivante.

- -

Exemple 1 : Source

- -
<binding id="slideshow">
-  <content>
-    <xul:vbox flex="1">
-      <xul:deck xbl:inherits="selectedIndex" selectedIndex="0" flex="1">
-        <children/>
-      </xul:deck>
-      <xul:hbox>
-        <xul:button xbl:inherits="label=previoustext"/>
-        <xul:label flex="1"/>
-        <xul:button xbl:inherits="label=nexttext"/>
-      </xul:hbox>
-    </xul:vbox>
-  </content>
-</binding>
-
- -

Cette liaison crée la stucture de la présentation que nous souhaitons. L'attribut flex a été ajouté à plusieurs éléments pour qu'ils s'étendent de la bonne manière. Les attributs label sur les deux boutons héritent des valeurs de l'élément qui leur est attaché. Ici, ils héritent de deux attributs personnalisés, previoustext et nexttext. Ils rendent le changement des libellés des boutons simple. Les fils de l'élément auquel l'élément XBL est relié seront placés au sein de l'élément deck. L'attribut selectedIndex est hérité par le paquet, ainsi nous pouvons déclarer la page initiale dans XUL.

- -

Le fichier XUL suivant produit le résultat affiché dans l'image.

- -
<box class="slideshow" previoustext="Précédent" nexttext="Suivant" flex="1">
-  <button label="Bouton 1"/>
-  <checkbox label="Case à cocher 2"/>
-  <textbox/>
-</box>
-
- -

Le style CSS utilisé ici est :

- -
.slideshow {
-  -moz-binding: url("slideshow.xml#slideshow");
-}
-
- -
Image:xultu_xblex1.jpg
- -

Le premier bouton, 'Bouton 1' a été utilisé comme première page du paquet. L'élément graphique label n'est pas apparu puisqu'aucun attribut value ne lui a été spécifié. Nous pourrions déclarer une valeur, mais elle sera plutôt calculée plus tard.

- -

Propriété page

- -

Ensuite, une propriété contenant le numéro de la page courante est ajoutée. Pour lire cette propriété personnalisée, il est nécessaire de rechercher la valeur de l'attribut selectedIndex du paquet qui contient le numéro de la page affichée. De même, lorsqu'on modifiera cette propriété, il sera nécessaire de changer l'attribut selectedIndex du paquet. De plus, l'élément graphique textuel devra être mis à jour pour afficher le numéro de la page courante.

- -
<property name="page"
-    onget="return parseInt(document.getAnonymousNodes(this)[0].childNodes[0].getAttribute('selectedIndex'));"
-    onset="this.setPage(val);"/>
-
- -

La propriété page obtient sa valeur en observant le premier élément du tableau anonyme. Elle renvoie la boîte verticale, donc, pour obtenir le paquet, nous devons obtenir le premier nœud fils de la boîte. Le tableau anonyme n'est pas utilisé puisque le paquet n'est pas anonyme à partir de la boîte. Finalement, la valeur de l'attribut selectedIndex est récupérée. Pour spécifier la page, une méthode setPage qui sera définie plus tard est appelée.

- -

Un gestionnaire oncommand devra être ajouté aux boutons 'Précédent' et 'Suivant' pour que la page soit changée lorsque les boutons sont pressés. Nous pouvons changer facilement la page en utilisant la propriété personnalisée page qui vient d'être ajoutée :

- -
<xul:button xbl:inherits="label=previoustext"
-               oncommand="parentNode.parentNode.parentNode.page--;"/>
-<xul:description flex="1"/>
-<xul:button xbl:inherits="label=nexttext"
-               oncommand="parentNode.parentNode.parentNode.page++;"/>
-
- -

Étant donné que la propriété page est dans l'élément XUL externe, nous devons utiliser la propriété parentNode pour l'obtenir. La première propriété parentNode retourne l'élément parent du bouton qui est la boîte horizontale, la seconde son parent, la boîte verticale, et la dernière son parent qui est la boîte externe. La propriété page est incrémentée ou décrémentée. Elle va appeler le script onget pour obtenir la valeur, incrémentera ou décrémentera la valeur, et enfin appellera le gestionnaire onset pour enregistrer la valeur.

- -

Méthode setPage

- -

Définissons à présent la méthode setPage. Elle prendra un paramètre, le numéro de page qui sert à spécifier la page. Il sera nécessaire de vérifier que le numéro de page n'est pas en dehors des limites et ensuite modifier les attributs selectedIndex du paquet et l'attribut label de l'élément graphique textuel.

- -
<method name="setPage">
-  <parameter name="newidx"/>
-  <body>
-    <![CDATA[
-      var thedeck=document.getAnonymousNodes(this)[0].childNodes[0];
-      var totalpages=this.childNodes.length;
-
-      if (newidx<0) return 0;
-      if (newidx>=totalpages) return totalpages;
-      thedeck.setAttribute("selectedIndex",newidx);
-      document.getAnonymousNodes(this)[0].childNodes[1].childNodes[1]
-              .setAttribute("value",(newidx+1)+" of "+totalpages);
-      return newidx;
-    ]]>
-  </body>
-</method>
-
- -

Cette fonction est appelée setPage et prend un paramètre newidx. Le corps de la méthode a été encapsulé entre '<![CDATA[' et ']]>'. C'est le mécanisme général dans tous les fichiers XML qui peut être utilisé pour échapper tout le texte à l'intérieur. De cette manière, vous n'avez pas besoin d'échapper tous les signes "inférieur" et "supérieur" à l'intérieur.

- -

Décomposons le code morceau par morceau.

- -
-
var thedeck=document.getAnonymousNodes(this)[0].childNodes[0];
-
Récupère le premier élément du tableau de contenu anonyme qui sera la boîte verticale, puis obtient son premier fils qui sera le paquet deck.
-
var totalpages=this.childNodes.length;
-
Récupère le nombre de fils que détient la boîte qui est liée. Cela donnera le nombre total de pages qui s'y trouve.
-
if (newidx<0) return 0;
-
Si le nouvel index est avant la première page, ne pas changer la page et retourner '0'. La page ne devrait pas donner une valeur plus petite que la première page.
-
if (newidx>=totalpages) return totalpages;
-
Si le nouvel index est après la dernière page, ne pas changer la page et retourner le dernier index de page. La page ne devrait pas devenir celle qui est après la dernière.
-
thedeck.setAttribute("selectedIndex",newidx);
-
Changer l'attribut selectedIndex du paquet. Cela entraîne l'affichage de la page demandée.
-
document.getAnonymousNodes(this)[0].childNodes[1].childNodes[1].setAttribute("value", (newidx+1)+" sur "+totalpages);
-
Cette ligne modifie l'élément label pour qu'il affiche l'index de la page courante. L'élément label peut être récupéré en obtenant le premier élément du contenu anonyme (la boîte verticale), le second fils de cet élément (la boîte horizontale), et enfin le second élément de cette boîte. L'attribut value est modifié pour indiquer '1 sur 3' ou quelque chose de similaire. Notez que l'index est incrémenté de un parce que les indices commence à '0'.
-
- -

Constructeur

- -

Nous allons aussi avoir besoin d'un constructeur pour initialiser l'élément label afin qu'il s'affiche correctement la première fois que la présentation est affichée. Nous utilisons un code similaire à la méthode ci-dessus pour déclarer le numéro de page. La référence à 'this.page' va appeler le script onget de la propriété page qui à son tour va recupérer la page initiale à partir de l'attribut selectedIndex.

- -
<constructor>
-  var totalpages=this.childNodes.length;
-  document.getAnonymousNodes(this)[0].childNodes[1].childNodes[1]
-          .setAttribute("value",(this.page+1)+" of "+totalpages);
-</constructor>
-
- -

Fonctionnalités supplémentaires

- -

Nous pouvons aussi ajouter quelques caractéristiques supplémentaires. Certains raccourcis claviers peuvent être utilisés pour les boutons 'Précédent' et 'Suivant', (disons l'effacement arrière et la touche Entrée). Des boutons 'Premier' et 'Dernier' peuvent être ajoutés pour aller à la première et à la dernière page. L'élément label pourrait être transformé en un champ de saisie où l'utilisateur pourrait entrer la page à afficher, ou une fenêtre surgissante pourrait être ajoutée pour permettre la sélection de la page à partir d'un menu. Nous pourrions aussi ajouter une bordure autour de la boîte avec un style CSS pour la rendre plus jolie.

- -

Le code final

- -

Le code final est le suivant :

- -

Exemple 2 : Source

- -
<binding id="slideshow">
-  <content>
-    <xul:vbox flex="1">
-      <xul:deck xbl:inherits="selectedIndex" selectedIndex="0" flex="1">
-        <children/>
-      </xul:deck>
-      <xul:hbox>
-        <xul:button xbl:inherits="label=previoustext"
-                    oncommand="parentNode.parentNode.parentNode.page--;"/>
-        <xul:description flex="1"/>
-        <xul:button xbl:inherits="label=nexttext"
-                    oncommand="parentNode.parentNode.parentNode.page++;"/>
-      </xul:hbox>
-    </xul:vbox>
-  </content>
-
-  <implementation>
-
-    <constructor>
-      var totalpages=this.childNodes.length;
-      document.getAnonymousNodes(this)[0].childNodes[1].childNodes[1]
-              .setAttribute("value",(this.page+1)+" sur "+totalpages);
-    </constructor>
-
-    <property name="page"
-          onget="return parseInt(document.getAnonymousNodes(this)[0].childNodes[0].getAttribute('selectedIndex'));"
-          onset="this.setPage(val);"/>
-
-    <method name="setPage">
-      <parameter name="newidx"/>
-      <body>
-        <![CDATA[
-          var thedeck=document.getAnonymousNodes(this)[0].childNodes[0];
-          var totalpages=this.childNodes.length;
-
-          if (newidx<0) return 0;
-          if (newidx>=totalpages) return totalpages;
-          thedeck.setAttribute("selectedIndex",newidx);
-          document.getAnonymousNodes(this)[0].childNodes[1].childNodes[1]
-                  .setAttribute("value",(newidx+1)+" sur "+totalpages);
-          return newidx;
-        ]]>
-      </body>
-    </method>
-  </implementation>
-
-</binding>
-
- -
-

Nous allons voir ensuite quelques propriétés additionnelles d'une fenêtre.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/exemples_xpcom/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/exemples_xpcom/index.html deleted file mode 100644 index 50bd44eb6e..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/exemples_xpcom/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Exemples XPCOM -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Exemples_XPCOM -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/XPCOM_Examples ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Cette section donne quelques exemples d'utilisation de la technologie XPCOM avec de nouvelles interfaces.

- -

Gestion de Fenêtres

- -
Cet exemple contient une source de données RDF qui sera décrite dans une prochaine section. Vous devriez passer cet exemple pour l'instant, à moins d'en savoir suffisamment sur le sujet.
- -

Création d'un menu de fenêtre

- -

La liste des fenêtres Mozilla ouvertes peut être utilisée comme une source de données RDF. Elle vous permet de créer dans votre application un menu donnant la liste des fenêtres courantes ouvertes. La source de données correspondante est 'rdf:window-mediator' dont voici un exemple d'utilisation :

- -

Exemple 1 : Source

- -
<toolbox>
- <menubar id="windowlist-menubar">
-  <menu label="Fenêtres">
-   <menupopup id="window-menu" datasources="rdf:window-mediator" ref="NC:WindowMediatorRoot">
-    <template>
-     <rule>
-      <menuitem uri="rdf:*" label="rdf:http://home.netscape.com/NC-rdf#Name"/>
-     </rule>
-    </template>
-   </menupopup>
-  </menu>
- </menubar>
-</toolbox>
-
- -

Un menu contenant la liste de toutes les fenêtres ouvertes sera créé. Essayez cet exemple en ouvrant plusieurs fenêtres, et vous les verrez toutes dans le menu.

- -

Composant mediator

- -

Cet exemple peut être amélioré de telle façon que lorsque l'on clique sur un élément du menu, la fenêtre correspondante soit affichée. Cette tâche sera rendue possible grâce au composant "window mediator" qui implémente l'interface nsIWindowDataSource. Le code suivant montre comment il fonctionne :

- -
var wmdata = Components.classes["@mozilla.org/rdf/datasource;1?name=window-mediator"].getService();
-wmdata.QueryInterface(Components.interfaces.nsIWindowDataSource);
-
- -

Ce code récupère le composant "window mediator". Le composant utilisé ici est le même que celui qui gère la source de données RDF "Window-mediator". Vous pouvez également récupérer ce composant au travers du service RDF qui est un autre service de gestion des sources de données RDF.

- -

L'interface nsIWindowDataSource possède une fonction getWindowForResource qui nous donne une fenêtre à partir d'une ressource. Dans un exemple précédent, nous avons généré une liste de fenêtres que nous avons ajoutée à un menu via une balise template. Celle-ci génère un attribut id pour chaque élément menuitem. La valeur de cet attribut peut être utilisée comme ressource. Ainsi pour donner le focus à la fenêtre sélectionnée, nous pouvons procéder de la manière suivante :

- -
    -
  1. Déterminer l'élément que l'utilisateur a sélectionné.
  2. -
  3. Récupérer la valeur de l'attribut id de cet élément.
  4. -
  5. Passer cette valeur à getWindowForResource() pour avoir l'objet "window".
  6. -
  7. Mettre le focus sur celle-ci.
  8. -
- -

L'exemple ci-dessous nous montre comment procéder :

- -
<toolbox>
- <menubar id="windowlist-menubar">
-  <menu label="Fenêtre" oncommand="switchFocus(event.target);">
-   <menupopup id="window-menu" datasources="rdf:window-mediator" ref="NC:WindowMediatorRoot">
-    <template>
-     <rule>
-      <menuitem uri="rdf:*" label="rdf:http://home.netscape.com/NC-rdf#Name"/>
-     </rule>
-    </template>
-   </menupopup>
-  </menu>
- </menubar>
-</toolbox>
-
-<script>
-function switchFocus(elem)
-{
-  var mediator = Components.classes["@mozilla.org/rdf/datasource;1?name=window-mediator"].getService();
-  mediator.QueryInterface(Components.interfaces.nsIWindowDataSource);
-
-  var resource = elem.getAttribute('id');
-  switchwindow = mediator.getWindowForResource(resource);
-
-  if (switchwindow){
-    switchwindow.focus();
-  }
-}
-</script>
-
- -

Un gestionnaire de commande a été ajouté à l'élément menu. Ce gestionnaire appelle la fonction switchFocus() avec comme paramètre l'élément du menu que nous avons sélectionné. La fonction switchFocus() :

- - - -

Cookies

- -

Maintenant, nous allons récupérer la liste des cookies sauvegardés par le navigateur. Nous allons utiliser le service "Cookie" qui implémente l'interface nsICookieManager utilisée pour énumérer tous les cookies. Voici un exemple qui alimente la liste d'un menu avec le nom de tous les cookies provenant du site MozillaZine.

- -
<script>
-
-function getCookies()
-{
-  var menu = document.getElementById("cookieMenu");
-  menu.removeAllItems();
-
-  var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
-                        .getService(Components.interfaces.nsICookieManager);
-
-  var iter = cookieManager.enumerator;
-  while (iter.hasMoreElements()){
-    var cookie = iter.getNext();
-    if (cookie instanceof Components.interfaces.nsICookie){
-      if (cookie.host == "www.mozillazine.org")
-        menu.appendItem(cookie.name,cookie.value);
-    }
-  }
-}
-</script>
-
-<hbox>
-  <menulist id="cookieMenu" onpopupshowing="getCookies();"/>
-</hbox>
-
- -

La fonction getCookies() sera appelée à chaque ouverture du menu, comme indiqué par l'attribut onpopupshowing de l'élément menulist. Les deux premières lignes de getCookies() récupèrent l'élément menulist et suppriment tous les items existants. En effet comme cette fonction est appelée à chaque fois que nous l'ouvrons, nous ne voulons pas garder les anciens éléments.

- -

Ensuite, le gestionnaire de cookie est récupéré. Celui-ci a une méthode qui renvoie un objet énumérateur implémentant nsISimpleEnumerator. Il nous permet de parcourir tous les cookies. Un énumérateur dispose d'une méthode hasMoreElements() retournant 'true' jusqu'à ce que le dernier cookie soit récupéré. La méthode getNext() renvoie un cookie et incrémente l'index de l'énumérateur. Comme l'énumérateur ne renvoie qu'un objet générique, nous devons lui indiquer que nous voulons utiliser l'interface nsICookie. Dans ce cas, l'opérateur instanceof permet d'accomplir cette vérification.

- -

Finalement, un élément est ajouté au menu pour chaque cookie ( NdT : dont le site hôte est "www.mozillazine.org"). Les propriétés hôte, nom et valeur du cookie sont alors utilisées. Les menus ont une fonction appendItem() qui ajoute un élément avec un libellé et une valeur.

- -

Voir aussi

- -

D'autres exemples sont disponibles ici :

- - - -
-

Dans la section suivante, nous allons voir comment utiliser le presse papier.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/focus_et_selection/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/focus_et_selection/index.html deleted file mode 100644 index 84e67cec8b..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/focus_et_selection/index.html +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Focus et Selection -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Focus_et_Selection -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Focus_and_Selection ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section va décrire comment manipuler le focus et la sélection des éléments.

-

Éléments focalisés

-

L'élément focalisé est l'élément qui reçoit les événements entrants. S'il y a trois champs de saisie sur une fenêtre, celui qui détient le focus est celui dans lequel l'utilisateur peut taper du texte. Un seul élément à la fois peut détenir le focus.

-

L'utilisateur peut changer le focus en cliquant sur un élément avec la souris ou en appuyant sur la touche Tab (tabulation). Lorsque la touche tabulation est appuyée, le focus passe à l'élément suivant. Pour revenir en arrière, il suffit d'appuyer sur les touches Maj (shift) et Tab simultanément.

-

Réarrangement de l'ordre des tabulations

-

Vous pouvez changer l'ordre dans lequel les éléments seront focalisés quand l'utilisateur appuiera sur la touche Tab en ajoutant un attribut tabindex à un élément. Cet attribut doit être renseigné avec un nombre. Lorsque l'utilisateur appuiera sur la touche Tab, le focus sera donné à l'élément ayant l'index de tabulation consécutif le plus haut. Cela implique que vous pouvez ordonner les éléments en définissant des indices pour séquencer les éléments. Toutefois, vous n'aurez normalement pas à définir l'attribut tabindex. Dans ce cas, un appui sur la touche tabulation donnera le focus à l'élément suivant affiché. Vous avez seulement besoin de définir des indices de tabulation si vous voulez utiliser un ordre différent. Voici un exemple :

-

Exemple 1 : Source Voir

-
<button label="Bouton 1" tabindex="2"/>
-<button label="Bouton 2" tabindex="1"/>
-<button label="Bouton 3" tabindex="3"/>
-
-

L'événement focus

-

L'événement 'focus' est utilisé pour réagir lorsqu'un élément obtient le focus. L'événement 'blur' est utilisé pour réagir lorsqu'un un élément perd le focus. Vous pouvez réagir aux changements de focus en ajoutant un attribut onfocus ou onblur à un élément. Ils fonctionnent de la même façon que leurs homologues HTML. Vous pouvez utiliser ces événements pour mettre un élément en surbrillance ou afficher un texte dans la barre d'état. L'exemple suivant peut s'appliquer à une fonction de gestion des événements de focus.

-

Exemple 2: Source Voir

-
<script>
-
-function displayFocus(){
-  var elem=document.getElementById('sbar');
-  elem.setAttribute('value','Entrez votre numéro de téléphone.');
-}
-
-</script>
-
-<textbox id="tbox1"/>
-<textbox id="tbox2" onfocus="displayFocus();"/>
-<description id="sbar" value=""/>
-
-

Quand l'événement 'focus' est déclenché, il va appeler la fonction displayFocus. Cette fonction va changer la valeur du libellé texte. Nous pourrions développer cet exemple pour effacer le texte quand l'événement 'blur' a lieu. Généralement, vous utiliserez les événements focus et blur pour mettre à jour certaines parties de votre interface, quand l'utilisateur sélectionne des éléments. Par exemple, vous pouvez mettre à jour un total quand l'utilisateur entre des valeurs dans d'autres champs, ou utiliser les événements de focus pour vérifier certaines valeurs. N'affichez pas de messages d'alerte pendant un événement focus ou blur, car ils pourraient distraire l'utilisateur et ils dégradent le design de l'interface.

-

Vous pouvez aussi ajouter dynamiquement des gestionnaires d'événements en utilisant la fonction DOM addEventListener. Vous pouvez l'utiliser pour n'importe quel élément et type d'événement. Elle prend trois paramètres : le type d'événement, une fonction à exécuter quand l'événement est produit et un booléen indiquant la phase de capture de l'événement.

-

Obtention de l'élément actuellement focalisé

-

L'élément ayant le focus est pris en charge par un objet appelé « répartiteur de commandes », dont il ne peut y avoir qu'une instance par fenêtre. Le répartiteur de commandes garde la trace de l'objet qui a le focus pendant que l'utilisateur se sert de l'interface. Le répartiteur de commandes a d'autres rôles, qui seront abordés plus tard dans la section des commandes. Pour le moment, nous allons nous intéresser à quelques fonctions relatives au focus du répartiteur de commandes.

-

Vous pouvez récupérer le répartiteur de commandes d'une fenêtre en utilisant la propriété commandDispatcher du document. À partir de là, vous pouvez obtenir l'élément focalisé avec la propriété focusedElement du répartiteur. L'exemple ci-dessous illustre ce cas.

-

Exemple 3: Source Voir

-
<window id="focus-example" title="Exemple Focus"
-        onload="init();"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<script>
-function init(){
-  addEventListener("focus",setFocusedElement,true);
-}
-
-function setFocusedElement(){
-  var focused = document.commandDispatcher.focusedElement;
-  document.getElementById("focused").value = focused.tagName;
-}
-</script>
-
-<hbox>
-  <label control="username" value="Nom d'utilisateur:"/>
-  <textbox id="username"/>
-</hbox>
-
-<button label="Bonjour"/>
-<checkbox label="Se souvenir de ce choix"/>
-
-<label id="focused" value="-pas de focus-"/>
-
-</window>
-
-

Dans cet exemple, un gestionnaire d'événement de focus est attaché à la fenêtre. Nous voulons utiliser un gestionnaire de capture d'événements, donc la méthode addEventListener doit être utilisée. Elle associe un gestionnaire de capture d'événements à la fenêtre qui appellera la méthode setFocusedElement. Cette méthode récupère l'élément focalisé depuis le répartiteur de commandes et modifie un libellé avec le nom de sa balise. Quand l'élément focalisé change, le libellé montre le nom de l'élément.

-

Plusieurs choses sont à noter :

- -

Rendre un libellé focalisable

-

Si vous créez des éléments personnalisés, vous pouvez décider si un élément peut prendre le focus ou non. Il vous suffit d'utiliser la propriété de style spéciale -moz-user-focus. Cette propriété détermine si un élément peut être focalisé ou non. Par exemple, vous pouvez rendre un libellé focalisable, comme dans l'exemple ci-dessous.

-

Exemple 4: Source Voir

-
<label id="focused" style="-moz-user-focus: normal;"
-      onkeypress="alert('Étiquette focalisée');" value="Focalise moi"/>
-
-

La propriété de style est réglée à 'normal'. Vous pouvez aussi la définir à 'ignore' pour désactiver le focus pour un élément. Toutefois, elle ne doit pas être utilisée pour désactiver un élément ; l'attribut ou la propriété disabled doit être utilisée dans ce cas, car elle a été conçue pour. Dans l'exemple, une fois le libellé focalisé, il peut réagir aux événements du clavier. Évidemment, le libellé ne donne aucune indication sur son focus, car il n'est normalement pas prévue pour cet usage.

-

Changer le focus

-

Il existe plusieurs façons de changer d'élément focalisé. La plus simple est d'appeler la méthode focus de l'élément XUL que vous voulez focaliser. La méthode blur peut être employée afin d'enlever le focus d'un élément. L'exemple suivant met en pratique ces principes :

-

Exemple 5: Source Voir

-
<textbox id="addr"/>
-
-<button label="Focus" oncommand="document.getElementById('addr').focus()"/>
-
-

Vous pouvez aussi utiliser les méthodes advanceFocus et rewindFocus du répartiteur de commandes. Ces méthodes changent le focus respectivement vers l'élément suivant ou précédent de la séquence de tabulation. Elles correspondent aux actions réalisées lorsque l'utilisateur appuie sur Tab ou Maj+Tab.

-

Pour les champs de saisie, un attribut spécial, focused est ajouté quand l'élément obtient le focus. Vous pouvez vérifier la présence de cet attribut pour déterminer si l'élément a le focus, soit depuis un script, soit depuis une feuille de styles. Il aura la valeur 'true' si le champ de saisie a le focus, et le cas échéant, l'attribut ne sera pas présent.

-

Supposons que vous souhaitez déplacer le focus vers le prochain emplacement connu par le navigateur. pour y arriver, un utilisateur va typiquement appuyer sur la touche Tab. Vous pouvez faire la même chose dès lors que vous disposez d'un document de navigation XUL en faisant :

-
   document.commandDispatcher.advanceFocus();
-
-

En fait, l'objet commandDispatcher implémente simplement l'interface nsIDOMXULCommandDispatcher. D'autres fonctions peuvent également vous intéressez si vous manipulez des focus.

-

Comportements spécifiques de plate-forme

-
Mac OS X 
Il existe une préférence appelée « Full Keyboard Access » (FKA - Accès au clavier complet). XUL respecte ce mécasnisme. Cela signifie que si la préférence FKA est sur 'off', seuls les champs de saisie, les listes et les arbres peuvent recevoir le focus au clavier, ainsi que vos scripts utilisant focus().
-
-

Gestion des modifications de texte

-

Deux événements peuvent être utilisés lorsque l'utilisateur modifie la le contenu d'un champ de saisie. Naturellement, ces événements seront uniquement transmis au champ de saisie ayant le focus.

- -

Sélection de texte

-

Lorsque vous travaillez avec un champ de saisie, vous pouvez récupérer uniquement le texte que l'utilisateur a sélectionné. Ou alors vous pouvez changer la sélection.

-

Les champs de saisie XUL offrent la possibilité de récupérer et de modifier une sélection. La plus simple et de sélectionner tout le texte du champ. Cela implique l'utilisation de la méthode select du champ de saisie.

-
tbox.select();
-

Toutefois, vous pouvez aussi sélectionner seulement une partie du texte. Il vous suffit d'utiliser la fonction setSelectionRange. Elle prend deux paramètres, le premier représente le caractère de départ et le second le caractère suivant le dernier que vous voulez sélectionner. Les valeurs commencent à zéro, donc le premier caractère est indicé à '0', le second à '1' et ainsi de suite.

-
tbox.setSelectionRange(4,8);
-

Cet exemple va sélectionner le cinquième caractère affiché, ainsi que le sixième, le septième et le huitième. S'il n'y avait que six caractères présents dans le champ, seuls le cinquième et le sixième auraient été sélectionnés. Aucune erreur ne serait signalée.

-

Si vous utilisez la même valeur pour les deux paramètres, le début et la fin de la sélection changent pour la même position. Le résultat revient à changer la position du curseur dans le champ de saisie. Par exemple, la ligne ci-dessous peut être utilisée pour ramener le curseur au début du texte.

-
tbox.setSelectionRange(0,0);
-

Vous pouvez récupérer la sélection en cours en utilisant les propriétés selectionStart et selectionEnd. Ces propriétés définissent respectivement le début et la fin de la sélection. Si les deux sont définies à la même valeur, aucun texte n'est sélectionné, mais les valeurs représentent la position du curseur. Une fois que vous avez les valeurs de début et de fin, vous pouvez récupérer la section de chaîne du texte.

-

Vous pouvez récupérer et modifier le contenu du champ de saisie en utilisant la propriété value.

-

Une autre propriété utile des champs de saisie est la propriété textLength qui contient le nombre total de caractères dans le champ.

-
-

Dans la prochaine section, nous découvrirons comment utiliser les commandes.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/fonctions_additionnelles_d'installation/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/fonctions_additionnelles_d'installation/index.html deleted file mode 100644 index 693b2faeca..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/fonctions_additionnelles_d'installation/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Fonctions additionnelles d'installation -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Fonctions_additionnelles_d'installation -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Additional_Install_Features ---- -

 

- -
-

« Précédent

-
- -
NdT : Attention, cette section décrit le mécanisme XPInstall propre à la suite Mozilla et à des versions anciennes de Mozilla Firefox. Pour les versions récentes de Mozilla Firefox, ce mode d'installation n'est plus le même, mais il n'est pas encore décrit dans ce tutoriel. Voir comment faire des extensions pour firefox sur xulfr.org.
- -

Cette section décrit quelques spécificités supplémentaires des programmes d'installation.

- -

Manipulation de fichiers lors de l'installation

- -

La section précédente décrivait un programme d'installation simple. Vous pouvez souhaiter réaliser quelques opérations plus élaborées pendant l'installation. Par exemple, vous voulez installer un paquetage seulement si certaines conditions sont réunies, comme d'avoir une librairie particulière installée.

- -

En complément de l'objet Install, l'objet File est également disponible pendant le script d'installation. Il fournit quelques fonctions qui peuvent être employées pour examiner et modifier des fichiers sur le disque. Vous pouvez les utiliser pour déplacer, copier ou effacer des fichiers avant ou après que les fichiers du paquetage soient installés. Par exemple, vous voulez peut être faire une sauvegarde de quelques fichiers d'abord.

- -

Le code ci dessous fera une copie du fichier "/bin/grep" dans le répertoire "/main".

- -
var binFolder=getFolder("file:///","bin");
-var grep=getFolder(binFolder,"grep");
-
-var mainFolder=getFolder("file:///","main");
-
-File.copy(grep,mainFolder);
-
- - - -

Des fonctions existent également pour déplacer (move()), renommer (rename()) et exécuter (execute()) des fichiers. Ainsi, vous pouvez déplacer des fichiers qui peuvent se trouver en conflit avec votre paquetage.

- -

Interception des erreurs

- -

Vous voulez certainement intercepter d'éventuelles erreurs proprement. Elles peuvent se produire si un fichier ou un répertoire ne peut pas être trouvé, si la capacité du disque n'est pas suffisant ou pour toutes autres raisons.

- -

Il vous suffit d'appeler la fonction getLastError() pour déterminer si une erreur a été rencontrée. Si elle renvoie 'SUCCESS', aucune erreur ne s'est produite. Autrement, elle renvoie un nombre qui indique le code d'erreur. Vous pouvez appeler cette fonction en tout point de votre script d'installation pour déterminer si une erreur est survenue lors de la dernière opération effectuée.

- -

Si une erreur se produit, vous voulez sûrement interrompre l'installation. Vous pouvez également vouloir afficher un message d'erreur pour l'utilisateur. Par exemple, vous pourriez mettre le script suivant à la fin de votre script d'installation :

- -
if (getLastError() == SUCCESS){
-  performInstall();
-}
-else {
-  cancelInstall();
-}
-
- -

Les codes d'erreurs susceptibles d'être renvoyés par la fonction getLastError() sont listés dans le fichier source de Mozilla nsInstall.h. Pendant l'installation, un suivi d'événements contenant les opérations réalisées est créé. Il contiendra également toutes les erreurs qui se sont produites. Ces événements peuvent être trouvés dans le fichier 'install.log' dans le répertoire d'installation de Mozilla. Un bloc de texte sera ajouté à ce fichier à chaque installation effectuée.

- -

La fonction logComment() peut être utilisée pour écrire un texte dans ce fichier d'événements. Elle nécessite un seul argument qui est le contenu du texte.

- -
-

Le Tutoriel XUL est terminé.

- -
-

« Précédent

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/gabarits/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/gabarits/index.html deleted file mode 100644 index 72a5b71bbc..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/gabarits/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Gabarits -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Gabarits -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Templates ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous allons voir comment peupler des éléments avec des données.

- -

Peuplement des éléments

- -

XUL apporte une méthode permettant de créer des éléments à partir de données fournies par RDF, que ce soit à partir d'un fichier RDF ou à partir d'une source de données interne. Plusieurs sources de données sont déjà fournies avec Mozilla comme les marque-pages, l'historique et les messages mails. Plus de détails seront donnés dans une prochaine section.

- -

Habituellement, les éléments tels que les treeitem et menuitem seront peuplés avec des données. Cependant, vous pouvez utiliser d'autres éléments si vous le voulez, bien qu'ils soient utilisés pour des cas spécifiques. Néanmoins nous commencerons avec ces autres éléments parce que les arbres et menus nécessitent plus de code.

- -

Pour permettre la création d'éléments basés sur des données RDF, vous avez besoin de fournir un gabarit simple (Ndt : template) qui sera dupliqué pour chaque élément devant être créé. En gros, vous fournissez juste le premier élément et les suivants seront construits sur le même modèle.

- -

Le gabarit est créé en utilisant l'élément template. À l'intérieur de celui-ci, vous pouvez placer les éléments que vous voulez utiliser pour chaque élément construit. L'élément template doit être placé à l'intérieur du conteneur qui contiendra les éléments construits. Par exemple, si vous utilisez un arbre tree, vous devez placer l'élément template à l'intérieur de l'élément tree.

- -

Exemple simple de gabarit

- -

C'est mieux d'expliquer avec un exemple. Prenons un exemple simple où nous voulons créer un bouton pour chaque marque-page principal. Mozilla fournit une source de données pour les marque-pages, pouvant être ainsi utilisée pour récupérer les données. Cet exemple ne récupérera que les marque-pages principaux (ou les dossiers des marque-pages) car nous allons créer des boutons. Pour les marque-pages fils, nous devrions utiliser un élément qui affiche une hiérarchie tel qu'un arbre ou un menu.

- -
Cet exemple et tous les autres qui font référence à des sources de données RDF interne, et ils ne fonctionneront que si vous les chargez à partir d'une url chrome. Pour des raisons de sécurité, Mozilla ne permet pas d'y accéder à partir de fichiers extérieurs.
- -

Pour voir cet exemple, vous devrez créer un paquet chrome contenant le fichier à charger (vous pouvez le faire facilement, consultez les fichiers manifest). Vous pouvez alors entrer l'URL chrome dans le champ de saisie des URLs du navigateur.

- -

Exemple 1 : Source

- -
<vbox datasources="rdf:bookmarks" ref="NC:BookmarksRoot" flex="1">
-  <template>
-    <button uri="rdf:*" label="rdf:http://home.netscape.com/NC-rdf#Name"/>
-  </template>
-</vbox>
-
- -
Image:xultu_templates1.jpg
- -

Ici une boîte verticale a été créée contenant une colonne de boutons, un pour chaque marque-page principal. Vous pouvez voir que le template ne contient qu'un seul button. Cet unique bouton est utilisé comme modèle pour tout les autres boutons qu'il sera nécessaire de créer. Vous pouvez voir sur l'image qu'un ensemble de boutons a été créé, un pour chaque marque-page.

- -

Essayez d'ajouter un marque-page dans le navigateur pendant que vous avez cet exemple ouvert dans une fenêtre. Vous noterez que les boutons seront mis à jour instantanément (Vous devez donner le focus à la fenêtre pour voir le changement).

- -

Conteneurs et sources de données

- -

Le gabarit lui-même est placé à l'intérieur d'une boîte verticale. La boîte a deux attributs qui lui permet d'être utilisée pour les gabarits, indiquant d'où les données proviennent. Le premier attribut de la boîte est datasources. Il est utilisé pour déclarer la source de données RDF qui fournira les données pour créer les éléments. Dans le cas présent, 'rdf:bookmarks' est indiqué. Vous devinez probablement qu'il signifie qu'il faut utiliser la source de données des marque-pages. Cette source de données est fournie par Mozilla. Pour utiliser votre propre source de données, spécifiez l'URL d'un fichier RDF dans l'attribut datasources, comme le montre l'exemple suivant :

- -
<box datasources="chrome://zoo/content/animals.rdf"
-     ref="http://www.some-fictitious-zoo.com/all-animals">
-
- -

Vous pouvez spécifier plusieurs sources de données à la fois, en les séparant avec un espace dans la valeur de l'attribut. Ainsi, l'affichage de données provenant de multiples sources est possible.

- -

L'attribut ref indique l'endroit dans la source de données à partir duquel vous voulez récupérer les données. Dans le cas des marque-pages, la valeur 'NC:BookmarksRoot' est utilisée pour indiquer la racine de la hiérarchie des marque-pages. Les autres valeurs que vous pouvez indiquer dépendront de la source de données que vous utiliserez. Si vous utilisez votre propre fichier RDF, la valeur correspondra à la valeur d'un attribut about d'un élément RDF Bag, Seq ou Alt.

- -

À l'intérieur d'un gabarit

- -

En ajoutant ces deux attributs à la boîte du dessus, vous permettez la génération d'éléments en utilisant le gabarit. Cependant, les éléments à l'intérieur du gabarit nécessite une déclaration différente. Vous noterez dans l'exemple du dessus que le bouton a un attribut uri et a une valeur inhabituelle pour l'attribut label.

- -

Un attribut à l'intérieur d'un gabarit qui commence par 'rdf:' indique que la valeur doit être prise à partir de la source de données. Dans l'exemple plus haut, c'est le cas de l'attribut label. Le reste de la valeur réfère au nom de la propriété dans la source de données. Elle est construite en prenant l'URL de l'espace de nom utilisé par la source de données et en y ajoutant le nom de la propriété. Ici, nous utilisons seulement le nom du marque-page mais d'autres champs sont disponibles.

- -

L'attribut label des boutons est renseigné avec cet URI spécial parce que nous voulons que les libellés des boutons aient le nom des marque-pages. Nous pouvons mettre cet URI sur n'importe quel attribut de l'élément button, ou n'importe quel élément. Les valeurs de ces attributs sont remplacées par les données fournies par la source de données qui, ici, sont les marque-pages. Pour finir, les libellés des boutons sont définis par les noms des marque-pages.

- -

L'exemple du dessous montre comment nous pourrions assigner d'autres attributs d'un bouton à partir de la source de données. Bien sûr, cela implique que la source de données fournisse les ressources appropriées. Si une ressource particulière est inexistante, la valeur de l'attribut sera une chaîne vide.

- -
<button class="rdf:http://www.example.com/rdf#class"
-        uri="rdf:*"
-        label="rdf:http://www.example.com/rdf#name"
-        crop="rdf:http://www.example.com/rdf#crop"/>
-
- -

Comme vous pouvez le voir, vous pouvez générer dynamiquement une liste d'éléments avec les attributs fournis par une source de données séparée.

- -

L'attribut uri est utilisé pour spécifier l'élément où la génération du contenu commencera. Le contenu extérieur ne sera généré qu'une seule fois, tandis que le contenu intérieur sera généré pour chaque ressource. Nous en verrons plus à ce propos quand nous créerons des gabarits pour les arbres.

- -

Plus d'exemples

- -

En ajoutant ces fonctionnalités au conteneur dans lequel est le gabarit, qui dans ce cas est une boîte, et aux éléments à l'intérieur du gabarit, nous pouvons générer de multiples listes de contenu à partir de données externes. Nous pouvons bien sûr mettre plus d'un élément à l'intérieur du gabarit, et ajouter une référence RDF spéciale dans les attributs sur n'importe quel élément. L'exemple suivant le montre :

- -

Exemple 2 : Source

- -
<vbox datasources="rdf:bookmarks" ref="NC:BookmarksRoot" flex="1">
-  <template>
-    <vbox uri="rdf:*">
-      <button label="rdf:http://home.netscape.com/NC-rdf#Name"/>
-      <label value="rdf:http://home.netscape.com/NC-rdf#URL"/>
-    </vbox>
-  </template>
-</vbox>
-
- -

Cet exemple crée une boîte verticale avec un bouton et un libellé pour chaque marque-page. Le bouton contiendra le nom du marque-page et le libellé contiendra l'URL.

- -

Les nouveaux éléments qui sont créés ne sont fonctionnellement pas différents de ceux que vous mettez directement dans le fichier XUL. L'attribut id est ajouté à tous les éléments créés au travers du gabarit, et il est assigné à la valeur qui identifie la ressource. Vous pouvez l'utiliser pour identifier la ressource.

- -

Vous pouvez aussi spécifier de multiples ressources dans le même attribut en les séparant avec un espace, comme dans l'exemple qui suit (en savoir plus sur la syntaxe des ressources).

- -

Exemple 3 : Source

- -
<vbox datasources="rdf:bookmarks" ref="NC:BookmarksRoot"
-     flex="1">
-  <template>
-    <label uri="rdf:*" value="rdf:http://home.netscape.com/NC-rdf#Name rdf:http://home.netscape.com/NC-rdf#URL"/>
-  </template>
-</vbox>
-
- -

Comment sont construits les gabarits

- -

Quand un élément a un attribut datasources, cela indique que l'élément est susceptible d'être généré à partir d'un gabarit. Notez que ce n'est pas la balise template qui détermine si le contenu sera généré, mais bien l'attribut datasources. Quand cet attribut est présent, un objet que l'on appelle un constructeur est ajouté à l'élément. C'est cet objet qui est responsable de la génération du contenu à partir du gabarit. En javascript, vous pouvez accéder à l'objet constructeur par la propriété builder, bien qu'habituellement vous en aurez seulement besoin pour régénérer le contenu dans les situations où il ne le fait pas automatiquement.

- -

Il y a deux différents types de constructeur. Le premier est un constructeur de contenu utilisé dans la plupart des situations, et l'autre est un constructeur d'arbres utilisé uniquement avec les éléments tree.

- -

Constructeur de contenu

- -

Le constructeur de contenu prend le contenu situé à l'intérieur de l'élément template et le duplique pour chaque ligne. Par exemple, si l'utilisateur a dix marque-pages dans l'exemple du dessus, dix éléments label seront créés et ajoutés en tant que fils à l'élément vbox. Si vous utilisez les fonctions DOM pour traverser l'arbre, vous trouverez ces éléments à ces emplacements et pourrez récupérer leurs propriétés. Ces éléments sont affichés, mais pas l'élément template, bien qu'il existe encore dans l'arbre du document. De plus, l'attribut id de chaque libellé sera initialisé avec la ressource RDF de la ligne correspondante.

- -

Le constructeur de contenu démarre toujours à partir de l'élément qui à l'attribut uri="rdf:*". Si l'attribut uri est placé à l'intérieur d'autres éléments, ces derniers ne seront créés qu'une seule fois. Dans l'exemple ci-dessous, un hbox sera créé et rempli avec un label pour chaque item.

- -
<template>
-  <hbox>
-    <label uri="rdf:*" value="rdf:http://home.netscape.com/NC-rdf#Name"/>
-  </hbox>
-</template>
-
- -

S'il y a du contenu à l'intérieur de l'élément qui a l'attribut datasources mais en dehors de l'élément template, ce contenu apparaîtra également. Ce faisant, vous pouvez mélanger du contenu statique et dynamique dans un gabarit.

- -

Constructeur d'arbres

- -

Le constructeur d'arbres, d'autre part, ne génère pas d'éléments DOM pour chaque ligne. À la place, il récupère les données directement à partir de la source de données RDF quand il en a besoin. Comme les arbres ont souvent besoins d'afficher des centaines de lignes de données, c'est plus efficace comme ceci. Créer un élément pour chaque cellule serait trop coûteux. Cependant, en contre partie, ces arbres ne peuvent afficher que du texte (NdT : ainsi que des images et des cases à cocher), et comme aucun élément n'est créé, vous ne pouvez pas utiliser les propriétés CSS de manière habituelle pour décorer les cellules de l'arbre.

- -

Le constructeur d'arbres est utilisé seulement pour les arbres. Les autres éléments n'utilisent que le constructeur de contenu. Ceci n'est pas un problème étant donné que les autres éléments comme les menus n'ont généralement pas besoin d'afficher beaucoup d'items. Il est possible également d'utiliser le constructeur de contenu pour les arbres, ainsi un élément treeitem et d'autres seront crées pour chaque ligne.

- -

Règles

- -

Dans l'image du précédent exemple, vous avez pu noter que le troisième bouton est simplement un bouton avec des tirets comme libellé. C'est un séparateur dans la liste des marque-pages. Au cas où nous l'utiliserions, la source de données RDF des marque-pages stocke les séparateurs comme si ils étaient des marque-pages normaux. Ce que nous voulons faire est d'ajouter un petit espace à la place d'un bouton pour les ressources "séparateur". Ce qui signifie que nous voulons avoir deux différents types de contenu à créer, un type pour les marque-pages normaux, et un autre type pour les séparateurs.

- -

Nous pouvons le faire en utilisant un élément rule. Nous définissons une règle pour chaque variation des éléments que nous avons à créer. Dans notre cas, nous aurons besoin d'une règle pour les marque-pages, et une règle pour les séparateurs. Les attributs placés sur l'élément rule déterminent quelle règle s'applique sur quelle ressource RDF.

- -

Pour savoir quelle règle s'applique sur les données, chaque élément rule est analysé en séquence pour une vérification de concordance. De fait, l'ordre dans lequel vous définissez les règles est important. Les règles du début ont priorité sur les règles suivantes.

- -

Exemple de règles

- -

L'exemple suivant modifie l'exemple précédant avec deux règles.

- -

Exemple 4 : Source

- -
<window
-  id="example-window"
-  title="Liste des marque-pages"
-  xmlns:html="http://www.w3.org/1999/xhtml"
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <vbox datasources="rdf:bookmarks" ref="NC:BookmarksRoot" flex="1">
-   <template>
-
-    <rule rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator">
-     <spacer uri="rdf:*" height="16"/>
-    </rule>
-
-    <rule>
-      <button uri="rdf:*" label="rdf:http://home.netscape.com/NC-rdf#Name"/>
-    </rule>
-
-  </template>
- </vbox>
-
-</window>
-
- -
Image:xultu_templates2.jpg
- -

En utilisant deux règles, nous permettont au contenu du gabarit d'être généré sélectivement. Dans le premier rule, les séparateurs de marque-pages sont sélectionnés, comme nous pouvons le voir par l'attribut rdf:type. Le second rule n'ayant aucun attribut, il sélectionne tout le reste.

- -

Tous les attributs placés dans l'élément rule, sont utilisés comme critère de sélection. Dans notre cas, la source de données des marque-pages fournit une propriété rdf:type pour distinguer les séparateurs. Cet attribut contient une valeur spéciale pour les séparateurs dans la source de données RDF. C'est ainsi qu'on peut les distinguer des marque-pages. Vous pouvez utiliser une technique similaire pour n'importe quel attribut que l'on peut mettre sur un élément RDF Description.

- -

La valeur spéciale d'URL donnée dans l'exemple du dessus pour la première règle, est utilisée pour les séparateurs. Elle signifie que les séparateurs s'appliqueront à la première règle en générant un élément spacer d'une hauteur de 16 pixels. Les éléments qui ne sont pas des séparateurs ne correspondront pas à la première règle, et atterriront dans la deuxième règle. Celle-ci n'a aucun attribut. Elle correspond à n'importe quelle donnée. Ce qui bien sûr, est ce que nous voulons pour le reste des données.

- -

Vous avez dû noter que, parce que nous voulons un attribut provenant de l'espace de nommage du RDF (rdf:type), nous avions besoin d'ajouter la déclaration de cet espace de nommage dans la balise window. Si nous n'avions pas fait cela, l'attribut serait attribué à l'espace de nommage XUL. Parce qu'il n'existe pas dans cet espace, la règle ne s'appliquerait pas. Si nous utilisons des attributs provenant de notre propre espace de nommage, vous devez ajouter la déclaration de votre espace de nommage pour qu'ils soient reconnus.

- -

Vous devez deviner ce qui arriverait si la seconde règle était enlevée. Le résultat serait alors un simple spacer, sans aucun marque-page puisqu'ils ne correspondent à aucune règle.

- -

Dit plus simplement, une règle correspond si tous les attributs placés dans l'élément rule correspondent aux attributs de la ressource RDF. Dans le cas d'un fichier RDF, les ressources seraient les éléments Description.

- -

Il y a cependant quelques petites exceptions. Vous ne pouvez pas faire la correspondance avec les attributs XULAttr|id, rdf:property ou rdf:instanceOf. Mais puisque vous utiliserez vos propres attributs dans votre propre espace de nommage, ces exceptions n'auront probablement pas d'importance de toute façon.

- -

Notez qu'un gabarit sans règle, comme dans le premier exemple, est équivalent fonctionnellement à un gabarit qui possède un seul rule sans attribut.

- -
-

Nous allons voir maintenant l'utilisation des gabarits avec les arbres.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/grilles/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/grilles/index.html deleted file mode 100644 index ba5a11d3b6..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/grilles/index.html +++ /dev/null @@ -1,200 +0,0 @@ ---- -title: Grilles -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Grilles -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Grids ---- -

 

- -
-

« PrécédentSuivant »

-
- -

XUL dispose d'une série d'éléments pour créer des grilles sous forme de tableaux.

- -

Disposition tabulaire XUL

- -

XUL dispose d'un jeu d'éléments pour la mise en page sous la forme d'une grille en utilisant l'élément grid. Il a quelques similitudes avec la balise HTML table. La grille n'affiche rien du tout ; elle ne sert qu'à positionner d'autres éléments en ligne et en colonne.

- -

Une grille contient des éléments qui sont alignés comme avec des tableaux. À l'intérieur d'un élément grid, vous déclarez deux choses : les colonnes et les lignes qui sont utilisées. À l'instar des tableaux HTML, vous pouvez mettre du contenu tels que des libellés et des boutons à l'intérieur des lignes. Toutefois, la grille permet un arrangement de votre contenu soit en ligne, soit en colonne. Il est fréquent de l'utiliser en ligne comme avec un tableau. Mais vous pouvez utiliser des colonnes pour définir la taille et l'apparence des colonnes dans une grille. Autrement, vous pouvez mettre du contenu à l'intérieur de colonnes, et utiliser les lignes pour définir l'apparence. Nous étudierons d'abord l'organisation des éléments en ligne.

- -

Déclaration d'une grille

- -

Pour déclarer une série de lignes, utilisez l'élément rows, qui doit être un élément enfant de grid. À l'intérieur, vous devez ajouter les éléments row, qui représentent chacun des lignes. À l'intérieur d'un élément row, vous devez mettre le contenu que vous souhaitez sur cette ligne.

- -

De la même façon, les colonnes sont déclarées avec l'élément columns, qui doit être un élément enfant de grid. À l'intérieur de cet élément viennent les éléments individuels column, un pour chaque colonne que vous voulez dans la grille.

- -

Un exemple sera plus clair :

- -

Exemple 1: Source Voir

- -
Image:xultu_grids1.png
- -
<grid flex="1">
-
-  <columns>
-    <column flex="2"/>
-    <column flex="1"/>
-  </columns>
-
-  <rows>
-    <row>
-      <button label="Lapin"/>
-      <button label="Éléphant"/>
-    </row>
-    <row>
-      <button label="Koala"/>
-      <button label="Gorille"/>
-    </row>
-  </rows>
-
-</grid>
-
- -

Deux lignes et deux colonnes ont été ajoutées dans une grille. Chaque colonne est déclarée avec l'élément column. Un attribut flex a été assigné à chacune de ces colonnes. Chaque ligne contient deux éléments qui sont des boutons. Le premier élément de chaque élément row est placé dans la première colonne de la grille, et le second élément de chaque ligne est placé dans la seconde colonne.

- -
Notez que vous n'avez pas d'élément pour définir une cellule (il n'y a pas d'équivalent à l'élément HTML td). Au lieu de cela, vous placez vos contenus de cellules directement dans les éléments row.
- -

Grille avec d'autres éléments

- -

Bien entendu, vous pouvez utiliser n'importe quel autre élément que l'élément button. Si vous voulez une cellule particulière contenant de multiples éléments, vous pouvez utiliser une boîte imbriquée hbox ou tout autre élément boîte. Une boîte hbox représente un seul élément, mais elle peut contenir autant d'éléments que vous le souhaitez. Par exemple :

- -

Exemple 2: Source Voir

- -
<grid flex="1">
-
-  <columns>
-    <column/>
-    <column flex="1"/>
-  </columns>
-
-  <rows>
-    <row>
-      <label control="doctitle" value="Titre du document:"/>
-      <textbox id="doctitle" flex="1"/>
-    </row>
-    <row>
-      <label control="docpath" value="Répertoire:"/>
-      <hbox flex="1">
-        <textbox id="docpath" flex="1"/>
-        <button label="Parcourir..."/>
-      </hbox>
-    </row>
-  </rows>
-
-</grid>
-
- -
Image:xultu_grids2.png
- -

Remarquez sur l'image ci-contre comment la première colonne contenant les libellés a seulement un unique élément pour chaque ligne. La seconde colonne contient sur sa seconde ligne une boîte qui elle-même contient deux éléments, textbox et button. Vous pouvez ajouter d'autres boîtes imbriquées ou une autre grille dans une simple cellule.

- -

Si vous redimensionnez la fenêtre du dernier exemple, vous verrez que les champs de saisie s'ajustent en conséquence, mais pas les autres éléments. En effet, des attributs flex ont été ajoutés à ces champs de saisie et à la seconde colonne. La première colonne n'a pas besoin d'être flexible car les libellés n'ont pas besoin de changer de taille.

- -

La largeur initiale d'une colonne est déterminée par le plus large de ses éléments. De même, la hauteur d'une ligne est déterminée par la taille des éléments de cette ligne. Vous pouvez employer des propriétés CSS minwidth, maxwidth et des propriétés similaires pour affiner les dimensions.

- -

Organisation en colonnes

- -

Vous pouvez également placer des éléments à l'intérieur des éléments column au lieu des éléments row. En procédant de la sorte, les lignes sont ajoutées seulement pour définir leur nombre.

- -

Exemple 3: Source Voir

- -
<grid>
-  <rows>
-    <row/>
-    <row/>
-    <row/>
-  </rows>
-
-  <columns>
-    <column>
-      <label control="first" value="Premier nom:"/>
-      <label control="middle" value="Nom central:"/>
-      <label control="last" value="Dernier nom:"/>
-    </column>
-    <column>
-      <textbox id="first"/>
-      <textbox id="middle"/>
-      <textbox id="last"/>
-    </column>
-  </columns>
-
-</grid>
-
- -

Cette grille a trois lignes et deux colonnes. Les éléments row servent juste à définir combien de lignes la grille contient. Vous pouvez ajouter un attribut flex à une ligne pour la rendre flexible. Le contenu est placé dans chaque colonne. Le premier élément de chaque élément column est placé sur la première ligne, le second élément sur la deuxième ligne et le troisième élément sur la troisième ligne.

- -

Si vous placez du contenu à la fois sur les colonnes et sur les lignes, le contenu de l'un va se superposer à l'autre, même s'il est aligné correctement dans la grille. Cet effet correspondrait à une grille d'éléments stack.

- -

L'ordre des éléments dans la grille détermine lequel est affiché au premier plan et lequel est affiché à l'arrière-plan. Si l'élément rows est placé après l'élément columns, le contenu des lignes est affiché au premier plan. Si l'élément columns est placé après l'élément rows, le contenu des colonnes est affiché au premier plan. De même, les événements tels que les clics de souris et les touches de clavier sont seulement envoyés aux objets de premier plan. C'est pour cela que les colonnes sont définies après les lignes dans l'exemple ci-dessus. Si les colonnes avaient été placées en premier, les lignes auraient capturées les événements et aucun texte n'aurait pu être saisi dans les champs de saisie.

- -

Flexibilité des grilles

- -

Un des avantages des grilles par rapport à une série de boîtes imbriquées est que vous pouvez créer des cellules qui sont flexibles aussi bien horizontalement que verticalement. Il vous suffit de mettre un attribut flex sur les lignes et colonnes concernées. L'exemple suivant en fait la démonstration :

- -

Exemple 4: Source Voir

- -
<grid flex="1">
- <columns>
-  <column flex="5"/>
-  <column/>
-  <column/>
- </columns>
- <rows>
-  <row flex="10">
-    <button label="Cerise"/>
-    <button label="Citron"/>
-    <button label="Raisin"/>
-  </row>
-  <row flex="1">
-    <button label="Fraise"/>
-    <button label="Framboise"/>
-    <button label="Pêche"/>
-  </row>
- </rows>
-</grid>
-
- -

La première colonne et l'ensemble des lignes ont été rendus flexibles. Ainsi, chaque cellule de la première colonne est flexible horizontalement. De plus, chaque cellule est flexible verticalement car l'ensemble des lignes dispose de l'attribut flex. La cellule de la première colonne de la première ligne (le bouton 'Cerise') sera flexible horizontalement d'un facteur 5 et verticalement d'un facteur 10. La cellule suivante (le bouton 'Citron') ne sera flexible que verticalement.

- -

L'attribut flex a également été ajouté à l'élément grid afin que toute la grille soit flexible. Dans le cas contraire, elle ne s'agrandirait que dans une seule direction.

- -

Étendre une colonne

- -

Cela n'a aucun sens d'étendre une cellule sur un nombre particulier de colonnes ou de lignes multiples. Toutefois, il est possible de faire qu'une ligne ou qu'une colonne s'étende sur toute la largeur ou la hauteur de la grille. Il vous suffit d'ajouter un élément à l'intérieur d'un élément rows qui ne soit pas à l'intérieur d'un élément row. Par exemple, vous pouvez utiliser un type de boîte et y placer d'autres éléments si vous voulez en utiliser plusieurs. Voici un exemple simple :

- -

Exemple 5: Source Voir

- -
<grid>
-  <columns>
-    <column flex="1"/>
-    <column flex="1"/>
-  </columns>
-
-  <rows>
-    <row>
-      <label value="Nord Ouest"/>
-      <label value="Nord Est"/>
-    </row>
-    <button label="Équateur"/>
-    <row>
-      <label value="Sud Ouest"/>
-      <label value="Sud Est"/>
-    </row>
-  </rows>
-</grid>
-
- -

Le bouton va s'étendre pour s'ajuster sur toute la largeur de la grille comme s'il n'était pas à l'intérieur d'une ligne de la grille. Vous pouvez utiliser une technique similaire pour ajouter un élément entre deux colonnes. Il s'étendra pour s'ajuster sur toute la hauteur de la grille. Vous pouvez combiner les deux si vous le souhaitez.

- -
-

Dans la section suivante, nous verrons comment ajouter des panneaux de contenu.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_d'attributs_xbl/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_d'attributs_xbl/index.html" deleted file mode 100644 index e7071aad31..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_d'attributs_xbl/index.html" +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Héritage d'attributs XBL -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Héritage_d'attributs_XBL -tags: - - Tutoriel_XUL - - Tutoriels - - XBL - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/XBL_Attribute_Inheritance ---- -

 

-
-

« PrécédentSuivant »

-
-

Dans cette section, nous verrons comment les attributs peuvent être hérités.

-

l'héritage d'attributs

-

XBL permet de construire des éléments graphiques composites tout en cachant leur implémentation réelle. Cependant, avec les fonctionnalités mentionnées jusque présent, le contenu anonyme est toujours créé de la même façon. Il serait utile de pouvoir ajouter des attributs aux éléments extérieurs pour modifier les éléments intérieurs. Par exemple :

-
XUL:
-
-<searchbox/>
-
-XBL:
-
-<binding id="searchBinding">
-  <content>
-    <xul:textbox/>
-    <xul:button label="Rechercher"/>
-  </content>
-</binding>
-
-

Dans cet exemple, l'attribut label est placé directement sur l'élément button. Le problème avec cette technique est que le libellé sera le même à chaque fois que la liaison sera utilisée. Dans ce cas, il serait préférable que l'attribut soit plutôt défini sur la balise searchbox. XBL fournit un attribut inherits permettant l'héritage des attributs de l'élément extérieur. Il devra être placé sur l'élément qui héritera de ces attributs, dans notre cas sur le bouton. Sa valeur devra être initialisée par une liste des noms des attributs à hériter, séparés par des virgules.

-
<xul:textbox xbl:inherits="flex"/>
-<xul:button xbl:inherits="label"/>
-
-

Lorsque le contenu est généré, textbox obtient l'attribut flex à partir de searchbox et button obtient l'attribut label à partir de searchbox. Ils permettent à la flexibilité du champ de saisie et au libellé du bouton d'être différents à chaque utilisation de la liaison. De plus, le changement de la valeur des attributs de la balise searchbox avec un script mettra aussi à jour la balise textbox et la balise button. Vous pouvez ajouter un attribut inherits sur autant d'éléments que vous le souhaitez, pour hériter de n'importe quel nombre d'attributs.

-

Remarquez comment l'attribut inherits a été placé dans l'espace de nommage XBL, en utilisant le préfixe 'xbl:'. L'espace de nommage devrait être déclaré quelque part avant, généralement dans l'élément bindings, comme dans l'exemple suivant :

-
<bindings xmlns:xbl="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<xbl:binding id="buttonBinding">
-  <xbl:content>
-    <xul:button label="OK" xbl:inherits="label"/>
-  </xbl:content>
-</xbl:binding>
-
-

Dans cet exemple, le bouton hérite de l'attribut label, mais cet attribut a aussi une valeur assignée directement dans le XBL. Cette technique est utilisée pour définir une valeur par défaut si l'attribut n'est pas présent. Ce bouton héritera son attribut label de l'élément extérieur. Cependant, si aucun label n'est présent, la valeur 'OK' par défaut lui sera donnée.

-

Il peut arriver que deux éléments générés aient besoin d'hériter d'un attribut qui a le même nom. Par exemple, pour créer un champ de saisie muni d'un libellé, contenant donc un élément label et un élément textbox, le libellé (label) aura besoin d'hériter son texte à partir de l'attribut value et le champ de saisie (textbox) aura aussi besoin d'hériter sa valeur par défaut également à partir de l'attribut value. Pour résoudre cela, nous aurons besoin d'utiliser un attribut différent et le faire pointer sur le bon. L'exemple suivant montre comment procéder :

-
XUL:
-
-<box class="labeledtextbox" title="Entrer du texte:" value="OK"/>
-
-CSS:
-
-box.labeledtextbox {
-    -moz-binding: url('chrome://example/skin/example.xml#labeledtextbox');
-}
-
-XBL:
-
-<binding id="labeledtextbox">
-  <content>
-    <xul:label xbl:inherits="value=title"/>
-    <xul:textbox xbl:inherits="value"/>
-  </content>
-</binding>
-
-

L'élément textbox hérite directement de l'attribut value. Pour initialiser l'attribut value du libellé, nous aurons besoin d'utiliser un nom différent d'attribut et le faire pointer vers le vrai attribut. L'attribut inherits sur la balise label obtient son attribut title à partir de l'élément extérieur et le fait pointer vers l'attribut value de l'élément label. La syntaxe <attribut intérieur>=<attribut extérieur> est utilisée ici pour faire pointer un attribut vers un autre. Voici un autre exemple :

-
XUL:
-
-<box class="okcancel" oktitle="OK" canceltitle="Annuler" image="happy.png"/>
-
-CSS:
-
-box.okcancel {
-    -moz-binding: url('chrome://example/skin/example.xml#okcancel');
-}
-
-XBL:
-
-<binding id="okcancel">
-  <content>
-    <xul:button xbl:inherits="label=oktitle,image"/>
-    <xul:button xbl:inherits="label=canceltitle"/>
-  </content>
-</binding>
-
-

La valeur de l'attribut oktitle est projetée vers l'attribut label du premier bouton. L'attribut canceltitle est projeté vers l'attribut label du second bouton. Le premier bouton hérite aussi de l'attribut image. Le résultat est le suivant :

-
<box class="okcancel" oktitle="OK" canceltitle="Annuler" image="happy.png">
-  <button label="OK" image="happy.png"/>
-  <button label="Annuler"/>
-</box>
-
-

Remarquez que les attributs sont dupliqués dans le contenu intérieur (anonyme). La modification des attributs de la boîte avec la classe 'okannuler' affectera automatiquement les valeurs des boutons. Vous avez probablement aussi remarqué que nous avons créé nos propres noms d'attribut. Ceci est valide en XUL.

-
-

Dans la section suivante, nous regarderons l'ajout de propriétés, méthodes et événements à une liaison.

-
-

« PrécédentSuivant »

-
-

Interwiki

-

 

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_xbl/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_xbl/index.html" deleted file mode 100644 index a2edf8e9ba..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/h\303\251ritage_xbl/index.html" +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Héritage XBL -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Héritage_XBL -tags: - - Tutoriel_XUL - - Tutoriels - - XBL - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/XBL_Inheritance ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous verrons comment étendre des définitions XBL existantes.

- -

Héritage

- -

Parfois vous pouvez vouloir créer un élément graphique XBL qui est similaire à un élément existant. Par exemple, disons que vous souhaitez créer un bouton XBL avec une fenêtre surgissante. Une manière de faire pour le créer est de dupliquer le code XBL existant des boutons. Cependant, il serait préférable de simplement étendre ce code.

- -

N'importe quelle liaison peut être étendue avec une autre. La liaison fille peut ajouter des propriétés, des méthodes et des gestionnaires d'événements. La liaison fille aura toutes les caractéristiques qui la définissent en plus des caractéristiques de la liaison dont elle hérite (et celles dont cette liaison aura elle même hérité et ainsi de suite dans l'arbre).

- -

Pour étendre une liaison existante, ajoutez un attribut extends à l'intérieur de la balise binding. Par exemple, la liaison suivante crée un champ de saisie qui ajoute le texte 'http://www' au début de sa valeur lorsque la touche F4 est pressée.

- -

Exemple 1 : Source

- -
<binding id="textboxwithhttp"
-         extends="chrome://global/content/bindings/textbox.xml#textbox">
-  <handlers>
-    <handler event="keypress" keycode="VK_F4">
-      this.value="http://www"+value;
-    </handler>
-  </handlers>
-</binding>
-
- -

L'élément XBL étend ici les fonctionnalités du champ de saisie XUL textbox. L'URL donnée dans l'attribut extends ci-dessus est l'URL de la liaison de la balise textbox. Elle signifie que la liaison hérite de tous les contenu et comportement fournis par la liaison de textbox. En plus, nous ajoutons un gestionnaire qui répond à l'événement 'keypress'.

- -

Champ de saisie semi-automatique

- -

L'exemple ci-dessus est similaire au dispositif de saisie semi-automatique qui fonctionne sous Mozilla. Un champ de saisie qui supporte la saisie semi-automatique n'est qu'un champ de saisie basique étendu avec une liaison XBL.

- -

Le champ de saisie semi-automatique ajoute une gestion spéciale d'événement de telle sorte que lorsqu'une URL est tapée, un menu va surgir proposant des suites de saisies possibles. Vous pouvez aussi l'utiliser dans vos propres applications. Créez simplement un textbox avec deux attributs spéciaux.

- -
<textbox type="autocomplete" searchSessions="history"/>
- -

Déclarez l'attribut type à 'autocomplete' pour ajouter un dispositif de saisie semi-automatique à un champ de saisie existant. Déclarez searchSessions pour indiquer le type de données à surveiller. Dans ce cas, la valeur 'history' surveillant les URLs dans l'historique est utilisée (Vous pouvez aussi utiliser la valeur 'addrbook' pour surveiller les adresses dans le carnet d'adresses.)

- -
Firefox utilise un mécanisme d'autocomplétion différent de celui de la suite Mozilla, consultez XUL:textbox (autocomplétion de Firefox).
- -
-

Dans la prochaine section, nous verrons un exemple d'élément graphique défini en XBL.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/index.html deleted file mode 100644 index 5924573c00..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/index.html +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: Tutoriel XUL -slug: Archive/Mozilla/XUL/Tutoriel_XUL -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial ---- -

 

- -

Ce tutoriel décrit le langage XUL (XML User-interface Language). Ce langage a été créé pour l'application Mozilla afin de décrire son interface utilisateur.

- -
Introduction
- - - -
Éléments simples
- - - -
Le modèle de boîte
- - - -
Éléments communs
- - - - - - - -
Évènements et scripts
- - - -
Modèle Objet de Document (DOM)
- - - -
Arbres
- - - -
RDF et templates
- - - -
Thèmes et localisation
- - - -
Liaisons XBL
- - - -
Fenêtres spécialisées
- - - -
Installation
- - - -
-

Ce tutoriel XUL a été initialement créé par Neil Deakin. Il a généreusement accepté de l'inclure dans MDC.

-
- -
-
Information du document original
- - -
- -

Interwiki Language Links

- -

 

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/indicateurs_de_progression/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/indicateurs_de_progression/index.html deleted file mode 100644 index af289aeecf..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/indicateurs_de_progression/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Indicateurs de progression -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Indicateurs_de_progression -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Progress_Meters ---- -
-

« PrécédentSuivant »

-
-

Dans cette section, nous étudierons la création d'indicateurs de progression.

-

Ajout d'un indicateur de progression

-

Un indicateur de progression est une barre qui indique l'état d'avancement d'une tâche. Typiquement, vous la voyez lors du téléchargement de fichiers ou quand une longue opération s'exécute. XUL a un élément qui peut être utilisé pour la création d'un indicateur de progression (NdT : progressmeter). Il y a deux types d'état pour un indicateur : déterminé et indéterminé.

-

Les indicateurs de progression déterminés sont utilisés quand vous connaissez la durée d'une opération. L'indicateur de progression va se remplir, et une fois plein, l'opération doit être terminée. Il peut être utilisé pour une boîte de dialogue de téléchargement lorsque la taille des fichiers est connue.

-

Les indicateurs de progression indéterminés sont utilisés quand vous ne connaissez pas la durée d'une opération. Une animation visuelle représentera cet indicateur, sous la forme d'un rectangle zébré ou un cylindre hachuré tournant, et elle sera dépendante de votre système d'exploitation et du thème graphique utilisé.

-

Indicateur de progression déterminé : 

-
Image:xultu_prog-det.jpg
-

Indicateur de progression indéterminé : 

-
Image:xultu_prog-udet.jpg
-

Un indicateur de progression a la syntaxe suivante :

-
<progressmeter
-   id="identifier"
-   mode="determined"
-   value="0%"/>
-
-

Ses attributs sont les suivants :

-
id 
L'identifiant unique de l'indicateur de progression.
mode 
Le type d'indicateur de progression. Si sa valeur est 'determined', l'indicateur de progression est déterminé et se remplit au fur et à mesure de la tâche en cours. Si sa valeur est 'undetermined', l'indicateur de progression est indéterminé et vous ne connaissez pas la durée de la tâche en cours. La valeur par défaut est 'determined' si vous n'avez pas spécifié cet attribut.
value 
La valeur courante de l'indicateur de progression. Vous ne devez utiliser cet attribut que pour un indicateur de progression déterminé. La valeur doit être un pourcentage compris entre '0%' et '100%'. La valeur sera changée par un script selon l'avancement de la tâche.
-
-
-

Ajoutons maintenant un indicateur de progression à notre boîte de dialogue 'Recherche de fichiers'. Nous devrions normalement mettre un indicateur de progression indéterminé car nous ne connaissons pas le nombre de fichiers recherchés ou combien de temps prendra la recherche. Toutefois, nous ajouterons un indicateur normal pour l'instant car un indicateur animé risque d'être perturbant lors du développement. L'indicateur de progression devrait normalement n'apparaître que lorsque la recherche est lancée. Nous ajouterons plus tard un script pour l'afficher ou non.

-
<hbox>
-
-  <progressmeter value="50%" style="margin: 4px;">
-
-  <spacer flex="1"/>
-</hbox>
-
-
Image:xultu_progress1.png
-

La valeur a été mise à '50%' afin que vous puissiez voir la barre de progression dans la fenêtre. Une marge de 4 pixels a été définie pour séparer l'indicateur du bord de la fenêtre. Comme nous l'avons mentionné précédemment, nous voulons simplement que la barre de progression soit affichée pendant la recherche. Un script l'affichera et la masquera si nécéssaire.

-Exemple 'Recherche de fichiers' : Source Voir
-
-

Nous allons voir dans la prochaine section comment ajouter des éléments additionnels à une fenêtre en utilisant HTML.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/interfaces_xpcom/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/interfaces_xpcom/index.html deleted file mode 100644 index 5f7b8e5f1b..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/interfaces_xpcom/index.html +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Interfaces XPCOM -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Interfaces_XPCOM -tags: - - Tutoriel_XUL - - Tutoriels - - 'XPCOM:Liaisons_de_langage' - - XPConnect - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/XPCOM_Interfaces ---- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous allons faire une brève présentation de XPCOM ("Modèle de composants objets multi plate-forme"), qui est le système d'objets utilisé par Mozilla.

- -

Appel des objets natifs

- -

En utilisant XUL, nous pouvons construire des interfaces utilisateurs complexes. En y joignant des scripts, on peut modifier l'interface et réaliser des actions. Cependant, il y a un certain nombre de choses qui ne peuvent pas être réalisées directement en javascript. Par exemple, si nous voulons créer une application gérant des courriels, nous avons besoin d'écrire des scripts permettant de se connecter au serveur de courriels, afin de les retirer ou d'en envoyer. Le langage Javascript ne permet pas de faire ce genre de choses.

- -

Le seul moyen pour le faire est d'écrire du code natif implémentant ces fonctionnalités avancées. Nous avons aussi besoin d'un moyen pour pouvoir appeler ce code natif aisément à partir de nos scripts. Mozilla fournit une telle possibilité en utilisant XPCOM.

- -
Mozilla fournit déjà plusieurs composants et interfaces XPCOM. Donc, dans la plupart des cas, il sera inutile d'écrire votre propre code natif. Après avoir lu cette section, vous pourrez rechercher des interfaces en utilisant la référence XPCOM de XULPlanet.
- -

À propos d'XPCOM

- -

Mozilla est construit à partir d'une multitude de composants, où chacun d'eux réalise une tâche précise. Par exemple, il y a un composant pour chaque menu, bouton et élément. Ces composants sont construits à partir de plusieurs définitions appelées interfaces.

- -

Une interface dans Mozilla est une définition d'un ensemble de fonctions que peuvent implémenter des composants. Les composants sont ce qui permet au code de Mozilla de réaliser des traitements. Chaque composant implémente les fonctions conforme à une interface. Un composant peut implémenter plusieurs interfaces. Et plusieurs composants peuvent implémenter la même interface.

- -

Prenons l'exemple d'un composant de fichier. Une interface sera créée décrivant les propriétés et les fonctions que l'on veut pouvoir appliquer sur un fichier. Les propriétés seront le nom du fichier, sa date de dernière modification ou sa taille. Les fonctions permettront d'effacer, de déplacer ou de copier le fichier.

- -

L'interface "Fichier" décrit uniquement les caractéristiques du fichier, elle ne les implémente pas. L'implémentation est laissé au composant. Celui-ci contiendra le code qui permettra de récupérer le nom du fichier, sa date, sa taille. Il contiendra également le code pour le copier ou le renommer.

- -

Nous n'avons pas à s'intéresser sur la manière dont l'implémentation est faite par le composant, du moment qu'il respecte l'interface correctement. Bien sûr, nous aurons une implémentation différente pour chaque plate-forme. Entre les versions Macintosh et Windows, les composants de fichier seront très différents. Cependant ils implémentent la même interface et par conséquent on peut accéder au composant en utilisant les fonctions de cette interface.

- -

Dans Mozilla, les interfaces sont préfixées par 'nsI' ou 'mozI' ainsi elles sont facilement reconnaissables. Par exemple, nsIAddressBook est l'interface qui interagit avec le carnet d'adresses, nsISound est celle utilisée pour écouter des fichiers et nsILocalFile pour manipuler des fichiers. Pour plus de détails, consultez les interfaces de Mozilla.

- -

Typiquement, les composants XPCOM sont implémentés nativement, ce qui signifie qu'ils font des choses que le langage Javascript ne peut pas réaliser. Par contre, on peut les appeler à partir de scripts. C'est ce que l'on va voir maintenant. Nous pouvons appeler n'importe laquelle des fonctions fournies par le composant telles que décrites par les interfaces qu'il implémente. Par exemple, si vous avez un composant à votre disposition, vous vérifiez alors s'il implémente l'interface nsISound, et si c'est le cas, vous pouvez jouer un son grâce lui.

- -

Le processus d'appel de composants XPCOM à partir d'un script se nomme XPConnect : une couche qui traduit les objets du script en objets natifs.

- -

Création d'objets XPCOM

- -

L'appel d'un composant XPCOM se fait en trois étapes :

- -
    -
  1. Récupérer un composant.
  2. -
  3. Récupérer la partie du composant qui implémente l'interface que l'on veut utiliser.
  4. -
  5. Appeler la fonction que l'on a besoin.
  6. -
- -

Une fois que les deux premières étapes sont réalisées, nous pouvons effectuer la dernière autant de fois que nécessaire. Prenons le cas du renommage d'un fichier. La première étape est de récupérer le composant "fichier". Puis on interroge ledit composant pour récupérer la portion qui implémente l'interface nsILocalFile. Enfin, on appelle les fonctions fournies par l'interface. Cette interface est utilisée pour représenter un unique fichier.

- -

Nous avons vu que les noms d'interfaces commencent toujours par 'nsI' ou 'mozI'. Par contre, la désignation des composants utilise la syntaxe URI. Mozilla stocke une liste de tous les composants disponibles dans son propre registre. Un utilisateur peut installer de nouveaux composants si besoin est. Ce mécanisme fonctionne comme les plugins.

- -

Mozilla fournit un composant "fichier" c'est-à-dire implémentant nsILocalFile. Ce composant est désigné par la chaîne '@mozilla.org/file/local;1'. Cette chaîne est appelée un contractID. La syntaxe d'un contractID est :

- -
@<internetdomain>/module[/submodule[...]];<version>[?<name>=<value>[&<name>=<value>[...]]]
- -

D'autres composants peuvent être appelés de la même manière.

- -

Le contractID du composant sert à obtenir le composant. Voici en Javascript le code correspondant :

- -
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
- -

Le composant "fichier" est récupéré et stocké dans la variable aFile. Dans l'exemple, Components fait référence à un objet global fournissant les fonctions relatives à certains composants. Ici la classe d'un composant est récupérée en utilisant la propriété classes. Cette propriété est un tableau de tous les composants disponibles. Pour obtenir un composant différent, il suffit de remplacer l'URI par celui du composant voulu. Finalement, une instance est créée avec la fonction createInstance().

- -

Vous devez vérifier que la valeur de retour de createInstance() est différente de 'null', valeur qui indiquerait que le composant n'existe pas.

- -

Pour l'instant, nous avons seulement une référence sur le composant "fichier". Pour appeler ses fonctions, nous avons besoin de récupérer une de ces interfaces, dans notre cas nsILocalFile. Une seconde ligne est ajoutée à notre code comme suit :

- -
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
-if (aFile) aFile.QueryInterface(Components.interfaces.nsILocalFile);
-
- -

La fonction QueryInterface() est fournie par tous les composants, elle permet d'obtenir une interface précise du composant. Elle prend un seul paramètre, le nom de l'interface souhaitée. La propriété interfaces de Components contient une liste de toutes les interfaces des composants. Ici on utilise l'interface nsILocalFile que l'on passe en paramètre à QueryInterface(). Ainsi aFile fera référence à la partie du composant qui implémente l'interface nsILocalFile.

- -

Ces deux lignes de Javascript peuvent être utilisées pour obtenir n'importe quelle interface de n'importe quel composant. Il suffit de remplacer le nom du composant et le nom de l'interface que vous voulez utiliser. Vous pouvez bien sûr choisir n'importe quel nom pour la variable. Par exemple si vous voulez utiliser l'interface pour le son, notre code pourrait être comme suit :

- -
var sound = Components.classes["@mozilla.org/sound;1"].createInstance();
-if (sound) sound.QueryInterface(Components.interfaces.nsISound);
-
- -

Les interfaces XPCOM peuvent hériter d'autres interfaces. L'interface héritière possède ses propres fonctions mais aussi toutes celles des interfaces parentes. Ainsi toute interface hérite de l'interface principale nsISupports qui fournit la fonction QueryInterface(). Comme tout composant doit implémenter nsISupports, la fonction QueryInterface() est disponible sur tous les composants.

- -

Plusieurs composants peuvent implémenter la même interface. Typiquement ce sont des sous-classes de l'original mais pas nécessairement. N'importe quel composant peut implémenter les fonctionnalités de nsILocalFile. De plus, un composant peut implémenter plusieurs interfaces. C'est pour ces raisons que l'on doit procéder en deux étapes pour appeler les fonctions d'une interface.

- -

Cependant, il existe un raccourci pour réduire ces deux étapes en une seule ligne de code :

- -
var aLocalFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
-
- -

Ce code effectue la même action qu'avec les deux lignes, mais en une seule ligne. Il élimine le besoin de créer une instance et ensuite de l'interroger pour obtenir une interface précise, en deux étapes séparées.

- -

Un appel à QueryInterface() sur un objet qui ne fournit pas l'interface demandée lance une exception. Si vous n'êtes pas sûr que le composant supporte une interface, vous pouvez utiliser l'opérateur instanceof comme suit :

- -
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
-if (aFile instanceof Components.interfaces.nsILocalFile){
-  // faire quelque chose si il s'agit d'une instance du bon type
-}
-
- -

L'opérateur instanceof renvoie 'true' si aFile implémente l'interface nsILocalFile, et il effectue également l'appel de la méthode QueryInterface, ce qui fournit par la suite un objet nsILocalFile aFile valide.

- -

Appel des fonctions de l'interface

- -

Maintenant que nous avons un objet qui fait référence à un composant avec l'interface nsILocalFile, nous pouvons appeler les fonctions de celle-ci à travers l'objet. La liste suivante montre quelques propriétés et méthodes de l'interface nsILocalFile.

- -
-
initWithPath 
-
Cette méthode est utilisée pour initialiser le chemin et le nom du fichier pour l'interface nsILocalFile. Le premier paramètre doit être le chemin du fichier, comme par exemple '/usr/local/mozilla'.
-
leafName 
-
Le nom du fichier sans son chemin complet.
-
fileSize 
-
La taille du fichier.
-
isDirectory() 
-
Renvoie 'true' si nsILocalFile représente un répertoire.
-
remove(recursif) 
-
Efface un fichier. Si le paramètre recursif est 'true', le répertoire et tous ses fichiers et sous-répertoires sont effacés.
-
copyTo ( repertoire, nouveauNom ) 
-
Copie un fichier dans un autre répertoire, et optionnellement renomme le fichier. La variable repertoire doit être un objet nsILocalFile représentant le répertoire où l'on veut copier le fichier.
-
moveTo ( repertoire, nouveauNom ) 
-
Déplace le fichier dans un autre répertoire ou le renomme. La variable repertoire doit être un objet nsILocalFile représentant le répertoire où l'on va mettre le fichier.
-
- -

Pour effacer un fichier, on doit d'abord l'assigner à un objet nsILocalFile. Nous appelons la méthode initWithPath() pour définir le fichier en question, en indiquant juste le chemin de celui-ci. Puis nous appelons la fonction remove() avec le paramètre recursif à 'false'. Voici le code correspondant :

- -
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
-if (aFile instanceof Components.interfaces.nsILocalFile){
-  aFile.initWithPath("/mozilla/testfile.txt");
-  aFile.remove(false);
-}
-
- -

Ce code prend le fichier '/mozilla/testfile.txt' et l'efface. Essayez cet exemple en ajoutant le code à un gestionnaire d'évènements. Vous devez changer le nom du fichier pour qu'il corresponde à un fichier existant que vous voulez effacer sur votre poste local.

- -

Dans la liste ci-dessus, nous avons vu deux fonctions copyTo() et moveTo(). Ces fonctions sont utilisées pour respectivement copier et déplacer des fichiers.

- -
Notez que ces fonctions ne prennent pas en paramètre une chaîne de caractères pour désigner un répertoire mais un objet nsILocalFile. Cela signifie que nous devons récupérer les deux composants "fichier".
- -

L'exemple suivant montre comment copier un fichier :

- -
function copyFile(sourcefile,destdir)
-{
-  // récupérer un composant pour le fichier à copier
-  var aFile = Components.classes["@mozilla.org/file/local;1"]
-    .createInstance(Components.interfaces.nsILocalFile);
-  if (!aFile) return false;
-
-  // récupérer un composant pour le répertoire où la copie va s'effectuer.
-  var aDir = Components.classes["@mozilla.org/file/local;1"]
-    .createInstance(Components.interfaces.nsILocalFile);
-  if (!aDir) return false;
-
-  // ensuite, on initialise les chemins
-  aFile.initWithPath(sourcefile);
-  aDir.initWithPath(destdir);
-
-  // Au final, on copie le fichier sans le renommer
-  aFile.copyTo(aDir,null);
-}
-
-copyFile("/mozilla/testfile.txt","/etc");
-
- -

Les services XPCOM

- -

Certains composants XPCOM spéciaux sont appelés services. Vous ne pouvez pas créer plusieurs instances d'un service parce qu'il doit être unique. Les services fournissent des fonctions manipulant des données globales ou effectuent des opérations sur d'autres objets. Au lieu d'utiliser createInstance(), vous devez appeler getService() pour récupérer une référence sur le composant de type "service". À part ça, les services ne diffèrent pas des autres composants.

- -

Un exemple de service fournit par Mozilla est le service pour les marque-pages. Il vous permet d'ajouter un marque-page à la liste courante des marque-pages de l'utilisateur. Voici un exemple :

- -
var bmarks = Components.classes["@mozilla.org/browser/bookmarks-service;1"].getService();
-bmarks.QueryInterface(Components.interfaces.nsIBookmarksService);
-bmarks.addBookmarkImmediately("http://www.mozilla.org","Mozilla",0,null);
-
- -

Tout d'abord, le composant '@mozilla.org/browser/bookmarks-service;1' est récupéré et son service est placé dans la variable bmarks. Nous utilisons QueryInterface() pour récupérer l'interface 'nsIBookmarksService'. La fonction addBookmarkImmediately() fournie par cette interface peut être utilisée pour ajouter des marque-pages. Les deux premiers paramètres de cette fonction sont l'URL et le titre du marque-page. Le troisième paramètre est le type de marque-page qui doit normalement être '0', et le dernier paramètre est l'encodage des caractères du document correspondant au marque-page, qui peut être nul.

- -
-

Dans la section suivante, nous verrons quelques-unes des interfaces que l'on peut utiliser, fournies par Mozilla.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

- -

 

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/introduction/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/introduction/index.html deleted file mode 100644 index c19e397929..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/introduction/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Introduction -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Introduction -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Introduction ---- -
-

Suivant »

-
-

Ce tutoriel est destiné à vous guider dans l'apprentissage de XUL (XML User-interface Language) qui est un langage multi plates-formes permettant de décrire les interfaces utilisateurs des applications.

-

Ce tutoriel vous montrera la création d'une simple interface utilisateur de recherche de fichiers, comme celle fournie par l'interface Sherlock du Macintosh, ou la boîte de dialogue de recherche de fichier de Windows.

-

Notez que seule l'interface utilisateur sera créée avec quelques fonctionnalités limitées. La recherche de fichiers proprement dite ne sera pas implémentée. Une ligne bleue apparaîtra sur la gauche des paragraphes où la boîte de dialogue de recherche de fichier sera modifiée. Vous pourrez suivre cela à travers les sections.

-

Qu'est ce que XUL et pourquoi a-t-il été créé ?

-

XUL (prononcez zool, cela rime avec cool) a été créé pour avoir un développement du navigateur Mozilla plus facile et plus rapide. C'est un langage XML donc toutes les caractéristiques disponibles dans XML le sont également dans XUL.

-

La plupart des applications ont besoin d'être développées en utilisant les caractéristiques d'une plate-forme spécifique, rendant l'adaptation multi plate-forme consommatrice en temps et coûteuse. Un certain nombre de solutions multi plates-formes ont été développées dans le passé. Java, par exemple, a comme principal argument de vente la portabilité. XUL est l'un de ces langages conçus spécialement pour créer des interfaces utilisateurs portables. Cela prend beaucoup de temps pour bâtir une application, même pour une seule plate-forme. Le temps requis pour compiler et débugger peut être long. Avec XUL, une interface peut être implémentée et modifiée rapidement et facilement.

-

XUL a tous les avantages des autres langages XML. Par exemple, XHTML ou d'autres langages XML comme Math-ML ou SVG peuvent y être insérés. De plus, les textes affichés avec XUL sont aisément localisables, ce qui signifie qu'ils peuvent être traduits dans d'autres langues avec peu d'effort.

-

Quels types d'interface utilisateurs peuvent être réalisés avec XUL ?

-

XUL offre la possibilité de créer la plupart des éléments habituels que l'on rencontre dans des interfaces graphiques modernes. Voici quelques éléments pouvant être créés :

- -

Le contenu affiché peut être créé à partir du contenu d'un fichier XUL ou à partir d'une source de données. Dans Mozilla, de telles sources de données sont utilisées pour les messages des boîtes aux lettres, les marque-pages, et les résultats de recherche. Les contenus des menus, arbres, et autres éléments peuvent être remplis avec ces données, ou avec vos propres données fournies dans des fichiers RDF.

-

Il existe plusieurs cas où des applications XUL sont créées :

- -

Les trois premiers types nécessitent chacun une installation sur la machine de l'utilisateur. De ce fait, ces types d'applications n'ont aucune restriction de sécurité et peuvent accéder au système de fichiers local, ou lire et écrire des préférences par exemple. Pour des extensions, les fichiers XUL et leurs scripts et images associés seront empaquetés dans un unique fichier qui sera téléchargé et installé par l'utilisateur. Des applications Mozilla telle que Firefox fournissent un gestionnaire d'extensions permettant l'installation de paquetages sans avoir à écrire beaucoup de code complexe.

-

Il est possible d'ouvrir des fichiers XUL directement depuis le système de fichiers ou à partir d'un site Web distant. Cependant, ils seront restreints dans les types d'opérations qu'ils peuvent effectués, et certains aspects de XUL ne fonctionneront pas. Toutefois, si vous voulez charger du contenu XUL à partir d'un site distant, le serveur Web doit être configuré pour envoyer les fichiers XUL avec le type de contenu 'application/vnd.mozilla.xul+xml'. XUL est habituellement stocké dans des fichiers avec l'extension .xul. Vous pouvez ouvrir un fichier XUL avec Mozilla comme vous le feriez avec d'autres fichiers, en utilisant la commande 'Ouvrir un fichier…' du menu 'Fichier', ou en tapant l'URL dans la barre d'adresse.

-

Que dois-je savoir pour comprendre le tutoriel ?

-

Vous devez connaître HTML et avoir au moins des connaissances de base sur XML et CSS. Voici quelques indications à garder à l'esprit :

- -

XUL est supporté dans Mozilla et les navigateurs basés sur le moteur Gecko, comme Netscape 6 ou plus, et Mozilla Firefox. À cause des différents changements dans la syntaxe XUL au fil du temps, vous devriez avoir la dernière version pour que les exemples fonctionnent correctement. La plupart des exemples devraient fonctionner dans Mozilla 1.0 et plus. XUL est pratiquement similaire dans Firefox que dans les autres navigateurs, bien qu'il y ait des différences spécifiques, comme le support des barres de boutons personnalisables.

-

Ce tutoriel tente de couvrir la plupart des fonctionnalités de XUL. Cependant, toutes les spécificités ne seront pas examinées. Une fois que vous vous serez familiarisés avec XUL, vous pourrez utiliser la référence des éléments XUL pour trouver les autres fonctionnalités supportées par d'autres éléments spécifiques.

-
-

Suivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_rdf/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_rdf/index.html" deleted file mode 100644 index 6bbbb8e7a4..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_rdf/index.html" +++ /dev/null @@ -1,147 +0,0 @@ ---- -title: Introduction à RDF -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Introduction_à_RDF -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Introduction_to_RDF ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous allons nous intéresser à RDF (Resource Description Framework).

- -

Resource Description Framework

- -

Nous pouvons utiliser l'élément tree pour afficher un ensemble de données, telles que des marque-pages ou des courriels. Cependant, il ne serait pas pratique de le faire en entrant les données directement dans le fichier XUL. Il serait très difficile de modifier les marque-pages s'ils étaient directement dans le fichier XUL. Le moyen de résoudre cette difficulté est d'utiliser des sources de données RDF.

- -

RDF (Resource Description Framework) est un format qui peut être utilisé pour stocker des ressources telles que des marque-pages ou des courriels. Alternativement, on peut utiliser des données dans d'autres formats et écrire du code qui va lire le fichier et créer le fichier de données RDF. C'est de cette façon que Mozilla fonctionne quand il lit des données telles que les marque-pages, l'historique ou les messages de courriel. Mozilla fournit des sources de données pour ces données communes pour que vous puissiez facilement les utiliser.

- -

Vous pouvez utiliser n'importe quelles sources de données RDF fournies pour peupler les arbres tree avec des données ou vous pouvez désigner un fichier RDF au format XML contenant les données. Elles sont très commodes pour afficher des arbres contenant beaucoup de lignes. RDF peut aussi peupler d'autres éléments XUL comme les listbox et les menu. Nous verrons cela dans la prochaine section.

- -

Un très bref aperçu de RDF sera fourni ici. Pour un guide de RDF plus détaillé, lisez Introduction to the RDF Model (en). Il est recommandé de lire ce guide si vous êtes débutant en RDF.

- -

Pour plus d'information sur le RDF, consultez les spécifications RDF (en).

- -

RDF/XML

- -

RDF consiste en un modèle, qui est une représentation des données sous forme de graphe. RDF/XML est un langage XML utilisé pour représenter des données RDF. Il contient un ensemble assez simple d'éléments. L'exemple ci-dessous montre un gabarit RDF minimal.

- -
<?xml version="1.0"?>
-<RDF:RDF
-  xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-  ...
-</RDF:RDF>
-
- -

Il a quelques similitudes avec l'en-tête XUL. À la place de l'élément window, l'élément RDF est utilisé. Vous pouvez voir que l'espace de nommage pour RDF a été déclaré pour que les éléments RDF soient reconnus proprement. À l'intérieur de l'élément RDF, vous placerez les données. Pour voir quelques exemples de fichiers RDF/XML, regardez ceux présents avec Mozilla. Ils ont une extension .rdf.

- -

Base de données RDF

- -

Prenons l'exemple d'une liste de marque-pages générée à partir de RDF. Une liste de marque-pages contient un ensemble d'enregistrements, chacun avec un ensemble de données associées, telles que l'URL, le titre et une date de visite.

- -

Pensez aux marque-pages comme une base de données qui est stockée comme une grande table avec de nombreux champs. Dans le cas de RDF cependant, les listes peuvent être hiérarchisées. C'est nécessaire pour que nous puissions avoir des dossiers ou des catégories de marque-pages. Chacun des champs dans la base de données RDF est une ressource, avec un nom associé. Le nom est décrit par un URI.

- -

Par exemple, une selection de champs dans la liste de marque-pages de Mozilla est décrite par les URIs ci-dessous :

- - - - - - - - - - - - - - - - - - - - - - - - -
Namehttp://home.netscape.com/NC-rdf#NameNom du marque-page
URLhttp://home.netscape.com/NC-rdf#URLURL correspondante
Descriptionhttp://home.netscape.com/NC-rdf#Descriptiondescription du marque-page
Last Visitedhttp://home.netscape.com/WEB-rdf#LastVisitDateDate de dernière visite
- -

Ils sont générés en prenant le nom de l'espace de nommage (NdT : exemple : 'http://home.netscape.com/NC-rdf') et en ajoutant le nom du champ (NdT : exemple : '#Name'). Dans la prochaine section, nous verrons comment les utiliser pour remplir les valeurs des champs automatiquement. Notez que la dernière date de visite a un espace de nommage légèrement différent des trois autres.

- -

Exemple de fichier RDF/XML

- -

Voici maintenant un exemple de fichier RDF/XML listant une table avec trois enregistrements et trois champs.

- -
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:ANIMALS="http://www.some-fictitious-zoo.com/rdf#">
-
-  <RDF:Seq about="http://www.some-fictitious-zoo.com/all-animals">
-    <RDF:li>
-       <RDF:Description about="http://www.some-fictitious-zoo.com/mammals/lion">
-         <ANIMALS:name>Lion</ANIMALS:name>
-         <ANIMALS:species>Panthera leo</ANIMALS:species>
-         <ANIMALS:class>Mammifère</ANIMALS:class>
-       </RDF:Description>
-    </RDF:li>
-    <RDF:li>
-       <RDF:Description about="http://www.some-fictitious-zoo.com/arachnids/tarantula">
-         <ANIMALS:name>Tarantule</ANIMALS:name>
-         <ANIMALS:species>Avicularia avicularia</ANIMALS:species>
-         <ANIMALS:class>Arachnide</ANIMALS:class>
-       </RDF:Description>
-    </RDF:li>
-    <RDF:li>
-       <RDF:Description about="http://www.some-fictitious-zoo.com/mammals/hippopotamus">
-         <ANIMALS:name>Hippopotame</ANIMALS:name>
-         <ANIMALS:species>Hippopotamus amphibius</ANIMALS:species>
-         <ANIMALS:class>Mammifère</ANIMALS:class>
-       </RDF:Description>
-    </RDF:li>
-  </RDF:Seq>
-</RDF:RDF>
-
- -
NdT : les spécifications du format RDF précisent qu'il faut toujours indiquer l'espace de nom RDF pour les attributs du langage RDF comme ID about, resource etc. Pour être en conformité avec ces spécifications, vous devrez toujours déclarer un alias d'espace de nom (comme 'RDF' dans l'exemple précédent : xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#") et l'utiliser pour les attributs RDF (ex : RDF:about="...").
- -

Ici, trois enregistrements ont été décrits, un pour chaque animal. Chaque balise RDF:Description décrit un seul enregistrement. À l'intérieur de chaque enregistrement, trois champs sont décrits, 'name', 'species' et 'class'. Il n'est pas nécessaire que tous les enregistrements aient les mêmes champs mais cela donne plus de sens.

- -

À chacun des trois champs a été donné un espace de nommage appelé 'ANIMALS', dont l'URL a été déclarée dans la balise RDF. Ce nom a été choisi pour sa signification dans ce cas précis, mais nous aurions pu en choisir un autre. La fonctionnalité d'espace de nommage est utile car le champ 'class' peut entrer en conflit avec celui utilisé pour les styles.

- -

Les éléments Seq et li sont utilisés pour indiquer que les enregistrements sont dans une liste. C'est la même façon dont les listes HTML sont déclarées. L'élément Seq est utilisé pour indiquer que les éléments sont ordonnés. À la place de l'élément Seq, vous pouvez aussi utiliser l'élément Bag pour indiquer des données non ordonnées, et Alt pour indiquer des données où chaque enregistrement spécifie des valeurs alternatives (telles que des URLs mirroirs).

- -

À l'intérieur d'un fichier XUL, il est fait référence aux ressources en combinant l'URL de l'espace de nommage suivit du nom du champ. Dans l'exemple ci-dessus, les URIs suivants générés peuvent être utilisés pour référer aux champs spécifiques :

- - - - - - - - - - - - - - - - -
Nomhttp://www.www.some-fictitious-zoo.com/rdf#name
Espècehttp://www.www.some-fictitious-zoo.com/rdf#species
Classehttp://www.www.some-fictitious-zoo.com/rdf#class
- -
-

Dans la suite, nous allons voir comment utiliser RDF pour peupler des éléments XUL

- -
-

« PrécédentSuivant »

-
- -

Interwiki

- -

 

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_xbl/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_xbl/index.html" deleted file mode 100644 index 7730e47a24..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/introduction_\303\240_xbl/index.html" +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Introduction à XBL -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Introduction_à_XBL -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Introduction_to_XBL ---- -

 

-
-

« PrécédentSuivant »

-
-

XUL a un langage qui lui est parent, XBL (eXtensible Bindings Language). Ce langage est utilisé pour déclarer le comportement des éléments graphiques de XUL.

-

Liaisons

-

Vous pouvez utiliser XUL pour définir la mise en page de l'interface utilisateur d'une application. Vous pouvez adapter l'apparence des éléments en leur appliquant des styles. Vous pouvez aussi créer de nouveaux thèmes en modifiant les styles. L'apparence basique de tous les éléments, comme les barres de défilement et les cases à cocher pourrait être modifiée en ajustant le style ou en déclarant des attributs à l'élément. Cependant, XUL ne fournit aucun moyen de vous permettre de changer le fonctionnement d'un élément. Par exemple, vous pourriez vouloir changer le fonctionnement des composants d'une barre de défilement. Pour cela, vous avez besoin de XBL.

-

Un fichier XBL contient un ensemble de liaisons. Chaque liaison décrit le comportement d'un élément graphique de XUL. Par exemple, une liaison pourrait être attachée à une barre de défilement. Le comportement décrit les propriétés et méthodes de la barre de défilement en plus de décrire les éléments de XUL qui la composent.

-

Comme XUL, XBL est un langage XML, ainsi il a des règles syntaxiques similaires. L'exemple suivant montre le squelette basique d'un fichier XBL :

-
<?xml version="1.0"?>
-<bindings xmlns="http://www.mozilla.org/xbl">
-  <binding id="binding1">
-    <!-- le contenu, propriétés, méthodes et descriptions d'évènements viennent ici -->
-  </binding>
-  <binding id="binding2">
-    <!-- le contenu, propriétés, méthodes et descriptions d'évènements viennent ici -->
-  </binding>
-</bindings>
-
-

L'élément bindings est l'élément racine d'un fichier XBL et contient un ou plusieurs élément binding. Chaque élément binding déclare une seule liaison. L'attribut id peut être utilisé pour identifier la liaison, comme dans l'exemple ci-dessus. Le modèle a deux liaisons, l'une appelée 'liaison1' et l'autre appelée 'liaison2'. L'une pourrait être attachée à une barre de défilement et l'autre à un menu. Une liaison peut être attachée à n'importe quel élément de XUL. Si vous utilisez des classes CSS, vous pouvez utiliser autant de liaisons que vous avez besoin. Notez l'espace de nommage de l'élément bindings dans le modèle ci-dessus. Il déclare que nous sommes en train d'utiliser une syntaxe XBL.

-

Vous assignez une liaison à un élément en déclarant la propriété CSS -moz-binding avec l'URL des fichiers de liaisons. Par exemple :

-
scrollbar {
-    -moz-binding: url('chrome://findfile/content/findfile.xml#binding1');
-}
-
-

L'URL pointe vers la liaison avec l'id 'binding1' dans le fichier 'chrome://findfile/content/findfile.xml'. La syntaxe '#binding1' est utilisée pour pointer vers une liaison spécifique, de la même façon que si vous pointiez vers une ancre dans un fichier HTML. Vous mettrez habituellement toutes vos liaisons dans un seul fichier. Le résultat dans cet exemple, est que toutes les barres de défilement auront leur comportement décrit par la liaison "binding1".

-

Une liaison déclare cinq types de choses :

-
  1. Le contenu : les éléments fils qui sont ajoutés à l'élément auquel la liaison est attachée.
  2. Les propriétés : les propriétés ajoutées à l'élément. Elles sont accessibles par un script.
  3. Les méthodes : les méthodes ajoutées à l'élément. Elles peuvent être appelées à partir d'un script.
  4. Les événements : les événements, comme les clics de souris et les appuis sur les touches auxquels l'élément répondra. La liaison peut ajouter des scripts pour fournir la manipulation par défaut. En plus de cela, de nouveaux événements peuvent être définis.
  5. Le style : adapte les propriétés de style que l'élément XBL possède.
  6. -
-

Exemple de liaison

-

L'élément box est suffisamment générique pour que vous l'utilisiez afin de créer des éléments graphiques personnalisés (bien que vous puissiez utiliser d'autres éléments, même un élément composé par vous-même). En assignant un attribut class à une balise box, vous associez une liaison aux boîtes qui possèdent cette classe. L'exemple suivant le démontre :

-
XUL (example.xul):
-
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://example/skin/example.css" type="text/css"?>
-
-<window
-     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <box class="okcancelbuttons"/>
-</window>
-
-CSS (example.css):
-
-box.okcancelbuttons {
-    -moz-binding: url('chrome://example/skin/example.xml#okcancel');
-}
-
-XBL (example.xml):
-
-<?xml version="1.0"?>
-<bindings xmlns="http://www.mozilla.org/xbl"
-         xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <binding id="okcancel">
-    <content>
-      <xul:button label="OK"/>
-      <xul:button label="Annuler"/>
-    </content>
-  </binding>
-</bindings>
-
-

Cet exemple crée une fenêtre avec une seule boîte. La boîte a été déclarée pour avoir un attribut class de valeur 'okcancelbuttons'. La feuille de styles associée au fichier indique que les boîtes avec les classes 'okcancelbuttons' ont une liaison spécialisée, définie dans le fichier XBL. Vous pouvez employer d'autres éléments derrière l'élément box, même pour votre propre balise adaptée.

-

Nous verrons plus de détails concernant la partie XBL dans la section suivante. Cependant, pour récapituler, cet exemple entraîne l'ajout automatique de deux boutons dans la boîte, un bouton 'Ok' et un autre 'Annuler'.

-
-

Dans la prochaine section, nous verrons comment créer un contenu avec XBL.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/l'url_chrome/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/l'url_chrome/index.html deleted file mode 100644 index 603447d0d8..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/l'url_chrome/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: L'URL Chrome -slug: Archive/Mozilla/XUL/Tutoriel_XUL/L'URL_Chrome -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/The_Chrome_URL ---- -
-

« PrécédentSuivant »

-
-

Cette section décrit comment faire référence à des documents XUL et d'autres fichiers chrome.

-

L'URL Chrome

-

Les fichiers XUL peuvent être référencés par une URL HTTP habituelle tout comme les fichiers HTML (ou tout autre type d'URL). En revanche, les paquetages qui sont installés sur le système chrome de Mozilla doivent être référencés avec des URLs spéciales appelées « chrome ». Les paquetages livrés avec Mozilla seront déjà installés mais vous pouvez déclarer les votres.

-

Les paquetages installés ont l'avantage de ne pas avoir de restrictions de sécurité, ce qui est nécessaire pour de nombreuses applications. Un autre avantage comparé aux autres types d'URLs est qu'ils manipulent automatiquement les thèmes graphiques (NdT : skins) et les localisations (NdT : locales). Par exemple, une URL chrome vous permet d'adresser un fichier dans le thème, comme une image, sans avoir besoin de connaître le thème utilisé par l'utilisateur. Tant que les noms de fichiers sont identiques dans chaque thème, vous pouvez vous y faire référence via une URL chrome. Mozilla déterminera où le fichier est situé et renverra la bonne donnée. Cela signifie aussi que l'emplacement où le paquetage est installé n'est pas important pour être capable d'y accéder. Les URLs chrome sont indépendantes du lieu où les fichiers sont stockés physiquement. Il est donc simple d'écrire des applications contenant beaucoup de fichiers sans vous soucier des détails concernant leurs chemins d'accès.

-

La syntaxe de base d'une URL chrome est la suivante :

-
chrome://<paquetage>/<partie>/<fichier.xul>
-
-

Le texte <paquetage> est le nom du paquetage, tel que messenger ou editor. Le texte <partie> vaut soit 'content', soit 'skin', soit 'locale', selon la partie que vous voulez. <fichier.xul> est simplement le nom du fichier.

-

Exemple : chrome://messenger/content/messenger.xul

-

Ici, l'exemple se réfère à la fenêtre de messagerie. Vous pouvez pointer vers un fichier qui fait partie d'un thème en remplaçant 'content' par 'skin' et en changeant le nom du fichier. De même, vous pouvez pointer vers un fichier qui fait partie de la localisation en utilisant 'locale' au lieu de 'content'.

-

Quand vous ouvrez une URL chrome, Mozilla consulte sa liste de paquetages installés et essaie de trouver le fichier JAR qui correspond au nom et à la partie recherchés. Le lien entre des URLs et des fichiers JAR est précisé dans les fichiers manifest situés dans le répertoire chrome. Si vous déplaciez le fichier messenger.jar autre part et que vous modifiez le fichier manifest en conséquence, Thunderbird fonctionnerait encore puisque ce fichier n'est pas dépendant de l'emplacement de son installation. En utilisant des URLs chrome, ce genre de détails est secondaire pour Mozilla. De même, si les utilisateurs changent leur thème graphique, la partie 'skin' de l'URL chrome va pointer vers une autre série de fichiers sans que le XUL et les scripts en soient affectés.

-

Voici quelques exemples. Notez qu'aucunes URLs ne précisent un thème, une langue ou bien des répertoires spécifiques.

-
chrome://messenger/content/messenger.xul
-chrome://messenger/content/attach.js
-chrome://messenger/skin/icons/images/folder-inbox.gif
-chrome://messenger/locale/messenger.dtd
-
-

Pour des sous-répertoires, vous pouvez simplement les ajouter à la fin des URLs chrome. Les URLs suivantes font référence à la fenêtre des marque-pages, aussi bien pour la suite Mozilla que pour Firefox, puisque les noms des paquetages sont différents :

-
chrome://communicator/content/bookma...rksManager.xul (Mozilla)
-chrome://browser/content/bookmarks/b...rksManager.xul (Firefox)
-
-

Vous pouvez entrer des URLs chrome partout où des URLs normales peuvent être utilisées. Vous pouvez même les entrer directement dans la barre d'adresse d'une fenêtre du navigateur Mozilla. Si vous entrez une des URLs mentionnées ci-dessus dans la barre d'adresse du navigateur, vous devriez voir cette fenêtre apparaître comme une page Web le ferait et, dans la plupart des cas, elle sera fonctionnelle comme si elle était dans une fenêtre séparée. Cependant, quelques boîtes de dialogue pourraient ne pas bien fonctionner, si elles nécessitent des arguments fournis par la fenêtre qui les a ouvertes.

-

Vous pourriez voir également des URLs chrome sans noms de fichiers spécifiés, tel que :

-
chrome://navigator/content/
-
-

Dans le cas présent, seul le nom du paquetage et la partie sont spécifiés. Ce type de référence sélectionnera automatiquement un fichier approprié depuis le bon répertoire. Pour le contenu, un fichier avec le même nom que le paquetage et une extension xul sont choisis. Dans l'exemple ci-dessus, le fichier browser.xul est choisi. Pour messenger, messenger.xul serait sélectionné. Lorsque vous créez vos propres applications, vous devriez créer un fichier pour votre fenêtre principale avec le même nom que votre paquetage. Ainsi, elle pourra être appelée en utilisant cette syntaxe plus courte. C'est commode car alors, tout ce qu'a besoin de connaître un utilisateur pour pouvoir ouvrir l'application, c'est le nom du paquetage. Bien sûr, pour les extensions qui modifient l'interface du navigateur, l'utilisateur n'aura pas besoin de connaître l'URL car l'extension sera présente elle-même dans l'interface utilisateur.

-

Pour un thème, le fichier <paquetage>.css est choisi ; pour une localisation, le fichier <paquetage>.dtd est choisi.

-

Souvenez-vous, l'URL chrome n'est pas dépendante à un emplacement sur le disque. Les deux premières pièces sont le nom du paquetage et la partie ('content', 'skin', ou 'locale'). Bien qu'il soit courant de mettre les fichiers de contenu dans un répertoire appelé 'content', c'est une simple convention, et ces fichiers peuvent être placés dans une structure totalement différente.

-
-

Dans la section suivante, nous verrons comment créer des fichiers .manifest et des paquetages.

-
-

« PrécédentSuivant »

-
diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/la_structure_xul/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/la_structure_xul/index.html deleted file mode 100644 index 30da6fedbc..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/la_structure_xul/index.html +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: La structure XUL -slug: Archive/Mozilla/XUL/Tutoriel_XUL/La_structure_XUL -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/XUL_Structure ---- -
-

« PrécédentSuivant »

-
- -

Nous commencerons par regarder comment le système de fichiers de XUL est organisé sous Mozilla.

- -

Comment XUL est géré

- -

Dans Mozilla, XUL est géré pratiquement de la même manière que du HTML ou d'autres types de contenu. Lorsque vous entrez l'URL d'une page HTML dans le champs de saisie d'adresse du navigateur, ce dernier localise le site Web et télécharge le contenu. Le moteur d'affichage de Mozilla traite le contenu du code source HTML, et le transforme en un arbre de document. L'arbre est alors converti en un ensemble d'objets qui peuvent être affichés sur l'écran. Des styles CSS, des images et d'autres technologies sont utilisés pour contrôler la présentation. XUL fonctionne de la même manière.

- -

En fait, sous Mozilla, tous les types de documents, qu'il soit HTML ou XUL, ou même SVG, sont tous traités par le même code sous-jacent. Cela signifie que les mêmes propriétés CSS peuvent être utilisées pour styler à la fois du XUL et du HTML, et beaucoup de spécificités peuvent être partagées entre les deux. Cependant, quelques fonctionnalités restent spécifiques au HTML, comme les formulaires, et d'autres restent spécifiques au XUL, comme les overlays. Puisque les fichiers XUL et HTML sont traités de la même manière, vous pouvez les charger à partir du système de fichiers local, d'une page Web, d'une extension, ou d'une application autonome XULRunner.

- -

Les contenus provenant de sources distantes, comme par exemple http://localhost/~username/, qu'ils soient en HTML, XUL ou tout autre type de document, sont limités dans les opérations qu'ils peuvent réaliser pour des raisons de sécurité. C'est pour cela que Mozilla fournit une méthode pour installer localement du contenu et de l'enregistrer dans son système chrome. Une adresse URL spéciale chrome:// est alors employée. Les fichiers ouverts depuis une adresse chrome reçoivent des privilèges plus élevés pour accéder aux fichiers locaux, ils peuvent accéder aux préférences et aux marque-pages, et réaliser d'autres opérations nécessitant certains privilèges. Bien entendu, les pages Web ne disposent pas de ces privilèges, à moins qu'ells soient signées avec un certificat numérique et que l'utilisateur ait obtenu un accès pour cela.

- -

La déclaration de paquetage chrome est la méthode par laquelle les extensions de Firefox ajoutent des fonctionnalités au navigateur. Les extensions sont de petits paquetages de fichiers XUL, Javascript, feuilles de styles et images, rassemblés en un seul fichier. Ce fichier peut être créé en utilisant un outil ZIP. Quand l'utilisateur le télécharge, il est installé sur sa machine. Il sera intégré dans le navigateur en utilisant une fonctionnalité spécifique appelée overlay, qui permet au XUL de l'extension et au XUL du navigateur de se combiner ensemble. Pour l'utilisateur, c'est comme si l'extension avait modifié le navigateur, mais en réalité, le code est séparé et l'extension peut être désinstallée facilement.

- -

Les paquetages déclarés ne sont pas nécessaires pour utiliser les overlays, bien sûr. Si ils ne le sont pas, vous ne pourrez pas y accéder via l'interface principale du navigateur, mais vous pourrez toujours y accéder depuis une URL chrome, si vous la connaissez.

- -

Des applications XUL autonomes peuvent également employer du code XUL inclus de façon similaire, mais il fera partie intégrante de l'application plutôt que de devoir être installé séparément comme une extension. Cependant, ce code XUL devra être déclaré dans le système chrome pour pouvoir s'afficher dans l'interface utilisateur de l'application.

- -

Il faut savoir que le navigateur Mozilla lui même regroupe en réalité toute une série de paquetages contenant des fichiers XUL, du JavaScript et des feuilles de styles. Ces fichiers sont ouverts depuis une URL chrome et ils ont des privilèges accrus et fonctionnent comme dans tous autres paquetages. Bien sûr, le navigateur est bien plus conséquent et plus sophistiqué que la plupart des extensions. Firefox et Thunderbird contiennent de nombreux composants qui sont tous écris en XUL et qui sont tous acceesibles via des URLs chrome. Vous pouvez examiner ces paquetages en parcourant le sous répertoire chrome où Firefox ou une application XUL a été installé.

- -

L'URL chrome commence toujours par 'chrome://'. De la même manière que les URLs 'http://' réfèrent toujours aux sites Web distants, et que les URL 'file://' réfèrent toujours aux fichiers locaux, les URL 'chrome://' réfèrent toujours aux paquetages installés et aux extensions. Nous en verrons plus sur la syntaxe des URL chrome dans la prochaine section. Il est important de noter que lorsque l'on accède à du contenu depuis une URL chrome, il obtient les privilèges avancés tel que décrit plus haut contrairement aux autres types d'URL. Par exemple, une URL HTTP n'a pas de privilèges particuliers et une erreur apparaîtrait si une page Web essaie, par exemple, de lire un fichier local, alors qu'un fichier chargé depuis une URL chrome pourra lire des fichiers sans restrictions.

- -

Cette distinction est importante. Elle signifie qu'il y a certaines choses que le contenu des pages Web ne peut pas faire, comme lire les marque-pages de l'utilisateur. Cette distinction n'est pas basée sur le type du contenu affiché ; seul le type de l'URL est important. HTML et XUL placés sur un site Web n'ont pas de permissions supplémentaires. Mais HTML et XUL chargés avec une URL chrome obtiennent des permissions avancées.

- -

Si vous désirez utiliser XUL sur un site Web, il vous suffit de mettre les fichiers XUL sur le site Web comme vous le feriez avec un fichier HTML, et indiquer leurs URLs dans un navigateur (http://localhost/xul.php). Assurez vous que votre serveur Web est configuré pour transmettre les fichiers XUL avec le type mime application/vnd.mozilla.xul+xml (par ex en PHP header('content-type: application/vnd.mozilla.xul+xml');). Ce type mime permet à Mozilla de faire la différence entre HTML et XUL. Mozilla ne tient pas compte de l'extension du fichier sauf pour lire les fichiers locaux, mais vous devriez utiliser l'extension .xul pour tous les fichiers XUL. Vous pouvez ouvrir les fichiers XUL sur votre propre machine en les ouvrant dans le navigateur, ou en double cliquant sur le fichier dans votre gestionnaire de fichiers.

- -
Souvenez vous que les fichiers XUL distants ont des restrictions significatives sur ce qu'ils peuvent faire.
- -

Type de documents : HTML XML XUL CSS

- -

Tandis que la plupart des fonctionnalités sont partagées entre HTML et XUL, Mozilla utilise différents types de document pour chacun d'eux. Il y a trois principaux types de document dans Mozilla : HTML, XML et XUL. Bien entendu, le type HTML est utilisé pour les documents HTML, le type XUL est utilisé pour les documents XUL, et le type XML est utilisé pour les autres documents en XML. Puisque XUL est aussi du XML, il correspond à un sous-type du type générique XML. Il y a de subtiles différences dans les fonctionnalités. Par exemple, alors que les contrôles de formulaire dans les pages HTML sont accessibles via la propriété document.forms, cette propriété n'est pas disponible pour les documents XUL puisque XUL n'a pas de formulaire dans le sens HTML du terme. D'un autre coté, les fonctionnalités spécifiques de XUL comme les overlays ou les gabarits ne sont utilisables que dans les documents XUL.

- -

La distinction entre les documents est importante. Certaines fonctionnalités XUL sont utilisables dans des documents HTML ou XML si elles ne sont pas spécifiques au type de document  mais d'autres seront liées au type du document. Par exemple, vous pourrez vous servir des types de mise en page XUL dans d'autres documents car ils ne reposent pas sur le type de document pour fonctionner.

- -

Pour résumer les points précédents :

- - - -

Les prochaines sections décrivent la structure de base d'un paquetage chrome qui peut être installé dans Mozilla. Cependant, si vous voulez seulement démarrer la création d'une simple application, rendez vous directement sur la page Créer une fenêtre et revenez sur cette section plus tard.

- -

Organisation d'un paquetage

- -

Mozilla est conçu de telle manière que vous pouvez pré-installer autant de composants que vous le souhaitez. Chaque extension est également un composant muni d'une adresse chrome différente. Il y a également un composant par thèmes graphiques ou langues. Chacun de ces composants, ou paquetages, est constitué d'un ensemble de fichiers décrivant l'interface utilisateur. Par exemple, le composant de messagerie décrit la fenêtre listant les messages des courriers, la fenêtre de rédaction et les boîtes de dialogues du carnet d'adresses.

- -

Les paquetages inclus dans Mozilla sont situés dans le répertoire chrome situé dans le répertoire d'installation de Mozilla. Ce répertoire chrome est l'endroit où sont situés tous les fichiers qui décrivent l'interface utilisateur employée par Mozilla, tels que le client de messagerie et d'autres applications. Typiquement pour une application, vous placerez vos fichiers XUL dans ce répertoire, sauf pour les extensions où les fichiers sont placés dans le répertoire extensions du profil utilisateur. La simple copie d'un fichier XUL dans le répertoire 'chrome' ne lui donne pas de droits supplémentaires et ne le rend pas accessible depuis une URL chrome. Pour que des droits supplémentaires lui soit attribués, vous devrez créer un fichier manifest et le placez dans le répertoire chrome. Ce fichier est facile à créer car il n'est composé que de quelques lignes. Il sert orienter une URL chrome vers l'emplacement d'un fichier ou d'un répertoire sur le disque où les fichiers XUL sont situés. Vous trouverez plus de détails sur la manière de créer ce fichier dans une prochaine section.

- -

La seule manière pour du contenu d'être accessible depuis une URL chrome est de créer un paquetage comme décrit dans les prochaines sections. Ce répertoire est nommé 'chrome' en référence aux répertoires où sont placés les paquetages chrome de Mozilla.

- -

Pour augmenter la confusion, il y a deux autres endroits où le mot "chrome" peut apparaître. Il y a l'argument en ligne de commande -chrome et le modificateur "chrome" de la fonction window.open(). L'appel à l'une de ces deux fonctionnalités n'autorise pas plus de privilèges. Elles sont plutôt utilisées pour ouvrir une nouvelle fenêtre principale sans l'interface utilisateur du navigateur comme les menus ou la barre d'outils. Vous utiliserez en général ces caractéristiques dans des applications XUL plus complexes lorsque vous ne voulez pas de fenêtre de navigation autour de vos boîtes de dialogue.

- -

Les fichiers d'un paquetage sont généralement combinés dans un simple fichier JAR. Un fichier JAR peut être créé et examiné en utilisant un utilitaire ZIP. Par exemple, ouvrez quelques uns des fichiers JAR du répertoire chrome de Mozilla pour voir la structure de leurs paquetages. Bien qu'il soit normal de combiner les fichiers dans un fichier JAR, les paquetages peuvent également être accessibles dans une forme décompressée à l'intérieur d'un ensemble de répertoire. Généralement, vous ne distribuerez pas un paquetage de cette façon, mais c'est une méthode pratique pendant le développement puisque vous pouvez éditer les fichiers du répertoire et ensuite les recharger sans avoir à ré-empaqueter ou réinstaller l'ensemble.

- -

Par défaut, les applications Mozilla analysent les fichiers XUL et les scripts, et mémorisent une version pré-compilée dans une session de l'application afin d'améliorer les performances. De ce fait, les fichiers XUL ne seront pas rechargés même si les fichiers sources ont été modifiés. Pour modifier ce mécanisme, il est nécessaire de modifier la préférence nglayout.debug.disable_xul_cache. Dans Firefox, cette préférence doit être ajoutée et définie à 'true' dans les préférences de l'utilisateur en tapant "about:config" dans la barre d'adresse. Vous pouvez aussi éditer manuellement le fichier des préférences user.js et y ajouter la ligne suivante :

- -
pref("nglayout.debug.disable_xul_cache", true);
-
- -

Il y a habituellement trois parties différentes dans un paquetage chrome, bien qu'elles soient facultatives. Chaque partie est enregistrée dans un répertoire différent. Ces trois ensembles décris en dessous sont le contenu, le thème graphique et la localisation. Un paquetage particulier pourrait fournir un ou plusieurs thèmes et localisations, mais un utilisateur peut les remplacer par les siens. De plus, un paquetage peut inclure plusieurs applications différentes, chacune accessible via des URLs chrome différentes. Le système de paquetage est suffisamment souple pour n'inclure que les parties dont vous avez besoin, et permettre le téléchargement séparé d'autres parties, comme le texte pour les différentes langues.

- -

Les trois types de paquetages chrome sont :

- -

 

- -
-
Content - Fenêtres et scripts
-
Contient les déclarations des fenêtres et des éléments d'interface utilisateur. Ceux-ci sont stockés dans les fichiers XUL, qui ont l'extension xul. Il peut y avoir plusieurs fichiers XUL, mais la fenêtre principale devrait toujours avoir un nom de fichier identique au nom du paquetage. Par exemple, le paquetage editor contiendra un fichier appelé editor.xul. Les scripts (NdT : javascript) sont placés dans des fichiers séparés à côté des fichiers XUL.
-
Skin - feuilles de style, images et autres fichiers de thèmes
-
Les feuilles de style décrivent des détails de l'aspect d'une fenêtre. Elles sont stockées séparément des fichiers XUL pour faciliter la modification du thème d'une application. Toutes les images utilisées sont également stockées ici.
-
Locale - fichiers spécifiques de langues
-
Tous les textes qui sont affichés dans une fenêtre sont stockés séparément. De cette façon, un utilisateur peut avoir une configuration pour sa propre langue.
-
- -

Paquetages de contenu

- -

Le nom du fichier JAR devrait décrire ce qu'il contient, mais vous pouvez vous en assurer en regardant son contenu. Examinons par exemple le paquetage du navigateur inclus avec Firefox. Si vous décompressez les fichiers de browser.jar, vous verrez qu'ils forment une structure de répertoire ressemblant à :

- -
content
-   browser
-      browser.xul
-      browser.js
-      --d'autres fichiers XUL et JS ici--
-      bookmarks
-         --les fichiers pour les marque-pages ici--
-      preferences
-         --les fichiers pour les préférences ici--
-.
-.
-.
- -

On peut facilement identifier cela comme le contenu d'un paquetage, car le dossier supérieur s'appelle content. Pour les thèmes, le dossier aurait été appelé skin et pour les localisations, il aurait été appelé locale. En fait, ce n'est pas une obligation mais vous devriez suivre cette convention pour rendre votre paquetage plus clair. Certains paquetages peuvent inclure une section content, skin et locale. Dans ces paquetages, vous trouverez un sous-répertoire pour chaque section. Par exemple, Chatzilla est distribué de cette manière.

- -

Le dossier content/browser contient un certain nombre de fichiers avec les extensions .xul et .js. Les fichiers XUL sont ceux qui ont une extension .xul. Les fichiers avec l'extension .js sont des fichiers de JavaScript contenant les scripts qui gèrent les fonctionnalités d'une fenêtre. Beaucoup de fichiers XUL ont un ou plusieurs fichiers de script qui leur est associé.

- -

Dans la liste ci-dessus, deux fichiers ont été montrés. Il y en a évidemment d'autres, mais qui n'apparaissent pas pour des raisons de simplicité. Le fichier browser.xul est le fichier XUL qui décrit la fenêtre principale du navigateur. La fenêtre principale du contenu d'un paquetage devrait toujours porter le même nom que le nom du paquetage, avec une extension .xul. Dans ce cas, le paquetage étant nommé 'browser', le fichier sera browser.xul. D'autres fichiers XUL vont décrire des fenêtres différentes, comme par exemple le fichier pageInfo.xul qui décrit la boîte de dialogue 'Information sur la page'.

- -

Tous les paquetages contiennent un fichier contents.rdf qui décrit le paquetage, son auteur et les overlays qu'il utilise. Ce fichier est cependant devenu obsolète et a été remplacé par une mécanisme plus simple. Cette nouvelle méthode est le fichier manifest mentionné précédemment, et vous trouverez ce fichier dans le répertoire chrome avec une extension .manifest. Par exemple, browser.manifest décrit le paquetage browser.

- -

Plusieurs sous-répertoires, tels que bookmarks et preferences, décrivent des sections complémentaires au composant du navigateur. Ils sont placés dans des répertoires différents pour une meilleure organisation des fichiers.

- -

Styles et thèmes graphiques

- -

Bien que le code sous-jacent de Mozilla les appelle skins et que l'interface utilisateur les appelle thèmes, ils désignent la même chose. Le fichier classic.jar décrit le thème graphique inclus par défaut avec Firefox. La structure est semblable aux paquetages de contenu. Examinons par exemple le fichier classic.jar :

- -
skin
-   classic
-      browser
-         browser.css
-         -- les autres fichiers thèmes du navigateur sont ici --
-      global
-         -- les fichiers thèmes globaux sont ici --
-.
-.
-.
- -

Ici encore, le respect de cette structure de répertoires n'est pas nécessaire, mais elle est conventionnelle. En réalité, vous pouvez mettre les fichiers dans un seul répertoire de niveau supérieur sans aucun sous-répertoire. Cependant, pour des applications plus importantes, des sous-répertoires servent à séparer les différents composants. Dans l'exemple précédent, un répertoire est dédié aux fichiers du thème graphique du navigateur et un autre pour les fichiers du thème global. Le répertoire global contient les fichiers de styles applicables à tous les paquetages. Ces fichiers s'appliquent à tous les composants et seront inclus à toutes vos applications autonomes. La partie globale définit l'apparence de tous les éléments graphiques communs, tandis que les autres répertoires contiennent les fichiers propres à ces applications. Firefox inclut à la fois les fichiers du thème graphique global et du navigateur dans une seule archive, mais ils pourraient être inclus séparément.

- -

Un thème se compose de fichiers CSS et d'un certain nombre d'images utilisés pour définir l'aspect d'une interface. Le fichier browser.css est utilisé par browser.xul et contient les styles pour définir l'apparence des différences parties de l'interface du navigateur. À nouveau, notez le nom du fichier browser.css, qui a le même nom que le paquetage. En changeant de fichier CSS, vous pouvez modifier l'apparence d'une fenêtre sans changer son fonctionnement. C'est ainsi que vous pouvez créer un nouveau thème. La partie XUL est toujours la même, mais la partie contenant le thème peut varier indépendamment.

- -

Localisation

- -

Le fichier en-US.jar décrit l'information de langage pour chaque composant, dans le cas présent pour l'anglais des États-Unis. Comme pour les thèmes, chaque fichier de langue contient les fichiers qui indiquent le texte utilisé par le paquetage pour une langue spécifique. La structure de 'locale' étant similaire aux autres, elle ne sera pas listée ici.

- -

Le texte localisé est stocké dans deux types de fichiers, des fichiers DTD et des fichiers de propriétés. Les fichiers DTD ont une extension .dtd et contiennent les déclarations d'entités, une pour chaque chaîne de caractères qui est utilisée dans une fenêtre. Par exemple, le fichier browser.dtd contient des déclarations d'entités pour chaque commande du menu. En outre, des raccourcis clavier pour chaque commandes sont également définis, parce qu'ils peuvent être différents selon la langue. Les fichiers DTD sont utilisés par des fichiers XUL, et donc en général, vous en aurez un par fichier XUL. La partie 'locale' contient également des fichiers de propriétés qui sont similaires, mais qui sont utilisés par les fichiers de script. Le fichier browser.properties contient quelques chaînes de caractères de ce type.

- -

Cette structure vous permet de traduire Mozilla ou un composant dans une langue différente en ajoutant juste une nouvelle partie 'locale' pour cette langue. Vous n'avez pas à modifier le code XUL. De plus, d'autres personnes peuvent fournir des paquetages séparés qui appliquent des thèmes ou des localisations à votre partie contenu, apportant ainsi un nouveau thème ou une nouvelle langue sans avoir à modifier le paquetage original.

- -

Autres paquetages

- -

Il existe un paquetage spécial appelé toolkit (ou global). Nous avions déjà vu le répertoire global pour des thèmes. Le fichier toolkit.jar contient la partie du contenu lui correspondant. Il contient quelques boîtes de dialogues et définitions globales. Il définit également l'aspect par défaut et les fonctionnalités des divers éléments graphiques tels que des champs de saisie et des boutons. Les fichiers situés dans la partie globale de l'archive du thème contiennent l'apparence par défaut de tous les éléments XUL d'interface. Le paquetage toolkit est utilisé par toutes les applications XUL.

- -

Ajouter un paquetage

- -

Mozilla place dans le répertoire chrome les paquetages qui sont inclus avec l'installation, mais il n'y a pas d'obligation à cela. Lors de l'installation d'un autre paquetage, vous pouvez le placer n'importe où sur le disque dès lors que son fichier manifest pointe vers lui. Il est commun d'installer les nouveaux paquetages dans le répertoire chrome simplement par convenance. Cependant ils fonctionneront aussi bien à partir d'un autre répertoire, ou de quelque part sur votre réseau local. Vous ne pouvez pas les placer sur un site distant, à moins que le site distant soit monté sur le système de fichiers local.

- -

Il y a deux répertoires chrome utilisés par les applications XUL : l'un est au même emplacement que l'application, l'autre fait partie du profil utilisateur. Le premier permet aux paquetages d'être partagés à tous les utilisateurs tandis que le second permet un accès aux paquetages à un utilisateur spécifique. Les extensions qui sont installées dans un répertoire extension séparé ne sont également accessibles qu'à un utilisateur spécifique. Chaque fichiers manifest situés dans l'un ou l'autre des répertoires chrome seront examinés pour voir quels paquetages sont installés.

- -
-

Dans la prochaine section, nous regarderons comment se référer aux paquetages en utilisant les URL chrome.

- -
-

« PrécédentSuivant »

-
diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/le_mod\303\250le_de_bo\303\256te/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/le_mod\303\250le_de_bo\303\256te/index.html" deleted file mode 100644 index 0075e90f94..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/le_mod\303\250le_de_bo\303\256te/index.html" +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: Le modèle de boîte -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Le_modèle_de_boîte -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/The_Box_Model ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous allons voir comment XUL gère la mise en page.

- -

Introduction aux boîtes

- -

La forme principale de mise en page dans XUL s'appelle le « Modèle de Boîte ». Ce modèle vous permet de diviser une fenêtre en une série de boîtes. Les éléments à l'intérieur d'une boîte se placeront horizontalement ou verticalement. En combinant une série de boîtes, d'éléments spacer et d'éléments avec des attributs flex, vous pouvez contrôler la mise en page d'une fenêtre.

- -

Bien qu'une boîte soit la partie fondamentale de la disposition d'éléments dans XUL, elle suit quelques règles très simples. Une boîte peut présenter ses enfants dans une des deux orientations, soit horizontalement, soit verticalement. Une boîte horizontale aligne ses éléments horizontalement et une boîte verticale place ses éléments verticalement. Vous pouvez vous représenter une boîte comme étant une rangée ou une colonne d'un tableau HTML. Divers attributs placés sur les éléments enfants, en plus de certaines propriétés de style CSS, contrôlent la position et la taille exactes des enfants.

- -

Éléments de boîte

- -

La syntaxe de base d'une boîte est la suivante :

- -
<hbox>
-   <!-- éléments horizontaux -->
-</hbox>
-
-<vbox>
-   <!-- éléments verticaux -->
-</vbox>
-
- -

L'élément hbox est utilisé pour créer une boîte orientée horizontalement. Chaque élément placé dans la hbox sera placé horizontalement sur une rangée. L'élément vbox est utilisé pour créer une boîte orientée verticalement. Les éléments ajoutés seront placés les uns en dessous des autres en colonne.

- -

Il existe également un élément box générique qui s'oriente horizontalement par défaut, ce qui veut dire qu'il est similaire à l'élément hbox. Cependant, vous pouvez utiliser l'attribut orient pour contrôler l'orientation dans la boîte. Vous pouvez positionner cet attribut à la valeur 'horizontal' pour créer une boîte horizontale et à la valeur 'vertical' pour créer une boîte verticale.

- -

Ainsi, les deux lignes ci-dessous sont équivalentes :

- -
<vbox></vbox>
-
-<box orient="vertical"></box>
-
- -

L'exemple suivant montre comment placer trois boutons verticalement.

- -

Exemple 1 : Source Voir

- -
Image:xultu_boxes-ex1.png
- -
<vbox>
-   <button id="yes" label="Oui"/>
-   <button id="no" label="Non"/>
-   <button id="maybe" label="Peut-être"/>
-</vbox>
-
- -

Ces trois boutons sont orientés verticalement comme le spécifie la boîte. Pour faire en sorte que les boutons soient orientés horizontalement, tout ce que vous avez à faire est de remplacer l'élément vbox par l'élément hbox.

- -

Exemple d'invite de login

- -

Vous pouvez ajouter autant d'éléments que vous le souhaitez à l'intérieur de la boîte, y compris d'autres boîtes. Dans le cas d'une boîte horizontale, chaque élément additionnel sera placé à la droite du précédent. Les éléments ne se chevauchent pas, donc plus vous ajoutez d'éléments, plus large est la fenêtre. De même, chaque élément ajouté dans une boîte verticale sera placé sous le précédent. L'exemple ci-dessous montre une simple demande de login :

- -

Exemple 2 : Source Voir

- -
Image:xultu_boxes-ex2.png
- -
<vbox>
-   <hbox>
-     <label control="login" value="Login :"/>
-     <textbox id="login"/>
-   </hbox>
-   <hbox>
-     <label control="pass" value="Mot de passe :"/>
-     <textbox id="pass"/>
-   </hbox>
-   <button id="ok" label="OK"/>
-   <button id="cancel" label="Annuler"/>
-</vbox>
-
- -

Ici quatre éléments ont été orientés verticalement, deux balises hbox internes et deux éléments button. Notez que seuls les éléments qui sont des descendants directs de la boîte sont orientés verticalement. Les libellés et les boîtes de texte sont à l'intérieur d'éléments hbox, donc ils sont orientés suivant ces boîtes, lesquelles sont horizontales. Vous pouvez voir sur l'image que chaque libellé et leur champ de saisie est orienté horizontalement.

- -

Alignement des champs de saisie

- -

Si vous regardez attentivement l'image de la boîte de dialogue de login, vous verrez que les deux champs de saisie ne sont pas alignés horizontalement. Ce serait certainement mieux s'ils l'étaient. Pour y parvenir, nous devons ajouter quelques boîtes supplémentaires.

- -

Exemple 3 : Source Voir

- -
Image:xultu_boxes-ex3.png
- -
<vbox>
-   <hbox>
-     <vbox>
-       <label control="login" value="Login :"/>
-       <label control="pass" value="Mot de passe :"/>
-     </vbox>
-     <vbox>
-       <textbox id="login"/>
-       <textbox id="pass"/>
-     </vbox>
-   </hbox>
-   <button id="ok" label="OK"/>
-   <button id="cancel" label="Annuler"/>
-</vbox>
-
- -

Notez que les champs de saisie sont maintenant alignés l'un avec l'autre. Pour cela, il nous a fallu ajouter des boîtes à l'intérieur de la boîte principale. Les deux libellés et les champs de saisie sont placés à l'intérieur d'une boîte horizontale. Ensuite, les libellés sont placés à l'intérieur d'une autre boîte, une verticale cette fois, de même que les champs de saisie. C'est cette boîte interne qui oriente verticalement les éléments. La boîte horizontale est nécessaire puisque nous voulons que la vbox des libellés et que la vbox des champs de saisie soient placées l'une à côté de l'autre. Si cette boîte était enlevée, les champs de saisie apparaîtraient sous les libellés.

- -

L'ennui est que le libellé « Mot de passe » est désormais trop haut. Il nous faudra utiliser l'élément grid pour résoudre ce phénomène, ce que nous verrons dans une prochaine section.

- -
-

Des boîtes dans la boîte de dialogue de recherche de fichiers

- -

Ajoutons quelques boîtes à la boîte de dialogue de recherche de fichiers. Une boîte verticale sera ajoutée autour de tous les éléments, et une boîte horizontale sera ajoutée autour du champ de saisie et des boutons. Le résultat sera que les boutons apparaîtront sous le champ de saisie.

- -

Source Voir

- -
<vbox flex="1">    <description>     Entrez votre critère de recherche ci-dessous et sélectionnez le bouton      Rechercher pour démarrer la recherche.   </description>      <hbox>
-    <label value="Rechercher :" control="find-text"/>
-    <textbox id="find-text"/>
-  </hbox>    <hbox>     <spacer flex="1"/>
-
-    <button id="find-button" label="Rechercher"/>
-    <button id="cancel-button" label="Annuler"/>
-  </hbox> </vbox>
-
- -
Image:xultu_boxes1.png
- -

La boîte verticale entraîne l'orientation verticale du texte principal, de la boîte contenant le champ de saisie ainsi que de la boîte avec les deux boutons. Les boîtes internes orientent leurs éléments horizontalement. Comme vous pouvez le voir sur l'image, le libellé et le champ de saisie de texte sont placés côte à côte. L'élément spacer et les deux boutons sont aussi placés horizontalement dans leur boîte.

- -
Notez que l'élément spacer, parce qu'il est flexible, force les boutons à apparaître sur le côté droit.
-
- -
-

Dans la prochaîne section, nous verrons comment spécifier les tailles des éléments individuellement et comment contraindre leurs tailles.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_bo\303\256tes_de_groupe/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/les_bo\303\256tes_de_groupe/index.html" deleted file mode 100644 index bba6701791..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_bo\303\256tes_de_groupe/index.html" +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Les boîtes de groupe -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_boîtes_de_groupe -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Groupboxes ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Cette section décrit la façon d'inclure des éléments dans des groupes.

- -

Les boîtes de groupes

- -

HTML fournit un élément, fieldset, qui peut être utilisé pour regrouper plusieurs éléments. Une bordure est affichée autour des éléments pour montrer qu'ils sont en relation. Un exemple pourrait être un groupe de cases à cocher. XUL fournit un élément équivalent, groupbox, qui peut être utilisé pour un usage similaire.

- -

Comme son nom l'indique, groupbox est un type de boîte. Ce qui signifie que les éléments à l'intérieur sont alignés selon l'application des règles des boîtes. Il y a deux différences entre les boîtes de groupes et les boîtes normales :

- - - -

Puisque les boîtes de groupe sont des types de boîtes, vous pouvez utiliser les mêmes attributs tels que orient et flex. Vous pouvez mettre tous les éléments que vous voulez à l'intérieur de la boîte, mais il devra typiquement y avoir un rapport entre eux.

- -

Le libellé en haut de la boîte de groupe peut être créé en utilisant l'élément caption. Il fonctionne comme l'élément HTML legend. Un simple élément caption placé en tant que première balise fille est suffisant.

- -

Un simple exemple groupbox

- -

L'exemple ci-dessous montre un groupbox simple :

- -

Exemple 1: Source Voir

- -
Image:xultu_titledbox1.png
- -
<groupbox>
-   <caption label="Réponse"/>
-   <description value="Banane"/>
-   <description value="Mandarine"/>
-   <description value="Cabine téléphonique"/>
-   <description value="Kiwi"/>
-</groupbox>
-
- -

Cet exemple affiche quatre bouts de texte entourés par la boîte avec le libellé Réponse. Notez que la boîte de groupe a une orientation verticale par défaut nécessaire pour avoir les éléments texte empilés en une seule colonne.

- -

Légendes plus complexes

- -

Vous pouvez aussi ajouter des éléments fils à l'interieur de l'élément caption pour créer une légende plus complexe. Par exemple, le panneau de préférence des polices de caractères de mozilla utilise un liste déroulante comme légende. Bien que vous puissiez utiliser n'importe quel contenu, vous utiliserez la plupart du temps une case à cocher ou une liste déroulante.

- -

Exemple 2: Source Voir

- -
Image:xultu_groupbox2.png
- -
<groupbox flex="1">
-   <caption>
-     <checkbox label="Activer la sauvegarde"/>
-   </caption>
-   <hbox>
-     <label control="dir" value="Répertoire :"/>
-     <textbox id="dir" flex="1"/>
-   </hbox>
-   <checkbox label="Compresser les fichiers archivés"/>
-</groupbox>
-
- -

Dans cet exemple, une case à cocher a été utilisée comme légende. Nous devons utiliser un script pour activer et désactiver le contenu de la boîte de groupe, quand la case est cochée ou décochée. La boîte de groupe contient une boîte horizontale avec un libellé et un champ de saisie. Ces deux éléments sont flexibles donc le champ de saisie s'agrandit quand la fenêtre s'agrandit. La case à cocher supplémentaire apparait en dessous du champ de saisie à cause de l'orientation verticale de la boîte de groupe. Nous ajouterons une boîte de groupe à notre exemple de recherche de fichiers dans la prochaine section.

- -

Les groupes de boutons radio

- -

Vous pouvez utiliser l'élément radiogroup pour regrouper des éléments boutons radios. radiogroup est un type de boîte. Vous pouvez y mettre n'importe quel élément, et à part le comportement spécial sur les boutons radios, il fonctionne comme n'importe quelle autre boîte.

- -

Tous les boutons radios placés à l'intérieur d'un radiogroup seront groupés ensemble, même s'ils sont à l'intérieur de boîtes imbriquées. Ce fonctionnement est utilisé pour ajouter des éléments supplémentaires à l'intérieur de la structure, comme dans l'exemple suivant :

- -

Exemple 3: Source Voir

- -
<radiogroup>
-   <radio id="no" value="no" label="Pas de nombre"/>
-   <radio id="random" value="random" label="Nombre aléatoire"/>
-   <hbox>
-     <radio id="specify" value="specify" label="Nombre spécifique :"/>
-     <textbox id="specificnumber"/>
-   </hbox>
-</radiogroup>
-
- -
Notez que l'élément radiogroup n'a pas de bordure. Vous devez placer un élément groupbox autour si vous voulez une bordure et une légende.
- -
-

Maintenant, nous allons utiliser tout ce que nous avons appris pour ajouter des éléments supplémentaires dans la boîte de dialogue de recherche de fichiers.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/les_champs_de_saisie/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/les_champs_de_saisie/index.html deleted file mode 100644 index 6b2501c9fc..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/les_champs_de_saisie/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Les champs de saisie -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_champs_de_saisie -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Input_Controls ---- -
-

« PrécédentSuivant »

-
- -

 

- -

XUL possède des éléments qui sont similaires aux champs des formulaires HTML.

- -

Les champs de saisie de texte

- -

Le HTML possède une balise input pouvant être utilisée comme champ de saisie de texte. XUL possède un élément similaire, textbox, utilisé comme champ de saisie de texte. Sans aucun attribut, l'élément textbox crée une boîte dans laquelle l'utilisateur peut entrer du texte. Les boîtes de texte acceptent plusieurs attributs similaires à la balise input de l'HTML. En voici quelques uns :

- -
-
id 
-
Un identifiant unique permettant d'identifier la boîte de texte.
-
class 
-
La classe du style de la boîte de texte.
-
value 
-
Si vous voulez donner une valeur par défaut à la boîte de texte, renseignez l'attribut value.
-
disabled 
-
Mettez la valeur 'true' pour empêcher l'insertion de texte.
-
type 
-
Vous pouvez renseigner cet attribut avec la valeur spéciale 'password' pour créer une boîte de texte dans laquelle tout ce qui est saisi est caché. Il est utilisé habituellement pour les champs de saisie de mot de passe.
-
maxlength 
-
Le nombre maximum de caractères que l'on peut saisir dans la boîte de texte.
-
- -
Notez que, tandis qu'en HTML différentes sortes de champs peuvent être créées avec l'élément input, il y a un élément différent pour chaque type de champs en XUL.
- -

L'exemple suivant montre quelques boîtes de texte :

- -

Exemple 1: Source Voir

- -
<label control="some-text" value="Entrez du texte"/>
-<textbox id="some-text"/>
-<label control="some-password" value="Entrez un mot de passe"/>
-<textbox id="some-password" type="password" maxlength="8"/>
-
- -

Boîte de texte multiligne

- -

Les exemples de boîtes de texte ci-dessus créent des champs de saisie qui ne peuvent être utilisés que pour la saisie d'une seule ligne de texte. Le HTML possède aussi un élément textarea pour créer une zone de saisie plus grande. Dans XUL, vous pouvez utiliser l'élément textbox de la même façon -- deux éléments distincts ne sont pas nécessaires. Si vous mettez l'attribut multiline à la valeur 'true', le champ de saisie de texte affichera plusieurs lignes.

- -

Par exemple :

- -

Exemple 2: Source Voir

- -
<textbox multiline="true"
-         value="Voici du texte qui pourrait s'étaler sur plusieurs lignes."/>
-
- -

Comme avec la balise textarea du HTML, vous pouvez utiliser les attributs rows et cols pour définir la taille. Ils vous permettent d'ajuster le nombre de lignes et de colonnes de caractères à afficher.

- -
-

Notre exemple de recherche de fichiers

- -

Maintenant, ajoutons un champ de saisie de recherche à la boîte de dialogue de recherche de fichiers. Nous allons utiliser l'élément textbox.

- -

Source Voir

- -
<label value="Chercher :" control="find-text"/>
-<textbox id="find-text"/>
-
-<button id="find-button" label="Rechercher"/>
-
- -
Image:xultu_inputs1.png
- -

Ajoutez ces lignes avant les boutons que nous avons créés dans la section précédente. Si vous ouvrez cette fenêtre, vous verrez quelque chose ressemblant à l'image ci-dessous.

-Notez que le libellé et le champ de saisie de texte sont maintenant apparus dans la fenêtre. La boîte de texte est complètement fonctionnelle et vous pouvez taper et sélectionner du texte dedans. Notez aussi que l'attribut control a été utilisé. Ainsi, le champ de saisie est sélectionnée lorsque l'on clique sur son libellé.
- -

Les cases à cocher et les boutons radio

- -

Deux éléments supplémentaires sont utilisés pour la création des cases à cocher et des boutons radio. Ce sont des variantes de boutons. La case à cocher est utilisée pour des options qui peuvent être activées ou désactivées. Les boutons radio peuvent être utilisés dans un but similaire quand il y a un ensemble de boutons où un seul d'entre eux peut-être sélectionné à la fois.

- -

Vous pouvez employer la plupart des attributs des boutons avec les cases à cocher et les boutons radio. L'exemple ci-dessous montre des cases à cocher et boutons radio simples.

- -
<checkbox id="case-sensitive" checked="true" label="Sensible à la casse"/>
-<radio id="orange" label="Orange"/>
-<radio id="violet" selected="true" label="Violet"/>
-<radio id="yellow" label="Jaune"/>
-
- -

La première ligne crée une simple case à cocher. Quand l'utilisateur clique sur la case à cocher, son état coché et décoché s'inverse. L'attribut checked peut être utilisé pour indiquer l'état par défaut. Il vous faudra l'initialiser soit à 'true', soit à 'false'. L'attribut label peut être utilisé pour ajouter un libellé qui apparaitra à côté de la case à cocher. Pour les boutons radio, vous utiliserez l'attribut selected à la place de l'attribut checked. Initialisez le à 'true' pour avoir un bouton radio sélectionné par défaut, ou ne le mettez pas pour les autres boutons radio.

- -

Élement radiogroup

- -

Pour grouper des boutons radio ensemble, vous devez utiliser l'élément radiogroup. Un seul bouton radio peut-être sélectionné dans un radiogroup. Cliquez sur l'un deux désélectionnera tous les autres du même groupe. C'est ce que démontre l'exemple suivant.

- -

Exemple 3: Source Voir

- -
<radiogroup>
-  <radio id="orange" label="Orange"/>
-  <radio id="violet" selected="true" label="Violet"/>
-  <radio id="Jaune" label="Jaune"/>
-</radiogroup>
-
- -

Attributs

- -

Comme pour les boutons, les cases à cocher et les boutons radio sont constitués d'un libellé et d'une image, où l'image change en fonction de l'état coché ou décoché. Les cases à cocher ont certains attributs communs aux boutons :

- -
-
label 
-
Le libellé de la case à cocher ou du bouton radio.
-
disabled 
-
Mettez la valeur à 'true' ou à 'false' pour désactiver ou activer la case à cocher ou le bouton radio.
-
accesskey 
-
La touche clavier pouvant être utilisée comme raccourci pour sélectionner l'élément. La lettre spécifiée est habituellement soulignée dans le libellé.
-
- -
-

Dans la prochaine section, nous allons voir quelques éléments pour la création de boîtes de listes.

- -
-

« PrécédentSuivant »

-
diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_de_listes/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_de_listes/index.html" deleted file mode 100644 index 3a5349caa9..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_de_listes/index.html" +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Les contrôles de listes -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_contrôles_de_listes -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/List_Controls ---- -
-

« PrécédentSuivant »

-
-

XUL dispose de nombreux types d'éléments pour créer des boîtes de listes.

-

Zones de listes

-

Une zone de liste est utilisée pour afficher un nombre d'items dans une liste. L'utilisateur doit pouvoir choisir un des item de la liste.

-

XUL propose deux types d'éléments pour créer des listes, un élément listbox pour créer des zones de liste multi-lignes, et un élément menulist pour créer des zones de listes déroulantes. Ils fonctionnent de la même manière que l'élément select du langage HTML qui réalise ces deux fonctions, mais les élements XUL ont plus de fonctionnalités.

-

La zone de liste la plus simple utilise l'élément listbox pour créer la boîte, et l'élément listitem pour chacun des items. Par exemple, cette zone de liste a quatre lignes, une pour chaque item.

-

Exemple 1: Source Voir

-
<listbox>
-  <listitem label="Beurre de cacahuète"/>
-  <listitem label="Chocolat à tartiner"/>
-  <listitem label="Confiture de fraise"/>
-  <listitem label="Crême chantilly"/>
-</listbox>
-
-
- Image:xultu_list1.png
-

À l'instar de la balise option du langage HTML, vous pouvez assigner une valeur à chaque item en utilisant l'attribut value. Vous pouvez ensuite utiliser cette valeur dans un script. Par défaut, la zone de liste ajustera sa taille à son contenu, mais vous pouvez contrôler sa taille avec l'attribut rows. Affectez lui le nombre de lignes que vous souhaitez voir apparaître dans la zone de liste. Un ascenseur apparaîtra pour permettre à l'utilisateur d'afficher les lignes supplémentaires.

-

L'exemple suivant montre ces fonctionnalités supplémentaires :

-

Exemple 2: Source Voir

-
<listbox rows="3">
-  <listitem label="Beurre de cacahuète" value="becacah"/>
-  <listitem label="Chocolat à tartiner" value="chotart"/>
-  <listitem label="Confiture de fraise" value="confraise"/>
-  <listitem label="Creme chantilly" value="crchant"/>
-</listbox>
-
-

L'exemple a été modifié pour n'afficher que 3 lignes à la fois. Des valeurs ont également été ajoutées à chaque item de la liste. Les zones de liste ont beaucoup d'autres fonctionnalités qui seront décrites plus tard.

-

Boîte de liste multi-colonnes

-

Les boîtes de liste supportent également les colonnes multiples. Chaque cellule peut avoir un contenu arbitraire bien qu'il s'agisse souvent seulement de texte. Quand un utilisateur sélectionne un item dans la liste, la ligne entière est sélectionnée. Il n'est pas possible de sélectionner une seule cellule.

-

Deux balises sont utilisées pour spécifier les colonnes dans une boîte de liste. L'élément listcols est utilisé pour contenir l'information sur les colonnes, chacune d'elles est spécifiée en utilisant un élément listcol Vous aurez besoin d'un élément listcol pour chaque colonne de la liste.

-

L'élément listcell doit être utilisé pour chaque cellule dans une ligne. Si vous voulez avoir trois colonnes, vous aurez besoin d'ajouter trois éléments listcell à l'intérieur de chaque listitem. Pour spécifier le contenu d'un texte de la cellule, placez un attribut label sur cet élément listcell. Dans le cas simple où il n'y a qu'une seule colonne, vous pouvez aussi placer l'attribut label directement sur l'élément listitem et omettre complètement les éléments listcell, comme cela a été montré dans les exemples de listes précédents.

-

L'exemple suivant est une boîte de liste de deux colonnes et trois lignes.

-

Exemple 3: Source Voir

-
<listbox>
-  <listcols>
-    <listcol/>
-    <listcol/>
-  </listcols>
-  <listitem>
-    <listcell label="George"/>
-    <listcell label="Peintre en bâtiment"/>
-  </listitem>
-  <listitem>
-    <listcell label="Mary Ellen"/>
-    <listcell label="Fabriquant de bougies"/>
-  </listitem>
-  <listitem>
-    <listcell label="Roger"/>
-    <listcell label="Bravache"/>
-  </listitem>
-</listbox>
-
-

Lignes d'en-tête

-

Les boîtes de liste permettent également l'utilisation d'une ligne d'en-tête spéciale. Elle n'est rien d'autre qu'une ligne normale, sauf qu'elle est affichée différemment. Elle servira à créer des en-têtes de colonnes grâce à deux nouveaux éléments.

-

L'élément listhead est utilisé pour définir la ligne d'en-tête, comme l'élément listitem est utilisé pour définir une ligne normale. La ligne d'en-tête n'est toutefois pas une ligne normale, ainsi un script permettant de lire la première ligne d'une boîte de liste ne tiendra pas compte de cette ligne d'en-tête.

-

L'élément listheader est utilisé pour chaque cellule de l'en-tête. Utilisez l'attribut label pour définir le libellé de la cellule d'en-tête.

-

Voici l'exemple précédent avec une ligne d'en-tête :

-

Exemple 4: Source Voir

-
<listbox>
-
-  <listhead>
-    <listheader label="Nom"/>
-    <listheader label="Activité"/>
-  </listhead>
-
-  <listcols>
-    <listcol/>
-    <listcol flex="1"/>
-  </listcols>
-
-  <listitem>
-    <listcell label="George"/>
-    <listcell label="Peintre en bâtiment"/>
-  </listitem>
-  <listitem>
-    <listcell label="Mary Ellen"/>
-    <listcell label="Fabriquant de bougies"/>
-  </listitem>
-  <listitem>
-    <listcell label="Roger"/>
-    <listcell label="Bravache"/>
-  </listitem>
-
-</listbox>
-
-
- Image:xultu_lists_3.png
-

Dans cet exemple, l'attribut flex est utilisé pour rendre la colonne flexible. Cet attribut sera décrit dans une section ultérieure, mais ici, il permet à la colonne de remplir tout l'espace disponible horizontalement. Vous pouvez retailler la fenêtre pour voir que la colonne s'adapte en même temps que la fenêtre. Si vous diminuez la taille horizontalement, les libellés sur les cellules seront raccourcis automatiquement, en affichant des points de suite. Vous pouvez utiliser l'attribut crop sur les cellules ou sur les items, avec une valeur 'none' pour désactiver cette coupure.

-

Zones de listes déroulantes

-

Des listes déroulantes peuvent être créées en HTML avec la balise select. L'utilisateur ne voit qu'un unique choix dans une boîte de texte et doit cliquer sur une flèche ou un bouton similaire à côté de la boîte de texte pour changer la sélection. Les autres choix apparaitront alors dans une fenêtre surgissante. XUL dispose de l'élément menulist qui peut servir à cet usage. Il est formé d'une boîte de texte avec un bouton à son côté. Son nom a été choisi parce qu'il propose un menu surgissant pour le choix.

-

Trois éléments sont nécessaires pour former une liste déroulante. Le premier est l'élément menulist qui crée la boîte de texte avec son bouton à côté. Le second, menupopup, crée la fenêtre surgissante qui apparaît lorsque le bouton est cliqué. Le troisième, menuitem, crée les choix individuels.

-

Cette syntaxe est mieux décrite dans l'exemple ci-dessous :

-

Exemple 5: Source Voir

-
<menulist label="Bus">
-  <menupopup>
-    <menuitem label="Voiture"/>
-    <menuitem label="Taxi"/>
-    <menuitem label="Bus" selected="true"/>
-    <menuitem label="Train"/>
-  </menupopup>
-</menulist>
-
-
- Image:xultu_list2.png
-

Ce menu contient quatre choix, un pour chaque élément menuitem. Pour voir les choix possibles, cliquez sur le bouton flèche du menu. Lorsqu'un item est sélectionné, il apparaît comme le choix fait dans le texte du menu. L'attribut selected est utilisé pour définir la valeur sélectionnée par défaut.

- -

Par défaut, vous ne pouvez sélectionner que des choix proposés dans la liste. Vous ne pouvez pas entrer votre propre sélection en la tapant au clavier. Une variante de menulist le permet. Par exemple, le champ URL du navigateur dispose d'une liste déroulante pour afficher les adresses précédemment utilisées, mais vous pouvez aussi la saisir vous même.

-

Pour créer une liste déroulante éditable, ajoutez l'attribut editable comme ceci :

-

Exemple 6: Source Voir

-
<menulist '''editable="true"'''>
-  <menupopup>
-   <menuitem label="www.mozilla.org"/>
-   <menuitem label="www.xulplanet.com"/>
-   <menuitem label="www.dmoz.org"/>
-  </menupopup>
-</menulist>
-
-

Le champ URL créé ici a trois adresses pré-saisies que l'utilisateur peut sélectionner ou alors il peut taper la sienne dans le champ. Le texte entré par l'utilisateur ne sera pas ajouté comme un futur choix à cette liste. Comme l'attribut label n'a pas été utilisé dans cet exemple, sa valeur par défaut sera vide.

-
-

Dans la section suivante, nous apprendrons comment ajouter des indicateurs de progression.

-
-

« PrécédentSuivant »

-
diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_num\303\251riques/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_num\303\251riques/index.html" deleted file mode 100644 index 73c81e4d9f..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_contr\303\264les_num\303\251riques/index.html" +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Les contrôles numériques -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_contrôles_numériques -tags: - - Firefox 3 - - Traduction_à_relire - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Numeric_Controls ---- -
-

« PrécédentSuivant »

-
- -

XUL comprend deux éléments servant aux entrées de valeurs ou de plages numériques, ainsi que de deux éléments pour la saisie des dates et heures. Ces éléments ne sont disponibles que dans Firefox 3 et suivant.

-

Champs numérique

-

Une boîte de texte peut servir à la saisie de nombres en lui définissant un attribut type avec la valeur number. Ce type de boîte ne peut servir que pour entrer des nombres. Tout autre caractère tapé ne sera pas accepté et sera ignoré. De plus, des flèches apparaitront à côté de la boîte de texte pour permettre à l'utilisateur de faire défiler les valeurs.

-
- Image:Controlguide-textbox-number.png
-

Comme avec les autres boîtes de texte, la valeur par défaut peut être définie avec l'attribut value. Naturellement, cette valeur doit être un nombre. Toutefois, les valeurs minimale et maximale peuvent être définies avec les attributs min et max. S'ils sont précisés, vous pouvez contrôler l'intervalle de valeurs permis par la boîte de texte. Si l'utilisateur tente d'entrer une valeur inférieure ou supérieure à cet intervalle, elle sera réinitialisée avec le minimum ou le maximum. Par exemple, la boîte de texte suivante a un intervalle de 1 à 20.

-
<textbox type="number" min="1" max="20"/>
-
-

Comme la valeur par défaut n'est pas définie, la boîte aura la valeur 1, la valeur minimum. L'attribut min est défini à 1 pour indiquer la plus petite valeur possible, et l'attribut max est défini à 20 pour indiquer la plus grande valeur possible. Si la valeur minimale n'est pas définie, elle aura une valeur par défaut de 0. La valeur maximale par défaut est la valeur spéciale Infinity signifiant qu'il n'y a aucune limite.

-

Autres attributs des champs numériques

-

L'attribut increment peut servir à spécifier de combien est modifiée la valeur lorsque les flèches sont pressées. La valeur par défaut est 1, mais une valeur différente permettra au nombre de changer d'une plus grosse valeur. L'exemple suivant effectue des écarts de multiples de 10.

-
<textbox type="number" increment="10" max="100"/>
-
-

Cette boîte de texte change par multiples de 10 de 0 à 100. Comme l'attribut min n'a pas été défini, sa valeur par défaut est 0. Notez que l'utilisateur peut parfaitement entrer une autre valeur. L'attribut increment n'affecte que les flèches. L'utilisateur peut également incrémenter ou décrémenter la valeur en utilisant les flèches haut et bas du clavier lorsque la boîte de texte à le focus.

-

L'attribut decimalplaces indique le nombre de décimales à afficher. La valeur par défaut est 0, ce qui signifie que la boîte n'affiche que des entiers. Une valeur différente permet d'afficher des nombres décimaux.

-
<textbox type="number" decimalplaces="2"/>
-
-

Dans cet exemple, deux chiffres après la virgule sont affichés. Les valeurs comportant d'autres décimales sont arrondies à 2 chiffres après la virgule.

-

Échelles de valeurs

-

Un élément scale peut également être utilisé pour sélectionner une plage de valeurs. Plutôt que d'avoir une boîte de texte, un curseur glissant est utilisé. L'utilisateur peut déplacer le curseur de l'échelle pour ajuster la valeur.

-
- Image:Controlguide-scale.png
-

La plupart des attributs de la boîte de texte numérique peuvent servir avec une échelle : value, min, max et increment peuvent servir de la même façon. L'échelle de valeur n'affiche en fait aucune valeur, mais peut le faire grâce à un script. Une échelle déclenche un événement change à chaque fois que sa valeur est modifiée.

-
<scale value="40" min="1" max="50"/>
-
-

La valeur par défaut de cette échelle est 40, et elle a une plage comprise entre 1 et 50.

-

Une boîte de texte numérique est employée généralement lorsque la valeur est importante pour l'utilisateur, comme un champs pour saisie un nombre de jours ou la taille maximale d'un fichier. Une échelle de valeur servira plutôt lorsque la valeur n'est pas très importante, comme l'augmentation ou la diminution d'un état, par exemple pour le volume sonore ou un zoom.

-

La disposition par défaut d'une échelle est horizontale avec à gauche les valeurs les plus basses et à droite, les plus hautes. Vous pouvez toutefois modifier cette orientation avec les attributs orient et dir.

-
<scale orient="vertical" dir="reverse"/>
-
-

Cette échelle de valeurs s'affichera verticalement avec les valeurs les plus basses en bas, et les plus élevées en haut.

-

Champs de saisie de date et heure

-

Les éléments datepicker et timepicker permettent à l'utilisateur d'entrer des dates et des heures. À leur utilisation, ils affichent une série de boîtes de texte numérique pour entrer chaque composants de la date et de l'heure.

-
<datepicker value="2004/3/24"/>
-<timepicker value="15:30:00"/>
-
-
- Image:Controlguide-timepicker.png
-

L'attribut value permet de définir la valeur par défaut ; et si cet attribut est omis, le champ sera initialisé avec la date et l'heure courante. Le format de l'attribut est exactement comme ci-dessus, c'est-à-dire que les dates sont de la forme YYY/MM/DD et les heures sont de la forme HH:MM:SS (bien que les secondes et les autres colonnes peuvent être omises).

-

Ces deux éléments garantissent que l'utilisateur a bien entré une valeur date et une heure. De cette manière, vous n'avez pas à vous soucier qu'il s'agit d'une date valide, en vérifiant que le jour n'est pas supérieur au nombre de jour dans le mois, en gérant les années bissextiles, et ainsi de suite.

-

Tandis que timepicker ne possède qu'un seul style, datepicker possède trois variations différentes. Le style par défaut affiche trois champs pour l'année, le mois et le jour. L'attribut type permet de choisir les deux autres. Une valeur de grid utilise une grille de calendrier, comme affichée dans l'image ci-dessous.

-

Image:Controlsguide-datepicker-grid.png

-

Vous pouvez également utiliser la valeur popup pour créer une combinaison des deux types. Ce type a trois champs pour entrer l'année, le mois et la date, ainsi qu'un bouton pour afficher un calendrier surgissant pour choisir un jour.

-
<datepicker type="popup"/>
-
-
-

« PrécédentSuivant »

-
diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_de_propri\303\251t\303\251s/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_de_propri\303\251t\303\251s/index.html" deleted file mode 100644 index a644660bf3..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_de_propri\303\251t\303\251s/index.html" +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Les fichiers de propriétés -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_fichiers_de_propriétés -tags: - - Localisation - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Property_Files ---- -

 

-
-

« PrécédentSuivant »

-
-

 

-

Dans un script, les entités ne peuvent être utilisées. On utilise alors plutôt les fichiers de propriétés.

-

Propriétés

-

Les fichiers DTD sont adaptés à des chaînes issues d'un fichier XUL. Néanmoins, dans un script, les entités ne sont pas analysées pour être remplacées. De plus, vous pourriez souhaiter afficher un message généré par un script, sans par exemple connaître à l'avance son contenu. Les fichiers de propriétés peuvent être utilisés dans ce but.

-

Un fichier de propriétés contient une suite de chaînes de caractères. Vous trouverez les fichiers de propriétés aux côtés des fichiers DTD avec l'extension .properties. Les propriétés dans un de ces fichiers sont déclarées selon une structure nom=valeur. Un exemple est décrit ci-dessous :

-
notFoundAlert=Aucun fichier trouvé correspondant aux critères.
-deleteAlert=Cliquez sur OK pour effacer tous vos fichiers.
-resultMessage=%2$S fichiers trouvés dans le répertoire %1$S.
-
-

Ici, le fichier de propriétés contient deux propriétés. Elles pourront être lues par un script et affichées.

-

Stringbundles

-

Vous pouvez écrire le code de lecture des propriétés vous-mêmes, néanmoins XUL fournit l'élément stringbundle qui le fait pour vous. Cet élément dispose de plusieurs fonctions pouvant être utilisées pour récupérer les chaînes de caractères des fichiers de propriétés et d'autres informations de localisation. Cet élément lit le contenu des fichiers de propriétés et construit une liste de ces propriétés pour vous. Vous pouvez donc ensuite y accéder par leur nom.

-
<stringbundleset id="strbundles">
-<stringbundle id="strings" src="strings.properties"/>
-</stringbundleset>
-
-

L'inclusion de cet élément permettra de lire les propriétés via le fichier 'strings.properties' dans le même répertoire que le fichier XUL. Utilisez une URL chrome pour lire un fichier de localisation. Comme pour d'autres éléments non affichables, vous devriez déclarer tous les stringbundles à l'intérieur d'un élément stringbundleset pour les regrouper.

-

Obtention d'une chaîne d'une collection

-

L'élément stringbundle a plusieurs propriétés. La première est getString pouvant être utilisée dans un script pour lire une chaîne de caractères de la collection.

-
var strbundle = document.getElementById("strings");
-var nofilesfound=strbundle.getString("notFoundAlert");
-
-alert(nofilesfound);
-
- -
À propos de l'obtention d'une chaîne d'une collection
-

Si vous souhaitez utiliser l'élément stringbundle au sein d'un <overlay>, merci de faire attention. Vous devrez placer votre stringbundle dans un élément <window>, d'identifiant 'main-window'. Sinon, vous ne serez pas à même de récupérer les chaînes depuis votre code JavaScript, sans comprendre pourquoi. Ainsi, le code que vous auriez écrit aurait pu être :

-
<overlay id="OverLayId">
-    <stringbundleset id="strbundles">
-        <stringbundle id="strings" src="strings.properties"/>
-    </stringbundleset>
-</overlay>
-
-

Il sera donc :

-
<overlay id="OverLayId">
-    <window id="main-window">
-        <stringbundleset id="strbundles">
-            <stringbundle id="strings" src="strings.properties"/>
-        </stringbundleset>
-    </window>
-</overlay>
-
-

Formatage de texte

-

La méthode suivante est getFormattedString(). Elle permet également d'obtenir avec une clef donnée une chaîne de la collection. Mais en plus, chaque occurrence de code de formatage (par ex. %S) est remplacée par chaque élément successif dans le tableau transmis.

-
var dir = "/usr/local/document";
-var count = 10;
-
-var strbundle = document.getElementById("strings");
-var result = strbundle.getFormattedString("resultMessage", [ dir, count ]);
-
-alert(result);
-
-

Cet exemple affichera le message suivant dans une boîte d'alerte.

-
10 fichiers trouvés dans le répertoire /usr/local/document.
-

Vous noterez que les codes de formatage %1$S et %2$S sont utilisés, et sont remplacés par les différents membres dans le tableau. Un code de formatage %n$S spécifie directement la position du paramètre correspondant. Bien que l'ordre des mots soit différent dans tous les langages, l'utilisation de getFormattedString() permet de préciser l'ordre dans les fichiers de propriétés.

Échappement de caractères non-ASCII

-

 

-

Avant Gecko 1.8

-

Bien que la plupart des langages nécessitent des caractères non-ASCII, les fichiers de propriétés doivent être écrits en n'utilisant que des caractères ASCII. Cependant, les fichiers de propriétés supportent d'autres caractères grâce à des séquences échappées de la forme : \uXXXX où XXXX est le code du caractère. Ainsi, si votre fichier de propriété contient des caractères non-ASCII, vous devrez le convertir au format 'échappement-unicode'. Pour faire cela, vous pouvez utiliser l'utilitaire en ligne de commande native2ascii fourni avec le kit de développement Java de Sun (JDK).

-

À partir de Gecko 1.8.x (et versions ultérieures)

-

Les fichiers .properties encodés en UTF-8 sont pris en charge. Vous pouvez donc utiliser des caractères non-ASCII sans avoir à les "échapper".

-
-

Dans la prochaine section, nous découvrirons XBL qui peut être utilisé pour définir le comportement d'un élément.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_manifest/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_manifest/index.html deleted file mode 100644 index 50ea0d2e3e..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/les_fichiers_manifest/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Les fichiers manifest -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_fichiers_manifest -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Manifest_Files ---- -
-

« PrécédentSuivant »

-
-

Dans cette section, nous allons voir comment mettre des fichiers XUL et chrome dans un paquetage et créer les fichiers manifest associés.

-

Paquetages

-

Un paquetage est un ensemble de fichiers XUL et de scripts qui définissent la fonctionnalité d'une interface utilisateur. Les paquetages peuvent être installés dans Mozilla et référencés avec des URLs chrome. Un paquetage peut contenir tous les fichiers que l'on veut et peut-être découpé en sous-répertoires pour les différentes parties du paquetage. Un paquetage peut-être enregistré soit comme un répertoire ou soit comme une archive JAR.

-

Les fichiers manifest

-

Un fichier manifest décrit un paquetage et relie son emplacement sur le disque à son adresse URL chrome. Les fichiers manifest situés dans le répertoire chrome sont examinés au lancement d'une application Mozilla pour déterminer les paquetages installés. Cela signifie que tout ce que vous avez à faire pour installer un nouveau paquetage est d'ajouter un fichier manifest soit dans le répertoire chrome de l'application, soit dans le répertoire chrome du profil de l'utilisateur. Le second emplacement est normalement le seul utilisé puisque les permissions ne devraient pas être suffisantes pour écrire dans le répertoire de l'application.

-

Si vous voulez tester un code XUL à privilèges dans le navigateur Firefox, un simple fichier manifest contenant une seule ligne est nécessaire :

-
    -
  1. Créez un nouveau répertoire quelque part. Par exemple, sur une plateforme Windows, utilisez C:\testfiles.
  2. -
  3. Créez un nouveau fichier ASCII (un format UTF-8 avec BOM ne fonctionnera pas) appelé test.manifest dans le répertoire chrome. Le nom du fichier importe peu dès lors qu'il possède une extension .manifest.
  4. -
  5. Ajoutez la ligne suivante à ce fichier :
  6. -
-
content tests file:///C:/testfiles/
-
-

Le chemin mentionné dans cette ligne doit pointer vers le répertoire créé plus haut. Si vous avez un doute sur la syntaxe de ce chemin, ouvrez ce répertoire dans un navigateur et copiez l'URL obtenue dans la barre d'adresse.

-

C'est fait ! Maintenant, tout ce qu'il vous reste à faire est d'ajouter des fichiers XUL dans ce nouveau répertoire, et vous serez capable de les charger en tapant une URL chrome de la forme chrome://tests/content/<filename>. Bien entendu, vous devrez redémarrer votre navigateur pour les changements soient pris en compte. Si le fichier ne se charge pas, vérifiez que le chemin vers le répertoire est correct.

-

La syntaxe de base des lignes du manifest du paquetage de contenu est :

-

'content <nom_du_paquetage> <chemin_vers>'

-

Le premier mot 'content' indique qu'il s'agit d'un paquetage de contenu. Pour les thèmes graphiques, le mot serait 'skin' et pour les fichiers de langue, il serait 'locale'. Le nom du paquetage dans l'exemple ci-dessus est 'tests', donc le premier champ dans l'URL chrome est 'tests' comme dans chrome://tests/content/exemple.xul. Si le nom du paquetage était 'browser', l'URL chrome serait chrome://browser/content. Le dernier champ <chemin_vers> correspond à l'emplacement des fichiers. Il peut être soit un une URL file vers un répertoire local, soit une URL jar vers une archive JAR qui sera décrit plus tard. Vous pouvez déclarer plusieurs paquetages dan le même fichier manifest en ajoutant des lignes.

-

Le fichier browser.manifest utilisé par Firefox ressemble à ceci :

-
content branding jar:browser.jar!/content/branding/ xpcnativewrappers=yes
-content browser jar:browser.jar!/content/browser/ xpcnativewrappers=yes
-overlay chrome://global/content/viewSource.xul chrome://browser/content/viewSourceOverlay.xul
-overlay chrome://global/content/viewPartialSource.xul chrome://browser/content/viewSourceOverlay.xul
-overlay chrome://browser/content/pageInfo.xul chrome://pippki/content/PageInfoOverlay.xul
-
-

Deux paquetages sont déclarés ici : 'branding' et 'browser'. Trois overlays sont également spécifiés pour permettre aux différents paquetages de se combiner entre eux. Les extensions font un large usage des overlays pour fusionner leurs interfaces à celle du navigateur.

-

Les deux chemins des paquetages branding et browser utilisent des URLs jar car leur contenu se trouve dans une archive. Une archive JAR peut être créée avec un utilitaire ZIP. Pour un fichier JAR situé dans un répertoire chrome, la syntaxe est assez simple :

-

jar:<nom_de_fichier.jar>!<chemin_dans_archive>

-

Pour le paquetage du navigateur, l'archive est browser.jar et elle est située à côté du fichier manifest dans le répertoire chrome. Le chemin 'content/browser' spécifie le chemin à l'intérieur de l'archive où les fichier XUL sont situés. Il n'est pas nécessaire de préciser un chemin s'il n'y a aucun répertoire dans l'archive. Sur notre exemple, il y en a un puisque les fichiers du paquetage branding sont enregistrés dans un chemin différent de la même archive.

-

Pour le paquetage 'tests' créé ci-dessus, les fichiers ne sont pas empaquetés dans une archive, donc un chemin direct vers les fichiers est utilisé à la place. Cette méthode est bonne pour le développement puisque vous n'avez pas à réempaqueter tous les fichiers à chaque modification. Cependant, pour distribuer une application ou une extension, vous devriez les empaqueter dans une archive pour éviter l'installation d'une multitudes de petits fichiers.

-

La partie xpcnativewrappers=yes à la fin de la ligne du fichier manifest est un drapeau optionnel. En JavaScript, une page Web peut remplacer des fonctions natives avec son propre code. La présence de ce drapeau xpcnativewrappers=yes indique aux scripts tournant dans un contexte à privilèges de ne pas appeler ses versions remplacées, mais plutôt leurs versions natives. Sans cela, une extension pourrait tenter d'appeler ses versions modifiées et mal fonctionner, ou pire, ouvrir un trou de sécurité. Ce drapeau a été ajouté pour éviter ce genre de problème et devrait toujours être utilisé pour de nouvelles extensions, mais des anciennes extensions pourraient ne plus fonctionner sans lui. Pour plus d'informations concernant cette fonctionnalité, consultez XPCNativeWrapper.

-

Thèmes graphiques et langues

-

La syntaxe pour les thèmes et les langues est similaire aux paquetages de contenu, mais vous devrez préciser à quel paquetage de contenu ils s'appliquent. Par exemple :

-
skin browser classic/1.0 jar:classic.jar!/skin/classic/browser/
-locale browser en-US jar:en-US.jar!/locale/browser/
-

Pour cet exemple, le champ supplémentaire a été ajouté pour indiquer que le thème graphique et la langue s'applique au navigateur (browser). Le nom du thème est 'classic/1.0'. Dans le cas présent, un numéro de version est indiqué avec le nom du thème mais il est facultatif si vous développez votre propre thème. Mozilla n'effectue aucun traitement sur ce numéro qui est simplement une partie du nom du thème graphique. La langue est 'en-US'. Les adresses URLs résultant de cet exemple seront 'chrome://browser/skin' et 'chrome://browser/locale'. Si vous créez votre propre thème graphique ou langue, il vous suffit d'adapter ces deux lignes en conséquence.

-

Pour plus d'informations sur les thèmes graphiques, consultez Thèmes. Pour plus d'informations sur la localisation, consultez Localisation.

-
-

Notre exemple de recherche de fichiers

-

Créons un fichier manifest pour notre boîte de dialogue de recherche de fichiers. Vous pouvez mettre ces trois types dans un même fichier. Lors de la création d'une extension, assurez vous que tous les types soient déclarés. Nous procèderons ainsi pour notre exemple. Créez un fichier findfile.manifest dans le répertoire chrome et ajoutez-y les lignes suivantes :

-
content findfile file:///findfile/content/
-skin findfile classic/1.0 file:///findfile/skin/
-locale findfile en-US file:///findfile/locale/
-
-

Créez les nouveaux répertoires listés ci-dessus. Peu importe où vous les créez, mais leurs emplacements doivent être indiqués dans le fichier manifest. Naturellement, vous adapterez les chemins en fonction de votre système de fichiers. Si nous voulions distribuer le paquetage, nous le placerions dans un fichier JAR en modifiant les chemins. Pour l'instant, il s'agit d'un exemple de création d'un fichier manifest et une préparation des répertoires pour les exemples à venir dans les sections suivantes.

-

Notez que les deuxièmes champs pour les lignes 'skin' et 'locale' sont 'findfile'. Elles signifient que le thème graphique et la langue modifient le paquetage 'findfile' défini à la première ligne. Les trois chemins mentionnés correspondent chacun à un sous répertoire différent. Vous devrez procéder ainsi pour séparer les fichiers de chaque catégorie.

-
-

Installer un paquetage

-

Pour installer une application, vous devez soit lui créer un installeur, soit l'inclure dans une autre application. La méthode dépend du type d'application que vous créez. Pour des extensions, vous devez créer un fichier d'installation install.rdf décrivant ce qui doit être installé, l'auteur de l'extension et avec quelles versions du navigateur ou d'autres applications elles sont compatibles. Une structure de répertoires bien spécifique est nécessaires car l'emplacement des fichiers des extensions est limité. Une extension est paquetagée dans un fichier XPI. XPI est le raccourci pour XPInstall utilisé par Mozilla pour l'installation de composants. Comme pour un fichier JAR, un fichier XPI n'est autre qu'un fichier ZIP avec une extension différente, donc il vous suffit de disposer d'un utilitaire ZIP pour créer ou visualiser un XPI.

-

Le gestionnaire d'extensions de Firefox gère automatique les fichiers XPI pour installer les extensions. Il est recommandé de transférer les extensions sur le Mozilla Add-ons où les utilisateurs pourront les retrouver. Elles peuvent être installées depuis n'importe quel site, mais la configuration par défaut devra être modifiée pour permettre d'autres sites.

-

Il est également possible d'utiliser un script d'installation écrit en JavaScript. Cela vous permet de copier des fichiers vers d'autres emplacements et de réaliser d'autres tâches de gestion de fichiers. Cependant, les extensions installées avec un script ne seront pas listées dans le gestionnaire d'extensions, et il n'existe aucune méthode automatisée pour les désinstaller. Pour cette raison, les scripts d'installation ne sont pas souvent utilisés.

-

Les applications autonomes peuvent être empaquetées en utilisant XULRunner. Ceci permet d'obtenir un fichier exécutable séparé, et l'application peut être distribuée indépendamment d'un navigateur.

-

Pour plus d'informations sur la création d'extensions, consultez la page Extensions. Pour plus d'informations sur XULRunner, consultez la page XULRunner.

-

Applications anciennes

-

Si vous créez des applications pour des logiciels Mozilla plus anciens, c'est-à-dire précédent Firefox 1.5 ou Mozilla 1.8, le processus est un peu plus élaboré. Les explications qui suivent décrivent comment définir un paquetage pour des anciennes versions. Ce chapitre peut être omis si vous écrivez de nouvelles extensions ou applications XUL.

-
- Note : Cet ancien processus s'applique également à SeaMonkey 1.0 qui n'a pas encore adopté le format des "manifest".
-
    -
  1. Créez un répertoire n'importe où sur votre disque. De nombreuses personnes le placent dans un sous répertoire du répertoire chrome de Mozilla, mais ce n'est pas nécessaire. Le répertoire peut être ailleurs. Placez-y vos fichiers XUL.
  2. -
  3. Créez un fichier appelé contents.rdf et placez le dans ce répertoire. Copiez le texte suivant dans ce fichier contents.rdf. Ce fichier sert à identifier l'id de l'application, son nom, son auteur, sa version, etc. -
    <?xml version="1.0"?>
    -
    -<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
    -
    -<RDF:Seq about="urn:mozilla:package:root"> <RDF:li resource="urn:mozilla:package:<span style="color:red">monapplication</span>"/> </RDF:Seq>
    -
    -<RDF:Description about="urn:mozilla:package:<span style="color:red">monapplication</span>" chrome:displayName="<span style="color:blue">Titre de l'application</span>" chrome:author="<span style="color:blue">Nom de l'auteur</span>" chrome:name="<span style="color:red">monapplication</span>" chrome:extension="true"/>
    -
    -</RDF:RDF>
    -
  4. -
  5. Modifiez les textes surlignés du fichier ci-dessus avec vos propres informations. Le texte rouge monapplication devrait être l'ID de votre application. Habituellement, l'ID est le même que le nom de votre application. Remplacez le texte en bleu avec le titre et l'auteur de votre application.
  6. -
  7. Si le champ 'chrome:extension' est à 'true', l'application est une extension de Mozilla Firefox qui apparaîtra dans la fenêtre des extensions du navigateur. S'il est à 'faux', elle n'apparaîtra pas.
  8. -
  9. Sauvegardez le fichier contents.rdf et assurez vous qu'il se trouve bien dans le répertoire que vous avez créé à l'étape 1.
  10. -
  11. Ouvrez le fichier <mozilla-directory>/chrome/installed-chrome.txt, où <mozilla-directory> est le répertoire dans lequel est installé Mozilla. Quittez Mozilla avant cette opération.
  12. -
  13. Ensuite, vous allez enregistrer la nouvelle application pour que Mozilla sache la localiser. Ajoutez une ligne à la fin du fichier installed-chrome.txt pointant vers le nouveau répertoire que vous avez créé à l'étape 1. Modifiez le texte surligné correspondant au chemin du répertoire. Assurez vous que son URL finisse par un slash, et que vous avez appuyé sur Entrée en fin de ligne. Si vous n'êtes pas certain de l'écriture de cette URL, ouvrez le répertoire que vous avez créé à l'étape 1 dans le navigateur Mozilla et recopiez l'URL de la barre d'adresse. Notez que la référence doit toujours être un répertoire, pas un fichier. content,install,url,file:///main/app/
  14. -
  15. Effacez le fichier <mozilla-directory>/chrome/chrome.rdf.
  16. -
  17. Démarrez Mozilla. Vous devriez être capable de visualiser les fichiers XUL que vous avez placé dans ce répertoire en utilisant une URL de la forme : chrome://applicationid/content/file.xul où file.xul est le nom du fichier. Le nom de votre fichier principal doit être applicationid.xul, et il sera automatiquement chargé depuis l'URL raccourcie chrome://applicationid/content/.
  18. -
-

Si vous créez des portions de skin ou de locale, répétez les étapes précédentes à l'exception du format du fichier contents.rdf qui est légèrement différent. Regardez des fichiers contents.rdf dans d'autres applications pour plus de détails.

-

Problèmes

-

La création de paquetage chrome peut parfois s'avérer difficile et il est difficile de diagnostiquer les problèmes. Voici quelques astuces au cas où vous bloquez.

- -

Pour plus d'information concernant les fichiers manifest, consultez la page Enregistrement chrome.

-

Dans la section suivante, nous aborderons le langage XUL.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes/index.html" deleted file mode 100644 index 98826074eb..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes/index.html" +++ /dev/null @@ -1,159 +0,0 @@ ---- -title: Les objets boîtes -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_objets_boîtes -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Box_Objects ---- -
-

« PrécédentSuivant »

-
- -

Cette section décrit l'objet boîte qui contient des informations relatives à l'affichage et à la mise en page d'une boîte XUL aussi bien que des détails sur la mise en page XUL.

- -

À propos de la mise en page XUL

- -

Mozilla divise son fonctionnement en deux séries d'arbres, l'arbre du contenu et l'arbre de mise en page. L'arbre de contenu stocke les nœuds trouvés tels quels dans le code source. L'arbre de mise en page contient un arbre différent des nœuds pour chaque composant individuel pouvant être affiché. L'arbre de mise en page contient la structure d'affichage des nœuds. Il n'y a pas forcément de relation directe entre le contenu et la mise en page des nœuds. Certains nœuds de contenu peuvent avoir plusieurs objets de mise en page, par exemple, chaque ligne d'un paragraphe a un objet de mise en page séparé. Réciproquement, certains nœuds de contenu n'ont aucun objet de mise en page. Par exemple, l'élément key n'a aucun objet de mise en page puisqu'il n'est jamais affiché. De même, tout élément masqué n'aura plus d'objet de mise en page.

- -

DOM est généralement utilisé pour récupérer et modifier des informations concernant le contenu ou la structure d'un document. Il est relativement simple de déterminer quelle sorte de nœud de l'arbre sera créé pour un élément donné. Un élément XUL, par exemple, aura un type de nœud de contenu XULElement.

- -

Les objets de mise en page qui seront créés sont déterminés de manière plus complexe. Diverses parties d'information sont utilisées telles que le nom de la balise, les attributs d'un élément, diverses propriétés CSS, les éléments et les objets de mise en page autour de l'élément, et les liaisons XBL associées à un élément (les XBL seront décrites dans une section ultérieure). À moins que vous ne changiez le style d'un élément, la plupart des éléments XUL utilisent habituellement l'objet de boîte de mise en page ou un de ses sous-types. Souvenez-vous que tous les éléments XUL sont des types de boîtes, et que les boîtes sont la base de l'affichage de tous les éléments XUL. Toutefois, Il y a un certain nombre de sous-types, environ 25 ou plus, pour des éléments XUL spécifiques. Certains de ces sous-types, tels que les piles ou les boîtes de liste ont besoin d'une mise en page plus complexe qu'une simple boîte, tandis que d'autres, tels que les boutons, ne sont utilisés que pour ajouter la gestion des événements souris ou clavier.

- -

L'objet de mise en page associé à un élément peut être enlevé pour créer un objet de type complètement différent en changeant simplement la propriété display CSS. Par exemple, l'affectation de la valeur 'block' à la propriété display d'un élément bouton va effacer l'objet de mise en page et créer un objet 'block' à la place. Naturellement, ce changement modifiera l'apparence et les fonctionnalités de cet élément.

- -

Il n'est pas nécessaire de connaître les détails de la construction des objets de mise en page, mais il est quand même utile d'avoir la connaissance de comment est décrit la mise en page XUL pour aborder un développement avancé sous XUL.

- -

Les objets de boîte

- -

Les objets de mise en page ne peuvent pas être manipulés par les développeurs. Ils font partie des composants internes à la mise en page XUL. Toutefois, XUL fournit quelques objets d'aide, appelés objets de boîte, qui fournissent quelques informations concernant la mise en page. Comme leurs noms l'indiquent, ils sont disponibles pour tous éléments de type boîte.

- -

Il y a plusieurs sous-types d'objet boîte, bien que seul un petit nombre d'entre eux soit généralement employé. Les autres ont des fonctions plus accessibles par des méthodes liées directement à l'élément, car ces types sont généralement seulement utilisés avec un élément particulier. L'objet de boîte, ou l'interface BoxObject, toutefois, a un nombre de propriétés pouvant être utile pour le développement XUL.

- -

L'objet de boîte de base a deux fonctionnalités utiles. Premièrement, vous pouvez récupérer la position et les dimensions d'un élément XUL affiché, et deuxièmement, vous pouvez déterminer l'ordre d'affichage des éléments dans une boîte, au lieu de leurs ordres d'enregistrement dans le DOM.

- -

Récupérer la position et les dimensions

- -

L'objet de boîte fournit quatre propriétés, x, y, width et height, pour déterminer la position et les dimensions d'un élément. Les coordonnées x et y sont relatives au coin haut à gauche du document dans la fenêtre (en excluant le bord de la fenêtre et son titre). Elles sont mesurées en pixels. Les propriétés width et height sont également mesurées en pixels et retournent la largeur et la hauteur d'un élément en incluant les styles CSS padding et border, s'ils existent.

- -

Les valeurs sont toujours la position et les dimensions correspondant à l'affichage en cours, donc ces valeurs peuvent être différentes si l'élément est déplacé ou redimensionné. Par exemple, un élément flexible changera de taille et les dimensions de son objet de boîte seront mises à jour en conséquence. L'exemple suivant en offre une illustration :

- -

Exemple 1: Source Voir

- -
<button label="Cliquez ici"
-        oncommand="alert('La largeur est ' + this.boxObject.width);"/>
-
- -

Vous pouvez utiliser les attributs width et height pour définir respectivement la largeur et la hauteur d'un élément. Normalement, ces attributs n'ont pas à être modifiés et l'élément ajuste ses dimensions pour s'adapter au contenu. Ainsi, la définition de ces attributs substitue les valeurs spécifiées aux dimensions par défaut. Les propriétés width et height correspondantes peuvent être employées pour ajuster les dimensions d'un élément à tout moment, si vous souhaitez afficher un élément à une dimension précise. La récupération des valeurs de ces propriétés vous donnera les dimensions explicitement indiquées. Notez que ces propriétés renverront une chaîne vide si les attributs ou propriétés width et height n'ont pas encore été initialisées. Par conséquent, vous ne pouvez pas récupérer les dimensions actuelles avec ces propriétés ; vous devrez utiliser les propriétés de l'objet de boîte à la place.

- -

Cela doit vous sembler un peu confus, mais la clef est de se souvenir que les propriétés width et height d'un élément retournent les dimensions qui ont été définies dans le fichier XUL, tandis que les propriétés width et height de l'objet de boîte retournent les dimensions courantes réelles.

- -

Élément caché et réduit

- -

L'attribut hidden cachera un élément de telle sorte qu'il ne sera pas affiché. Comme il n'est pas affiché, les quatre propriétés de position et de dimensions de l'objet de boîte auront une valeur '0'. Lorsqu'un élément est caché, il est supprimé de l'affichage et ses objets de mise en page sont effacés. Ainsi, comme il n'est affiché nulle part, il n'aura ni position ni dimensions.

- -

L'attribut collapsed aura le même effet visuel sur cet élément pour l'utilisateur, excepté le fait qu'il laisse l'élément sur l'écran et conserve les objets de mise en page intacts, mais en mettant ses dimensions à '0'. Cela signifie que même si les éléments cachés et réduits ont une largeur et une hauteur de '0', les éléments cachés auront une position x et y de '0' tandis que les éléments réduits conserveront leur position dans la fenêtre.

- -

Pour rechercher ou modifier les états hidden ou collapsed, utilisez leurs propriétés respectives comme dans l'exemple suivant.

- -

Exemple 2: Source Voir

- -
<script>
-function showPositionAndSize()
-{
-  var labelbox = document.getElementById('thelabel').boxObject;
-
-  alert("La position est (" + labelbox.x + "," + labelbox.y +
-        ") et les dimensions sont (" + labelbox.width + "," +
-        labelbox.height + ")");
-}
-</script>
-
-<button label="Caché"
-        oncommand="document.getElementById('thelabel').hidden = true;"/>
-<button label="Montré"
-        oncommand="document.getElementById('thelabel').hidden = false;"/>
-<button label="Réduit"
-        oncommand="document.getElementById('thelabel').collapsed = true;"/>
-<button label="Non réduit"
-        oncommand="document.getElementById('thelabel').collapsed = false;"/>
-<button label="Montrer la position et les dimensions
-        oncommand="showPositionAndSize();"/>
-<label id="thelabel" value="Je suis un libellé"/>
-
- -
Notez que si vous cachez ou réduisez le libellé, il sera invisible. Vous devrez changer ses attributs hidden ou colapsed pour le voir réapparaître.
- -

Ordonnancement des éléments XUL

- -

L'objet de boîte peut également être employé pour déterminer l'ordre d'affichage des éléments, qui peut ne pas être le même que dans la source. Souvenez-vous que les propriétés DOM telles que childNodes, firstChild et nextSibling peuvent être utilisées pour parcourir l'arbre de document. L'objet de boîte permet de naviguer de façon similaire mais retourne les éléments dans leur ordre d'affichage.

- -

L'objet de boîte fournit plusieurs propriétés, firstChild, lastChild, nextSibling, previousSibling et parentBox. Leurs noms devraient vous expliquer d'eux-même leur fonctionnement. Ces propriétés renvoient des éléments, par exemple, la propriété firstChild renvoie le premier élément enfant affiché. Il n'y a pas de propriété childNodes correspondante pour naviguer entre les boîtes ; à la place, vous devez utiliser les propriétés nextSibling et previousSibling pour parcourir les frères et sœurs.

- -

Contrairement à la navigation dans l'arbre DOM, les éléments cachés ne sont pas inclus dans la navigation avec les objets de boîte. Donc, si une boîte a six enfants dont les deux premiers sont cachés, la propriété firstChild renverra le troisième élément. Toutefois, les éléments réduits seront inclus car ils sont affichés même sans avoir de dimensions. Par exemple, la boîte sœur suivant le bouton 1 de l'exemple suivant sera le bouton 3, parce que le bouton 2 est caché. Mais la boîte sœur suivant le bouton 3 sera le bouton 4 qui est seulement réduit.

- -

Exemple 3: Source Voir

- -
<hbox>
-  <button label="Bouton 1"
-          oncommand="alert('Le suivant est : ' + this.boxObject.nextSibling.label);"/>
-  <button label="Bouton 2" hidden="true"/>
-  <button label="Bouton 3"
-          oncommand="alert('Le suivant est : ' + this.boxObject.nextSibling.label);"/>
-  <button label="Bouton 4" collapsed="true"/>
-</hbox>
-
- -

Attributs d'ordonnancement de boîte

- -

Lorsqu'une boîte XUL est placée dans une fenêtre, les éléments sont ordonnés selon un certain nombre de propriétés, par exemple l'orientation, leur groupe ordinal et leur direction.

- -
Attribut orient
- -

L'orientation est communément modifiée en utilisant l'attribut orient. Il existe également une propriété CSS -moz-box-orient correspondante qui peut remplacer l'attribut, en fonction de la situation. Cet attribut a été expliqué dans une section précédente sur les boîtes.

- -
Attribut ordinal
- -

L'attribut ordinal d'un élément peut être placé pour spécifier un groupe ordonné d'éléments, ou vous pouvez utiliser la propriété CSS -moz-box-ordinal-group.

- -

Les éléments avec une valeur ordinale inférieure sont placés dans la boîte avant les éléments ayant une plus grande valeur ordinale. Par exemple, un élément avec une valeur ordinale de '2' sera placé avant un élément ayant une valeur ordinale de '3' ou plus, mais après un élément ayant un ordinal de '1'. La valeur ordinale par défaut, si elle n'est pas définie, est de '1'. Cela signifie que si vous voulez modifier l'ordre d'affichage des éléments, vous aurez souvent besoin d'ajuster les ordinaux de plusieurs éléments.

- -

L'ajustement de l'ordinal d'un élément ne se fait pas aussi simplement par le placement des éléments dans un certain ordre dans la source. Il peut être utilisé pour réarranger les éléments plus tard sans ajuster le DOM. L'exemple suivant en est une illustration.

- -

Exemple 4: Source Voir

- -
<hbox>
-  <button label="Un" oncommand="this.ordinal++;"/>
-  <button label="Deux" oncommand="this.ordinal++;"/>
-  <button label="Trois" oncommand="this.ordinal++;"/>
-</hbox>
-
- -

Si vous pressez le premier bouton, son ordinal augmentera de un, de '1' à '2'. Il apparaîtra à la fin de la ligne puisque les autres boutons ont un ordinal de '1'. Si vous pressez le second bouton, son ordinal sera augmenté de un et sera déplacé à la fin de la ligne. Les éléments de même ordinal apparaîtront dans le même ordre que dans la source. Si vous pressez une nouvelle fois le bouton libellé 'Un', son ordinal augmentera à '3' et il sera déplacé à la fin. Finalement, presser le bouton libellé 'Trois' augmentera son ordinal à '2' et le fera apparaître entre les deux autres boutons.

- -
Attribut dir
- -

L'attribut final d'ordonnancement de boîte est l'attribut dir, ou la propriété CSS -moz-box-direction. S'il est initialisé à 'reverse', tous les enfants dans la boîte sont affichés dans l'ordre inverse. Dans une boîte horizontale, les éléments seront affichés de la droite vers la gauche et dans une boîte verticale, les éléments seront affichés du bas vers le haut. Voici un exemple :

- -

Exemple 5: Source Voir

- -
<hbox dir="reverse">
-  <button label="Gauche"/>
-  <button label="Centre"/>
-  <button label="Droite"/>
-</hbox>
-
- -

Parcourir les nœuds en utilisant l'ordonnancement des objets de boîte vous renverra les éléments dans leur ordre d'affichage en tenant compte des ajustements faits sur leur ordinaux. Ainsi, si vous changez l'ordinal d'un élément, celui-ci aura une position différente dans la boîte. Toutefois, le renversement de la direction n'affectera pas l'ordre de la boîte.

- -
-

Ensuite, nous verrons comment utiliser les objets XPCOM à partir de XUL et des scripts.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

- -

 

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes_des_arbres/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes_des_arbres/index.html" deleted file mode 100644 index 60924214cb..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/les_objets_bo\303\256tes_des_arbres/index.html" +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Les objets boîtes des arbres -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_objets_boîtes_des_arbres -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Tree_Box_Objects ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Cette section va décrire l'objet de boîte d'arbre qui est utilisé pour gérer l'affichage d'un arbre.

- -

À propos de l'objet de boîte

- -

Les objets de boîte ont été décrits dans une section précédente. L'objet de boîte d'arbre est un objet de boîte spécial utilisé spécifiquement pour les arbres (tree). La boîte d'arbre implémente l'interface TreeBoxObject.

- -

Rafraichissement de l'arbre

- -

Nous avons déjà vu la fonction rowCountChanged() de l'objet de boîte d'arbre dans la section précédente. Elle est employée pour indiquer qu'une ou plusieurs lignes de l'arbre ont été ajoutées ou enlevées. L'arbre rafraîchira l'affichage de la zone affectée. Vous n'avez pas besoin d'appeler la fonction rowCountChanged() lorsqu'une ligne a simplement été modifiée, comme par exemple lors du changement du libellé d'une cellule. Dans ce cas, d'autres fonctions d'affichage peuvent être utilisées. La plus simple est la fonction invalidateRow() qui rafraîchit l'affichage d'une ligne spécifique d'un arbre. L'arbre appellera la vue pour obtenir les données mises à jour et actualise son contenu à l'écran.

- -

Les autres fonctions de rafraichissement sont :

- - - -

Notez que le rafraichissement de l'affichage n'aura lieu qu'une fois les tâches des scripts achevées, car Mozilla n'effectue pas cette opération en tâche de fond.

- -

Défilement de l'arbre

- -

Vous pouvez également faire défiler l'arbre en utilisant quatre méthodes différentes, similaires à celles disponibles pour les menus déroulants. La fonction scrollToRow() peut être utilisée pour faire le défilement jusqu'à une ligne particulière. Voici un exemple simple :

- -

Exemple 1: Source Voir

- -
<script>
-function doScroll(){
-  var value = document.getElementById("tbox").value;
-  var tree = document.getElementById("thetree");
-
-  var boxobject = tree.boxObject;
-  boxobject.QueryInterface(Components.interfaces.nsITreeBoxObject);
-  boxobject.scrollToRow(value);
-}
-</script>
-
-<tree id="thetree" rows="4">
-  <treecols>
-    <treecol id="row" label="Ligne" primary="true" flex="1"/>
-  </treecols>
-  <treechildren>
-    <treeitem label="Ligne 0"/>
-    <treeitem label="Ligne 1"/>
-    <treeitem label="Ligne 2"/>
-    <treeitem label="Ligne 3"/>
-    <treeitem label="Ligne 4"/>
-    <treeitem label="Ligne 5"/>
-    <treeitem label="Ligne 6"/>
-    <treeitem label="Ligne 7"/>
-    <treeitem label="Ligne 8"/>
-    <treeitem label="Ligne 9"/>
-  </treechildren>
-</tree>
-
-<hbox align="center">
-  <label value="Défile jusqu'à la ligne :"/>
-  <textbox id="tbox"/>
-  <button label="Défile" oncommand="doScroll();"/>
-</hbox>
-
- -
Notez que nous utilisons l'attribut rows sur l'élément tree pour spécifier que quatre lignes seulement doivent être affichées à la fois. Ainsi, il est plus facile de se représenter l'exemple. Notez également que la première ligne commence à '0'.
- -

La fonction doScroll() récupère l'objet de boîte et appelle la fonction scrollToRow() avec comme argument la valeur saisie dans le champ texte. Vous noterez que l'objet de boîte d'arbre peut être obtenu de la même manière qu'avec d'autres objets de boîte, en utilisant la propriété boxObject. Nous devons cependant appeler QueryInterface() pour invoquer l'objet de boîte spécifique aux arbres. Les fonctions générales de l'objet de boîte sont également disponibles pour les arbres.

- -

Les méthodes supplémentaires de défilement incluent les fonctions scrollByLines(), scrollByPages(), et ensureRowIsVisible().

- -

La fonction scrollByLines() fait défiler vers le haut ou vers le bas d'un certain nombre de lignes ; un nombre positif fait défiler vers le bas, un nombre négatif fait défiler vers le haut. La fonction scrollByPages() fait défiler d'un certain nombre de pages. Elle est automatiquement appelée lorsque l'utilisateur appuie sur une des touches Page Up ou Page Down et que l'arbre a le focus. Une page est égale au nombre de lignes visibles. Par exemple, si un arbre affiche 10 lignes en même temps, une page sera équivalente à 10 lignes. C'est une méthode pratique dès lors que l'utilisateur redimensionne un arbre flexible : la taille de la page augmentera ou diminuera automatiquement sans avoir à la recalculer manuellement. Il n'est pas trop difficile de calculer cette taille manuellement car l'objet de boîte d'arbre fournit également une fonction getPageLength() qui retourne le nombre de lignes dans une page. Dans l'exemple de défilement ci-dessus, getPageLength() retournerait '4'.

- -
Notez que dans Firefox 1.0 et Mozilla 1.7, et les versions plus récentes, la fonction getPageLength() est plutôt appelée getPageCount(). Le nom a été changé en getPageLength() afin d'éviter les confusions avec une fonction qui ne retourne pas le nombre de pages d'un arbre, mais la taille de chaque page. Vous pouvez déterminer le nombre de pages en divisant le nombre total de lignes par la taille d'une page.
- -

La fonction ensureRowIsVisible() fera défiler l'arbre jusqu'à une ligne, comme avec la fonction scrollToRow(), mais seulement si la ligne n'est pas visible au moment de l'appel.

- -

Coordonnées d'une cellule

- -

Certaines des fonctions les plus intéressantes d'un objet de boîte d'arbre sont utilisées pour obtenir les parties d'un arbre se trouvant à des coordonnées spécifiques et vice versa.

- - - -
tree.boxObject.getRowAt( 50, 100 );
- -

Cet exemple retournera l'index de la ligne ayant une position horizontale de '50' pixels et verticale de '100' pixel. Naturellement, la coordonnée x semble ne pas avoir beaucoup de sens dès lors que la ligne occupe tout l'espace horizontal de l'arbre.

- -
Il est important de noter que les coordonnées sont mesurées à partir du coin supérieur gauche du document et non de l'arbre lui-même.
- -

Il est donc facile de passer à ces fonctions les coordonnées événementielles de l'objet event, comme avec la fonction getCellAt() dans l'exemple suivant.

- -

Exemple 2: Source Voir

- -
<script>
-function updateFields(event){
-  var row = {}, column = {}, part = {};
-  var tree = document.getElementById("thetree");
-
-  var boxobject = tree.boxObject;
-  boxobject.QueryInterface(Components.interfaces.nsITreeBoxObject);
-  boxobject.getCellAt(event.clientX, event.clientY, row, column, part);
-
-  if (column.value && typeof column.value != "string")
-    column.value = column.value.id;
-
-  document.getElementById("row").value = row.value;
-  document.getElementById("column").value = column.value;
-  document.getElementById("part").value = part.value;
-}
-</script>
-
-<tree id="thetree" flex="1" onmousemove="updateFields(event);">
-  <treecols>
-    <treecol id="utensil" label="Ustensiles" primary="true" flex="1"/>
-    <treecol id="count" label="Nombre" flex="1"/>
-  </treecols>
-  <treechildren>
-    <treeitem>
-      <treerow>
-        <treecell label="Fourchette"/>
-        <treecell label="5"/>
-      </treerow>
-    </treeitem>
-    <treeitem>
-      <treerow>
-        <treecell label="Couteau"/>
-        <treecell label="2"/>
-      </treerow>
-    </treeitem>
-    <treeitem>
-      <treerow>
-        <treecell label="Cuillère"/>
-        <treecell label="8"/>
-      </treerow>
-    </treeitem>
-  </treechildren>
-</tree>
-
-<label value="Ligne:"/>
-<label id="row"/>
-<label value="Colonne:"/>
-<label id="column"/>
-<label value="Type enfant:"/>
-<label id="part"/>
-
- -

La fonction getCellAt() prend cinq arguments, les coordonnées où regarder et trois autres paramètres. Un argument par référence est utilisé parce que la fonction a besoin de retourner plusieurs valeurs. Vous verrez de nombreuses interfaces utilisant des arguments par référence avec les objets disponibles. Ces arguments sont marqués avec un préfixe 'out'. Pour ceux-ci, vous devez transmettre un objet vide et la fonction remplira sa propriété value avec la valeur adéquate.

- -

Les trois paramètres par référence seront renseignés avec la ligne, la colonne et le type enfant. L'objet row contient l'index de la ligne survolée par la souris au moment où la fonction a été appelée par un événement mousemove, avec les coordonnées de cet événement. Si les coordonnées ne sont pas au-dessus d'une ligne de l'arbre, la valeur row.value sera égale à '-1'. La variable column est un objet column tel que défini dans Mozilla 1.8 et supérieur. Dans les versions plus anciennes, les colonnes étaient identifiées avec une chaîne de caractères (string) : l'identifiant id de la colonne. Avec les versions plus récentes, un objet de colonne spécifique existe et permet de réaliser des requêtes sur les données en colonne.

- -

La ligne suivante est utilisée pour que l'exemple ci-dessus puisse fonctionner avec toutes les versions.

- -
if (column.value && typeof column.value != "string")
-  column.value = column.value.id;
-
- -

Si la colonne est une chaîne de caractères, nous tournons sur Mozilla 1.7 ou inférieur, mais pour les versions récentes, nous obtenons l'identifiant de la colonne à partir de l'objet column. Si vous écrivez du code pour des versions multiples, vous devrez effectuer un test comme indiqué ci-avant.

- -

Le dernier argument de la fonction getCellAt() est le type enfant renseigné avec une chaîne dépendante de la partie de la cellule pointée par les coordonnées. Si vous déplacez la souris dans l'exemple précédent, vous noterez que le libellé passe de 'text' à 'cell'. La valeur 'text' indique la zone où le texte est dessiné et la valeur 'cell' indique la zone autour du texte ; par exemple, la marge gauche où sont habituellement dessinées les poignées ouvrantes et fermantes. Toutefois, s'il y avait une poignée, la valeur aurait plutôt été 'twisty'. Cette information pratique permet de déterminer si l'utilisateur a cliqué sur une poignée plutôt que sur une autre partie de la ligne. En fait, lorsque l'utilisateur double-clique sur la poignée, le code natif sous-jacent utilise cette méthode. La dernière valeur qui peut être retournée est 'image' si une image se trouve dans la cellule et que les coordonnées correspondent à celles de cette image. Bien entendu, dans la plupart des cas, vous ne désirez pas connaître quelle partie de la cellule pointe les coordonnées, mais seulement la ligne et la colonne concernées.

- -

Pour inverser la recherche et obtenir les coordonnées spécifiques d'une cellule, utilisez la fonction getCoordsForCellItem(). Elle prend sept arguments tels que décrits ci-dessous.

- -
var x = {}, y = {}, width = {}, height = {};
-if (typeof tree.columns != "undefined") column = tree.columns[column];
-tree.boxObject.getCoordsForCellItem( row, column, part, x, y, width, height );
-
- -

Les arguments 'row', 'column' et 'part' sont similaires à ceux retournés par la fonction getCellAt(). De nouveau, le type de l'argument 'column' dépend de la version que vous utilisez, soit une chaîne de caractères (string), soit un objet column. Le type de la zone de la cellule peut être utilisé pour obtenir les coordonnées, soit du texte, soit de toute la cellule, soit de la poignée, soit de l'image dans la cellule. Les mêmes valeurs que la fonction getCellAt() sont utilisées. La fonction getCoordsForCellItem() retourne par le biais des arguments passés en référence les coordonnées horizontales (x) et verticales (y), accompagnées de la largeur et la hauteur.

- -
-

Par la suite, nous verrons comment RDF peut être utilisé automatiquement pour peupler des arbres et d'autres éléments.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/les_scripts_d'installation/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/les_scripts_d'installation/index.html deleted file mode 100644 index 0f5213a192..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/les_scripts_d'installation/index.html +++ /dev/null @@ -1,147 +0,0 @@ ---- -title: Les scripts d'installation -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Les_scripts_d'installation -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Install_Scripts ---- -

 

- -
-

« PrécédentSuivant »

-
- -
NdT : Attention, cette section décrit le mécanisme XPInstall propre à la suite Mozilla et à des versions anciennes de Mozilla Firefox. Pour les versions récentes de Mozilla Firefox, ce mode d'installation n'est plus le même, mais il n'est pas encore décrit dans ce tutoriel. Voir comment faire des extensions pour firefox sur xulfr.org.
- -

Cette section décrit le script d'installation.

- -

Création d'un script d'installation

- -
Note : Pour des extensions Firefox, install.js n'est plus utilisé. Vous devez utiliser install.rdf à la place.
- -

Vous voulez généralement avoir une forme de contrôle sur vos processus d'installation. Par exemple, vous pouvez souhaiter vérifier les versions des fichiers existants et n'installer que des mises à jour, ou peut être souhaiteriez-vous simplement appliquer des corrections. Le script d'installation est même assez souple pour vous permettre de désinstaller des fichiers. Pour ces raisons, les programmes d'installation incluent un script propre à cette tâche.

- -

Le script d'installation doit s'appeler 'install.js' et doit être placé à la racine de l'archive de l'installeur. Ce script contient du code JavaScript qui appelle un certain nombre de fonctions d'installation.

- -

Dans un document HTML ou un document XUL, l'objet window est l'objet global racine. Il signifie que vous pouvez appeler les méthodes de l'objet window sans les faire précéder de leur qualificateur, ainsi window.open() peut simplement être écrit open(). Dans un script d'installation, il n'y a pas de fenêtre associée, toutefois l'objet global sera l'objet Install qui contient un certain nombre de fonctions pour personnaliser le processus d'installation. Certaines fonctions de l'objet global Install seront décrites ci dessous.

- -

Le script d'installation doit suivre les étapes suivantes :

- -
    -
  1. Initialiser l'installation en précisant le paquetage et sa version.
  2. -
  3. Utiliser les fonctions d'installation pour spécifier les fichiers et les répertoires qui doivent être installés. Vous pouvez aussi spécifier les fichiers à déplacer ou à effacer.
  4. -
  5. Démarrer le processus qui installe les fichiers nécessaires.
  6. -
- -

Il est important de signaler que pendant l'étape numéro deux, vous n'indiquez seulement quels sont les fichiers qui seront installés et quelles autres opérations vous souhaitez réaliser. Aucun fichier ne sera copié avant l'étape trois. En procédant de la sorte, vous pouvez facilement définir plusieurs fichiers à installer, et en cas d'erreurs, vous pouvez annuler tout le processus d'installation sans modifier le système de l'utilisateur.

- -

Le registre d'extensions

- -

Mozilla tient à jour un fichier qui est un registre de toutes les extensions actuellement installées. Les extensions incluent les nouveaux paquetages chrome, les thèmes graphiques et les plugins. Lorsqu'une nouvelle extension est installée, le registre est mis à jour. Le registre stocke aussi l'ensemble des informations des fichiers et de leurs versions sur les extensions installées. De cette manière, il est aisé de vérifier si une version de votre extension est déjà présente et de la mettre à jour seulement si nécessaire.

- -

Le registre d'extensions fonctionne presque comme la base de registre de Windows. Il consiste en une série hiérarchisée de clefs et de valeurs. Vous n'avez pas besoin d'en savoir plus à son sujet pour créer des applications XUL à moins que vous ne créiez vos propres composants XPCOM.

- -

Ce que vous devez savoir pour une installation est que le registre stocke une série d'informations sur votre application, tels que la liste des fichiers et leurs versions. Toutes ces informations sont stockées dans une clef (et à l'intérieur, des sous clefs) que vous fournissez dans le script d'installation (dans l'étape 1 mentionnée ci dessus).

- -

Cette clef est structurée comme une arborescence de répertoire comme ceci :

- -
/Auteur/Nom du Paquetage
- -

Remplacez le mot 'Auteur' par votre nom et remplacez le 'Nom du Paquetage' avec le nom de votre paquetage que vous installez. Par exemple :

- -
/Xulplanet/Find Files
-
-/Netscape/Personal Security Manager
- -

Le premier exemple est celui utilisé pour notre exemple de boite de dialogue de recherche de fichiers. Le second est la clef utilisée pour le gestionnaire de données privées.

- -

Initialisation de l'installation

- -

L'objet Install a une fonction, initInstall(), servant à initialiser l'installation. Elle doit être appelée au lancement de votre script d'installation. La syntaxe de cette fonction est la suivante :

- -
initInstall( packageName , regPackage , version );
-
-'''Exemple:'''
-
-initInstall("Find Files","/Xulplanet/Find Files","0.5.0.0");
- - - -

Ensuite, nous devons indiquer le répertoire où seront installés les fichiers. Il y a deux façons de le faire.

- - - -

La fonction setPackageFolder() assigne un répertoire d'installation. Pour l'exemple de recherche de fichiers, vous installerons les fichiers dans le répertoire chrome (nous pourrions aussi bien les mettre autre part). Cette fonction setPackageFolder() ne requiert qu'un argument, le répertoire d'installation. Pour une compatibilité maximale, vous ne devez pas spécifier un répertoire absolu. Au lieu de cela, vous utiliserez un identifiant d'un répertoire connu et pointerez sur un de ses sous répertoires. Ainsi, si votre application a besoin d'installer quelques librairies systèmes, vous n'avez pas besoin de connaître le nom de ces répertoires.

- -

Les identifiants de sélection de répertoires sont expliqués sur la page de XULPlanet référence. Pour le répertoire chrome, l'identifiant est 'Chrome'. La fonction getFolder() peut être utilisée pour récupérer un de ces répertoires spéciaux. Cette fonction prend deux arguments, le premier étant l'identifiant et le second étant un sous répertoire. Par exemple :

- -
findDir = getFolder("Chrome","findfile"); setPackageFolder(findDir);
- -

Ici, nous récupérons l'emplacement du sous répertoire 'findfile' dans répertoire Chrome et nous le passons directement à la fonction setPackageFolder(). Le second argument de la fonction getFolder() est le sous répertoire qui servira à l'installation de l'exemple et qui n'a pas besoin d'avoir été créé d'abord. Vous pouvez ignorer cet argument si vous n'en avez pas besoin.

- -

Marquage des fichiers d'installation

- -

Ensuite, vous devez indiquer quels seront les fichiers à installer. Deux fonctions doivent être employées pour cela, addDirectory() et addFile(). La fonction addDirectory() précise à l'installeur un répertoire de l'archive XPI (et tout son contenu) qui devra être installé à un emplacement particulier. La fonction addFile() est similaire mais seulement pour un fichier.

- -

Les deux fonctions addDirectory() et addFile() ont plusieurs paramétrages. Le plus simple ne prend qu'un seul argument qui est le répertoire servant à l'installation.

- -
addDirectory ( dir );
-addFile ( dir );
-
-Exemple:
-
-addDirectory("findfile");
-
- -

L'exemple ci dessus spécifie que le répertoire 'findfile' de l'archive d'installation est à installer. Nous pouvons appeler ces fonctions autant de fois que nécessaire pour les autres fichiers.

- -

Ensuite, nous voulons enregistrer les fichiers de notre exemple dans le registre chrome afin de pouvoir les appeler par une URL chrome. La fonction registerChrome() est utilisée pour cela. Elle prend deux arguments, le premier étant le type d'enregistrement chrome ('content' pour du contenu, 'skin' pour du thème graphique, ou 'locale' pour la localisation), le second pointant vers l'emplacement du fichier manifest 'contents.rdf' à enregistrer. Comme notre exemple de recherche de fichiers contient les trois types, la fonction registerChrome() devra être appelée trois fois.

- -
registerChrome(Install.CONTENT | Install.DELAYED_CHROME, getFolder(findDir, "content"));
-registerChrome(Install.SKIN | Install.DELAYED_CHROME, getFolder(findDir, "skin"));
-registerChrome(Install.LOCALE | Install.DELAYED_CHROME, getFolder(findDir, "locale"));
-
- -

L'indicateur DELAYED_CHROME sert à indiquer que le chrome devra être installé au prochain lancement de Mozilla.

- -

Finalisation de l'installation

- -

Les fonctions addDirectory() et addFile() ne copient aucun fichier. Elles ne servent qu'à pointer quels fichiers devront être installés. De la même manière, la fonction registerChrome() ne fait que pointer quel chrome devra être enregistré. Pour achever le processus et commencer la copie des fichiers, appelez la fonction performInstall() sans argument.

- -
-

Le script final pour installer notre exemple de recherche de fichiers est le suivant :

- -

Exemple 1: Source

- -
initInstall("Find Files","/Xulplanet/Find Files","0.5.0.0");
-
-findDir = getFolder("Chrome","findfile");
-setPackageFolder(findDir);
-
-addDirectory("findfile");
-
-registerChrome(Install.CONTENT | Install.DELAYED_CHROME, getFolder(findDir, "content"));
-registerChrome(Install.SKIN | Install.DELAYED_CHROME, getFolder(findDir, "skin"));
-registerChrome(Install.LOCALE | Install.DELAYED_CHROME, getFolder(findDir, "locale"));
-
-performInstall();
-
-
- -
-

Dans la section suivantes, nous verrons quelques fonctions supplémentaires pour l'installation.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/localisation/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/localisation/index.html deleted file mode 100644 index 3bc67299f8..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/localisation/index.html +++ /dev/null @@ -1,328 +0,0 @@ ---- -title: Localisation -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Localisation -tags: - - Localisation - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Localization ---- -

 

- -
-

« PrécédentSuivant »

-
- -

XUL et XML fournissent des entités qui sont une solution permettant la localisation.

- -

Entités

- -

De nombreuses applications sont construites de telle sorte que la traduction de l'interface en différentes langues soit le plus simple possible. En général, une table de chaînes de caractères est créée pour chaque langue. Au lieu de la coder directement dans l'application, chaque partie de texte est seulement une référence dans la table de chaînes. XML fournit des entités qui peuvent être utilisées dans un but similaire.

- -

Vous devriez déjà être familier avec les entités si vous avez déjà écrit en HTML. Les codes &lt; et &gt; sont des exemples d'entités qui peuvent être utilisées pour placer les signes "inférieur" et "supérieur" dans le texte. XML a une syntaxe qui autorise la déclaration de vos propres entités. Vous pouvez les utiliser de manière à ce que l'entité soit remplacée par sa valeur qui peut être une chaîne de caractères. Des entités peuvent être employées toutes les fois où du texte est utilisé, y compris pour les valeurs des attributs. L'exemple ci-dessous décrit l'utilisation d'une entité dans un bouton.

- -
<button label="&findLabel;"/>
- -

Le texte qui apparaîtra sur le libellé sera la valeur de l'entité  &findlabel;

- -

Un fichier contenant les déclarations d'entités pour chaque langue supportée est créé. En français, on affectera probablement la valeur de texte 'Rechercher' à l'entité &findlabel;

- -

Les fichiers DTD

- -

 

- -

Les entités sont déclarées dans des fichiers DTD (Document Type Declaration). Ces types de fichiers sont en général utilisés pour déclarer la syntaxe et la sémantique d'un fichier XML particulier, mais ils autorisent aussi la déclaration d'entités. Dans le système chrome de Mozilla, vous trouverez les fichiers DTD dans le sous-répertoire locales. Vous devriez normalement avoir un fichier DTD (avec un extension dtd) par fichier XUL.

- -

 

- -

Si vous regardez dans le répertoire chrome, vous devriez voir une archive pour votre langue (fr.jar par défaut pour le français). Vous pouvez avoir les fichiers de locales dans des langues multiples, par exemple, Anglais US (en-US) et Danois (dk). Dans ces archives, vous trouverez les fichiers qui contiennent les traductions pour chaque fenêtre. La structure de l'archive est très similaire à la structure des répertoires utilisée pour les thèmes.

- -

 

- -

Dans les archives, vous placerez les fichiers DTD, dans lesquels vous déclarez les entités. Normalement vous aurez un fichier DTD par fichier XUL, en général avec le même nom de fichier excepté qu'il aura une extension .dtd. Donc pour la fenêtre de dialogue de recherche de fichiers, vous aurez besoin d'un fichier nommé findfile.dtd.

- -

 

- -

Pour les fichiers chromes non installés, vous pouvez juste mettre le fichier DTD dans le même répertoire que le fichier XUL.

- -
Note : Vous devez encoder les fichiers en UTF-8 à cause des caractères non ASCII. De ce fait, vous devez les sauvegarder au format UTF-8 (sans BOM). Pour plus d'information, consultez Mozilla language Packs.
- -

Une fois que vous avez créé le fichier DTD pour votre fichier XUL, vous aurez besoin d'ajouter une ligne dans le fichier XUL qui indiquera que vous voulez utilisez le fichier DTD. Sinon, des erreurs seront générées car il ne sera pas capable de trouver les entités. Il vous suffit d'ajouter une ligne de la forme suivante vers le début du fichier XUL :

- -
<!DOCTYPE window SYSTEM "chrome://findfile/locale/findfile.dtd">
- -

Cette ligne spécifie que l'URL indiquée est à utiliser en tant que fichier DTD. Dans ce cas, nous avons déclaré que nous voulons utiliser le fichier DTD findfile.dtd. Cette ligne est en général placée juste avant l'élément window.

- -

Vous devez également ajouter la localisation dans le fichier chrome.manifest, par exemple :

- -
locale findfile fr locale/
-
- -

Déclarer les entités

- -

Les entités sont déclarées en utilisant une syntaxe simple vue ci-dessous :

- -
<!ENTITY findLabel "Rechercher">
- -

Cet exemple crée une entité avec le nom 'findLabel' et la valeur 'Rechercher'. Elle signifie que quelque soit l'endroit où le texte '&findLabel;' apparaîtra dans le fichier XUL, il sera remplacé par le texte 'Rechercher'. Notez que les déclarations d'entités n'ont pas de slash terminal. Dans le fichier DTD d'une autre langue, le texte pour cette langue sera utilisé à la place.

- -
pour l'anglais:
-<!ENTITY findLabel "Find">
-
- -

Par exemple, le texte suivant :

- -
<description value="&findLabel;"/>
- -

est converti en :

- -
version française:
-<description value="Rechercher"/>
-
-version anglaise
-<description value="Find"/>
-
- -

Vous devrez déclarer une entité pour chaque libellé ou chaîne de caractères que vous utiliserez dans votre interface. Vous ne devriez plus avoir de texte affiché directement dans le fichier XUL.

- -

En plus d'utiliser les entités pour les libellés, vous devriez les utiliser pour chaque valeur qui pourrait être différente selon la langue ; les touches d'accès et les raccourcis claviers par exemple.

- -
XUL
-<menuitem label="&undo.label;" accesskey="&undo.key;"/>
-DTD
-<!ENTITY undo.label "Annuler">
-<!ENTITY undo.key "u">
-
- -

L'exemple ci-dessus utilise deux entités, une pour le libellé de l'élément de menu Annuler et une seconde pour la touche d'accès.

- -
-

Modification de la boîte de dialogue de recherche de fichiers

- -

Jetons un œil sur la manière dont nous pourrions utiliser tout ce que nous avons appris en modifiant la boîte de dialogue de recherche de fichiers de manière à ce qu'elle utilise un fichier DTD pour toutes ses chaînes de caractères. La totalité du fichier XUL est décrite ci-dessous avec les changements décrits en rouge.

- -
<?xml version="1.0"?>
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="findfile.css" type="text/css"?>
-
-<!DOCTYPE window SYSTEM "chrome://findfile/locale/findfile.dtd">
-
-<window
-  id="findfile-window"
-  title="&findWindow.title;"
-  persist="screenX screenY width height"
-  orient="horizontal"
-  onload="initSearchList()"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<script src="findfile.js"/>
-
-<popupset>
-   <menupopup id="editpopup">
-     <menuitem label="&cutCmd.label;" accesskey="&cutCmd.accesskey;"/>
-     <menuitem label="&copyCmd.label;" accesskey="&copyCmd.accesskey;"/>
-     <menuitem label="&pasteCmd.label;" accesskey="&pasteCmd.accesskey;" disabled="true"/>
-   </menupopup>
-</popupset>
-
-<keyset>
-   <key id="cut_cmd" modifiers="accel" key="&cutCmd.commandkey;"/>
-   <key id="copy_cmd" modifiers="accel" key="&copyCmd.commandkey;"/>
-   <key id="paste_cmd" modifiers="accel" key="&pasteCmd.commandkey;"/>
-   <key id="close_cmd" keycode="VK_ESCAPE" oncommand="window.close();"/>
-</keyset>
-
-<vbox flex="1">
-
- <toolbox>
-
-  <menubar id="findfiles-menubar">
-    <menu id="file-menu" label="&fileMenu.label;"
-        accesskey="&fileMenu.accesskey;">
-      <menupopup id="file-popup">
-        <menuitem label="&openCmd.label;"
-                  accesskey="&openCmd.accesskey;"/>
-        <menuitem label="&saveCmd.label;"
-                  accesskey="&saveCmd.accesskey;"/>
-        <menuseparator/>
-        <menuitem label="&closeCmd.label;"
-                  accesskey="&closeCmd.accesskey;" key="close_cmd" oncommand="window.close();"/>
-      </menupopup>
-    </menu>
-    <menu id="edit-menu" label="&editMenu.label;"
-          accesskey="&editMenu.accesskey;">
-      <menupopup id="edit-popup">
-        <menuitem label="&cutCmd.label;"
-                  accesskey="&cutCmd.accesskey;" key="cut_cmd"/>
-        <menuitem label="&copyCmd.label;"
-                  accesskey="&copyCmd.accesskey;" key="copy_cmd"/>
-        <menuitem label="&pasteCmd.label;"
-                  accesskey="&pasteCmd.accesskey;" key="paste_cmd" disabled="true"/>
-      </menupopup>
-    </menu>
-  </menubar>
-
-  <toolbar id="findfiles-toolbar">
-    <toolbarbutton id="opensearch" label="&openCmdToolbar.label;"/>
-    <toolbarbutton id="savesearch" label="&saveCmdToolbar.label;"/>
-  </toolbar>
- </toolbox>
-
- <tabbox>
-  <tabs>
-    <tab label="&searchTab;" selected="true"/>
-    <tab label="&optionsTab;"/>
-  </tabs>
-
-  <tabpanels>
-
-   <tabpanel id="searchpanel" orient="vertical" context="editpopup">
-
-   <description>
-     &findDescription;
-   </description>
-
-   <spacer class="titlespace"/>
-
-   <groupbox orient="horizontal">
-     <caption label="&findCriteria;"/>
-
-     <menulist id="searchtype">
-       <menupopup>
-         <menuitem label="&type.name;"/>
-         <menuitem label="&type.size;"/>
-         <menuitem label="&type.date;"/>
-       </menupopup>
-     </menulist>
-   <spacer class="springspace"/>
-     <menulist id="searchmode">
-       <menupopup>
-         <menuitem label="&mode.is;"/>
-         <menuitem label="&mode.isnot;"/>
-       </menupopup>
-     </menulist>
-   <spacer class="springspace"/>
-
-   <menulist id="find-text" flex="1"
-             editable="true"
-             datasources="file:///mozilla/recents.rdf"
-             ref="http://www.xulplanet.com/rdf/recent/all">
-     <template>
-       <menupopup>
-         <menuitem label="rdf:http://www.xulplanet.com/rdf/recent#Label" uri="rdf:*"/>
-       </menupopup>
-     </template>
-   </menulist>
-
-   </groupbox>
-
-  </tabpanel>
-
-  <tabpanel id="optionspanel" orient="vertical">
-     <checkbox id="casecheck" label="&casesensitive;"/>
-     <checkbox id="wordscheck" label="&matchfilename;"/>
-    </tabpanel>
-
-  </tabpanels>
- </tabbox>
-
- <tree id="results" style="display: none;" flex="1">
-   <treecols>
-     <treecol id="name" label="&results.filename;" flex="1"/>
-     <treecol id="location" label="&results.location;" flex="2"/>
-     <treecol id="size" label="&results.size;" flex="1"/>
-   </treecols>
-
-   <treechildren>
-     <treeitem>
-       <treerow>
-         <treecell label="mozilla"/>
-         <treecell label="/usr/local"/>
-         <treecell label="&bytes.before;2520&bytes.after;"/>
-       </treerow>
-     </treeitem>
-   </treechildren>
- </tree>
-
- <splitter id="splitbar" resizeafter="grow" style="display: none;"/>
-
- <spacer class="titlespace"/>
-
- <hbox>
-   <progressmeter id="progmeter" value="50%" style="display: none;"/>
-   <spacer flex="1"/>
-   <button id="find-button" label="&button.find;"
-           oncommand="doFind()"/>
-   <button id="cancel-button" label="&button.cancel;"
-           oncommand="window.close();"/>
- </hbox>
-</vbox>
-
-</window>
-
- -

Chaque chaîne de caractères a été remplacée par une référence à une entité. Un fichier DTD a été inclus au début du fichier XUL. Chaque entité qui a été ajoutée doit être déclarée dans le fichier DTD. La fenêtre ne sera pas affichée si une entité non déclarée est trouvée dans le fichier XUL.

- -

Notez que le nom de l'entité n'est pas important. Dans l'exemple ci-dessus, les mots dans les entités ont été séparés par des points. Vous n'avez pas à faire ça. Les noms des entités ici suivent des conventions similaires au reste du code de Mozilla.

- -

Vous aurez noté que le texte '2520 octets' a été remplacé par deux entités. En fait, la structure de la phrase pourrait être différente dans une autre langue. Par exemple, le nombre pourrait apparaître après l'équivalent du mot 'octets' au lieu d'avant. Bien sûr, il est beaucoup plus compliqué de vouloir l'affichage des Ko ou des Mo selon les besoins.

- -

Les touches d'accès et les raccourcis claviers ont aussi été traduits dans les entités car ils seront peut être différents dans une autre langue.

- -

Voici le fichier DTD (findfile.dtd) :

- -
<!ENTITY findWindow.title "Recherche de fichiers">
-<!ENTITY fileMenu.label "Fichier">
-<!ENTITY editMenu.label "Edition">
-<!ENTITY fileMenu.accesskey "f">
-<!ENTITY editMenu.accesskey "e">
-<!ENTITY openCmd.label "Ouvrir une recherche...">
-<!ENTITY saveCmd.label "Sauvegarder une recherche...">
-<!ENTITY closeCmd.label "Fermer">
-<!ENTITY openCmd.accesskey "o">
-<!ENTITY saveCmd.accesskey "s">
-<!ENTITY closeCmd.accesskey "f">
-<!ENTITY cutCmd.label "Couper">
-<!ENTITY copyCmd.label "Copier">
-<!ENTITY pasteCmd.label "Coller">
-<!ENTITY cutCmd.accesskey "p">
-<!ENTITY copyCmd.accesskey "c">
-<!ENTITY pasteCmd.accesskey "l">
-<!ENTITY cutCmd.commandkey "X">
-<!ENTITY copyCmd.commandkey "C">
-<!ENTITY pasteCmd.commandkey "V">
-<!ENTITY openCmdToolbar.label "Ouvrir">
-<!ENTITY saveCmdToolbar.label "Sauvegarder">
-<!ENTITY searchTab "Rechercher">
-<!ENTITY optionsTab "Options">
-<!ENTITY findDescription "Entrez votre critère de recherche ci-dessous et appuyer sur le bouton Rechercher.">
-<!ENTITY findCriteria "Critère de recherche">
-<!ENTITY type.name "Nom">
-<!ENTITY type.size "Taille">
-<!ENTITY type.date "Date de modification">
-<!ENTITY mode.is "Est">
-<!ENTITY mode.isnot "N'est pas">
-<!ENTITY casesensitive "Recherche sensible à la casse">
-<!ENTITY matchfilename "Rechercher un nom entier">
-<!ENTITY results.filename "Nom de fichier">
-<!ENTITY results.location "Emplacement">
-<!ENTITY results.size "Taille">
-<!ENTITY bytes.before "">
-<!ENTITY bytes.after "octets">
-<!ENTITY button.find "Rechercher">
-<!ENTITY button.cancel "Annuler">
-
- -

Maintenant pour changer de langue, tout ce que vous avez à faire est de créer un nouveau fichier DTD. En utilisant le système chrome pour ajouter le fichier DTD dans une langue différente, le même fichier XUL peut être utilisé pour toutes les langues.

-
- -
-

Dans la prochaine section, nous regarderons les fichiers de propriétés.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/manipulation_de_listes/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/manipulation_de_listes/index.html deleted file mode 100644 index 12a2c19574..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/manipulation_de_listes/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Manipulation de listes -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Manipulation_de_listes -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Manipulating_Lists ---- -

 

-
-

« PrécédentSuivant »

-
-

La boîte de liste XUL fournit un certain nombre de méthodes spécialisées.

-

Manipulation d'une liste

-

L'élément listbox fournit de nombreuses méthodes pour rechercher et manipuler ses items. Bien que les boîtes de liste puissent être manipulées en utilisant les fonctions standard de DOM, il est recommandé d'employer les fonctions spécialisées de listbox autant que possible. Ces fonctions sont plus simples et feront correctement leur travail.

-

La fonction appendItem() est utilisée pour ajouter un nouvel item à la fin d'une liste. Elle est similaire à la fonction appendChild() du DOM sauf qu'elle prend un libellé texte, et que vous n'avez pas à vous soucier où placer votre item dans la structure de la liste. Voici un exemple :

-

Exemple 1: Source Voir

-
<script>
-function addItem(){
-  document.getElementById('laliste').appendItem("Jeudi", "jeu");
-}
-</script>
-
-<listbox id="laliste"/>
-
-<button label="Ajouter" oncommand="addItem();"/>
-
-

La fonction appendItem() prend deux arguments, le libellé, dans l'exemple 'Jeudi', et une valeur 'jeu'. Les deux arguments correspondent aux attributs label et value dans l'élément listitem. L'attribut value est optionnel et sert à affecter à un item une valeur que vous pouvez réutiliser ensuite dans un script.

-

De même, il existe les fonctions insertItemAt() et removeItemAt(), qui ajoutent respectivement un nouvel item et suppriment un item existant. La syntaxe est la suivante :

-
list.insertItemAt(3, "Jeudi", "jeu");
-list.removeItemAt(3);
-
-

La fonction insertItemAt() prend un argument supplémentaire, la position pour insérer le nouvel item. Le nouvel item est inséré à cet index. Ainsi, dans l'exemple, le nouvel item sera ajouté à la position 3 et l'item qui avait cette position aura maintenant l'index 4. Rappelez-vous que le premier item est 0. La fonction removeItemAt() supprimera l'item à un index spécifique.

-

Ces trois méthodes sont également disponibles pour plusieurs autres éléments XUL et fonctionnent de la même manière. En fait, ces méthodes font parties de l'interface nsIDOMXULSelectControlElement donc tous les éléments XUL qui implémentent cette interface héritent de ces méthodes. Les éléments menulist, radiogroup et tabs en font partie. Par exemple, pour ajouter un nouvel item à un menulist, vous pouvez employer la même syntaxe qu'une listbox. Le bon type d'élément sera ajouté dans chaque cas.

-

Sélection de liste

-

L'interface nsIDOMXULSelectControlElement fournit deux propriétés supplémentaires, selectedIndex et selectedItem. La première renvoie l'index de l'item sélectionné tandis que la seconde renvoie l'élément sélectionné. Par exemple, la valeur de retour de selectedItem sera le menuitem sélectionné. Si aucun item n'est sélectionné, selectedIndex retournera '-1', et selectedItem renverra 'null'.

-

Récupérer l'item sélectionné

-

Ces deux propriétés sont généralement inspectées durant un événement de sélection, comme dans l'exemple suivant :

-

Exemple 2: Source Voir

-
<listbox id="thelist" onselect="alert(this.selectedItem.label);">
-  <listitem label="Petit"/>
-  <listitem label="Moyen"/>
-  <listitem label="Grand"/>
-</listbox>
-
-

L'événement de sélection est exécuté par une listbox quand un item de la liste est sélectionné. Le gestionnaire affiche ici une alerte contenant le libellé de l'item sélectionné dans la liste. Puisque l'événement de sélection s'est exécuté, nous pouvons supposer qu'un item est sélectionné. Dans d'autres cas, vous devrez vous assurer que selectedItem n'est pas 'null' avant de poursuivre.

-

L'événement de sélection est également exécuté quand un bouton radio dans un radiogroup est sélectionné et quand un onglet est sélectionné dans l'élément tabs. Cependant, les menulists ne génèrent pas d'événement de sélection ; vous pouvez écouter l'événement "command" à la place pour traiter la sélection d'un item.

-

Pour l'élément tabs, il est souvent plus commode d'employer les fonctions de l'élément tabbox. Il a aussi une fonction selectedIndex qui renverra l'index de l'onglet sélectionné. Cependant, pour récupérer l'item sélectionné, utilisez plutôt la fonction selectedTab de tabbox. Ou alors, utilisez la fonction selectedPanel pour récupérer la page d'onglet sélectionnée, ce qui renvoie le contenu associé à l'onglet.

-

Modifier la sélection

-

Toutes les propriétés de sélection décrites ci-dessus peuvent également se voir assigner une nouvelle valeur pour modifier la sélection. Dans l'exemple suivant, la propriété selectedIndex de l'élément radiogroup est modifiée avec la valeur entrée dans un champ de saisie. Ce code n'est cependant pas performant ; par exemple, il ne vérifie pas si la valeur entrée est hors limite. Il est conseillé d'ajouter ce genre de vérification d'erreur.

-

Exemple 3: Source Voir

-
<script>
-function doSelect(){
-  var val = document.getElementById('number').value;
-  val = Number(val);
-  if (val != null)
-    document.getElementById('level').selectedIndex = val - 1;
-}
-</script>
-
-<hbox align="center">
-  <label value="Entrez un nombre compris entre 1 et 3 :"/>
-  <textbox id="number"/>
-  <button label="Sélectionnez" oncommand="doSelect();"/>
-</hbox>
-
-<radiogroup id="level">
-  <radio label="Excellent"/>
-  <radio label="Bon"/>
-  <radio label="Mauvais"/>
-</radiogroup>
-
-

Les boîtes de liste supportent aussi les sélections multiples et les fonctions de l'interface nsIDOMXULMultiSelectControlElement. Cette interface fournit un certain nombre de fonctions dédiées pour contrôler la sélection multiple. Par exemple, la propriété selectedItems contient une liste des items qui sont sélectionnés, alors que la propriété selectedCount contient le nombre d'items sélectionnés. En général, vous utiliserez ces propriétés pour parcourir la liste et y effectuer quelques opérations sur chaque item. Faites attention lorsque vous parcourez les items sélectionnés de la liste ; si vous modifiez les items dans la liste pendant que vous les parcourez, la liste sera modifiée et les propriétés de sélection pourraient retourner des valeurs différentes. C'est une raison pour laquelle il est utile de manipuler la liste par item plutôt que par l'index.

-

Effacer des items sélectionnés

-

L'exemple suivant montre une méthode correcte de suppression des items sélectionnés :

-

Exemple 4: Source Voir

-
<script>
-function deleteSelection(){
-  var list = document.getElementById('thelist');
-  var count = list.selectedCount;
-  while (count--){
-    var item = list.selectedItems[0];
-    list.removeItemAt(list.getIndexOfItem(item));
-  }
-}
-</script>
-
-<button label="Supprimer" oncommand="deleteSelection();"/>
-
-<listbox id="thelist" seltype="multiple">
-  <listitem label="Cheddar"/>
-  <listitem label="Cheshire"/>
-  <listitem label="Edam"/>
-  <listitem label="Gouda"/>
-  <listitem label="Havartie"/>
-</listbox>
-
-

À l'intérieur de la boucle while,

- -

L'interface nsIDOMXULMultiSelectControlElement fournit également des méthodes pour modifier les items sélectionnés. Par exemple, la fonction addItemToSelection() ajoute un nouvel item à la liste des items sélectionnés, sans vider la sélection existante. La fonction removeItemFromSelection() supprime un seul item dans la sélection.

-

Défilement de liste

-

Si la boîte de liste contient plus de lignes qu'elle ne peut en afficher, une barre de défilement apparaîtra pour permettre à l'utilisateur de faire défiler la liste. La position du défilement peut être ajustée en utilisant quelques méthodes de listbox.

-

La méthode scrollToIndex() fait défiler jusqu'à une ligne donnée. Cette boîte de liste défilera jusqu'à ce que la ligne soit la première ligne visible, à moins que la ligne ne soit proche de la fin de la liste des items. La méthode ensureIndexIsVisible() est similaire puisqu'elle fait défiler la liste pour afficher une ligne, mais cette méthode ne défilera pas si l'item est déjà visible. Ainsi, la première fonction est utilisée pour faire défiler jusqu'à une ligne précise alors que la deuxième est utilisée pour s'assurer que la ligne soit visible. Il y a également ensureItemIsVisible() qui nécessite un item en argument au lieu d'un index. Comparez l'effet de ces deux fonctions à des positions de défilement différentes dans cet exemple :

-

Exemple 5: Source Voir

-
<button label="scrollToIndex"
-           oncommand="document.getElementById('thelist').scrollToIndex(4);"/>
-<button label="ensureIndexIsVisible"
-           oncommand="document.getElementById('thelist').ensureIndexIsVisible(4);"/>
-
-<listbox id="thelist" rows="5">
-  <listitem label="1"/>
-  <listitem label="2"/>
-  <listitem label="3"/>
-  <listitem label="4"/>
-  <listitem label="5"/>
-  <listitem label="6"/>
-  <listitem label="7"/>
-  <listitem label="8"/>
-  <listitem label="9"/>
-  <listitem label="10"/>
-  <listitem label="11"/>
-  <listitem label="12"/>
-</listbox>
-
-
-

Nous verrons ensuite les objets boîtes XUL.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/menus_d\303\251filants/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/menus_d\303\251filants/index.html" deleted file mode 100644 index 7772a15f15..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/menus_d\303\251filants/index.html" +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Menus défilants -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Menus_défilants -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Scrolling_Menus ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section va décrire les menus défilants et comment utiliser le mécanisme avec d'autres éléments.

-

Créer un grand menu

-

Vous vous demandez peut-être ce qu'il se passerait si vous créez un menu avec beaucoup de commandes, de telle manière que tous les items ne peuvent pas s'afficher tous à l'écran en même temps. Mozilla fournit un mécanisme de défilement permettant de faire défiler les items.

-
Image:xultu_menuscroll1.png
-

Si l'espace disponible est trop petit, des flèches vont apparaître sur chaque extrémité du menu. Si vous bougez la souris sur les flèches, le menu va défiler vers le haut et vers le bas. Si l'espace disponible est assez grand, les flèches n'apparaîtront pas. Notez que le comportement exact du défilement dépendra du thème graphique utilisé.

-

Ce comportement est automatique. Vous n'avez pas à faire quoi que se soit pour avoir des menus défilants. Il va s'appliquer aux menus des barres de menu, aux menus surgissants ou listes déroulantes. Il est implémenté en utilisant un élément arrowscrollbox. Cet élément peut être utilisé pour créer une boîte de défilement avec des flèches.

-

L'élément arrowscrollbox peut être utilisé n'importe où une boîte normale peut être utilisée. Vous n'êtes pas obligé de l'utiliser pour des menus. Il s'agit toujours une boîte verticale pouvant contenir n'importe quel élément à l'intérieur. Vous pouvez l'utiliser pour implémenter une liste que vous ne voulez pas déroulante.

-

Exemple - liste défilante de boutons

-

L'exemple suivant montre comment créer une liste défilante de boutons (vous devrez redimensionner la fenêtre pour voir les boutons de flèches) :

-

Exemple 1: Source Voir

-
<arrowscrollbox orient="vertical" flex="1">
-  <button label="Rouge"/>
-  <button label="Bleu"/>
-  <button label="Vert"/>
-  <button label="Jaune"/>
-  <button label="Orange"/>
-  <button label="Argent"/>
-  <button label="Lavande"/>
-  <button label="Or"/>
-  <button label="Turquoise"/>
-  <button label="Pêche"/>
-  <button label="Bordeaux"/>
-  <button label="Noir"/>
-</arrowscrollbox>
-
-

Si vous essayez cet exemple, il va d'abord s'ouvrir en pleine taille. Cependant, si vous réduisez la taille de la fenêtre, les flèches de défilement vont apparaître. Rendre la fenêtre plus grande à nouveau va faire disparaître les flèches.

-

Vous pouvez mettre une propriété CSS max-height sur les arrowscrollbox pour limiter la taille de la boîte de défilement et ainsi faire apparaître les flèches tout le temps.

-

L'élément arrowscrollbox est principalement utile dans les menus et boîtes surgissantes.

-
-

Par la suite, nous allons voir comment ajouter des gestionnaires d'événements à des éléments XUL.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/menus_surgissants/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/menus_surgissants/index.html deleted file mode 100644 index e5e70a93c6..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/menus_surgissants/index.html +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: Menus surgissants -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Menus_surgissants -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Popup_Menus ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans la section précédente, nous avons vu comment créer un menu sur une barre de menu. XUL a aussi la capacité de créer des menus surgissants. Les menus surgissants sont habituellement affichés lorsque l'utilisateur presse le bouton droit de la souris.

- -

Créer un menu surgissant

- -

XUL a trois différentes types de boîtes surgissantes, décrites ci-dessous. La différence majeure est leurs façons d'apparaître.

- -
-
Boîte surgissante simple 
-
La boîte surgissante simple est une fenêtre surgissante qui apparaît quand l'utilisateur presse le bouton gauche de la souris sur un élément. Elles sont assez semblables aux menus sur les barres de menu, excepté qu'elles peuvent être placées n'importe où et peuvent contenir n'importe quel contenu. Un bon exemple est le menu déroulant qui apparaît quand vous maintenez le bouton de la souris enfoncé sur les boutons "précédent" et "suivant" dans la fenêtre d'un navigateur.
-
- -
-
Boîte contextuelle 
-
La boîte contextuelle est une fenêtre surgissante qui apparaît quand l'utilisateur presse le bouton de menu contextuel, qui est habituellement le bouton droit de la souris. Sur certaines plates-formes, Il peut s'agir d'un bouton différent - mais c'est toujours le bouton ou une combinaison de touches et de bouton de souris qui invoque un menu spécifique au contexte. Sur le Macintosh par exemple, l'utilisateur doit soit presser la touche Control et le bouton de la souris, soit maintenir le bouton de la souris enfoncé un certain temps.
-
- -
-
Bulle d'aide 
-
Une fenêtre surgissante « bulle d'aide » va apparaître quand l'utilisateur survolera un élément avec la souris. Ce type de boîte surgissante est habituellement utilisé pour fournir la description d'un bouton de façon plus détaillée que le bouton le permet lui-même.
-
- -

Ces trois types de boîtes surgissantes diffèrent dans la façon dont l'utilisateur les invoque. Elles peuvent contenir n'importe quel contenu, bien que des menus soient courants pour les boîtes simples et contextuelles, et qu'une simple chaîne de caractères soit courante pour une bulle d'aide. Le type de boîte surgissante est déterminé par l'élément qui invoque la boîte.

- -

Déclaration d'un menu surgissant

- -

Une boîte sugissante est décrite en utilisant l'élément menupopup. C'est un type de boîte sans attributs spéciaux. Quand elle est invoquée, une fenêtre contenant tout ce que vous avez pu mettre dans le menupopup va s'afficher. Cependant, vous devez toujours insérer un attribut id sur le popup car il doit être associé à un élément. Nous verrons bientôt sa signification. D'abord, un exemple :

- -
<popupset>
-   <menupopup id="clipmenu">
-     <menuitem label="Couper"/>
-     <menuitem label="Copier"/>
-     <menuitem label="Coller"/>
-   </menupopup>
-</popupset>
-
- -

Comme vous pouvez le voir ici, un simple menu surgissant contenant trois commandes a été créé. L'élément menupopup entoure les trois items de menu. Vous remarquerez également que l'id a été mis sur l'élément menupopup lui-même.

- -

L'élément popupset entoure l'entière déclaration de menu surgissant. Il s'agit d'un container générique pour les boîtes surgissantes, et il est optionnel. Il ne s'affiche pas à l'écran mais il est utilisé comme une section dans laquelle vous pouvez déclarer tous vos menus surgissants. Comme le nom popupset sous-entend, vous pouvez placer plusieurs déclarations de menus surgissants à l'intérieur. Ajoutez en simplement d'autres après le premier élément menupopup. Vous pouvez avoir plus d'un popupset dans un fichier, mais habituellement vous n'en aurez qu'un.

- -

Association d'un menu surgissant à un élément

- -

Maintenant que nous avons créé le menu surgissant, il est temps de le faire apparaître. Pour cela, nous avons besoin d'associer le menu à un élément d'où il devra apparaître. Nous faisons cela car nous voulons seulement que le menu apparaisse quand l'utilisateur clique à un certain endroit de la fenêtre. Habituellement, il s'agira d'un bouton spécifique ou d'une boîte.

- -

Pour associer le menu surgissant à un élément, ajoutez un de ces trois attributs à l'élément. L'attribut que vous ajoutez dépend du type de menu surgissant vous voulez créer. Pour les menus surgissants simples, ajoutez l'attribut popup à l'élément. Pour les menus contextuels, ajoutez l'attribut context. Enfin, pour les bulles d'aide, ajoutez l'attribut tooltip.

- -

La valeur de l'attribut doit être celle de l'id du menupopup que vous voulez faire apparaître. C'est pour cela que vous devez mettre un id sur le menupopup. Par ce moyen, il est facile d'avoir plusieurs menus surgissants dans un seul fichier.

- -

Dans l'exemple ci-dessus, nous voulons faire un menu surgissant contextuel. Nous devons donc utiliser l'attribut context et l'ajouter à l'élément sur lequel nous voulons associer le menu surgissant. L'exemple ci-dessous montre comment procéder :

- -

Exemple 1: Source Voir

- -
Image:xultu_popups1.png
- -
<popupset>
-  <menupopup id="clipmenu">
-    <menuitem label="Couper"/>
-    <menuitem label="Copier"/>
-    <menuitem label="Coller"/>
-  </menupopup>
-</popupset>
-
-<box context="clipmenu">
-  <label value="Faites un clic contextuel pour afficher le menu"/>
-</box>
-
- -

Ici, le menu contextuel a été associé à une boîte. À chaque fois que vous faîtes un clic contextuel (clic droit) n'importe où dans la boîte, le menu surgissant apparaîtra. Le menu apparaîtra aussi même si vous cliquez sur un enfant de la boîte, donc il apparaîtra aussi si vous cliquez sur l'élément label. L'attribut context a été utilisé pour associer la boîte au menu contextuel de même id. Dans ce cas, le menu 'clipmenu' va apparaître. De cette façon, vous pouvez disposer de plusieurs menus surgissants et les associer avec différents éléments.

- -

Vous pouvez associer plusieurs menus surgissants avec le même élément en mettant plusieurs d'attributs de différents types sur un élément. Vous pouvez aussi associer le même menu surgissant à plusieurs éléments, ce qui est un avantage de l'utilisation de la syntaxe popup. Les menus surgissants ne peuvent être associés qu'avec des éléments XUL. Ils ne peuvent pas être associés à des éléments HTML.

- -

Bulles d'aide

- -

Nous allons voir un moyen simple de créer des bulles d'aide. Il y a deux façons de créer des bulles d'aide. La méthode la plus simple, qui est la plus commune, est d'ajouter un attribut tooltiptext à un élément sur lequel vous voulez assigner une bulle d'aide.

- -

La deuxième méthode consiste à utiliser un élément tooltip contenant le contenu d'une bulle d'aide. Il nécessite que vous ayez un bloc séparé de contenu pour chaque bulle d'aide ou que vous ayez un script contenant le contenu, bien que certains contenus hormis du texte dans une bulle d'aide ne sont pas permis.

- -

Exemple 2: Source Voir

- -
<button label="Sauvegarder" tooltiptext="Cliquez ici pour enregistrer vos trucs"/>
-
-<popupset>
-  <tooltip id="moretip" orient="vertical" style="background-color: #33DD00;">
-    <description value="Cliquez ici pour voir plus d'information"/>
-    <description value="Vraiment!" style="color: red;"/>
-  </tooltip>
-</popupset>
-
-<button label="Plus" tooltip="moretip"/>
-
- -

Ces deux boutons ont chacun une bulle d'aide. Le premier utilise le style par défaut de bulle d'aide. Le second utilise une bulle d'aide modifiée qui a une couleur d'arrière-plan différente et un texte stylisé. La bulle d'aide est associée au bouton 'Plus' en utilisant l'attribut tooltip, correspondant à l'id de l'élément tooltip. Notez que l'élément tooltip est également placé à l'intérieur d'un élément popset comme pour les autres types de menus surgissants.

- -

Alignement des menus surgissants

- -

Par défaut, les menus surgissants et contextuels vont apparaître là où le pointeur de la souris se trouve. Les bulles d'aides seront placées légèrement sous l'élément pour que le pointeur de la souris ne les cache pas. Il y a des cas toutefois, où vous voudrez préciser l'emplacement du menu surgissant. Par exemple, le menu surgissant qui apparaît quand vous cliquez sur le bouton Précédent dans un navigateur doit apparaître sous le bouton Précédent, non pas là ou se situe le pointeur de la souris.

- -

Pour changer la position du menu, vous pouvez utiliser un attribut additionnel, position, sur le popup. Vous pouvez aussi l'ajouter à l'élément menupopup. Cet attribut est utilisé pour indiquer l'emplacement du menu relativement à l'élément invoquant la boîte. Ses différentes valeurs applicables sont décrites brièvement ci-dessous :

- -
-
'after_start' 
-
Le menu surgissant apparaît sous l'élément avec les bords gauche de l'élément et du menu alignés. Si le menu surgissant est plus large que l'élément, il s'étend à droite. C'est cette valeur qui est utilisée pour les menus déroulants associés avec les boutons Précédent et Suivant du navigateur.
-
- -
-
'after_end' 
-
Le menu surgissant apparaît sous l'élément avec les bords droit de l'élément et du menu alignés.
-
- -
-
'before_start' 
-
Le menu surgissant apparaît au-dessus de l'élément avec les bords gauche de l'élément et du menu alignés.
-
- -
-
'before_end' 
-
Le menu surgissant apparaît au-dessus de l'élément avec les bords droit de l'élément et du menu alignés.
-
- -
-
'end_after' 
-
Le menu surgissant apparaît à droite de l'élément avec les bords inférieurs de l'élément et du menu alignés.
-
- -
-
'end_before' 
-
Le menu surgissant apparaît à droite de l'élément avec les bords supérieurs de l'élément et du menu alignés.
-
- -
-
'start_after' 
-
Le menu surgissant apparaît à gauche de l'élément avec les bords inférieurs de l'élément et du menu alignés.
-
- -
-
'start_before' 
-
Le menu surgissant apparaît à gauche de l'élément avec les bords supérieurs de l'élément et du menu alignés.
-
- -
-
'overlap' 
-
Le menu surgissant apparaît par dessus l'élément.
-
- -
-
'at_pointer' 
-
Le menu surgissant apparaît à la position du pointeur de la souris.
-
- -
-
'after_pointer' 
-
Le menu surgissant apparaît à la même position horizontale que le pointeur de la souris mais apparaît sous l'élément. C'est ainsi que les bulles d'aide apparaissent.
-
- -

En ajoutant l'attribut position à un élément popup, vous pouvez spécifier précisément où le menu surgissant doit apparaître. Vous ne pouvez pas spécifier une position exacte en pixels. L'attribut position peut être utilisé pour les trois types de menus surgissants, bien que vous ne changerez probablement pas la valeur pour les bulles d'aide.

- -

L'exemple ci-dessous montre la création d'un bouton Précédent avec un menu surgissant :

- -

Exemple 3: Source Voir

- -
<popupset>
-  <menupopup id="backpopup" position="after_start">
-    <menuitem label="Page 1"/>
-    <menuitem label="Page 2"/>
-  </menupopup>
-</popupset>
-
-<button label="Affiche moi" popup="backpopup"/>
-
- -
-

Notre exemple de recherche de fichiers

- -

Ajoutons un simple menu surgissant à la boîte de dialogue de recherche de fichiers. Pour plus de simplicité, nous allons juste recopier le contenu du menu 'Edition'. Le menu apparaîtra quand l'on clique sur le premier onglet :

- -

Source Voir

- -
<popupset>   <menupopup id="editpopup">     <menuitem label="Couper" accesskey="c"/>     <menuitem label="Copier" accesskey="p"/>     <menuitem label="Coller" accesskey="l" disabled="true"/>   </menupopup> </popupset>
-
-<vbox flex="1">
-.
-.
-.
-
-<tabpanel id="searchpanel" orient="vertical" context="editpopup">
-
-Ici un simple menu surgissant, similaire au menu Edition, a été ajouté au premier onglet. Si vous faîtes un clic droit (Control-clic sur Macintosh) n'importe où sur la page de ce premier onglet, le menu surgissant va apparaître. Cependant, le menu n'apparaîtra pas si vous cliquez autre part. - -
Notez que le champs de saisie a son propre menu surgissant qui supplantera celui que nous avons spécifié.
-
- -
-

Par la suite, nous allons voir comment créer des menus défilants.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/mise_\303\240_jour_de_commandes/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/mise_\303\240_jour_de_commandes/index.html" deleted file mode 100644 index ca785b61a8..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/mise_\303\240_jour_de_commandes/index.html" +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Mise à jour de commandes -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Mise_à_jour_de_commandes -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Updating_Commands ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, nous verrons comment mettre à jour des commandes.

- -

Appel des commandes

- -

Si une commande a un attribut oncommand, vous pouvez simplement l'appeler en utilisant la méthode doCommand de la commande ou un élément qui lui est attaché. Pour d'autres commandes, vous aurez besoin de quelques lignes de codes supplémentaires. Vous devrez passer par ces étapes spéciales dans le cas où les commandes appelées sont implémentées par un contrôleur. Vous aurez aussi besoin de le faire dans le cas où vous créez votre propre menu de commandes, par exemple pour implémenter les commandes du menu d'édition de votre propre application.

- -

Heureusement, le code spécial est assez simple. Tout ce que nous avons besoin de faire est d'obtenir le contrôleur demandé et d'appeler la commande. Une manière simple de le faire est la suivante :

- -
var controller = document.commandDispatcher.getControllerForCommand("cmd_paste");
-if (controller && controller.isCommandEnabled("cmd_paste")){
-  controller.doCommand(command);
-}
-
- -

Le code ci-dessus recherche d'abord le contrôleur pour la commande 'cmd_paste' grâce au répartiteur de commandes. Puis, il teste si la commande est activée, et enfin exécute la commande utilisant la méthode doCommand du contrôleur. Notez que nous n'avons pas besoin de préciser l'élément ou le contrôleur à utiliser. Le répartiteur de commandes s'en charge. En outre, nous pourrions juste appeler doCommand sans vérifier si la commande est activée ou non, mais il vaut mieux le faire.

- -

Le code ci-dessus est tellement générique qu'il pourrait être une fonction prenant une commande en argument et exécutant cette commande. Cette fonction pourrait être ainsi réutilisée pour toutes les commandes. En fait, c'est tellement commun que Mozilla inclut une bibliothèque qui ne fait que ça. Si vous incluez le script 'chrome://global/content/globalOverlay.js' dans un fichier XUL, vous pouvez appeler la méthode goDoCommand qui exécute la commande passée en argument. Le code pour cette fonction ne fait que quelques lignes, ainsi vous pourriez l'inclure directement dans votre code si pour certaines raisons vous ne souhaitez pas inclure la bibliothèque.

- -
<script src="chrome://global/content/globalOverlay.js"/>
-
-<command id="cmd_paste" oncommand="goDoCommand('cmd_paste');/>
-<button label="Coller" command="cmd_paste"/>
-
- -

L'exemple ci-dessus va implémenter un bouton pour « Coller ». Il est relié à la commande qui va appeler la commande du contrôleur concerné lorsqu'il est appelé. Le code ci-dessus est tout ce dont vous avez besoin pour implémenter la fonctionnalité de la commande Coller dans votre application. La seule autre chose dont vous avez besoin est de vous assurer que le statut de la commande Coller qui est activé, et donc du bouton, est mis à jour au bon moment, comme décrit ci-dessous.

- -

Dispositifs de mise à jour de commande

- -

Un dispositif de mise à jour de commande est un dispositif spécial de l'élément commandset qui lui permet de mettre à jour les statuts activés d'une ou plusieurs commandes lorsque certains événements se produisent. Vous devrez y pensez lorsqu'une commande est valide et lorsqu'elle ne l'est pas. De plus, vous devrez considérer quand l'état pourrait changer et quand les commandes devraient être mises à jour.

- -

Par exemple, la commande « Coller » est valide lorsque le champ de saisie de texte a le focus et qu'il y a quelque chose dans le presse-papiers à coller. La commande deviendra active chaque fois que le champ de saisie aura le focus et lorsque le contenu du presse-papiers changera. Un dispositif de mise à jour de contenu surveillera ces situations et le code qui active et désactive les commandes pourra être exécuté selon les besoins.

- -

Un simple dispositif de mise à jour de commandes ressemble à ceci :

- -
<commandset id="updatePasteItem"
-            commandupdater="true"
-            events="focus"
-            oncommandupdate="goUpdateCommand('cmd_paste');"/>
-
- -

Un dispositif de mise à jour de commandes est indiqué en utilisant l'attribut commandupdater, qui devrait être déclaré à 'true'. L'attribut events est utilisé pour lister les événements que le dispositif de mise à jour de commandes surveille. Vous pouvez spécifier de multiples événements en les séparant par des virgules. Dans l'exemple ci-dessus, le dispositif de mise à jour de commandes surveille les événements de focus. Il a pour effet de mettre à jour les commandes lorsqu'un élément reçoit le focus.

- -

Lorsqu'un événement de focus se produit, le code dans l'attribut oncommandupdate est appelé. Dans l'exemple, la méthode goUpdateCommand, qui est une fonction provenant du script globalOverlay.js décrit plus tôt, est appelée. Elle va mettre à jour la commande et activer ou désactiver les items de boutons et de menus nécessaires. Le code qui est derrière est assez simple. Il appelle seulement le contrôleur nécessaire, appelle sa méthode isCommandEnabled, et enfin active ou désactive la commande. Si vous avez plusieurs commandes à mettre à jour, appelez la méthode goUpdateCommand une fois pour chaque commande.

- -
Notez que le dispositif de mise à jour de commandes recevra les notifications de tous les événements de focus sur tous les éléments, même si d'autres gestionnaires d'événements répondent à l'événement. Un dispositif de mise à jour de commandes est par essence un gestionnaire global d'événements.
- -

Les dispositifs de mise à jour de commandes disposent de plusieurs événements pouvant répondre à ceux qui sont listés ci-dessous. Il est également possible de créer le votre.

- - - -

L'exemple suivant montre le dispositif de mise à jour de commandes utilisé dans le navigateur Mozilla pour mettre à jour le menu d'édition de commandes. Les fonctions utilisées sont disponibles dans le script 'chrome://communicator/content/utilityOverlay.js'.

- -
<commandset id="globalEditMenuItems"
-            commandupdater="true"
-            events="focus"
-            oncommandupdate="goUpdateGlobalEditMenuItems()"/>
-<commandset id="selectEditMenuItems"
-            commandupdater="true"
-            events="select"
-            oncommandupdate="goUpdateSelectEditMenuItems()"/>
-<commandset id="undoEditMenuItems"
-            commandupdater="true"
-            events="undo"
-            oncommandupdate="goUpdateUndoEditMenuItems()"/>
-<commandset id="clipboardEditMenuItems"
-            commandupdater="true"
-            events="clipboard"
-            oncommandupdate="goUpdatePasteMenuItems()"/>
-
- -
-

Ensuite, nous vous montrerons comment utiliser les observateurs.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/modification_d'une_interface_xul/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/modification_d'une_interface_xul/index.html deleted file mode 100644 index 249e58daa6..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/modification_d'une_interface_xul/index.html +++ /dev/null @@ -1,167 +0,0 @@ ---- -title: Modification d'une interface XUL -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Modification_d'une_interface_XUL -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Modifying_a_XUL_Interface ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Le DOM fournit de nombreuses fonctions pour modifier un document.

- -

Création de nouveaux éléments

- -

Vous pouvez créer de nouveaux éléments en utilisant la fonction createElement() du document. Elle ne prend qu'un argument, le nom de la balise de l'élément à créer. Vous pouvez ensuite lui affecter des attributs en utilisant la fonction setAttribute() et ajouter cet élément au document XUL grâce à la fonction appendChild(). L'exemple suivant ajoute un bouton à une fenêtre XUL :

- -

Exemple 1: Source Voir

- -
<script>
-function addButton(){
-  var aBox = document.getElementById("aBox");
-  var button = document.createElement("button");
-  button.setAttribute("label","Un bouton");
-  aBox.appendChild(button);
-}
-</script>
-
-<box id="aBox" width="200">
-  <button label="Ajouter" oncommand="addButton();"/>
-</box>
-
- - - -

La fonction createElement() va créer l'élément type par défaut du document. Pour des documents XUL, il sera généralement question de création d'éléments XUL. Pour un document HTML, un élément HTML sera créé, et donc, il aura les fonctionnalités et les fonctions d'un élément HTML. La fonction createElementNS() peut être utilisée pour créer des éléments dans un espace de nommage différent.

- -

La fonction appendChild() est utilisée pour ajouter un élément en tant qu'enfant d'un autre élément. Il existe trois fonctions associées qui sont les fonctions insertBefore(), replaceChild() et removeChild. Leur syntaxe est la suivante :

- -
parent.appendChild(child);
-parent.insertBefore(child, referenceChild);
-parent.replaceChild(newChild, oldChild);
-parent.removeChild(child);
-
- -

Le nom de ces fonctions suffit à comprendre ce qu'elles font.

- - - -
Notez que pour toutes ces fonctions, l'enfant de référence ou l'enfant à supprimer doit exister sinon une erreur sera générée.
- -

Il est fréquent que vous vouliez effacer un élément existant et l'ajouter autre part. Dans ce cas, vous pouvez simplement ajouter l'élément sans l'effacer préalablement. Puisqu'un nœud ne peut exister qu'à un seul emplacement à la fois, le mécanisme d'insertion se chargera toujours d'effacer d'abord le nœud de son emplacement initial. C'est une méthode pratique pour déplacer un nœud dans un document.

- -

Copie de nœuds

- -

Toutefois, pour copier un nœud, vous devrez appeler la fonction cloneNode(). Cette fonction réalise une copie d'un nœud existant, ce qui vous permet ensuite de l'ajouter autre part. Le nœud original restera à sa place. Elle prend un argument booléen indiquant si elle doit copier tous les nœuds enfants ou non. Si la valeur est 'false', seul le n½ud est copié, comme s'il n'avait jamais eu aucun enfant. Si la valeur est 'true', tous les enfants sont également copiés. La copie est faite récursivement, donc pour de larges structures d'arbres, assurez-vous de vouloir réellement passer cette valeur 'true' à la fonction cloneNode(). Voici un exemple :

- -

Exemple 2: Source Voir

- -
<hbox height="400">
-  <button label="Copier"
-          oncommand="this.parentNode.appendChild(this.nextSibling.cloneNode(true));"/>
-
-  <vbox>
-    <button label="Premier"/>
-    <button label="Deuxième"/>
-  </vbox>
-</hbox>
-
- -

Lorsque le bouton 'Copier' est appuyé :

- - - -
Vous noterez que certains éléments, tels que listbox et menulist disposent de fonctions de modification spécialisées supplémentaires que vous devriez utiliser dès que vous le pouvez. Elles seront décrites dans une prochaine section.
- -

Manipulation d'éléments basiques

- -

Les éléments principaux de XUL, tels que les boutons, les cases à cocher et les boutons radios, peuvent être manipulés grâce à de nombreuses propriétés de script. Les propriétés disponibles sont listées sur la page référence des éléments car celles disponibles varient selon les éléments. Les propriétés communes que vous pouvez manipuler sont label, value, checked et disabled. Elles affectent ou effacent les attributs correspondants si nécessaire.

- -

Exemples de propriétés label et value

- -

Voici un exemple simple de changement d'un libellé de bouton :

- -

Exemple 3: Source Voir

- -
<button label="Bonjour" oncommand="this.label = 'Aurevoir';"/>
- -

Lorsque le bouton est pressé, son libellé est modifié. Cette technique fonctionne pour une large majorité d'éléments ayant des libellés (label). Pour les champs de saisie, vous pouvez faire quelque chose de similaire pour sa propriété value.

- -

Exemple 4: Source Voir

- -
<button label="Ajouter" oncommand="this.nextSibling.value += '1';"/>
-<textbox/>
-
- -

Cet exemple ajoute un '1' dans le champ de saisie chaque fois que le bouton est pressé. La propriété nextSibling permet d'atteindre l'élément suivant le bouton (this), le champ de saisie textbox. L'opérateur += sert à ajouter un '1' à la fin du texte de la valeur courante. Notez que vous pouvez encore ajouter du texte dans ce champ de saisie. Vous pouvez récupérer le libellé courant ou la valeur en utilisant ses propriétés, comme dans l'exemple suivant :

- -

Exemple 5: Source Voir

- -
<button label="Bonjour" oncommand="alert(this.label);"/>
- -

Changement d'état d'une case à cocher

- -

Les cases à cocher disposent d'une propriété checked qui sert à les cocher ou à les décocher. Il est facile de comprendre son usage. Dans l'exemple à suivre, nous inversons l'état de la propriété checked chaque fois que le bouton est pressé. Tandis que les libellés et les valeurs sont des chaînes de caractères, vous noterez que la propriété checked est un booléen qui prend une valeur 'true' ou 'false'.

- -

Exemple 6: Source Voir

- -
<button label="Changer" oncommand="this.nextSibling.checked =
-  !this.nextSibling.checked;"/>
-<checkbox label="Cochez pour les messages"/>
-
- -

Les boutons radios peuvent également être sélectionnés en utilisant des propriétés, toutefois, un seul est sélectionné à la fois dans un groupe, tous les autres étant décochés. Vous n'avez pas à réaliser cette gestion manuellement. La propriété selectedIndex du radiogroup peut être utilisée pour cela. La propriété selectedIndex sert à récupérer l'index du bouton radio sélectionné dans le groupe. Il sert également à le modifier.

- -

Modification de l'état activé ou désactivé d'un élément

- -

Il est habituel de désactiver des champs particuliers qui ne servent pas dans une situation donnée. Par exemple, dans la boîte de dialogue des préférences, vous avez le choix entre plusieurs possibilités, mais seul un choix permet un paramétrage supplémentaire. Voici un exemple de création de ce type d'interface :

- -

Exemple 7: Source Voir

- -
<script>
-function updateState(){
-  var name = document.getElementById("name");
-  var sindex = document.getElementById("group").selectedIndex;
-  name.disabled = sindex == 0;
-}
-</script>
-
-<radiogroup id="group" onselect="updateState();">
-  <radio label="Nom aléatoire" selected="true"/>
-  <hbox>
-    <radio label="Spécifiez un nom :"/>
-    <textbox id="name" value="Alain" disabled="true"/>
-  </hbox>
-</radiogroup>
-
- -

Dans cet exemple, une fonction updateState() est appelée chaque fois qu'un événement de sélection est déclenché depuis le groupe de boutons radios. Elle est exécutée lorsque qu'un bouton radio est sélectionné. La fonction retournera l'indice de l'élément radio actuellement sélectionné en utilisant la propriété selectedIndex. Vous noterez que bien qu'un bouton radio se trouve à l'intérieur d'une boîte hbox, il reste attaché au groupe radio. Si le premier bouton radio est sélectionné (index de '0'), le champ de saisie est désactivé en définissant sa propriété disabled à 'true'. Si le second bouton radio est sélectionné, le champ de saisie est activé.

- -
-

La section suivante fournira plus de détails sur la manipulation des groupes de boutons radios et la manipulation des listes.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

- -

 

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/modification_du_th\303\250me_par_d\303\251faut/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/modification_du_th\303\250me_par_d\303\251faut/index.html" deleted file mode 100644 index 6e0899b330..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/modification_du_th\303\250me_par_d\303\251faut/index.html" +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Modification du thème par défaut -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Modification_du_thème_par_défaut -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Modifying_the_Default_Skin ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section décrit comment modifier le thème graphique d'une fenêtre.

-

Les bases d'un thème

-

Un thème est un ensemble de feuilles de styles, d'images et de comportements qui est appliqué à un fichier XUL. En appliquant un thème différent, vous pouvez changer l'apparence d'une fenêtre sans changer ses fonctionnalités. Firefox fournit un thème par défaut, et vous pouvez en télécharger d'autres. Le XUL pour les deux est le même. En revanche, les feuilles de styles et les images utilisées sont différentes.

-

Pour une simple personnalisation de l'apparence d'une fenêtre Mozilla, vous pouvez facilement changer les feuilles de styles qui lui sont associées. Des modifications plus importants peuvent être faits en créant un thème complètement nouveau. La fenêtre des préférences de Mozilla comporte un panneau pour changer le thème par défaut. (Bien que Mozilla appelle le code sous jacent les appelle 'skins' et que l'inteface utilisateur les appelle des thèmes, il s'agit de la même chose).

-

Un thème est décrit en utilisant des CSS, ce qui vous permet de définir les couleurs, les bordures et les images utilisées pour dessiner des éléments. Le fichier 'classic.jar' contient les définitions des thèmes. Le répertoire "global" inclus dans ces archives contient les définitions principales des styles concernant la manière d'afficher les différents éléments XUL. En modifiant ces fichiers, vous pouvez modifier l'apparence des applications XUL.

-

Personnalisation avec userChrome.css

-

Si vous placez un fichier appelé 'userChrome.css' dans le répertoire "chrome" dans le répertoire de votre profil utilisateur, vous pouvez remplacer des paramètres sans changer les archives elles-mêmes. Ce répertoire devrait être créé quand vous créez un profil et quelques exemples y figurer. Le fichier 'userContent.css' permet de personnaliser les pages Web, tandis que 'userChrome.css' permet de personnaliser les fichiers chrome.

-

Par exemple, en ajoutant ce qui suit à la fin de ce fichier, vous pouvez changer tous les éléments menubar pour leur appliquer un fond rouge.

-
menubar {
-  background-color: red;
-}
-
-

Si vous ouvrez une fenêtre Mozilla après avoir effectué ce changement, les barres de menu seront rouges. Comme ce changement a été appliqué à la feuille de styles utilisateur, il affecte toutes les fenêtres. Cela signifie que la barre de menus du navigateur, la barre de menus des marque-pages et même la barre de menus du dialogue de recherche de fichiers seront rouges.

-

Paquetages de thèmes

-

Pour que le changement n'affecte qu'une fenêtre, modifiez la feuille de styles associée à ce fichier XUL. Par exemple, pour ajouter une bordure rouge autour des commandes de menu dans la fenêtre du carnet d'adresses, ajoutez ce qui suit au fichier 'bookmarksManager.css' dans l'archive 'classic.jar' ou de votre thème préféré.

-
menuitem {
-  border: 1px solid red;
-}
-
-

Si vous regardez dans les archives des thèmes, vous remarquerez que chacune contient un certain nombre de feuilles de styles et d'images. Les feuilles de styles font référence aux images. Vous devriez éviter de faire directement référence aux images dans les fichiers XUL si vous voulez que votre contenu puisse être modifié par un thème, parce qu'un certain thème peut ne pas utiliser d'images et avoir besoin d'un design plus complexe. En faisant référence aux images seulement dans les fichiers CSS, on peut facilement les enlever. Cela évite aussi la dépendance avec les noms de fichier spécifiques des images.

-

Vous pouvez attribuer des images à un bouton, à une case à cocher et à d'autres éléments en utilisant la propriété list-style-image comme suit :

-
checkbox {
-  list-style-image: url("chrome://findfile/skin/images/check-off.jpg");
-}
-
-checkbox[checked="true"] {
-  list-style-image: url("chrome://findfile/skin/images/check-on.jpg");
-}
-
-

Ce code modifie l'image associée à une case à cocher. Le premier style applique une certaine image pour une case à cocher décochée et le second style pour une case à cocher cochée. Le modificateur 'checked=true' n'applique le style qu'aux éléments qui ont leur attribut checked à 'true'.

-

Consultez Créer un thème pour Firefox et CSS:Premiers pas pour plus de détails.

-
-

Dans la prochaine section, nous allons voir comment créer un nouveau thème.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/onglets/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/onglets/index.html deleted file mode 100644 index e2d94235ea..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/onglets/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Onglets -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Onglets -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Tabboxes ---- -

 

-
-

« PrécédentSuivant »

-
-

Il est courant de voir des pages à onglets dans les boîtes de dialogues de préférences. Nous allons voir ici comment les créer.

-

Boîtes d'onglets

-

Les boîtes d'onglets sont typiquement utilisées dans une application de fenêtre de préférences. Une série d'onglets apparaît en travers du bord supérieur de la fenêtre. L'utilisateur peut cliquer sur chaque onglet pour voir la sélection des options. L'emploi d'onglets est très utile lorsque vous avez plus d'options qu'il ne peut en tenir sur l'écran.

-

XUL offre une méthode pour créer de telles boîtes de dialogues. Elles nécessitent cinq nouveaux éléments qui sont décrits brièvement ici et plus en détail par la suite.

-
tabbox 
La boîte externe qui contient les onglets sur le haut et les pages correspondantes elles mêmes.
tabs 
La boîte interne qui contient les onglets individuellement. En d'autres termes, il s'agit d'un groupement d'onglets.
tab 
Un onglet spécifique. Cliquer sur un onglet remonte la page de l'onglet au premier plan.
tabpanels 
Le container des pages.
tabpanel 
Le corps d'une page seule. Vous allez placer le contenu d'une page dans cette élément. Le premier tabpanel correspond au premier onglet, le second tabpanel correspond au second onglet, et ainsi de suite.
-
-

L'élément tabbox est l'élément externe. Il est constitué de deux enfants, l'élément tabs qui contient les en-têtes des onglets, et l'élément tabpanels qui contient les pages d'onglets.

-

La syntaxe typique d'une boîte d'onglets est décrite ci dessous :

-
<tabbox id="tablist">
-   <tabs>
-     <!-- les éléments tab viennent ici -->
-   </tabs>
-   <tabpanels>
-     <!-- les éléments tabpanel viennent ici -->
-   </tabpanels>
-</tabbox>
-
-

Les éléments tab sont placés à l'intérieur d'un élément tabs qui se comporte comme une boîte normale. L'élément tabs lui même a été placé à l'intérieur d'un élément tabbox. Cet élément tabbox contient aussi l'élément tabpanels qui apparaît en dessous de l'élément tabs à cause de la disposition verticale de la boîte d'onglets.

-

Il n'y a réellement rien de spécial au sujet des éléments tab qui les rendent différents des boîtes. Comme pour les boîtes, les onglets peuvent contenir n'importe quels éléments. La différence est que les onglets ont un rendu sensiblement différent et seulement le contenu de la page d'un seul onglet sera visible à la fois, comme peut le faire l'élément deck.

-

Le contenu des pages correspondant à chaque onglet doit être placé dans chaque élément tabpanel correspondant. Il ne doit pas être mis dans un élément tab qui contient, lui, le contenu descriptif de l'onglet sur le bord supérieur.

-

Chaque élément tabpanel devient une page de l'onglet affiché. La première page correspond au premier onglet, la seconde page correspond au second onglet, et ainsi de suite. Il y a une relation de un-à-un entre chaque élément tab et chaque élément tabpanel.

-

Pour déterminer la dimension d'une boîte d'onglets, la taille de la plus grande page est utilisée. Ainsi, si vous avez dix champs de saisie sur une page et seulement un sur une autre page, cette autre page sera dimensionnée pour s'ajuster à celle qui contient les dix champs de saisie en occupant plus d'espace. La surface occupée par la page d'un onglet ne change pas lorsque l'utilisateur bascule vers une page d'un autre onglet.

-

Exemple de boîte d'onglets

-

Exemple 1: Source Voir

-
Image:xultu_tabpanel1.png
-
<tabbox>
-   <tabs>
-     <tab label="Courrier"/>
-     <tab label="Forum"/>
-   </tabs>
-   <tabpanels>
-     <tabpanel id="mailtab">
-       <checkbox label="Vérifier automatiquement le courrier"/>
-     </tabpanel>
-     <tabpanel id="newstab">
-       <button label="Effacer le cache des forums"/>
-     </tabpanel>
-   </tabpanels>
-</tabbox>
-
-

Ici, deux onglets ont été ajoutés. Le premier est intitulé 'Courrier' et l'autre est intitulé 'Forum'. Lorsque l'utilisateur clique sur l'onglet 'Courrier', le contenu de la première page est affiché. Dans ce cas, la boîte avec la case à cocher intitulé 'Vérifier automatiquement le courrier' apparaîtra sous cet onglet. Le second onglet, lorsqu'il est cliqué, affichera la boîte contenant le bouton intitulé 'Effacer le cache des forums'.

-

L'onglet courant sélectionné est donné par un attribut supplémentaire selected initialisé à 'true' sur un élément tab. Il sert à donner à l'onglet par défaut un aspect différent de telle façon qu'il apparaisse sélectionné. Un seul onglet peut avoir cet attribut avec une valeur 'true'.

-

Positionnement des onglets

-

Finalement, vous pouvez changer la position des onglets pour qu'ils apparaissent sur n'importe quel côté des pages d'onglets. Il suffit de définir les attributs orient et dir comme nécessaire. Souvenez vous que les éléments tab sont des boîtes normales en terme de mise en page. D'ailleurs, l'élément tabbox se comporte comme une boîte normale ayant une orientation verticale par défaut, dans laquelle l'élément tabs est une boîte ayant une orientation horizontale.

-
Image:xultu_tabpanel_extra.png
-

Par exemple, pour mettre les onglets le long du bord gauche, changez l'orientation de l'élément tabs pour qu'elle soit verticale. Ils seront empilés les uns sur les autres. Ensuite, mettez une orientation horizontale sur le tabbox. Les onglets appaîtront à gauche, et pas au dessus des pages d'onglets. Notez que la modification de l'orientation de l'élément tabpanels n'aura aucun effet puisque les pages d'onglets sont empilées les unes sur les autres. (NdT : Source Voir)

-

Vous pouvez placer les onglets le long du bord droit ou en bas en déplaçant l'élément tabs après l'élément tabpanels. De plus, vous devrez définir l'attribut dir à 'reverse' sur tabbox. Cependant, vous devriez laisser les onglets en haut car leur rendu graphique risque d'être mauvais avec certains thèmes graphiques particuliers.

-
-

Ajout d'onglets à la boîte de dialogue de recherche de fichiers

-

Ajoutons une seconde page à notre boîte de dialogue de recherche de fichiers. Nous allons créer un onglet 'Options' (en le sélectionnant par défaut) qui contiendra quelques options de recherche. Ce n'est peut être pas la meilleure interface pour faire cela, mais nous l'utiliserons pour la démonstration des onglets. Le libellé d'en-tête et la boîte de critères de recherche iront dans la première page d'onglet. Nous allons ajouter quelques options dans la seconde page d'onglet. La barre de progression et les boutons restent sur la boîte de dialogue principale, en dehors des onglets.

-
<vbox flex="1">
-
-<tabbox selectedIndex="1">   <tabs>     <tab label="Recherche"/>     <tab label="Options"/>   </tabs>    <tabpanels>    <tabpanel id="searchpanel" orient="vertical">
-
-    <description>
-     Entrez votre critère de recherche ci dessous et appuyer sur le
-     bouton Rechercher.
-    </description>
-
-    <spacer style="height: 10px"/>
-
-    <groupbox orient="horizontal">
-      <caption label="Critère de recherche"/>
-
-      <menulist id="searchtype">
-        <menupopup>
-          <menuitem label="Nom"/>
-          <menuitem label="Taille"/>
-          <menuitem label="Date de modification"/>
-        </menupopup>
-      </menulist>
-      <spacer style="width: 10px;"/>
-      <menulist id="searchmode">
-        <menupopup>
-          <menuitem label="Est"/>
-          <menuitem label="N'est pas"/>
-        </menupopup>
-      </menulist>
-
-      <spacer style="height: 10px"/>
-      <textbox id="find-text" flex="1" style="min-width: 15em;"/>
-
-    </groupbox>
-   </tabpanel>     <tabpanel id="optionspanel" orient="vertical">     <checkbox id="casecheck" label="Recherche sensible à la casse"/>     <checkbox id="wordscheck" label="Nom de fichier entier"/>    </tabpanel>   </tabpanels> </tabbox>
-
-
Image:xultu_tabpanel2.png
-

Les éléments tab ont été placés autour du contenu principal de la fenêtre. Vous pouvez voir les deux onglets, 'Recherche' et 'Options'. En cliquant sur chacun d'eux, vous faites apparaître les pages correspondantes. Comme montré sur l'image ci-dessus, les deux options de recherche apparaissent sur le deuxième onglet. La première page ressemble beaucoup à ce qu'elle était avant, exceptée la présence des onglets sur le bord supérieur.

-Exemple de recherche de fichiers : Source Voir
-
-

Dans la section suivante, nous allons voir comment créer des grilles pour le placement de contenus.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/overlays_inter-paquetage/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/overlays_inter-paquetage/index.html deleted file mode 100644 index fa037a0316..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/overlays_inter-paquetage/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Overlays inter-paquetage -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Overlays_inter-paquetage -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Cross_Package_Overlays ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Cette section décrit comment appliquer des overlays à des fichiers qui ne les importent pas.

- -

Application d'overlays à d'autres paquetages

- -
Note : Cette section traite de contents.rdf qui a été remplacé par des fichiers manifest depuis Gecko 1.8.
- -

Les overlays ont d'autres fonctionnalités très utiles. Dans les exemples de la section précédente, les overlays étaient importés par la fenêtre. Vous pouvez aussi utiliser une autre méthode en indiquant aux overlays pour quelles fenêtres ils seront appliqués. Il vous suffit de modifier le fichier 'contents.rdf' de votre paquetage. Cette méthode est très utile car elle permet à un overlay de modifier l'interface utilisateur d'un autre paquetage sans pour cela modifier celui-ci. Par exemple, vous pouvez ajouter des items de menu ou des barres d'outils à la fenêtre du navigateur Mozilla.

- -

Nous utiliserons cette fonctionnalité pour ajouter une barre d'outils dans le fenêtre du navigateur Mozilla. Le client courrier de Mozilla utilise les overlays pour ajouter du contenu à la fenêtre du navigateur. Par exemple, si le client n'est pas installé, il n'y a pas de commande pour de nouveaux messages. Toutefois, si le client est installé, un overlay sera appliqué au menu pour ajouter une commande de nouveaux messages. Ci-dessous, nous ajouterons une barre d'outils de recherche de fichiers au navigateur. Cette fonctionnalité n'a aucune utilité, mais nous l'intégreront quand même.

- -

Mozilla vous permet d'ajouter une liste d'overlays dans le fichier 'contents.rdf' utilisé pour spécifier les paquetages chrome, les thèmes graphiques et les localisations. Dès que vous avez créé un overlay, vous pouvez l'ajouter au fichier 'contents.rdf'. Il vous suffit d'ajouter les informations pour chacune des fenêtres où vous voulez appliquer l'overlay.

- -
-

Notre exemple de recherche de fichiers

- -

Tout d'abord, créons un simple overlay. Il contiendra quelques champs de saisie pour la recherche d'un nom de fichier et d'un répertoire. Chargez le fichier 'foverlay.xul' et ajoutez-le au répertoire de notre exemple de recherche de fichiers à côté de 'findfile.xul'.

- -

Notre exemple foverlay.xul

- -

Exemple 1 : Source

- -
<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<overlay
-    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<toolbox id="navigator-toolbox">
-  <toolbar id="findfile_toolbar">
-    <label control="findfile_filename" value="Recherche des fichiers nommés :"/>
-    <textbox id="findfile_filename"/>
-    <label control="findfile_dir" value="Répertoire :"/>
-    <textbox id="findfile_dir"/>
-    <button label="Parcourir..."/>
-  </toolbar>
-</toolbox>
-
-</overlay>
-
- -

Vous pouvez visualiser cet exemple en changeant l'élément overlay par window. La seule chose un peu spécifique est l'attribut id utilisé sur l'élément toolbox. Cette valeur ('navigator-toolbox') est la même que l'identifiant de la boîte d'outils de la fenêtre du navigateur ('navigator.xul'). Elle signifie que cet overlay sera appliqué à la boîte d'outils du navigateur et que son contenu sera ajouté comme une barre d'outils supplémentaire.

- -

Pour ajouter cet overlay au fichier manifest, vous devons ajouter deux ressources. Premièrement, nous en ajoutons une pour chaque fenêtre où l'overlay sera appliqué. Le code suivant doit être placé dans le fichier 'contents.rdf' juste avant la balise fermante de RDF.

- -
<RDF:Seq about="urn:mozilla:overlays">
-  <RDF:li resource="chrome://navigator/content/navigator.xul"/>
-</RDF:Seq>
-
- -

Cette déclaration précise l'ajout d'une fenêtre overlay au système de gestion des overlays (urn:mozilla:overlays). Vous pouvez ajouter des nœuds supplémentaires pour chaque fenêtre à modifier en ajoutant des balises li supplémentaires.

- -

Ensuite, nous ajoutons un nœud pour chaque overlay s'appliquant à la fenêtre. Dans ce cas, vous n'en avez qu'un, mais d'autres peuvent être appliqués. Ajoutez ces lignes à la suite des précédentes :

- -
<RDF:Seq about="chrome://navigator/content/navigator.xul">
-  <RDF:li>chrome://findfile/content/foverlay.xul</RDF:li>
-</RDF:Seq>
-
-
- -
Image:xultu_crosspov.png
- -

Mozilla lit cette information et construit une liste d'overlays appliqués à d'autres fenêtres. Il enregistre cette information dans un répertoire chrome/overlayinfo. Il n'est pas nécessaire que vous modifiez manuellement les fichiers de ce répertoire. Ils sont générés automatiquement et modifiés au premier lancement de Mozilla ou lorque de nouveaux paquetages sont installés. Toutefois, vous pouvez forcer la reconstruction de leurs données en effaçant ce répertoire et le fichier 'chrome.rdf.'

- -

Note complémentaire : vous pouvez utiliser cette même technique pour appliquer des feuilles de styles supplémentaires. L'exemple suivant vous montre comment :

- -
<RDF:Seq about="urn:mozilla:stylesheets">
-  <RDF:li resource="chrome://messenger/content/messenger.xul"/>
-</RDF:Seq>
-
-<RDF:Seq about="chrome://messenger/content/messenger.xul">
-  <RDF:li>chrome://blueswayedshoes/skin/myskinfile.css</RDF:li>
-</RDF:Seq>
-
- -
-

Nous verrons ensuite comment créer un installeur pour une application XUL.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/piles_et_paquets/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/piles_et_paquets/index.html deleted file mode 100644 index 2913d20ebb..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/piles_et_paquets/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Piles et Paquets -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Piles_et_Paquets -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Stacks_and_Decks ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Il se peut qu'il soit nécessaire d'afficher des éléments comme un empilement superposé de cartes. Les éléments stack et deck peuvent être utilisés à cet effet.

- -

Containers

- -

Chaque boîte XUL est un container qui peut contenir n'importe quel autre élément. Il y a un certain nombre d'éléments qui sont des types spécialisés de boîtes, tels que les barres d'outils et les onglets. La balise box crée la plus simple des boîtes sans propriétés spéciales. Toutefois, les types spécialisés de boîtes fonctionnent comme des boîtes normales dans le sens où elles orientent les éléments qu'elles contiennent, mais elles ont des fonctionnalités supplémentaires.

- -

En fait, beaucoup de composants peuvent contenir d'autres éléments. Nous avons déjà vu que les boutons peuvent contenir d'autres choses que leurs contenus par défaut. Une barre de défilement est juste un type spécial de boîte qui crée ses propres éléments si vous ne les fournissez pas. Ceux-ci contrôlent également le déplacement de l'ascenseur de la barre de défilement.

- -

Dans les prochaines sections, nous allons introduire quelques éléments qui sont prévus pour le contrôle d'autres éléments. Ce sont tous des types spéciaux de boîtes et permettent d'inclure tous les attributs des boîtes.

- -

Piles

- -

L'élément stack est une simple boîte. Il fonctionne comme toute autre boîte mais a la propriété spéciale que ces enfants sont tous disposés les uns au dessus des autres. Le premier enfant de la pile est dessiné sur le dessous, le second enfant est dessiné ensuite, suivi du troisième et ainsi de suite. De nombreux éléments peuvent être empilés sur une pile.

- -

La propriété orient n'a aucune signification particulière sur un élément stack, car les enfants sont empilés les uns sur les autres au lieu d'être côte à côte. Les dimensions d'une pile sont déterminées par celle de son plus grand enfant, mais vous pouvez utilisez les propriétés CSS width, height, min-width ou d'autres propriétés similaires à la fois sur la pile et ses enfants.

- -

L'élément stack pourrait être utilisé quand un indicateur d'état doit d'être ajouté au dessus d'un élément existant. Par exemple, un indicateur de progression pourrait être créé avec une barre et un libellé en surimpression.

- -

Image:xultu_stacks_progress.png

- -

Effet d'ombre avec des piles

- -

Une utilisation pratique de l'élément stack est de pouvoir simuler un certain nombre de propriétés CSS avec. Par exemple, vous pouvez créer un effet similaire à la propriété text-shadow comme ceci :

- -

Exemple 1: Source Voir

- -
<stack>
-   <description value="Ombré" style="padding-left: 1px; padding-top: 1px; font-size: 15pt"/>
-   <description value="Ombré" style="color: red; font-size: 15pt;"/>
-</stack>
-
- -

Image:xultu_stacks1.png

- -

Les deux éléments description créent chacun un texte avec une taille de 15 points. Le premier est toutefois décalé d'un pixel vers la droite et vers le bas grâce à l'ajout d'une marge de texte sur la gauche et sur le haut. Le résultat est le dessin répété du même texte 'Ombré' mais en léger décalage. Le second élément description est dessiné en rouge pour que l'effet soit encore plus visible.

- -

Cette méthode a des avantages sur l'emploi de text-shadow car vous pouvez complètement personnaliser les effets d'ombres de votre texte principal. Il peut avoir sa propre police de caractères, un soulignement ou une taille propre (vous pouvez même créer un texte ombré clignotant). C'est aussi utile car Mozilla ne supporte pas pour l'instant les textes ombrés en CSS. Un désavantage est que l'espace occupé par le texte ombré fait une pile plus grande. L'effet d'ombrage est très utile pour créer des boutons d'apparence désactivée :

- -

Exemple 2: Source Voir

- -
<stack style="background-color: #C0C0C0">
-   <description value="Désactivé" style="color: white; padding-left: 1px; padding-top: 1px;"/>
-   <description value="Désactivé" style="color: grey;"/>
-</stack>
-
- -

Cet arrangement de couleurs de texte et d'ombrage créent cet aspect désactivé que l'on retrouve sur certaines plates-formes.

- -
Notez que les évènements tels que les clics de la souris et les touches du clavier sont transmis à l'élément sur le haut de la pile qui est le dernier élément de la pile. Cela signifie qu'un bouton ne fonctionnera correctement que s'il est le dernier élément de la pile.
- -

Paquets

- -

Un élément deck place également ses enfants les uns au dessus des autres comme l'élément stack, toutefois les paquets n'affichent qu'un seul de leurs enfants à la fois. Ce comportement s'avère utile pour une interface d'assistant dans laquelle une série de panneaux similaires sont affichés en série. Au lieu de créer des fenêtres séparées et d'ajouter des boutons de navigation à chacune d'elles, vous n'avez qu'à créer une seule fenêtre et utiliser un paquet dans lequel le contenu changera.

- -

Comme pour les piles, les enfants directs d'un élément deck forment les pages du paquet. S'il y a trois enfants dans l'élément deck, le paquet aura trois enfants. La page affichée du paquet peut être changée en définissant un attribut selectdIndex sur l'élément deck. L'index est un nombre qui identifie quelle page à afficher. Les pages sont numérotées à partir de zéro. Ainsi, le premier enfant du paquet est la page '0', le second est la page '1', etc.

- -

Ce qui suit est un exemple de paquet :

- -

Exemple 3: Source Voir

- -
<deck selectedIndex="2">
-   <description value="Ceci est la première page "/>
-   <button label="Ceci est la seconde page "/>
-   <box>
-     <description value="Ceci est la troisième page "/>
-     <button label="Ceci est également la troisième page "/>
-   </box>
-</deck>
-
- -

Ici, il y a trois pages, celle affichée par défaut est la troisième. La troisième page est une boîte avec deux éléments qui y sont inclus. L'ensemble de cette boîte et de ses éléments forme une page. Le paquet sera aussi grand que le plus grand de ses enfants, qui dans le cas présent sera la troisième page.

- -

Vous pouvez changer de page en utilisant un script pour modifier l'attribut selectedIndex. Pour plus de renseignements là dessus, reportez vous aux sections sur les évènements et le DOM.

- -
-

La prochaine section décrit comment les piles peuvent être utilisées pour positionner les éléments.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_caract\303\251ristiques_sur_les_boutons/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_caract\303\251ristiques_sur_les_boutons/index.html" deleted file mode 100644 index b6b5318c43..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_caract\303\251ristiques_sur_les_boutons/index.html" +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Plus de caractéristiques sur les boutons -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Plus_de_caractéristiques_sur_les_boutons -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/More_Button_Features ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans ce chapitre, nous allons voir quelques fonctionnalités supplémentaires des boutons.

- -

Ajouter une image

- -

Vous pouvez ajouter une image dans un bouton en spécifiant une adresse URL dans l'attribut image. L'image chargée à partir de l'URL, qui peut être relative ou absolue, sera affichée sur le bouton.

- -

Le bouton sur l'exemple ci-dessous aura en même temps un libellé et une image 'happy.png'. L'image apparaîtra à gauche du libellé. Vous pouvez changer cette position en utilisant deux autres attributs. Ils seront expliqués dans un moment.

- -

Exemple 1: Source Voir

- -
<button label="Aide" image="happy.png"/>
- -

Bouton avec une image CSS

- -

Une autre façon de procéder consiste à spécifier une image en utilisant la propriété de style CSS list-style-image appliquée au bouton. Cette méthode permet de changer l'apparence (dans ce cas, l'apparence de l'image) sans modifier le fichier XUL. Un exemple vous est montré ci-dessous.

- -

Exemple 2: Source Voir

- -
<button id="find-button"
-   label="Chercher" style="list-style-image: url('happy.png')"/>
-
- -

Dans ce cas, l'image 'happy.png' est affichée sur le bouton. L'attribut style fonctionne de façon similaire à son homologue HTML. En général, il peut être utilisé sur tous les éléments XUL. Notez qu'il serait plus judicieux de placer toutes les déclarations de styles dans une feuille de style séparée.

- -

Le positionnement des images

- -

Par défaut, l'image sur le bouton apparaît à gauche du libellé. Il y a deux attributs permettant de contrôler sa position.

- -

L'attribut dir contrôle la direction de l'image et du texte. En définissant cet attribut avec la valeur 'reverse', l'image sera placée à droite du texte. En utilisant la valeur 'normal', ou en omettant cet attribut, l'image sera placée à gauche du texte.

- -
NdT : Sur de vieilles versions de Mozilla, les valeurs à utiliser sont respectivement 'rtl' (right-to-left) et 'ltr' (left-to-right).
- -

L'attribut orient peut être utilisé pour placer l'image au-dessus ou en dessous du texte. Sa valeur par défaut est 'horizontal' et sert à placer l'image à gauche ou à droite. Vous pouvez aussi utiliser la valeur 'vertical' pour placer l'image au-dessus ou en dessous. Dans ce cas, l'attribut dir contrôle le placement vertical. Les mêmes valeurs sont utilisées, où 'normal' provoque le placement de l'image au-dessus du texte, et 'reverse' provoque le placement de l'image en dessous du texte.

- -

Exemple 3: Source Voir

- -
Image:xultu_advbtns1.png
- -
<button label="Gauche" image="happy.png"/>
-<button label="Droite" image="happy.png" dir="reverse"/>
-<button label="Dessus" image="happy.png" orient="vertical"/>
-<button label="Dessous" image="happy.png" orient="vertical" dir="reverse"/>
-
- -

Cet exemple vous montre les quatre types d'alignement des boutons. Notez que les deux attributs ne sont pas spécifiés lorsque leur valeur par défaut est utilisée.

- -

Des boutons avec des contenus spéciaux

- -

Les boutons peuvent contenir un balisage arbitraire, qui sera représenté dans le bouton. Vous ne l'utiliserez probablement pas très souvent, mais vous pourrez l'utiliser pour créer des éléments personnalisés.

- -

Cet exemple va créer un bouton dans lequel deux mots seront en magenta :

- -

Exemple 4: Source Voir

- -
<button>
-   <description value="Ceci est"/>
-   <description value="un étrange" style="color: purple;"/>
-   <description value="bouton"/>
-</button>
-
- -

N'importe quel élément XUL peut être placé à l'intérieur d'un bouton. Les éléments HTML seront ignorés, donc vous devez les intégrer à l'intérieur d'un élément description. Si vous spécifiez un attribut label sur un bouton, il supplantera n'importe quel autre contenu placé dans la définition du bouton.

- -

Bouton avec un menu surgissant

- -

Vous pouvez mettre un menupopup dans un bouton pour générer une liste déroulante lorsque le bouton est enfoncé, à l'instar de l'élément menulist. Toutefois, dans ce cas, vous devez indiquer l'attribut type avec la valeur 'menu'.

- -

Exemple 5: Source Voir

- -
Image:xultu_advbtns2.png
- -
<button type="menu" label="Périphérique">
-   <menupopup>
-     <menuitem label="Imprimante"/>
-     <menuitem label="Souris"/>
-     <menuitem label="Clavier"/>
-   </menupopup>
-</button>
-
- -

Dans cet exemple, l'utilisateur doit cliquer sur le bouton pour faire apparaître un menu contenant trois items de menu. Notez que la sélection d'un des items ne change pas le libellé du bouton, contrairement à l'élément menulist. Ce type de bouton est destiné à être utilisé comme un menu, avec des scripts associés à chaque item, exécutant une tâche précise. Nous en verrons plus sur les menus plus tard.

- -

Vous pouvez également affecter la valeur 'menu-button' à l'attribut type (NdT : Source Voir). Cette valeur crée aussi un bouton avec un menu, mais son apparence est différente. L'image ci-contre montre cette différence. Le bouton de gauche est un 'menu' et celui de droite est un 'menu-button'. Ils ont chacun une flèche pour indiquer la présence d'un menu déroulant. Pour le 'menu', l'utilisateur doit cliquer n'importe où sur le bouton pour ouvrir le menu. Pour le 'menu-button', l'utilisateur doit cliquer sur la flèche pour faire apparaître le menu.

- -
-

Dans la prochaine section, nous en apprendrons plus sur le positionnement des éléments XUL dans une fenêtre.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_fonctionnalit\303\251s_de_menu/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_fonctionnalit\303\251s_de_menu/index.html" deleted file mode 100644 index 908aab0ed9..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/plus_de_fonctionnalit\303\251s_de_menu/index.html" +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Plus de fonctionnalités de menu -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Plus_de_fonctionnalités_de_menu -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/More_Menu_Features ---- -

 

-
-

« PrécédentSuivant »

-
-

Dans cette section, nous allons voir comment créer des sous-menus et des coches de menus.

-

Créer des sous-menus

-

Vous pouvez créer des sous-menus à l'intérieur d'autres menus (menus imbriqués) en utilisant les éléments existants. Souvenez-vous que vous pouvez mettre n'importe quel élément dans un menupopup. Nous avons vu comment placer des menuitem et des menuseparator dans des menupopup. Toutefois, vous pouvez créer des sous-menus en plaçant simplement l'élément menu à l'intérieur de l'élément menupopup. Ce fonctionnement est possible du fait que l'élément menu est valide même quand il n'est pas placé directement dans une barre de menu.

-

L'exemple ci-dessous crée un simple sous-menu dans le menu Fichier :

-

Exemple 1: Source Voir

-
Image:xultu_menubar_3.png
-
<toolbox flex="1">
-  <menubar id="sample-menubar">
-    <menu id="file-menu" label="Fichier">
-      <menupopup id="file-popup">
-        <menu id="new-menu" label="Nouveau">
-          <menupopup id="new-popup">
-            <menuitem label="Fenêtre"/>
-            <menuitem label="Message"/>
-          </menupopup>
-        </menu>
-        <menuitem label="Ouvrir"/>
-        <menuitem label="Sauver"/>
-        <menuseparator/>
-        <menuitem label="Quitter"/>
-      </menupopup>
-    </menu>
-  </menubar>
-</toolbox>
-
-
-

Ajout d'un menu à notre exemple de recherche de fichiers

-

Ajoutons un menu à la boîte de dialogue de recherche de fichiers. Nous allons juste ajouter quelques commandes simples à un menu 'Fichier' et à un menu 'Édition'. Ces menus sont similaires à l'exemple ci-dessus.

-
<toolbox>
-
- <menubar id="findfiles-menubar">   <menu id="file-menu" label="Fichier" accesskey="f">     <menupopup id="file-popup">       <menuitem label="Ouvrir une Recherche..." accesskey="o"/>       <menuitem label="Enregistrer une Recherche..." accesskey="s"/>         <menuseparator/>       <menuitem label="Fermer" accesskey="c"/>     </menupopup>   </menu>   <menu id="edit-menu" label="Édition" accesskey="e">     <menupopup id="edit-popup">       <menuitem label="Couper" accesskey="t"/>       <menuitem label="Copier" accesskey="p"/>       <menuitem label="Copier" accesskey="l" disabled="true"/>     </menupopup>   </menu>  </menubar>
-
-<toolbar id="findfiles-toolbar>
-
-

Source Voir

-
Image:xultu_menubar1.png
-Ici, nous avons ajouté deux menus contenant des commandes variées. Notez que la barre de menus a été ajoutée dans un toolbox. Les points de suspension après 'Ouvrir une Recherche' et 'Enregistrer une Recherche' sont le moyen habituel pour indiquer à l'utilisateur qu'une boîte de dialogue va s'ouvrir quand il sélectionne une de ces commandes. Des touches de raccourcis ont été associées à chaque menu et à chaque item de menu. Vous verrez dans l'image que cette lettre a été soulignée dans le texte du menu. Vous verrez aussi que la commande 'Coller' a été désactivée. Nous supposons qu'il n'y a rien à coller.
-

Ajouter des coches aux menus

-

De nombreuses applications ont des items de menu avec des coches. Par exemple, une fonctionnalité qui est active a une coche placé à côté de la commande et une fonctionnalité qui est désactivée n'a pas de coche. Quand l'utilisateur sélectionne le menu, l'état de la coche est inversé. Vous pouvez aussi créer des boutons radio sur les items de menu.

-

Les coches sont créées de manière similaire aux éléments checkbox et radio. Elles impliquent l'utilisation de deux attributs : type pour indiquer le type de coche et name pour regrouper les commandes. L'exemple ci-dessous crée un menu avec un élément coché.

-

Exemple 2: Source Voir

-
<toolbox>
-  <menubar id="options-menubar">
-    <menu id="options_menu" label="Options">
-      <menupopup>
-        <menuitem id="backups" label="Faire des sauvegardes" type="checkbox"/>
-        <menuitem id="backups" label="Mail de l'administrateur" type="checkbox" checked="true"/>
-      </menupopup>
-    </menu>
-  </menubar>
-</toolbox>
-
-

L'attribut type ajouté est utilisé pour rendre l'élément de menu « cochable ». En mettant sa valeur à 'checkbox', l'élément de menu peut être coché et décoché par simple sélection.

- -

En plus des coches standard, vous pouvez créer des coches de style radio en mettant type à la valeur 'radio'. Une coche radio est utilisée quand vous voulez un groupe d'éléments de menu dont l'un seulement peut être coché à la fois. Un exemple peut être un menu de police de caractères où une seule police peut être sélectionnée. Quand un autre item est sélectionné, l'élément choisi précédemment est automatiquement décoché.

-

Pour grouper plusieurs éléments de menu ensemble, vous devez placer un attribut name sur chacun d'eux. Mettez la même chaîne de caractères comme valeur. L'exemple ci-dessous vous en donne l'illustration :

-

Exemple 3: Source Voir

-
<toolbox>
-  <menubar id="planets-menubar">
-    <menu id="planet-menu" label="Planète">
-      <menupopup>
-        <menuitem id="jupiter" label="Jupiter" type="radio" name="ringed"/>
-        <menuitem id="saturn" label="Saturne" type="radio" name="ringed" checked="true"/>
-        <menuitem id="uranus" label="Uranus" type="radio" name="ringed"/>
-        <menuseparator/>
-        <menuitem id="earth" label="Terre" type="radio" name="inhabited" checked="true"/>
-        <menuitem id="moon" label="Lune" type="radio" name="inhabited"/>
-      </menupopup>
-    </menu>
-  </menubar>
-</toolbox>
-
-

Si vous essayez cet exemple, vous verrez que sur les trois premiers éléments, un seul peut être coché à la fois. Ils sont regroupés car ils ont le même nom. Le dernier élément de menu, 'Terre', ne fait pas partie du groupe car il a un nom différent. Pourtant, c'est aussi un bouton radio.

-

Bien sûr, les éléments de menu groupés doivent tous être dans le même menu. Ils n'ont pas à être placés les uns à côté des autres, mais les placer autrement n'aurait pas beaucoup de sens.

-
-

Par la suite, nous allons voir comment créer des menus surgissants.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/plus_sur_les_gestionnaires_d'\303\251v\303\250nements/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/plus_sur_les_gestionnaires_d'\303\251v\303\250nements/index.html" deleted file mode 100644 index 73d1b21264..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/plus_sur_les_gestionnaires_d'\303\251v\303\250nements/index.html" +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Plus sur les gestionnaires d'évènements -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Plus_sur_les_gestionnaires_d'évènements -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/More_Event_Handlers ---- -

 

-
-

« PrécédentSuivant »

-
-

Dans cette section, l'objet événement sera examiné et des événements additionnels seront décrits.

-

L'objet 'event'

-

Chaque gestionnaire d'événement dispose d'un unique argument qui contient un objet event. Dans la forme avec attributs des scrutateurs d'événements, cet événement est un argument implicite auquel un script peut se référer en utilisant le nom 'event'. Sous la forme addEventListener, le premier argument de la fonction scrutatrice sera un objet événement. L'objet 'event' dispose d'un certain nombre de propriétés qui peuvent être examinées lors de l'émission d'un événement. La liste complète est disponible dans les références objets.

-

Nous avons déjà vu la propriété target d'un événement dans la section précédente. Elle contient une référence de l'élément ayant déclenché l'événement. Une propriété similaire currentTarget contient l'élément sur lequel est placé un scrutateur d'événement. Dans l'exemple ci-dessous, currentTarget pointe toujours la boîte vbox, alors que la cible peut être un élément spécifique, le bouton ou la case à cocher qui a été activé.

-

Exemple 1: Source Voir

-
<vbox oncommand="alert(event.currentTarget.tagName);">
-   <button label="OK"/>
-   <checkbox label="Voir les images"/>
-</vbox>
-
-

Stopper la propagation d'événement

-

Une fois qu'un événement est traité, indépendamment de l'étape de la propagation où se trouve l'événement, vous pouvez empêcher qu'il soit transmis aux éléments suivants, c'est-à-dire de stopper les phases de captures ou de diffusion. En fonction de la manière dont vous avez attaché le scrutateur d'événement sur un élément, il existe plusieurs méthodes pour le faire.

-

Rappelez-vous que la phase de capture intervient avant la phase de diffusion, donc tous les scrutateurs de capture sont déclenchés avant les scrutateurs de diffusion. Si un événement capturé stoppe la propagation événementielle, aucun des scrutateurs de capture ou de diffusion suivants ne recevront de notification d'un quelconque événement. Pour interrompre la propagation événementielle, appelez la méthode stopPropagation de l'objet événement, comme dans l'exemple qui suit.

-

Exemple 2: Source Voir

-
<hbox id="outerbox">
-  <button id="okbutton" label="OK"/>
-</hbox>
-
-<script>
-function buttonPressed(event){
-  alert('Le bouton a été pressé !');
-}
-
-function boxPressed(event){
-  alert('La boîte a été pressée !');
-  event.stopPropagation();
-}
-
-var button = document.getElementById("okbutton");
-button.addEventListener('command',buttonPressed,true);
-
-var outerbox = document.getElementById("outerbox");
-outerbox.addEventListener('command',boxPressed,true);
-</script>
-
-

Ici, un scrutateur d'événement a été ajouté au bouton, et un autre à la boîte. La méthode stopPropagation est appelée dans le scrutateur de la boîte, donc le scrutateur du bouton ne sera jamais appelé. Si cet appel est enlevé, les deux scrutateurs seront appelés et les deux alertes apparaîtront.

-

Empêcher l'action par défaut

-

Si aucun gestionnaire d'événement n'a été enregistré pour un événement donné, alors après avoir accompli les phases de capture et de diffusion, l'élément traitera l'événement dans un mode par défaut. L'action par défaut dépendra de la nature de l'événement et du type d'élément. Par exemple, l'événement 'popupshowing' est envoyé par un menu surgissant juste avant son affichage. L'action par défaut est l'affichage du menu surgissant. Si l'action par défaut est bloquée, l'affichage ne se fera pas. L'action par défaut peut être empêchée avec la méthode preventDefault de l'objet événement, comme dans l'exemple ci-dessous.

-

Exemple 3: Source Voir

-
<button label="Types" type="menu">
-  <menupopup onpopupshowing="event.preventDefault();">
-    <menuitem label="Verre"/>
-    <menuitem label="Plastique"/>
-  </menupopup>
-</button>
-
-

Alternativement, pour des scrutateurs d'événement par attributs, vous pouvez simplement faire renvoyer la valeur 'false' par le code. Notez que l'empêchement de l'action par défaut ne revient pas à interrompre la propagation événementielle avec la méthode stopPropagation. Même si l'action par défaut a été bloquée, l'événement continue à se propager. De même, l'appel de la méthode stopPropagation ne bloquera pas l'action par défaut. Vous devrez appeler ces deux méthodes pour interrompre les deux actions.

-

Notez qu'une fois la propagation ou l'action par défaut bloquée, il n'est pas possible de les rendre actives de nouveau pour cet événement.

-

Les sous-sections ci-dessous listent quelques-uns des événements pouvant être utilisés. Une liste complète est fournie dans la référence des événements.

-

Événements de la souris

-

Il y a plusieurs événements pouvant être employés pour gérer les actions de la souris, listés dans le tableau suivant :

-
-
- 'click' 
-
- appelé lorsque la souris est appuyée puis relâchée sur un élément.
-
- 'dblclick' 
-
- appelé lorsque la souris est double-cliquée.
-
- 'mousedown' 
-
- appelé lorsqu'un bouton de la souris est pressé. Le gestionnaire d'événement est appelé aussitôt que le bouton de la souris est appuyé, avant même qu'il ne soit relâché.
-
- 'mouseup' 
-
- appelé lorsque la souris est relâchée sur un élément.
-
- 'mouseover' 
-
- appelé lorsque le pointeur de la souris survole un élément. Vous pourriez utiliser cet événement pour mettre en valeur l'élément, toutefois CSS fournit une façon automatique de le faire, il est donc inutile de le faire avec un événement. Vous pouvez toutefois l'utiliser pour afficher une aide dans la barre d'état.
-
- 'mousemove' 
-
- appelé lorsque le pointeur de la souris se déplace au-dessus d'un élément. L'événement étant appelé à chaque déplacement de la souris, vous devriez éviter de faire appel à ce gestionnaire pour des tâches trop longues.
-
- 'mouseout' 
-
- appelé lorsque le pointeur de la souris quitte un élément. Vous pourriez annuler la mise en valeur de l'élément ou effacer le texte de la barre d'état.
-
-

Il existe également un jeu d'événements relatifs au glisser, qui intervient lorsque l'utilisateur maintient le bouton de la souris enfoncé et déplace la souris. Ces événements seront décrits dans la section Glisser-Déposer.

-

Propriétés des événements des boutons de la souris

-

Lorsqu'un événement sur un bouton de la souris se produit, vous disposez d'un certain nombre de propriétés supplémentaires pour déterminer quels boutons ont été pressés et la position du pointeur de la souris. La propriété button de 'event' peut être utilisée pour déterminer quel bouton a été pressé, avec les valeurs possibles de '0' pour le bouton de gauche, '1' pour le bouton de droite, et '2' pour le bouton du milieu. Si vous avez configuré votre souris différemment, ces valeurs peuvent être différentes.

-

La propriété detail contient le nombre de fois que le bouton a été cliqué rapidement en séquence. Elle permet de tester des clics simples, doubles ou triples. Bien entendu, si vous ne souhaitez tester que les double-clics, vous pouvez plutôt utiliser l'événement 'dblclick'. L'événement 'click' sera lancé dès le premier clic, puis de nouveau pour le second clic, puis pour le troisième clic, tandis que l'événement 'dblclick' ne sera lancé que pour un double-clic.

-

Les propriétés button et detail ne s'appliquent qu'aux événements se rapportant aux boutons de la souris, et non aux déplacements de la souris. Pour l'événement 'mousemove', par exemple, l'ensemble de ces propriétés aura une valeur de '0'.

-

Propriétés des événements de position de la souris

-

Toutefois, tous les événements de la souris disposent des propriétés contenant les coordonnées de la position de la souris lors du déclenchement de l'événement. Il y a deux jeux de coordonnées. Le premier jeu définit les propriétés screenX et screenY mesurées depuis le coin supérieur gauche de l'écran. Le second jeu, clientX et clientY, est calculé à partir du coin supérieur gauche du document. Voici un exemple qui affiche les coordonnées courantes de la souris :

-

Exemple 4: Source Voir

-
<script>
-
-function updateMouseCoordinates(event){
-  var text = "X:" + event.clientX + " Y:" + event.clientY;
-  document.getElementById("xy").value = text;
-}
-</script>
-
-<label id="xy"/>
-<hbox width="400" height="400" onmousemove="updateMouseCoordinates(event);"/>
-
-

Dans cet exemple, les dimensions de la boîte ont été fixées explicitement pour que l'effet soit plus visible. Le gestionnaire d'événement récupère les propriétés clientX et clientY et les convertit en une chaîne (string). Cette chaîne est affectée à la propriété value du libellé. Notez que l'argument 'event' doit être passé à la fonction updateMouseCoordinates. Si vous déplacez rapidement la souris autour de la bordure, vous noterez que les coordonnées ne s'arrêtent généralement pas exactement sur '400'. Ceci s'explique car l'événement 'mousemove' se déclenche selon un intervalle dépendant de la vitesse de déplacement de la souris, et celle-ci s'est généralement déplacée au-delà de la bordure avant le lancement de l'événement suivant. Évidement, il ne serait pas judicieux d'envoyer un événement 'mousemove' sur chacun des pixels parcourus par la souris.

-

Coordonnées relatives à un élément

-

Souvent, ce sont les coordonnées relatives à l'élément qui a déclenché l'événement que vous voulez obtenir, pas celles relatives à la fenêtre entière. Pour y parvenir, il vous suffit de soustraire la position de l'élément à la position de l'événement, comme dans le code suivant.

-
var element = event.target;
-var elementX = event.clientX - element.boxObject.x;
-var elementY = event.clientY - element.boxObject.y;
-
-

Les éléments XUL ont un objet de boîte accessible en utilisant la propriété boxObject. Nous en apprendrons plus sur l'objet de boîte dans une section ultérieure, mais sachez qu'il contient des informations sur l'affichage de l'élément, incluant notamment ses coordonnées horizontales (x) et verticales (y). Dans cet exemple de code, ces coordonnées sont soustraites de celles de l'événement pour obtenir la position relative de l'élément XUL.

-

Événements de chargement

-

L'événement de chargement est envoyé au document (l'élément window) dès que le fichier XUL a fini son chargement et juste avant que son contenu ne soit affiché. Cet événement est couramment utilisé pour initialiser les champs et réaliser d'autres tâches qui doivent être exécutées avant que l'utilisateur ne dispose de la fenêtre. Vous devriez utiliser un événement de chargement pour faire ce genre de chose plutôt que d'ajouter un script de niveau supérieur extérieur à une fonction. Cette préconisation tient au fait que les éléments XUL peuvent ne pas être chargés ou ne pas être totalement initialisés, ce qui peut entraîner des dysfonctionnements. Pour utiliser un événement de chargement, placez l'attribut onload sur l'élément window. Appelez du code à l'intérieur du gestionnaire de chargement afin d'initialiser l'interface si nécessaire.

-

Il existe également un événement unload qui est appelé dès que la fenêtre est fermée ou, dans un contexte de navigation, lorsque la page bascule vers une autre URL. Vous pouvez utiliser cet événement, par exemple, pour sauvegarder des informations modifiées.

-
-

Nous verrons ensuite comment ajouter des raccourcis clavier.

-
-

« PrécédentSuivant »

-
diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_dans_une_pile/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_dans_une_pile/index.html deleted file mode 100644 index 5a940e4ff2..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_dans_une_pile/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Positionnement dans une pile -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Positionnement_dans_une_pile -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Stack_Positioning ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section va décrire comment positionner des éléments dans une pile (stack).

-

Placement des enfants d'une pile

-

Normalement, les éléments enfants d'une pile s'étirent pour s'ajuster à la dimension de la pile. Toutefois, vous pouvez aussi placer ces enfants à des coordonnées précises. Par exemple, si la pile a deux boutons comme enfants, l'un d'eux peut être placé à 20 pixels du bord gauche et 50 pixels du bord supérieur. Le second bouton peut être placé à 100 pixels du bord gauche et 5 pixels du bord supérieur.

-

La position d'un élément enfant doit être précisée en plaçant deux attributs sur chaque élément. Pour le positionnement horizontal, utilisez l'attribut left et pour le positionnement vertical, utilisez l'attribut top. Si vous ne mettez pas ces attributs sur un enfant de la pile, celui-ci va s'étirer pour s'ajuster à la dimension de la pile.

-

Exemple 1: Source Voir

-
Image:xultu_ex_4_4_1.png
-
<stack>
-   <button label="Goblins" left="5" top="5"/>
-   <button label="Trolls" left="60" top="20"/>
-   <button label="Vampires" left="10" top="60"/>
-</stack>
-
-

La pile stack contient trois éléments, chacun d'eux est positionné aux coordonnées précisées par les attributs left et top. Ici, les trois éléments enfants sont des boutons, mais les éléments n'ont pas à être tous du même type. Il peut y avoir n'importe quels éléments, même des boîtes ou d'autres piles.

-

Les dimensions d'une pile sont déterminées par les positions de ses éléments enfants. La pile aura toujours des dimensions permettant à ses éléments enfants d'être visibles. Ainsi, si vous initialisez l'attribut left d'un enfant à la valeur de '400', la pile aura une largeur d'environ 400 pixels plus la largeur de cet élément enfant. Vous pouvez outrepasser cette taille avec des propriétés de style variées telles que width et max-width.

-

Vous pouvez utiliser un script pour ajuster les valeurs des attributs left et top et de ce fait, rendre les éléments mobiles. Les piles présentent l'avantage suivant : lorsqu'un élément positionné de façon absolue change sa position, la position des autres éléments n'est pas affectée. Si vous essayez de déplacer des éléments dans une boîte normale, les autres éléments vont bouger en réaction.

-

Il est également possible de placer des éléments enfants de telle manière qu'ils se superposent. Lorsque les éléments enfants se dessinent, ils sont affichés dans l'ordre où ils sont apparus dans la pile. De ce fait, le premier enfant d'une pile apparaît en arrière plan, suivi du second et ainsi de suite. Le dernier enfant apparaît au premier plan. Vous pouvez utiliser les fonctions DOM pour modifier l'ordre des éléments.

-

Lorsqu'ils répondent aux événements de la souris, les éléments au premier plan vont capturer les événements en premier. Cela signifie que si deux boutons se superposent, le bouton au premier plan va capturer le clic de la souris à l'endroit où il couvre l'autre bouton.

-
-

La prochaine section décrit les onglets, qui sont comme des paquets (deck) mais fournissent leur propre système d'utilisation.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_des_\303\251l\303\251ments/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_des_\303\251l\303\251ments/index.html" deleted file mode 100644 index f3cdf9ff84..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/positionnement_des_\303\251l\303\251ments/index.html" +++ /dev/null @@ -1,253 +0,0 @@ ---- -title: Positionnement des éléments -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Positionnement_des_éléments -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Element_Positioning ---- -
-

« PrécédentSuivant »

-
- -

Ici nous apprendrons à contrôler la position et la taille d'un élément.

- -

Positionnement des éléments de boîte

- -

Jusqu'ici, nous avons appris à placer des éléments horizontalement ou verticalement à l'intérieur d'une boîte. Nous aurons souvent besoin d'un meilleur contrôle sur la position et la taille des éléments à l'intérieur d'une boîte. Pour cela, nous devons d'abord comprendre le fonctionnement d'une boîte.

- -

La position d'un élément est déterminée par le style de mise en plage de son conteneur. Par exemple, la position d'un bouton dans une boîte horizontale est à droite du bouton précédent, s'il y en a plusieurs. La dimension d'un élément est déterminée par deux facteurs, la place que cet élément cherche à occuper et la taille que vous avez spécifiée. La taille qu'un élément cherche à avoir est déterminée par son contenu. Par exemple, la largeur d'un bouton est déterminée par la quantité de texte à l'intérieur du bouton.

- -

Un élément sera généralement juste assez large pour les besoins de l'affichage de son contenu, et pas plus large. Quelques éléments, tels que les boîtes de textes, utiliseront une taille par défaut. Une boîte aura la largeur nécessaire à l'affichage des éléments qu'elle contient. Une boîte horizontale contenant trois boutons aura la largeur de ces trois boutons, plus la marge.

- -

Dans l'image ci-dessous, les deux premiers boutons ont la taille suffisante à l'affichage de leur texte. Le troisième bouton est plus large parce que son contenu est plus grand. La largeur de la boîte contenant les boutons correspond au total des largeurs de ces boutons plus la marge entre eux. La hauteur des boutons est une taille adaptée à l'affichage du texte.

- -

Image:xultu_boxstyle1n.png

- -

Attributs de largeur et de hauteur

- -

Vous pourriez avoir besoin de mieux contrôler la taille d'un élément dans une fenêtre. Plusieurs dispositifs vous permettent de contrôler la dimension d'un élément. La méthode la plus rapide est d'ajouter simplement les attributs width et height sur un élément, un peu comme vous le feriez avec la balise HTML img. Voir l'exemple ci-dessous :

- -

Exemple 1: Source Voir

- -
<button label="OK" width="100" height="40"/>
- -

Cependant, il n'est pas recommandé de procéder ainsi. Cette méthode n'est pas vraiment portable et peut ne pas s'adapter à certains thèmes. Une meilleure méthode consiste à utiliser des propriétés de style, dont le fonctionnement est similaire aux feuilles de styles du HTML. Les propriétés CSS suivantes peuvent être utilisées.

- -
-
width 
-
Ceci indique la largeur d'un élément.
-
height 
-
Ceci indique la hauteur d'un élément.
-
- -

En plaçant l'une ou l'autre de ces deux propriétés, l'élément sera créé avec cette largeur et cette hauteur. Si vous spécifiez seulement une de ces deux propriétés, l'autre est calculée en fonction de ses propres besoins. La valeur de ces propriétés de style doit être définie par un nombre suivi d'une unité de mesure.

- -

Éléments flexibles

- -

Les dimensions des éléments non flexibles sont assez faciles à calculer. Elles correspondent simplement aux largeurs et de hauteurs spécifiées, ou si ces valeurs ne sont pas définies, elles sont ajustées par défaut au contenu. Pour les éléments flexibles, le calcul est légèrement plus savant.

- -

Les éléments flexibles sont ceux qui ont un attribut flex dont la valeur est supérieure à 0. Rappelez-vous que les éléments flexibles s'étirent et s'élargissent pour remplacer l'espace vide. Leurs tailles par défaut restent calculées de la même façon que les éléments non flexibles. Considérez l'exemple suivant :

- -

Exemple 2: Source Voir

- -
<window orient="horizontal"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<box>
-   <button label="Oui" flex="1"/>
-   <button label="Non"/>
-   <button label="Je ne connais pas vraiment cette manière ou l'autre"/>
-</box>
-
- -

La fenêtre apparaîtra initialement comme sur l'image précédente. Les deux premiers boutons seront dimensionnés à une largeur par défaut convenable et le troisième bouton sera plus large parce que son libellé est plus long. Le premier bouton est flexible et les trois éléments ont été placés à l'intérieur d'une boîte. La largeur de la boîte correspondra à la largeur totale des trois boutons (environs 515 pixels dans l'image).

- -

Si vous augmentez la largeur de la fenêtre, une vérification de la flexibilité des éléments est effectuée afin d'assurer le remplissage de l'espace libre à afficher. Le bouton est le seul élément flexible, mais il ne s'élargira pas plus, parce que la boîte contenant le bouton n'est pas flexible. Un élément inflexible ne change jamais de taille même lorsque de l'espace est disponible, c'est pourquoi le bouton ne s'agrandit pas non plus. Ainsi, le bouton ne pourra pas s'élargir.

- -

La solution est de rendre la boîte flexible également. De cette façon, quand vous élargirez la fenêtre, de l'espace supplémentaire sera disponible, et la boîte s'élargira alors pour remplir cet espace supplémentaire. Puisque la boîte est plus grande, une plus grande quantité d'espace libre est créée à l'intérieur de celle-ci, et le bouton flexible qu'elle contient s'élargira pour occuper l'espace disponible. Ce processus est répété pour toutes les boîtes présentes, autant de fois que nécessaire.

- -

Réglage des tailles minimales et maximales

- -

Vous pouvez autoriser un élément à être flexible tout en limitant ses dimensions de sorte à certaines valeurs. À l'inverse, vous pouvez définir des dimensions minimales. Ce comportement se définit par les quatre attributs suivants :

- -
-
minwidth 
-
Ceci indique la largeur minimale que l'élément peut posséder.
-
minheight 
-
Ceci indique la hauteur minimale que l'élément peut posséder.
-
maxwidth 
-
Ceci indique la largeur minimale que l'élément peut posséder.
-
maxheight 
-
Ceci indique la hauteur minimale que l'élément peut posséder.
-
- -

Les valeurs sont toujours mesurées en pixels. Vous pouvez également employer les propriétés CSS correspondantes, min-width, min-height, max-width et max-height.

- -

Ces propriétés ne sont utiles que pour des éléments flexibles. En plaçant une hauteur maximale, par exemple, un bouton extensible s'étirera seulement jusqu'à cette hauteur maximale. Vous pourrez toujours agrandir la fenêtre au-delà de ce point mais la taille du bouton cessera de s'accroître. La boîte dans laquelle le bouton se trouve continuera également à s'agrandir, à moins que vous ne définissiez aussi une hauteur maximale pour la boîte.

- -

Si deux boutons sont flexibles, ils se partageront normalement tous les deux la quantité d'espace disponible. Si un bouton a une largeur maximale, le second devrait continuer de s'agrandir en prenant tout l'espace restant.

- -

Si une boîte a une largeur ou une hauteur maximale, les enfants ne peuvent pas se développer au-delà de cette taille maximale. Si une boîte a une largeur ou une taille minimale, les enfants ne peuvent pas rétrécir au-delà de cette taille minimale.

- -

Exemples de réglage de largeurs et de hauteurs

- -
<button label="1" style="width: 100px;"/>
-<button label="2" style="width: 100em; height: 10px;"/>
-<button label="3" flex="1" style="min-width: 50px;"/>
-<button label="4" flex="1" style="min-height: 2ex; max-width: 100px"/>
-<textbox flex="1" style="max-width: 10em;"/>
-<description style="max-width: 50px">Ceci est quelque peu ennuyant mais c'est un texte s'étalant simplement.</description>
-
- -
-
Exemple 1 
-
Le premier bouton sera affiché avec une largeur de 100 pixels (le px signifie pixels). Vous devez ajouter l'unité, ou la largeur définie sera ignorée.
-
Exemple 2 
-
Le deuxième bouton sera affiché avec une hauteur de dix pixels et une largeur de 100 em (un em correspond à la taille d'un caractère dans la police courante).
-
Exemple 3 
-
Le troisième bouton flexible s'agrandira en se basant sur la taille de la boîte qui le contient. Cependant, le bouton ne rétrécira jamais au-dessous de 50 pixels. D'autres composants flexibles tels que des éléments spacers absorberont l'espace restant, brisant ainsi le rapport de flexibilité.
-
Exemple 4 
-
Le quatrième bouton est flexible et n'aura jamais une hauteur inférieure à 2 ex (un ex correspond habituellement à la taille de la lettre x dans la police courante) ou une largeur supérieure à 100 pixels.
-
Exemple 5 
-
Le champ de saisie de texte est flexible mais sa largeur ne sera jamais supérieure à 10 em. Vous employerez souvent les ems quand vous préciserez les tailles des champs de saisie de texte en fonction du texte qu'ils contiennent. Cette unité est utile pour des champs de saisie de texte qui peuvent ainsi s'adapter à la police de caractères utilisée, même si la police est très grande.
-
Exemple 6 
-
L'élément description est limité à 50 pixels en largeur maximale. À l'intérieur, une césure du texte sur la ligne suivante interviendra après 50 pixels.
-
- -
-

Notre exemple de recherche de fichiers

- -

Ajoutons quelques-uns de ces styles à notre exemple de fenêtre de recherche de fichiers. Nous le ferons de telle manière que le champ de saisie de texte s'étire pour remplir entièrement la fenêtre.

- -

Source Voir

- -
<textbox id="find-text" '''flex="1" style="min-width: 15em;"'''/>
- -
Image:xultu_boxstyle1.png
- -

Ici, le champ de saisie de texte a été rendu flexible. De cette façon, il s'agrandira si l'utilisateur change la taille de la fenêtre. C'est utile si l'utilisateur veut saisir une longue chaîne de caractères. En outre, une largeur minimale de 15 em a été définie de sorte que le champ de saisie de texte affiche toujours au moins 15 caractères. Si l'utilisateur redimensionne la fenêtre en diminuant sa taille, le champ de saisie de texte ne se rétrécira pas en-dessous de 15 em. Il sera dessiné comme s'il se prolongait au-delà du bord de la fenêtre. Notez que sur l'image, le champ de saisie de texte s'est étiré de façon à occuper toute la largeur de la fenêtre.

-
- -

Empaquetage de boîte

- -

Nous avons une boîte avec deux éléments enfants, qui ne sont pas flexibles, mais dans la boîte qui est flexible. Par exemple :

- -

Exemple 3: Source Voir

- -
<box flex="1">
-   <button label="Heureux"/>
-   <button label="Triste"/>
-</box>
-
- -

Si vous redimensionnez la fenêtre, la boîte s'étirera pour s'ajuster à la taille de la fenêtre. Les boutons n'étant pas flexibles, leur largeur ne changera pas. Le résultat est qu'un espace supplémentaire apparaîtra sur le côté droit de la fenêtre, à l'intérieur de la boîte. Cependant, vous pouvez désirer que l'espace supplémentaire apparaisse plutôt sur le côté gauche alors que les boutons restent alignés sur la droite de la fenêtre.

- -

Vous pouvez réaliser cela en plaçant un élément spacer à l'intérieur de la boîte, mais cela peut rendre le code confus quand vous devez le faire plusieurs fois. Une meilleure solution est d'utiliser l'attribut pack sur la boîte. Cet attribut indique comment empaqueter les éléments enfants à l'intérieur d'une boîte. Pour des boîtes orientées horizontalement, il contrôle le positionnement horizontal des enfants. Pour les boîtes orientées verticalement, il contrôle le positionnement vertical des enfants. Vous pouvez utilisez les valeurs suivantes :

- -
-
start 
-
Ceci positionne les éléments sur le bord gauche pour les boîtes horizontales et sur le bord haut pour les boîtes verticales. C'est la valeur par défaut.
-
center 
-
Ceci centre les éléments enfants dans la boîte.
-
end 
-
Ceci positionne les éléments sur le bord droit pour les boîtes horizontales et sur le bord bas pour les boîtes verticales.
-
- -

L'attribut pack s'applique à la boîte contenant les éléments à empaqueter et non aux éléments eux-mêmes.

- -

Nous pouvons modifier l'exemple précédent pour centrer les éléments de cette façon :

- -

Exemple 4: Source Voir

- -
<box flex="1" pack="center">
-   <button label="Heureux"/>
-   <button label="Triste"/>
-</box>
-
- -

Maintenant, lorsque la fenêtre est redimensionnée, les boutons sont centrés horizontalement. Comparez ce comportement à celui de l'exemple précédent.

- -

Alignement de boîte

- -

Si vous redimensionnez horizontalement la fenêtre dans l'exemple « Heureux-Triste », la boîte devrait s'élargir. Si vous redimensionnez verticalement la fenêtre, vous noterez que les boutons sont étirés. Ceci est dû à la flexibilité qui est affectée par défaut à l'autre direction.

- -

Vous pouvez contrôler ce comportement avec l'attribut align. Pour les boîtes horizontales, il contrôle le positionnement vertical des enfants. Pour les boîtes verticales, il contrôle le positionnement horizontal des enfants. Les valeurs possibles sont similaires à celles de l'attibut pack.

- -
-
start 
-
Ceci aligne les éléments le long du bord haut pour les boîtes horizontales et le long du bord gauche pour les boîtes verticales.
-
center 
-
Ceci centre les éléments enfants dans la boîte.
-
end 
-
Ceci aligne les éléments le long du bord bas pour les boîtes horizontales et le long du bord droit pour les boîtes verticales.
-
baseline 
-
Ceci aligne les éléments et le texte. Il est utilisable seulement avec des boîtes horizontales.
-
stretch 
-
Cette valeur, affectée par défaut, provoque l'agrandissement des éléments proportionnellement à la taille de la boîte, un peu à la façon d'un élément flexible, mais dans la direction opposée.
-
- -

Comme avec l'attribut pack, l'attribut align s'applique à la boîte contenant les éléments à aligner et non aux éléments eux-mêmes.

- -

Dans l'exemple ci-dessous, la première boîte aura ses enfants étirés, car c'est le comportement par défaut. La seconde boîte a un attribut align, c'est pourquoi ses enfants sont placés au centre.

- -

Exemple 5: Source Voir

- -
<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window id="yesno" title="Question" orient="horizontal"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <hbox>
-    <button label="Oui"/>
-    <button label="Non"/>
-  </hbox>
-  <hbox align="center">
-    <button label="Peut-être"/>
-    <button label="Il se peut"/>
-  </hbox>
-
-</window>
-
- -
Image:xultu_boxstyle2-b.png
- -

Vous pouvez aussi utiliser les propriétés de style -moz-box-pack et -moz-box-align à la place des attributs indiqués.

- -
Vous pouvez trouver l'exemple d'alignement de boîte pratique pour tester les différentes propriétés de boîte (NdT : vous pouvez aussi voir une autre démonstration du même genre sur xulfr).
- -

Coupure du texte et des boutons

- -

Vous pouvez potentiellement créer un élément bouton qui contient un libellé plus large que la largeur maximale du bouton. Bien sûr, une solution serait d'augmenter la taille du bouton. Cependant, les boutons (et les autres éléments avec un libellé) ont un attribut spécial appelé crop qui vous permet d'indiquer de quelle manière le texte doit être traité s'il est trop grand.

- -

Si le texte est coupé, un point de suspension (…) apparaît sur le bouton où le texte a été enlevé. Quatre valeurs sont valides :

- -
-
left 
-
Le texte est coupé sur son côté gauche.
-
right 
-
Le texte est coupé sur son côté droit.
-
center 
-
Le texte est coupé au milieu.
-
none 
-
Le texte n'est pas coupé. C'est la valeur par défaut.
-
- -

Cet attribut est vraiment utile quand une boîte de dialogue a été conçue pour être utilisable à n'importe quelle taille. L'attribut crop peut aussi être utilisé avec les autres éléments qui utilisent un attribut label en tant que libellé. L'exemple suivant montre l'utilisation de cet attribut :

- -

Exemple 6: Source Voir

- -
Image:xultu_boxstyle2.png
- -
<button label="Pressez moi, s'il vous plait !" crop="right" flex="1"/>
- -

Notez comment le texte sur le bouton voit son côté droit coupé si la fenêtre est réduite.

- -
-

Dans la prochaine section, nous ferons un petit résumé et décrirons quelques détails supplémentaires concernant le modèle de boîte.

- -
-

« PrécédentSuivant »

-
diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/raccourcis_clavier/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/raccourcis_clavier/index.html deleted file mode 100644 index 861c0450d0..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/raccourcis_clavier/index.html +++ /dev/null @@ -1,377 +0,0 @@ ---- -title: Raccourcis clavier -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Raccourcis_clavier -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Keyboard_Shortcuts ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Pour réagir aux touches pressées, vous pouvez utiliser des gestionnaires d'événements clavier, mais il serait fastidieux de le faire pour chaque bouton ou chaque item de menu.

- -

Création d'un raccourci clavier

- -

XUL fournit des méthodes par lesquelles vous pouvez définir des raccourcis clavier. Nous avons déjà vu dans la section sur les menus que nous pouvions définir un attribut appelé accesskey qui spécifie la touche à presser par l'utilisateur pour activer le menu ou l'item de menu. Dans l'exemple ci-dessous, le menu Fichier peut être sélectionné en pressant Alt et F (ou une autre combinaison de touches spécifique à une plate-forme). Une fois le menu Fichier ouvert, l'item de menu Fermer peut être sélectionné en pressant F.

- -

Exemple 1: Source Voir

- -
<menubar id="sample-menubar">
-   <menu id="file-menu" label="Fichier" accesskey="f">
-     <menupopup id="file-popup">
-       <menuitem id="close-command" label="Fermer" accesskey="f"/>
-     </menupopup>
-   </menu>
-</menubar>
-
- -

Vous pouvez aussi utiliser l'attribut accesskey sur les boutons. Dans ce cas, quand la touche est pressée, le bouton est sélectionné.

- -

Cependant, vous pourriez vouloir mettre en place des raccourcis clavier plus généraux, comme par exemple, la combinaison Ctrl+C pour copier du texte dans le presse-papiers. Bien que de tels raccourcis puissent ne pas être toujours valides, ils fonctionneront habituellement dès qu'une fenêtre est ouverte. Normalement, un raccourci sera autorisé à n'importe quel moment et vous pourrez vérifier via un script s'il doit faire quelque chose. Par exemple, copier du texte dans le presse-papiers ne devrait fonctionner seulement quand du texte est sélectionné.

- -

Élément key

- -

XUL fournit un élément, key, qui vous permet de définir un raccourci clavier pour une fenêtre. Il comprend des attributs pour définir la touche qui doit être pressée et quels modificateurs de touches (tels que shift pour Maj ou control pour Ctrl) doivent l'accompagner. Un exemple :

- -
<keyset>
-   <key id="sample-key" modifiers="shift" key="R"/>
-</keyset>
-
- -

Cet exemple définit un raccourci clavier qui s'active lorsque l'utilisateur presse les touches Maj et R. L'attribut key (notez qu'il a le même nom que l'élément lui-même) est utilisé pour indiquer quelle touche doit être pressée, dans ce cas R. Vous pouvez ajouter n'importe quels caractères à cet attribut selon les combinaisons de touches devant être pressées. Les modificateurs de touches devant être pressés sont indiqués par l'attribut modifiers. Il s'agit d'une liste de modificateurs séparée par des espaces, et ils sont décrits ci-dessous :

- -
-
'alt' 
-
L'utilisateur doit presser la touche Alt. Sous Macintosh, il s'agit de la touche Option.
-
'control' 
-
L'utilisateur doit presser la touche Ctrl
-
'meta' 
-
L'utilisateur doit presser la touche Meta. Il s'agit de la touche Command sous Macintosh.
-
'shift' 
-
L'utilisateur doit presser la touche Shift (Maj)
-
'accel' 
-
L'utilisateur doit presser la touche spéciale d'accélérateur. L'utilisateur doit presser la touche de raccourci spécifique à sa plate-forme. Il s'agit de la valeur que vous utiliserez habituellement.
-
- -

Votre clavier n'a pas forcément toutes ces touches, dans ce cas, elles seront actives par d'autres touches de modification que vous possédez.

- -

L'élément key doit être placé à l'intérieur d'un élément keyset. Cet élément est destiné à contenir un ensemble d'éléments key servant à grouper toutes les définitions de raccourcis dans un seul emplacement du fichier. Tout élément key à l'extérieur d'un élément keyset ne sera pas pris en compte.

- -

Généralement, chaque plate-forme utilise une touche différente pour les raccourcis clavier. Par exemple, Windows utilise la touche Ctrl tandis que Macintosh utilise la touche Command. Il serait peu commode de définir un élément key propre à chaque plate-forme. Heureusement, il y a une solution, le modificateur de touches 'accel' se réfère à la touche de raccourci spécifique à la plate-forme. Il fonctionne exactement comme les autres modificateurs de touches excepté qu'il change selon la plate-forme.

- -

Voici quelques exemples supplémentaires :

- -
<keyset>
-   <key id="copy-key" modifiers="control" key="C"/>
-   <key id="explore-key" modifiers="control alt" key="E"/>
-   <key id="paste-key" modifiers="accel" key="V"/>
-</keyset>
-
- -

Attribut keycode

- -

L'attribut key est utilisé pour spécifier quelles touches doivent être pressées. Toutefois, il y aura aussi des cas où vous voudrez spécifier des touches qui ne peuvent être décrites par un simple caractère (telle que la touche Enter ou les touches de fonctions). L'attribut key peut seulement être utilisé pour des caractères imprimables. Un autre attribut, keycode peut être utilisé pour les caractères non imprimables.

- -

La valeur de l'attribut keycode doit être un code spécial qui représente la touche souhaitée. Une liste de touches est disponible ci-dessous. Toutes les touches ne sont pas disponibles sur toutes les plate-formes.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VK_CANCELVK_BACKVK_TABVK_CLEAR
VK_RETURNVK_ENTERVK_SHIFTVK_CONTROL
VK_ALTVK_PAUSEVK_CAPS_LOCKVK_ESCAPE
VK_SPACEVK_PAGE_UPVK_PAGE_DOWNVK_END
VK_HOMEVK_LEFTVK_UPVK_RIGHT
VK_DOWNVK_PRINTSCREENVK_INSERTVK_DELETE
VK_0VK_1VK_2VK_3
VK_4VK_5VK_6VK_7
VK_8VK_9VK_SEMICOLONVK_EQUALS
VK_AVK_BVK_CVK_D
VK_EVK_FVK_GVK_H
VK_IVK_JVK_KVK_L
VK_MVK_NVK_OVK_P
VK_QVK_RVK_SVK_T
VK_UVK_VVK_WVK_X
VK_YVK_ZVK_NUMPAD0VK_NUMPAD1
VK_NUMPAD2VK_NUMPAD3VK_NUMPAD4VK_NUMPAD5
VK_NUMPAD6VK_NUMPAD7VK_NUMPAD8VK_NUMPAD9
VK_MULTIPLYVK_ADDVK_SEPARATORVK_SUBTRACT
VK_DECIMALVK_DIVIDEVK_F1VK_F2
VK_F3VK_F4VK_F5VK_F6
VK_F7VK_F8VK_F9VK_F10
VK_F11VK_F12VK_F13VK_F14
VK_F15VK_F16VK_F17VK_F18
VK_F19VK_F20VK_F21VK_F22
VK_F23VK_F24VK_NUM_LOCKVK_SCROLL_LOCK
VK_COMMAVK_PERIODVK_SLASHVK_BACK_QUOTE
VK_OPEN_BRACKETVK_BACK_SLASHVK_CLOSE_BRACKETVK_QUOTE
VK_HELP   
- -

Par exemple, pour créer un raccourci qui est activé quand l'utilisateur presse les touches Alt et F5, faites ainsi :

- -
<keyset>
-   <key id="test-key" modifiers="alt" keycode="VK_F5"/>
-</keyset>
-
- -

L'exemple ci-dessous montre quelques raccourcis clavier supplémentaires :

- -
<keyset>
-   <key id="copy-key" modifiers="accel" key="C"/>
-   <key id="find-key" keycode="VK_F3"/>
-   <key id="switch-key" modifiers="control alt" key="1"/>
-</keyset>
-
- -

Le premier raccourci est déclenché lorsque l'utilisateur presse la touche de raccourci spécifique à sa plate-forme et C. Le deuxième est invoqué quand l'utilisateur presse F3. Le troisième se déclenche sur une pression des touches Ctrl, Alt et 1. Si vous voulez distinguer les touches de la partie centrale du clavier et les touches du pavé numérique, utilisez les touches VK_NUMPAD (telles que 'VK_NUMPAD1').

- -
Consultez la page anglaise Mozilla Keyboard Planning FAQ and Cross Reference pour de plus amples informations sur les raccourcis clavier dans les applications.
- -

Utilisation des raccourcis clavier

- -

Maintenant que nous savons comment définir les raccourcis clavier, nous allons découvrir comment les utiliser. Il y a deux manières. La première est la plus simple et requiert seulement que vous utilisiez le gestionnaire d'événements clavier sur l'élément key. Quand l'utilisateur presse la (ou les) touche(s), le script est invoqué. Voici un exemple :

- -
<keyset>
-   <key id="copy-key" modifiers="accel" key="C" oncommand="DoCopy();"/>
-</keyset>
-
- -

La fonction DoCopy sera appelée quand l'utilisateur pressera les touches spécifiées par l'élément key qui sont, dans cet exemple, les touches pour copier vers le presse-papiers (telles que Ctrl+C). Ceci fonctionnera tant que la fenêtre sera ouverte. La fonction DoCopy devrait vérifier si du texte est sélectionné et le copier dans le presse-papiers si tel est le cas. Notez que les champs de saisie intègrent déjà des raccourcis pour utiliser le presse-papiers, de sorte que vous n'avez pas besoin de les implémenter vous-même.

- -

Assignation d'un raccourci clavier à un menu

- -

Si vous assignez un raccourci clavier à une commande qui existe déjà dans un menu, vous pouvez associer directement l'élément key avec la commande du menu. Pour cela, ajoutez un attribut key à l'élément menuitem. Donnez lui comme valeur l'id du raccourci que vous voulez lui associer. L'exemple ci-dessous explique cette méthode.

- -

Exemple 2: Source Voir

- -
Image:xultu_keyshort1.jpg
- -
<keyset>
-  <key id="paste-key" modifiers="accel" key="V"
-          oncommand="alert('invoque Coller')"/>
-</keyset>
-
-<menubar id="sample-menubar">
-  <menu id="edit-menu" label="Editer" accesskey="e">
-    <menupopup id="edit-popup">
-      <menuitem id="paste-command"
-         accesskey="c" key="paste-key"
-         label="Coller" oncommand="alert('invoque Coller')"/>
-    </menupopup>
-  </menu>
-</menubar>
-
- -

L'attribut key de l'item du menu, qui est ici 'paste-key', est égal à l'id du raccourci défini. Vous pouvez utilisez cette méthode pour définir des raccourcis supplémentaires à plusieurs items de menu.

- -

Vous noterez également dans cette image que du texte a été placé à côté de la commande 'Coller' du menu pour indiquer le raccourci Ctrl+V pouvant être pressé pour invoquer la commande du menu. Cette indication est ajoutée automatiquement pour vous sur la base des touches de modification de l'élément key. Les raccourcis associés aux menus fonctionneront même si le menu n'est pas ouvert.

- -

Une fonctionnalité supplémentaire des définitions de raccourcis est que vous pouvez les désactivez facilement. Il vous suffit d'ajouter un attribut disabled à l'élément key et lui affecter la valeur 'true'. Cet attribut désactive le raccourci clavier de façon à ce qu'il ne puisse pas être invoqué. Il est facile de modifier l'attribut disabled par le biais d'un script.

- -
-

Notre exemple de recherche de fichiers

- -

Ajoutons des raccourcis clavier à la boîte de dialogue de recherche de fichiers. Nous en ajouterons quatre, un pour chacune des commandes Couper, Copier et Coller, et aussi un pour la commande Fermer quand l'utilisateur presse Esc

- -

Source Voir

- -
<keyset>   <key id="cut_cmd" modifiers="accel" key="X"/>   <key id="copy_cmd" modifiers="accel" key="C"/>   <key id="paste_cmd" modifiers="accel" key="V"/>   <key id="close_cmd" keycode="VK_ESCAPE" oncommand="window.close();"/> </keyset>
-
-<vbox flex="1">
- <toolbox>
-  <menubar id="findfiles-menubar">
-   <menu id="file-menu" label="Fichier" accesskey="f">
-     <menupopup id="file-popup">
-       <menuitem label="Ouvrir une recherche..." accesskey="o"/>
-       <menuitem label="Sauver une recherche..." accesskey="s"/>
-       <menuseparator/>
-       <menuitem label="Fermer" accesskey="c" key="close_cmd"
-         oncommand="window.close();"/>
-     </menupopup>
-   </menu>
-   <menu id="edit-menu" label="Editer" accesskey="e">
-     <menupopup id="edit-popup">
-       <menuitem label="Couper" accesskey="e" key="cut_cmd"/>
-       <menuitem label="Copier" accesskey="p" key="copy_cmd"/>
-       <menuitem label="Coller" accesskey="l" key="paste_cmd" disabled="true"/>
-     </menupopup>
-   </menu>
-
-Maintenant nous pouvons utiliser ces raccourcis pour activer les commandes. Évidemment les commandes du presse-papiers restent inactives puisque nous n'avons pas encore écrit leurs scripts.
- -

Événements Clavier

- -

Il y a trois types d'événements clavier qui peuvent être utilisés si les dispositifs principaux décrits ci-dessus ne sont pas appropriés.

- -
-
keypress 
-
Appelé quand une touche est pressée puis relachée avec l'élement qui a le focus (élément actif). Vous pouvez l'utiliser pour controller les caractères saisis dans un champ.
-
keydown 
-
Appelé quand une touche est pressée avec l'élément qui a le focus (élément actif). Remarquez que l'évènement sera appelé aussitôt la touche enfoncée, même si elle n'a pas été encore relachée.
-
keyup 
-
Appelé quand une touche est relachée avec l'élément qui a le focus (élément actif).
-
- -

Les évènements clavier sont envoyés seulement à l'élément qui a le focus. Typiquement, ils incluent les champs de saisie, les boutons, les cases à cocher, et d'autres encore. Si aucun des éléments n'est actif, l'événement sera dirigé vers le document XUL lui-même. Dans ce cas, vous pouvez associer un scrutateur d'événements à la balise window. Cependant, si vous voulez réagir aux événements de manière globale, vous devriez utiliser un raccourci clavier comme décrit plus haut.

- -

L'objet event a deux propriétés qui contiennent la touche pressée. La propriété keyCode contient le code de la touche qui peut être comparé à une des constantes de la table des codes de touche vue plus tôt dans cette section. La propriété charCode est utilisée pour les caractères imprimables et contient le caractère de la touche pressée.

- -
-

Dans la prochaine section, nous allons découvrir comment gérer le focus et la sélection.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/r\303\250gles_avan\303\247\303\251es/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/r\303\250gles_avan\303\247\303\251es/index.html" deleted file mode 100644 index 8916f1e816..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/r\303\250gles_avan\303\247\303\251es/index.html" +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: Règles avançées -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Règles_avançées -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Advanced_Rules ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Cette section décrit la syntaxe des règles les plus complexes.

- -

La syntaxe des règles complètes

- -

La syntaxe des règles décrites jusqu'ici est utile pour certaines sources de données, mais parfois les données doivent être affichées de manière plus sophistiquée. La syntaxe de règle simple n'est en fait qu'un raccourci pour la syntaxe de règle complète qui est décrite ci-dessous. Comme pour la syntaxe de règle simple, la règle complète est placée entre des balises rule.

- -

Une syntaxe de règle complète contient trois balises filles : une balise conditions , une balise bindings et une balise action. La balise bindings n'est pas toujours nécessaire.

- -

L'élément conditions spécifie le critère qui doit correspondre à une ressource donnée. Vous pouvez spécifier plusieurs conditions qui doivent toutes correspondre à la ressource donnée. En utilisant la syntaxe de règle simple, les conditions sont directement placées dans l'élément rule.

- -

Si les conditions correspondent à une ressource donnée, le contenu placé entre les balises action est généré. Dans la syntaxe de règle simple, le contenu est directement placé dans la balise rule.

- -

Conditions d'une règle

- -

Lorsque qu'un arbre, un menu ou tout autre élément avec une source de données génère son contenu, le générateur de modèle cherche en premier lieu la ressource marquée par l'attribut ref. L'opération est ensuite répétée pour l'ensemble des ressources filles. Le générateur compare chaque ressource aux conditions. Si celles-ci sont vérifiées, le contenu de l'élément action est généré pour ces ressources. Si elles ne sont pas vérifiées, rien n'est généré.

- -

Élément content

- -

L'élément conditions contient trois sous-éléments. Le premier est l'élément content qui ne doit être présent qu'une seule fois. Il sert de marqueur lorsque le générateur de modèle parcourt les ressources. Il indique le nom de la variable dans laquelle est placée une référence à la ressource racine pendant que les conditions sont analysées. La ressource racine est indiquée par l'attribut ref dans l'élément contenant le modèle.

- -

La syntaxe d'un élément content est la suivante :

- -
<content uri="?var"/>
- -

La point d'interrogation indique que le texte qui suit est une variable. Vous pouvez alors utiliser la variable var dans le reste des conditions. Bien entendu, vous pouvez nommer la variable comme vous le voulez.

- -

Élément member

- -

L'élément suivant est l'élément member qui est utilisé pour parcourir un ensemble de ressources filles. En termes RDF, il est comparable à Seq, Bag ou Alt. Imaginons que vous ayez une liste de villes, comme dans l'extrait RDF/XML suivant :

- -
<RDF:Seq about="http://www.xulplanet.com/rdf/weather/cities">
-  <RDF:li resource="http://www.xulplanet.com/rdf/weather/city/Paris"/>
-  <RDF:li resource="http://www.xulplanet.com/rdf/weather/city/Manchester"/>
-  <RDF:li resource="http://www.xulplanet.com/rdf/weather/city/Melbourne"/>
-  <RDF:li resource="http://www.xulplanet.com/rdf/weather/city/Kiev"/>
-</RDF:Seq>
-
-<RDF:Description about="http://www.xulplanet.com/rdf/weather/city/Paris">
-  <cityset:name>Paris</cityset:name>
-</RDF:Description>
-
-.
-.
-.
-
- -

Vous voulez afficher une ligne dans une arborescence pour chaque ville. Pour accomplir cela, utilisez l'élément member comme ceci :

- -
<tree id="citiesTree" datasources="weather.rdf"
-      ref="http://www.xulplanet.com/rdf/weather/cities">
-  <template>
-    <rule>
-      <conditions>
-        <content uri="?list"/>
-        <member container="?list" child="?city"/>
-      </conditions>
-    <rule>
-  <template>
-</tree>
-
- -

Le générateur de modèle commence par récupérer la valeur de l'attribut ref qui dans ce cas est 'http://www.xulplanet.com/rdf/weather/cities'. Cette ressource va être mise dans la variable list comme il est indiqué par la balise content. Vous obtiendrez les ressources associées à la ressource racine en utilisant la variable list.

- -

Le générateur de modèle s'intéresse ensuite à l'élément member. Le générateur est contraint de parcourir les fils d'un élément. Le parent est indiqué par l'attribut container et les fils par l'attribut child. Dans l'exemple ci-dessus, la valeur de l'attribut container est la variable list. Ainsi le parent sera la valeur de la variable list qui a la valeur de la ressource racine 'http://www.xulplanet.com/rdf/weather/cities'. L'effet induit va être de parcourir la liste de tous les fils de 'http://www.xulplanet.com/rdf/weather/cities'.

- -

Si vous regardez en détail le RDF ci-dessus, la ressource 'http://www.xulplanet.com/rdf/weather/cities' a quatre filles, une pour chaque ville. Le générateur de modèle parcourt chacune d'elle, comparant la fille avec la valeur de l'attribut child. Dans le cas présent, celui-ci contient la valeur 'city'. Donc le générateur va donner à la variable city la valeur des ressources filles au fur et à mesure.

- -

Comme il n'y a pas d'autres conditions, la condition correspond à chacune des quatre ressources et le générateur va créer du contenu pour chacune d'entre elles. Bien sûr, l'exemple ci-dessus n'a aucun contenu. On l'ajoutera par la suite.

- -

Élément triple

- -

L'élément suivant est l'élément triple. Il est utilisé pour vérifier l'existence d'un triplet (ou assertion) dans la source de données du RDF. Un triplet est comme la propriété d'une ressource. Par exemple, un triplet existe entre un marque-page et son URL associée. Il peut-être exprimé ainsi :

- -
Un marque-page vers mozilla.org -> URL -> www.mozilla.org
- -

Cela signifie qu'il existe un triplet entre le marque-page 'Un marque-page vers mozilla.org' et 'www.mozilla.org' par la propriété URL. La première partie est appelée le sujet, la seconde, le prédicat, et la dernière, l'objet. Exprimé avec l'élément triple, ce mécanisme est décrit comme ceci :

- -
<triple subject="A Bookmark to mozilla.org"
-           predicate="URL"
-           object="www.mozilla.org"/>
-
- -

Ce code a été simplifié par rapport au code réel. Le prédicat devrait normalement inclure les espaces de nommage, et le sujet devrait être l'identifiant ressource du marque-page, et non pas le titre du marque-page comme ici. En fait, le titre du marque-page devrait être un autre triplet dans la source de données, qui utiliserait le prédicat 'nom'.

- -

Vous pouvez remplacer le sujet et l'objet dans l'élément triple par des références aux variables, auquel cas les valeurs seront substituées aux variables. Si aucune valeur n'est définie pour une variable, le générateur de modèle va attribuer à la variable la valeur de la source de données.

- -

Disons, par exemple, que l'on veuille ajouter une prédiction météo à la source de données des villes. Les conditions suivantes peuvent être utilisées :

- -
<conditions>
-  <content uri="?list"/>
-  <member container="?list" child="?city"/>
-  <triple subject="?city"
-             predicate="http://www.xulplanet.com/rdf/weather#prediction"
-             object="?pred"/>
-</conditions>
-
- -

Le générateur de modèle va parcourir chaque ville comme précédemment. Lorsqu'il arrivera au triplet, il va s'intéresser aux assertions de la source de données RDF pour une prédiction météo. La prédiction météo est attribuée à la variable 'pred'. Le générateur va répéter cette opération pour chacune des quatre villes. Une comparaison a lieu et le générateur va créer du contenu pour chaque ville qui a une prédiction météo associée. Si la ville n'a pas de ressource de prédiction, la condition ne correspond pas et aucun contenu ne sera créé pour cette ville. Remarquez que vous n'avez pas besoin de mettre 'rdf:' au début du prédicat, car il est sous-entendu.

- -

On peut aussi remplacer l'attribut object par une valeur statique. par exemple :

- -
<conditions>
-  <content uri="?city"/>
-  <triple subject="?city"
-             predicate="http://www.xulplanet.com/rdf/weather#prediction"
-             object="Nuageux"/>
-</conditions>
-
- -

Cet exemple est similaire mais nous spécifions que nous voulons une comparaison qui s'effectue sur « 'Nuageux' ». Le résultat obtenu est que la condition ne sera remplie que pour les villes dont la prédiction météo est « 'Nuageux' ».

- -

Nous pouvons ajouter davantage de triplets pour réaliser d'autres comparaisons. Par exemple, dans l'exemple ci-dessus, la température et la vitesse du vent peuvent être testées. Pour cela, il suffit d'ajouter un autre triplet qui vérifiera les ressources supplémentaires. La condition sera remplie si et seulement si l'intégralité des triplets retournent des valeurs.

- -

L'exemple ci-dessous va vérifier un triplet supplémentaire appliqué au nom de la ville. Il lui sera attribué une variable name. La condition va correspondre si la ville possède à la fois un nom et une prédiction météo.

- -
<conditions>
-  <content uri="?list"/>
-  <member container="?list" child="?city"/>
-  <triple subject="?city"
-             predicate="http://www.xulplanet.com/rdf/weather#name"
-             object="?name"/>
-  <triple subject="?city"
-             predicate="http://www.xulplanet.com/rdf/weather#prediction"
-             object="?pred"/>
-</conditions>
-
- -

Générer du contenu

- -

Le contenu à générer pour une règle est spécifié dans l'élément action. Il peut être le contenu des lignes d'un arbre, des items de menu ou tout ce que vous souhaitez générer. À l'intérieur du contenu, vous pouvez vous référer aux variables qui ont été définies dans les conditions. Ainsi, dans l'exemple météo ci-dessus, vous pouvez utiliser les variables name ou pred pour afficher la ville ou la prédiction météo. Vous pouvez aussi utiliser les variables list ou city, mais elles contiennent des ressources et non du texte, donc elles n'auront pas de sens pour les utilisateurs.

- -

Dans la syntaxe de règle simple, la syntaxe uri="rdf:*" est utilisée pour indiquer où le contenu doit être généré. Dans la syntaxe de règles complètes, vous appliquez la valeur de l'attribut uri à une variable que l'on a utilisée dans la partie des conditions. Normalement, ce sera la variable assignée à l'attribut child de l'élément member.

- -

Exemple complet d'arbre

- -

L'exemple suivant montre un arbre complet avec des conditions et une action. Vous pouvez consulter le fichier RDF séparément (Source RDF).

- -

Exemple 1 : Source Voir

- -
<tree id="weatherTree" flex="1" datasources="weather.rdf"
-      ref="http://www.xulplanet.com/rdf/weather/cities">
-  <treecols>
-    <treecol id="city" label="Ville" primary="true" flex="1"/>
-    <treecol id="pred" label="Prédiction Météo" flex="1"/>
-  </treecols>
-
-  <template>
-    <rule>
-      <conditions>
-        <content uri="?list"/>
-        <member container="?list" child="?city"/>
-        <triple subject="?city"
-                predicate="http://www.xulplanet.com/rdf/weather#name"
-                object="?name"/>
-        <triple subject="?city"
-                predicate="http://www.xulplanet.com/rdf/weather#prediction"
-                object="?pred"/>
-      </conditions>
-      <action>
-        <treechildren>
-          <treeitem uri="?city">
-            <treerow>
-              <treecell label="?name"/>
-              <treecell label="?pred"/>
-            </treerow>
-          </treeitem>
-        </treechildren>
-      </action>
-    </rule>
-  </template>
-</tree>
-
- -

Deux colonnes apparaissent dans cet arbre, l'une qui affiche la valeur de 'name' pour chacun ligne, et l'autre qui affiche le résultat de la prédiction météo.

- -
Si vous utilisez le marqueur 'dont-build-content' (ne-pas-générer-de-contenu) sur un arbre, remplacez l'élément content par un élément treeitem
- -

Ajouter des liaisons supplémentaires

- -

Le dernier élément que vous pouvez ajouter à l'intérieur d'une règle est l'élément bindings. À l'intérieur de celui-ci, vous pouvez mettre un ou plusieurs éléments binding. Une liaison dans une règle a la même syntaxe qu'un triplet et remplit quasiment la même fonction. Par exemple, dans l'exemple météo précédent, on peut ajouter la liaison suivante :

- -
<bindings>
-  <binding subject="?city"
-             predicate="http://www.xulplanet.com/rdf/weather#temperature"
-             object="?temp"/>
-</bindings>
-
- -

La liaison va prendre la ressource "température" de chaque ville et l'attribuer à la variable temp. C'est tout à fait similaire à ce qu'un triplet accomplit. La différence réside dans le fait que la liaison créée par le binding n'est pas prise en compte dans la vérification des conditions. Ainsi, pour qu'une ville soit affichée, il est impératif qu'elle ait un nom et une prédiction météo, mais peu importe qu'elle ait ou non une température. Si toutefois elle en possède une, la valeur sera attribuée à la variable temp et pourra être utilisée dans une action. Si une ville n'a pas de température, la variable temp sera une chaîne de caractère vide.

- -
-

Par la suite, nous verrons comment sauvegarder les états des éléments XUL.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/sources_de_donn\303\251es_rdf/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/sources_de_donn\303\251es_rdf/index.html" deleted file mode 100644 index 27240972a3..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/sources_de_donn\303\251es_rdf/index.html" +++ /dev/null @@ -1,296 +0,0 @@ ---- -title: Sources de données RDF -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Sources_de_données_RDF -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/RDF_Datasources ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Nous nous intéresserons ici aux sources de données additionnelles, ainsi qu'à la manière d'utiliser vos propres fichiers RDF comme sources de données.

- -

Autres sources de données pour Mozilla

- -

Mozilla fournit nativement plusieurs sources de données. Certaines sont indiquées ici, avec quelques exemples. Leur fonctionnement est très similaire à celui des marque-pages, bien que les champs soient différents à chaque fois.

- -
Ndt : Les ressources RDF fournies par mozilla ne sont utilisables que par les applications qui sont enregistrées dans le chrome. Vous ne verrez donc pas les données dans certains des exemples proposés.
- -

La liste d'historique de navigation

- -

Cette source de données fournit l'accès à la liste d'historique de l'utilisateur, qui est une liste d'URLs que l'utilisateur a consulté récemment. On peut se référer à cette ressource en utilisant rdf:history comme source de données. La table ci-dessous montre les ressources (ou champs) que vous pouvez récupérer depuis la source de donnée "history". Utilisez les URLs ci-dessous là où vous souhaitez que la valeur de la ressource soit utilisée.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Daterdf:http://home.netscape.com/NC-rdf#DateDate de la dernière visite
Namerdf:http://home.netscape.com/NC-rdf#NameTitre de la page
Pagerdf:http://home.netscape.com/NC-rdf#PageNom de la page
Referrerrdf:http://home.netscape.com/NC-rdf#ReferrerPage d'origine (referrer)
URLrdf:http://home.netscape.com/NC-rdf#URLURL de la page
Visit Countrdf:http://home.netscape.com/NC-rdf#VisitCountNombre de visites de la page
- -

Une liste d'historique typique affichera un arbre doté d'une sélection de ces champs. Pour les utiliser, placez les URL ci-dessus dans l'attribut label des boutons ou des cellules d'un arbre. Vous pouvez utiliser 'NC:HistoryRoot' comme valeur de l'attribut ref. Vous pouvez également utiliser la valeur 'NC:HistoryByDate' pour obtenir la liste d'historique triée par jour.

- -

Exemple d'utilisation de la liste historique

- -

Voyons un exemple d'affichage de la liste d'historique. Nous afficherons l'historique dans un arbre avec les trois colonnes Nom, URL et Date.

- -

Exemple 1: Source Voir

- -
<tree flex="1" datasources="rdf:history" ref="NC:HistoryRoot">
-
-  <treecols>
-    <treecol id="name" label="Nom" flex="1"/>
-    <treecol id="url" label="URL" flex="1"/>
-    <treecol id="date" label="Date" flex="1"/>
-  </treecols>
-
-  <template>
-
-    <rule>
-      <treechildren>
-       <treeitem uri="rdf:*">
-         <treerow>
-           <treecell label="rdf:http://home.netscape.com/NC-rdf#Name"/>
-           <treecell label="rdf:http://home.netscape.com/NC-rdf#URL"/>
-           <treecell label="rdf:http://home.netscape.com/NC-rdf#Date"/>
-         </treerow>
-       </treeitem>
-      </treechildren>
-    </rule>
-
-  </template>
-</tree>
-
- -

Autres sources de données

- -

Les tableaux ci-dessous listent quelques-unes des autres sources de données disponibles avec Mozilla. Vous pouvez les utiliser comme vous voulez.

- -

Marque-pages ('rdf:bookmarks') :

- -

Les marque-pages sont générés depuis la liste de marque-pages de l'utilisateur.

- -


- Ressources

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Date d'ajoutrdf:http://home.netscape.com/NC-rdf#BookmarkAddDateDate à laquelle le marque-page a été ajouté
Descriptionrdf:http://home.netscape.com/NC-rdf#DescriptionDescription du marque-page
Dernière modificationrdf:http://home.netscape.com/WEB-rdf#LastModifiedDateDate de la dernière modification
Dernière visiterdf:http://home.netscape.com/WEB-rdf#LastVisitDateDate de la dernière visite
Nomrdf:http://home.netscape.com/NC-rdf#NameNom du marque-page
Raccourci URLrdf:http://home.netscape.com/NC-rdf#ShortcutURLChamp de mots-clés personnalisés
URLrdf:http://home.netscape.com/NC-rdf#URLL'URL vers laquelle pointe le lien
- -

Racines possibles pour les marque-pages

- -
-
'NC
-
BookmarksRoot' : La racine de la hiérarchie des marque-pages
-
- -

 

- -
-
'NC
-
IEFavoritesRoot' : Le dossier de marque-pages correspondant aux « Favoris IE » de l'utilisateur
-
- -

 

- -
-
'NC
-
PersonalToolbarFolder' : Le dossier de marque-pages correspondant au dossier de la barre d'outils personnelle
-
- -

Fichiers('rdf:files') :

- -

Une vue des fichiers de l'utilisateur.

- -

Ressources

- - - - - - - - - - - - - - -
Nomrdf:http://home.netscape.com/NC-rdf#NameNom du fichier
URLrdf:http://home.netscape.com/NC-rdf#URLURL du fichier
- -

Racine possible des fichiers

- -
-
'NC
-
FilesRoot' : Racine du système de fichiers (habituellement une liste de disques)
-
- -

 

- -
-
'URL d'un fichier' 
-
En utilisant une URL de fichier pour l'attribut ref, vous pouvez choisir un répertoire/dossier à retourner. Par exemple, vous pouvez utiliser file:///windows ou file:///usr/local
-
- -

La source de données de fichiers est un exemple de source de données qui ne détermine ses ressources que lorsque cela est nécessaire. Nous ne voulons pas que tous les fichiers du système de fichiers soient évalués avant d'afficher les données. Seuls nous intéressent les fichiers et répertoires que l'arbre (ou tout autre élément) doit afficher à un instant donné.

- -

Sources de données composites

- -

Vous pouvez spécifier plusieurs sources de données dans l'attribut datasources en les séparant par des espaces, comme dans l'exemple ci-dessous. Les données seront ainsi lues dans toutes les sources de données mentionnées.

- -
<tree datasources="rdf:bookmarks rdf:history animals.rdf" ref="NC:BookmarksRoot">
- -

Cet exemple lit les ressources des marque-pages, de l'historique et d'un fichier nommé 'animals.rdf'. Celles-ci sont combinées en une source de données composite et peuvent être utilisées comme une unique source de données.

- -

La source de donnée spéciale rdf:null correspond à une source vide. Vous pouvez utiliser cette source de données si vous voulez gérer dynamiquement la source via un script, sans avoir à l'initialiser tout de suite ou parce que vous ne connaissez pas son URL exacte.

- -

Sources de données RDF personnalisées

- -

Vous pouvez utiliser chacune des sources de données internes ci-dessus si vous le désirez. Il en existe plusieurs autres, pour le courrier électronique, les carnets d'adresses, les recherches... Cependant, vous pouvez utiliser votre propre source de données RDF, enregistrée dans un fichier RDF. Le fichier peut être local ou distant. Il suffit d'indiquer l'URL du fichier RDF dans l'attribut datasources.

- -

L'utilisation des fichiers RDF apporte les mêmes fonctionnalités que n'importe quelle source de données interne. Vous pouvez utiliser des règles pour retrouver un type spécifique de contenu. Les attributs de l'élément rule seront respectés s'ils correspondent aux attributs d'un élément RDF Description. Vous pouvez également créer des fichiers RDF hiérarchiques.

- -

Exemple d'utilisation d'un fichier RDF

- -

Ce qui suit est un exemple d'utilisation d'un fichier RDF comme source de données. Le fichier RDF est relativement gros et peut être consulté séparément : Source RDF

- -

Exemple 2 : Source Voir

- -
<tree flex="1" width="200" height="200"
-      datasources="animals.rdf" ref="http://www.some-fictitious-zoo.com/all-animals">
-
-  <treecols>
-    <treecol id="name" label="Nom" primary="true" flex="1"/>
-    <treecol id="species" label="Espèces" flex="1"/>
-  </treecols>
-
-  <template>
-    <rule>
-      <treechildren>
-       <treeitem uri="rdf:*">
-         <treerow>
-           <treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-           <treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#species"/>
-         </treerow>
-       </treeitem>
-      </treechildren>
-    </rule>
-
-  </template>
-</tree>
-
- -

Image:xultu_datasrc1.png

- -

Ici, les données sont générées depuis le fichier RDF. L'attribut ref a été positionné sur l'élément racine de ce fichier, qui est la balise de premier niveau Seq. Nous obtenons une liste complète d'animaux. Si nous avions voulu, nous aurions pu positionner l'attribut ref sur n'importe quelle valeur de l'attribut about afin de limiter la quantité de données retournées. Par exemple, pour afficher seulement les reptiles, nous pouvons utiliser la valeur 'http://www.some-fictitious-zoo.com/reptiles'.

- -

Exemple de définition de l'attribut ref

- -

L'exemple ci-dessous montre comment afficher des éléments particuliers d'une source de données RDF en définissant l'attribut ref.

- -

Exemple 3: Source Voir

- -
<window
-  id="example-window"
-  title="Mammifères du zoo"
-  xmlns:ANIMALS="http://www.some-fictitious-zoo.com/rdf#"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-<button label="Cliquez ici pour voir les mammifères du zoo" type="menu"
-        datasources="animals.rdf" ref="http://www.some-fictitious-zoo.com/mammals">
-  <template>
-    <rule ANIMALS:specimens="0"></rule>
-    <rule>
-      <menupopup>
-        <menuitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
-      </menupopup>
-    </rule>
-  </template>
-</button>
-
-</window>
-
- -

Dans le cas présent, nous voulons seulement la liste des mammifères, nous sélectionnons donc l'URI de la liste des mammifères. Vous remarquerez que la valeur de l'attribut ref de notre exemple est 'http://www.some-fictitious-zoo.com/mammals', ce qui correspond à l'un des éléments Seq du fichier RDF. Seuls les descendants de cette liste seront retournés.

- -

Nous avons utilisé deux règles ici. La première filtre toutes les ressources dont l'attribut ANIMALS:specimen est positionné à '0'. Vous pouvez voir cet attribut dans le fichier RDF pour chacun des éléments Description. Certains d'entre eux ont une valeur de '0'. Dans ce cas, la première règle s'applique. Puisque cette règle n'a pas de contenu, rien ne sera affiché pour les éléments concernés. Ainsi, nous pouvons cacher les données que nous ne voulons pas afficher.

- -

La seconde règle s'applique aux autres ressources et crée une rangée dans un menu surgissant. Le résultat final est un menu surgissant contenant tous les mammifères dont le spécimen n'est pas positionné à '0'.

- -
-

Dans la prochaine section, nous examinerons la syntaxe des règles complètes.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/styler_un_arbre/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/styler_un_arbre/index.html deleted file mode 100644 index 641cb8199e..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/styler_un_arbre/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Styler un arbre -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Styler_un_arbre -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Styling_a_Tree ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section explique comment styler un arbre.

-

Styler l'arbre

-

Vous pouvez styler la bordure de l'arbre et les en-têtes de colonnes de la même manière que pour d'autres éléments. Les styles ajoutés à l'élément tree seront appliqués à l'arbre entier. L'ajout d'un style à l'élément treecol ne l'applique pas à la colonne mais seulement à son en-tête.

-

Le corps de l'arbre doit être stylé d'une manière un peu différente des autres éléments, parce que le corps de l'arbre est stocké d'une manière différente des autres éléments. Le treechildren extérieur est le seul vrai élément du corps de l'arbre. Les éléments intérieurs n'ont qu'un rôle de conteneurs.

-

Définition de propriétés

-

Vous devez donc utiliser l'attribut properties sur les lignes ou les cellules pour modifier une ou plusieurs propriétés nommées. Cet attribut peut être utilisé avec des arbres à contenu statique, produit par RDF ou avec des arbres à vue personnalisée. Supposons que nous voulions donner une couleur de fond bleue à une ligne particulière, comme il est possible de le remarquer sur les libellés dans la messagerie de Mozilla. Nous allons utiliser une propriété appelée 'makeItBlue'. Vous pouvez utiliser le nom que vous voulez. Vous pouvez modifier plusieurs propriétés en les séparant par des espaces.

-

Modifiez la propriété sur une ligne ou une cellule, comme dans l'exemple suivant :

-
<treerow properties="makeItBlue">
-

Sélecteurs CSS pour l'arbre

-

La feuille de styles peut récupérer cette propriété et l'utiliser pour changer l'apparence d'une ligne pour les messages non lus ou les libellés. Les propriétés fonctionnent en quelque sorte comme les classes de style, bien qu'elles nécessitent une syntaxe un peu plus complexe à utiliser dans une feuille de styles. En effet, il est possible de spécifier un style pour chaque partie d'une cellule. Vous pouvez styler non seulement la cellule et son texte, mais aussi le "twisty" (NdT : petit '+' ou '-' permettant de développer et replier l'arborescence) et l'indentation. La syntaxe à utiliser est la suivante :

-
treechildren::-moz-tree-row(makeItBlue)
-{
-  background-color: blue;
-}
-
-

Ce pseudo-style spécial est utilisé pour styler la couleur de fond des lignes qui ont la propriété 'makeItBlue'. Cette syntaxe spéciale est nécessaire parce que les cellules elles-mêmes ne sont pas des éléments séparés. Tout le contenu intérieur au corps de l'arbre obtient son rendu par l'élément treechildren. Cependant, CSS dispose d'un concept pour accéder aux parties des éléments en les considérant comme des pseudo-éléments. Ce sélecteur correspond à quelques lignes de l'arbre à l'intérieur de l'élément treechildren comme pseudo-élément. Le pseudo-style définit des règles de style pour des parties particulières de ce qu'il affiche. Cette règle de style signifie, dans un élément treechildren : mettre une couleur de fond bleue à toutes les lignes de l'arbre qui ont la propriété 'makeItBlue'.

-

Le texte '::-moz-tree-row' spécifie quelle est la zone de contenu désirée, qui est dans ce cas une ligne. Vous pouvez aussi utiliser les valeurs suivantes :

-
::-moz-tree-cell 
une cellule. Utilisez ceci pour modifier les couleurs des bordures et du fond.
::-moz-tree-cell-text 
le texte d'une cellule. Utilisez ceci pour modifier la police et la couleur du texte.
::-moz-tree-twisty 
l'apparence du "twisty" utilisé pour développer et replier les lignes filles.
::-moz-tree-image 
l'image pour une cellule. Vous pouvez indiquer l'image avec la propriété list-style-image.
::-moz-tree-row 
une ligne. Utilisez ceci pour choisir la couleur de fond d'une ligne.
::-moz-tree-indentation 
l'indentation à gauche des lignes filles.
::-moz-tree-column 
une colonne.
::-moz-tree-line 
les lignes dessinées pour connecter les lignes filles aux lignes parentes.
::-moz-tree-separator 
un séparateur dans un arbre.
::-moz-tree-progressmeter 
contenu pour des cellules à indicateur de progression. Vous pouvez créer une colonne avec des indicateurs de progression en mettant l'attribut type de la colonne à 'progressmeter'.
::-moz-tree-drop-feedback 
le retour du glisser-déposer.
::-moz-tree-checkbox 
l'image à utiliser pour les colonnes de case à cocher.
-
-

Vous pouvez tester la présence de plusieurs propriétés en les séparant par des virgules. L'exemple ci-dessous met une couleur de fond grise aux lignes qui ont les propriétés 'readonly' et 'unread'. Pour les propriétés qui sont 'readonly', il ajoute une bordure rouge autour de la ligne. Notez que la première règle s'appliquera à toute ligne qui est 'readonly', peu importe la présence d'autres propriétés comme 'unread'.

-
treechildren::-moz-tree-row(readonly)
-{
-  border: 1px solid red;
-}
-treechildren::-moz-tree-row(readonly, unread)
-{
-  background-color: rgb(80%, 80%, 80%);
-}
-
-

Propriétés par défaut

-

La liste des propriétés des éléments tree contient un petit nombre de propriétés par défaut que vous pouvez aussi utiliser dans une feuille de styles. Vous pouvez utiliser ces propriétés supplémentaires pour modifier l'apparence des conteneurs ou des lignes sélectionnées. Les propriétés suivantes sont modifiées automatiquement en cas de besoin :

-
focus
cette propriété est mise si l'arbre a le focus.
selected
cette propriété est mise pour les lignes ou les cellules actuellement sélectionnées.
current
cette propriété est mise si le curseur est sur la ligne. Seule une ligne à la fois peut avoir cette propriété.
container
cette propriété est mise pour les lignes ou les cellules qui ont des lignes filles.
leaf
cette propriété est mise pour les lignes ou les cellules qui n'ont pas de lignes filles.
open
cette propriété est mise pour les lignes ou les cellules qui sont développées.
closed
cette propriété est mise pour les lignes ou les cellules qui sont repliées.
primary
cette propriété est mise pour les cellules de la colonne primaire.
sorted
cette propriété est mise pour les cellules de la colonne actuellement triées.
even
cette propriété est mise pour les lignes paires.
odd
cette propriété est mise pour les lignes impaires. Cette propriété ainsi que la propriété even vous permettent, par exemple, d'alterner les couleurs entre chaque ligne.
dragSession
cette propriété est mise si quelque chose est en train d'être déplacé.
dropOn
si un déplacement a lieu au-dessus de l'arbre, cette propriété est mise pour la ligne en train d'être survolée par le déplacement, tant que le pointeur de la souris est au-dessus de la ligne.
dropBefore
cette propriété est mise si le pointeur de la souris survole avant la ligne en cours de déplacement.
dropAfter
cette propriété est mise si le pointeur de la souris survole après la ligne en cours de déplacement.
progressNormal
cette propriété est mise pour les cellules à indicateur de progression.
progressUndetermined
cette propriété est mise pour les cellules à indicateur de progression indéterminé.
progressNone
cette propriété est mise pour les cellules sans indicateur de progression.
-
-

Les propriétés sont mises pour les lignes ou les cellules d'une ligne à l'état correspondant. Pour les colonnes et les cellules, une propriété additionnelle, l'id de la colonne ou la colonne dans laquelle est la cellule, sera mise.

-

Définition des propriétés pour les arbres générés par RDF

-

Pour les arbres générés par RDF, vous pouvez utiliser la même syntaxe. Cependant, vous affecterez souvent les propriétés en vous basant sur des valeurs de la source de données.

-

Définition des propriétés pour les vues personnalisées

-

Pour des arbres avec un script de vue personnalisée, vous pouvez modifier des propriétés en fournissant les fonctions getRowProperties(), getColumnProperties() et getCellProperties() dans la vue. Elles renvoient des informations à propos d'une ligne, d'une colonne et d'une cellule individuelle. Les arguments à ces fonctions indiquent quelle ligne et/ou colonne. Le dernier argument de chacune de ces fonctions est une liste de propriétés que la vue est supposée remplir avec une liste de propriétés. La fonction getColumnProperties() fournit aussi l'élément treecol correspondant pour la colonne.

-
getRowProperties : function(row,prop){}
-getColumnProperties : function(column,columnElement,prop){}
-getCellProperties : function(row,column,prop){}
-
-

Regardons un exemple de modification d'une cellule spécifique. Rendons le texte bleu une ligne sur quatre, en utilisant l'exemple d'une section précédente. Nous allons avoir besoin d'ajouter du code à la fonction getCellProperties() pour ajouter une propriété 'makeItBlue' aux cellules toutes les quatres lignes (Nous n'utilisons pas getRowProperties() puisque la couleur du texte ne sera pas héritée dans chaque cellule).

-

L'objet properties qui est passé en dernier argument de getCellProperties() est un objet XPCOM qui implémente nslSupportsArray. Il s'agit en fait une version XPCOM d'un tableau. Il contient une fonction AppendElement() qui peut être utilisée pour ajouter un élément au tableau. Nous pouvons utiliser l'interface nslAtomService pour construire des atomes de chaînes pour les propriétés.

-
getCellProperties: function(row,col,props){
-  if ((row %4) == 0){
-    var aserv=Components.classes["@mozilla.org/atom-service;1"].
-              getService(Components.interfaces.nsIAtomService);
-    props.AppendElement(aserv.getAtom("makeItBlue"));
-  }
-}
-
-

Cette fonction sera définie comme partie d'un objet de vue. Elle vérifie d'abord quelle ligne est demandée et affecte une propriété pour les cellules toutes les quatres lignes. La liste des propriétés nécessite un tableau d'objets atom qui peuvent être considérés comme des chaînes de caractères constantes. Nous les créons en utilisant l'interface XPCOM nslAtomService et nous les ajoutons au tableau en utilisant la fonction AppendElement(). Ici, nous créons un atome 'makeItBlue'. Vous pouvez appeler AppendElement() à nouveau pour ajouter des propriétés additionnelles.

-

Exemple de feuille de styles

-
treechildren::-moz-tree-row(selected)            { background-color: #FFFFAA; }
-treechildren::-moz-tree-row(odd)                 { background-color: #EEEEEE; }
-treechildren::-moz-tree-row(odd, selected)       { background-color: #FFFFAA; }
-treechildren::-moz-tree-cell-text(selected)      { color: #000000; }
-treechildren::-moz-tree-cell-text(odd, selected) { color: #000000; }
-
-
-

Dans la suite, nous allons voir comment modifier le thème par défaut.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251lection_dans_les_arbres/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251lection_dans_les_arbres/index.html" deleted file mode 100644 index 6aa59a15d8..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251lection_dans_les_arbres/index.html" +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Sélection dans les arbres -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Sélection_dans_les_arbres -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Tree_Selection ---- -

 

-
-

« PrécédentSuivant »

-
-

Cette section décrit comment obtenir et modifier les items sélectionnés dans un arbre.

-

Récupérer les items sélectionnés d'un arbre

-

Chaque item dans un arbre (qui correspond à un élément treeitem en utilisant un arbre de contenu) peut être sélectionné individuellement. Si vous ajoutez l'attribut seltype à l'arbre en lui attribuant la valeur 'single' , l'utilisateur ne pourra sélectionner qu'une ligne à la fois. Sinon, l'utilisateur pourra sélectionner plusieurs lignes qui ne seront pas nécessairement contiguës. L'arbre fournit plusieurs fonctions qui peuvent être utilisées pour déterminer si un item est sélectionné.

-

Gestion de l'événement de sélection

-

Voyons d'abord comment nous pouvons déterminer qu'un item est sélectionné. Le gestionnaire d'événement onselect peut être ajouté à l'élément tree. Lorsque l'utilisateur sélectionne un item de l'arbre, le gestionnaire d'événement est appelé. L'utilisateur peut également modifier la sélection en utilisant les touches de déplacement. Si l'utilisateur appuie en continu sur une touche de déplacement afin de se déplacer rapidement dans les items, le gestionnaire d'événement n'est pas appelé jusqu'à ce que l'utilisateur relâche la touche. Ce mode de fonctionnement améliore les performances. Il signifie également que la surbrillance du texte apparaîtra sur plusieurs items même si l'événement de sélection n'est pas déclenché pour ces items.

-

La syntaxe du gestionnaire d'événement onselect est présentée ci-dessous.

-
<tree id="treeset" onselect="alert('Vous avez sélectionné quelque chose !');">
-

Indices d'arbre

-

L'arbre possède une propriété currentIndex (index courant, en commençant à '0' pour la première ligne) qui peut être utilisée pour obtenir l'item sélectionné.

-

Les éléments fils sont inclus dans le comptage juste après leurs parents. Ainsi, s'il y a trois items racines et que chacun a deux items fils, il y aura un total de six objets. Le premier item (d'index '0') sera le premier item racine. L'item suivant, d'index '1', sera son premier fils. Le second fils aura l'index '2', le second item parent sera à la position '3' et ainsi de suite.

-
Image:xultu_seltree1.png
-

Dans l'image ci-contre, il y a huit lignes affichées, dont deux sont sélectionnées. La première ligne sélectionnée a un index de '4' et la seconde, un index de '7'. Les lignes qui ne sont pas affichées ne sont pas incluses dans le comptage d'index.

-

Sélection multiple

-

Pour les arbres qui permettent une sélection multiple, obtenir la liste des lignes sélectionnées est un peu plus compliqué. La vue de l'arbre a une propriété de sélection qui contient l'information sur les lignes sélectionnées. Cette sélection sera un objet TreeSelection. La vue n'a pas besoin d'implémenter cet objet elle-même, car l'arbre aura assigné un objet de sélection à la propriété de sélection de la vue lorsque celle-ci a été attachée à l'arbre. À partir de l'arbre, vous pouvez obtenir la sélection en utilisant la propriété view de l'arbre et ensuite la propriété selection de la vue. Vous pouvez utiliser les méthodes de l'objet de sélection pour récupérer l'ensemble des items sélectionnés ou pour modifier la sélection.

-

Comme les items sélectionnés dans une sélection multiple ne sont pas nécessairement contigus, vous pouvez récupérer chaque bloc de sélection contiguë en utilisant les fonctions getRangeCount() et getRangeAt(). La première fonction retourne le nombre de plages de sélection effectuées. Si seule une valeur a été sélectionnée, la valeur retournée sera '1'. Vous pourrez alors écrire une boucle sur le nombre de plages, en appelant getRangeAt() pour obtenir les bons index du début et de la fin d'une plage.

-

La fonction getRangeAt() comporte trois arguments.

- -

Exemple getRangeAt

-
var start = new Object();
-var end = new Object();
-var numRanges = tree.view.selection.getRangeCount();
-
-for (var t = 0; t < numRanges; t++){
-  tree.view.selection.getRangeAt(t,start,end);
-  for (var v = start.value; v <= end.value; v++){
-    alert("Item " + v + " sélectionné.");
-  }
-}
-
-

Nous avons créé deux objets appelés start et end. Ensuite, nous lançons une boucle sur les plages de la sélection dont le nombre a été retourné par la fonction getRangeCount(). La fonction getRangeAt() est appelée avec l'index de la plage, et les objets start et end. Cette fonction renseignera les index start et end en leur attribuant la propriété 'value'. Donc, si la première plage commence au troisième item et se termine au septième, start.value vaudra '2' (souvenez-vous que les index commencent à 0, donc nous en décrémentons de un) et end.value vaudra '6'. Un message d'alerte est affichée pour chaque index.

-

Si vous souhaitez seulement savoir si une ligne précise a été sélectionnée, vous pouvez utiliser la fonction isSelected(). Elle prend l'index de la ligne en argument et retourne 'true' si la ligne est sélectionnée.

-
alert(tree.view.selection.isSelected(3));
-

Modifier la sélection dans un arbre

-

L'objet de sélection dispose de plusieurs fonctions qui peuvent être utilisées pour changer une sélection. La fonction la plus simple est select() qui dé-sélectionne toutes les lignes actuellement sélectionnées et en sélectionne une spécifique. Par exemple, le code suivant sélectionnera la ligne d'index '5' :

-
tree.view.selection.select(5);
-

Notez que vous ne devez pas modifier la propriété currentIndex pour changer la sélection. Vous devez plutôt utiliser la fonction de sélection select() comme indiqué dans l'exemple précédent. Vous pouvez sélectionner toutes les lignes avec la fonction selectAll(). Notez que les lignes imbriquées à l'intérieur de containers qui n'ont pas été ouverts ne seront pas sélectionnées. Naturellement, cette fonction n'est valable que pour des arbres à sélections multiples. Il y a aussi les fonctions clearSelection() pour effacer la sélection et invertSelection() pour inverser la sélection, c'est-à-dire dé-sélectionner toutes les lignes sélectionnées et sélectionner les autres.

-

Pour sélectionner des lignes spécifiques, utiliser la fonction rangedSelect() qui sélectionne toutes les lignes entre deux indices. Voici un exemple de sélection des lignes comprises entre les index '2' et '7'. Notez que les lignes '2' et '7' seront incluses dans la sélection.

-
tree.view.selection.rangedSelect(2,7,true);
-

L'argument final indique s'il s'agit d'un ajout à la sélection courante. Si la valeur est 'true', la plage sera ajoutée à la sélection courante. Si la valeur est 'false', toutes les lignes préalablement sélectionnées seront préalablement dé-sélectionnées. Finalement, la fonction clearRange() peut être utilisée pour dé-sélectionner une plage de lignes, les lignes en dehors de cette plage n'étant pas affectées.

-
tree.view.selection.clearRange(2,7);
-
-

Nous allons maintenant apprendre comment créer une vue personnalisée pour un arbre.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251parateurs/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251parateurs/index.html" deleted file mode 100644 index cd9b6fda85..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/s\303\251parateurs/index.html" +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Séparateurs -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Séparateurs -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Splitters ---- -

 

-
-

« PrécédentSuivant »

-
-

Ici, nous allons voir comment ajouter des séparateurs dans une fenêtre.

-

Découpage d'une boîte

-

Il arrive des fois où vous voulez disposer de deux sections dans une fenêtre que l'utilisateur peut redimensionner à son gré. Un exemple est la fenêtre du navigateur Mozilla, où vous pouvez changer la taille du panneau latéral en déplaçant le trait d'intersection des deux cadres. Vous pouvez aussi cacher ce panneau latéral en cliquant sur la poignée de ce trait.

-

Élément splitter

-

Cette fonctionnalité est accomplie en utilisant un élément appelé splitter. Il crée une barre étroite entre les deux sections en permettant de redimensionner chaque côté. Vous pouvez placer un séparateur où vous voulez pour vous permettre de redimensionner les éléments situés avant lui et les éléments situés après lui dans une même boîte.

-

Lorsqu'un séparateur est placé à l'intérieur d'une boîte horizontale, il permet un redimensionnement horizontal. Lorsqu'un séparateur est placé à l'intérieur d'une boîte verticale, il permet un redimensionnement vertical.

-

La syntaxe d'un séparateur est la suivante :

-
<splitter
-    id="identifier"
-    state="open"
-    collapse="before"
-    resizebefore="closest"
-    resizeafter="closest">
-
-

Les attributs sont les suivants :

-
id 
L'identifiant unique d'un séparateur.
state 
Indique l'état d'un séparateur. Mettez lui la valeur 'open', valeur par défaut, pour que le panneau redimensionnable soit initialement ouvert ou mettez lui la valeur 'collapsed' pour qu'un des panneaux soit complètement réduit et que l'autre occupe toute la place.
collapse 
Il indique de quel côté le panneau doit se réduire quand la poignée du séparateur est cliquée ou quand le séparateur est initialisée avec un état 'collapsed'. Mettez lui la valeur 'before' pour désigner l'élément avant le séparateur ou la valeur 'after' pour désigner l'élément après le séparateur. Si vous l'initialisez avec la valeur 'none', qui est aussi la valeur par défaut, la poignée du séparateur ne réduira pas les panneaux quand elle est cliquée.
resizebefore 
Lorsqu'un séparateur est déplacé, les éléments sur sa gauche sont redimensionnés. Cet attribut indique quel élément est concerné. Mettez la valeur 'closest' pour que l'élément immédiatement à gauche du séparateur soit redimensionné. Mettez la valeur 'farthest' pour que l'élément le plus éloigné à gauche du séparateur soit redimensionné (le premier élément de la boîte). La valeur par défaut est 'closest'.
resizeafter 
Lorsqu'un séparateur est déplacé, les éléments sur sa droite sont redimensionnés. Cet attribut indique quel élément est concerné. Mettez la valeur 'closest' pour que l'élément immédiatement à droite du séparateur soit redimensionné. Mettez la valeur 'farthest' pour que l'élément le plus éloigné à droite du séparateur soit redimensionné (le dernier élément de la boîte). Cet attribut peut aussi avoir la valeur 'grow', dans ce cas, les éléments à droite du séparateur ne changent pas de taille lorsque le séparateur est déplacé. La valeur par défaut est 'closest'.
-
-

Si vous employez l'attribut collapse, vous devrez aussi ajouter l'élément grippy à l'intérieur de l'élément splitter afin que l'utilisateur puisse utiliser la poignée pour réduire un panneau.

-

Exemple avec splitter

-

Un exemple vous sera utile :

-

Exemple 1: Source Voir

-
<vbox flex="1">
-  <iframe id="content-1" width="60" height="20" src="w1.html"/>
-  <splitter collapse="before" resizeafter="farthest">
-    <grippy/>
-  </splitter>
-  <iframe id="content-2" width="60" height="20" src="w2.html"/>
-  <iframe id="content-3" width="60" height="20" src="w3.html"/>
-  <iframe id="content-4" width="60" height="20" src="w4.html"/>
-</vbox>
-
-
Image:xultu_splitter1.png
-

Ici, quatre cadres iframe ont été créés et un séparateur a été placé entre le premier et le second. L'attribut collapse a été affecté d'une valeur 'before' pour signifier que si la poignée est cliquée, le premier cadre va disparaître, et le séparateur et les cadres restants vont glisser vers la gauche. La poignée du séparateur est centrée sur la barre de séparation.

-

La valeur 'farthest' a été affectée à l'attribut resizeafter du séparateur. Elle signifie que lorsque le séparateur est déplacé, l'élément le plus éloigné après lui changera sa taille. Dans ce cas, il s'agit du quatrième cadre.

-

Aucune valeur n'a été spécifiée pour l'attribut resizebefore qui aura donc sa valeur 'closest' par défaut. Dans ce cas, il n'y a qu'un cadre avant le séparateur, c'est donc le premier cadre qui changera de taille.

-

Les deuxième et troisième cadres ne changeront leur taille que si vous déplacez le séparateur suffisamment loin sur la droite jusqu'à ce que le quatrième cadre ait atteint sa largeur minimale.

-

Les quatre cadres avec le séparateur dans un état réduit :

-

Image:xultu_splitter2.png

-

Une image des quatre cadres avec le séparateur redimensionné vers la droite est montrée ci dessous. Notez que les deux cadres du milieu n'ont pas changé leur dimension. Seuls les premier et quatrième cadres ont changé de dimension. Vous pouvez seulement voir une partie du quatrième cadre. Si vous continuez à déplacer le séparateur vers la droite, les deux autres cadres vont se réduire.

-

Image:xultu_splitter3.png

-

Vous pouvez utiliser des propriétés de style telles que min-width, max-width sur les cadres pour spécifier leurs largeurs minimales ou maximales ou leurs hauteurs dans la boîte. Si vous faites cela, le séparateur va le détecter et ne permettra pas de le déplacer au-delà des tailles minimales ou maximales.

-

Par exemple, si vous spécifiez un minimum de 30 pixels en largeur sur le quatrième cadre, il ne se réduira pas en dessous de cette taille. Les deux autres cadres vont alors se réduire. Si vous mettez une largeur minimale de 50 pixels sur le premier cadre, vous ne pourrez déplacer le séparateur que de 10 pixels vers la gauche (car il démarre à 60 pixels de large). Toutefois, vous pouvez toujours faire disparaître le cadre.

-

Vous pouvez également placer plus d'un séparateur dans une boîte si vous le souhaitez, dans ce cas vous pourrez réduire les différentes parties de son contenu. De façon similaire, il n'y a pas que les cadres qui peuvent êre réduits, n'importe quel élément peut l'être.

-
-

Notre exemple de recherche de fichiers

-

Voyons ce que devient notre exemple de recherche de fichiers avec un séparateur. Une possibilité serait d'inclure les résultats de la recherche dans la boîte de dialogue. Nous ajouterons une zone entre les critères de recherche et les boutons du bas. Un séparateur permettra de réduire ou masquer les résultats de la recherche.

-
</tabbox>
-
- <iframe src="results.html"/>  <splitter resizeafter="grow"/>
-
- <hbox>
-
-

Ici, un séparateur et un cadre ont été ajoutés à la boîte de dialogue. Nous n'avons plus besoin de l'élément spacer après la boîte d'onglets, donc nous l'enlèverons. Le contenu du cadre provient d'un fichier appelé 'result.html'. Créez ce fichier et mettez ce que vous souhaitez dedans pour l'instant. Le cadre sera remplacé plus tard par la liste des résultats lorsque vous saurez comment la créer. Pour l'instant, il nous servira à expliquer le séparateur.

-

Le séparateur a été initialisé avec la valeur 'before' sur l'attribut collapse, ce qui signifie que l'élément juste avant le séparateur va se réduire. Ici, il s'agit du cadre. Comme montré sur les images ci-dessous, lorsque la poignée est cliquée, le cadre est masqué et les boutons glissent vers le haut.

-

L'attribut resizeafter a été initialisé avec une valeur 'grow' pour que les éléments situés après le séparateur se déplace vers la bas lorsque celui ci est déplacé vers le bas. Le contenu dans le cadre peut s'agrandir sans restriction. Vous noterez que la fenêtre ne se redimensionne pas automatiquement. Vous remarquerez également que c'est un séparateur horizontal parce qu'il a été placé dans une boîte verticale.

-

Etat normal :

-

Image:xultu_splitter4.png

-

Etat réduit :

-

Image:xultu_splitter5.png

-

Exemple de recherche de fichiers : Source Voir

-
-
-

Dans la section suivante, nous verrons comment créer une barre de défilement.

-
-

« PrécédentSuivant »

-
-

Interwiki

diff --git a/files/fr/archive/mozilla/xul/tutoriel_xul/utilisation_des_spacers/index.html b/files/fr/archive/mozilla/xul/tutoriel_xul/utilisation_des_spacers/index.html deleted file mode 100644 index cecd0b9291..0000000000 --- a/files/fr/archive/mozilla/xul/tutoriel_xul/utilisation_des_spacers/index.html +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Utilisation des spacers -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Utilisation_des_spacers -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Using_Spacers ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Dans cette section, vous trouverez comment ajouter des espacements entre les différents éléments que vous avez créés.

- -

Ajout de spacers

- -

Un des problèmes avec le développement des interfaces utilisateur est que chaque utilisateur a son propre affichage. Certains utilisateurs peuvent avoir de grands écrans avec une haute résolution et d'autres de faibles résolutions. De plus, chaque plate-forme peut avoir des spécificités pour l'interface utilisateur. En ajoutant le support multi-langue, un texte dans une langue peut avoir besoin de plus de place que dans une autre.

- -

Les applications qui doivent être compatibles avec différentes plates-formes ou langages ont souvent des fenêtres créées avec beaucoup de place pour permettre leur exécution. Certaines plates-formes et outils de développement d'interfaces utilisateur proposent des composants qui sont suffisamment intelligents pour se redimensionner et se repositionner eux-mêmes selon les besoins de l'utilisateur (Java utilise des gestionnaires de mise en page par exemple).

- -

XUL fournit la possibilité aux éléments de se positionner et se redimensionner automatiquement. Comme nous l'avons vu, la fenêtre de "recherche de fichiers" est apparue avec une taille qui correspond aux éléments qui y sont inclus. Chaque fois que nous y ajoutons quelque chose, la fenêtre s'agrandit.

- -

XUL utilise un système de mise en page appelé le " Box Model ". Nous en parlerons dans la prochaine section mais il vous permet essentiellement de diviser une fenêtre en une série de boîtes contenant vos éléments. Ces boîtes se positionnent et se redimensionnent en fonction des spécifications que vous avez définies. Pour l'instant, sachez simplement que l'élément window est un type de boîte.

- -

Avant d'entrer plus dans le détail avec les boîtes, nous allons présenter un autre élément XUL qui se montre très utile pour la mise en page, le spacer. Un spacer est très simple et ne requiert qu'un seul attribut qui sera expliqué dans un moment. Le spacer le plus simple ressemble à ceci :

- -
<spacer flex="1" />
-
- -

Un spacer est utilisé pour placer des espaces vides dans une fenêtre. Sa principale caractéristique est de pouvoir s'agrandir ou se rétrécir lorsque l'utilisateur redimensionne la fenêtre. Il permet à quelqu'un de placer des boutons à droite ou en bas d'une fenêtre et de vouloir les fixer sur le coté droit ou en bas, quelle que soit la taille de la fenêtre. Comme vous le verrez, vous pouvez utiliser des séries de spacer pour créer quelques effets de mise en page.

- -

Dans la syntaxe ci-dessus, spacer a un seul attribut appelé flex. Il est utilisé pour définir la " flexibilité " de l'espacement. Dans le cas ci-dessus, le spacer a un flex de '1'. Il en devient un élément d'espacement flexible. Si vous placez un spacer directement dans une fenêtre, il s'adaptera à la taille de la fenêtre lorsque celle-ci est modifiée.

- -

Nous allons bientôt ajouter un élément spacer dans notre boîte de dialogue "Recherche de Fichiers". Tout d'abord, voilà ce qu'il se passe si la fenêtre est agrandie :

- -

Source Voir

- -

Image:xultu_springs1.png

- -

Si vous changez la taille de la fenêtre, vous pouvez voir que les éléments ont conservé leur position. Aucun d'eux n'a bougé ou s'est redimensionné bien que la fenêtre dispose de plus de place. Regardons maintenant ce qu'il se passe si un élément spacer est ajouté entre la boîte de texte et le bouton 'Rechercher' :

- -

Source Voir

- -

Image:xultu_springs2.png

- -

En ajoutant un spacer et en agrandissant la fenêtre, vous voyez que le spacer s'est agrandi de façon à remplir l'espace libre. Les boutons ont été repoussés.

- -
-

Notre exemple de recherche de fichier

- -

Le code pour ajouter un spacer est indiqué juste après. Insérez le juste avant le bouton 'Rechercher' :

- -
<spacer flex="1"/>
-
-<button id="find-button" label="Rechercher"/>
-
-
- -

Plus d'informations sur la flexibilité

- -

XUL place les éléments d'une fenêtre en calculant les largeurs et les hauteurs adéquates des éléments et ajoute ensuite des espacements là où ils sont flexibles. À moins que vous ne spécifiez la largeur et la hauteur d'un élément, la dimension par défaut de cet élément sera déterminée par son contenu. Vous noterez que le bouton 'Annuler' des boîtes de dialogue a toujours adapté sa largeur pour contenir son texte. Si vous créez un bouton avec un très long libellé, la taille par défaut de ce bouton sera assez large pour contenir le libellé en entier. Les autres éléments, tels que la boîte de texte, se sont adaptés de façon adéquate.

- -

L'attribut flex est utilisé pour spécifier si un élément peut changer sa dimension pour s'ajuster à sa boîte le contenant (dans notre cas, la fenêtre window). Nous avons montré l'application de l'attribut flex sur les spacer, mais il peut s'appliquer à n'importe quel élément. Par exemple, vous pouvez souhaiter avoir plutôt un redimensionnement du bouton 'Rechercher' :

- -

Source Voir

- -

Image:xultu_springs3.png

- -

Comme vous pouvez voir sur l'image, en plaçant un attribut flex sur le bouton 'Rechercher', celui-ci s'agrandit en même temps que la fenêtre. Un spacer n'a rien de spécial. Il peut être considéré comme un bouton invisible. Il fonctionne de la même manière qu'un bouton, excepté qu'il ne se dessine pas à l'écran.

- -

Vous aurez remarqué quelque chose sur l'image ci-dessus. Il n'y a pas que le bouton 'Rechercher' qui s'agrandit mais un espacement est également apparu entre le texte à gauche et le bouton. Bien entendu, il s'agit du spacer que nous avons placé tout à l'heure. Il s'est redimensionné de lui même également. Si vous regardez suffisamment de près, vous devriez remarquer que ce changement de taille a été partagé en part égale entre le spacer et le bouton. Le spacer a reçu la moitié de l'espace libre et le bouton a reçu l'autre moitié.

- -

La raison de ce comportement est que le spacer et le bouton ont chacun un attribut flex. Parce qu'ils sont flexibles, le spacer et le bouton se redimensionnent équitablement.

- -

Comment faire si vous voulez qu'un élément s'agrandisse deux fois plus qu'un autre ? Vous pouvez choisir un nombre plus grand pour la valeur de l'attribut flex. Les valeurs de l'attribut flex sont des ratios. Si un élément a un flex de '1' et un second un flex de '2', le second s'agrandira du du double par rapport au premier. En effet, un flex de '2' signifie que cet élément a une flexibilité de deux fois celle d'un élément de flex de '1'.

- -

L'attribut flex ne sert pas à définir une taille. Il spécifie au contraire comment se répartissent les espaces vides entre les différents éléments fils d'une boîte. Nous aborderons les boîtes dans le prochain chapitre. Dès lors que les dimensions par défaut des éléments fils d'une boîte sont déterminées, les valeurs de flexibilité sont appliquées pour diviser l'espace restant dans la boîte. Par exemple, si la boîte fait 200 pixels de large, qu'elle contient deux boutons flexibles respectivement de 50 pixels et 90 pixels, il restera un espacement de 60 pixels. Si ces deux boutons ont une valeur de flex de '1', cet espacement sera divisé en deux moitiés égales de 30 pixels affectées à chacun d'eux. Si le second bouton voit sa valeur de flexibilité augmentée à '2', le premier bouton recevra 20 pixels d'espacement supplémentaire et le second en recevra 40 pixels.

- -

L'attribut flex peut être placé sur n'importe quel élément, toutefois il n'a de sens que si cet élément est directement inclus dans une boîte. Donc, même si vous placez un attribut flex sur un élément HTML, il restera sans effet cet élément est situé dans un élément n'étant pas une boîte.

- -

Exemples d'utilisation de flex

- -
Exemple 1:
-  <button label="Chercher" flex="1"/>
-  <button label="Annuler" flex="1"/>
-
-Exemple 2:
-  <button label="Chercher" flex="1"/>
-  <button label="Annuler" flex="10"/>
-
-Exemple 3:
-  <button label="Chercher" flex="2"/>
-  <button label="Remplacer"/>
-  <button label="Annuler" flex="4"/>
-
-Exemple 4:
-  <button label="Chercher" flex="2"/>
-  <button label="Remplacer" flex="2"/>
-  <button label="Annuler" flex="3"/>
-
-Exemple 5:
-  <html:div>
-    <button label="Chercher" flex="2"/>
-    <button label="Remplacer" flex="2"/>
-  </html:div>
-
-Exemple 6:
-  <button label="Chercher" flex="145"/>
-  <button label="Remplacer" flex="145"/>
-
- -
-
Exemple 1 
-
dans ce cas, la flexibilité est divisée en part égale pour les deux boutons. Leurs tailles changeront en proportion égale.
-
Exemple 2 
-
ici, les deux boutons sont flexibles, mais le bouton Chercher sera dix fois plus petit que le bouton Annuler qui a une valeur flex dix fois plus importante que celle du bouton Chercher. L'espace restant est divisé en une part pour le bouton Chercher et 10 parts pour le bouton Annuler.
-
Exemple 3 
-
seuls deux boutons sont flexibles ici. Le bouton Remplacer ne changera jamais sa taille mais les deux autres le pourront. Le bouton Annuler aura toujours une taille du double du bouton Chercher parce qu'il a une valeur de flex du double.
-
Exemple 4 
-
dans ce cas, les trois boutons sont flexibles. Les boutons Chercher et Remplacer auront exactement la même taille mais le bouton Annuler sera un peu plus large (50% plus large pour être exact).
-
Exemple 5 
-
ici, les deux boutons sont placés dans une balise div. La flexibilité perd toute signification puisque les boutons ne sont pas directement dans une boîte. L'effet serait le même si les attributs flex étaient enlevés.
-
Exemple 6 
-
Comme les valeurs de flex sont identiques, les deux boutons auront la même taille. Cela fonctionne aussi bien que si vous aviez mis une valeur de '1' au lieu de '145'. Il est recommandé de mettre les valeurs les plus basses pour une meilleure lecture.
-
- -
Notez que d'autres facteurs tels que les libellés des boutons et les tailles minimales des boutons peuvent affecter les dimensions réelles des boutons. Par exemple, un bouton ne peut pas être réduit au delà d'une taille nécessaire pour y placer son libellé.
- -

Spécifier une valeur de '0' a le même effet que si vous enleviez l'attribut flex en entier. L'élément perd toute flexibilité. Vous verrez parfois des valeurs de flex avec un pourcentage. Il n'y a aucune signification spéciale et le signe pourcentage est traité comme s'il n'existait pas.

- -

Vous avez dû remarquer que si vous redimensionnez verticalement la boîte de dialogue « Recherche de fichiers », les boutons se redimensionnent également en hauteur pour s'ajuster à la hauteur de la fenêtre. Ceci s'explique par le fait que les boutons ont une valeur de flex verticale implicite donnée par la fenêtre. Dans une prochaine section, nous expliquerons comment changer ce comportement.

- -
-

Nous allons maintenant apprendre des nouvelles caractéristiques sur les boutons.

- -
-

« PrécédentSuivant »

-
- -

Interwiki

diff --git "a/files/fr/archive/mozilla/xul/tutoriel_xul/vues_d'arbre_personnalis\303\251es/index.html" "b/files/fr/archive/mozilla/xul/tutoriel_xul/vues_d'arbre_personnalis\303\251es/index.html" deleted file mode 100644 index da6a3f7744..0000000000 --- "a/files/fr/archive/mozilla/xul/tutoriel_xul/vues_d'arbre_personnalis\303\251es/index.html" +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Vues d'arbre personnalisées -slug: Archive/Mozilla/XUL/Tutoriel_XUL/Vues_d'arbre_personnalisées -tags: - - Tutoriel_XUL - - Tutoriels - - XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Custom_Tree_Views ---- -

 

- -
-

« PrécédentSuivant »

-
- -

Les vues d'arbres permettent d'afficher des données dans une arborescence.

- -

Création d'une vue personnalisée

- -

Jusqu'à présent, nous avons utilisé la construction interne d'une vue d'arbre. Dans cette section, nous verrons la création d'une vue personnalisée. Elle devient nécessaire dès lors que la quantité de données devient trop importante ou que celles-ci soient arrangées de manière trop complexe. Par exemple, l'utilisation d'éléments treeitem ne serait plus viable en terme de performance avec plusieurs milliers de lignes. Vous pouvez également utiliser une vue personnalisée pour afficher des données obtenues par calculs. Puisque la vue peut stocker et récupérer de la meilleure manière possible les données en fonction de leur type, l'arbre peut être utilisé même si plusieurs milliers de lignes doivent être affichées.

- -
Note : les interfaces relatives aux arbres ont changé dans Gecko 1.8. Consultez Modifications de l'API Tree pour plus de détails.
- -

Pour implémenter une vue personnalisée, vous devez créer un objet qui implémente l'interface nsITreeView. Vous pouvez créer ces objets en javascript, mais vous aurez besoin d'un objet séparé pour chaque arbre. Naturellement, comme la vue d'arbre personnalisée est utilisée, la vue de contenu d'arbre ne le sera pas, donc les éléments treeitem, treerow et treecell n'auront aucun sens car la vue d'arbre obtient ses données ailleurs. Ainsi, vous pouvez simplement laisser l'élément treechildren vide. L'exemple suivant vous le montre :

- -
<tree id="my-tree" flex="1">
-  <treecols>
-    <treecol id="namecol" label="Nom" flex="1"/>
-    <treecol id="datecol" label="Date" flex="1"/>
-  </treecols>
-  <treechildren/>
-</tree>
-
- -

Pour assigner les données à afficher dans l'arbre, un objet de vue doit être créé, il sera utilisé pour indiquer la valeur de chaque cellule, le nombre total de lignes plus d'autres informations optionnelles. L'arbre appellera des méthodes de la vue pour obtenir les informations dont il a besoin pour son affichage.

- -

En général, bien que la vue d'arbre dispose de plus d'une trentaine de fonctions pouvant être implémentées, il vous suffira de ne définir que celles appelées par l'arbre. Les trois méthodes que vous devrez implémenter sont décrites ci-dessous :

- -
-
rowCount
-
Cette propriété doit se voir assigner le nombre total de lignes dans l'arbre.
-
getCellText( ligne, colonne )
-
Cette méthode doit retourner le texte contenu à la ligne et la colonne spécifiées. Elle sera appelée pour afficher les données de chaque cellule. Les lignes sont spécifiées par des valeurs numériques qui commencent à '0'. Les colonnes sont des objets TreeColumn. Dans les anciennes versions de Mozilla (antérieures à Firefox 1.5 ou Mozilla 1.8), les colonnes sont référencées par les valeurs de l'attribut id de la colonne. Si vous avez besoin d'un attribut id comme pour ces anciennes version, une propriété id peut être utilisée sur TreeColumn.
-
setTree( arbre )
-
Cette méthode est appelée une seule fois pour affecter l'objet arbre à la vue.
-
- -

Voici un exemple de définition d'un tel objet qui peut avoir le nom que vous souhaitez :

- -
//Moz 1.8
-var treeView = {
-    rowCount : 10000,
-    getCellText : function(row,column){
-      if (column.id == "namecol") return "Ligne "+row;
-      else return "18 février";
-    },
-    setTree: function(treebox){ this.treebox = treebox; },
-    isContainer: function(row){ return false; },
-    isSeparator: function(row){ return false; },
-    isSorted: function(){ return false; },
-    getLevel: function(row){ return 0; },
-    getImageSrc: function(row,col){ return null; },
-    getRowProperties: function(row,props){},
-    getCellProperties: function(row,col,props){},
-    getColumnProperties: function(colid,col,props){}
-};
-
- -

Les fonctions de l'exemple ci-dessus que nous n'avons pas décrites n'ont pas besoin d'effectuer une quelconque action, mais elles doivent être définies car l'arbre les appelle pour rassembler des informations supplémentaires.

- -

Cet exemple peut-être utilisé pour un arbre avec 10000 lignes. Le contenu des cellules de la première colonne sera 'Ligne X' où X sera le numéro de la ligne. Le contenu des cellules de la seconde colonne sera '18 février'. La structure if dans la fonction getCellText() compare la propriété id de l'argument column au texte 'namecol'. Ce texte 'namecol' correspond à l'id du premier élément treecol dans l'exemple précédent. Cet exemple est très simplifié bien sûr - en réalité vous aurez des données bien plus complexes dans chaque cellule.

- -

L'étape finale est d'associer l'objet de vue avec l'arbre. L'arbre a une propriété view, à laquelle on peut assigner l'objet déclaré ci-dessus. Nous pouvons assigner une valeur à cette propriété à tout moment pour attribuer une vue à l'arbre, ou en changer.

- -
function setView(){
-    document.getElementById('my-tree').view = treeView;
-}
-
- -

Le code source suivant présente l'exemple en entier. Un script intégré au fichier XUL a été utilisé ici pour simplifier l'exemple. En temps normal vous mettriez le script dans un fichier de script externe.

- -

Exemple d'arbre personnalisé

- -

Exemple 1 : Source Voir

- -
<?xml version="1.0" encoding="iso-8859-1"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window title="Exemple d'arbre" id="tree-window"
-   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-   onload="setView();">
-
-<script>
-//Moz 1.8
-var treeView = {
-    rowCount : 10000,
-    getCellText : function(row,column){
-      if (column.id == "namecol") return "Ligne "+row;
-      else return "18 février";
-    },
-    setTree: function(treebox){ this.treebox = treebox; },
-    isContainer: function(row){ return false; },
-    isSeparator: function(row){ return false; },
-    isSorted: function(){ return false; },
-    getLevel: function(row){ return 0; },
-    getImageSrc: function(row,col){ return null; },
-    getRowProperties: function(row,props){},
-    getCellProperties: function(row,col,props){},
-    getColumnProperties: function(colid,col,props){}
-};
-
-function setView(){
-    document.getElementById('my-tree').view = treeView;
-}
-</script>
-
-<tree id="my-tree" flex="1">
-  <treecols>
-    <treecol id="namecol" label="Nom" flex="1"/>
-    <treecol id="datecol" label="Date" flex="1"/>
-  </treecols>
-  <treechildren/>
-</tree>
-
-</window>
-
- -

Image:xultu_treeview1.png

- -

Sur l'image, vous voyez deux colonnes, chacune obtenant ses données par l'intermédiaire de la fonction getCellText(). La fonction setView() a été appelée par le gestionnaire onload de la fenêtre (window), mais vous pouvez aussi changer la vue plus tard si vous le souhaitez. Vous pouvez la changer à n'importe quel instant.

- -

Il faut noter que la fonction getCellText() est seulement appelée quand cela est nécessaire pour afficher le contenu. Dans l'exemple de 10000 lignes ci-dessus, getCellText() est seulement appelée pour les cellules qui sont actuellement affichées. Sur cette image, seules sept lignes sont affichées, donc la fonction getCellText() a été appelée 14 fois. Elle sera appelée pour les autres lignes lorsque l'utilisateur les fera défiler. Cette méthode rend l'arbre beaucoup plus efficace.

- -
Notez que l'objet de vue est aussi disponible pour des arbres prédéfinis dans votre installation. Vous pouvez les utiliser pour récupérer les libellés de leurs cellules et d'autres informations.
- -

L'interface nsITreeView liste toutes les méthodes et propriétés que vous pouvez implémenter pour la vue d'un arbre.

- -
-

Dans la prochaine section, nous verrons d'autres fonctionnalités des vues d'arbre.

- -
-

« PrécédentSuivant »

-
diff --git a/files/fr/archive/mozilla/xul/utilisation_de_nsixulappinfo/index.html b/files/fr/archive/mozilla/xul/utilisation_de_nsixulappinfo/index.html deleted file mode 100644 index 10f33316ad..0000000000 --- a/files/fr/archive/mozilla/xul/utilisation_de_nsixulappinfo/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Utilisation de nsIXULAppInfo -slug: Archive/Mozilla/XUL/Utilisation_de_nsIXULAppInfo -tags: - - Extensions -translation_of: Archive/Mozilla/XUL/Using_nsIXULAppInfo ---- -

-À partir de Mozilla/XULRunner 1.8, il existe une nouvelle manière de connaître l'application, sa version et la version de Gecko sur laquelle votre code tourne. -

Cela peut s'avérer utile, par exemple, dans le cas d'extensions prévues pour fonctionner sur plusieurs applications basées sur Mozilla ou différentes versions d'une même application. Ce n'est pas utile pour les scripts sur des pages Web, qui doivent utiliser l'objet navigator. -

-

L'interface nsIXULAppInfo

-

Pour faire la distinction entre différentes applications basées sur Mozilla, utilisez l'interface gelée nsIXULAppInfo. Les sections suivantes proposent quelques exemples d'utilisation de nsIXULAppInfo depuis JavaScript. -

Notez que si Firefox 1.5, Thunderbird 1.5, et les applications basées sur XULRunner 1.8 supportent nsIXULAppInfo, des applications plus anciennes comme Firefox et Thunderbird 1.0 ne le font pas. Vous devrez utiliser du code supplémentaire pour ces anciennes versions. -

-

Obtenir nsIXULAppInfo

-

Pour qu'un composant implémente nsIXULAppInfo, utilisez ce code : -

-
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
-                        .getService(Components.interfaces.nsIXULAppInfo);
-
-

(Pour une explication, consultez cet article sur XUL Planet.) -

-

Des informations sur l'application

-

Après avoir obtenu le composant d'information sur l'application, vous pouvez lire ses propriétés pour connaître l'ID de l'application, son nom lisible par un humain, sa version, la plateforme utilisée, etc. Pour une liste complète des propriétés de nsIXULAppInfo, veuillez consulter la description de l'interface nsIXULAppInfo. -

-

ID

-

Vous pouvez connaître l'application sous laquelle vous tournez à l'aide de la propriété nsIXULAppInfo.ID. -

-
const FIREFOX_ID = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
-const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}";
-var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
-                        .getService(Components.interfaces.nsIXULAppInfo);
-if(appInfo.ID == FIREFOX_ID) {
-  // on est sous Firefox
-} else if(appInfo.ID == THUNDERBIRD_ID) {
-  // on est sous Thunderbird
-} else {
-  // c'est une autre application
-}
-
-

Note : vous auriez également pu utiliser nsIXULAppInfo.name, qui est un nom lisible par un humain pour l'application, comme « Firefox », mais qui sait, peut-être qu'il changera encore de nom ! -

-

Version

-

Dans certains cas, vous aurez besoin de connaître la version de l'application sous laquelle tourne votre code. Par exemple, une des fonctions non gelée que vous utilisez peut avoir changé. -

Note : nsIXULAppInfo fournit des informations concernant l'application et la plateforme, faites attention d'utiliser la bonne, particulièrement dans le cas d'applications basées sur XULRunner. -

Dans de tels cas, vous voudrez probablement vérifier nsIXULAppInfo.version et/ou nsIXULAppInfo.appBuildID. Cette dernière est utile si vous essayez de fonctionner avec des nightlies de développement de l'application, tandis que la premère est plutôt utile si vous prenez uniquement en compte les sorties officielles, et pour faire la distinction entre les compilations de branches particulières ou du tronc. -

Exemple 1 : vérification de la version de Firefox -

-
// en supposant qu'on tourne sous Firefox
-var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
-                        .getService(Components.interfaces.nsIXULAppInfo);
-var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
-                               .getService(Components.interfaces.nsIVersionComparator);
-if(versionChecker.compare(appInfo.version, "1.5") >= 0) {
-  // il s'agit de Firefox 1.5 ou supérieur
-}
-
-

Exemple 2 : reconnaître les nightlies -

-
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
-                        .getService(Components.interfaces.nsIXULAppInfo);
-if(appInfo.appBuildID >= "2005093006") {
-  // la compilation est postérieure ou égale à 2005093006
-}
-
-

Vous ne devriez pas vous baser sur les ID de compilation pour des versions officielles, car l'ID de compilation peut être différent pour des compilations personnalisées ou les version localisées d'une application. -

-

Version de la plateforme

-

nsIXULAppInfo fournit des informations de version à propos de l'application XUL (comme Firefox) et la plateforme (c'est-à-dire Gecko ou XULRunner). Par exemple, dans Firefox 1.5 beta 2 la version de l'application est 1.4.1 et la version de la plateforme est 1.8b5. Faites attention d'utiliser l'information dont vous avez besoin, particulièrement dans le cas d'applications basées sur XULRunner. -

L'obtention des informations de version sur la plateforme s'effectue ainsi : -

-
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
-                        .getService(Components.interfaces.nsIXULAppInfo);
-var platformVer = appInfo.platformVersion;
-var platformBuildID = appInfo.platformBuildID;
-
-

<s id="old"> -</s>

<s id="old"> -

Versions plus anciennes

-

Comme indiqué plus haut, les anciennes application basées sur Mozilla 1.7 ne supportent pas nsIXULAppInfo. Vour aurez à écrire du code supplémentaire si vous choisissez de fonctionner avec ces versions. -

Par exemple, Firefox et Thunderbird 1.0 stockaient leur ID dans la préférence app.id (et leur version dans app.version), donc vous pouvez utiliser un code comme celui-ci pour savoir sous quelle application vous tournez : -

-
function getAppID() {
-  var id;
-  if("@mozilla.org/xre/app-info;1" in Components.classes) {
-    // on est sous Mozilla 1.8 ou supérieur
-    id = Components.classes["@mozilla.org/xre/app-info;1"]
-                   .getService(Components.interfaces.nsIXULAppInfo).ID;
-  } else {
-    try {
-      id = Components.classes["@mozilla.org/preferences-service;1"]
-                     .getService(Components.interfaces.nsIPrefBranch)
-                     .getCharPref("app.id");
-    } catch(e) {
-      // très ancienne version
-      dump(e);
-    }
-  }
-  return id;
-}
-alert(getAppID());
-
-

Voir aussi

- -
-
-</s> diff --git a/files/fr/archive/mozilla/xul/utilisation_de_plusieurs_dtd/index.html b/files/fr/archive/mozilla/xul/utilisation_de_plusieurs_dtd/index.html deleted file mode 100644 index b8a892ecf0..0000000000 --- a/files/fr/archive/mozilla/xul/utilisation_de_plusieurs_dtd/index.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Utilisation de plusieurs DTD -slug: Archive/Mozilla/XUL/Utilisation_de_plusieurs_DTD -tags: - - Localisation - - XUL -translation_of: Archive/Mozilla/XUL/Using_multiple_DTDs ---- -

Généralement il n'y a qu'un unique ficher DTD (Document Type Definition) pour la localisation d'un fichier XUL spécifique. Mais il existe des cas où l'utilisation de plusieurs DTD peut être nécessaire, comme par exemple pour la localisation de "widgets" couramment utilisés dans les fichiers XUL, en plus de ceux spécifiques au fichier à localiser.

- -

DTD unique

- -

Pour rendre localisables les chaînes de votre fichier XUL, vous devez ajouter une déclaration DTD au début du fichier comme ceci :

- -
<!DOCTYPE window SYSTEM "chrome://myextension/locale/mainwindow.dtd">
- -

window est le nom local de l'élément (racine) du document.

- -

Par exemple, si vous avez une entité appelée someButton.label définie dans mainwindow.dtd, vous pouvez y accéder comme ceci :

- -
<button id="somebutton" label="&someButton.label">
-
- -

DTD multiples

- -

Si vous voulez utiliser plusieurs DTD pour votre fichier XUL, vous pouvez simplement lister tous les fichiers DTD dans votre déclaration DTD :

- -
<!DOCTYPE window [
-  <!ENTITY % commonDTD SYSTEM "chrome://myextensions/locale/common.dtd">
-  %commonDTD;
-  <!ENTITY % mainwindowDTD SYSTEM "chrome://myextension/locale/mainwindow.dtd">
-  %mainwindowDTD;
-]>
- -

Vous pouvez maintenant accéder aux entités déclarées dans les DTD comme indiqué ci-dessus. Supposons que vous avez une entité okButton.label définie dans le fichier common.dtd, alors l'accès aux entités des deux DTD ressemblera à cela :

- -
<button id="somebutton" label="&someButton.label">
-...
-<button id="okbutton" label="&okButton.label">
- -

Notez qu'il n'existe rien de comparable aux espaces de noms avec plusieurs DTD. Vous devez vous assurez qu'il n'y a pas de conflit entre les entités définies dans les différents DTD.

diff --git a/files/fr/archive/mozilla/xul/utilisation_du_correcteur_orthographique_dans_xul/index.html b/files/fr/archive/mozilla/xul/utilisation_du_correcteur_orthographique_dans_xul/index.html deleted file mode 100644 index 563925da26..0000000000 --- a/files/fr/archive/mozilla/xul/utilisation_du_correcteur_orthographique_dans_xul/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Utilisation du correcteur orthographique dans XUL -slug: Archive/Mozilla/XUL/Utilisation_du_correcteur_orthographique_dans_XUL -tags: - - Extensions -translation_of: Archive/Mozilla/XUL/Using_spell_checking_in_XUL ---- -

Une nouvelle fonction de correction orthographique est disponible dans Firefox 2. Ce document explique comment utiliser le composant mozISpellCheckingEngine pour permettre à vos extensions Firefox d'en bénéficier.

Consultez Contrôle du correcteur d'orthographe dans les formulaires HTML pour des détails sur l'activation du correcteur orthographique dans les formulaires HTML de vos sites Web. -

-

Vérification de l'orthographe d'un mot

-

Pour vérifier l'orthographe d'un mot, vous devez d'abord créer une interface vers le composant mozISpellCheckingEngine en utilisant @mozilla.org/spellchecker/myspell;1 comme ID de contrat, et appeler ensuite la méthode check() avec la chaine à vérifier. Cette méthode renvoie true si le mot est correctement orthographié, ou false dans le cas contraire. -

-
gSpellCheckEngine = Components.classes["@mozilla.org/spellchecker/myspell;1"]
-                    .getService(Components.interfaces.mozISpellCheckingEngine);
-gSpellCheckEngine.dictionary = 'en-US';
-
-if (gSpellCheckEngine.check("kat")) {
-    // Le mot est correctement écrit
-}
-else {
-    // Le mot n'est pas correctement écrit
-}
-
-

Obtention d'une liste de suggestions

-

Pour obtenir une liste de suggestions pour un mot incorrect, appelez la méthode suggest() en spécifiant le mot et un objet pouvant être rempli d'un tableau de suggestions possibles. -

-
var suggestions = {};
-gSpellCheckEngine.suggest("kat", suggestions);
-
-if (suggestions.value) {
-   // suggestions.value est un tableau JavaScript (objet Array) de chaines
-   // suggestions.value.length compte le nombre de suggestions trouvées
-}
-
-
-
diff --git a/files/fr/archive/mozilla/xul/vbox/index.html b/files/fr/archive/mozilla/xul/vbox/index.html deleted file mode 100644 index 87392e6beb..0000000000 --- a/files/fr/archive/mozilla/xul/vbox/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: vbox -slug: Archive/Mozilla/XUL/vbox -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/vbox ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Un élément conteneur qui peut contenir une infinité d'éléments enfants. C'est l'équivalent de l'élément box, sauf que son orientation par défaut est verticale. -

Vous trouverez plus d'informations dans le Tutoriel XUL.

-

Exemple

-
<!-- Deux labels en bas -->
-<vbox>
-  <spacer flex="1"/>
-  <label value="Un"/>
-  <label value="Deux"/>
-</vbox>
-
-

Attributs

- - - - - - -

Hérités de XUL element
-align, -allowevents, -allownegativeassertions, -class, -coalesceduplicatearcs, -collapsed, -container, -containment, -context, -contextmenu, -datasources, -dir, -empty, -equalsize, -flags, -flex, -height, -hidden, -id, -insertafter, -insertbefore, -left, -maxheight, -maxwidth, -menu, -minheight, -minwidth, -mousethrough, -observes, -ordinal, -orient, -pack, -persist, -popup, -position, -preference-editable, -querytype, -ref, -removeelement, -sortDirection, -sortResource, -sortResource2, -statustext, -style, -template, -tooltip, -tooltiptext, -top, -uri, -wait-cursor, -width

-
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Sujets liés

-
Éléments -
box, hbox -
-
-
diff --git a/files/fr/archive/mozilla/xul/vulgarisation_xul/index.html b/files/fr/archive/mozilla/xul/vulgarisation_xul/index.html deleted file mode 100644 index c5ab6b4c9f..0000000000 --- a/files/fr/archive/mozilla/xul/vulgarisation_xul/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Tutoriel de vulgarisation XUL -slug: Archive/Mozilla/XUL/Vulgarisation_XUL -translation_of: Archive/Add-ons/Overlay_Extensions/XUL_School ---- -

Le projet XUL School a été développé par Glaxstar (maintenant Appcoast), comme un tutoriel complet de développement d'extensions, couvrant les aspects les plus significatifs de développement des extensions, y compris des techniques éprouvées et des normes de haute qualité. Appcoast a aimablement donné le contenu de ce projet, qui est maintenant publié sur le MDC selon ses licences de partage. Certains de ces contenus ont été modifiés à partir de sa source d'origine, et va probablement continuer à évoluer avec les contributions de la communauté.

-

Il vous est conseillé de bien lire en entier au moins une fois son contenu, et de vous repérez au contenu de référence, ainsi que de télécharger, étudier et tester les exemples de codes.

-

Contenu :

- -


diff --git a/files/fr/archive/mozilla/xul/vulgarisation_xul/introduction/index.html b/files/fr/archive/mozilla/xul/vulgarisation_xul/introduction/index.html deleted file mode 100644 index 7d4aed3de9..0000000000 --- a/files/fr/archive/mozilla/xul/vulgarisation_xul/introduction/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Introduction -slug: Archive/Mozilla/XUL/Vulgarisation_XUL/Introduction -translation_of: Archive/Add-ons/Overlay_Extensions/XUL_School/Introduction ---- -
-

Suivant »

-
-

Bonjour, et bienvenue sur le tutoriel de vulgarisation XUL pour les développeurs d'extension !

-

Ce tutoriel est destiné à être le tremplin qui va vous transformer en un développeur d'extensions professionnelles sous Firefox en peu de temps. Il contient des années d'expérience en XUL, en fournissant toutes sortes de solutions aux problèmes communs, et en décrivant les avantages et les inconvénients des différentes approches pour résoudre ces problèmes. Ce tutoriel reflète également une nouvelle manière de faire des extensions Firefox, profitant des nouvelles fonctionnalités et API que Firefox 3 fournit.

-

Ce tutoriel XUL a été créé par Glaxstar (maintenant Appcoast), l'une des rares entreprises spécialisée dans l'élaboration d'extensions de haute qualité pour Firefox. Une équipe de plus d'une douzaine de développeurs XUL de chez Glaxstar ont participé en même temps à ce tutoriel, et l'ensemble des expériences des années de création d'extensions Firefox sont reflétées ici.

-

Dans ce tutoriel, vous apprendrez à développer des extensions Firefox. Vous apprendrez comment faire rapidement les tâches les plus communes dans le développement d'extensions, en comparant plusieurs approches différentes pour les résoudre. Dans la plupart des cas, nous vous fournirons des exemples de code que vous pouvez facilement copier et adapter à vos besoins, ainsi que certains exemples fonctionnels d'extensions. Le tutoriel vise à être aussi bref que possible, en faisant des renvois fréquent sur la documentation de Mozilla pour plus d'informations. Vous pouvez penser que c'est un guide trop court face au monde vaste qui est la plate-forme Mozilla. La plupart des liens dans cette documentation sont destinés à être ouverts et lus, puisque nous ne cherchons pas à être exhaustif.

-

Nous allons commencer par une brève introduction à certains concepts clés, au cas où vous n'êtes pas familier avec Mozilla et Firefox. Vous pouvez ignorer ces sections si vous les connaissez déjà.

-

Mozilla and Firefox

-

Le terme Mozilla sert à définir plusieurs concepts : le projet Mozilla, la fondation Mozilla, la Mozilla Corporation et le vieux navigateur Mozilla. Même Firefox est parfois appelé "Mozilla". Si vous n'êtes pas familier avec ces termes, il est bon que vous prendre un peu de temps et d'en apprendre un peu plus sur Mozilla. Cela vous aidera à comprendre la culture qui entoure la communauté Mozilla.

-

Mozilla a donné naissance à plusieurs produits et projets, le plus important étant le navigateur Web Mozilla Firefox, qui est actuellement le deuxième navigateur le plus utilisé dans le monde, avec une base d'utilisateurs très importante et croissante et un nombre de contributeurs et une communauté de développeurs très importants et croissants. Firefox est l'un des projet libre les plus réussis dans l'histoire, combinant l'ouverture, aux normes de conformité et de la sophistication de l'open source en mettant l'accent sur l'expérience utilisateur et sur un marketing puissant d'offres commerciales.

-

La version 1.0 de Firefox a été publiée en Novembre 2004, la version 2.0 en Octobre 2006, et la version 3.0 en Juin 2008. La version 3.0 comprend une grande variété de modifications, dont certaines ne sont pas rétro-compatibles, donc vous devez en tenir compte lors du développement d'extensions. Ce tutoriel se concentre sur le développement de Firefox 3.0 et suivant, mais une majorité de son contenu s'applique également pour Firefox 2 et Firefox 1. Le tutoriel précisera quand une solution ne fonctionne que sur certaines versions les plus récentes de Firefox.

-
-

Nous vous recommandons de développer vos extensions pour Firefox 3 et plus. Les utilisateurs de Firefox 3 seront bientôt la majorité des utilisateurs de Firefox, et les avantages d'utiliser les nouvelles fonctionnalités de Firefox 3 sont importants.

-
-

XUL

-

XUL (prononcez «zool») est l'une des nombreuses technologies utilisées pour créer des produits et des extensions basés sur Mozilla. C'est seulement une partie de l'environnement de développement, mais étant donné qu'il est pratiquement exclusif à Mozilla, il tend à être utilisé pour identifier tous les développements liés à Mozilla. Vous verrez parfois écrit des termes comme "applications XUL" et "extensions XUL", mais rarement ils vont se référer à des projets qui sont exclusivement construits avec XUL. Cela signifie généralement que les projets ont été construits en utilisant les technologies Mozilla. Même ce tutoriel couvre plusieurs autres technologies telles que JavaScript, CSS, XBL et XPCOM.

-

Gecko

-

Le moteur Gecko est la partie de Firefox utilisée pour le rendu des pages Web et sa propre interface utilisateur. Vous pouvez identifier le niveau de compatibilité des standards du Web dans les navigateurs basés sur Gecko en regardant leur chaîne d'agent utilisateur, qui devrait inclure la version Gecko. Les versions de Gecko sont indépendantes des versions de Firefox, et vous pouvez voir une cartographie des versions de Firefox et les versions Gecko sur la page Gecko. La chaîne d'agent utilisateur pour Firefox au moment d'écrire ces lignes (en anglais américain, Mac OS X) est la suivante :

-

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6

-

La section en surbrillance est la version Gecko: 1.9.2. Vous pouvez lire et copier la chaîne de l'agent utilisateur de n'importe quelle fenêtre de Firefox, en choisissant "? > À propos de Mozilla Firefox" dans le menu principal ("Firefox > À propos de Mozilla Firefox", sur Mac).

-

XULRunner

-

Firefox et d'autres applications Mozilla peuvent être considérés comme composés de deux parties distinctes : une couche d'interface utilisateur qui est distincte pour chaque projet, et une plate-forme commune sur laquelle la couche d'interface est construite. Cette plate-forme est connue sous le nom de XULRunner. XULRunner inclut le moteur de rendu Gecko, la bibliothèque réseau Necko, et plusieurs autres composants qui permettent aux gestionnaires de fichiers OS indépendant, l'accessibilité et la localisation, entre autres. C'est cette plate-forme très puissante qui a permis une croissance rapide de la communauté de développement autour de Mozilla et Firefox.

-

XULRunner est disponible sous forme binaire sur la page XULRunner, et il est la base de plusieurs projets, tels que Songbird, Miro et Eudora. Il y a une liste très complète d'applications XULRunner dans le Hall of Fame XULRunner.

-

Sur le tutoriel

-

Avec ce rappel des concepts de base, nous pouvons maintenant aller droit au développement d'extensions. Vous êtes probablement encore à vous demander qu'est-ce qu'est exactement une extension, ce qu'elle fait, et comment vous pouvez en faire. Eh bien, tout ce tutoriel est consacré à vous l'expliquer.

-

Bienvenue dans le monde du développement d'extensions. Maintenant, allons-y.

-
-

Suivant »

-
-

Ce tutoriel a été gracieusement offert à Mozilla par Appcoast.

diff --git a/files/fr/archive/mozilla/xul/vulgarisation_xul/l'essentiel_d'une_extension/index.html b/files/fr/archive/mozilla/xul/vulgarisation_xul/l'essentiel_d'une_extension/index.html deleted file mode 100644 index 455bc53fb1..0000000000 --- a/files/fr/archive/mozilla/xul/vulgarisation_xul/l'essentiel_d'une_extension/index.html +++ /dev/null @@ -1,412 +0,0 @@ ---- -title: L'essentiel d'une extension -slug: Archive/Mozilla/XUL/Vulgarisation_XUL/L'essentiel_d'une_extension -translation_of: Archive/Add-ons/Overlay_Extensions/XUL_School/The_Essentials_of_an_Extension ---- -
-

« PrécédentSuivant »

-
- -

Le fichier install.rdf

- -

Dans la section précédente, nous avons examiné le contenu de l'extension "Hello World". Maintenant, nous allons examiner dans son code et ses fichiers, en commençant par le fichier install.rdf. Vous pouvez l'ouvrir avec n'importe quel éditeur de texte.

- -

Le fichier est formaté selon un type particulier XML appelé RDF. RDF est utilisé pour le mécanisme de stockage centralisé pour Firefox, mais il est maintenant remplacé par un système plus simple de base de données. Nous aborderons ces deux systèmes de stockage plus loin dans le tutoriel.

- -

Maintenant, regardons les parties importantes du fichier.

- -
-
-
<em:id>helloworld@xulschool.com</em:id>
-
-
- -

Il s'agit d'un identifiant unique pour l'extension. Firefox en a besoin pour distinguer votre extension des autres, il est donc nécessaire que cet identifiant soit unique.

- -

Il existe deux normes acceptées pour les IDS des extensions. Le premier est le format de type e-mail comme dans l'exemple "Hello World", qui devrait être quelque chose comme <project-name>@<yourdomain>. L'autre pratique standard consiste à utiliser une chaîne UUID générée qui est extrêmement peu probable à être reproduite. Les systèmes basés sur Unix ont un outil en ligne de commande appelé uuidgen qui génère des UUIDs. Il existe également des outils téléchargeables disponibles pour toutes les plates-formes pour les générer. Les crochets entourant ne sont que la notation, et il s'agit d'une simple notation courante. Tant que votre id a une certaine unicité, il est possible d'utiliser l'une des deux formes.

- -
-
-
<em:name>XUL School Hello World</em:name>
-<em:description>Welcome to XUL School!</em:description>
-<em:version>0.1</em:version>
-<em:creator>Appcoast</em:creator>
-<em:homepageURL>https://developer.mozilla.org/en/XUL_School</em:homepageURL>
-
-
- -

Il s'agit des données qui sont affichées avant et après l'installation de l'extension, et que vous pouvez voir dans la fenêtre des modules complémentaires. L'URL de la page d'accueil peut être visité par un clic droit sur l'extension et en choisissant Visitez la page Web. Il y a beaucoup d'autres balises pouvant être ajoutées, pour les auteurs et les traducteurs. La spécification complète du fichier install.rdf contient tous les détails.

- -

Comme les extensions peuvent être traduites en plusieurs langues, il est souvent nécessaire de traduire la description de l'extension, ou même son nom. Sur Firefox 3 et suivant, une description localisée et un nom peuvent être ajoutés par le code suivant :

- -
-
-
<em:localized>
-  <Description>
-    <em:locale>es-ES</em:locale>
-    <em:name>XUL School Hola Mundo</em:name>
-    <em:description>Bienvenido a XUL School!</em:description>
-  </Description>
-</em:localized>
-
-
- -

La chaîne de localisation es-ES indique que la langue est l'espagnol (es) pour l'Espagne (ES). Vous pouvez ajouter autant de sections <em:localized> que vous avez besoin. Pour Firefox 2, la localisation de ce fichier est un peu plus compliqué. Nous verrons la localisation plus loin dans cette section.

- -
-
-
<em:type>2</em:type>
-
-
- -

Ceci précise que le module en cours d'installation est une extension. Vous pouvez consulter les différents types possibles dans la spécification install.rdf.

- -
-
-
<em:targetApplication>
-  <Description>
-    <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-    <em:minVersion>3.0</em:minVersion>
-    <em:maxVersion>3.6.*</em:maxVersion>
-  </Description>
-</em:targetApplication>
-
-
- -

Ce nœud spécifie l'application cible et les versions cibles de l'extension, en particulier Firefox de la version 3.0 au versions 3.6.*. L'UUID est l'ID unique de Firefox. Les autres applications Mozilla et basées sur Mozilla telles que Thunderbird et Seamonkey ont le leurs. Vous pouvez avoir une extension qui fonctionne sur de multiples applications et versions. Par exemple, si vous créez une extension de Firefox, il faudrait normalement peu d'effort pour la porter sur Flock ou sur SeaMonkey, qui ont une interface utilisateur et des caractéristiques très similaires.

- -

Le min et max de la version spécifie l'étendue des versions où l'extension peut être installée. Des détails sont disponibles sur le format de version. Si l'application ou la plage de version ne correspondent pas, vous ne serez pas autorisé à installer l'extension, ou l'extension sera installée dans un état désactivé. Les utilisateurs peuvent désactiver les contrôles version grâce à des préférences ou d'installer des modules complémentaires comme Add-on Compatibility Reporter.

- -

Ce sont les seules informations dont Firefox et d'autres applications Mozilla ont besoin pour installer un module complémentaire. Toutes erreurs ou manques d'information entraînent un échec du processus d'installation, ou laissent l'extension s'installer dans un état désactivé.

- -

Le fichier chrome.manifest

- -
-

Le chrome est l'ensemble des éléments de l'interface utilisateur d'une application qui sont situés en dehors de la zone de contenu d'une fenêtre. Les barres d'outils, les barres de menus, les barres de progression, et les titres de fenêtres sont tous des exemples d'éléments qui font habituellement partie du chrome.

-
- -

Citation de Enregistrement Chrome.

- -

En d'autres termes, le chrome correspond à tout ce que vous voyez dans Firefox. Toutes les fenêtres Firefox peuvent être considérées comme ayant deux parties : (1) le chrome et (2) peut-être une zone de contenu, comme celui qui affiche les pages Web dans un onglet Firefox. Les fenêtres comme le gestionnaire de modules complémentaires et de la fenêtre de téléchargements sont en chrome pur. La plupart du code pour une extension réside dans le dossier chrome, tout comme dans l'exemple Hello World.

- -

Les fichiers Chrome sont tous empaquetés dans une archive JAR, généralement nommée d'après l'extension. Il n'est pas nécessaire d'empaqueter les fichiers chrome, mais c'est une pratique courante et recommandée pour des raisons de performances.

- -

Comme nous l'avons vu dans la structure des répertoires de l'extension décompressée, le chrome est composé de 3 sections : content, locale et skin. Les 3 sont nécessaires pour la plupart des extensions. Si nous ouvrons le fichier chrome.manifest (encore une fois, un éditeur de texte fera l'affaire), nous voyons que les 3 mêmes sections sont mentionnés :

- -
-
-
content   xulschoolhello              jar:chrome/xulschoolhello.jar!/content/
-skin      xulschoolhello  classic/1.0 jar:chrome/xulschoolhello.jar!/skin/
-locale    xulschoolhello  en-US       jar:chrome/xulschoolhello.jar!/locale/en-US/
-
-
- -

Le fichier chrome.manifest indique à Firefox où chercher les fichiers chrome. Le texte est espacé pour ressembler à un tableau, mais ce n'est pas nécessaire. L'analyseur ignorera les espaces répétées.

- -

Le premier mot d'une ligne indique à Firefox ce qui est déclaré (le contenu, le thème graphique, la langue, ou d'autres choses que nous verrons plus loin). Le second est le nom du paquet, que nous expliquerons bientôt. Les paquets des thèmes et langages ont une troisième valeur afin de définir ce qu'ils étendent. Il peut y avoir plusieurs thèmes ou langages. Le cas le plus fréquent est d'avoir une seule entrée pour le thème correspondant au thème global classic/1.0, et des entrées multiples de langages, une pour chaque langue. Enfin, l'emplacement est spécifié. Note sur le schéma jar: ; il indique à Firefox de d'ouvrir le fichier JAR et de lire les fichiers à leur emplacement. Si vous voulez avoir une extension avec un répertoire chrome non empaqueté, il vous suffit de modifier les chemins d'accès en quelque chose comme chrome/ content/.

- -

Quelques options supplémentaires peuvent être inclues dans les entrées d'un fichier chrome.manifest. Elles sont documentées dans la page Enregistrement Chrome. Notamment, nous pouvons avoir des entrées qui sont spécifiques à l'OS. Ceci est important, spécialement dans Firefox 3 et plus, où l'apparence du navigateur est très différente selon le système d'exploitation. Si notre extension doit avoir une apparence différence sur d'autres systèmes, nous pourrions modifier le fichier manifest comme ceci :

- -
-
-
content   xulschoolhello              jar:chrome/xulschoolhello.jar!/content/
-skin      xulschoolhello  classic/1.0 jar:chrome/xulschoolhello.jar!/skin/unix/
-skin      xulschoolhello  classic/1.0 jar:chrome/xulschoolhello.jar!/skin/mac/ os=Darwin
-skin      xulschoolhello  classic/1.0 jar:chrome/xulschoolhello.jar!/skin/win/ os=WinNT
-locale    xulschoolhello  en-US       jar:chrome/xulschoolhello.jar!/locale/en-US/
-
-
- -

De cette façon, nous pouvons avoir des thèmes graphiques  distincts pour Windows, Mac OS X, et Linux (ainsi que d'autres systèmes de type Unix), définis chacun dans un répertoire distinct. Comme la plupart des autres systèmes sont basés sur Unix, le thème "unix" est la valeur par défaut, sans drapeaux.

- -

Le Chrome

- -

Comme mentionné précédemment, le chrome est composé de 3 sections : le contenu, le langage et le thème. Le contenu est la section la plus importante, contenant les fichiers de l'interface utilisateur (XUL) et du script (JS). La section du thème contient les fichiers définissant principalement l'apparence graphique de l'interface utilisateur (en utilisant le CSS et les images, tout comme les pages Web). Enfin, la section du langage regroupe tous les textes utilisés dans l'extension, dans des fichiers DTD et properties. Cette division permet aux développeurs de créer d'autres thèmes graphiques, et aux traducteurs de créer des versions dans des langues différentes, tout cela sans avoir à modifier votre extension ou votre code. Cela donne aux extensions Firefox beaucoup de flexibilité.

- -

Les fichiers Chrome sont accessibles via le protocole chrome. Les URIs chrome sont définis comme suit 

- -
-
-
chrome://packagename/section/path/to/file
-
-
- -

Ainsi, par exemple, si je veux accéder au fichier browserOverlay.xul dans l'extension, l'URI chrome serait chrome://xulschoolhello/content/browserOverlay.xul. Si vous avez trop de fichiers dans le contenu et vous souhaitez les organiser en sous-répertoires, il n'y a rien à changer de chrome.manifest, il vous suffit d'ajouter le chemin correspondant après content dans l'URI. Les fichiers des thèmes ou de langages fonctionnent de la même manière, et vous n'avez pas besoin de spécifier leurs noms exacts. Ainsi, pour accéder au fichier DTD dans l'exemple Hello World, le chemin de chrome est chrome://xulschoolhello/locale/browserOverlay.dtd. Firefox sait de quel fichier de traduction il s'agit.

- -

Voici une expérience intéressante. Ouvrez un nouvel onglet Firefox, tapez chrome://mozapps/content/downloads/downloads.xul dans votre barre d'adresse et appuyez sur ENTRER. Surpris ? Vous venez d'ouvrir la fenêtre des Téléchargements dans un onglet Firefox ! Vous pouvez accéder à un fichier chrome en tapant simplement son URI dans la barre d'adresse. Cela peut être utile si vous voulez inspecter les fichiers de script qui font partie de Firefox, d'autres extensions, ou de la votre. La plupart de ces fichiers sont ouverts sous forme de fichiers texte, à l'exception des fichiers XUL qui sont exécutés et affichés comme vous les verriez normalement sur une fenêtre.

- -

Content

- -

Il y a 2 fichiers dans le répertoire content. Regardons le premier fichier XUL.

- -

Les fichiers XUL sont des fichiers XML qui définissent les éléments de l'interface utilisateur dans Firefox et les extensions Firefox. XUL a été inspiré par le HTML, donc vous verrez beaucoup de similitudes entre les deux. Cependant, XUL est aussi une amélioration par rapport à HTML, ayant appris de bon nombre des erreurs commises durant l'évolution de HTML. XUL permet de créer des interfaces plus riches et plus interactives que celles que vous pouvez créer avec le langage HTML, ou tout au moins XUL les rend plus facile.

- -

Les fichiers XUL définissent généralement l'une des deux choses suivantes : les fenêtres ou les superpositions (overlay). Le fichier que vous avez ouvert précédemment, downloads.xul, a un code qui définit la fenêtre de téléchargements. Le fichier XUL inclus dans l'extension Hello World est une superposition. Une superposition étend une fenêtre existante, en ajoutant de nouveaux éléments ou en remplaçant certains des éléments qu'elle contient. La ligne que nous avons sauté dans les lignes du fichier chrome.manifest décrit que ce fichier XUL est une superposition de la fenêtre principale du navigateur :

- -
-
-
overlay chrome://browser/content/browser.xul  chrome://xulschoolhello/content/browserOverlay.xul
-
-
- -

With this line, Firefox knows that it needs to take the contents of browserOverlay.xul and overlay it on the main browser window, browser.xul. You can declare overlays for any window or dialog in Firefox, but overlaying the main browser window is the most common case by far.

- -

Now let's look at the contents of our XUL file. We'll skip the first few lines because they relate to skin and locale, which we'll cover later.

- -
-
-
<overlay id="xulschoolhello-browser-overlay"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-
- -

The root element in the file is an overlay. Other XUL documents use the window or dialog tag. The element has a unique id, which you should have on most elements in your XUL. The second attribute is the namespace, which is something you should always define in your XUL root element. It says that this node and all child nodes are XUL. You only need to change namespace declarations when you combine different types of content, such as XUL with HTML or SVG.

- -
-
-
You may have noticed the naming we use on several places, such as the id xulschoolhello-browser-overlay. This is the namespacing standard that we use to avoid conflicts with Firefox and other extensions, as well as making some development tasks easier. We namespace all ids and style classes in overlay elements because they will be mixed with other elements in the main browser window. If we used generic ids like container or input, they will likely conflict with ids used within Firefox, or with ids from other extension overlays. Using namespaces minimizes compatibility problems with other extensions. We use camel casing for file names, and all lower case with dashes for element ids and CSS style class names.
-
-
- -
-
-
<script type="application/x-javascript"
-  src="chrome://xulschoolhello/content/browserOverlay.js" />
-
-
- -

Just like in HTML, this includes a JavaScript script file. You can have as many script elements on a XUL file as you need. We'll look into its code later.

- -
-
-
You also probably noticed how we format our code, and wonder about the rules we follow. Our general rule on line length is not having lines longer than 80 characters. This feels very restrictive, specially with XML files, but the number was chosen to allow pretty much any text editor to handle these files easily. Even old command line editors work well with files that cut their lines at 80 characters. The tabulation is very straightforward: 2 blank space indents. We never use actual tab characters, with the exception of Makefiles, which will be covered later on. Most of our coding standards are based on Mozilla's or other known and used standards.
-
-
- -

 We'll skip some code that is covered in the locale section, moving on to the most important part of the content:

- -
-
-
<menubar id="main-menubar">
-  <menu id="xulschoolhello-hello-menu" label="&xulschoolhello.hello.label;"
-    accesskey="&xulschoolhello.helloMenu.accesskey;" insertafter="helpMenu">
-    <menupopup>
-      <menuitem id="xulschoolhello-hello-menu-item"
-        label="&xulschoolhello.hello.label;"
-        accesskey="&xulschoolhello.helloItem.accesskey;"
-        oncommand="XULSchoolChrome.BrowserOverlay.sayHello(event);" />
-    </menupopup>
-  </menu>
-</menubar>
-
-
- -

This is the code that adds the Hello World menu to the browser window. In order to write this code, we needed some knowledge of the XUL code in browser.xul. We needed to know that the id of the main menu is main-menubar. We're adding a menu of our own, and telling Firefox to add it in the main menu bar, right after the Help menu. That's the purpose of the attribute:

- -
-
-
insertafter="helpMenu"
-
-
- -

helpMenu is the id of the menu element that corresponds to the Help menu in the main menu of the browser. We'll see later how we can find out things like the ids of browser elements, but for now let's look at the elements that compose the Hello World menu.

- -

The menubar element represents the menu bar you normally see at the top of an application window. The main Firefox window has one, but few of its other windows do. It's also rare for additional extension windows to have their own menu bars.

- -

We added the Hello World menu right in the "root" of the menu bar so that it would be very easy for you to spot it, but this is not a recommended practice. Imagine if all extensions added menus to the top menu bar; having a few extensions would make the menu look like an airplane dashboard, full of options. The recommended location for extension menus is under the Tools menu, so the code should really look like this:

- -
-
-
<menupopup id="menu_ToolsPopup">
-  <menu id="xulschoolhello-hello-menu" label="&xulschoolhello.hello.label;"
-    accesskey="&xulschoolhello.helloMenu.accesskey;"
-    insertafter="javascriptConsole,devToolsSeparator">
-    <menupopup>
-      <menuitem id="xulschoolhello-hello-menu-item"
-        label="&xulschoolhello.hello.label;"
-        accesskey="&xulschoolhello.helloItem.accesskey;"
-        oncommand="XULSchoolChrome.BrowserOverlay.sayHello(event);" />
-    </menupopup>
-  </menu>
-</menupopup>
-
-
- -

We're overlaying a menu that is deeper into the XUL tree, but it doesn't matter because all we need is the id of the element we want to overlay. In this case it is the menupopup element that's inside of the Tools menu element. The insertafter attribute tells Firefox to add the menu below the Error Console item (formerly known as JavaScript Console) in the Tools menu, just like recommended in the Extension Etiquette page. We'll discuss more about menus later on in the tutorial. For now let's focus on the following line:

- -
-
-
oncommand="XULSchoolChrome.BrowserOverlay.sayHello(event);"
-
-
- -

This attribute defines an event handler. The command event is the most frequently used in Firefox, since it corresponds to the main action for most UI elements. The value of the attribute is JavaScript code that invokes a function. This function is defined in the JS file that was included with the script tag. The JS function will be called once the user clicks on the menu item in the Hello World menu. All event handlers define a special object named event, which is usually good to pass as an argument to the function. Event handlers are explained in grater depth further ahead.

- -

Now let's look at the JavaScript file and see what's going on when the event is fired.

- -
-
-
/**
- * XULSchoolChrome namespace.
- */
-if ("undefined" == typeof(XULSchoolChrome)) {
-  var XULSchoolChrome = {};
-};
-
-
- -

The XULSchoolChrome namespace is defined. All objects and variables we define in this JavaScript are global, meaning that scripts in Firefox and other extensions can see them and interact with them. This also means that if we define an object called MenuHandler or some other generic name, it's likely going to conflict with an existing object. What we do here is define a single global object: XULSchoolChrome. Now we know that all of our objects are inside this object, which is unlikely to be duplicated or overwritten by other extensions.

- -

You can read more about the typeof operator. If you're unfamiliar with JavaScript or this particular syntax, initializing an object as {} is the equivalent of initializing it to new Object().

- -
-
-
/**
- * Controls the browser overlay for the Hello World extension.
- */
-XULSchoolChrome.BrowserOverlay = {
-
-
- -

Finally, BrowserOverlay is our object. Naming and referencing  objects in such a long and verbose manner can feel uncomfortable at first, but it's worth the cost.

- -
-
-
We use Javadoc style comments on all namespaces, objects and object members. This is a similar standard to the one used in Mozilla code, and some tools can generate documentation automatically from Javadoc.
-
-
- -
-
-
sayHello : function(aEvent) {
-  let stringBundle = document.getElementById("xulschoolhello-string-bundle");
-  let message = stringBundle.getString("xulschoolhello.greeting.label");
-
-  window.alert(message);
-}
-
-
- -

And, finally, this is our function declaration. Three lines of code are all we need for it to work. The first line in the body of the function declares a variable that will hold the stringbundle element defined in the overlay. The variable is declared using let, which is similar to var but with more restricted scope. Here you can read more about let declarations. It's worth noting that this is a relatively new addition to JavaScript in Firefox and you should use var if you're creating an extension compatible with very old versions.

- -

Just like in regular JS, we can use the DOM (Document Object Model) in order to manipulate the XUL document. First we get a reference of the stringbundle element in the document. This is a special element that allows us to obtain localized strings dynamically, by only providing a "key" that identifies the string. This is what we do on the second line. We call the getString method of the bundle element and get the localized message to be displayed. We then call the window.alert function with the message, just like we would do in an HTML document.

- -

Locale

- -

There are two types of locale files: DTD and properties, and in this example we use them both. DTD is the most efficient way of showing text in XUL, so you should use it whenever possible. It is somewhat inflexible so it can't be used for dynamically generated text, hence the need for an alternate way of getting localized strings.

- -

Looking back at the menu code, you probably noticed some attributes such as this:

- -
-
-
label="&xulschoolhello.hello.label;" accesskey="&xulschoolhello.helloItem.accesskey;"
-
-
- -

These attributes define the text that you see on the menus, and they are string keys that are defined in our DTD file, browserOverlay.dtd. The DTD file was included in the XUL file with the following code:

- -
-
-
<!DOCTYPE overlay SYSTEM "chrome://xulschoolhello/locale/browserOverlay.dtd" >
-
-
- -

And in the DTD file you can see the association between keys and localized strings:

- -
-
-
<!ENTITY xulschoolhello.hello.label            "Hello World!">
-<!ENTITY xulschoolhello.helloMenu.accesskey    "l">
-<!ENTITY xulschoolhello.helloItem.accesskey    "H">
-
-
- -

Notice that on the XUL file you enclose the string key with & and ; while on the DTD file you only specify the key. You may get weird parsing errors or incorrect localization if you don't get it right.

- -

Access keys are the shortcuts that allow you to quickly navigate a menu using only the keyboard. They are also the only way to navigate a menu for people with accessibility problems, such as partial or total blindness, or physical disabilities that make using a mouse very difficult or impossible. You can easily recognize the access keys on Windows because the letter that corresponds to the access key is underlined, as in the following image:

- -
-

-
- -

Most user interface controls have the accesskey attribute, and you should use it. The value of the access key is localized because it should match a letter in the label text. You should also be careful to avoid access key repetition. For example, within a menu or submenu, access keys should not be repeated. In a window you have to be more careful picking access keys because there are usually more controls there. You have to be specially careful when picking access keys on an overlay. In our case, we can't use the letter "H" as an accesskey in the Main menu item, because it would be the same as the access key in the Help menu. Same goes with "W" and the Window menu on Mac OS. So we settled on the letter "l".

- -

DTD strings are resolved and set when the document is being loaded. If you request the label attribute value for the Hello World menu using DOM, you get the localized string, not the string key. You cannot dynamically change an attribute value with a new DTD key, you have to set the new value directly:

- -
-
-
let helloItem = document.getElementById("xulschoolhello-hello-menu-item");
-
-// The alert will say "Hello World!"
-alert(helloItem.getAttribute("label"));
-// Wrong
-helloItem.setAttribute("label", "&xulschoolhello.hello2.label;");
-// Better
-helloItem.setAttribute("label", "Alternate message");
-// Right!
-helloItem.setAttribute("label", someStringBundle.getString("xulschoolhello.hello2.label"));
-
-
- -

This is the reason DTD strings are not a solution for all localization cases, and the reason we often need to include string bundles in XUL files:

- -
-
-
<stringbundleset id="stringbundleset">
-  <stringbundle id="xulschoolhello-string-bundle"
-    src="chrome://xulschoolhello/locale/browserOverlay.properties" />
-</stringbundleset>
-
-
- -

The stringbundleset element is just a container for stringbundle elements. There should only be one per document, which is the reason why we overlay the stringbundleset that is in browser.xul, hence the very generic id. We don't include the insertbefore or insertafter attributes because the ordering of string bundles doesn't make a difference. The element is completely invisible. If you don't include any of those ordering attributes in an overlay element, Firefox will just append your element as the last child of the parent element.

- -

All you need for the string bundle is an id (to be able to fetch the element later) and the chrome path to the properties file. And, of course, you need the properties file:

- -
-
-
xulshoolhello.greeting.label = Hi! How are you?
-
-
- -

The whitespace around the equals sign is ignored. Just like in install.rdf, comments can be added using the # character at the beginning of the line. Empty lines are ignored as well.

- -

You will often want to include dynamic content as part of localized strings, like when you want to inform the user about some stat related to the extension. For example: "Found 5 words matching the search query". Your first idea would probably be to simply concatenate strings, and have one "Found" property and another "words matching..." property. This is not a good idea. It greatly complicates the work of localizers, and grammar rules on different languages may change the ordering of the sentence entirely. For this reason it's better to use parameters in the properties:

- -
-
-
xulshoolhello.search.label = Found %S words matching the search query!
-
-
- -

Then you use getFormattedString instead of getString in order to get the localized string. Thanks to this we don't need to have multiple properties, and life is easier for translators. You can read more about it on the Text Formatting section of the XUL Tutorial. Also have a look at the Plurals and Localization article, that covers a new localization feature in Firefox 3 that allows you to further refine this last example to handle different types of plural forms that are also language-dependent.

- -

Skin

- -

Styling XUL is very similar to styling HTML. We'll look into some of the differences when we cover the XUL Box Model, and other more advanced topics. There isn't much styling you can do to a minimal menu and a very simple alert message, so the Hello World extension only includes an empty CSS file and the compulsory global skin file:

- -
-
-
<?xml-stylesheet type="text/css" href="chrome://global/skin/"  ?>
-<?xml-stylesheet type="text/css"
-  href="chrome://xulschoolhello/skin/browserOverlay.css"  ?>
-
-
- -

The global skin CSS file holds the default styles for all XUL elements and windows. Forgetting to include this file in a XUL window usually leads to interesting and often unwanted results. In our case we don't really need to include it, since we're overlaying the main browser XUL file, and that file already includes this global CSS. At any rate it's better to always include it. This way it's harder to make the mistake of not including it. You can enter the chrome path in the location bar and inspect the file if you're curious.

- -

This covers all of the files in the Hello World extension. Now you should have an idea of the basics involved in extension development, so now we'll jump right in and set up a development environment. But first, a little exercise.

- -

Exercise

- -

Change the welcome message that is displayed in the alert window and move the Hello World menu to the Tools Menu, where it belongs. Repackage the XPI and re-install it. You can just drag the XPI file to the browser and it will be installed locally. Test it and verify your changes worked. If you run into problems at installation, it's likely that you didn't reproduce the XPI structure correctly, maybe adding unnecessary folders.

- -

Once you're done, you can look at this reference solution: Hello World 2.

- -
-

« PrécédentSuivant »

-
- -

This tutorial was kindly donated to Mozilla by Appcoast.

diff --git a/files/fr/archive/mozilla/xul/vulgarisation_xul/premiers_pas_avec_les_extensions_firefox/index.html b/files/fr/archive/mozilla/xul/vulgarisation_xul/premiers_pas_avec_les_extensions_firefox/index.html deleted file mode 100644 index 417c76133f..0000000000 --- a/files/fr/archive/mozilla/xul/vulgarisation_xul/premiers_pas_avec_les_extensions_firefox/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Premiers pas avec les extensions Firefox -slug: Archive/Mozilla/XUL/Vulgarisation_XUL/Premiers_pas_avec_les_extensions_Firefox -translation_of: >- - Archive/Add-ons/Overlay_Extensions/XUL_School/Getting_Started_with_Firefox_Extensions ---- -
-

« PrécédentSuivant »

-
- -

Qu'est-ce qu'une extension Firefox ?

- -
-

Les extensions ajoutent de nouvelles fonctionnalités à des applications Mozilla telles que Firefox et Thunderbird. Elles peuvent ajouter n'importe quoi depuis le bouton d'une barre d'outils à une fonctionnalité entièrement nouvelle. Ils permettent à l'application d'être personnalisée pour répondre aux besoins personnels de chaque utilisateur en fonctionnalités supplémentaires, tout en gardant des applications légères à télécharger.

-
- -

Telle que décrit dans le texte cité, une extension est une petite application qui ajoute quelque chose de nouveau à une ou plusieurs applications Mozilla. Ce tutoriel se concentre sur des extensions pour Firefox, mais les mêmes (ou très similaires) principes s'appliquent à la création d'extensions pour d'autres applications comme Thunderbird, SeaMonkey, et Flock.

- -

Il est également intéressant de noter qu'il existe des différences entre la définition d'extension et de module complémentaire. Toutes les extensions sont des modules complémentaires, mais des modules complémentaires peuvent également être des thèmes, des plugins, ou paquetages de langue. Ce tutoriel porte sur le développement d'extensions, mais les thèmes et les paquetages de langues sont développés de manière très similaire. Les plugins sont tout à fait différents, et ils ne seront pas abordés dans ce tutoriel. Vous pourrez en savoir plus sur les plugins et leur développement dans la page Plugins.

- -

Firefox fournit une architecture très riche et flexible qui permet aux développeurs d'extensions d'ajouter des fonctionnalités avancées, de personnaliser l'expérience de l'utilisateur, et de remplacer ou d'enlever complètement des parties de votre navigateur. Le référentiel Mozilla Add-ons (AMO) regroupe un grand nombre d'extensions ayant une grande variété de fonctions : le filtrage de contenu (AdBlock Plus, NoScript), l'interaction d'application Web (Delicious Bookmarks, eBay Companion), le développement Web (DOM Inspector, Firebug) et la protection de l'enfance (Glubble pour les familles). Il s'agit d'extensions très avancées et complexes, et vous apprendrez plus qu'il n'en faut pour créer des extensions comme celles-ci (Glaxstar participe à 3 de celles qui sont énumérées).

- -

Nous commencerons par examiner une extension très simple.

- -

L'extension Hello World

- -

Nos exemples d'extensions et ce tutoriel sont en général destinés à la version Firefox 3 et plus, mais la plupart fonctionne aussi sur les versions précédentes de Firefox. Nous essaierons de le préciser lorsque nous discuterons d'une fonction qui ne fonctionne que sur certaines versions de Firefox.

- -

Nous allons maintenant commencer par une extension basique "Hello World". Commençons par l'installation de l'extension. Cliquez sur le lien ci-dessous.

- -
-

L'extension suivante servant d'exemple n'est pas signée numériquement. Pour pouvoir l'activer, vous devez disposer de Firefox Developer Edition et désactiver le controle de la signature numérique.

-
- -

Installation de Hello World

- -

Ce lien déclenchera une installation ou un téléchargement de fichier, en fonction du Content-type utilisé par le serveur Web. Le type de contenu approprié pour déclencher une installation est application/x-xpinstall. Dans ce cas, un téléchargement de fichier doit se produire.

- -

Si le type de contenu est défini correctement, vous serez informé que le site n'est pas autorisé à installer des modules complémentaires sous Firefox. Il s'agit d'une mesure de sécurité qui empêche des sites d'installer des extensions sans le consentement de l'utilisateur. Cela est nécessaire car les extensions malveillantes peuvent avoir le même niveau de dommage que tout programme malveillant : le vol de données, l'effacement ou le remplacement des fichiers, et entraîner des comportements indésirables en général. AMO est le seul site de pré-autorisés car tous les modules complémentaires publiés sur l'AMO sont passés par un processus d'examen qui comprend des contrôles de sécurité.

- -

Après avoir téléchargé le fichier, vous pouvez le faire glisser et le déposer dans la zone de contenu Firefox, et l'installation devrait commencer.

- -

Vous verrez une fenêtre vous indiquant que vous êtes sur le point d'installer une extension, avec quelques informations supplémentaires telles que le nom de son auteur. Vous verrez un message disant que l'auteur ne peut être vérifié. Seules les extensions signées avec un certificat numérique peuvent être authentifiées. Les extensions signées sont rares, mais nous allons aborder la façon de les signer plus tard.

- -

Cliquez sur le bouton Installer maintenant. Après que l'extension soit installée, il vous sera demandé de redémarrer Firefox. L'installation, la désinstallation, l'activation et la désactivation des modules complémentaires (exceptés les plugins) nécessitent un redémarrage pour terminer, et il n'y a pas d'autre moyen de faire. C'est un point important à garder à l'esprit si vous construisez une extension qui manipule les autres extensions ou des thèmes. Il y a un bug très ancien qui permet de suivre cette question.

- -

Maintenant, après le redémarrage du navigateur, vous verrez la fenêtre du Gestionnaire de modules complémentaires, montrant le nom de l'extension, sa version, et une brève description.

- -

addonman.png

- -

Fermez le Gestionnaire de modules complémentaires. Regardez la fenêtre principale de Firefox et voyez si vous remarquez quelque chose de différent.

- -

L'avez-vous vu ? Il y a un nouveau menu dans la barre de menu principal, intitulé «Hello World!». Si vous ouvrez le menu, puis la sélection du menu surgissant, vous verrez un chouette message d'alerte. Cliquez sur le bouton OK pour le fermer.

- -

- -

C'est tout ce que l'extension fait. Maintenant, nous allons y regarder de plus près.  

- -

Contenus d'une extension

- -

Vous avez peut être remarqué que le fichier de l'extension que vous avez installé est nommé xulschoolhello1.xpi. XPI (prononcez "zippy") est synonyme de d'installeur multi plate-formes (NdT : Cross-Platform Installer), car le même fichier d'installation peut fonctionner sur les principales plates-formes, et c'est le cas pour la plupart des extensions XPI. Les fichiers XPI sont tout simplement des fichiers compressés au format ZIP, mais Firefox les reconnaît comme extension et déclenche le processus d'installation quand un lien XPI est cliqué.

- -

Pour regarder dans le fichier XPI, vous avez besoin de le télécharger d'abord sans l'installer. Si le serveur déclenche une installation en cliquant sur un lien ou sur un bouton, vous devez faire un clic droit sur le lien d'installation, puis cliquez sur l'option Enregistrer le lien sous….

- -

Ensuite, nous allons décompresser le fichier XPI. Une façon de faire est de renommer le fichier afin qu'il ait l'extension zip au lieu de xpi. Une autre façon est d'ouvrir le fichier en utilisant un utilitaire ZIP. La plupart des systèmes d'exploitation dispose d'un utilitaire de compression ZIP, et il existe des outils plus avancés disponibles en ligne. Faites votre choix, et décompressez le fichier dans un emplacement qui vous convient. Vous devriez voir une structure similaire à celle-ci :

- -

xulschoolhello1

- - - -

Le fichier JAR contient la majorité du code, alors nous devrons également en extraire son contenu. Tout comme pour les XPI, vous n'avez besoin que d'un utilitaire ZIP pour décompresser le fichier. Après avoir fait cela, vous aurez quelque chose comme ceci :

- -

xulschoolhello1

- - - -

Cela fait beaucoup de fichiers pour quelque chose de si simple ! Eh bien, rassurez-vous, nous allons bientôt détailler tous ces fichiers et réaliser que c'est assez simple. Dans la section suivante nous allons examiner ces fichiers et voir ce qu'ils font.

- -
-

« PrécédentSuivant »

-
- -

This tutorial was kindly donated to Mozilla by Appcoast.

diff --git a/files/fr/archive/mozilla/xul/window/index.html b/files/fr/archive/mozilla/xul/window/index.html deleted file mode 100644 index 7369e65496..0000000000 --- a/files/fr/archive/mozilla/xul/window/index.html +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: window -slug: Archive/Mozilla/XUL/window -tags: - - Éléments_XUL -translation_of: Archive/Mozilla/XUL/window ---- -
- « Accueil de la référence XUL [ - Exemples | - Attributs | - Propriétés | - Méthodes | - Sujets liés ] -

Décrit la structure d'une fenêtre de premier niveau. Il s'agit du nœud racine d'un document XUL. Forme par défaut une boîte orientée horizontalement. Comme il s'agit d'une boîte, tous les attributs de boîte peuvent être utilisés. Par défaut, la fenêtre aura un cadre spécifique à la plateforme pour l'entourer.

Pour assigner une icône à la fenêtre, créez un fichier d'icône spécifique à la plateforme <windowid>.ico et/ou <windowid>.xpm et placez ou installez ces fichiers dans le répertoire <répertoire-de-mozilla>/chrome/icons/default/. La valeur <windowid> est celle de l'attribut id de la fenêtre. Ceci permet d'avoir une icône différente pour chaque fenêtre. -

Pour les propriétés et méthodes, consultez l'objet XUL Window sur XULPlanet ou sur XULfr . -

D'autres informations sont disponibles dans le tutoriel XUL. -

-
Attributs -
height, hidechrome, id, screenX, screenY, sizemode, title, width, windowtype -
-

Exemples

-
<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<window id="rootWnd" title="Enregistrement en ligne"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <vbox>
-    <hbox>
-      <image src="formulaire_enregistrement.png"/>
-      <description>Enregistrement en ligne</description>
-    </hbox>
-    <groupbox align="start">
-      <caption label="Vos informations"/>
-      <radiogroup>
-        <vbox>
-          <hbox>
-            <label control="your-fname" value="Entrez le prénom :"/>
-            <textbox id="your-fname" value="Johan"/>
-          </hbox>
-          <hbox>
-            <label control="your-lname" value="Entrez le nom de famille :"/>
-            <textbox id="your-lname" value="Hernandez"/>
-          </hbox>
-          <hbox>
-            <button oncommand="alert('enregistrement')">
-              <description>Enregistrer</description>
-            </button>
-          </hbox>
-        </vbox>
-      </radiogroup>
-    </groupbox>
-  </vbox>
-</window>
-
-

Attributs

-

-

- -
height -
Type : chaîne de caractères (représentant un entier) -
La hauteur préférée de l'élément en pixels. La hauteur réellement affichée peut être différentes si l'élément ou son contenu ont une hauteur minimum ou maximum. La propriété CSS height peut également être utilisée. -
- - -
-
- -
hidechrome -
Type : booléen -
Définissez cet attribut à true pour que le chrome, en ce compris la barre de titre, soit caché. -
- - -
-
- -
id -
Type : id d'élément, doit être unique dans la fenêtre -
Un identifiant unique permettant d'identifier l'élément. Celui-ci peut être utilisé comme paramètre pour getElementById() et d'autres fonctions DOM et pour référencer l'élément dans des feuilles de style. -
- - -
-
- -
screenX -
Type : entier -
La position horizontale à laquelle la fenêtre apparaît à l'écran. -
- - -
-
- -
screenY -
Type : entier -
La position verticale à laquelle la fenêtre apparaît à l'écran. -
-


-

- - -
-
- -
sizemode -
Type : une des valeurs ci-dessous -
L'état de la fenêtre (window). Les valeurs suivantes peuvent être utilisées : -
- -


-

- - -
-
- -
title -
Type : chaîne de caractères -
Le texte qui doit apparaître dans la barre de titre de la fenêtre ou boîte de dialogue. -
-


-

- - -
-
- -
width -
Type : chaîne de caractères (représentant un entier) -
La largeur préférée de l'élément. La valeur ne doit pas préciser d'unité car elle est toujours exprimée en pixels. La largeur réellement affichée peut être différente si l'élément ou son contenu ont une largeur minimum ou maximum, ou que la taille est ajustée selon la flexibilité ou l'alignement de son parent. La propriété CSS width peut également être utilisée. -
- - -
-
- -
windowtype -
Type : chaîne de caractères -
Définit une chaîne pouvant être utilisée pour identifier le type de fenêtre. Celle-ci peut être utilisée, par exemple, pour faire la distinction entre une fenêtre de navigation et une fenêtre d'édition. Certaines des fonctions de gestion de fenêtres de Mozilla utilisent cet attribut pour grouper les fenêtres du même type. -
-


-

- - -
- -

Propriétés

- -

Héritées de XUL element
align, , allowEvents, , boxObject, builder, , , , className, , , , , collapsed, contextMenu, controllers, database, datasources, dir, , , flex, height, hidden, id, , , left, , maxHeight, maxWidth, menu, minHeight, minWidth, , , , , , , observes, ordinal, orient, , pack, , persist, , , , ref, resource, , , , , statusText, style, ,, tooltip, tooltipText, top, width

- -

Méthodes

-

-

-

Héritées de XUL element
blur, click, doCommand, focus, getElementsByAttribute

Héritées de DOM element
addEventListener(), appendChild(), dispatchEvent(), getAttribute(), getAttributeNode(), getAttributeNodeNS(), getAttributeNS(), getElementsByTagName(), getElementsByTagNameNS(), hasAttribute(), hasAttributeNS(), hasAttributes(), hasChildNodes(), insertBefore(), isSupported(), normalize(), removeAttribute(), removeAttributeNode(), removeAttributeNS(), removeChild(), removeEventListener(), replaceChild(), setAttribute(), setAttributeNode(), setAttributeNodeNS(), setAttributeNS()

- -

Note

-

Le message d'erreur « XML Parsing Error: undefined entity...<window » peut être provoqué par l'indisponibilité ou l'absence d'un fichier DTD référencé dans le fichier XUL. Le chargement d'un fichier dont le nom suit le mot-clé SYSTEM dans une déclaration DOCTYPE peut échouer silencieusement et le seul message d'erreur sera une erreur d'entité non définie sur l'élément XUL suivant. -

-

Sujets liés

-
Éléments -
dialog, dialogheader -
-

Notes des utilisateurs

-

Pour changer l'icône affichée dans la barre de titre d'une fenêtre, consultez la page Icônes de fenêtre. -

Pour ajouter une icône de site (favicon) à la barre d'adresse et aux onglets de navigation (si le dialogue n'est pas un popup), utilisez l'extrait de code suivant pour utiliser l'espace de noms HTML et l'élément link. -

-
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-	xmlns:html="http://www.w3.org/1999/xhtml">
-
-<!-- Icône du chrome -->
-<html:link rel="icon" href="chrome://monExtension/content/chemin/vers/favicon.png"/>
-
-<!-- Depuis un site distant -->
-<html:link rel="icon" href="http://www.mozilla.org/favicon.ico"/>
-
diff --git a/files/fr/archive/mozilla/xulrunner/astuces_xulrunner/index.html b/files/fr/archive/mozilla/xulrunner/astuces_xulrunner/index.html deleted file mode 100644 index 93ab4c2bcd..0000000000 --- a/files/fr/archive/mozilla/xulrunner/astuces_xulrunner/index.html +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Astuces XULRunner -slug: Archive/Mozilla/XULRunner/Astuces_XULRunner -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/Tips ---- -

XULRunner: Questions Fréquemment Posées. [WIP] -

-

Gestionnaire d'Extensions

-

Pour pouvoir installer des extensions, vous devez d'abord activer le Gestionnaire d'Extensions] dans application.ini. XULRunner 1.8.0 ne charge pas les extensions depuis le dossier de l'application; seul le dossier XULRunner et le dossier du profil de l'utilisateur sont vérifiés. Les préférences suivantes doivent être définies pour faire fonctionner le dialogue XPInstall, le gestionnaire d'extensions et le gestionnaire de thèmes: -

-
pref("xpinstall.dialog.confirm", "chrome://mozapps/content/xpinstall/x...allConfirm.xul");
-pref("xpinstall.dialog.progress.skin", "chrome://mozapps/content/extensions/...ul?type=themes");
-pref("xpinstall.dialog.progress.chrome", "chrome://mozapps/content/extensions/...ype=extensions");
-pref("xpinstall.dialog.progress.type.skin", "Extension:Manager-themes");
-pref("xpinstall.dialog.progress.type.chrome", "Extension:Manager-extensions");
-pref("extensions.update.enabled", true);
-pref("extensions.update.interval", 86400);
-pref("extensions.dss.enabled", false);
-pref("extensions.dss.switchPending", false);
-pref("extensions.ignoreMTimeChanges", false);
-pref("extensions.logging.enabled", false);
-pref("general.skins.selectedSkin", "classic/1.0");
-// NB these point at AMO
-pref("extensions.update.url", "chrome://mozapps/locale/extensions/e...ons.properties");
-pref("extensions.getMoreExtensionsURL", "chrome://mozapps/locale/extensions/e...ons.properties");
-pref("extensions.getMoreThemesURL", "chrome://mozapps/locale/extensions/e...ons.properties");
-
-

URLs Chrome Utiles

-

La plupart requièrent le " branding" -

- -
FenêtreURLType de fenêtre -
Gestionnaire d'Extensions -chrome://mozapps/content/extensions/...ype=extensions -Extension:Manager-extensions -
Gestionnaire de Thèmes -chrome://mozapps/content/extensions/...ul?type=themes -Extension:Manager-themes -
Console JavaScript -chrome://global/content/console.xul -global:console -
about:config -chrome://global/content/config.xul - -
-

Extensions pour le Développeur

-

Venkman

- -
dans votre chrome manifest ajoutez une ligne "skin":
-
-skin communicator classic/1.0 skin/communicator/
-
-ajoutez un dossier de skin "communicator" et une simple CSS nommée "communicator.css" avec ce contenu:
-
-@import url("chrome://global/skin/");
-
-

Inspecteur DOM

-

Idem que Venkman -

-

L'Extension du Developpeur d'Extensions

-

Extension Developer's Extension est un outil utile, avec un Editeur XUL Live et un shell JavaScript. -

Pour installer l'extension dans votre application, vous aurez besoin de modifier son install.rdf (voir ci-dessus). Vous voudrez aussi probablement créer des éléments de menu qui vous laisseront ouvrir le shell Js et les autres outils de cette extension. -

-

Autre méthode

-

Une autre méthode pour faire fonctionner Venkman et EDE [en]sur ce blog -

-

Branding

-

Branding est un packetage chrome qui contient des informations spécifiques au produit (ex: nom, créateur, logo). -

Quelques composants XULRunner (en particulier le Gestionnaire d'Extensions) dépendent du branding car ils cherchent certaines chaines dans <tt>chrome://branding/locale/brand.dtd</tt> et <tt>chrome://branding/locale/brand.properties</tt>. -

Pour satisfaire ces dépendances, vous pouvez copier depuis Firefox <tt>brand.dtd</tt>/<tt>brand.properties</tt> vers <tt>chrome/locale/branding</tt>, les modifier en conséquence, et enregistrer la localisation pour <tt>branding</tt> en ajoutant à votre manifest chrome: -

-
locale branding fr-FR chrome/locale/branding/
-
-

La localisation que vous mettez dans les fichiers de branding n'importe pas du moment que c'est elle qui est présente dans le manifest. -

En addition, un branding content package (traduction requise) doit être enregistré pour inclure le logo de l'application: -

-
content branding chrome/branding
-
-

2 icônes doivent être fournies dans ce dossier: icon48.png and icon64.png. Voir Firefox pour avoir un exemple. -

commentaire copié de la version anglaise: In ''~.mozconfig'': ac_add_options --enable-branding=« branding location » -

-

[Windows] Faire apparaitre correctement le nom et l'icône

-

Par défaut, la barre de tâches de Windows grouppe les fenêtres appartenant au même processus dans un seul bouton pour gagner de la place. ce bouton est souvent appelé "xulrunner.exe" et a l'icône de XULRunner. Il y a deux méthodes pour afficher la bonne dénomination ( = branding) de votre application à la place: -

- -

Lire les arguments en ligne de commande

-

Les arguments en ligne de commande sont gérés par nsICommandLineHandler. -

commentaire copié depuis la version anglaise: = Can i have JavaScript errors / warnings directed to stdout instead of the jsconsole? = See #306263 This doesn't do anything (1.8.0.1): xulrunner -app application.ini -console This neither (1.8.0.1) in ''defaults/preferences/«application name».js'': pref("javascript.options.strict", true); pref("javascript.options.showInConsole", true); pref("browser.dom.window.dump.enabled", true); -


-

-

Préférences requises pour les dialogues de téléchargement

-

Pour utiliser le unknown-content-type et le dialogue file-downloads depuis un élément <browser>, vous devez ajouter les préférences suivantes: -

-
pref("browser.download.useDownloadDir", true);
-pref("browser.download.folderList", 0);
-pref("browser.download.manager.showAlertOnComplete", true);
-pref("browser.download.manager.showAlertInterval", 2000);
-pref("browser.download.manager.retention", 2);
-pref("browser.download.manager.showWhenStarting", true);
-pref("browser.download.manager.useWindow", true);
-pref("browser.download.manager.closeWhenDone", true);
-pref("browser.download.manager.openDelay", 0);
-pref("browser.download.manager.focusWhenStarting", false);
-pref("browser.download.manager.flashCount", 2);
-//
-pref("alerts.slideIncrement", 1);
-pref("alerts.slideIncrementTime", 10);
-pref("alerts.totalOpenTime", 4000);
-pref("alerts.height", 50);
-
-

Si vous en oubliez, vous aurez l'erreur suivante: -

-
Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPrefBranch.getBoolPref]
-
-Error: dialog has no properties
-Source File: chrome://mozapps/content/downloads/u...ontentType.xul
-Line: 1
-
-

Activer le Gestionnaire de Mots de Passe

-

Ces préférences sont par défaut dans Firefox mais pas dans XULRunner. Sans elles, le gestionnaire de mots de passe ne retiendra pas les détails d'identification. -

-
pref("signon.rememberSignons", true);
-pref("signon.expireMasterPassword", false);
-pref("signon.SignonFileName", "signons.txt");
-
-

Vous avez aussi besoin d'obtenir une instance du service login-manager, qui initialise le système en interne: -

-
Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager);
-
-

Utiliser Firefox 3 pour lancer des applications XULRunner

-

Firefox 3 contient le runtime XULRunner avec l'option <tt>-app</tt> en ligne de commandes pour lancer l'application XUL désirée au lieu de Firefox. Par exemple, sous Windows: -

-
  firefox.exe -app chemin\vers\application.ini
-
-

Sous Mac: -

-
  /Applications/Firefox.app/Contents/MacOS/firefox-bin -app /chemin/vers/application.ini
-
-

Notez que sous Mac, vous devez donner un chemin direct. Les chemins relatifs semblent ne pas marcher. -

-

Résolution de problèmes

-

Titre de fenêtre manquant

-

Si le titre de votre <window> XUL est vierge, même en spécifiant un attribut title vérifiez que votre fichier XUL est en <tt>.xul</tt> et non pas <tt>.xml</tt>. -

-
-
diff --git a/files/fr/archive/mozilla/xulrunner/ce_qu'offre_xulrunner/index.html b/files/fr/archive/mozilla/xulrunner/ce_qu'offre_xulrunner/index.html deleted file mode 100644 index 8130eeece0..0000000000 --- a/files/fr/archive/mozilla/xulrunner/ce_qu'offre_xulrunner/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Ce qu'offre XULRunner -slug: Archive/Mozilla/XULRunner/Ce_qu'offre_XULRunner -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/What_XULRunner_Provides ---- -

 

-

L'objectif de XULRunner est d'offrir une solution pour le déploiement d'applications XUL (en priorité Firefox et Thunderbird), ainsi qu'un mécanisme pour embarquer les capacités des produits Mozilla dans d'autres applications. Les fonctionnalités suivantes sont soit déjà implémentées, soit planifiées :

-

 

-

Fonctionnalités Gecko

- -

Fonctionnalités d'interface utilisateur

-

Les interfaces utilisateur suivantes sont fournies par XULRunner, mais peuvent être outrepassées dans certaines circonstances :

- -

APIs embarquées

-

Les APIs embarquées suivantes sont fournies par XULRunner :

- -

En projet

-

Les fonctionnalités suivantes ont été proposées à l'intégration et pourront l'être si les développeurs en ont le temps, et si la taille du code est raisonnable :

- -

Non supporté

-

XULRunner n'intégrera pas :

- -


- Interwiki Language Links

-

diff --git "a/files/fr/archive/mozilla/xulrunner/d\303\251ploiement_de_xulrunner_1.8/index.html" "b/files/fr/archive/mozilla/xulrunner/d\303\251ploiement_de_xulrunner_1.8/index.html" deleted file mode 100644 index d2e38696e4..0000000000 --- "a/files/fr/archive/mozilla/xulrunner/d\303\251ploiement_de_xulrunner_1.8/index.html" +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Déploiement de XULRunner 1.8 -slug: Archive/Mozilla/XULRunner/Déploiement_de_XULRunner_1.8 -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/Deploying_XULRunner ---- -

XULRunner 1.8 est une pré-version stable pour les développeurs. Cela signifie que même si certaines parties de cette version ne sont pas finalisées, comme le déploiement, l'intégration à d'autres applications et au système d'exploitation, elle peut déjà servir aux développeurs pour la création d'applications XUL autonomes. Ce document explique comme ce déploiement doit être réalisé.

-

Windows

-

Sous Windows, XULRunner ne dispose pas encore de solution d'installation intégrée ; les développeurs d'applications doivent utiliser des solutions existantes pour disposer d'un installeur Windows. Les fichiers installés doivent être disposés selon la structure de répertoires suivante :

- -

Mac OS X

-

Sous Mac OS X, l'ensemble du framework de XULRunner est placé dans le paquetage de votre application :

- -

De plus, votre application Mac ne se lancera pas sans un fichier - - Info.plist - valide. En voici un exemple :

-
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>xulrunner</string>
-	<key>CFBundleGetInfoString</key>
-	<string>1.0</string>
-	<key>CFBundleIconFile</key>
-	<string>app_icon.icns</string>
-	<key>CFBundleIdentifier</key>
-	<string>net.yourcompany.yourapplication</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>applicationName</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>YOURAPP</string>
-	<key>CFBundleURLTypes</key>
-	<array>
-		<dict>
-			<key>CFBundleURLIconFile</key>
-			<string>app_icon.icns</string>
-			<key>CFBundleURLName</key>
-			<string>YOURAPP Entity</string>
-			<key>CFBundleURLSchemes</key>
-			<array>
-				<string>chrome</string>
-			</array>
-		</dict>
-	</array>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-</dict>
-</plist>
-

Éditez cet exemple selon vos besoins, mais CFBundleExecutable doit être - - xulrunner - , et CFBundleIconFile et CFBundleURLIconFile doivent être définis avec le nom de fichier de l'icône de votre application ( - - app_icon.icns - ).

-

Linux

-

La plupart des applications Linux sont distribuées comme de simples archives .tar.bz2 que l'utilisateur peut décompresser où il le désire. L'archive doit être structurée comme ceci :

- diff --git a/files/fr/archive/mozilla/xulrunner/empaqueter_une_application_xul/index.html b/files/fr/archive/mozilla/xulrunner/empaqueter_une_application_xul/index.html deleted file mode 100644 index 4efbb6183f..0000000000 --- a/files/fr/archive/mozilla/xulrunner/empaqueter_une_application_xul/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Empaqueter une application XUL -slug: Archive/Mozilla/XULRunner/Empaqueter_une_application_XUL -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/XUL_Application_Packaging ---- -

Les paquets d'application XULRunner sont des paquets standard du toolkit (comme les extensions Firefox), avec un fichier manifest en plus (application.ini) qui décrit l'application. Les paquets d'application sont généralement compressées au format zip dans une archive avec l'extension .xulapp ou .xpi. Ils peuvent être installés avec la ligne de commande XULRunner "-install-app" (voir les Notes de versions de XULRunner 1.8.0.4 (à traduire de en:XULRunner_1.8.0.4_Release_Notes)).

- -

application.ini

- -

Le fichier manifest application.ini se trouve à la racine de le l'extension et fournit les metadonnées pour permettre au XULRunner de lancer correctement l'application. Il est analysé comme un fichier style INI windows avec le couple 'Headings' et Key=Value. Les lignes commençant par ; ou # sont traités comme des commentaires.

- -

Vous pouvez trouver un exemple de application.ini dans le code source de Mozilla.

- -

Section [App]

- -

La partie App spécifie les metadonnées sur l'application

- -
-
Name
-
Indique le nom de l'application.
- REQUIS
- Exemple : Name=TestApplication
-
Version
-
Indique la version de l'application
- REQUIS
- Voir Format de version du toolkit pour les détails sur le numérotage des versions
- Exemple : Version=0.1
-
BuildID
-
Indique un identifiant de compilation unique. Il s'agit généralement d'un identifiant temporel, devrait être différent pour chaque version publiée de l'application.
- REQUIS
- Exemple : BuildID=20060201
-
ID
-
Spécifie un l'identifiant unique de l'application
- REQUIS
- L'ID de l'application, comme les IDs d'extensions, peuvent être formés soit comme un email ApplicationName@vendor.tld ou comme un UUID (Universal Unique Identifier) {12345678-1234-1234-1234-123456789abc}. Le format email est préférable pour les nouveaux développements d'application.
- Exemple: ID=TestApplication@example.tld
-
Vendor
-
Indique le vendeur de l'application
- OPTIONNEL
- Exemple : Vendor=Grinch Productions
-
- -

Section [Gecko]

- -

La partie Gecko spécifie quelle version de XULRunner est requise par l'application.

- -
-
MinVersion
-
Indique la version minimale de XULRunner requise pour l'application.
- REQUIS
- Exemple : MinVersion=1.8
-
MaxVersion
-
Indique la version maximum de XULRunner dont l'application à besoin.
- OPTIONNEL - la valeur par défaut correspond à n'importe quelle version de XULRunner inférieure à XULRunner 2
- Exemple : MaxVersion=1.8.0.*
-
- -

Section [XRE]

- -

La section XRE spécifie diverses caractéristiques possibles du démarrage de XULRunner.

- -
-
EnableExtensionManager
-
Spécifie si les extensions sont activées. Il peut prendre la valeur 1 ou 0.
- OPTIONNEL - La valeur par défaut est 0
- Exemple : EnableExtensionManager=1
-
EnableProfileMigrator</dt>
-
Spécifie si, quand l'application est lancée pour la première fois et qu'il n'y a pas de profils, le code de migration de profil doit être activé par l'interface nsIProfileMigrator. Les valeurs possibles sont 1 et 0.
- OPTIONNEL - La valeur par défaut est 0
- Exemple : EnableProfileMigrator=1
-
diff --git a/files/fr/archive/mozilla/xulrunner/faq_de_xulrunner/index.html b/files/fr/archive/mozilla/xulrunner/faq_de_xulrunner/index.html deleted file mode 100644 index e803a9af7a..0000000000 --- a/files/fr/archive/mozilla/xulrunner/faq_de_xulrunner/index.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: FAQ de XULRunner -slug: Archive/Mozilla/XULRunner/FAQ_de_XULRunner -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/FAQ ---- -

 

-

Cette page a pour but de répondre à des questions fréquemment posées et de corriger des idées fausses courantes sur XULRunner.

-
Est-ce que XULRunner est un navigateur ?
Non. Vous pouvez utiliser XULRunner pour créer un navigateur (exemple mybrowser ou Firefox), mais il n'existe pas (et n'existera jamais) de « navigateur XULRunner ».
-
-
Est-ce que XULRunner est un outil de développement ?
Pas particulièrement ; XULRunner est une technologie de moteur d'exécution Internet. XULRunner peut servir à créer des outils de développement (le framework toolkit AJAX par exemple). À l'avenir, des kits de développement XULRunner seront proposés avec divers outils de développement.
-
-
Comment comparer XULRunner à d'autres moteurs d'exécution comme Java ou .NET (ou Python ou ...) ?
Le but de XULRunner est de faciliter le développement et le déploiement d'applications Internet. Il n'est pas destiné à être un environnement d'exécution universel ; ceci permet à XULRunner de rester compact et d'offrir une stratégie de déploiement plus simple que les environnements génériques.
-
-
Si j'utilise XULRunner, dois-je écrire mes applications en XUL ?
Non ! Vous pouvez écrire votre application dans n'importe quel langage supporté par la plateforme Web de Mozilla, dont HTML, XHTML, SVG, or XUL.
-
-
Pourquoi est-il appelé XULRunner, plutôt que HTMLRunner ou quelque chose de ce genre ?
Le nom n'est pas arrêté. D'autres noms peuvent être proposés au développeur en chef Benjamin Smedberg.
-
-
Quand Firefox sera-t-il basé sur XULRunner ?
Consultez la feuille de route de XULRunner. C'est prévu pour Firefox 3 (et XULRunner 1.9) vers la fin 2007.
-
-

diff --git "a/files/fr/archive/mozilla/xulrunner/floril\303\250ge_des_applications_xulrunner/index.html" "b/files/fr/archive/mozilla/xulrunner/floril\303\250ge_des_applications_xulrunner/index.html" deleted file mode 100644 index d95b17e186..0000000000 --- "a/files/fr/archive/mozilla/xulrunner/floril\303\250ge_des_applications_xulrunner/index.html" +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Florilège des applications XULrunner -slug: Archive/Mozilla/XULRunner/Florilège_des_applications_XULrunner -tags: - - Entreprise - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/Hall_of_Fame ---- -

Cette page liste les applications XULRunner existantes.

-

Applications XULRunner

-
ChatZilla
Une version autonome du client IRC ChatZilla.
-
-
Clines
Un clone de Color Lines (jeu)
-
-
CocoaPSYC.app
Un client IM/Chat PSYC pour Mac OS X (également disponible en extension pour Firefox).
-
-
Convertigo Enterprise Mashup Server
Un outil pour intégrer des applications WEB sous forme de services Web SOAP ou pour les « clippers » afin de construire des « mashups » en entreprise.
-
-
DAIM
Un superbe outil d'analyse d'images, utilisant une bibliothèque d'images professionnelle.
-
-
eMusic Remote
Le gestionnaire de téléchargement pour la plate-forme eMusic.
-
-
Evergreen - Staff Client
Evergreen est une bibliothèque système libre.
-
-
FindThatFont!
Outil de gestion de fonte pour Microsoft Windows et Linux, qui permet de rechercher une fonte particulière.
-
-
GencatRss
Un gestionnaire de flux RSS.
-
-
Google AdWords Editor
AdWords Editor est une application locale de gestion des comptes Google.
-
-
IDA
Système de publication E-Learning pour créer facilement des applications d'apprentissage sur le Web.
-
-
Joost (précédemment dénommé The Venice Project)
Un application TV Internet. La compagnie aim veut combiner le meilleur des fonctionnalités de la télévision avec celles d'Internet.
Kiwix
Une application pour avoir accès à Wikipédia, où encore à la document d'Ubuntu, hors-ligne.
-
-
Kirix Strata
Un nouveau navigateur spécialise pour accéder et manipuler des données à partir du Web.
-
-
Lotus Notes / Sametime
Les dernières version de Lotus Notes et de Sametime d'IBM peuvent embarquées des applications XUL.
-
-
Mango
Un client Jabber.
-
-
Miro
Lecteur et navigateur TV sur Internet.
-
-
Plain Old Webserver
Un serveur Web pleinement fonctionnel qui exécute du code JavaScript côté serveur.
-
-
Songbird
Un lecteur audio.
-
-
TeleKast
TeleKast fournit des éditeurs de scripts, de documents Web et de kiosk. Il comprend aussi un téléprompteur. Le téléprompteur, éditeur de documents Web et kiosk utilisent des scripts permettant de communiquer facilement.
-
-
TomTom HOME 2
Application PC pour gérer les périphériques GPS TomTom.
-
-
WengoPhone
Un client IM/VoIP basé sur SIP/XMPP.
Yoono Desktop
Application PC/Mac pour gérer et suivre vos réseaux sociaux et vos messageries instantanées (support de : Facebook, Twitter, MySpace, FriendFeed, Flickr, iMeem, MSN Live Messenger, Yahoo Messenger, AIM, GTalk).
-
-
Embed XULRunner in Java
-
-

Utilitaires / Prototypes

-
Exemples XULRunner de Benjamin
« mybrowser est un exemple de navigateur simple », xulmine
-
-
30b
Un wrapper à base de XULRunner pour 30boxes.com
-
-
AJAX Toolkit Framework (ATF)
A part of the Eclipse Web Tools Platform (WTP)
-
-
Crowbar
Un environnement Web simplifié basé sur l'utilisation d'un navigateur basé sur Mozilla côté serveur.
-
-
Exch
Un outil de conversion des devises utilisant des données mises à jour depuis le site http://finance.yahoo.com/currency. Vous pouvez utiliser l'extension Firefox ou la version autonome.
-
-
Foxkeh Clock (ja)
Une horlage mettant en scène le personnage Foxkeh.
-
-
Visualiseur OpenDocument
Visualiseur de documents OpenDocument multiplate-forme.
-
-
SVGclock
Une horloge en SVG.
-
-
TaskPool
TaskPool est une petite application de gestion du temps. Elle vous permet d'ajouter des tâches à une liste de chose à faire, de les activer ou de les désactiver, et elle décomptera les secondes.
-
-
XUL Explorer
« Un IDE XUL légère… un moyen facile et rapide de développer avec XUL »
-
-
Prims (précédemment WebRunner)
Un navigateur spécifique à un site en particulier. Il permet de lancer une application Web telle que Gmail dans un processus indépendant de celui du navigateur.
-
-

diff --git a/files/fr/archive/mozilla/xulrunner/index.html b/files/fr/archive/mozilla/xulrunner/index.html deleted file mode 100644 index 4f72cf88ec..0000000000 --- a/files/fr/archive/mozilla/xulrunner/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: XULRunner -slug: Archive/Mozilla/XULRunner -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner ---- -
XULRunner tutorial
-Une courte introduction à XULRunner.
- -
XULRunner est un environnement d'exécution installable pouvant gérer des applications XUL+XPCOM aussi riches que Firefox et Thunderbird. Il fournit des mécanismes permettant d'installer, de mettre à jour et de désinstaller des applications. XULRunner fournira également libxul, une solution permettant d'embarquer les technologies Mozilla dans d'autres projets et produits.
- - - - - - - - -
-

Téléchargements

- -
-

XULRunner est disponible sur ftp.mozilla.org. Veuillez consulter les notes de version pour l'installation, la désinstallation et d'autres informations.

- -

Firefox 3 est distribué avec un paquet XULRunner privé, qui peut exécuter toute application compatible XULRunner à l'aide du paramètre de commande -app.

- -

Des versions plus anciennes sont également disponibles.

-
- -

Aperçu

- - - -

Documentation

- -
-
Guide XULRunner
-
Une introduction assez complète et un tutoriel pour XULRunner qui regroupe la plupart des informations disponibles ici.
-
- -
-
Exemples d'applications
-
Quelques exemples simples d'applications XULRunner qui peuvent être copiés.
-
- -
-
A XULRunner Tutorial
-
Une courte introduction à XULRunner.
-
- -
-
Astuces XULRunner
-
Une collection d'astuces pour travailler avec XULRunner.
-
- -
-
Déploiement de XULRunner
-
Cet article décrit comment déployer des applications autonomes XUL dans un environnement de production.
-
- -
-
Florilège des applications XULrunner
-
Suivi des applications disponibles basées sur XULRunner.
-
- -
-
Documentation sur la compilation
-
Découvrez comment obtenir le code source et le compiler.
-
- -
-
 
-
Étapes de configuration de Venkman pour déboguer votre application.
-
- -
-
Documentation de débogage
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

- - - -

Sujets liés

- -
-
XUL
-
-
- -

Categories

- -

Interwiki Language Links

diff --git a/files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.8.0.4/index.html b/files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.8.0.4/index.html deleted file mode 100644 index 83087ff904..0000000000 --- a/files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.8.0.4/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Notes de versions de XULRunner 1.8.0.4 -slug: Archive/Mozilla/XULRunner/Notes_de_versions_de_XULRunner_1.8.0.4 -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/1.8.0.4 ---- -

XULRunner 1.8.0.4 est une version stable pour les développeurs de l'environnement d'éxécution Mozilla XULRunner. Il remplace la version 1.8.0.1 ; tous les utilisateurs devraient mettre à jour leur version. Il permet de lancer des applications XUL autonomes, et d'embarquer des API qui permettent d'avoir un rendu de pages Web dans des applications natives ou Java. -

-

Configuration système minimum

-

Avant installation, vérifiez que votre ordinateur répond aux exigences système minimales (en). Ces exigences sont les mêmes pour XULRunner et pour Firefox. -

-

Installation de XULRunner

-

Mozilla propose XULRunner pour Windows, Mac OS X et Linux, uniquement en anglais : -

- -

Frenchmozilla propose sur son site une version française de XULRunner 1.8.0.4 pour ces trois plateformes. -

-

Windows

- -

Mac OS X

- -

Linux

- -

Désinstallation de XULRunner

-

Windows/Linux

- -

Mac OS X

-

Si vous disposez de plusieurs versions installées de XULRunner sous Mac OS X, il n'est pas possible d'en désinstaller une seule. -

- -

Installation d'applications XUL

-

Les applications XUL peuvent être obtenues de différentes sources, et sont habituellement livrées sous forme d'archive ZIP portant une extension <tt>.xulapp</tt> ou <tt>.xpi</tt>. Quelques applications sont disponibles depuis le Mozilla Developer Center. -

- -

Windows

-

Lancez la commande suivantes depuis Menu > Exécutez ou depuis une invite de commande : -

-
"C:\Program Files\Mozilla XULRunner\1.8.0.4\xulrunner\xulrunner.exe" --install-app "C:\Documents and Settings\nomUtilisateur\Bureau\monApplication.xpi"
-
-

L'application sera installée dans <tt>C:\Program Files\NomVendeur\NomApplication</tt> -

-

Mac OS X

-

Lancez la commande suivante dans une invite de commande : -

-
/Library/Frameworks/XUL.framework/xulrunner-bin --install-app ~/Bureau/monApplication.xpi
-
-

L'application sera installée dans <tt>/Applications/nomVendeur/nomApplication</tt> -

-

Linux

-

Lancez la commande suivante dans une invite de commande : -

-
/opt/xulrunner/1.8.0.4/xulrunner/xulrunner --install-app ~/Desktop/monApplication.xpi
-
-

L'application sera installée dans <tt>/usr/lib/nomVendeur/nomApplication</tt> -

-

Problèmes connus

- -

Foires aux questions

-

-
Pourquoi l'installation de XULRunner est-il aussi pénible ? Pourquoi n'y a-t-il pas un joli installeur ? -
Parce que personne n'en a encore écrit le code ! Il s'agit d'une version préalable pour les développeurs : des fonctionnalités supplémentaires pour l'installation et le déploiement de XULRunner et des applications basées sur XULRunner seront disponibles dans les futures versions. -

J'ai écrit une application XUL, comment puis-je la déployer chez mes utilisateurs ? -
Pour l'instant, Mozilla recommande que XULRunner soit déployé individuellement avec chaque application. Consultez Déploiement de XULRunner 1.8 pour plus d'information. -

Où est le code source ? -
Ici. -

Je pense avoir trouvé un bogue, comment puis-je le signaler ? -
bugzilla.mozilla.org sert à traquer les bogues de tous les produits Mozilla. Assurez-vous s'il vous plait que votre bogue n'est pas déjà connu avant de le poster, en utilisant la fonction de recherche. -

Comment puis-je aider ? -
Si vous souhaitez participer à XULRunner sans savoir par où débuter, visitez la page XULRunner:Communauté et posez vos questions sur les newsgroups ou sur le canal IRC. -
-

Interwiki Language Links -

-
-
diff --git a/files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.9/index.html b/files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.9/index.html deleted file mode 100644 index 3e2e5b6e1b..0000000000 --- a/files/fr/archive/mozilla/xulrunner/notes_de_versions_de_xulrunner_1.9/index.html +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Notes de versions de XULRunner 1.9 -slug: Archive/Mozilla/XULRunner/Notes_de_versions_de_XULRunner_1.9 -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/1.9 ---- -

XULRunner 1.9 est uneversion stable de l'environnement d'exécution Mozilla XULRunner. Il remplace la version 1.8.0.4 ; tous les utilisateurs devraient mettre à jour leur version. Il permet de lancer des applications XUL autonomes, et d'embarquer des API qui permettent d'avoir un rendu de pages Web dans des applications natives ou Java. XULRunner 1.9 est basé sur les mêmes sources que Firefox 3.

- -

Configuration système minimum

- -

Avant installation, vérifiez que votre ordinateur répond aux exigences système minimales (en). Ces exigences sont les mêmes pour XULRunner et pour Firefox.

- -

Installation de XULRunner

- -

Mozilla propose XULRunner pour Windows, Mac OS X et Linux, uniquement en anglais :

- - - -

Frenchmozilla propose sur son site une version française de XULRunner 1.9 pour ces trois plateformes.

- -

Windows

- - - -

Mac OS X

- - - -

Linux

- - - -

Désinstallation de XULRunner

- -

Windows/Linux

- - - -

Mac OS X

- -

Si vous disposez de plusieurs versions installées de XULRunner sous Mac OS X, il n'est pas possible d'en désinstaller une seule.

- - - -

Installation d'applications XUL

- -

Les applications XUL peuvent être obtenues de différentes sources, et sont habituellement livrées sous forme d'archive ZIP portant une extension .xulapp ou .xpi. Quelques applications sont disponibles depuis le Mozilla Developer Center.

- - - -

Windows

- -

Lancez la commande suivantes depuis le menuDémarrer → Exécuter ou depuis une invite de commandes :

- -
"C:\Program Files\Mozilla XULRunner\1.9\xulrunner\xulrunner.exe" --install-app "C:\Documents and Settings\nomUtilisateur\Bureau\monApplication.xpi"
-
- -

L'application sera installée dans C:\Program Files\NomVendeur\NomApplication

- -

Mac OS X

- -

Lancez la commande suivante dans une invite de commandes :

- -
/Library/Frameworks/XUL.framework/xulrunner-bin --install-app ~/Bureau/monApplication.xpi
-
- -

L'application sera installée dans /Applications/nomVendeur/nomApplication

- -

Linux

- -

Lancez la commande suivante dans une invite de commandes :

- -
/opt/xulrunner/1.9/xulrunner/xulrunner --install-app ~/Desktop/monApplication.xpi
-
- -

L'application sera installée dans /usr/lib/nomVendeur/nomApplication

- -

Problèmes connus

- - - -

Foire aux questions

- -

 

- -
-
Pourquoi l'installation de XULRunner est-elle aussi pénible ? Pourquoi n'y a-t-il pas un joli installeur ?
-
Parce que personne n'en a encore écrit le code ! Des fonctionnalités supplémentaires pour l'installation et le déploiement de XULRunner et des applications basées sur XULRunner seront disponibles dans les futures versions. -

 

-
-
J'ai écrit une application XUL, comment puis-je la déployer chez mes utilisateurs ?
-
Pour l'instant, Mozilla recommande que XULRunner soit déployé individuellement avec chaque application. Consultez Déploiement de XULRunner pour plus d'informations. -

 

-
-
Où est le code source ?
-
Ici. -

 

-
-
Où est le SDK ?
-
Là. -

 

-
-
Je pense avoir trouvé un bogue, comment puis-je le signaler ?
-
bugzilla.mozilla.org sert à traquer les bogues de tous les produits Mozilla. Assurez-vous s'il vous plait que votre bogue n'est pas déjà connu avant de le poster, en utilisant la fonction de recherche. -

 

-
-
Comment puis-je aider ?
-
Si vous souhaitez participer à XULRunner sans savoir par où débuter, visitez la page XULRunner:Communauté et posez vos questions sur les newsgroups ou sur le canal IRC.
-
- -
 
- -

diff --git a/files/fr/archive/mozilla/xulrunner/xulrunner_anciennes_versions/index.html b/files/fr/archive/mozilla/xulrunner/xulrunner_anciennes_versions/index.html deleted file mode 100644 index afd9b3fd26..0000000000 --- a/files/fr/archive/mozilla/xulrunner/xulrunner_anciennes_versions/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: XULRunner/Anciennes versions -slug: Archive/Mozilla/XULRunner/XULRunner_Anciennes_versions -tags: - - XUL - - XULRunner -translation_of: Archive/Mozilla/XULRunner/Old_releases ---- -
-
- Compilations nocturnes de XULRunner 1.9.0.x
-
- Ces compilations sont effectués depuis la branche stable 1.9.
-
-
-
- Compilations contribuées par la communauté de XULRunner 1.8.1.3
-
- Ces compilations sont fournies par la communauté Eclipse ATF et sont prévues pour l'intégration dans d'autres produits (embedding). Les compilations Windows et Linux pourront exécuter des applications XULRunner normales, mais la version Mac utilise des widgets Cocoa et ne pourra donc pas lancer d'applications XULRunner.
-
-
-
- XULRunner 1.8.0.4
-
- Il s'agit de la dernière version de démonstration stable pour développeurs de la branche 1.8.0. Elle comporte des trous de sécurité connus et ne devrait pas être utilisée dans des applications traitant du contenu Web public.
-
diff --git a/files/fr/archive/plugins/reference/index.html b/files/fr/archive/plugins/reference/index.html deleted file mode 100644 index b50c0e6643..0000000000 --- a/files/fr/archive/plugins/reference/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: NPAPI plugin reference -slug: Archive/Plugins/Reference -tags: - - Deprecated - - Landing - - NPAPI - - Plugins - - Reference - - TopicStub -translation_of: Archive/Plugins/Reference ---- -

{{deprecated_header}}

- -

Les articles ci-dessous décrivent chacune des API liées aux plugins NPAPI.

- -

{{LandingPageListSubpages}}

diff --git a/files/fr/archive/rss/autres_ressources/index.html b/files/fr/archive/rss/autres_ressources/index.html deleted file mode 100644 index 3b45e58d8f..0000000000 --- a/files/fr/archive/rss/autres_ressources/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Autres ressources -slug: Archive/RSS/Autres_ressources -tags: - - RSS -translation_of: Archive/RSS/Other_Resources ---- -

 

-

Toutes les autres ressources

- diff --git "a/files/fr/archive/rss/entit\303\251s/index.html" "b/files/fr/archive/rss/entit\303\251s/index.html" deleted file mode 100644 index 3b0e56f201..0000000000 --- "a/files/fr/archive/rss/entit\303\251s/index.html" +++ /dev/null @@ -1,1379 +0,0 @@ ---- -title: Entités -slug: Archive/RSS/Entités -tags: - - RSS - - 'RSS:Références' -translation_of: Archive/RSS/Entity_list ---- -

Liste des entités RSS

- -
-

NOTE: Il existe trois versions différentes incompatibles de RSS 0.91. Il y a Netscape RSS 0.91 (Révision 1) (N 0.91 R1), Netscape RSS 0.91 Révision 3 (N 0.91 R3) et Userland RSS 0.91 (U 0.91). Netscape RSS 0.91 utilise un DTD définissant les 96 entités supplémentaires (Userland RSS 0.91 n'utilise pas cette DTD).

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EntityDecimalCharacterRSS Version
0.90N 0.91 R1N 0.91 R3U 0.910.920.930.941.02.0
á#á    ? 
Á#Á    ? 
´#´    ? 
â#â    ? 
Â#    ? 
æ#æ    ? 
Æ#Æ    ? 
à#à    ? 
À#À    ? 
å#å    ? 
Å#Å    ? 
ã#ã    ? 
Ã#à   ? 
ä#ä    ? 
Ä#Ä    ? 
¦¦¦    ? 
ç#ç    ? 
Ç#Ç    ? 
¸#¸    ? 
¢¢¢    ? 
©#©    ? 
¤¤¤    ? 
°#°    ? 
÷#÷    ? 
é#é    ? 
É#É    ? 
ê#ê    ? 
Ê#Ê    ? 
è#è    ? 
È#È    ? 
ð#ð    ? 
Ð#Р   ? 
ë#ë    ? 
Ë#Ë    ? 
½#½    ? 
¼#¼    ? 
¾#¾    ? 
í#í    ? 
Í#Í    ? 
î#î    ? 
Î#Π   ? 
¡¡¡    ? 
ì#ì    ? 
Ì#Ì    ? 
¿#¿    ? 
ï#ï    ? 
Ï#Ï    ? 
«#«    ? 
¯#¯    ? 
µ#µ    ? 
·#·    ? 
       ? 
¬#¬    ? 
ñ#ñ    ? 
Ñ#Ñ    ? 
ó#ó    ? 
Ó#Ó    ? 
ô#ô    ? 
Ô#Ô    ? 
ò#ò    ? 
Ò#Ò    ? 
ª#ª    ? 
º#º    ? 
ø#ø    ? 
Ø#Ø    ? 
õ#õ    ? 
Õ#Õ    ? 
ö#ö    ? 
Ö#Ö    ? 
#    ? 
£££    ? 
±#±    ? 
»#»    ? 
®#®    ? 
§#§    ? 
­#­    ? 
¹#¹    ? 
²#²    ? 
³#³    ? 
ß#ß    ? 
þ#þ    ? 
Þ#Þ    ? 
×#×    ? 
ú#ú    ? 
Ú#Ú    ? 
û#û    ? 
Û#Û    ? 
ù#ù    ? 
Ù#Ù    ? 
¨#¨    ? 
ü#ü    ? 
Ü#Ü    ? 
ý#ý    ? 
Ý#Ý    ? 
¥¥¥    ? 
ÿ#ÿ    ? 
diff --git a/files/fr/archive/rss/index.html b/files/fr/archive/rss/index.html deleted file mode 100644 index 4c298461f8..0000000000 --- a/files/fr/archive/rss/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: RSS -slug: Archive/RSS -tags: - - RSS -translation_of: Archive/RSS ---- -
Premiers pas
-Ce tutoriel vous guidera pour débuter avec RSS.
- -
RSS (Really Simple Syndication) est un format de données populaire similaire à HTML, basé sur XML et utilisé pour la syndication. RSS a une histoire compliquée et il existe une multitude de versions différentes et incompatibles. (Certaines sont basées sur RDF, mais la plupart utilisent seulement XML) Malgré cela, RSS est aujourd'hui un format très répandu, utilisé pour le suivi d'actualités, de blogs, de radios et de télévisions.
- -

 

- - - - - - - - -
-

Documentation

- -
-
Comptage de vos commentaires avec le module RSS Slash
-
Charles Iliya Krempeaux présente le module RSS Slash, explique pourquoi il est si populaire chez certains et montre comment il sert à compter vos commentaires (à traduire de Why RSS Slash is Popular - Counting Your Comments).
-
- -
-
Lier vers vos commentaires avec le module RSS Well-Formed Web
-
Charles Iliya Krempeaux présente le module RSS Well-Formed Web, explique pourquoi il est si populaire chez certains et montre comment il sert à lier vos commentaires (à traduire de Why Well-Formed Web RSS Module is Popular - Syndicating Your Comments).
-
- -
-
The Myth of RSS Compatibility
-
Mark Pilgrim évoque l'histoire chronologique du RSS et détaille les incompatibilités entre chaque version.
-
- -
-
Atomic RSS
-
Tim Bray explique comment utiliser Atom 1.0 comme micro format et module d'extension pour RSS 2.0 ; en conservant RSS 2.0 pour votre format de syndication mais en y apportant certains éléments d'Atom 1.0.
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Voir les forums XML de Mozilla…
  • -
- -

- - - -
-
RDF, XML
-
-
- -

Catégories

- -

Interwiki Language Links

diff --git a/files/fr/archive/rss/premiers_pas/fonctionnement_de_rss/index.html b/files/fr/archive/rss/premiers_pas/fonctionnement_de_rss/index.html deleted file mode 100644 index d6d8601ddc..0000000000 --- a/files/fr/archive/rss/premiers_pas/fonctionnement_de_rss/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Fonctionnement de RSS -slug: Archive/RSS/Premiers_pas/Fonctionnement_de_RSS -tags: - - Premiers_pas - - RSS - - 'RSS:Premiers_pas' -translation_of: Archive/RSS/Getting_Started/How_RSS_Works ---- -

Cette page explique le fonctionnement de RSS. Vous ne créerez pas encore vos propres fichiers RSS, mais vous découvrirez les différents systèmes qui entrent en jeu lors de la syndication RSS.

- -

Fonctionnement de RSS

- -

Deux composants principaux entrent en jeu dans la syndication avec RSS : le côtéserveur et le côtéclient.

- -

Le côtéserveur de la syndication RSS est la partie du système qui produit le flux RSS. Un site d'actualité, une radio ou TV IP se trouvent par exemple du côtéserveur de la syndication.

- -

Le côtéclient de la syndication RSS est la partie du système qui consomme le flux RSS. Le navigateur Mozilla Firefox, un agrégateur RSS de bureau ou un site d'agrégation se trouvent donc du côtéclient de la syndication.
-

-

« PrécédentSuivant »

-

diff --git a/files/fr/archive/rss/premiers_pas/index.html b/files/fr/archive/rss/premiers_pas/index.html deleted file mode 100644 index 6ea56e5dbf..0000000000 --- a/files/fr/archive/rss/premiers_pas/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Premiers pas -slug: Archive/RSS/Premiers_pas -tags: - - Aide_pour_les_éditeurs_de_MDC - - Premiers_pas - - RSS - - 'RSS:Premiers_pas' - - Traduction_en_cours -translation_of: Archive/RSS/Getting_Started ---- -

-

-

Introduction

-

Ce tutoriel est une introduction à la Really Simple Syndication (RSS). -

Il vous guidera pas à pas à travers les bases de RSS à l'aide d'exemples fonctionnels visibles en action. Ce tutoriel suit la philosophie selon laquelle la meilleure manière d'apprendre est de faire. C'est pourquoi vous créerez vos propres fichiers RSS à la main. -

-

À qui est destiné ce tutoriel

-

Ce tutoriel s'adresse surtout aux débutants (c'est-à-dire, ceux qui n'ont que peu ou aucune expérience de RSS). Cependant, ceux qui ont une certaine expérience de RSS peuvent également le trouver utile pour découvrir des informations qu'ils ne connaissaient pas, ou simplement pour se rafraichir la mémoire. -

Ce tutoriel suppose que vous avez une certaine expérience de HTML (ou XML). Que vous connaissez les bases du balisage. En d'autres mots, que ce code vous semble familier : -

-
   Ceci est un morceau de texte avec une balise <b>en gras</b>.
-
-

Si cela ne vous pose pas de problème, vous ne devriez pas en avoir non plus avec l'apprentissage de RSS. -

-
-

NOTE : Si vous n'êtes PAS un développeur Web et ne désirez pas en devenir un, ce tutoriel n'est PAS pour vous. Vous devez être capable de créer un balisage pour utiliser convenablement ce tutoriel. -

-
-

Avant de commencer

-

Pour obtenir le maximum de ce tutoriel, vous aurez besoin d'un éditeur de texte et d'un lecteur RSS. Vous devez également savoir utiliser l'un et l'autre. -

-
-

NOTE : Un traitement de texte n'est pas un éditeur de texte. Si vous utilisez un traitement de texte, vous devez vous assurer qu'il enregistre vos fichiers RSS dans un format texte uniquement (pur et simple). -

-
-

Il n'est pas obligatoire de créer les fichier RSS de ce tutoriel, vous pouvez simplement le parcourir, mais c'est une manière moins efficace d'apprendre. Vous retiendrez mieux les informations si vous créez les fichiers RSS vous-même. -

-

Utilisation de ce tutoriel

-

Bien que chaque page de ce tutoriel aie été écrite de manière à former un petit tutoriel en elle-même, il est entendu que vous avez déjà connaissance des informations présentes dans les parties précédentes du tutoriel. Bien qu'il soit possible de se rendre directement à n'importe quel point du tutoriel, il est vivement suggéré aux nouveaux venus en RSS de lire le tutoriel dans l'ordre proposé. -

-

Tutoriel

-
  1. Présentation de RSS -
  2. Pourquoi utiliser RSS -
  3. Fonctionnement de RSS -
  4. Hello World (à venir) -
  5. Syndication -
  6. Blogs (à venir) -
  7. Broadcatching (à venir) -
  8. Microformats (à venir) -
  9. Advanced Broadcatching (à venir) -
-


-

-
-
diff --git a/files/fr/archive/rss/premiers_pas/pourquoi_utiliser_rss/index.html b/files/fr/archive/rss/premiers_pas/pourquoi_utiliser_rss/index.html deleted file mode 100644 index f91867a655..0000000000 --- a/files/fr/archive/rss/premiers_pas/pourquoi_utiliser_rss/index.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Pourquoi utiliser RSS -slug: Archive/RSS/Premiers_pas/Pourquoi_utiliser_RSS -tags: - - Premiers_pas - - RSS - - 'RSS:Premiers_pas' -translation_of: Archive/RSS/Getting_Started/Why_use_RSS ---- -

Cette page explique pourquoi vous pourriez être amené à utiliser RSS. Elle n'explique pas encore comment créer vos propres fichiers RSS, mais présente plusieurs raisons de le faire.

- -

Pourquoi utiliser RSS ?

- -

Si vous lisez ces lignes, vous avez probablement déjà vos propres raisons de vouloir utiliser RSS. Il en existe beaucoup, mais les deux raisons que l'on retrouve le plus souvent sont les suivantes :

- -
    -
  1. RSS correspond à un réel besoin
  2. -
  3. Utiliser RSS fait très tendance, tout le monde le fait
  4. -
- -

RSS connait un énorme élan de popularité. On l'utilise pour syndiquer toutes sortes de choses : articles de journaux en ligne, blogs, marque-pages, émissions radio IP, émissions TV IP, mises à jour de logiciels, courriels, listes de diffusion, playlists de musique, et bien d'autres. Tout ce qui est régulièrement mis à jour peut être syndiqué avec RSS.

- -

Les agrégateurs RSS sont partout

- -

Les logiciels pouvant lire et utiliser RSS sont également partout. Mozilla Firefox gère le RSS à sa façon avec les marque-pages dynamiques. Il y a d'ailleurs trop d'agrégateurs RSS pour les citer tous, qu'ils soient sous la forme d'applications de bureau ou de sites d'agrégation spécialisés. C'est l'une des raisons principales d'utiliser RSS pour la syndication : vos flux RSS pourront être lus par tous ces agrégateurs.
-

-

« PrécédentSuivant »

-

diff --git "a/files/fr/archive/rss/premiers_pas/pr\303\251sentation_de_rss/index.html" "b/files/fr/archive/rss/premiers_pas/pr\303\251sentation_de_rss/index.html" deleted file mode 100644 index 4051f856c8..0000000000 --- "a/files/fr/archive/rss/premiers_pas/pr\303\251sentation_de_rss/index.html" +++ /dev/null @@ -1,255 +0,0 @@ ---- -title: Présentation de RSS -slug: Archive/RSS/Premiers_pas/Présentation_de_RSS -tags: - - Premiers_pas - - RSS - - 'RSS:Premiers_pas' -translation_of: Archive/RSS/Getting_Started/What_is_RSS ---- -

 

- -

Cette page explique ce qu'est RSS. Vous n'allez pas créer vos propres fichiers RSS tout de suite, mais vous découvrirez la façon dont RSS est utilisé en général, ainsi que quelques fichiers RSS d'exemples des utilisations les plus courantes. Vous aurez aussi droit à un petit historique à propos de RSS.

- -

Qu'est ce que RSS ?

- -

Les versions de RSS les plus populaires sont des langages de balisage basés sur XML utilisés pour la syndication. (Bien qu'il existe des formats RSS basés sur RDF tels que RSS 0.90 et RSS 1.0 qui sont aujourd'hui dépréciés). Les utilisations les plus courantes de la syndication RSS se font pour la syndication des sites Web d'actualité, des blogs, des radios et TV IP.

- -

Ce tutoriel traite essentiellement de RSS 2.0, mais évoque certains aspects spécifiques aux autres versions de RSS.

- -

On n'écrit presque jamais du RSS à la main. La plupart du temps, c'est un programme côté serveur (en général écrit en PHP, Java, C# ou Python) qui s'en occupe. Cependant, pour les besoins du tutoriel, nous allons écrire nos propres fichiers RSS à la main.

- -

Bref historique de RSS

- -

En mars 1999, Netscape a publié RSS 0.90. On était alors bien loin du RSS d'aujourd'hui. Il ne s'agissait pas réellement d'un format de syndication mais plutôt d'un format fournissant le résumé d'un site Web. En fait, à l'époque, RSS ne signifiait pas encore Really Simple Syndication, mais Rich Site Summary (NdT : Résumé de site enrichi).

- -

En juillet 1999 sort RSS 0.91 de Netscape. Tout comme RSS 0.90, le RSS 0.91 de Netscape était un format destiné à fournir le résumé d'un site Web et non pas un format de syndication (comme c'est le cas aujourd'hui). Cette nouvelle version a été concue pour simplifier les choses. En effet, alors que RSS 0.90 était basé sur RDF, que beaucoup trouvaient particulièrement complexe, RSS 0.91 de Netscape était quant à lui basé uniquement sur XML et ajoutait une DTD permettant d'utiliser de nombreuses entités (que l'on trouve généralement en HTML).

- -

Dès lors, Netscape déclara comme "déprécié" le format RSS 0.90 basé sur RDF et demanda à tout le monde d'utiliser le RSS 0.91 de Netscape qui lui, était basé sur du XML.

- -

En juin 2000 sort le RSS 0.91 de Userland. Oui, vous l'avez compris, il existe bien deux versions différentes de RSS 0.91. La différence entre ces deux versions de RSS 0.91 (celle de Netscape et celle de Userland) est que le RSS 0.91 de Userland ne propose pas la DTD du RSS 0.91 de Netscape, et donc ne dispose pas des entités supplémentaires (et que l'on trouve généralement en HTML) dont disposait le RSS 0.91 de Netscape . En dehors de ça, ils sont similaires. Techniquement, le RSS 0.91 de Userland n'est qu'une version moins complète du RSS 0.91 de Netscape.

- -

En décembre 2000, leRSS-DEV working group sort RSS 1.0. Cette version de RSS n'était plus basée sur du XML pur, mais à nouveau sur RDF, comme l'était le RSS 0.90 d'origine. LeRSS-DEV working group a modifié la signification de RSS en RDF Site Summary (NdT : résumé en RDF de site Web), du moins c'était ainsi qu'était présenté RSS dans cette version.

- -

À ce moment là, nous avions donc le RSS 0.91 de Netscape, le RSS 0.91 de Userland et le RSS 1.0 duRSS-DEV working group.

- -

Un peu plus tard, au cours de ce même mois de décembre 2000, Userland a publié RSS 0.92, censé remplacer le RSS 0.91 de Userland. Vous l'aurez remarqué, dès lors la numérotation des versions de RSS devient encore plus confuse puisque RSS 0.92 est une version plus récente que RSS 1.0.

- -

À présent, on disposait du RSS 0.91 de Netscape, du RSS 1.0 duRSS-DEV working group et du RSS 0.92 de Userland.

- -

En avril 2001, Userland a sorti une ébauche de RSS 0.93. Cette version de RSS n'a cependant jamais été finalisée et n'a donc jamais remplacé le RSS 0.92 de Userland.

- -

Donc, à ce moment là, si l'on avait toujours le RSS 0.91 de Netscape, le RSS 1.0 duRSS-DEV working group et le RSS 0.92 de Userland, certains se sont également mis à utiliser RSS 0.93 et RSS 0.94 alors qu'ils n'étaient pas supposés l'être.

- -

En septembre 2002, Userland publie RSS 2.0, destiné à remplacer RSS 0.92 ainsi que les ébauches RSS 0.93 et RSS 0.94 (que personne n'était supposé utiliser). Userland a choisi de passer directement le numéro de version à 2.0 puisque leRSS-DEV working group avait déjà utilisé le numéro de version 1.0 pour leur RSS 1.0 basé sur RDF.

- -

À ce moment là, on pouvait donc trouver le RSS 0.91 de Netscape, le RSS 1.0 duRSS-DEV working group et le RSS 2.0 de Userland.

- -

L'histoire ne s'arrête pas là. Une première fois en novembre 2002, et ensuite en janvier 2003, Userland a modifié les spécifications de RSS 2.0. Et bien que ces spécifications soient différentes, toutes sont présentées comme étant RSS 2.0 sur l'élément <rss>.

- -

Aujourd'hui, nous avons toujours le RSS 0.91 de Netscape (puisque Netscape ne l'a jamais déclaré comme déprécié), bien que plus personne ne l'utilise. Les formats les plus utilisés sont les formats RSS 1.0 basé sur du RDF et RSS 2.0 basé sur du XML avec un léger avantage pour ce dernier. C'est cette version qui est présentée dans ce tutoriel.

- -

Comment RSS est utilisé aujourd'hui

- -

Aujourd'hui, RSS est essentiellement utilisé à des fins de syndication. La syndication est le fait de signaler aux autres que vous avez du contenu à les faire consommer. En d'autres mots, vous dites aux autres quelque chose qui ressemble à : « Ohé vous autres, j'ai des articles que je voudrais vous faire lire ! Abonnez-vous donc à mon flux RSS et vous aurez la possibilité de lire les articles plus récents qui sortent. »

- -
-

NOTE : Si vous proposez un flux RSS qui n'est pas protégé par mot de passe, cela signifie que vous permettez implicitement à chacun d'utiliser son contenu comme bon lui semble. Tout le monde peut le lire, en faire une copie, partager cette copie, le diffuser sur sont propre site web, le re-syndiquer, etc.

- -

Si vous ne souhaitez pas que cela arrive, ne placez pas votre contenu dans un flux RSS non protégé par mot de passe, et ne rendez pas le mot de passe public évidemment.

-
- -

Les sites web d'actualité utilisent RSS pour fournir à tous la liste de leurs derniers articles parus. Par exemple :

- -
   
-    <?xml version="1.0"?>
-
-    <rss version="2.0">
-
-        <channel>
-            <title>Exemple de site d'informations</title>
-            <description>Ceci est un exemple de site d'informations journalistique</description>
-            <lastBuildDate>Wed, 27 Jul 2005 00:30:30 -0700</lastBuildDate>
-            <link>http://news.example.com/</link>
-
-            <item>
-                <title>Brève : J'aime le pain</title>
-                <guid>4d4a0a12-f188-4c97-908b-eea27213c2fe</guid>
-                <pubDate>Wed, 27 Jul 2005 00:30:30 -0700</pubDate>
-                <link>http://news.example.com/artcle/554</link>
-            </item>
-            <item>
-                <title>La nouvelle du jour: Les oiseaux volent</title>
-                <guid>c4a63f09-b45b-466b-8773-6ff264001ab7</guid>
-                <pubDate>Tue, 19 Jul 2005 04:32:51 -0700</pubDate>
-                <link>http://news.example.com/artcle/553</link>
-            </item>
-            <item>
-                <title>Le feu ça brûle</title>
-                <guid>c1795324-d5ea-44fa-95b1-b5ce2090d4f1</guid>
-                <pubDate>Sun, 15 May 2005 13:02:08 -0700</pubDate>
-                <link>http://news.example.com/artcle/552</link>
-            </item>
-        </channel>
-
-    </rss>
-    
-
- -

Les blogueurs utilisent RSS pour fournir à tous une liste de leurs derniers messages. Par exemple :

- -
   
-    <?xml version="1.0"?>
-
-    <rss version="2.0">
-
-        <channel>
-            <title>Blog de Michel Martin</title>
-            <description>Il s'agit du blog de Michel Martin</description>
-            <lastBuildDate>Sun, 15 May 2005 13:02:08 -0500</lastBuildDate>
-            <link>http://michel-martin.example.net/</link>
-
-            <item>
-                <title>Depuis le temps que je bloggue...</title>
-                <guid>http://joe-blow.example.net/log/21</guid>
-                <pubDate>Sun, 15 May 2005 13:02:08 -0500</pubDate>
-                <link>http://joe-blow.example.net/log/21</link>
-            </item>
-            <item>
-                <title>Je suis super mal1</title>
-                <guid>http://joe-blow.example.net/log/20</guid>
-                <pubDate>Sat, 14 May 2005 22:19:18 -0500</pubDate>
-                <link>http://joe-blow.example.net/log/20</link>
-            </item>
-            <item>
-                <title>Allo ?</title>
-                <guid>http://joe-blow.example.net/log/19</guid>
-                <pubDate>Sat, 14 May 2005 09:55:59 -0500</pubDate>
-                <link>http://joe-blow.example.net/log/19</link>
-            </item>
-            <item>
-                <title>Mauvais jour pour un chat noir</title>
-                <guid>http://joe-blow.example.net/log/18</guid>
-                <pubDate>Fri, 13 May 2005 13:13:13 -0500</pubDate>
-                <link>http://joe-blow.example.net/log/18</link>
-            </item>
-        </channel>
-
-    </rss>
-    
-
- -

Ceux qui montent une radio IP (IPRadio) utilisent RSS pour permettre aux utilisateurs d'écouter leurs émissions. Exemple :

- -
   
-    <?xml version="1.0"?>
-
-    <rss version="2.0">
-
-        <channel>
-            <title>Hervé's IPradio Show</title>
-            <description>La meilleure émission de radio du net, avec Hervé !</description>
-            <lastBuildDate>Mon, 15 Aug 2005 16:12:37 -0400</lastBuildDate>
-            <link>http://joe.ipradio.example.net/</link>
-
-            <item>
-                <title>On voit tes marques de bronzage</title>
-                <guid>http://joe.ipradio.example.net/show/55</guid>
-                <pubDate>Mon, 15 Aug 2005 16:11:57 -0400</pubDate>
-                <enclosure url="http://joe.ipradio.example.net/show/55"
-                           length="4487216"
-                           type="application/ogg"
-                />
-            </item>
-            <item>
-                <title>La valise Hervé L</title>
-                <guid>http://joe.ipradio.example.net/show/54</guid>
-                <pubDate>Mon, 8 Aug 2005 13:12:12 -0400</pubDate>
-                <enclosure url="http://joe.ipradio.example.net/show/54"
-                           length="4892178"
-                           type="audio/x-mp3"
-                />
-            </item>
-            <item>
-                <title>Les 10 minutes du peuple</title>
-                <guid>http://joe.ipradio.example.net/show/53</guid>
-                <pubDate>Mon, 1 Aug 2005 18:22:14 -0400</pubDate>
-                <enclosure url="http://joe.ipradio.example.net/show/53"
-                           length="3984215"
-                           type="application/ogg"
-                />
-            </item>
-        </channel>
-
-    </rss>
-    
-
- -
-

NOTE : On parle parfois de Podcasting pour parler d'écoute de la radio sur internet. Il est préférable de ne pas employer ce terme car il semble que Apple possède les droits d'utilisation de ce terme. Ce mot appartient donc à Apple.

-
- -

Ceux qui proposent de la TV sur IP (IPTV) utilisent RSS pour permettrent aux utilisateurs de voir leurs émissions en ligne. Exemple :

- -
   
-    <?xml version="1.0"?>
-
-    <rss version="2.0">
-
-        <channel>
-            <title>L'émission de Sylvie</title>
-            <description>L'émission à ne pas rater</description>
-            <lastBuildDate>Tue, 23 Aug 2005 21:02:05 -0800</lastBuildDate>
-            <link>http://sylvietv.example.com/</link>
-
-            <item>
-                <title>Ca c'est fort !</title>
-                <guid>http://sylvietv.example.com/show/4</guid>
-                <pubDate>Tue, 23 Aug 2005 21:02:05 -0800</pubDate>
-                <enclosure url="http://katetv.example.com/show/4"
-                           length="1911146"
-                           type="application/ogg"
-                />
-            </item>
-            <item>
-                <title>Mate un peu ça !</title>
-                <guid>http://sylvietv.example.com/show/3</guid>
-                <pubDate>Tue, 16 Aug 2005 16:11:57 -0400</pubDate>
-                <enclosure url="http://katetv.example.com/show/3"
-                           length="1387442"
-                           type="application/ogg"
-                />
-            </item>
-            <item>
-                <title>Encore moi</title>
-                <guid>http://sulvietv.example.com/show/2</guid>
-                <pubDate>Tue, 9 Aug 2005 13:12:12 -0400</pubDate>
-                <enclosure url="http://katetv.example.com/show/2"
-                           length="1894877"
-                           type="video/mpeg"
-                />
-            </item>
-            <item>
-                <title>Salut</title>
-                <guid>http://sylvietv.example.com/show/1</guid>
-                <pubDate>Tue, 2 Aug 2005 18:22:14 -0400</pubDate>
-                <enclosure url="http://katetv.example.com/show/1"
-                           length="17442215"
-                           type="application/ogg"
-                />
-            </item>
-        </channel>
-
-    </rss>
-    
-
- -

Le lecteur attentif se sera rendu compte que les exemples desite d'informations et deblogueur se ressemblent. De même, les exemples deIPRadio etIPTV se ressemblent. En fait, la seule différence entre les exemples site d'informations/blogueur et IPRadio/IPTV réside dans le fait que les 2 premiers utilisent l'élément <link> et que les 2 autres utilisent l'élément <enclosure>

- -
-

NOTE : Ces exemples sont simplifiés à l'extrême et ont été conçus pour vous donner une idée de ce à quoi ressemble du RSS basique. Lorsque vous créerez vos propres flux RSS, vous les voudrez probablement plus complets et plus complexes et ils inclueront sûrement d'autres éléments RSS et vous utiliserez peut-être quelques-uns des différents modules RSS.

-
- -

-

Suivant »

-

diff --git a/files/fr/archive/rss/premiers_pas/syndication/index.html b/files/fr/archive/rss/premiers_pas/syndication/index.html deleted file mode 100644 index 6cf258fa19..0000000000 --- a/files/fr/archive/rss/premiers_pas/syndication/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Syndication -slug: Archive/RSS/Premiers_pas/Syndication -tags: - - Premiers_pas - - RSS - - 'RSS:Premiers_pas' -translation_of: Archive/RSS/Getting_Started/Syndicating ---- -

Cette page explique la syndication Web avec RSS. Vous y apprendrez comment faire pour que visiteurs et machines trouvent facilement votre flux RSS.

- -

Présentation de la syndication

- -

La syndication (ou syndication Web) consiste à mettre à disposition d'autres personnes du contenu texte, photo, audio, ou vidéo. Lorsque vous écrivez sur votre blog, que vous produisez une émission de radio ou de télévision par Internet, vous syndiquez.

- -

RSS vous aide à syndiquer du contenu, en le présentant sous un format aisément exploitable par des machines.

- -

La syndication avec RSS implique 3 choses :

- -
    -
  1. Créer un flux RSS.
  2. -
  3. Ajouter un élément <link> spécial dans une ou des pages HTML.
  4. -
  5. Ajouter un élément <a> spécial dans une ou des pages HTML.
  6. -
- -

Nous avons déjà évoqué le 1er point - la création des flux RSS - aussi nous intéresserons nous plus particulièrement aux points 2 et 3 dans ce document.

- -

Ajouter l'élément <link>

- -

Souvent, les données présentes dans un flux RSS le sont également sur une page Web HTML. Lorsque c'est le cas, la page Web HTML peut signaler la présence du flux aux visiteurs et aux machines avec un code comme celui-ci :

- -
<link rel="alternate" type="application/rss+xml" href="http://example.com/feed" />
-
- -

Vous pouvez également annoncer le flux RSS depuis d'autres emplacements (par exemple, depuis un billet de blog). Vous pouvez utiliser dans ce cas un code similaire à ceci :

- -
<link rel="home" type="application/rss+xml" href="http://example.com/feed" />
-
- -

Remarquez que cela ressemble fortement au code précédent, la seule différence étant la valeur de l'attribut rel (la valeur de rel dans le code précédent était alternate, elle est ici home.

- -
-

NOTE : Il y a pas mal d'abus dans l'utilisation de l'élément <link> pour la syndication RSS. Certains blogueurs veulent que les internautes puissent s'abonner à leur blog depuis n'importe quelle page (et pas uniquement leur page d'accueil). Beaucoup ont donc ajouté l'élément <link> avec un attribut rel="alternate" sur chaque page (dans les entrées du blog également, et pas uniquement sur la page d'accueil). C'est une mauvaise pratique ! Cela devrait être rel="home". (Voir Understanding rel and rev pour plus d'informations.) La chose la plus importante lorsque vous utilisez l'élément <link> pour la syndication de votre flux RSS est de mettre l'attribut type="application/rss+xml".

-
- -

Ajouter l'élément <a>

- -

L'utilisation de l'élement HTML <link> est très puissante mais elle est la plupart de temps cachée. Pour publier plus directement votre flux RSS, vous pouvez utiliser l'élément HTML <a>. Cela imite l'élément <link> que nous venons de voir.

- -

Quand vous faites un lien depuis la page Web où les données d'un flux RSS sont également présentes, utilisez :

- -
<a rel="alternate" type="application/rss+xml" href="http://example.com/feed">…</a>
-
- -

Quand vous faites un lien depuis, par exemple, un article de blog, utilisez le code suivant :

- -
<a rel="home" type="application/rss+xml" href="http://example.com/feed">…</a>
-
- -

Une nouvelle fois, remarquez que les deux codes sont très similaires. Seule la valeur de l'attribut rel change. La valeur de rel du premier code est alternate ; dans le second elle est home.

- -

Icônes de flux

- -

Les flux RSS (ainsi que les autres) utilisent une icône spécifique. Il est recommandé de l'utiliser lorsque vous créez le lien spécial <a> vers votre flux. Cette icône ressemble à cela :

- -
-
Image:Feed-icon-32x32.png
-
- -

Vous pouvez obtenir d'autres icônes de ce type sur le site Feed Icons. Il existe différentes couleurs et tailles, et les fichiers sources sont disponibles également.

- -

Techniques de syndication avancée

- -

Bien que cette technique de syndication avancée ne soit pas nécessaire, son support est recommandé ; en particulier pour les sites Web et les applications avec de grande exigence de performance.

- -

Le protocole HTTP -- l'une des technologies clef du Web -- fournit un moyen d'établir des priorités dans le type de contenu qu'un client HTTP préfère recevoir. Cette technique en tire avantage en faisant en sorte que le client préfére RSS (plutôt que HTML ou un autre format). Voici un exemple simple de ce qui peut être fait :

- -
Accept: application/rss+xml, text/html
-
- -

Cependant, avec des logiciels de production, cela ressemblera plus à :

- -
Accept: application/rss+xml, application/xhtml+xml, text/html
-
- -

Voici un exemple plus complet :

- -
GET / HTTP/1.1
-Host: exemple.com
-Accept: application/rss+xml, application/xhtml+xml, text/html
-
- -

Lorsqu'un serveur HTTP (ou un script côté serveur) reçoit ce code, il devrait rediriger le client HTTP vers le flux, en envoyant un code HTTP 302 Found. Ce qui donne quelque chose comme :

- -
HTTP/1.1 302 Found
-Location: http://example.com/feed
-
- -

-

« PrécédentSuivant »

-

diff --git a/files/fr/archive/rss/version/index.html b/files/fr/archive/rss/version/index.html deleted file mode 100644 index 38cf40777d..0000000000 --- a/files/fr/archive/rss/version/index.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Version -slug: Archive/RSS/Version -tags: - - RSS -translation_of: Archive/RSS/Version ---- -

-

-

Les versions de RSS

-

RSS a une histoire compliquée. Des personnes et des groupes différents ont créés chacun de leur côté des applications qu'ils ont appelés RSS. Certain RSS sont des formats basés sur XML, et d'autres sur des formats RDF. -

La liste ci-dessous représente toutes les versions connues RSS. Elles sont listées par ordre chronologiques de leurs sorties. -

-
-

NOTE : dans la liste ci-dessous, RSS 1.0 semble ne pas être à sa place. Cependant, il apparaît là selon l'ordre chronologique. -

-
-
-

NOTE : il existe 3 versions différentes de RSS 0.91, celle de Netscape (revision 1 et revision) et celle d'Userland. Pour être exact, le RSS 0.91 d'Userland est un sous-ensemble du RSS 0.91 de Netscape. -

-
-
-

NOTE : RSS 0.93 et RSS 0.94 n'ont jamais été publiés qu'en tant que « brouillons » et ne sont jamais devenus « finaux ». Ils n'étaient donc pas censés être réellement utilisés. -

-
- -
Nom Statut Date de publication Basé sur Auteur
RSS 0.90 Mars 1999 RDF Netscape
RSS 0.91 de Netscape (Revision 1) ? XML Netscape
RSS 0.91 Revision 3 de Netscape 10 juillet 1999 XML Netscape
RSS 0.91 d'Userland 4 juin 2000 XML Userland
RSS 1.0 Standard 9 décembre 2000 RDF Groupe de travail RSS-DEV
RSS 0.92 25 décembre 2000 XML Userland
RSS 0.93 20 avril 2001 XML Userland
RSS 0.94 19 août 2002 XML Userland
RSS 2.0 Septembre 2002 XML Userland
RSS 2.0 (post 2002-11-11) 11 novembre 2002 XML Userland
RSS 2.0 (post 2003-01-21) Standard 21 janvier 2003 XML Userland
diff --git "a/files/fr/archive/rss/\303\251l\303\251ments/index.html" "b/files/fr/archive/rss/\303\251l\303\251ments/index.html" deleted file mode 100644 index a622270973..0000000000 --- "a/files/fr/archive/rss/\303\251l\303\251ments/index.html" +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Éléments -slug: Archive/RSS/Éléments -tags: - - RSS -translation_of: Archive/RSS_elements ---- -

 

-

Les éléments RSS

-

A

- -

B

-

C

- -

D

- -

E

- -

F

-

G

- -

H

-

I

- -

J

-

K

-

L

- -

M

-

N

-

O

-

P

-

Q

-

R

- -

S

- -

T

- -

U

- -

V

-

W

-

X

-

Y

-

Z

-

Catégories

-

diff --git a/files/fr/archive/security/index.html b/files/fr/archive/security/index.html deleted file mode 100644 index 02db228352..0000000000 --- a/files/fr/archive/security/index.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Security -slug: Archive/Security -tags: - - TopicStub -translation_of: Archive/Security ---- -

Il est fortement déconseillé de se fier à ces articles de sécurité obsolètes. Cela pourrait mettre vos systèmes en danger.

- -
-
-
-
Introduction à la cryptographie à clef publique
-
La cryptographie à clef publique ainsi que les standards et les techniques qui s'y rapportent sont à la base des dispositifs de sécurité de nombreux produits Red Hat. Cela comprend : la signature et le chiffrement de messages électroniques, la signature de formulaire, la signature d'objet, les ouvertures de session unique et le protocole SSL (Secure Sockets Layer). Ce document est une introduction aux concepts de base de la cryptographie à clef publique.
-
- -
-
-
- -
-
-
Introduction à SSL
-
Ce document est une introduction au protocoleSecure Sockets Layer (SSL). SSL a été universellement adopté sur leWorld Wide Web pour authentifier et chiffrer les communications entre clients et serveurs.
-
-
-
diff --git "a/files/fr/archive/standards_du_web/choisir_de_se_conformer_aux_standards_plut\303\264t_qu_aux_pratiques_propri\303\251taires/index.html" "b/files/fr/archive/standards_du_web/choisir_de_se_conformer_aux_standards_plut\303\264t_qu_aux_pratiques_propri\303\251taires/index.html" deleted file mode 100644 index 3f2ad0a34e..0000000000 --- "a/files/fr/archive/standards_du_web/choisir_de_se_conformer_aux_standards_plut\303\264t_qu_aux_pratiques_propri\303\251taires/index.html" +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Choisir les standards plutôt que les pratiques propriétaires -slug: >- - Archive/Standards_du_Web/Choisir_de_se_conformer_aux_standards_plutôt_qu_aux_pratiques_propriétaires -tags: - - Standards_du_Web -translation_of: Archive/Web_Standards/Choosing_Standards_Compliance_Over_Proprietary_Practices ---- -

Introduction

- -

There are a number of standards, procedures, and processes that an organization can use. At the high level, there are two primary types of standards: procedural (how do we do it) versus technical (what do we follow). Organizations implement internal procedural standards so they are able to operate efficiently. They may also incorporate external procedural and/or technical standards. Technical standards have traditionally been pioneered through consortiums or standards bodies. The technical standards can be either public, standards-based or a proprietary de facto standard. The purpose of this document is to discuss and emphasize the importance of conforming to open technology standards that are external to the organization. Let’s begin the discussion, however, by looking inward to internal procedures, processes and standards.

- -

Why should organizations have standard procedures at every level? Following standards is certainly not a new organizational phenomenon; organizations require their employees to follow common rules, or a common set of standards all the time. Memos, time cards, and accounting procedures are all standardized across groups.

- -

In the development world, there is a need for standards because applications are designed across multiple development groups. Many organizations publish internal development standards and practices. For example, an organization may decide that C++, Java, and JavaScript will be the primary coding languages. They may require that each project be comprised of Marketing Requirements Documents, Product Requirements Documents, Functional Requirements Documents, Quality Assurance Test Plans, and Certification Documents.

- -

As organizations mature, they discover that they need more processes to give them greater control, which allows them to more easily plan and predict. With processes, organizations can make release schedules, implement marketing plans, analyze resource allocations, and make adjustments when needed. Adherence to standards and processes can actually provide a level of flexibility because development does become predictable. In addition to predictability, standard processes improve understanding and streamline costs.

- -

Un processus de développement commun

- -

As an organization matures, managers and engineers develop a fundamental understanding of the importance of requiring adherence to these processes. When projects are proposed, they are evaluated to ensure compatibility with the overall business strategy. Product marketing must then analyze the marketability of the application/product, and then conduct in-depth technical evaluations and market research studies. If the project is accepted, the compiled information, analysis and research is merged into a Request for Proposal (RFP).

- -

This process is not unique: most organizations have basic project management processes for product or service. Even within organizations, their processes are fine-tuned to work within the existing culture. When this happens, a development standard is created and is expected to be followed.

- -

It is easy to get caught up in the process and forget why organizations have these processes in place. Bottom line, organizations have them because they save money, time, and resources. Sure, there are other reasons -– accountability, checkpoints, and scheduling, for example. The end result, however, is having a process in place that maximizes the organization's investment.

- -

Autres standards

- -

It is also important to follow other types of standards across an organization. There are numerous standards organizations that affect how and why we do what we do. For example, in the accounting arena there is FASB (Financial Accounting Standards Board) and IASB (International Accounting Standards Board). All businesses are expected and required to follow the guidelines set forth by the FASB. When auditors evaluate an organizations financial health, they do so by following the FASB rules.

- -

Focusing on the software development portion of an organization, there are numerous standards bodies that can affect development decisions. For example, if an organization is developing a web-based client, they may have to adhere to standards imposed by these organizations:

- - - -

Like the processes and standards that accountants and project managers must follow, the above-mentioned standards organizations provide focus and direction for the development engineering community. By following the guidelines that have been put into place, organizations like AOL can enhance user experience, interoperability, code reuse, shared resources, and goodwill while reducing costs. I will discuss each of these items in the following paragraphs.

- -
-

Interopérabilité

-
- -

The key to interoperability is settling on a standard that has a potential for long-term use. An organization must have the assurance that the standard they choose to incorporate into their development process will be relevant in the future. In other words, there must be long-term potential. A fundamental mistake that many organizations make is to use proprietary methods, software, code, or standards. Following a proprietary path has led many organizations down disastrous paths.

- -

Case in point: Xerox Corporation. Xerox was clearly ahead of their time in the early 1980’s when they designed and developed the Star Office System. It was an elegant workstation with an iconic desktop developed by the engineers at PARC (Palo Alto Research Center). The Star Office System offered functionality that neither Microsoft nor Apple has been able to match with their current offerings.

- -

The engineers developed Star on a proprietary development operating system known as Pilot. Pilot had a highly-integrated debugging tool called Co-pilot that allowed the Xerox development organization to quickly and easily debug issues. However, what Xerox neglected to understand was that regardless of how powerful Pilot and Co-pilot was, the Star Workstation could not evolve with the times because it was proprietary. Xerox was bound to a unique hardware platform and to a closed development operating system. And Xerox chose to bypass multiple opportunities to port the code to other platforms, and to provide open-source code. Consequently, Xerox eventually had to shut down the production of their workstation development because of escalating manufacturing and developing costs and slowed sales.

- -

Xerox’s biggest asset in the beginning became its weapon of destruction. They settled on a proprietary environment, and missed the opportunity to make their environment the benchmark – and set the standard.

- -

Following open standards has an added benefit. When it is necessary for an organization to interact with other applications through alliances, merger, or acquisition, the integration and interoperability is much less costly if all parties involved follow the standards from the outset. Consistent standards significantly reduce development re-work, and ensure consistent and predictable behavior from one application to the next.

- -

Expérience utilisateur et bonne volonté

- -

Customer retention and market expansion is critical. When customers choose to use a particular product, they must have a positive experience with consistent, reliable, and predictable behavior. As users become more sophisticated, and as additional devices become more affordable, they will be accessing the same information across a variety of devices – and expect them to look and act the same – regardless of whether they are accessing a web site from their desktop, phone, or handheld. Consequently, if an organization offers a suite of products they must ensure that the user experience is consistent and predictable across the product line.

- -

Cohérence

- -

To be successful, organizations need to understand this user expectation and provide a consistent experience across their product offerings. When usability alters too much across products, users complain.

- -

Apple and Microsoft have learned this lesson well. When a Macintosh user shifted from Mac OS 8.x to Mac OS 9.x, the interface and desktop metaphor was virtually unchanged. Users could quickly and easily shift from one version to the next. However, when Mac OS X was released, Apple completely revamped the interface and desktop metaphor. That change caused quite a rumble through the Apple user community. It changed just enough to make it awkward, but not enough to where the user could not adjust. Apple received both good and bad press; and they lost some users and won some others over.

- -

An example of how consistent user experience wins user loyalty can be seen in how Microsoft ensures common behavior across applications. For example, in Word, Excel, and other Windows applications, we know that pressing CTL+C within any Microsoft product means copy. The behavior is consistent and predictable and has subsequently become the de-facto standard. The reason it is consistent and predictable is because Microsoft has established a corporate set of usability standards and supports the relevant international standards.

- -

Accessibilité

- -

No organization can afford to overlook or ignore accessibility standards. Within the web environment, the accessibility standards are closely tied to HTML, XML, XHTML, and other W3C standards. By integrating and supporting the accessibility guidelines, an organization can offer their product lines or services to a larger and more diverse user base.

- -

Interchangeabilité

- -

If a user experiences consistent behavior across a range of products, they can predict how a particular action or function will work or respond. As a product provider, the goal should be the element of least surprise. By instilling a set of global goals and standards into an organizational infrastructure, an organization is ensuring its end users the ability to interact, function, view, and process information consistently as they transition from one device to the next.

- -

A significant drawback in allowing divergence across applications is that information must be replicated, altered, or massaged to be processed across the divergent applications. This also creates issues in regard to authoring tools for these various applications. For example, let us say we have multiple application offerings that can be used to browse the web. Each of these applications has followed their own development and support standards. They each may support some or part of the international standards, but not fully. What authoring tool should we use? Would it be fiscally prudent to develop proprietary authoring tools for each application? What would the market adoption rate be for the suite of applications in this case? How can an organization consistently win market share if their product offerings are not integrated? More importantly, what if the user perception is that their products are not interchangeable?

- -

Ressources Partagées

- -

When an organization instills a corporate-wide policy of shared standards, they can leverage engineering resources across multiple projects. The development engineers can shift more readily between projects with little to no downtime. Coding practices are consistent. Expectations are known. There is equivalent functionality across applications offered by the organization. And, the engineers have a broader base of experience, making them more valuable within the organization.

- -

For example, if web-based applications are expected to be W3C compliant, each engineer would be expected to know and understand the W3C standards. Development efforts would consequently support similar levels of standards support, which could possibly lead to cross-application coding, or code reuse.

- -

For example, if a development engineer writes an application following the ANSI standard of C and C++, and writes that code on a particular platform, that code can be compiled on any other platform and operating system that supports ANSI standards. Microsoft products are difficult to export because they introduced MFC (Microsoft Foundation Classes), which is a Windows-only standard that does not follow the ANSI standard.

- -

Assurance de la qualité

- -

We know from experience that without rigorous testing, our products can fail miserably when we introduce them into the market. Technical support is costly not only in regard to support staff costs, but also in respect to customer dissatisfaction.

- -

That is why organizations also need to apply standards to quality testing. By adopting a set of standards, the QA organization can produce a set of test suites that they can use across multiple projects. By having a standardized set of test suites, the QA organization can easily maintain, verify, and certify the tests, and eliminate redundant testing databases to ensure consistency and reliability. Like the engineers, standardization also helps the QA engineers become highly proficient and capable of shifting from project to project.

- -

Résumé

- -

As organizations expand product development across multiple devices and product families, integration and compatibility must be a key requirement. Adhering to a set of future-focused International standards will make cross-functional integration possible. Adopting standards will not only help an organizations end users enjoy a cross application experience; organizations will help themselves by giving development and quality assurance engineers the tools to become better equipped and flexible. Lastly, by following a series of standards, organizations can more easily measure progress, performance, and results across the organization.

- -

The most compelling dilemma is how an organization chooses to follow open external standards versus a proprietary de facto standard. Following proprietary de facto standards leaves an organization vulnerable and open to obsolescence when the owner of the de facto changes focus or direction, or abandons the de facto altogether and renders the standard stagnate. On the other hand, by adopting open technology standards and participating in the development and direction of those standards, an organization is providing a path for future development, growth and revenue.

diff --git "a/files/fr/archive/standards_du_web/communaut\303\251/index.html" "b/files/fr/archive/standards_du_web/communaut\303\251/index.html" deleted file mode 100644 index 27a26f6bbc..0000000000 --- "a/files/fr/archive/standards_du_web/communaut\303\251/index.html" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Communauté -slug: Archive/Standards_du_Web/Communauté -tags: - - Standards_du_Web -translation_of: Archive/Web_Standards/Community ---- -

-Quelques liens sur la communauté francophone des standards du Web. -

-

Sites majeurs

- -

Autres ressources

-

Forums

- -

Listes de diffusion

- -

Blogs

- diff --git a/files/fr/archive/standards_du_web/index.html b/files/fr/archive/standards_du_web/index.html deleted file mode 100644 index 87eedc9111..0000000000 --- a/files/fr/archive/standards_du_web/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Standards du Web -slug: Archive/Standards_du_Web -tags: - - Standards_du_Web -translation_of: Archive/Web_Standards ---- -
En produisant des sites Web conformes aux standards du W3C, on s'assure qu'ils vont fonctionner quel que soit le navigateur. […] Parce qu'Internet tient une place importante dans nos vies, et qu'il est bien parti pour occuper plus de place encore dans le futur, il appartient à chaque auteur de site web de s'assurer que les pages qui sont produites sont utilisables par tous les navigateurs récents, quels que soient le matériel utilisé, et le handicap éventuel de l'utilisateur. Bien sûr, il est impossible de tester son site sur toutes les plateformes possibles. Mais en produisant du code valide (c'est-à-dire respectant les standards du W3C et validé par les outils HTML et CSS), il est possible de s'assurer que le contenu du site s'affichera aussi bien que possible dans une très grande majorité des plate-formes, préservant ainsi la diversité des navigateurs, du matériel et des individus.
- - - - - - - - -
-

Documentation

- -
-
Migration d'applications d'Internet Explorer vers Mozilla
-
Tout le monde a déjà été confronté à des difficultés pour faire fonctionner des applications Web spécifiques à Internet Explorer sous Mozilla. Cet article traite des problèmes classiques avec la migration d'applications vers un navigateur libre basé sur Mozilla.
-
- -
-
Using Web Standards in your Web Pages
-
Cet article propose un aperçu du processus de mise à jour du contenu d'un site pour le rendre conforme aux standards Web du W3C.
-
- -
-
Préférer le respect des standards aux solutions propriétaires
-
(à traduire de en:Choosing Standards Compliance Over Proprietary Practices)
-
Dans le monde du développement, il y a un besoin de standards parce que les applications doivent fonctionner sur de multiples groupes de développement.
-
- -
-
Le modèle économique des standards Web
-
Cet article explique comment l'adhésion aux standards Web et l'abandon des formats et technologies propriétaires peuvent contribuer aux bénéfices d'une entreprise.
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

- - - -

Outils

- - - -

Tous les outils…

- -

Exemples

- - - -

Sujets liés

- -
-
CSS, DHTML, HTML, Développement Web, XHTML, XML
-
-
- -
diff --git "a/files/fr/archive/standards_du_web/le_mod\303\250le_\303\251conomique_des_standards_web/index.html" "b/files/fr/archive/standards_du_web/le_mod\303\250le_\303\251conomique_des_standards_web/index.html" deleted file mode 100644 index eaadc83364..0000000000 --- "a/files/fr/archive/standards_du_web/le_mod\303\250le_\303\251conomique_des_standards_web/index.html" +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Le modèle économique des standards Web -slug: Archive/Standards_du_Web/Le_modèle_économique_des_standards_Web -tags: - - Développement_Web - - Standards_du_Web -translation_of: Archive/Web_Standards/The_Business_Benefits_of_Web_Standards ---- -

Introduction et contexte

- -

« Faire plus avec moins » semble être une mission impossible pour nos concepteurs Web : s'adresser à toujours plus de clients et à un public toujours plus large, avoir plus de diversité en termes de navigateurs, plus d'accessibilité, répondre aux attentes d'utilisateurs qui demandent plus de rapidité, tout en dépensant moins dans le maintien ou le réaménagement d'un site Web… Dans cette situation délicate, les concepteurs Web sont confrontés à un challenge incroyable. Pourtant, ils sont en train de trouver un allié insoupçonné dans la bataille : les standards du Web.

- -

Cet article explique comment le fait d'adhérer à des standards Web (c.-à-d. à des normes), et de laisser tomber le balisage et les technologies propriétaires, peut contribuer à atteindre les objectifs d'affaires d'une société.

- -

Cohérence de l'apparence et du sens sur l'ensemble du site

- -

En séparant la structure (ou contenu) de la présentation, les concepteurs Web ont beaucoup a gagner. En particulier, la présentation est définie par l'emploi d'un langage orienté vers la mise en page CSS. Ranger CSS dans un document à part (c.-à-d. la feuille de style) et l'appliquer à une série de documents HTML permet de changer la présentation de tous ces documents en un clin d'œil. Le HTML strict (contrairement au balisage HTML transitoire fréquemment utilisé), oblige le concepteur à ne pas utiliser des balises de présentation dans les documents HTML, renforçant ainsi naturellement la séparation entre contenu et présentation.

- -

En réunissant toutes les questions de style et de design dans un seul document — la feuille de style — des sites entiers peuvent changer instantanément de thème. La communauté des blogs est particulièrement dynamique à cet égard, et dans beaucoup de plateformes dont WordPress, TextPattern et Habari, le thème du site est une entité complète et discrète, dans son propre droit.

- -

Amélioration de l'expérience utilisateur : moins de bande passante et des chargements plus rapides

- -

Le code HTML est souvent beaucoup plus compact (et donc plus facile à lire et à maintenir) lorsqu'il est utilisé conjointement à CSS. Selon divers reports, études de cas, et Andy King, auteur de Accélérez votre site Web : optimisation de sites Web, CSS a rendu possible la transformation des mises en page de type tableaux en mises en page de type CSS. Habituellement, cela réduit de 25 à 50% la taille de la page. Ceci se traduit par une amélioration de l'expérience utilisateur, selon le gourou de l'ergonomie/Utilisabilité Jakob Nielsen, qui remarque que les utilisateurs ont tendance à fermer une page Web quand elle prend plus de 10 secondes à se charger.

- -

La feuille de style n'a besoin de se charger qu'une seule fois pour être sauvegardée en mémoire cache. Le poids du chargement peut être légèrement supérieur pour la première page. Mais pour l'accès à plusieurs pages d'un même site, étalé sur plusieurs visites, les économies en bandes passantes sont énormes.

- -

Améliorer les SERPS (résultats de recherche sur les moteurs) organiques sans dépenser d'argent

- -

L'une des plus grandes difficultés pour nos webmestres est d'avoir un bon classement dans les moteurs de recherche. Pour atteindre cet objectif, tout doit entrer en compte. Grâce à l'utilisation d'un balisage sémantique, nous aidons énormément les moteurs de recherche dans leur processus d'indexation. Ces idées viennent tout naturellement aux développeurs qui utilisent les standards, sans aucun effort, temps, ni pensée supplémentaires. Tous leurs documents sont correctement signalés dès le départ. Le nombre de sites ne fournissant pas de titres ni de descriptions appropriés dans les balises Méta est surprenant. Beaucoup d'autres sites augmenteraient énormément leur SEO simplement s'ils utilisaient des balises appropriées au contenu. Rajouter des balises h1, h2, h3, et ainsi de suite, apporte une bonne structure aux documents hypertextes.

- -

Les agents des moteurs de recherche sillonnent le Web pour l'indexer, mais pour les besoins de classement ou d'indexation ils ne peuvent traiter que le texte. Les effets dynamiques, tels que ceux créés par JavaScript ne sont pas pris en compte, et un texte contenant des graphiques ne peut pas être lu ni analysé non plus. Le fait de séparer la présentation du contenu permet d'augmenter le taux d'information/balisage, rendant ainsi les documents de type CSS plus pertinents en ce qui concerne les termes de recherche, ce qui leur permet d'être classés plus haut dans les résultats de recherche. De la même manière, l'utilisation de CSS à la place de graphiques pour réaliser des titres peut être d'une grande aide.

- -

Il existe des différences significatives dans la manière dont opèrent les moteurs de recherche. Au lieu de se préoccuper de chaque moteur de recherche, et d'essayer de manipuler artificiellement les résultats, les pages utilisant les standards Web sont indexées et classées correctement (là où elles le méritent) à travers tous les moteurs de recherche. Non seulement les standards réduisent énormément nos soucis envers les différences de navigateurs, mais ils réduisent aussi les différences dans la manière dont les moteurs de recherche classent les pages.

- -

En utilisant correctement les standards du web, il ne devrait pas ou plus être nécessaire d'avoir recours à des campagnes propriétaires de paiement par clic, dont les coûts augmentent sans cesse et dont la qualité et l'intégrité laissent parfois à désirer.

- -

Augmenter le trafic des sites Web

- -

Maintenir le contact avec votre utilisateur sur des plateformes multiples

- -

Les codes respectant les standards et fonctionnant sur diverses plateformes vont main dans la main. Alors que certains navigateurs ont des bizarreries qui provoquent des comportements différents selon la plateforme, les navigateurs de Mozilla sont conçus pour se comporter de manière identique sur toutes les plateformes supportées (Mac, Linux, Unix, Windows…)

- -

Un nombre croissant d'agents utilisateur autres que des navigateurs, ou alors des navigateurs sur des plateformes différentes —nbsp;comme les téléphones mobiles — ont accès au contenu du Web. Les contenus de données tels que RSS et Atom ne marcheront tout simplement pas sans avoir été préalablement implantés en suivant les standards requis.

- -

Les suppositions émises à propos des utilisateurs et de leur plateforme, basées sur une réflexion erronée à propos de la communauté d'utilisateurs, sont inévitablement toujours fausses. Par exemple, il n'est pas obligatoire que les hommes d'affaires possèdent un moniteur à écran large. Le contraire peut aussi être vrai. Les « usagers puissants » (Power users) et les hommes d'affaires qui voyagent beaucoup sont en train de réduire leurs portables. Il arrive de plus en plus souvent qu'une seule personne ait peut-être besoin d'accéder au même site en utilisant des plateformes différentes à la maison, au bureau ou lors de déplacements. Ils s'attendent à une expérience constante et cohérente.

- -

Afin de gérer ces paradoxes, les standards Web nous fournissent différents outils et procédés, et nous permettent une contribution encore plus forte : la diffusion universelle de nos données est accessible aux personnes de différentes circonstances sociales, médicales ou économiques.

- -

Un personnel plus heureux

- -

Les bons développeurs — provenant des agences, mais aussi des stagiaires — ne veulent simplement pas travailler en utilisant des méthodes dépassées ou des plateformes aux normes incertaines, suite à l'incertitude conséquente sur la qualité. Ils ont adopté les standards Web il y a bien longtemps, et travaillent à présent là où ces nouvelles compétences sont appréciées. La connaissance de Dreamweaver ou de n'importe quel autre logiciel ancien n'entre absolument pas en compte dans le recrutement d'un personnel créatif.

- -

Éliminer les dépenses futures indésirables

- -

Une portion très significative de l'information stockée électroniquement est produite pour le Web et écrite en format HTML. La plupart de ces informations utilisent de l'HTML erroné, qui s'affiche (pour l'instant) correctement dans des navigateurs plus anciens et permissifs. Au cours de l'évolution du Web, les navigateurs Web risquent soit de devenir moins permissifs, soit de se comporter différemment lorsque des balises erronées lui seront données (p. ex. ils risquent d'analyser les données erronées et de les rendre légèrement différentes). En utilisant un balisage valide et conforme aux normes, les données seront réutilisables pendant longtemps. En effet, les prérequis pour une analyse des formats standards sont fixes et bien documentés.

- -

Contrairement aux croyances populaires, passer aux codes standards ne signifie pas que l'on produit un contenu moins attractif. D'ailleurs, tout ce qui exploite des extensions propriétaires peut être adapté aux normes, avec l'avantage supplémentaire d'être multiplateforme et à l'épreuve du temps.

- -

En s'assurant que toutes les données numériques de l'opérateur soit signalées de manière constante et conforme aux normes, la base de données devient un atout réutilisable et perpétuel — et sans aucune dépense supplémentaire future.

- -

Extensibilité

- -

L'utilisation du HTML strict et la séparation entre structure et contenu fraient la voie au XHTML, une version de HTML compatible avec XML. L'utilisation du XHTML permettra aux auteurs du Web de multiplier les outils provenant du monde XML, tel que XSLT, afin de facilement manipuler les données XML.

- -

L'utilisation du XHTML est une manière d'entrer dans une série de standards composés par des technologies XML, tels que XML, XSLT (transformation des données), SVG (graphiques animés), MathML (décrire des expressions mathématiques)… De telles technologies ont été conçues pour interfonctionner, et sont la base-même des services Web. Cela va donc beaucoup plus loin que de la simple création de contenu pour le Web.

- -

Réduire le coût d'opérations et de maintenance de site

- -

Mais au fait, qu'est-ce réellement que la maintenance ? Une des caractéristiques principales d'un site réussi est d'élaborer constamment un contenu approprié, qui puisse à son tour alimenter le dialogue médiatique social avec la communauté d'utilisateurs. Il est donc nécessaire de créer une structure et un procédé à suivre, afin de permettre aux contributeurs qui travaillent sur le contenu de publier des articles, de récupérer des vidéos, du son, ou n'importe quel autre média. Un site Web n'est qu'un support qui permet d'insérer, de déplacer, et d'afficher ce contenu. Les systèmes de gestion de contenu tentent avec un relatif succès d'alimenter ce niveau de fonctionnalité. Ce sont de très bons exemples d'une véritable séparation non seulement du style et du contenu, mais aussi du procédé par lequel ces éléments — qui sont très différents — sont exécutés.

- -

Le procédé doit donc se dérouler en trois étapes : la création du contenu, l'application du balisage, et l'ajout du style. Vu sous cet angle, il est parfois surprenant de constater à quel point le procédé de développement Web est en fait propre, élégant et simple. Dans un environnement multi-dirigé et potentiellement commercial, tel qu'une agence de développement Web, cette approche se prête aussi à une démarcation très stricte, entre disciplines d'une structure commune. Celui qui créé le contenu — qui peut être un journaliste, un producteur de musique, ou encore provenir de n'importe laquelle de nombreuses disciplines — n'a pas besoin de s'investir du tout dans le processus actuel de publication du contenu. Et la personne qui applique le balisage n'a pas forcément besoin de savoir (ni de se soucier de) comment il va être composé. Le véritable impact deThe Zen Garden a été d'aider à démontrer les stupéfiants résultats qui sont possibles sans modification du balisage, ainsi que de vraiment garder la quantité de balisage de présentation à un minimum acceptable.

- -

Le modèle Contenu-Balisage-Style se prête aussi très correctement aux méthodes linéaires de production. Il ne doit y avoir aucun besoin ni aucune activité de développement Web avant que le contenu ne soit produit. Inversement, une fois le contenu à portée de main, le processus de développement et de publication devrait être incroyablement rapide. Et c'est comme cela que ça devrait être. Si nous avons produit un contenu, nous voulons le publier dès maintenant. Pas dans six semaines.

- -

De plus, en signalant rigoureusement le procédé de production, on peut mesurer et contrôler le temps, les budgets, et les ressources, non-seulement du développement initial du contenu émergeant, mais aussi de sa publication en cours. C'est un outil de gestion très puissant.

- -

Voilà de quoi sont capables les Standards Web. Cela permet de fournir une structure de développement nettement meilleure, autant pour les fournisseurs de contenu, que pour les développeurs Web et les stylistes de CSS. Il est tout simplement inimaginable que quiconque ne puisse profiter des énormes bénéfices qu'apportent les Standards, et qu'il ne les partage. Les clients, les développeurs et les créateurs de médias numériques peuvent être libérés de la tyrannie du développement composé de graphiques, des générateurs de codes, ainsi que du balisage incompréhensible. Mais le véritable intérêt réside dans le résultat final. Le message, délivré tant aux comptables qu'aux exécutifs et aux actionnaires, devrait être irrésistible.

- -

Avantages de CSS par rapport à Javascript

- -

Plus particulièrement, les graphiques et Javascript sont souvent utilisés pour les effets spéciaux dans les fragments de texte. Vu que la technologie des feuilles de style permet aux concepteurs un bon contrôle typographique et la réalisation d'effets tels que lesRollOver, elle réduit considérablement le besoin d'une programmation Javascript et la création de graphiques. Et plus encore : cela réduit la consommation de bande passante due aux images.

- -

Un code HTML bien formé économise du temps et de l'argent

- -

Les pages Web qui s'affichent différemment d'un navigateur à l'autre provoquent l'un des plus grands maux de têtes aux développeurs Web. De telles différences de rendu touchent surtout les anciens navigateurs, mais la plupart sont bien connues et documentées. Dans de nombreux cas, des codes ambigus causent ces différences de rendu. Pour les développeurs dans les environnements commerciaux, capables de mesurer ces dépenses en temps, certains chiffres sont étonnants. Concernant une caractéristique haut de gamme d'un site, une seule incohérence entre navigateurs peut absorber les principaux développeurs dans des heures douloureuses et frustrantes de chasse aux forums et de réparation de bogues. Comme nous utilisons les Standards depuis le début, nous disposons d'un point de référence connu afin de mesurer les variations connues des vieux navigateurs. À présent, presque toutes ces variations sont bien documentées, et les réparations sont bien publiées et bien connues. En revanche, la réparation de balises chaotiques est un trou noir qui aspire temps et argent.

- -

Un code bien défini réduit considérablement les différences de rendu dans divers navigateurs. L'utilisation d'outils de validation tels que le validateur du W3C aide en repérant les erreurs de codage et en vérifiant que le code HTML soit bien formé, ce qui élimine l'ambiguïté dans l'analyse des navigateurs.

- -

Les nouveaux navigateurs adoptent les standards

- -

De plus en plus de navigateurs, autres qu'Internet Explorer pour Windows, sont utilisés pour naviguer sur le Web :

- - - -

Globalement, 5 différents moteurs de rendu sont utilisés pour naviguer sur le Web. Ils se servent de douzaines de navigateurs sur 3 plateformes.

- -

Selon de nombreuses sources, les navigateurs de type Gecko sont aujourd'hui beaucoup plus courants que les navigateurs de Netscape 4.x et de MSIE 4, et cela augmente de manière significative avec le temps. Rien que Firefox a été téléchargé plus de 50 millions de fois en l'espace de 6 mois.

- -

Dans un tel environnement, de plus en plus hétérogène, il est inimaginable de tester chaque page Web dans toutes les configurations possibles. La seule solution pratique est donc de se mettre aux standards.

- -

Dans un environnement novateur, Microsoft a sorti pour IE 8 une nouvelle balise meta qui peut être utilisée pour déclencher dans les sites le mode des Standards Web. En même temps, les anciens sites qui ne sont pas en mode Standards s'afficheront toujours correctement. Même si ce geste est d'une certaine manière controversé, l'annonce a reçu énormément de soutien de la part des principaux développeurs et des partisans des standards, Jeffrey Zeldman en tête.

- -

Anciens navigateurs : Netscape 4 et IE4

- -

Le seul inconvénient avec l'utilisation de CSS est que les anciens navigateurs (surtout IE4 et NS4) ne sont pas en mesure de l'afficher correctement. Dans certains cas, par exemple si le public est nombreux à naviguer sur Netscape 4.x, la solution peut être d'utiliser de simples tableaux pour la mise en page, et CSS pour le contrôle des polices. Une autre option serait de fournir du contenu HTML aux utilisateurs de Netscape 4.x, sans le style CSS. Le contenu sera utilisable, mais beaucoup moins attractif que dans les navigateurs modernes. De plus, les navigateurs 4.x sont connus pour leurs problèmes de sécurité : leurs utilisateurs devraient donc être encouragés à les mettre à jour.

- -

Une accessibilité réglementée

- -

Les organismes gouvernementaux de nombreux pays (US, UK, Canada) ont l'obligation d'être accessibles, et, dans certains pays comme l'Australie, cela s'applique à toutes les organisations. Aux États-Unis, la Section 508 s'applique aux agences et aux projets financés par le gouvernement.

- -

En utilisant les standards (surtout CSS pour le positionnement, ainsi que du HTML strict), l'accessibilité est un but plus facile à atteindre. Car les standards ont en effet été créés dans un souci d'accessibilité.

- -

Pour bien entretenir l'accessibilité, il faut être capable d'offrir un contenu Web à un plus grand public, accroissant ainsi l'ergonomie/l'utilisabilité d'un site Web, même pour les personnes non handicapées.

- -

Pour les développeurs qui souhaitent surtout accéder à des fonds publics, ou qui travaillent avec des organismes de charité ou socialement responsables, une des clefs les plus importantes est de s'harmoniser avec la législation pertinente de sa juridiction. Tout aussi crucial que le besoin évident de se soumettre à la loi, l'adoption des standards web le plus souvent possible indique clairement un esprit de responsabilité sociale communautaire. De nombreux leaders industriels appliquent cette façon de pensée à tout ce qu'ils font. Les sites qui ne satisfont que l'égo du concepteur et de très peu d'autres personnes vont subir un avenir commercial de plus en plus difficile.

- -

Le processus de développement : travailler en équipe

- -

Un code écrit par d'autres développeurs représente un défi commun à tous les développeurs Web qui assurent la gestion des sites existants. Dans de nombreux cas, ils sont confrontés à un code HTML de très mauvaise qualité, qui dépend aussi parfois de fonctions et de programmes non-documentés, ainsi que de pratiques de codage spécifiques. Le manque de documentation est aussi souvent problématique.

- -

Suivre les documents sur standards-compliance in requirements est une manière très efficace d'assurer une qualité mesurable du produit fini, le W3C étant un juge impartial (le World Wide Web Consortium, abrégé par le sigle W3C, est un organisme de normalisation fondé en octobre 1994 comme un consortium chargé de promouvoir la compatibilité des technologies du World Wide Web telles que HTML, XHTML, XML, RDF, CSS, PNG, SVG et SOAP. Le W3C n'émet pas des normes au sens européen, mais des recommandations à valeur de standards industriels).

- -

Comme les standards sont très bien documentés, une nouvelle personne qui viendrait reprendre des codes respectueux des standards peut commencer immédiatement, et n'a pas besoin de se familiariser avec les pratiques de codage du développeur antérieur. Cela réduit aussi de manière significative les enfermements propriétaires

- -

Standards Web : enrichir l'expérience utilisateur

- -

Tout l'esprit des Standards Web découle du fait qu'ils évoluent grâce à l'expérience utilisateur. Cet esprit n'est déterminé ni par les concepteurs graphiques, ni par les développeurs de générateurs de code propriétaires, ni par le besoin d'effectuer une gymnastique de codage tridimensionnelle pour pouvoir faire face aux vendeurs de navigateurs et d'autres agents utilisateurs. Afin d'améliorer cette expérience utilisateur, les objectifs les plus importants du développement utilisant les standards sont les fameux jumeaux utilisabilité et accessibilité. Le fait d'employer simplement — et assez grossièrement — une expérience utilisateur agréable, satisfaisante et épanouissante se traduit par un trafic plus dense, plus de visiteurs récurrents, moins de rebonds, plus de temps pour flâner, plus de clics suivis. Finalement, cette expérience utilisateur améliorée permet d'atteindre les objectifs d'affaires ou opérationnels du site. Un dialogue plus ouvert, plus de ventes, et d'une certaine manière plus de personnes qui interagissent avec l'opérateur du site.

- -

Les sites créés à partir de méthodologies, de processus, et de la pratique des standards Web réalisent de loin — et en tout point de vue — les meilleures performances. Ils se chargent plus rapidement, sont plus faciles à retrouver dans les moteurs de recherche, et ils organisent et délivrent efficacement leur contenu. L'utilisateur peut profiter de toutes ces merveilleuses expériences, sans jamais se soucier de la plateforme, du logiciel, du système d'exploitation, ni de douzaines d'autres variables telles que la taille de l'écran, la résolution du texte, l'activation de JavaScript, ou n'importe quel handicap que rencontre l'utilisateur.

- -

Conclusion

- -

L'utilisation de standards Web, ainsi que la séparation entre la structure et la présentation, rapporte un bon nombre de bénéfices pour aujourd'hui et demain.

- -

Pour aujourd'hui, cela représente un public plus nombreux, moins de dépenses d'argent pour la production d'un nouveau contenu, et de devenir conciliant envers les exigences requises par l'accessibilité.

- -

Pour demain, cela représente la réduction des enfermements propriétaires, la réduction des dépenses dans la maintenance, et plus de flexibilité dans la présentation d'un site Web. Sans oublier que l'utilisation des standards ouvre la porte aux technologies XML.

- -

Tous ces facteurs contribuent aussi à améliorer la gestion des sites, à rassembler un public plus large, et à perfectionner le retour des investissements. Lesgeeks, les marchands, et le contrôle de gestion peuvent tous bénéficier d'un site Web fondé sur les standards. Et c'est déjà plus que ce que l'on pourrait espérer….

diff --git a/files/fr/archive/standards_du_web/le_sniffing_de_doctype_dans_mozilla/index.html b/files/fr/archive/standards_du_web/le_sniffing_de_doctype_dans_mozilla/index.html deleted file mode 100644 index 77084464d7..0000000000 --- a/files/fr/archive/standards_du_web/le_sniffing_de_doctype_dans_mozilla/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Le sniffing de DOCTYPE dans Mozilla -slug: Archive/Standards_du_Web/Le_sniffing_de_DOCTYPE_dans_Mozilla -tags: - - Développement_Web -translation_of: Archive/Web_Standards/Mozilla_s_DOCTYPE_sniffing ---- -

 

-

Ce document décrit comment Mozilla utilise la déclaration DOCTYPE pour choisir entre le mode strict et le mode dégradé quirks. Le code qui permet cette détermination est la fonction DetermineParseMode() dans nsParser.cpp. Consultez le bug 1312 et le bug 55264 pour plus d'informations sur l'histoire de cette détermination. Consultez le bug 153032 pour la création du mode « presque standard » depuis Mozilla 1.0. L'objectif recherché pour ce comportement a été le suivant :

- -

En d'autres termes, l'algorithme est la meilleure approximation que nous ayons trouvée pour déterminer quelles pages ont été écrites après que Mozilla ne devienne un navigateur important sur le Web.

-

Mode standard complet

-

Les lignes suivantes déclenchent le mode standard complet :

- -

Mode presque standard

-

Les lignes suivantes déclenchent le mode presque standard. Le mode presque standard a été créé après les versions 1.0 et 1.1alpha de Mozilla, mais avant les versions 1.0.1 et 1.1beta. Avant la création de ce mode, ces doctypes permettaient de basculer en mode standard complet.

- -

Mode dégradé quirks

-

Les lignes suivantes déclenchent le mode quirks (cette liste doit être complète afin que les pages existantes sur le Web basculent en mode quirks) :

-

Les sites suivants ont été utiles pour préparer cette liste : W3C HTML Validator, HTMLHelp HTML Validator.

- -

Notez que toutes les comparaisons d'identificateurs publics sont insensibles à la casse, à cause du nombre important de pages qui utilisent des identificateurs ayant une casse incorrecte (ce qui est techniquement incorrect puisque les chaînes de caractères sont sensibles à la casse).

-

Voir aussi

- -
-

Informations sur le document original

- -
-

 

diff --git "a/files/fr/archive/standards_du_web/probl\303\250mes_soulev\303\251s_par_le_pseudo_\303\251l\303\251ment_hover/index.html" "b/files/fr/archive/standards_du_web/probl\303\250mes_soulev\303\251s_par_le_pseudo_\303\251l\303\251ment_hover/index.html" deleted file mode 100644 index 7cc2a12604..0000000000 --- "a/files/fr/archive/standards_du_web/probl\303\250mes_soulev\303\251s_par_le_pseudo_\303\251l\303\251ment_hover/index.html" +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Problèmes soulevés par le pseudo élément hover -slug: Archive/Standards_du_Web/Problèmes_soulevés_par_le_pseudo_élément_hover -tags: - - CSS -translation_of: Archive/Web_Standards/Issues_Arising_From_Arbitrary-Element_hover ---- -

 

-


- Summary: Thanks to long-standing limitations, we're used to thinking of hover styles as applying only to hyperlinks, which has led to some sloppy authoring practices that are now causing problems for some Web sites. This technote explains the source of the problems and how to avoid encountering them.

-

Beaucoup d'auteurs utilisent la pseudo-classe CSS2 :hover pour appliquer un style à leurs liens. Cette innovation, introduite en premier par Microsoft® Internet Explorer et adoptée dans les spécifications CSS, est très populaire pour styler des liens texte, en remplacement des « rollovers » faits en JavaScript. Toutefois, le support avancé de CSS dans les navigateurs a entraîné des comportements agressifs inattendus sur certaines pages.

-

Hover et éléments non-liens

-

Le chapitre 5.11.3 de CSS2 définit les trois types de pseudo-classes (:hover, :active, et :focus) et mentionne que :

-
- CSS ne définit pas lesquels des éléments peuvent être dans un de ces états ou comment ceux-ci entrent et sortent de ces états. L'écriture peut varier, selon que les éléments réagissent aux actions de l'utilisateur, ou non, et les divers appareils et agents utilisateurs peuvent avoir différentes façons de désigner ou d'activer les éléments.
-

Ainsi, bien que les auteurs s'imaginent que ces trois états ne s'appliquent exclusivement qu'aux liens hypertexte, il n'y a pas de limitation dans CSS2. Tout élément peut, en théorie, se trouver dans l'un de ces trois états et être stylé selon ces états. Ce n'était pas traditionnellement le cas.

-

Pseudo-classes nues

-

La seconde partie du problème vient lorsque nous considérons les effets d'une pseudo-classe « nue » dans un sélecteur. Par exemple :

-
:hover {color: red;}
-
-

Cette règle est équivalente à la règle CSS2 suivante :

-
*:hover {color: red;}
-
-

…qui se traduit en « tout élément survolé aura sa couleur d'écriture mise en rouge ». Ainsi, le survol de paragraphes, de tableaux, d'en-têtes et tous autres éléments dans un document coloriera le texte en rouge.

-

Une variante classique consiste à utiliser une classe nue et une pseudo-classe hover comme ceci :

-
.nav:hover {color: red;}
-
-

Les situations où seules les instances de la valeur nav de la classe class sont appliquées aux liens hypertextes fonctionnent correctement. Cependant, les règles de ce type se rencontrent habituellement avec des balises comme ceci :

-
<td class="nav">
-<a href="one.html" class="nav">un</a> |
-<a href="two.html" class="nav">deux</a> |
-<a href="thr.html" class="nav">trois</a> |
-<a href="fou.html" class="nav">quatre</a>
-</td>
-

Comme la cellule du tableau a une class à nav, le caractère barre verticale virera en rouge lorsque l'utilisateur déplacera la souris n'importe où dans la cellule. Les liens vireront également en rouge lorsqu'ils sont survolés.

-

Comportement de Gecko

-

Dans les navigateurs basés sur des compilations de Gecko postérieures à 20020410 (Netscape 6.1+), les styles :hover peuvent s'appliquer à n'importe quel élément d'un document. De ce fait, les auteurs qui ont employé des pseudo-classes nues ou leur combinaisons, risquent de voir ce style s'appliquer même à d'autres éléments que leurs liens. La meilleure parade est d'ajouter l'élément ancre aux sélecteurs comme ceci :

-
a:hover {color: red;}
-a.nav:hover {color: red;}
-
-

Pour éviter le plus possible les problèmes avec des documents anciens, les navigateurs basés sur Mozilla 1.0 et suivant (Netscape 7+) incluent du code permettant aux pseudo-classes d'être restreintes aux seuls liens seulement si le document est rendu dans le mode « quirks ». Dans les navigateurs basés sur un moteur postérieure à Mozilla 1.3b, ce mode quirk a été étendu pour couvrir les sélecteurs qui combinent un sélecteur de classe nu avec la pseudo-classes :hover (voir le bug 169078 pour plus de détails).

-

Problèmes des ancres nommées

-

En plus des effets précédemment décrit, il y a deux autres effets relativement répandus que les auteurs de pages Web peuvent ne pas désirer. Le premier est facilement corrigible grâce à la validation du document, mais le second est un peu plus subtil.

-

Tout d'abord, il y a le problème des ancres nommées ouvertes mais non fermées. Par exemple :

-
<a name="pagetop">
-<h2>My Page</h2>
-
-

Sans balise de fermeture </a>, le name englobera la suite du document. Ceci signifie généralement que la suite du document se verra attribuer les styles hover. Considérons les effets de la règle suivante :

-
a:hover {color: red;}
-
-

Dans un document comportant une ancre nommée non fermée, tout texte suivant la balise d'ouverture de l'ancre sera coloré en rouge (à moins qu'une autre règle CSS ne soit définie).

-

Ceci nous amène au second problème, qui est que les ancres nommées peuvent accepter des styles hover. Bien que les auteurs désirent souvent que le sélecteur a:hover ne s'applique qu'aux hyperliens, il peut également s'appliquer aux ancres nommées, puisque le sélecteur spécifie que chaque élément a sera stylé lors de son survol. Afin d'éviter de problème, les auteurs devraient utiliser la syntaxe de la pseudo-classe combinée décrite dans CSS2 :

-
a:link:hover {color: red;}
-a:visited:hover {color: maroon;}
-
-

Remarquez qu'avec cette syntaxe, il est possible de styler les liens visités et non visités différemment lorsqu'ils sont survolés. Ce n'était pas possible avec un simple a:hover. Cela signifie, bien entendu, que le sélecteur a:link:hover ne s'appliquera qu'aux liens non visités, ainsi les auteurs désireux d'obtenir le même style pour les liens visités et non visités lors du survol doivent grouper les deux sélecteurs dans une seule et unique règle.

-

Recommendation

-

Pour éviter les problèmes inattendus, les auteurs sont fortement encouragés à inclure des noms d'élément dans les pseudo-classes dynamiques qui sont destinées à être appliquées aux hyperliens. En outre, combiner des pseudo-classes prévient l'application de styles :hover à des ancres qui ne sont pas des hyperliens. Ainsi, a:hover devrait toujours être utilisé à la place du simple :hover, et a:link:hover (et a:visited:hover) sont préférables à un simple a:hover.

-

Liens connexes

- -
-

Informations sur le document original

- -
-

Interwiki Languages Links

-

diff --git a/files/fr/archive/standards_du_web/rdf_en_cinquante_mots/index.html b/files/fr/archive/standards_du_web/rdf_en_cinquante_mots/index.html deleted file mode 100644 index daa552c354..0000000000 --- a/files/fr/archive/standards_du_web/rdf_en_cinquante_mots/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: RDF en cinquante mots -slug: Archive/Standards_du_Web/RDF_en_cinquante_mots -tags: - - RDF -translation_of: Archive/Web_Standards/RDF_in_Fifty_Words_or_Less ---- -

D'accord, peut-être qu'il y a un peu plus de cinquante mots, mais les points-clés sont plutôt simples (et en gras pour vous les dirigeants qui voulez juste aller à l'essentiel). Le Resource Description Framework (NdT : « Cadre de description de ressources »), ou « RDF », c'est en fait deux choses.

- -

D'abord, RDF est un modèle à base de graphes pour décrire les ressources Internet (comme les pages web ou les emails), et comment ces ressources sont liées les unes aux autres.

- -

Mais qu'est-ce que cela signifieréellement ? Pour un développeur Mozilla, cela veut dire que le modèle de donnée RDF (le « graphe ») peut être utilisé comme mécanisme pour intégrer et organiser les ressources Internet.

- -

Prenons un exemple : les marque-pages. Actuellement, la plupart des navigateurs vous permettent d'organiser hiérarchiquement vos marque-pages dans desdossiers. Chaque marque-page est unpointeur vers une page web, appelé URI (Uniform Resource Identifier, ou identifiant uniforme de ressource).

- -

Mais une page web est seulement une sorte de ressource Internet. Il y en a des tonnes d'autres, dont les emails, les articles de news Usenet (ou les newsgroups Usenet entiers), et les résultats de recherche de votre moteur de recherche favori, pour n'en citer que quelques uns. Et fondamentalement, il n'y a aucune raison pour que vous ne traitiez pas ces ressources comme des « marque-pages », en les regroupant dans des dossiers selon votre bon plaisir, ou même en créant des dossiers « intelligents » qui, quand vous les ouvrez, génèrent leur contenu dynamiquement en lançant une recherche commune que vous avez définie.

- -

Et un marque-page peut vraiment avoir des propriétés arbitraires associées : vous pourriez vouloir inventer votre propre schéma « classification » pour un marque-page codé à la façon « cool » Macintosh. Ou vous pourriez vouloir relier un marque-page à un autre marque-page, ou le garder dans plusieurs « dossiers » à la fois.

- -

Le graphe RDF fournit un modèle de données parfait sur lequel construire un service de marque-pages « universel » comme décrit ci-dessus : le graphe peut contenir des pointeurs vers des ressources arbitraires et les regrouper de n'importe quelle manière que vous pouvez imaginer.

- -

Mais attendez, il y a plus…

- -

Ensuite, RDF est une syntaxe de sérialisation. Cette syntaxe permet aux modèle à base de graphes d'être transmis entre « agents ».

- -

D'accord, qu'est-ce que ça peut bien vouloir dire ? Fondamentalement, cela signifie que les parties du modèle de données RDF peuvent être communiquées au-delà des frontières du réseau, et les contenus du graphe peuvent changer dynamiquement lorsque l'information provient d'un service distant.

- -

Reprenons l'exemple des marque-pages. Disons que l'un de mes « dossiers » de marque-pages est réellement un pointeur vers ma boîte de réception : lorsque j'ouvre ce dossier,voilà! Tous les messages que j'ai reçus dans la nuit apparaissent.

- -

Mais comment cela marche-t-il ? Le dossier « boîte de réception » était en fait un simple pointeur vers une ressource Internet qui contient plus de RDF qui étendent le graphe. Cette « ressource Internet » était une URI qui pointait vers un script CGI (disons, http://www.mozilla.org/smart-mail/get-mail.cgi?user=waterson&folder=inbox). Le script CGI génère en fait duRDF sérialisé, qui est simplement un moyen de formater un graphe en XML :

- -
<rdf:RDF
-    xmlns:rdf="http://www.w3.org/TR/WD-rdf-syntax#"
-    xmlns:sm="http://www.mozilla.org/smart-mail/schema#">
-  <rdf:Description
-    about="http://www.mozilla.org/smart-mail/ge...n&folder=inbox">
-    <sm:message id="4025293">
-       <sm:recipient>
-         Chris Waterson "waterson@netscape.com"
-       </sm:recipient>
-       <sm:sender>
-         Aunt Helga "helga@netcenter.net"
-       </sm:sender>
-       <sm:received-by>x-wing.mcom.com</sm:received-by>
-       <sm:subject>Great recipe for Yam Soup!</sm:subject>
-       <sm:body>
-         http://www.mozilla.org/smart-mail/ge...cgi?id=4025293
-       </sm:body>
-    </sm:message>
-    <sm:message id="4025294">
-       <sm:recipient>
-         Chris Waterson "waterson@netscape.com"
-       </sm:recipient>
-       <sm:sender>
-         Sarah Waterson "waterson.2@postbox.acs.ohio-state.edu"
-       </sm:sender>
-       <sm:received-by>x-wing.mcom.com</sm:received-by>
-       <sm:subject>We won our ultimate game</sm:subject>
-       <sm:body>
-         http://www.mozilla.org/smart-mail/ge...cgi?id=4025294
-       </sm:body>
-    </sm:message>
-  </rdf:Description>
-</rdf:RDF>
-
- -

À la réception de la monstruosité ci-dessus, le moteur RDF incorpore le RDF à la bonne place dans le graphe, et le contrôle arbre qui implémente réellement l'UI dans le marque-page est informé qu'il devrait commencer à dessiner des icônes pour le dernier message sur la purée de patate douce de Tante Helga.

- -

C'estexactement comme ça que fonctionne SmartMail.

diff --git a/files/fr/archive/standards_du_web/utiliser_des_titres_corrects_avec_des_feuilles_de_styles_externes/index.html b/files/fr/archive/standards_du_web/utiliser_des_titres_corrects_avec_des_feuilles_de_styles_externes/index.html deleted file mode 100644 index c97ae34880..0000000000 --- a/files/fr/archive/standards_du_web/utiliser_des_titres_corrects_avec_des_feuilles_de_styles_externes/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Utiliser des titres corrects avec des feuilles de styles externes -slug: >- - Archive/Standards_du_Web/Utiliser_des_titres_corrects_avec_des_feuilles_de_styles_externes -tags: - - CSS -translation_of: Archive/Web_Standards/Correctly_Using_Titles_With_External_Stylesheets ---- -

-Les feuilles de style externes sont souvent associées aux documents HTML en utilisant l'élément link, mais il est important d'en employer correctement les attributs. En effet, il y a trois sortes de feuilles de style, et l'attribut title est la clé de deux d'entre elles. Sa présence dans un élément link qui référence une feuille de style externe transforme celle-ci en feuille de style par défaut. Dans la plupart des cas, ceci conduira la feuille de style externe à être ignorée, ce qui n'est généralement pas l'intention de l'auteur. -

-

Pourquoi les titres sont-ils importants

-

L'attribut title détermine la façon dont votre feuille de style externe s'applique à votre document. En fait, l'utilisation de l'attribut title est tellement significative que le HTML 4.01 classe les feuilles de style par catégorie selon sa présence ou son absence. En spécifiant un attribut title, vous pouvez décider si une feuille particulière affecte le document en permanence ou si elle est employée seulement dans certaines circonstances.

Il y a trois sortes de feuilles de style possibles : permanente, par défaut et alternative. Les auteurs sont surtout familiarisés avec les feuilles de style permanentes, qui peuvent s'appliquer simultanément en n'importe quel nombre à un document. Une feuille de style permanente n'a pas d'attribut title et son attribut rel a la valeur stylesheet. Un document peut se référer à une ou plusieurs feuilles de style permanentes, qui seront toutes utilisées pour sa présentation.

Une feuille de style par défaut, quant à elle, a un attribut rel doté de la valeur stylesheet et un attribut title de n'importe quelle valeur. En voici deux exemples :

-
<link type="text/css" rel="stylesheet" title="Basic styles" href="basic.css" />
-<link type="text/css" rel="stylesheet" title="Fish and boats" href="ocean.css" />
-
-

Selon la spécification HTML 4.01, seulement une et une seule feuille de style par défaut peut être utilisée à la fois. Dès lors, dans l'exemple ci-dessus, une seule des deux feuilles de style par défaut sera appliquée au document. La spécification ne fournit pas de procédure pour décider laquelle doit être utilisée ; les agents utilisateur sont donc libres de choisir.

Par conséquent, aucun link vers une feuille de style incluant un attribut title ne sera permanent. Il risque au contraire d'être ignoré par le navigateur. N'importe quel élément link se rapportant à une feuille de style avec un attribut title doit être par défaut ou alternatif, selon la valeur de l'attribut rel.

Dans un document qui propose des styles alternatifs, la feuille de style par défaut sera employée à condition qu'aucun des styles alternatifs ne soit choisi par l'utilisateur. Ainsi, quand le document est chargé, le navigateur emploiera tous les styles permanents et une des feuilles de style par défaut (mais attention, il ne peut y avoir qu'un seul style par défaut). Lorsque l'utilisateur choisit un des styles alternatifs, le style par défaut ne sera plus employé, bien que l'utilisateur puisse toujours le sélectionner à nouveau.

Le rôle essentiel des styles par défaut est d'indiquer le style de préférence pour l'affichage du document ; c'est-à-dire que c'est sa « présentation » par défaut. Si l'une ou l'autre des feuilles de style alternatives est choisie, alors le style par défaut est ignoré en faveur du style alternatif choisi par l'utilisateur. Ceci diffère donc des styles permanents qui sont toujours appliqués au document, qu'un style alternatif ait été choisi ou pas. -

-

Recommandations

-

Les auteurs doivent s'assurer que chaque feuille de style qui doit toujours s'appliquer est permanente et non alternative. Pour citer la Spécification HTML 4.01, section 14.3.1 :

-
- -
-

Liens

- -
-

Document original

- -
diff --git a/files/fr/archive/themes/create_your_own_firefox_background_theme/index.html b/files/fr/archive/themes/create_your_own_firefox_background_theme/index.html deleted file mode 100644 index fef2634185..0000000000 --- a/files/fr/archive/themes/create_your_own_firefox_background_theme/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Créez ta propre thème de arrière plan pour Firefox -slug: Archive/Themes/Create_Your_Own_Firefox_Background_Theme -translation_of: Archive/Themes/Create_Your_Own_Firefox_Background_Theme ---- -

Comment créer ta propre thème de arrière-plan

- -
-

Les thèmes s'agissent d'une graphique "en-tête", qui style l'arrière-plan de l'IU de Firefox.

- -

Terminé votre conception? Vous pouvez la soumettre tout de suite!

- -

Créer une image de thème d'en tête

- -

L'image d'en-tête image est affiché comme l'arrière plan en haut de la fenêtre de navigateur, derrière les barres d'outils, barre d'addresse, et la barre de recherche. Il sera fixé au coin haut à droit du fenêtre de navigateur.

- -

- - - -

Conditions de l'image

- - - -

Conseils

- - - -

Éditeurs d'images enlignes

- - - -

Créer une image de thème de bas de page

- -

Dans les versions anciennes de Firefox, ou les versions neuves avec certains "add-ons" installés, l'image de bas de pas est affiché comme l'arrière plan du fond du fenêtre de navigateur, derrière la barre des "add-ons" et la barre de retrouver. Il sera fixé au coin fond à gauche du fenêtre de navigateur. L'image de bas de page est optionelle.

- -

- - - -

Conditions de l'image

- - - -

Conseils

- - - -

Soumettre vos images de thème

- -

Pour commencer à soumettre vos images, aller au page Soumission de Thèmes:

- -
    -
  1. Nommez votre thème — choisissez un nom unique pour votre thème. Les noms doubles ne sont pas permis, donc vous pourriez devoir essayer quelque fois pour trouver un nom unique.
  2. -
  3. Choisissez une catégorie et des étiquettes  — selectionnez une catégorie et saisissez des étiquettes qui décrivent votre thème. Gardez en tête qu'un réviseur pourrait réjeter votre thème si il est évident que la catégorie ou les étiquettes ne sont pas liés à votre thème.
  4. -
  5. Décrirez votre thème — écrivez une déscription courte de votre thème. Gardez en tête qu'un réviseur pourrait réjeter votre thème si votre déscription ne répresente pas votre thème.
  6. -
  7. Choisissez une license pour ton thème — décidez d'un type de license de copyright pour votre thème Lire plus sur les types de licenses "Creative Common" -
      -
    • Important: Soyez certain que vous avez le droit d'utiliser l'image dans votre thème!
    • -
    -
  8. -
  9. Mettrez vos images en ligne — soyez certain qu'ils ne sont pas plus grands que 300 KO, et sont en format JPG ou PNG!
  10. -
  11. Selectionnez des couleurs pour la texte et les onglets — vous pouvez choisir la couleur pour la texte et l'arrière plan des onglets qui fonctionnent la meilleure avec votre image de thème en tête.
  12. -
  13. Voir en avant-première votre thème — vous êtes prèt pour en avant-première votre thème! Simplement passez la souris au dessous de l'image en haut du bouton Submit Theme pour voir à quoi ça ressemble.
  14. -
  15. Soumettrez votre thème — si tout a l'air correct, cliquez la bouton Submit Theme et vous avec terminé! Vous pouvez voir tous vos thèmes sur ta page de profil. -
      -
    • Conseil: pour t'asssurer que votre thème a été approuvé pour la galerie, soyez certain qu'il obtempère avec les directives de contenu et les conditions de service!
    • -
    -
  16. -
- -

- -

Soumettrez votre thème maintenant

- -

Plus de tutoriels

- -

Mozilla Themes Focal Point on Sizing - A tutorial on theming with a focus on sizing, by VanillaOrchids.

-
diff --git a/files/fr/archive/themes/creer_un_theme/index.html b/files/fr/archive/themes/creer_un_theme/index.html deleted file mode 100644 index fafa4f1803..0000000000 --- a/files/fr/archive/themes/creer_un_theme/index.html +++ /dev/null @@ -1,268 +0,0 @@ ---- -title: Créer un thème -slug: Archive/Themes/Creer_un_theme -translation_of: Archive/Themes/Building_a_Theme ---- -

Introduction

- -

Ce tutoriel va vous mener à travers les étapes requises pour construire un thème très basique qui va modifier la couleur de fond des barres d'outils dans Firefox.

- -
-

Note : Ce tutoriel concerne la création de thèmes pour Firefox 29 et supérieur. D'autres tutoriels existent pour créer des thèmes destinés aux versions antérieurs de Firefox. Pour un ancien tutoriel, voir Créer un thème pour Firefox.

-
- -
-
-

Note : FireFox pour Mac OS X utilise des répertoires qui ont été déplacés, ce qui peut rendre ce guide obsolète.

-
- -

Mettre en place l'environement de développement

- -

Les thèmes et extensions sont empaquetés et distribués dans des fichiers ZIP ou Paquets, avec l'extension de fichier XPI (prononcé “zippy”).

- -

Un exemple du contenu d'un fichier XPI typique d'un thème:

- -
example.xpi:
-              /install.rdf
-              /chrome.manifest
-              /preview.png
-              /icon.png
-              /chrome/
-                     browser/
-                     communicator/
-                     global/
-                     mozapps/
-
-
- -

Nous souhaitons créer une structure de fichier similaire à celle présentée ci-dessus pour notre tutoriel, donc commençons par créer un dossier pour votre thème quelque part sur votre disque dur (ex. : C:\themes\mon_theme\ ou ~/themes/mon_theme/). Dans votre nouveau dossier de thème, créez deux nouveaux fichiers texte vides, l'un nommé chrome.manifest et l'autre appelé install.rdf. Le fichier preview.png est montré comme une prévisulaisation du thème dans le paneau des thèmes de la fenêtre des modules complémentaires. Le fichier icon.png est utilisé comme une icône dans le même panneau. Nous les laisserons de côté pour l'instant, sauf si vous disposez déjà d'éléments graphiques que vous souhaitez utiliser.

- -

Les répertoires restants seront extraits depuis le thème par défaut. Pour commencer, vous devrez créer un répertoire quelque part. Copiez votre fichier omni.ja d'installation Firefox dans ce répertoire. La localisation diffère suivant le système d'exploitation :

- -

Linux: /usr/lib/MozillaFirefox/chrome/classic.jar ou /usr/lib/firefox-*.*.*/omni.ja

- -

Windows: \Program Files\Mozilla Firefox\omni.ja

- -

Mac OS X: /Applications/Firefox.app/Contents/MacOS/omni.ja

- -

Maintenant, ouvrez (ou extrayez) ce fichier dans le répertoire que vous avez créé. Il contient plusieurs dossiers, modules, jssubloader et autres. Les fichiers dont vous aurez besoin sont situés dans le dossier chrome\toolkit\skin\classic.

- -

Créez un dossier nommé chrome dans le dossier de votre thème. Ensuite, le contenu des répertoires suivants dans leurs dossiers respectifs de ce dossier.

- -
    -
  1. global dans chrome/global
  2. -
  3. mozapps dans chrome/mozapps
  4. -
- -

À présent que vous avez copié les dossiers global et mozapps, une poignée d'autres dossiers de l'archive browser/omni.ja sont requis. Ils sont situés dans le dossier du navigateur à l'emplacement mentionné ci-dessus. Les fichiers dont nous aurons besoins dans l'archive browser/omni.ja sont situés dans chrome/browser/skin/classic.

- -

Copiez les contenus des répertoires suivants dans leurs dossiers respectifs. Ceci nous donnera une base de style avec laquelle nous allons commencer à travailler.

- -
    -
  1. browser dans chrome/browser/
  2. -
  3. communicator dans chrome/communicator/
  4. -
- -

La structure de vos répertoires doit être comme suit :

- -
<ext path>/
-          /install.rdf
-          /chrome.manifest
-          /chrome/
-                 browser/
-                 communicator/
-                 global/
-                 mozapps/
-
- -

Après ces étapes, nous vous recommandons de lire l'article Setting up extension development environment et les indications qui y sont données. En particulier, vous devrez installer le DOM Inspector, que nous utiliserons dans les étapes suivantes

-
- -
-

Création du Manifeste d'Installation (Install Manifest)

- -

Ouvrez le fichier nommé install.rdf que vous avez créé en haut de la hierarchie de votre répertoire d'extention et ajoutez-y le contenu suivant :

- -
<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>sample@example.net</em:id>
-    <em:version>1.0</em:version>
-    <em:type>4</em:type>
-
-    <!-- Target Application this theme can install into,
-         with minimum and maximum supported versions. -->
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-        <em:minVersion>29.0</em:minVersion>
-        <em:maxVersion>32.*</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:name>My Theme</em:name>
-    <em:internalName>sample</em:internalName>
-    <em:description>A test extension</em:description>
-    <em:creator>Your Name Here</em:creator>
-    <em:homepageURL>http://www.example.com/</em:homepageURL>
-  </Description>
-</RDF>
-
- - - -

Si vous obtenez un message qui vous informe que install.rdf est mal formé, il est utile de le charger dans Firefox en utilisant la commande Fichier->Ouvrir un fichier et il vous rapportera les erreurs XML.

- -

Voir Install Manifests pour une liste complète des propriétés requises et optionelles.

- -

Sauvegardez le fichier.

-
- -
-

Styliser l'interface du navigateur avec CSS

- -

L'interface utilisateur de Firefox est écrite en XUL et JavaScript. XUL est une grammaire XML qui fournit des modules d'interface utilisateur comme les boutons, menus, barres d'outils, arbres, etc. Les actions utilisateur possèdent leurs fonctionnalités en utilisant du JavaScript. Ces éléments XUL sont stylisés en utilisant du CSS. Si vous ne connaissez pas le CSS, ce sera une pente abrupte de votre apprentissage, et vous devriez essayer des tutoriels basés sur le HTML pour commencer.

- -

L'interface utilisateur du navigateur n'a absolument aucun style de base - si vous essayez de commencer avec un thème vide, Firefox deviendra inutilisable, car les boutons seront uniquement du texte. C'est pourquoi nous avons copié le style par défaut dans l'étape d'organisation.

- -

Lors de l'écriture d'un thème, la manière la plus simple de déterminer quels selecteurs CSS vous avez besoin d'écrire est d'utiliser l'inspecteur DOM que vous devriez avoir installé à l'étape d'organisation. Vous pouvez utiliser cela pour inspecter n'importe quel élément dans une page web ou un document XUL, ce qui en fait quelque chose d'important pour les thèmes.

- -

Modifier le style de la barre d'outils

- -
-

Note Dans Firefox 4.0 et supérieur, l'option de surlignement de l'inspecteur DOM ne fonctionne plus. Pour contourner ça, désactivez l'accélération matérielle dans les options de Firefox.

-
- -

Ouvrez maintenant l'inspecteur DOM (Dans le menu "Outils") et allez dans "Fichier->Inspecter le document chrome". Ce devrait être un menu contenant tous les documents XUL actuellement ouverts dans Firefox.
- Prenez le premier document avec un titre de page web, comme "Page de démarrage Firefox" et sélectionnez-le.

- -

Pour ce tutoriel, nous allons modifier la couleur de fond des barres d'outils. Sélectionnez l'outil de recherche de nœud (la case de la flèche pour en voir plus dans le coin en haut à gauche de l'inspecteur DOM) et cliquez dans n'importe quel espace non-utilisé d'une barre d'outils. Cela devrait sélectionner un nœud de type "xul:toolbar" dans l'inspecteur DOM.

- -

À partir d'ici, vous pouvez vous amuser avec différents styles pour la barre d'outils et les éléments associés. Par défaut, le panneau de droite devrait montrer le nœud DOM, qui possède des informations importantes comme la classe CSS et l'id de nœud. L'élément lui-même a le simple id navigator-toolbox, sans plus. Pour accorder son style avec notre thème, nous avons besoin d'écrire une règle de sélecteur pour sélectionner cette classe.

- -

Ouvrez le fichier chrome/browser/browser.css de votre thème. Cherchez dans ce fichier le sélecteur #navigator-toolbox, et ajoutez-lui cette règle background: orange;

- -

Sauvegardez le fichier.

-
- -
-

Chrome URIs

- -

Ensuite, nous devons dire à Firefox où trouver les fichiers de thème pour votre thème. CSS, XUL et autres fichiers font partie de "Chrome Packages" - des composants d'interface utilisateur qui sont chargés via chrome:// URIs. Plutôt que de charger le navigateur depuis le disque file:// URI (car l'emplacement de Firefox sur le système peut changer d'une plateforme à l'autre), les développeurs de Mozilla ont mis au point une solution de création d'URI pour le contenu de l'add-on.

- -

La fenêtre du navigateur est: chrome://browser/content/browser.xul. Essayez de taper cette URL dans la barre d'adresse dans Firefox !
-
- Les URI de Chrome se composent de plusieurs composants:

- - - -

Alors, chrome://foo/skin/bar.png charge le fichier bar.png de la section skin du thème foo.

- -

Lorsque vous chargez du contenu à l'aide d'un URI Chrome, Firefox utilise le Registre Chrome pour traduire ces URI dans les fichiers source réels sur le disque (ou dans les packages JAR).

-
- -
-

Creer un Chrome Manifest

- -

Le manifeste Chrome est le fichier qui mappe ces URI Chrome vers les fichiers de votre thème. Pour plus d'informations sur les Manifestes Google Chrome et les propriétés qu'ils prennent en charge, Chrome Manifest reference.

- -

Ouvrez le fichier chrome.manifest que vous avez créé à côté du répertoire chrome à la racine de la hiérarchie des dossiers source de votre extension.
-
- Ajouter dans ce code:

- -
skin    browser         sample   chrome/browser/
-skin    communicator    sample   chrome/communicator/
-skin    global          sample   chrome/global/
-skin    mozapps         sample   chrome/mozapps/
-
- -

N'oubliez pas la barre oblique, "/" ! Sans elle, le paquet ne sera pas enregistré. La troisième colonne doit correspondre à la valeur Nom interne de votre thème à partir du manifeste d'installation ci-dessus.

- -

Cela liste les répertoires de l'apparence dans les emplacements de votre thème. Par exemple, le skin de l'explorateur de skin de ligne / navigateur / signifie "lorsque l'utilisateur a sélectionné l'exemple de thème sélectionné, utilisez le navigateur d'annuaire / pour rechercher des skins pour le package de navigateur". Plus concisément, cela signifie que l'URL chrome://browser/skin/some/path/file.css recherchera un navigateur de fichiers / some / path / file.css dans le répertoire racine de votre thème.

- -

Enregistrer le fichier.

-
- -
-

Test

- -

Tout d'abord, nous devons informer Firefox de l'existence de votre thème. Depuis Firefox 2.0 et supérieur, au cours de la phase de développement , vous pouvez faire pointer Firefox vers le dossier où vous développez le thème et le charger à chaque redémarrage de Firefox.

- -
    -
  1. Localisez votre dossier de prifil et en dessous le profil avec lequel vous souhaitez travailler (e.g. Firefox/Profiles/<profile_id>.default/).
  2. -
  3. Ouvrez l'extension / folder, en le créant, si nécessaire.
  4. -
  5. Créez un nouveau fichier texte et placez le chemin d'accès complet à votre dossier de développement à l'intérieur (e.g. C:\themes\my_theme\ or ~/themes/my_theme/). Les utilisateurs de Windows doivent conserver la direction du slash du système d'exploitation, et tout le monde devrait se rappeler d'inclure une barre oblique de fermeture et de supprimer les espaces à la fin.
  6. -
  7. Enregistrer le fichier avec l'ID de votre thème comme son nom (e.g. sample@example.net). Pas d'extension de fichier.
  8. -
- -

Maintenant, vous devriez être prêt à tester votre thème !
-
- Démarrez Firefox. Firefox détecte le lien texte vers votre répertoire de thèmes et installe le thème. Votre thème ne sera pas actif la première fois que vous l'installez, et vous devrez cliquer sur "Activer" et redémarrer avant de pouvoir voir votre changement. Après avoir redémarré cette deuxième fois, vous devriez voir que la couleur d'arrière-plan des barres d'outils s'affiche maintenant en orange.

- -

Vous pouvez maintenant revenir en arrière et apporter des modifications supplémentaires à vos fichiers css, fermer et redémarrer Firefox, et voir les mises à jour.

-
- -
-

Package

- -

Maintenant que votre thème fonctionne, vous pouvez créer un package pour le déploiement et l'installation.

- -

Zip le contenu du dossier de votre thème (pas le dossier thème lui-même), et renommez le fichier zip pour avoir une extension .xpi. Dans Windows, vous pouvez le faire facilement en sélectionnant tous les fichiers et sous-dossiers dans votre dossier d'extension, faites un clic droit et choisissez "Envoyer vers -> Dossier compressé (zippé)". Un fichier .zip sera créé pour vous. Il suffit de renommer et vous avez terminé!

- -

Sur Mac OS ou Linux, vous pouvez utiliser l'outil zip de ligne de commande:

- -
zip -r my_theme.xpi install.rdf chrome.manifest browser communicator global mozapps
-
- -

Ou, si vous avez 7-Zip installé, vous pouvez l'utiliser pour le zipper ceci:

- -
7z a -tzip my_theme.xpi chrome chrome.manifest
-
- -

Remarque: L'outil en ligne de commande met à jour un fichier zip existant et ne le remplace pas - donc si vous avez supprimé des fichiers de votre thème, supprimez le fichier .xpi avant de lancer la commande zip.

- -

Maintenant, téléchargez le fichier .xpi sur votre serveur, en vous assurant qu'il est servi en tant qu'application / x-xpinstall. Vous pouvez y accéder et permettre aux utilisateurs de le télécharger et de l'installer. Afin de tester notre fichier .xpi, nous pouvons simplement le glisser dans le Gestionnaire de compléments via "Outils -> Gestionnaire de compléments", ou l'ouvrir en utilisant "Fichier -> Ouvrir fichier ...".

- -
-
Installation à partir d'une page web
- -

Il existe plusieurs façons d'installer des extensions à partir de pages Web, y compris le lien direct vers les fichiers XPI et l'utilisation de l'objet InstallTrigger. Les développeurs Web ou d'add-ons devraient utiliser InstallTrigger method pour installer les XPIs, car il fournit la meilleure expérience aux utilisateurs.

-
- -
-
Utilisation d'addons.mozilla.org
- -

Mozilla Add-ons est un site de distribution où vous pouvez héberger votre thème gratuitement. Votre thème sera hébergé sur le réseau miroir de Mozilla pour garantir votre téléchargement même s'il devenait très populaire. Le site de Mozilla fournit également aux utilisateurs une installation plus facile et met automatiquement à disposition vos versions les plus récentes pour les utilisateurs de vos versions existantes lorsque vous les téléchargez. En outre, Mozilla Add-ons permet aux utilisateurs de commenter et de fournir des retours sur votre thème. Il est fortement recommandé d'utiliser Mozilla Add-ons pour distribuer vos thèmes !

- -

Visitez https://addons.mozilla.org/developers/ et créez votre compte pour proposer votre thème.

- -

Note: Votre thème sera transmis plus rapidement et plus téléchargé plus si vous en avez une bonne description et quelques captures d'écran.

-
-
- -
-
- - -

______________________________

-
-
- -

 

diff --git a/files/fr/archive/themes/index.html b/files/fr/archive/themes/index.html deleted file mode 100644 index 3313a68599..0000000000 --- a/files/fr/archive/themes/index.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Themes -slug: Archive/Themes -tags: - - TopicStub -translation_of: Archive/Themes ---- -

Documentation thématique archivée.

- - - - diff --git a/files/fr/archive/web/css/display-inside/index.html b/files/fr/archive/web/css/display-inside/index.html deleted file mode 100644 index 7db4682eb8..0000000000 --- a/files/fr/archive/web/css/display-inside/index.html +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: display-inside -slug: Archive/Web/CSS/display-inside -tags: - - CSS - - Experimental - - NeedsLiveSample - - Reference - - Web -translation_of: Archive/Web/CSS/display-inside ---- -
-

Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

-
- -

La propriété display-inside indique le type d'affichage (display type) intérieur généré par un élément, celui-ci indique la façon dont son contenu est organisé à l'intérieur de la boîte de l'élément.

- -
/* Valeurs avec un mot-clé */
-display-inside: auto;
-display-inside: block;
-display-inside: table;
-display-inside: flex;
-display-inside: grid;
-display-inside: ruby;
-
-/* Valeurs globales */
-display-inside: inherit;
-display-inside: initial;
-display-inside: unset;
-
- -

Valeur introuvable dans la base de données

- -

Syntaxe

- -

Cette propriété est définie avec un des mots-clés définis ci-après.

- -

Valeurs

- -
-
auto
-
Si la valeur calculée de display-outside pour l'élément vaut inline-level, l'élément sera un élément en ligne (inline) et organisera son contenu comme du contenu en ligne (inline). Si la valeur calculée de display-outside pour l'élément est un type de disposition spécifique interne, l'élément agit normalement selon la valeur donnée par display-outside. Sinon, la valeur calculée est block.
-
block
-
L'élément organise son contenu avec une disposition en bloc.
-
table
-
L'élément organise son contenu avec une disposition en tableau.
-
flex
-
L'élément organise son contenu avec une disposition flexible.
-
grid
-
L'élément organise son contenu avec une disposition en grille.
-
ruby
-
L'élément organise son contenu avec une disposition ruby.
-
- -

Syntaxe formelle

- -
La syntaxe n'a pas été trouvée !
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
CSS Display Module Level 3
La définition de 'display-inside' dans cette spécification.
Version de travailDéfinition initiale.
- -

Compatibilité des navigateurs

- -

Nous convertissons les données de compatibilité dans un format JSON. - Ce tableau de compatibilité utilise encore l'ancien format - car nous n'avons pas encore converti les données qu'il contient. - Vous pouvez nous aider en contribuant !

- -
- - -

- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support simplePas de supportPas de supportPas de supportPas de supportPas de support
-
- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support simplePas de supportPas de supportPas de supportPas de supportPas de support
-
- -

 

diff --git a/files/fr/archive/web/css/display-outside/index.html b/files/fr/archive/web/css/display-outside/index.html deleted file mode 100644 index 276a7d9a04..0000000000 --- a/files/fr/archive/web/css/display-outside/index.html +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: display-outside -slug: Archive/Web/CSS/display-outside -tags: - - CSS - - Experimental - - Propriété - - Reference - - Web -translation_of: Archive/Web/CSS/display-outside ---- -
{{CSSRef}}{{SeeCompatTable}}
- -

La propriété display-outside définit le type d'affichage (display type) à l'extérieur de la boîte générée par un élément et indique la façon dont l'élément s'inscrit dans le contexte de formatage de l'élément parent.

- -
/* Valeurs avec un mot-clé */
-display-outside: block-level;
-display-outside: inline-level;
-display-outside: run-in;
-display-outside: contents;
-display-outside: none;
-display-outside: table-row-group;
-display-outside: table-header-group;
-display-outside: table-footer-group;
-display-outside: table-row;
-display-outside: table-cell;
-display-outside: table-column-group;
-display-outside: table-column;
-display-outside: table-caption;
-display-outside: ruby-base;
-display-outside: ruby-text;
-display-outside: ruby-base-container;
-display-outside: ruby-text-container;
-
-/* Valeurs globales */
-display-outside: inherit;
-display-outside: initial;
-display-outside: unset;
-
- -

{{cssinfo}}

- -

Syntaxe

- -

Cette propriété est définie grâce à l'un des mots-clés définis ci-après.

- -

Valeurs

- -
-
block-level
-
L'élément génère une boîte en bloc (block-level) et s'inscrit dans un contexte de formatage en bloc. D'autres contextes de mise en forme (comme les contextes flexibles) peuvent fonctionner avec les éléments en bloc.
-
inline-level
-
L'élément génère une boîte de type inline-level et s'inscrit dans un contexte de mise en forme en ligne (inline).
-
run-in
-
L'élément génère une boîte de type run-in. Les éléments de ce type agissent comme des éléments en ligne ou comme des éléments en bloc selon les éléments qui les entourent.
-
contents
-
L'élément dispose son contenu grâce à la disposition flexible.
-
none
-
L'élément ne génère aucune boîte et ne s'inscrit dans aucun contexte de mise en forme.
-
table-row-group, table-header-group, table-footer-group, table-row, table-cell, table-column-group, table-column, table-caption
-
L'élément est un élément interne à un tableau et s'inscrit dans un contexte de mise en forme au sein d'un tableau.
-
- table-cell et table-caption sont des dispositions spécifiques de feuille (leaf type) et les autres sont des types de disposition spécifiques internes (cf. ci-après).
-
ruby-base, ruby-text, ruby-base-container, ruby-text-container
-
L'élément est un élément ruby interne et s'inscrit dans un contexte de disposition ruby.
-
- ruby-base et ruby-text sont des types de disposition de feuilles et ruby-base-container et ruby-text-container sont des types de disposition spécifiques internes (cf. ci-après).
-
Types de disposition spécifiques internes
-
Pour ces types d'affichage, il est nécessaire que l'élément parent et les éléments fils soient d'un type d'affichage particulier. Ainsi, pour une boîte table-row, il faudra que l'élément parent soit un groupe de ligne d'un tableau et il faudra que ses éléments fils soient des boîtes table-cell.
-
Types de disposition de feuille
-
Pour ces types d'affichage, il est nécessaire que l'élément parent soit d'un type d'affichage donné mais ils peuvent accepter n'importe quelle valeur pour display-inside. Ainsi, pour une boîte table-caption, il faut que le parent soit table mais l'élément peut établir n'importe quel type de contexte de mise en forme pour ses fils.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('CSS3 Display', '#the-display-outside', 'display-outside')}}{{Spec2('CSS3 Display')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support simple{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support simple{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
diff --git a/files/fr/archive/web/css/index.html b/files/fr/archive/web/css/index.html deleted file mode 100644 index 478bd56318..0000000000 --- a/files/fr/archive/web/css/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: CSS -slug: Archive/Web/CSS -translation_of: Archive/Web/CSS ---- -

Obsolète
Cette fonctionnalité est obsolète. Bien qu'encore supportée par des navigateurs, son utilisation est découragée pour tout nouveau projet. Évitez de l'utiliser.

- -

Obsolete CSS features

- -

diff --git a/files/fr/archive/web/index.html b/files/fr/archive/web/index.html deleted file mode 100644 index 9c217dd79e..0000000000 --- a/files/fr/archive/web/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Archived open Web documentation -slug: Archive/Web -tags: - - Archived - - TopicStub - - Web -translation_of: Archive/Web ---- -

La documentation répertoriée ci-dessous est un matériel archivé et obsolète sur des sujets Web ouverts..

- - - -
-
E4X
-
ECMAScript pour XML (E4X) est une extension de langage de programmation ajoutant un support XML natif à JavaScript. Cela se fait en fournissant un accès aux documents XML dans une forme qui semblera naturelle aux programmeurs ECMAScript. Son but est de proposer une syntaxe alternative et plus simple que les interfaces DOM pour accéder aux documents XML.
-
Identification de navigateur et aide sur multi-navigateurs
-
Vous pouvez vous réferez à un article ultérieur Writing forward-compatible websites pour trouver des informations plus récentes.
-
diff --git a/files/fr/archive/web/iterator/index.html b/files/fr/archive/web/iterator/index.html deleted file mode 100644 index 19e2c2142b..0000000000 --- a/files/fr/archive/web/iterator/index.html +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Iterator -slug: Archive/Web/Iterator -tags: - - JavaScript - - Legacy Iterator - - Reference -translation_of: Archive/Web/Iterator ---- -
{{jsSidebar("Objects")}}
- -
Non-standard. La fonction Iterator est une fonctionnalité propre à ECMAScript et sera retiré dans le futur. Pour utiliser des fonctions pérennes, préférer les boucles {{jsxref("Instructions/for...of")}} et le protocole itérateur.
- -

La fonction Iterator renvoie un objet implémentant le protocole itérateur historique qui permet d'itérer sur les propriétés énumérables d'un objet.

- -

Syntaxe

- -
Iterator(objet, [keyOnly])
- -

Paramètres

- -
-
objet
-
L'objet dont on souhaite itérer sur les propriétés.
-
keyOnly
-
Si keyOnly est une valeur équivalente à true, Iterator.prototype.next renverra uniquement nom_propriété.
-
- -

Description

- -

Cette fonction renvoie une instance d'Iterator qui permet d'itérer sur un objet. Pour chaque itération, l'instance renverra un tableau [nom_propriété, valeur_propriété] si keyOnly est équivalente à false. Sinon, chaque itération renverra uniquement nom_propriété. Si objet est une instance d'Iterator ou de Generator, la fonction renverra objet.

- -

Propriétés

- -
-
Iterator.prototype[@@iterator]
-
Renvoie une fonction qui renvoie l'objet itérateur afin de respecter {{jsxref("Les_protocoles_iteration", "les protocoles d'itération", "", 1)}}.
-
- -

Méthodes

- -
-
Iterator.prototype.next
-
Renvoie le prochain item élément au format [nom_propriété, valeur_propriété]. S'il n'y a plus d'éléments, l'exception {{jsxref("StopIteration")}} est levée.
-
- -

Exemples

- -

Itérer sur les propriétés d'un objet

- -
var a = {
-  x: 10,
-  y: 20,
-};
-var iter = Iterator(a);
-console.log(iter.next()); // ["x", 10]
-console.log(iter.next()); // ["y", 20]
-console.log(iter.next()); // renvoie StopIteration
-
- -

Itérer sur les propriétés d'un objet avec l'instruction historique for...in

- -
var a = {
-  x: 10,
-  y: 20,
-};
-
-for (var [nom, valeur] in Iterator(a)) {
-  console.log(nom, valeur);   // x 10
-                              // y 20
-}
-
- -

Itérer grâce à for-of

- -
var a = {
-  x: 10,
-  y: 20,
-};
-
-for (var [nom, valeur] of Iterator(a)) {
-  // @@iterator est utilisé
-  console.log(nom, valeur);   // x 10
-                              // y 20
-}
-
- -

Itérer sur les noms des propriétés

- -
var a = {
-  x: 10,
-  y: 20,
-};
-
-for (var nom in Iterator(a, true)) {
-  console.log(nom);    // x
-                       // y
-}
-
- -

Utiliser une instance de Generator

- -
function* f() {
-  yield "a";
-  yield "b";
-}
-var g = f();
-
-console.log(g == Iterator(g)); // true
-
-for (var v in Iterator(g)) {
-  console.log(v);   // a
-                    // b
-}
-
- -

Utiliser une instance d'Iterator

- -
var a = {
-  x: 10,
-  y: 20,
-};
-
-var i = Iterator(a);
-
-console.log(i == Iterator(i)); // true
-
- -

Spécifications

- -

Non-standard. Ne fait partie d'aucun standard.

- -

Compatibilité des navigateurs

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support simple{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidChrome pour AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support simple{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/activexobject/index.html b/files/fr/archive/web/javascript/extensions_microsoft/activexobject/index.html deleted file mode 100644 index a76d841666..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/activexobject/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: ActiveXObject -slug: Archive/Web/JavaScript/Extensions_Microsoft/ActiveXObject -tags: - - Déprécié - - JavaScript - - Microsoft - - Non-standard - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/ActiveXObject ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cet objet est une extension Microsoft est uniquement pris en charge par Internet Explorer (pas pour Edge ou pour les applications Windows Store à partir de Windows 8).
- -

L'objet ActiveXObject active et renvoie une référence à un objet Automation. Cet objet est uniquement utilisé afin d'instancier des objets Automation, il ne possède pas de propriété.

- -

Syntaxe

- -
let nouvelObj = new ActiveXObject(nomServeur.nomType[, emplacement])
-
- -

Paramètres

- -
-
nomServeur
-
Le nom de l'application qui fournit l'objet.
-
nomType
-
Le type ou la classe de l'objet à créer.
-
location {{optional_inline}}
-
Le nom du serveur réseau où l'objet sera créé.
-
- -

Notes

- -

Les serveurs d'automatisation fournissent au moins un type d'objet. Une application de traitement de texte pourra par exemple fournir un objet d'application, un objet de document et un objet pour une barre d'outils.

- -

Il est possible d'identifier les différentes valeurs nomServeur.nomType d'un PC grâce à la clé de registre HKEY_CLASSES_ROOT. Voici quelques exemples de valeurs qui peuvent y être trouvées selon les programmes installés :

- - - -
-

Attention ! Les objets ActiveX peuvent présenter des risques de sécurité. Afin d'utiliser ActiveXObject, il est nécessaire d'ajuster le niveau de sécurité d'Internet Explorer dans les paramètres. Pour une utilisation sur un intranet, par exemple, il faudra modifier le réglage afin d'utiliser la valeur « Initialiser et scripter les contrôles ActiveX qui ne sont pas marqués comme sûrs ».

-
- -

Afin d'identifier les propriétés des objets obtenus et si aucune documentation de référence n'est disponible, il peut être nécessaire d'utiliser un explorateur d'objet COM (tel que l'explorateur d'objets OLE/COM).

- -

Pour créer un objet Automation, il suffit d'affecter le résultat du constructeur à une variablee :

- -
var ExcelApp = new ActiveXObject("Excel.Application");
-var ExcelSheet = new ActiveXObject("Excel.Sheet");
-
- -

Ce code démarre l'application permettant de créer l'objet (ici Microsoft Excel). Une fois l'objet créé, on peut y faire référence dans le code en utilisant la variable. Dans l'exemple qui suit, on manipule la variable ExcelSheet afin d'accéder aux différentes propriétés et méthodes qui permettent de manipuler la feuille de calcul.

- -
// Rendre Excel visible grâce à l'objet Application
-ExcelSheet.Application.Visible = true;
-// Écrire du texte dans la première cellule
-ExcelSheet.ActiveSheet.Cells(1,1).Value = "Coucou";
-// Enregistrer le document
-ExcelSheet.SaveAs("C:\\TEST.XLS");
-// Quitter Excel grâce à la méthode Quit de l'objet Application.
-ExcelSheet.Application.Quit();
-
- -

Prérequis

- -

Fonctionnalité prise en charge sur les différents modes Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard, Internet Explorer 11 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -
-

Note : La création d'un objet ActiveXObject sur un serveur distant n'est pas prise en charge pour Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard, Internet Explorer 11 en mode standard et pour les applications Windows Store ou les versions ultérieures.

-
- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/at-cc-on/index.html b/files/fr/archive/web/javascript/extensions_microsoft/at-cc-on/index.html deleted file mode 100644 index f32b297a77..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/at-cc-on/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: '@cc_on' -slug: Archive/Web/JavaScript/Extensions_Microsoft/at-cc-on -tags: - - Instruction - - JavaScript - - Microsoft - - Non-standard - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/at-cc-on ---- -
{{JSRef}}{{Non-standard_header}}{{Obsolete_Header}}
- -
Attention ! La compilation conditionnelle n'est plus prise en charge à partir d'Internet Explorer 11 en mode standard et pour les applications Windows Store à partir de Windows 8.
- -

L'instruction @cc_on active la compilation conditionnelle via des commentaires placés dans le script.

- -

Syntaxe

- -
@cc_on
-
- -

Notes

- -

Lors de l'écriture d'un script destiné au Web, il est nécessaire que les instructions de compilation conditionnelle soient placées dans des commentaires afin que les environnements qui ne les prennent pas en charge puissent les ignorer.

- -

Aussi, il est fortement recommandé d'utiliser @cc_on dans un commentaire afin que les autres navigateurs puissent considérer la syntaxe du script comme valide.

- -

Une instruction @if ou @set située à l'extérieur d'un commentaire permet également d'activer la compilation conditionnelle.

- -

Exemples

- -
/*@cc_on @*/
-/*@
-  console.log("Version de JavaScript : " + @_jscript_version + ".");
-  @if (@_win32)
-    console.log("Version 32 bits de Windows.");
-  @elif (@_win16)
-    console.log("Version 16 bits de Windows.");
-  @else
-    console.log("Un autre système d'exploitation est utilisé.");
-  @end
-@*/
-
- -

Prérequis

- -

Cette instruction est prise en charge par toutes les versions d'Internet Explorer mais ne peut pas être utilisée dans les applications pour Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/at-if/index.html b/files/fr/archive/web/javascript/extensions_microsoft/at-if/index.html deleted file mode 100644 index bf7c949e33..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/at-if/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: '@if' -slug: Archive/Web/JavaScript/Extensions_Microsoft/at-if -tags: - - JavaScript - - Microsoft - - Non-standard - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/at-if ---- -
{{JSRef}}{{Non-standard_header}}{{Obsolete_Header}}
- -
Attention ! La compilation conditionnelle n'est plus prise en charge à partir d'Internet Explorer 11 en mode standard et pour les applications Windows Store à partir de Windows 8.
- -

L'instruction @if exécute un groupe d'instructions en fonction de la valeur d'une expression.

- -

Syntaxe

- -
@if (
-   condition1
-)
-   texte1
-[@elif (
-   condition2
-)
-   texte2]
-[@else
-   texte3]
-@end
- -

Paramètres

- -
-
texte1 {{optional_inline}}
-
Le texte à analyser si condition1 est vérifiée.
-
texte2 {{optional_inline}}
-
Le texte à analyser si condition1 est fausse et que condition2 est vraie.
-
texte3 {{optional_inline}}
-
Le texte à analyser si condition1 et condition2 sont fausses.
-
- -

Notes

- -

Lorsqu'on écrit une instruction @if, il n'est pas nécessaire de placer chaque clause sur une ligne séparée. Il est possible d'utiliser plusieurs clauses @elif mais celles-ci doivent nécessairement être présentes avant toute clause @else.

- -

L'instruction @if est généralement utilisée afin de déterminer quel code utiliser parmi plusieurs options.

- -

Lors de l'écriture d'un script destiné au Web, il est nécessaire que les instructions de compilation conditionnelle soient placées dans des commentaires afin que les environnements qui ne les prennent pas en charge puissent les ignorer.

- -

Exemples

- -
/*@cc_on @*/
-/*@
-  console.log("Version de JavaScript : " + @_jscript_version + ".");
-  @if (@_win32)
-    console.log("Version 32 bits de Windows.");
-  @elif (@_win16)
-    console.log("Version 16 bits de Windows.");
-  @else
-    console.log("Un autre système d'exploitation est utilisé.");
-  @end
-@*/
-
- -

Prérequis

- -

Cette instruction est prise en charge par toutes les versions d'Internet Explorer mais ne peut pas être utilisée dans les applications pour Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/at-set/index.html b/files/fr/archive/web/javascript/extensions_microsoft/at-set/index.html deleted file mode 100644 index dec4e007b9..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/at-set/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: '@set' -slug: Archive/Web/JavaScript/Extensions_Microsoft/at-set -tags: - - JavaScript - - Microsoft - - Non-standard - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/at-set ---- -
{{JSRef}}{{Non-standard_header}}{{Obsolete_Header}}
- -
Attention ! La compilation conditionnelle n'est plus prise en charge à partir d'Internet Explorer 11 en mode standard et pour les applications Windows Store à partir de Windows 8.
- -

L'instruction @set permet de créer des variables grâce à des instructions de compilation conditionnelles.

- -

Syntaxe

- -
@set @varname = term
-
- -

Paramètres

- -
-
varname
-
Un nom de variable JavaScript valide. Ce nom doit toujours être précédé d'une arobase (@).
-
term
-
Zéro ou plusieurs opérateurs unaires suivis par une constante, un variable de compilation conditionnelle ou une expression entre parenthèses.
-
- -

Notes

- -

Les variables numériques et booléennes sont prises en charge pour la compilation conditionnelle. Il n'est pas possible d'utiliser des chaînes de caractères. Les variables créées grâce à @set sont généralement utilisées au sein d'instructions de compilation conditionnelle mais peuvent être utilisées n'importe où dans du code JavaScript.

- -

Voici quelques exemples :

- -
@set @mavar1 = 12
-
-@set @mavar2 = (@mavar1 * 20)
-
-@set @mavar3 = @_jscript_version
-
- -

Les opérateurs suivants peuvent être utilisés dans les expressions entre parenthèses :

- - - -

Si une variable est utilisée avant d'avoir été définie, sa valeur par défaut sera NaN. Il est possible de vérifier si une variable vaut NaN grâce à une instruction @if :

- -
@if (@nouvelleVar !== @nouvelleVar)
-  …
-
- -

Cette méthode fonctionne car NaN est la seule valeur qui n'est pas égale à elle-même au sens de l'égalité stricte.

- -

Prérequis

- -

Cette instruction est prise en charge par toutes les versions d'Internet Explorer mais ne peut pas être utilisée dans les applications pour Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/date.getvardate/index.html b/files/fr/archive/web/javascript/extensions_microsoft/date.getvardate/index.html deleted file mode 100644 index ea1fd3c8c2..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/date.getvardate/index.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Date.getVarDate -slug: Archive/Web/JavaScript/Extensions_Microsoft/Date.getVarDate -tags: - - JavaScript - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Date.getVarDate ---- -
{{JSRef("Objets_globaux","Date")}}{{Non-standard_Header}}{{Obsolete_Header}}
- -
Non-standard. Ne doit pas être utilisé !
-Cet objet est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode getVarDate() renvoie une valeur VT_DATE à partir d'un objet {{jsxref("Date")}}.

- -

Syntaxe

- -
dateObj.getVarDate()
-
- -

Valeur de retour

- -

Une valeur de type VT_DATE.

- -

Notes

- -

La méthode getVarDate() est utilisée lorsque du code JavaScript interagit avec des objets COM, ActiveX ou d'autres objets qui utilisent des dates au format VT_DATE. Cela inclut les objets Visual Basic et VBScript. Le format définitif de la valeur renvoyé dépend des paramètres régionaux.

- -

Prérequis

- -

Fonctionnalité prise en charge sur les différents modes Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/debuggerenabled/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/debuggerenabled/index.html deleted file mode 100644 index f0db8375b9..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/debuggerenabled/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Debug.debuggerEnabled -slug: Archive/Web/JavaScript/Extensions_Microsoft/Debug/debuggerEnabled -tags: - - JavaScript - - Microsoft - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Debug/debuggerEnabled ---- -
{{JSRef}}{{Non-standard_header}}
- -

La propriété statique Debug.debuggerEnabled indique si le débogage est actif pour le contexte de script courant. Le débogage peut être activé ou désactivé qu'un débogueur soit attaché ou non.

- -

Syntaxe

- -
var dbgEnabled = Debug.debuggerEnabled;
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Internet Explorer 10 en mode standard et Internet Explorer 11 en mode standard. Elle est également prise en charge pour les applications Store (Windows 8 et Windows Phone 8.1).
- Cette fonctionnalité n'est pas prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard et Internet Explorer 9 en mode standard.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/index.html deleted file mode 100644 index 94eaeffe88..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/index.html +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Debug -slug: Archive/Web/JavaScript/Extensions_Microsoft/Debug -tags: - - JavaScript - - Microsoft - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Debug ---- -
{{JSRef}}{{non-standard_header}}
- -
Attention !
-L'objet Debug ne fonctionne qu'avec Internet Explorer et les applications Windows 8 et Windows Phone 8.1.
- -

L'objet Debug est un objet global qui permet d'envoyer des informations au débogueur.

- -

Syntaxe

- -

L'objet Debug n'est pas instancié, il fournit des propriétés et méthodes statiques.

- -

Différents outils permettent de déboguer les applications Internet Explorer et Windows 8.x Store. Pour les applications Windows 8.x Store, les méthodes statiques write et writeln fournies par Debug permettent d'afficher des chaînes de caractères dans le volet Output de Visual Studio lors de l'exécution.

- -

Pour déboguer des scripts Internet Explorer, il faut avoir un débogueur de script installé et le script exécuté en mode debug. Internet Explorer 8 et les versions ultérieures possèdent un débogueur JavaScript inégré.

- -

Si le script n'est pas en cours de débogage, les méthodes et propriétés de Debug n'auront pas d'effet.

- -

Constantes

- -

Codes de statut pour les fonctions de rappel asynchrones

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstanteDescriptionValeur
Debug.MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATELa tâche synchrone a affecté une fonction de rappel ou une continuation à exécuter dans une opération asynchrone.0
Debug.MS_ASYNC_CALLBACK_STATUS_JOINLa tâche synchrone a rejoint une partie d'une opération asynchrone.1
Debug.MS_ASYNC_CALLBACK_STATUS_CHOOSEANYLa tâche synchrone a satisfait au choix d'une opération asynchrone.2
Debug.MS_ASYNC_CALLBACK_STATUS_CANCELLa tâche synchrone a été annulée.3
Debug.MS_ASYNC_CALLBACK_STATUS_ERRORLa tâche synchrone a provoqué une erreur dans une opération asynchrone4
- -

Codes de statut pour les opérations asynchrones

- - - - - - - - - - - - - - - - - - - - - - - - -
ConstanteDescriptionValeur
Debug.MS_ASYNC_OP_STATUS_SUCCESSL'opération asynchrone a réussi.1
Debug.MS_ASYNC_OP_STATUS_CANCELEDL'opération asynchrone a été annulée.2
Debug.MS_ASYNC_OP_STATUS_ERRORL'opération asynchrone a déclenché une erreur.3
- -

Propriétés

- -
-
Debug.debuggerEnabled
-
Cette propriété indique si le débogage est actif pour le contexte de script courant. Le débogage peut être actif ou non, qu'un débogueur soit attaché ou non.
-
Debug.setNonUserCodeExceptions
-
Cette propriété indique si certains blocs try-catch de la portée courante sont considérés par le débogueur comme étant gérés par l'utilisateur.
-
- -

Méthodes

- -
-
Debug.msTraceAsyncCallbackCompleted
-
Indique si la pile d'appel pour les fonctions de rappel associée a une opération asynchrone précédemment définie est terminée.
-
Debug.msTraceAsyncCallbackStarting
-
Associe une pile de fonction de rappel à l'opération asynchrone précédemment définie.
-
Debug.msTraceAsyncOperationCompleted
-
Indique qu'une opération asynchrone est terminée.
-
Debug.msTraceAsyncOperationStarting
-
Initie une trace pour une opération asynchrone.
-
Debug.msUpdateAsyncCallbackRelation
-
Met à jour la relation entre la tâche synchrone et l'opération asynchrone associée.
-
Debug.write
-
Envoie une chaîne de caractères au débogueur du script.
-
Debug.writeln
-
Envoie une chaîne de caractères au débogueur du script, cette chaîne sera suivie par un retour à la ligne.
-
- -

Exemples

- -

Afficher la valeur d'une variable

- -

Le fragment de code suivant permet d'afficher la valeur d'une variable lorsqu'on débogue le script grâce à la fonction write.

- -
var compteur = 42;
-Debug.write("Compteur vaut " + compteur);
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard et Internet Explorer 11 en mode standard. Elle est également prise en charge pour les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackcompleted/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackcompleted/index.html deleted file mode 100644 index a644fd8577..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackcompleted/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Debug.msTraceAsyncCallbackCompleted -slug: >- - Archive/Web/JavaScript/Extensions_Microsoft/Debug/msTraceAsyncCallbackCompleted -tags: - - JavaScript - - Microsoft - - Non-standard - - Propriété - - Reference -translation_of: >- - Archive/Web/JavaScript/Microsoft_Extensions/Debug/msTraceAsyncCallbackCompleted ---- -
{{JSRef}}{{Non-standard_header}}
- -
Non-standard. Ne doit pas être utilisé !
-Cet objet est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

Indique que la pile de rappels (callback stack) associée avec l'opération asynchrone précédemment indiquée est terminée.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackstarting/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackstarting/index.html deleted file mode 100644 index 928acaad56..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasynccallbackstarting/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Debug.msTraceAsyncCallbackStarting -slug: Archive/Web/JavaScript/Extensions_Microsoft/Debug/msTraceAsyncCallbackStarting -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Debug/msTraceAsyncCallbackStarting ---- -
{{JSRef}}{{Non-standard_header}}
- -

La méthode statique Debug.msTraceAsyncCallbackStarting() permet d'associer une pile d'appel avec une opération asynchrone donnée.

- -

Syntaxe

- -
Debug.msTraceAsyncCallbackStarting(asyncOperationId)
- -

Paramètres

- -
-
asyncOperationId
-
Un identifiant d'une opération asynchrone (tel que renvoyé par Debug.msTraceAsyncOperationStarting()).
-
- -

Notes

- -

Cette fonction doit être appelée après l'appel à Debug.msTraceAsyncOperationCompleted.

- -
-

Note : Certains outils de débogage n'affichent pas les informations envoyées au débogueur.

-
- -

asyncOperationId doit correspondre à un identifiant d'une opération fourni par Debug.msTraceAsyncOperationStarting().

- -

Exemples

- -

Le fragment de code suivant permet de tracer un appel asynchrone dans une application Windows 8.x Store.

- -
function asyncWrapperFunction() {
-  var opID = Debug.msTraceAsyncOperationStarting('async trace');
-  doSomethingAsync().then(function (result) {
-    Debug.msTraceAsyncOperationCompleted(opID, Debug.MS_ASYNC_OP_STATUS_SUCCESS);
-    Debug.msTraceAsyncCallbackStarting(opID);
-    // Traiter le résultat de l'opération asynchrone.
-  }, function (error) {
-    Debug.msTraceAsyncOperationCompleted(opID, Debug.MS_ASYNC_OP_STATUS_ERROR);
-    Debug.msTraceAsyncCallbackStarting(opID);
-  });
-  Debug.msTraceAsyncCallbackCompleted();
-}
-
-function doSomethingAsync() {
-  return WinJS.Promise.as(true);
-}
-
-asyncWrapperFunction();
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par le mode standard d'Internet Explorer 11 et par les applications Store (Windows 8.1 et Windows Phone 8.1).
- Elle n'est pas prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard. Elle n'est pas non plus prise en charge par Windows 8.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationcompleted/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationcompleted/index.html deleted file mode 100644 index 2a9c69ac01..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationcompleted/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Debug.msTraceAsyncOperationCompleted -slug: >- - Archive/Web/JavaScript/Extensions_Microsoft/Debug/msTraceAsyncOperationCompleted -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: >- - Archive/Web/JavaScript/Microsoft_Extensions/Debug/msTraceAsyncOperationCompleted ---- -
{{JSRef}}{{Non-standard_header}}
- -

La méthode statique Debug.msTraceAsyncCallbackCompleted() indique si une opération asynchrone est terminée.

- -

Syntaxe

- -
Debug.msTraceAsyncCallbackCompleted(asyncOperationId[, status])
-
- -

Paramètres

- -
-
asyncOperationId
-
L'identifiant associé à l'opération asynchrone.
-
status {{optional_inline}}
-
Le statut de l'opération asynchrone. Si cet argument n'est pas indiqué, c'est la constante Debug.MS_ASYNC_OP_STATUS_SUCCESS qui sera utilisée.
-
- -

Notes

- -

asyncOperationId doit correspondre à un identifiant d'une opération fourni par Debug.msTraceAsyncOperationStarting().

- -

Les valeurs qui peuvent être utilisées pour l'argument status sont :

- - - -
-

Note : Certains outils de débogage n'affichent pas les informations envoyées au débogueur.

-
- -

Exemples

- -

Le fragment de code suivant permet de tracer un appel asynchrone dans une application Windows 8.x Store.

- -
function asyncWrapperFunction() {
-  var opID = Debug.msTraceAsyncOperationStarting('async trace');
-  doSomethingAsync().then(function (result) {
-    Debug.msTraceAsyncOperationCompleted(opID, Debug.MS_ASYNC_OP_STATUS_SUCCESS);
-    Debug.msTraceAsyncCallbackStarting(opID);
-    // Traiter le résultat de l'opération asynchrone.
-  }, function (error) {
-    Debug.msTraceAsyncOperationCompleted(opID, Debug.MS_ASYNC_OP_STATUS_ERROR);
-    Debug.msTraceAsyncCallbackStarting(opID);
-  });
-  Debug.msTraceAsyncCallbackCompleted();
-}
-
-function doSomethingAsync() {
-  return WinJS.Promise.as(true);
-}
-
-asyncWrapperFunction();
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par le mode standard d'Internet Explorer 11 et par les applications Store (Windows 8.1 et Windows Phone 8.1).
- Elle n'est pas prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard. Elle n'est pas non plus prise en charge par Windows 8.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationstarting/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationstarting/index.html deleted file mode 100644 index 954900a7d8..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/mstraceasyncoperationstarting/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Debug.msTraceAsyncOperationStarting -slug: >- - Archive/Web/JavaScript/Extensions_Microsoft/Debug/msTraceAsyncOperationStarting -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: >- - Archive/Web/JavaScript/Microsoft_Extensions/Debug/msTraceAsyncOperationStarting ---- -
{{JSRef}}{{Non-standard_header}}
- -
Non-standard. Ne doit pas être utilisé !
-Cet objet est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

Initialise une trace pour une opération asynchrone.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/msupdateasynccallbackrelation/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/msupdateasynccallbackrelation/index.html deleted file mode 100644 index 64aa29e1cc..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/msupdateasynccallbackrelation/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Debug.msUpdateAsyncCallbackRelation -slug: >- - Archive/Web/JavaScript/Extensions_Microsoft/Debug/msUpdateAsyncCallbackRelation -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: >- - Archive/Web/JavaScript/Microsoft_Extensions/Debug/msUpdateAsyncCallbackRelation ---- -
{{JSRef}}{{Non-standard_header}}
- -

La méthode statique Debug.msUpdateAsyncCallbackRelation met à jour l'état de la rélation entre un élément de travail synchrone et l'opération asynchrone associée.

- -

Syntaxe

- -
Debug.msUpdateAsyncCallbackRelation(relatedAsyncOperationId[, relationType])
- -

Paramètres

- -
-
asyncOperationId
-
L'identifiant associé à l'opération asynchrone.
-
relationType {{optional_inline}}
-
Le type de relation.
-
- -

Notes

- -

L'élément de travail synchrone est généralement la fonction de rappel pour l'opération asynchrone. Cette fonction peut être appelée lorsqu'une opération asynchrone est interrompue, qu'une opération de jointure est utilisée ou dans d'autres cas.

- -

Les valeurs qui peuvent être utilisées pour relationType sont :

- - - -

Pour plus d'informations, voir les constantes relatives au débogage.

- -
-

Note : Certains outils de débogage n'affichent pas les informations envoyées au débogueur.

-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par le mode standard d'Internet Explorer 11 et par les applications Store (Windows 8.1 et Windows Phone 8.1).
- Elle n'est pas prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard. Elle n'est pas non plus prise en charge par Windows 8.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/setnonusercodeexceptions/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/setnonusercodeexceptions/index.html deleted file mode 100644 index 53730ac015..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/setnonusercodeexceptions/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: setNonUserCodeExceptions -slug: Archive/Web/JavaScript/Extensions_Microsoft/Debug/setNonUserCodeExceptions -tags: - - JavaScript - - Microsoft - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Debug/setNonUserCodeExceptions ---- -
{{JSRef}}{{Non-standard_header}}
- -
La propriété statique Debug.setNonUserCodeExceptions indique si les blocs try-catch de cette portée sont considérés par le débogueur comme étant gérés par l'utilisateur. Les exceptions peuvent être considérées comme levées, gérées par l'utilisateur ou non-gérées.
- -

Syntaxe

- -
Debug.setNonUserCodeExceptions [= bool];
- -

Notes

- -

Lorsque cette propriété est définie avec true pour une certaine portée, le débogueur peut décider de certaines actions (interrompre l'exécution par exemple) lorsque des exceptions sont levées dans la portée pour laquelle le développeur souhaite gérer les exceptions de façon manuelle. Lorsque cette propriété vaut false, on a le même comportement que si elle n'avait jamais été définie.

- -

Pour plus d'informations sur le débogage, voir Un aperçu du débogage Active Script.

- -

Exemples

- -
(function () {
-  Debug.setNonUserCodeExceptions = true;
-  try{
-    var x = null;
-    x.y();
-  } catch (e) {
-    // Catch the exception.
-  }
-})();
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Internet Explorer 10 en mode standard et Internet Explorer 11 en mode standard. Elle est également prise en charge pour les applications Store (Windows 8 et Windows Phone 8.1).
- Cette fonctionnalité n'est pas prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard et Internet Explorer 9 en mode standard.

- -

See also

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/write/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/write/index.html deleted file mode 100644 index c2f7b095fb..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/write/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Debug.write -slug: Archive/Web/JavaScript/Extensions_Microsoft/Debug/write -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Debug/write ---- -
{{JSRef}}{{Non-standard_header}}
- -

La méthode statique Debug.write() permet d'envoyer des chaînes de caractères au débogueur.

- -

Syntaxe

- -
Debug.write([str1 [, str2 [, ... [, strN]]]])
-
- -

Paramètres

- -
-
str1, str2, ... , strN {{optional_inline}}
-
Les chaînes à envoyer au débogueur.
-
- -

Notes

- -

La fonction Debug.write() envoie des chaînes de caractères à la fenêtre de débogage du script. Si le script n'est pas en train d'être débogué, la fonction n'a aucun effet.

- -

Debug.write() est presqu'identique à la fonction Debug.writeln(), la seule différence est que cette dernière ajoute un saut de ligne après les chaînes de caractères qui lui sont passées en arguments.

- -

Exemples

- -

Dans l'exemple qui suit, on utilise la fonction Debug.write() afin d'afficher la valeur d'une variable dans la fenêtre du débogueur.

- -
-

Note : Pour exécuter cet exemple, il est nécessaire d'avoir un débogueur installé et d'exécuter le script en mode debug.

- -

Internet Explorer 8 et les versions ultérieures embarquent un débogueur JavaScript. Pour les versions antérieures, voir Comment activer et démarrer le débogage de script à partir d'Internet Explorer.

-
- -
var compteur = 42;
-Debug.write("Compteur vaut " + compteur);
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard, Internet Explorer 11 en mode standard. Elle est également prise en charge pour les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/debug/writeln/index.html b/files/fr/archive/web/javascript/extensions_microsoft/debug/writeln/index.html deleted file mode 100644 index e1f7f63d3a..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/debug/writeln/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Debug.writeln -slug: Archive/Web/JavaScript/Extensions_Microsoft/Debug/writeln -tags: - - JavaScript - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Debug/writeln ---- -
{{JSRef}}{{Non-standard_header}}
- -

La méthode statique Debug.writeln() permet d'envoyer des chaînes de caractères au débogueur qui seront suivies par un saut de ligne.

- -

Syntaxe

- -
Debug.writeln([str1 [, str2 [, ... [, strN]]]])
-
- -

Paramètres

- -
-
str1, str2, ... , strN {{optional_inline}}
-
Les chaînes à envoyer au débogueur.
-
- -

Notes

- -

La fonction Debug.writeln() envoie des chaînes de caractères suivies par un saut de ligne à la fenêtre de débogage du script. Si le script n'est pas en train d'être débogué, la fonction n'a aucun effet.

- -

Debug.writeln() est presqu'identique à la fonction Debug.write(), la seule différence est que cette dernière n'ajoute pas de saut de ligne après les chaînes de caractères qui lui sont passées en arguments.

- -

Exemples

- -

Dans l'exemple qui suit, on utilise la fonction Debug.writeln() afin d'afficher la valeur d'une variable dans la fenêtre du débogueur.

- -
-

Note : Pour exécuter cet exemple, il est nécessaire d'avoir un débogueur installé et d'exécuter le script en mode debug.

- -

Internet Explorer 8 et les versions ultérieures embarquent un débogueur JavaScript. Pour les versions antérieures, voir Comment activer et démarrer le débogage de script à partir d'Internet Explorer.

-
- -
var compteur = 42;
-Debug.writeln("Compteur vaut " + compteur);
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard, Internet Explorer 11 en mode standard. Elle est également prise en charge pour les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/atend/index.html b/files/fr/archive/web/javascript/extensions_microsoft/enumerator/atend/index.html deleted file mode 100644 index 67a9477f70..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/atend/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Enumerator.atEnd -slug: Archive/Web/JavaScript/Extensions_Microsoft/Enumerator/atEnd -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Enumerator/atEnd ---- -
{{JSRef}}{{Non-standard_header}}
- -

La méthode Enumerator.atEnd() renvoie un booléen qui indique si l'énumérateur a atteint la fin de la collection.

- -

Syntaxe

- -
monEnum.atEnd()
-
- -

Valeur de retour

- -

Un booléen (cf. {{jsxref("Boolean")}}) qui indique si l'énumérateur est parvenu à la fin de la collection ou si la collection est vide ou si l'élément courant vaut {{jsxref("undefined")}}. Sinon, la méthode renvoie false.

- -

Exemples

- -

Dans l'exemple suivant, on utilise la méthode atEnd() afin de déterminer si on a atteint la fin d'une liste de disques :

- -
function ShowDrives() {
-  var s = "";
-  var bytesPerGB = 1024 * 1024 * 1024;
-  var fso = new ActiveXObject("Scripting.FileSystemObject");
-  var e = new Enumerator(fso.Drives);
-  e.moveFirst();
-  while (e.atEnd() == false) {
-    var drv = e.item();
-    s += drv.Path + " - ";
-    if (drv.IsReady) {
-      var freeGB = drv.FreeSpace / bytesPerGB;
-      var totalGB = drv.TotalSize / bytesPerGB;
-      s += freeGB.toFixed(3) + " GB free of ";
-      s += totalGB.toFixed(3) + " GB";
-    } else {
-      s += "Not Ready";
-    }
-    s += "<br />";
-    e.moveNext();
-  }
-  return(s);
-}
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Cette fonctionnalité n'est pas prise en charge dans les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/index.html b/files/fr/archive/web/javascript/extensions_microsoft/enumerator/index.html deleted file mode 100644 index 762a178557..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Enumerator -slug: Archive/Web/JavaScript/Extensions_Microsoft/Enumerator -tags: - - Enumerator - - JavaScript - - Microsoft - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Enumerator ---- -
{{JSRef}}{{non-standard_header}}
- -
Attention ! Cet objet est une extension non-standard de Microsoft. Elle est uniquement prise en charge par Internet Explorer. Elle n'est pas prise en charge dans les applications Windows 8.x Store.
- -

L'objet Enumerator permet d'énumérer les éléments d'une collection.

- -

Syntaxe

- -
enumObj = new Enumerator([collection])
-
- -

Paramètres

- -
-
collection {{optional_inline}}
-
Un objet Collection.
-
- -

Valeur de retour

- -
-
enumObj
-
Le nom de la variable à laquelle l'objet Enumerator est affecté.
-
- -

Notes

- -

Les collections diffèrent des tableaux car les éléments de la collection ne sont pas accessibles directement. Plutôt que d'utiliser des indices, on déplace le pointeur de l'élément courant vers le prochain élément de la collection.

- -

L'objet Enumerator fournit un moyen d'accéder aux éléments d'une collection à la façon de l'instruction For...Each en VBScript.

- -

Exemples

- -
var bytesPerGB = 1024 * 1024 * 1024;
-var fso = new ActiveXObject("Scripting.FileSystemObject");
-
-document.write(fso.Drives);
-var e = new Enumerator(fso.Drives);
-
-var driveString = "";
-
-e.moveFirst();
-while (e.atEnd() == false) {
-    var drv = e.item();
-    driveString += drv.Path + " - ";
-    if (drv.IsReady) {
-        var freeGB = drv.FreeSpace / bytesPerGB;
-        var totalGB = drv.TotalSize / bytesPerGB;
-        driveString += freeGB.toFixed(3) + " GB free of ";
-        driveString += totalGB.toFixed(3) + " GB";
-    } else {
-      driveString += "Not Ready";
-    }
-    driveString += "<br />";
-    e.moveNext();
-}
-document.write(driveString);
-// Output: <drive information
-
- -

Propriétés

- -

L'objet Enumerator ne possède pas de propriété.

- -

Méthodes

- -
-
Enumerator.atEnd
-
Renvoie une booléen qui indique si l'énumérateur a atteint la fin de la collection.
-
Enumerator.item
-
Renvoie l'élément courant de la collection.
-
Enumerator.moveFirst
-
Déplace le pointeur au premier élément de la collection.
-
Enumerator.moveNext
-
Déplace le pointeur de la collection sur l'élément suivant.
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Cette fonctionnalité n'est pas prise en charge dans les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/item/index.html b/files/fr/archive/web/javascript/extensions_microsoft/enumerator/item/index.html deleted file mode 100644 index f5ac109d18..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/item/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Enumerator.item -slug: Archive/Web/JavaScript/Extensions_Microsoft/Enumerator/item -tags: - - JavaScript - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Enumerator/item ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et est uniquement prise en charge par Internet Explorer.
- -

La méthode Enumerator.item() renvoie l'élément courant de la collection.

- -

Syntaxe

- -
enumObj.item()
- -

Valeur de retour

- -

Cette méthode renvoie la valeur de l'élément courant. Si la collection est vide, cette méthode renverra {{jsxref("undefined")}}.

- -

Exemples

- -
function ShowDrives() {
-  var s = "";
-  var bytesPerGB = 1024 * 1024 * 1024;
-  var fso = new ActiveXObject("Scripting.FileSystemObject");
-  var e = new Enumerator(fso.Drives);
-  e.moveFirst();
-  while (e.atEnd() == false) {
-    var drv = e.item();
-    s += drv.Path + " - ";
-    if (drv.IsReady) {
-      var freeGB = drv.FreeSpace / bytesPerGB;
-      var totalGB = drv.TotalSize / bytesPerGB;
-      s += freeGB.toFixed(3) + " GB free of ";
-      s += totalGB.toFixed(3) + " GB";
-    } else {
-      s += "Not Ready";
-    }
-    s += "<br />";
-    e.moveNext();
-  }
-  return(s);
-}
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Cette fonctionnalité n'est pas prise en charge dans les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/movefirst/index.html b/files/fr/archive/web/javascript/extensions_microsoft/enumerator/movefirst/index.html deleted file mode 100644 index c7fcf8201e..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/movefirst/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Enumerator.moveFirst -slug: Archive/Web/JavaScript/Extensions_Microsoft/Enumerator/moveFirst -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Enumerator/moveFirst ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode Enumerator.moveFirst() déplace le pointeur de l'énumérateur sur le premier élément de la collection.

- -

Syntaxe

- -
enumObj.moveFirst()
- -

Notes

- -

Si la collection ne contient aucun élément, l'élément courant vaudra {{jsxref("undefined")}}.

- -

Exemples

- -

Dans l'exemple suivant, on utilise la méthode moveFirst() afin d'évaluer les éléments de la collection Drivesà partir du début de la liste :

- -
function ShowDrives() {
-  var s = "";
-  var bytesPerGB = 1024 * 1024 * 1024;
-  var fso = new ActiveXObject("Scripting.FileSystemObject");
-  var e = new Enumerator(fso.Drives);
-  e.moveFirst();
-  while (e.atEnd() == false) {
-    var drv = e.item();
-    s += drv.Path + " - ";
-    if (drv.IsReady) {
-      var freeGB = drv.FreeSpace / bytesPerGB;
-      var totalGB = drv.TotalSize / bytesPerGB;
-      s += freeGB.toFixed(3) + " GB free of ";
-      s += totalGB.toFixed(3) + " GB";
-    } else {
-      s += "Not Ready";
-    }
-    s += "<br />";
-    e.moveNext();
-  }
-  return(s);
-}
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Cette fonctionnalité n'est pas prise en charge dans les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/movenext/index.html b/files/fr/archive/web/javascript/extensions_microsoft/enumerator/movenext/index.html deleted file mode 100644 index 1e0e3d6854..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/enumerator/movenext/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Enumerator.moveNext -slug: Archive/Web/JavaScript/Extensions_Microsoft/Enumerator/moveNext -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Enumerator/moveNext ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode Enumerator.moveNext() déplace le pointeur de l'énumérateur sur le prochain élément de la collection.

- -

Syntaxe

- -
enumObj.moveNext()
- -

Notes

- -

Si l'énumérateur a atteint la fin de la collection ou que celle-ci est vide, l'élément courant vaudra {{jsxref("undefined")}}.

- -

Exemples

- -

Dans l'exemple suivant, on utilise la méthode moveNext() afin de parcourir les éléments de la collection Drives :

- -
function ShowDrives() {
-  var s = "";
-  var bytesPerGB = 1024 * 1024 * 1024;
-  var fso = new ActiveXObject("Scripting.FileSystemObject");
-  var e = new Enumerator(fso.Drives);
-  e.moveFirst();
-  while (e.atEnd() == false) {
-    var drv = e.item();
-    s += drv.Path + " - ";
-    if (drv.IsReady) {
-      var freeGB = drv.FreeSpace / bytesPerGB;
-      var totalGB = drv.TotalSize / bytesPerGB;
-      s += freeGB.toFixed(3) + " GB free of ";
-      s += totalGB.toFixed(3) + " GB";
-    } else {
-      s += "Not Ready";
-    }
-    s += "<br />";
-    e.moveNext();
-  }
-  return(s);
-}
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge pour les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Cette fonctionnalité n'est pas prise en charge dans les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/error.description/index.html b/files/fr/archive/web/javascript/extensions_microsoft/error.description/index.html deleted file mode 100644 index ad806722df..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/error.description/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Error.description -slug: Archive/Web/JavaScript/Extensions_Microsoft/Error.description -tags: - - JavaScript - - Microsoft - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Error.description ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cet objet est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer. Utiliser {{jsxref("Error.message")}} à la place.
- -

La propriété Error.description permet d'obtenir ou de définir la chaîne de caractères qui décrit l'erreur courante.

- -

Syntaxe

- -
erreur.description [= exprChaine]
- -

Paramètres

- -
-
exprChaine {{optional_inline}}
-
Une chaîne de caractères qui contient la description de l'erreur.
-
- -

Notes

- -

La propriété description est spécifique à Microsoft et peut être utilisée à des fins de rétrocompatibilité pour les navigateurs de Microsoft. Elle fournit la même fonctionnalité que la propriété standard ECMAScript {{jsxref("Error.message")}} qui doit être utilisée en priorité.

- -

Exemples

- -
try {
-  // Cause an error:
-  x = y;
-} catch(e) {
-  // Affiche "[object Error]":
-  console.log(e);
-  console.log(" ");
-  // Affiche 5009:
-  console.log((e.number & 0xFFFF));
-  console.log(" ");
-  // Affiche "'y' is undefined":
-  console.log(e.description);
-  console.log(" ");
-  // Affiche "'y' is undefined":
-  console.log(e.message);
-}
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge avec les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard, Internet Explorer 11 en mode standard. Elle est également prise en charge pour les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/error.number/index.html b/files/fr/archive/web/javascript/extensions_microsoft/error.number/index.html deleted file mode 100644 index 0f10395da8..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/error.number/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Error.number -slug: Archive/Web/JavaScript/Extensions_Microsoft/Error.number -tags: - - JavaScript - - Microsoft - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Error.number ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette propriété est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La propriété Error.number permet d'obtenir ou de définir la valeur numérique associée à une erreur donnée.

- -

Syntax

- -
erreur.number [= numeroErreur]
-
- -

Paramètres

- -
-
numeroErreur
-
Un entier représentant l'erreur.
-
- -

Notes

- -

Un numéro d'erreur est une valeur sur 32 bits. Les 16 bits de poids fort correspondent au facility code (NdT : « code d'emplacement ») et les 16 bits de poids faibles correspondent au code d'erreur. On pourra utiliser l'opérateur binaire & afin de combiner le nombre avec la valeur hexadécimale 0xFFFF.

- -

Exemples

- -
try {
-  // Cause une error:
-  x = y;
-} catch(e) {
-
-  console.log("Code d'erreur :");
-  console.log(e.number & 0xFFFF);       // 5009
-  console.log("Code d'emplacement :");
-  console.log(e.number >> 16 & 0x1FFF); // 10
-  console.log("Message d'erreur :");
-  console.log(e.message);               // 'y' is undefined
-}
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge avec les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard, Internet Explorer 11 en mode standard. Elle est également prise en charge pour les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/error.stacktracelimit/index.html b/files/fr/archive/web/javascript/extensions_microsoft/error.stacktracelimit/index.html deleted file mode 100644 index f0599b3e0d..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/error.stacktracelimit/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Error.stackTraceLimit -slug: Archive/Web/JavaScript/Extensions_Microsoft/Error.stackTraceLimit -tags: - - JavaScript - - Microsoft - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/Error.stackTraceLimit ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette propriété est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La propriété Error.stackTraceLimit permet d'obtenir ou de définir la limite de pile pour la trace, cela correspond au nombre de niveaux d'appels à afficher dans les erreurs. La limite par défaut vaut 10.

- -

Syntaxe

- -
Error.stackTraceLimit
- -

Notes

- -

La propriété stackTraceLimit peut être un entier compris entre 0 et {{jsxref("Infinity")}}. Si stackTraceLimit vaut 0 au moment où l'erreur est déclenché, aucune pile d'appel ne sera affichée. Si cette propriété vaut une valeur négative ou non-numérique, elle sera convertie en 0. Si stackTraceLimit vaut Infinity, toute la pile sera affichée. Dans les autres cas, ToUint32 sera utilisée afin de convertir la valeur.

- -

Exemples

- -
try {
-  var err = new Error("my error");
-  Error.stackTraceLimit = 7;
-  throw err;
-} catch(e) {
-  console.log("Valeur de la limite pour la pile :");
-  console.log(Error.stackTraceLimit);
-}
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par Internet Explorer 10 et par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/getobject/index.html b/files/fr/archive/web/javascript/extensions_microsoft/getobject/index.html deleted file mode 100644 index 22a2dfb1b3..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/getobject/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: GetObject -slug: Archive/Web/JavaScript/Extensions_Microsoft/GetObject -tags: - - JavaScript - - Microsoft - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/GetObject ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette fonction est spécifique à Microsoft et est uniquement prise en charge par Internet Explorer dans les versions antérieures à IE 9 (en mode standard).
- -

La fonction GetObject() renvoie une référence à un objet Automation à partir d'un fichier donné.

- -

Syntaxe

- -
GetObject([pathname] [, class])
- -

Paramètres

- -
-
pathname
-
Un chemin complet contenant également le nom du fichier contenant l'objet qu'on souhaite récupérer. Si pathname n'est pas présent, l'argument class sera obligatoire.
-
class {{optional_inline}}
-
La classe de l'objet. Cet argument suit une syntaxe appname.objecttype où :
-
appname correspond au nom de l'application fournissant l'objet
-
objecttype correspond au type ou à la classe d'objet à créer.
-
- -

Notes

- -

La fonction GetObject() n'est pas prise en charge par Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard, Internet Explorer 11 en mode standard et par les applications Windows Store.

- -

Exemples

- -
var CADObject;
-CADObject = GetObject("C:\\CAD\\SCHEMA.CAD");
-
- -

Lorsque ce code est exécuté, l'application associée au chemin indiquée est démarrée et l'objet indiqué est activé. Si l'argument pathname est une chaîne vide (""), GetObject renvoie une nouvelle instance du type souhaité. Si l'argument pathnameest absent, GetObject() renvoie l'objet actif courant pour le type indiqué. Si aucun objet ne correspond, une erreur est déclenchée.

- -

Certaines applications permettent d'activer une partie d'un fichier. Pour cela, on peut terminer l'argument pathname par un point d'exclamation suivi du nom de la partie du fichier qu'on souhaite activer. Pour plus d'informations sur la composition du nom de la partie, voir la documentation de l'application qui a créé l'objet.

- -

Ainsi, pour une application de dessin avec différents calques enregistrés dans un même fichier, on pourra utiliser l'instruction suivante pour récupérer un calque précis :

- -
var LayerObject = GetObject("C:\\CAD\\SCHEMA.CAD!Layer3");
-
- -

Si la classe de l'objet n'est pas passée en argument, l'objet Automation déterminera l'application à démarrer et l'objet à activer en fonction du nom de fichier passé en argument. Il est possible que certains fichiers prennent en charge plusieurs classes d'objet. Dans ce dernier cas, il faudra utiliser l'argument class afin d'indiquer la classe à récupérer :

- -
var MyObject = GetObject("C:\\DRAWINGS\\SAMPLE.DRW", "FIGMENT.DRAWING");
-
- -

Dans l'exemple précédent, FIGMENT est le nom d'une application de dessin et DRAWING est le nom d'un type d'objet pris en charge par cette application. Une fois l'objet activé, on peut y faire référence dans le code grâce à la variable qu'on a déclaré. Suite à l'instruction précédente, on peut manipuler les propriétés et méthodes du nouvel objet avec  MyObject :

- -
MyObject.Line(9, 90);
-MyObject.InsertText(9, 100, "Hello, world.");
-MyObject.SaveAs("C:\\DRAWINGS\\SAMPLE.DRW");
-
- -
-

Note : On utilisera la fonction GetObject() lorsqu'on dispose d'une instance courante pour l'objet ou qu'on souhaite créer un objet à partir d'un fichier déjà chargé. Si on ne dispose encore d'aucunee instance et qu'on ne souhaite pas utiliser un objet d'un fichier chargé, il faudra utiliser l'objet ActiveXObject.

-
- -

Si un objet est enregistré comme un singleton, une seule instance de l'objet sera créée, quel que soit le nombre de fois où ActiveXObject est exécuté. Pour un tel singleton, GetObject() renvoie toujours la même instance lorsqu'elle est appelée avec la chaîne vide et provoque une erreur si l'argument pathname est absent.

- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard et Internet Explorer 8 en mode standard.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/index.html b/files/fr/archive/web/javascript/extensions_microsoft/index.html deleted file mode 100644 index 176357d45e..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Extensions JavaScript spécifiques de Microsoft -slug: Archive/Web/JavaScript/Extensions_Microsoft -tags: - - JavaScript - - Microsoft - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions ---- -
{{JSSidebar("Microsoft Extensions")}} {{Non-standard_header}}
- -

Les navigateurs édités par Microsoft (Internet Explorer ainsi que Microsoft Edge dans certains cas) prennent en charge certaines extensions qui sont spécifiques à Microsoft et n'appartiennent à l'ensemble JavaScript standard (ECMAScript).

- -
-

Attention ! Ces API ne fonctionneront que pour les applications Microsoft, elles ne sont pas en voie de standardisation.

-
- -

Objets

- -
- -
- -

Fonctions

- -
- -
- -

Instructions

- -
- -
- -

Autres

- -
- -
- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/scriptengine/index.html b/files/fr/archive/web/javascript/extensions_microsoft/scriptengine/index.html deleted file mode 100644 index b8e6c7bce1..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/scriptengine/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: ScriptEngine() -slug: Archive/Web/JavaScript/Extensions_Microsoft/ScriptEngine -tags: - - Déprécié - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/ScriptEngine ---- -
{{JSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La fonction ScriptEngine() renvoie le nom du langage de script utilisé.

- -

Syntaxe

- -
ScriptEngine()
- -

Valeur de retour

- -

La fonction ScriptEngine() renvoie une chaîne de caractères indiquant le moteur de script utilisé. Pour les anciennes versions d'Internet Explorer, cette chaîne était "JScript".

- -

Exemples

- -
if (window.ScriptEngine) {
-  console.log(window.ScriptEngine());
-}
-// affiche JScript
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard et Internet Explorer 11 en mode standard. Elle est également prise en charge par les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/scriptenginebuildversion/index.html b/files/fr/archive/web/javascript/extensions_microsoft/scriptenginebuildversion/index.html deleted file mode 100644 index e14e26cb03..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/scriptenginebuildversion/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: ScriptEngineBuildVersion -slug: Archive/Web/JavaScript/Extensions_Microsoft/ScriptEngineBuildVersion -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/ScriptEngineBuildVersion ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette fonction est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La fonction ScriptEngineBuildVersion() renvoie le numéro de build de la version du moteur de script courant.

- -

Syntaxe

- -
ScriptEngineBuildVersion()
-
- -

Valeur de retour

- -

La valeur de retour correspond à l'information de version stockée dans la bibliothèque dynamique (DLL) du moteur de script utilisé.

- -

Exemples

- -
if(window.ScriptEngineBuildVersion) {
-  console.log(window.ScriptEngineBuildVersion());
-}
-// Output: <numéro de build>
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard et Internet Explorer 11 en mode standard. Elle est également prise en charge par les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/scriptenginemajorversion/index.html b/files/fr/archive/web/javascript/extensions_microsoft/scriptenginemajorversion/index.html deleted file mode 100644 index a8a93243da..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/scriptenginemajorversion/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: ScriptEngineMajorVersion() -slug: Archive/Web/JavaScript/Extensions_Microsoft/ScriptEngineMajorVersion -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/ScriptEngineMajorVersion ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette fonction est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La fonction ScriptEngineMajorVersion() permet d'obtenir le numéro de version majeur du moteur de script courant.

- -

Syntaxe

- -
ScriptEngineMajorVersion()
- -

Valeur de retour

- -

La valeur de retour correspond à l'information de version stockée dans la bibliothèque dynamique (DLL) du moteur de script utilisé.

- -

Exemples

- -
if (window.ScriptEngineMajorVersion) {
-  console.log(window.ScriptEngineMajorVersion());
-}
-
-Output: <current major version>
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard et Internet Explorer 11 en mode standard. Elle est également prise en charge par les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/scriptengineminorversion/index.html b/files/fr/archive/web/javascript/extensions_microsoft/scriptengineminorversion/index.html deleted file mode 100644 index 162f3f01f4..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/scriptengineminorversion/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: ScriptEngineMinorVersion() -slug: Archive/Web/JavaScript/Extensions_Microsoft/ScriptEngineMinorVersion -tags: - - JavaScript - - Microsoft - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/ScriptEngineMinorVersion ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette fonction est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La fonction ScriptEngineMinorVersion() permet d'obtenir le numéro de version mineur du moteur de script courant.

- -

Syntaxe

- -
ScriptEngineMinorVersion()
- -

Valeur de retour

- -

La valeur de retour correspond à l'information de version stockée dans la bibliothèque dynamique (DLL) du moteur de script utilisé.

- -

Exemples

- -
if (window.ScriptEngineMinorVersion) {
-  console.log(window.ScriptEngineMinorVersion());
-}
-
-Output: <version mineure>
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard, Internet Explorer 10 en mode standard et Internet Explorer 11 en mode standard. Elle est également prise en charge par les applications Store (Windows 8 et Windows Phone 8.1).

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/dimensions/index.html b/files/fr/archive/web/javascript/extensions_microsoft/vbarray/dimensions/index.html deleted file mode 100644 index f2d0731ed5..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/dimensions/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: VBArray.dimensions -slug: Archive/Web/JavaScript/Extensions_Microsoft/VBArray/dimensions -tags: - - JavaScript - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/VBArray/dimensions ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode VBArray.dimensions() renvoie le nombre de dimensions d'un objet {{jsxref("VBArray")}}.

- -

Syntaxe

- -
monVBArray.dimensions()
- -

Exemples

- -
<head>
-  <script type="text/vbscript">
-  <!--
-  Function CreateVBArray()
-     Dim i, j, k
-     Dim a(2, 2)
-     k = 1
-     For i = 0 To 2
-        For j = 0 To 2
-           a(j, i) = k
-           document.writeln(k)
-           k = k + 1
-        Next
-        document.writeln("<br />")
-     Next
-     CreateVBArray = a
-  End Function
-  -->
-  </script>
-
-  <script type="text/javascript">
-  <!--
-  function VBArrayTest(vbarray) {
-     var a = new VBArray(vbarray);
-     var b = a.toArray();
-     var s = "";
-     for (i = 1; i <= a.dimensions() ; i++) {
-       s += "La borne supérieure de la dimension " + i ";
-       s += " est " + a.ubound(i) + ".";
-     }
-     return s;
-  }
-  -->
-  </script>
-</head>
-
-<body>
-  <script type="text/javascript">
-    <!--
-    VBArrayTest(CreateVBArray());
-    -->
-  </script>
-</body>
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/getitem/index.html b/files/fr/archive/web/javascript/extensions_microsoft/vbarray/getitem/index.html deleted file mode 100644 index 0c4eec42c3..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/getitem/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: VBArray.getItem -slug: Archive/Web/JavaScript/Extensions_Microsoft/VBArray/getItem -tags: - - JavaScript - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/VBArray/getItem ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode VBArray.getItem() l'élément du tableau {{jsxref("VBArray")}} courant à l'emplacement indiqué.

- -

Syntaxe

- -
monVBArray.getItem(dimension1[, dimension2[, ... [, dimensionN]]])
- -

Paramètres

- -
-
dimension1-dimensionN
-
Les coordonnées exactes de la valeur qu'on souhaite récupérer dans le tableau VBArray. La valeur n correspond au nombre de dimensions du tableau.
-
- -

Valeur de retour

- -

La valeur de l'objet située aux coordonnées dimension1-dimension2-…-dimensionN dans le tableau VBArray.

- -

Exemples

- -
<head>
-  <script type="text/vbscript">
-  <!--
-  Function CreateVBArray()
-     Dim i, j, k
-     Dim a(2, 2)
-     k = 1
-     For i = 0 To 2
-        For j = 0 To 2
-           a(j, i) = k
-           document.writeln(k)
-           k = k + 1
-        Next
-        document.writeln("<br />")
-     Next
-     CreateVBArray = a
-  End Function
-  -->
-  </script>
-
-  <script type="text/javascript">
-  <!--
-  function GetItemTest(vbarray) {
-     var i, j;
-     var a = new VBArray(vbarray);
-     for (i = 1; i <= 2 ; i++) {
-       for (j = 1; j <= 2 ; j++) {
-         console.log(a.getItem(i,j));
-     }
-  }
-  -->
-  </script>
-</head>
-
-<body>
-  <script type="text/javascript">
-    <!--
-    GetItemTest(CreateVBArray());
-    -->
-  </script>
-</body>
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/index.html b/files/fr/archive/web/javascript/extensions_microsoft/vbarray/index.html deleted file mode 100644 index 0b823f10f4..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: VBArray -slug: Archive/Web/JavaScript/Extensions_Microsoft/VBArray -tags: - - JavaScript - - Microsoft - - Non-standard - - Reference - - VBArray -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/VBArray ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cet objet est spécifique à Microsoft et est uniquement pris en charge par Internet Explorer.
- -

L'objet VBArray permet d'accéder à des tableaux Visual Basic.

- -

Syntaxe

- -
varName = new VBArray(safeArray);
- -

Paramètres

- -
-
safeArray
-
Une valeur VBArray.
-
- -

Notes

- -

Les tableaux VBArray sont uniquement accessibles en lecture seule et ne peuvent pas être créés directement. L'argument safeArray doit être une valeur VBArray valide. L'obtention d'une telle valeur ne peut se faire que via un contrôle ActiveX ou via un autre objet.

- -

Les tableaux VBArray peuvent avoir plusieurs dimensions, dont chacune a un ensemble d'indices différents.

- -

Exemples

- -

The following example consists of three parts. The first part is VBScript code to create a Visual Basic safe array. The second part is JavaScript code that converts the Visual Basic safe array to a JavaScript array. Both of these parts go into the <HEAD> section of an HTML page. The third part is the JavaScript code that goes in the <BODY> section to run the other two parts.

- -
<head>
-  <script type="text/vbscript">
-  <!--
-  Function CreateVBArray()
-     Dim i, j, k
-     Dim a(2, 2)
-     k = 1
-     For i = 0 To 2
-        For j = 0 To 2
-           a(j, i) = k
-           document.writeln(k)
-           k = k + 1
-        Next
-        document.writeln("<br />")
-     Next
-     CreateVBArray = a
-  End Function
-  -->
-  </script>
-
-  <script type="text/javascript">
-  <!--
-  function VBArrayTest(vbarray) {
-     var a = new VBArray(vbarray);
-     var b = a.toArray();
-     var i;
-     for (i = 0; i < 9; i++) {
-       console.log(b[i]);
-     }
-  }
-  -->
-  </script>
-</head>
-
-<body>
-  <script type="text/javascript">
-    <!--
-    VBArrayTest(CreateVBArray());
-    -->
-  </script>
-</body>
- -

Propriétés

- -

L'objet VBArray ne possède aucune propriété.

- -

Méthodes

- -
-
VBArray.dimensions()
-
Cette méthode renvoie le nombre de dimensions du tableau VBArray.
-
VBArray.getItem()
-
Cette méthode renvoie l'élément à l'emplacement indiqué.
-
VBArray.lbound()
-
Cette méthode renvoie l'indice le plus bas du VBArray pour la dimension indiquée.
-
VBArray.toArray()
-
Cette méthode renvoie un tableau JavaScript standard converti à partir de l'objet VBArray.
-
VBArray.ubound()
-
Cette méthode renvoie l'indice le plus haut du VBArray pour la dimension indiquée.
-
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/lbound/index.html b/files/fr/archive/web/javascript/extensions_microsoft/vbarray/lbound/index.html deleted file mode 100644 index 4fa681822b..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/lbound/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: VBArray.lbound -slug: Archive/Web/JavaScript/Extensions_Microsoft/VBArray/lbound -tags: - - JavaScript - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/VBArray/lbound ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode VBArray.lbound() renvoie l'indice le plus bas de l'objet {{jsxref("VBArray")}} pour la dimension indiquée.

- -

Syntaxe

- -
monVBArray.lbound(dimension)
- -

Paramètres

- -
-
dimension {{optional_inline}}
-
La dimension pour laquelle on veut l'indice le plus bas. La valeur par défaut est 1.
-
- -

Valeur de retour

- -

Si le tableau est vide, {{jsxref("undefined")}}, sinon l'indice le plus bas pour la dimension souhaitée. Si la valeur de dimension excède le nombre de dimensions du tableau VBArray, une erreur "Subscript out of range" est levée.

- -

Exemples

- -
<head>
-  <script type="text/vbscript">
-  <!--
-  Function CreateVBArray()
-     Dim i, j, k
-     Dim a(2, 2)
-     k = 1
-     For i = 0 To 2
-        For j = 0 To 2
-           a(j, i) = k
-           document.writeln(k)
-           k = k + 1
-        Next
-        document.writeln("<br />")
-     Next
-     CreateVBArray = a
-  End Function
-  -->
-  </script>
-
-  <script type="text/javascript">
-  <!--
-  function VBArrayTest(vbarray) {
-     var a = new VBArray(vbarray);
-     var b = a.toArray();
-     var s = "";
-     for (i = 1; i <= a.dimensions() ; i++) {
-       s += "La borne inférieure de la dimension " + i ";
-       s += " est " + a.lbound(i) + ".";
-     }
-     return s;
-  }
-  -->
-  </script>
-</head>
-
-<body>
-  <script type="text/javascript">
-    <!--
-    VBArrayTest(CreateVBArray());
-    -->
-  </script>
-</body>
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/toarray/index.html b/files/fr/archive/web/javascript/extensions_microsoft/vbarray/toarray/index.html deleted file mode 100644 index 377b5ba29f..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/toarray/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: VBArray.toArray -slug: Archive/Web/JavaScript/Extensions_Microsoft/VBArray/toArray -tags: - - JavaScript - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/VBArray/toArray ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode VBArray.toArray() renvoie un tableau JavaScript {{jsxref("Array")}} à partir d'une valeur {{jsxref("VBArray")}}.

- -

Syntaxe

- -
monVBArray.toArray()
- -

Valeur de retour

- -

La valeur VBArray convertie en {{jsxref("Array")}}. Un tableau VBArray étant multi-dimensionnel, il est aplati avec les tableaux des dimensions les uns à la suite des autres. Ainsi, si le tableau VBArray contient [1,2,3][4,5,6][7,8,9], il sera converti en un tableau Array ayant la structure [1,2,3,4,5,6,7,8,9].

- -

Il n'existe aucune méthode qui permette de convertir un tableau {{jsxref("Array")}} en {{jsxref("VBArray")}}.

- -

Exemples

- -
<head>
-  <script type="text/vbscript">
-  <!--
-  Function CreateVBArray()
-     Dim i, j, k
-     Dim a(2, 2)
-     k = 1
-     For i = 0 To 2
-        For j = 0 To 2
-           a(j, i) = k
-           document.writeln(k)
-           k = k + 1
-        Next
-        document.writeln("<br />")
-     Next
-     CreateVBArray = a
-  End Function
-  -->
-  </script>
-
-  <script type="text/javascript">
-  <!--
-  function VBArrayTest(vbarray) {
-     var a = new VBArray(vbarray);
-     var b = a.toArray();
-     var s = "";
-     for (i = 0; i < 9 ; i++) {
-       console.log(b[i]);
-     }
-  }
-  -->
-  </script>
-</head>
-
-<body>
-  <script type="text/javascript">
-    <!--
-    VBArrayTest(CreateVBArray());
-    -->
-  </script>
-</body>
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/ubound/index.html b/files/fr/archive/web/javascript/extensions_microsoft/vbarray/ubound/index.html deleted file mode 100644 index 9bfb404248..0000000000 --- a/files/fr/archive/web/javascript/extensions_microsoft/vbarray/ubound/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: VBArray.ubound -slug: Archive/Web/JavaScript/Extensions_Microsoft/VBArray/ubound -tags: - - JavaScript - - Méthode - - Non-standard - - Reference -translation_of: Archive/Web/JavaScript/Microsoft_Extensions/VBArray/ubound ---- -
{{JSRef}}{{Non-standard_header}}
- -
Attention ! Cette méthode est spécifique à Microsoft et ne fonctionne qu'avec Internet Explorer.
- -

La méthode VBArray.ubound() renvoie l'indice le plus haut de l'objet {{jsxref("VBArray")}} pour la dimension indiquée.

- -

Syntaxe

- -
monVBArray.ubound(dimension)
- -

Paramètres

- -
-
dimension {{optional_inline}}
-
La dimension pour laquelle on veut l'indice le plus haut. La valeur par défaut est 1.
-
- -

Valeur de retour

- -

Si le tableau est vide, {{jsxref("undefined")}}, sinon l'indice le plus haut pour la dimension souhaitée. Si la valeur de dimension excède le nombre de dimensions du tableau VBArray, une erreur "Subscript out of range" est levée.

- -

Exemples

- -
<head>
-  <script type="text/vbscript">
-  <!--
-  Function CreateVBArray()
-     Dim i, j, k
-     Dim a(2, 2)
-     k = 1
-     For i = 0 To 2
-        For j = 0 To 2
-           a(j, i) = k
-           document.writeln(k)
-           k = k + 1
-        Next
-        document.writeln("<br />")
-     Next
-     CreateVBArray = a
-  End Function
-  -->
-  </script>
-
-  <script type="text/javascript">
-  <!--
-  function VBArrayTest(vbarray) {
-     var a = new VBArray(vbarray);
-     var b = a.toArray();
-     var s = "";
-     for (i = 1; i <= a.dimensions() ; i++) {
-       s += "La borne supérieure de la dimension " + i ";
-       s += " est " + a.ubound(i) + ".";
-     }
-     return s;
-  }
-  -->
-  </script>
-</head>
-
-<body>
-  <script type="text/javascript">
-    <!--
-    VBArrayTest(CreateVBArray());
-    -->
-  </script>
-</body>
- -

Prérequis

- -

Cette fonctionnalité est prise en charge par les modes suivants : Quirks, Internet Explorer 6 en mode standard, Internet Explorer 7 en mode standard, Internet Explorer 8 en mode standard, Internet Explorer 9 en mode standard et Internet Explorer 10 en mode standard. Elle n'est pas prise en charge par les applications Windows 8.x Store.

- -

Voir aussi

- - diff --git "a/files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique/index.html" "b/files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique/index.html" deleted file mode 100644 index 4f4e81ba8f..0000000000 --- "a/files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique/index.html" +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Fonction génératrice historique -slug: Archive/Web/JavaScript/Fonction_génératrice_historique -tags: - - JavaScript - - Legacy Iterator - - Non-standard - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Legacy_generator_function ---- -
{{JSSidebar("Operators")}}{{Non-standard_Header}}{{Obsolete_Header("gecko58")}}
- -
L'expression de fonction génératrice était une fonctionnalité spécifique à SpiderMonkey et est retirée à partir de Firefox 58. Pour la remplacer, on pourra utiliser l'expression {{jsxref("Opérateurs/function*", "function*")}}.
- -

Le mot-clé function peut être utilisé afin de définir une fonction génératrice au sein d'une expression. Pour que la fonction soit considérée comme génératrice, il faut que le corps de la fonction contiennent au moins une expression {{jsxref("Opérateurs/yield", "yield")}}.

- -

Syntaxe

- -
function [nom]([param1[, param2[, ..., paramN]]]) {
-   instructions
-}
- -

Paramètres

- -
-
nom
-
Le nom de la fonction. Ce paramètre est optionnel, s'il n'est pas utilisé, la fonction sera anonyme. Le nom de la fonction est uniquement local pour le corps de la fonction.
-
paramN
-
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments.
-
instructions
-
Les instructions qui forment le corps de la fonction. Au moins l'une d'entre elle doit contenir une expression {{jsxref("Opérateurs/yield", "yield")}}.
-
- -

Description

- -

Un aperçu de cet opérateur est disponible sur la page sur les itérateurs et les générateurs.

- -

Compatibilité des navigateurs

- -

Supported nowhere.

- -

Voir aussi

- - diff --git "a/files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique_statement/index.html" "b/files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique_statement/index.html" deleted file mode 100644 index ec21b25a5a..0000000000 --- "a/files/fr/archive/web/javascript/fonction_g\303\251n\303\251ratrice_historique_statement/index.html" +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Fonction génératrice historique -slug: Archive/Web/JavaScript/Fonction_génératrice_historique_statement -tags: - - JavaScript - - Legacy Iterator - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Legacy_generator_function_statement ---- -
{{JSSidebar("Statements")}}{{Non-standard_Header}}{{Obsolete_Header("gecko58")}}
- -
Les fonctions génératrices historiques sont une fonctionnalité propre à SpiderMonkey qui a été retirée à partir de Firefox 58. Afin d'utiliser des outils pérennes, privilégier {{jsxref("Instructions/function*", "function*")}}.
- -

{{Obsolete_Header(58)}}

- -

L'instruction de fonction génératrice historique permet de déclarer une ancienne fonction génératrice avec des paramètres définis.

- -

Il est également possible de définir des fonctions à l'aide du constructeur {{jsxref("Function")}}, de l'argument functionBody et d'au moins une expression {{jsxref("Opérateurs/yield", "yield")}} et d'une {{jsxref("Opérateurs/Fonction_génératrice_historique", "expression de fonction génératrice historique", "", 1)}}.

- -

Syntaxe

- -
function nom([param,[, param,[..., param]]]) {
-   [instructions]
-}
-
- -
-
nom
-
Le nom de la fonction
-
- -
-
param
-
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments.
-
- -
-
instructions
-
Les instructions qui forment le corps de la fonction. Elles doivent contenir au moins une expression {{jsxref("Opérateurs/yield", "yield")}}.
-
- -

Description

- -

Un aperçu de ces anciennes fonctionnalités est disponible dans la page sur les itérateurs et les générateurs.

- -

Compatibilité des navigateurs

- -

Supported nowhere.

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/handler.enumerate/index.html b/files/fr/archive/web/javascript/handler.enumerate/index.html deleted file mode 100644 index 40dbd33345..0000000000 --- a/files/fr/archive/web/javascript/handler.enumerate/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: handler.enumerate() -slug: Archive/Web/JavaScript/handler.enumerate -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Obsolete - - Proxy - - Reference -translation_of: Archive/Web/JavaScript/handler.enumerate ---- -
{{JSRef}} {{obsolete_header}}
- -

La méthode handler.enumerate() représente une trappe pour les instructions {{jsxref("Instructions/for...in", "for...in")}}. Elle a été retirée du standard ECMAScript avec la septième édition (ES2016) et est dépréciée pour les navigateurs.

- -

Syntaxe

- -
var p = new Proxy(cible, {
-  enumerate(cible) {
-  }
-});
-
- -

Paramètres

- -

Le paramètre suivant est passé à la méthode enumerate. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode enumerate renvoie un objet itérateur.

- -

Description

- -

La méthode handler.enumerate est une trappe permettant d'intercepter les instructions {{jsxref("Instructions/for...in", "for...in")}}.

- -

Interceptions

- -

Cette trappe peut intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte l'instruction {{jsxref("Instructions/for...in", "for...in")}}.

- -
var p = new Proxy({}, {
-  enumerate(cible) {
-    console.log("appelé");
-    return ["a", "b", "c"][Symbol.iterator]();
-  }
-});
-
-for (var x in p) { // "appelé"
-  console.log(x);  // "a"
-}                  // "b"
-                   // "c"
-
- -

Dans le code suivant, on ne respecte pas l'invariant.

- -
var p = new Proxy({}, {
-  enumerate(cible) {
-    return 1;
-  }
-});
-
-for (var x in p) {} // exception TypeError levée
-
- -

Note : Ces deux exemples utilisent la notation raccourcie pour les définitions de méthode.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-enumerate', '[[Enumerate]]')}}{{Spec2('ES2015')}}Définition initiale. Retirée avec ECMAScript 2016 (ES7).
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Proxy.handler.enumerate")}}

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/index.html b/files/fr/archive/web/javascript/index.html deleted file mode 100644 index 4687b7bf23..0000000000 --- a/files/fr/archive/web/javascript/index.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: JavaScript -slug: Archive/Web/JavaScript -translation_of: Archive/Web/JavaScript ---- - - -

{{Obsolete_Header}}

- -

Obsolete JavaScript features and unmaintained docs

- -

{{SubpagesWithSummaries}}

diff --git a/files/fr/archive/web/javascript/reflect.enumerate/index.html b/files/fr/archive/web/javascript/reflect.enumerate/index.html deleted file mode 100644 index 11a5cec1ec..0000000000 --- a/files/fr/archive/web/javascript/reflect.enumerate/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Reflect.enumerate() -slug: Archive/Web/JavaScript/Reflect.enumerate -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Obsolete - - Reference - - Reflect -translation_of: Archive/Web/JavaScript/Reflect.enumerate ---- -
{{JSRef}}{{obsolete_header}}
- -

La méthode statique Reflect.enumerate() renvoie un itérateur qui déroule les propriétés propres énumérables et les propriétés héritées énumérables de l'objet cible. Cette méthode a été retirée de la septième édition d'ECMAScript et est désormais dépréciée dans les navigateurs.

- -

Syntaxe

- -
Reflect.enumerate(cible)
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on veut obtenir les propriétés.
-
- -

Valeur de retour

- -

Un itérateur qui liste les propriétés propres énumérables de l'objet cible ainsi que ses propriétés héritées énumérables.

- -

Exceptions levées

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.enumerate renvoie un itérateur qui liste les propriétés énumérables d'un objet cible, celles qui sont propres et celles qui sont héritées.

- -

Exemples

- -
var obj = { x: 1, y: 2 };
-
-for (var nom of Reflect.enumerate(obj)) {
-  console.log(nom);
-}
-// affiche "x" et "y"
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.enumerate', 'Reflect.enumerate')}}{{Spec2('ES2015')}}Définition initiale. Retirée avec ECMAScript 2016 (ES7).
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Reflect.enumerate")}}

- -

Voir aussi

- - diff --git a/files/fr/archive/web/javascript/support_ecmascript_next_par_mozilla/index.html b/files/fr/archive/web/javascript/support_ecmascript_next_par_mozilla/index.html deleted file mode 100644 index e898981c03..0000000000 --- a/files/fr/archive/web/javascript/support_ecmascript_next_par_mozilla/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Support d'ECMAScript Next par Mozilla -slug: Archive/Web/JavaScript/Support_ECMAScript_Next_par_Mozilla -tags: - - Firefox - - JavaScript -translation_of: Archive/Web/JavaScript/ECMAScript_Next_support_in_Mozilla ---- -
{{jsSidebar("New_in_JS")}}
- -

ECMAScript Next fait référence aux fonctionnalités ajoutées au standard ECMA-262 depuis la version ECMAScript 6 (ES2015). Depuis ECMAScript 6, des versions du standard sont publiée chaque année. Cette année, la spécification ES2018 a vu le jour et ES2019 est actuellement en cours de rédaction. est la prochaine évolution du standard ECMA-262. Les nouvelles fonctionnalités du langage peuvent déjà être proposées dans ce brouillon (draft) car la sixième édition n'accepte plus de nouvelles fonctionnalités et est en train d'être finalisée. L'état actuel des propositions peut être consulté sur le dépôt GitHub tc39/ecma262.
- La liste de diffusion es-discuss permet de discuter des standards ECMAScript.

- -

ECMAScript 2016

- -

Les fonctionnalités suivantes d'ES2016 sont implémentées :

- - - -

ECMAScript 2017

- -

Les fonctionnalités d'ES2017 suivantes sont implémentées :

- - - -

Nouvelles fonctionnalités expérimentales

- -

Les fonctionnalités suivantes sont d'ores et déjà implémentées mais ne sont disponibles que pour Firefox Nightly et ne font pas encore partie d'un brouillon de la spécification ECMAScript.

- -

Ajout à l'objet ArrayBuffer

- - - -

Nouveaux objets typés

- - - -

Nouveaux objets pour la mémoire partagée

- - - -

Voir aussi

- - diff --git a/files/fr/archive/web/xforms/autres_ressources/index.html b/files/fr/archive/web/xforms/autres_ressources/index.html deleted file mode 100644 index d3af7709d3..0000000000 --- a/files/fr/archive/web/xforms/autres_ressources/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Autres ressources -slug: Archive/Web/XForms/Autres_ressources -tags: - - XForms -translation_of: Archive/Web/XForms/Other_Resources ---- -

 

-

Toutes les autres ressources

- diff --git a/files/fr/archive/web/xforms/index.html b/files/fr/archive/web/xforms/index.html deleted file mode 100644 index e7e805c1a5..0000000000 --- a/files/fr/archive/web/xforms/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: XForms -slug: Archive/Web/XForms -tags: - - XForms -translation_of: Archive/Web/XForms ---- -
XForms Essentials (en) -

Un livre en ligne qui vous offre une visite guidée des XForms.
- XForms Tutorial and Cookbook (en)
- XForms au format wikibook - testé avec Firefox.

-(en cours de traduction en français)
- -
-
XForms est le futur des formulaires en ligne tel qu'imaginé par le W3C. S'appuyant sur d'autres standards du W3C comme XML Schema, XPath, et XML Events, XForms s'efforce de dépasser les limitations du modèle actuel des formulaires HTML. Les autres forces de XForms sont la séparation entre les données et leur présentation, un typage fort des données, la possibilité de soumettre des données XML vers les serveurs plutôt que les traditionnels couples nom/valeur, et par une manière descriptive de de concevoir des formulaires pouvant être affichés sur une large variété de périphériques. XForms est une spécification du W3C.
- -


- Le support XForms peut être ajouté à Firefox et SeaMonkey en installant l'Extension XForms de Mozilla.

-
- - - - - - - - -
-

Documentation

- -
-
Résolution des problèmes avec XForms
-
Une petite collection d'astuces permettant de régler les problèmes courants que l'on peut rencontrer avec les formulaires XForms (à traduire de en:XForms:Form Troubleshooting).
-
- -
-
Particularités de XForms dans Mozilla
-
Explique où et comment XForms dans Mozilla diffère ou va plus loin que la spécification XForms 1.0 specification (à traduire de en:XForms:Mozilla XForms Specials).
-
- -
-
Contrôles personnalisés avec XForms
-
Le {{ Bug(289434) }} a été la première étape pour le support de la personnalisation des contrôles pour XForms. Vous pouvez maintenant styler chaque contrôle XForms grâce aux XBL et créer des effets spéciaux en SVG sur un contrôle input (à traduire de en:XForms:Custom Controls).
-
- -
-
Préférences utilisateur pour XForms
-
Une courte description des variables about:config utilisées par XForms.
-
- -
-
Référence de l'API XForms
-
Documentation des interfaces XForms.
-
- -
-
Référence des éléments d'interface utilisateur XForms
-
La documentation sur les éléments d'interface utilisateur XForms.
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

{{ DiscussionList("dev-tech-xforms", "mozilla.dev.tech.xforms") }}

- - - -

Outils

- - - -

Tous les outils…

- -

Sujets liés

- -
-
Extensions, HTML, XHTML, XML, XPath
-
-
- -

Categories

- -

Interwiki Language Links

diff --git "a/files/fr/archive/web/xforms/pr\303\251f\303\251rences_utilisateur/index.html" "b/files/fr/archive/web/xforms/pr\303\251f\303\251rences_utilisateur/index.html" deleted file mode 100644 index 37446d057b..0000000000 --- "a/files/fr/archive/web/xforms/pr\303\251f\303\251rences_utilisateur/index.html" +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: XForms Préférence utilisateur -slug: Archive/Web/XForms/Préférences_utilisateur -tags: - - XForms -translation_of: Archive/Web/XForms/User_preferences ---- -

Description des préférences about:config utilisées par XForms. -

- - - - - -
Préférence -Défaut -Description -
xforms.disablePopup -false -Désactive les popups d'erreur XForms -
xforms.enableExperimentalFeatures -false -Active les options de test. Actuellement uniquement l'option XForms 1.1 SOAP Action, pour la version test (trunk) uniquement. -
-
-
-{{ languages( { "en": "en/XForms/User_preferences", "it": "it/Le_preferenze_utente_e_XForms", "ja": "ja/XForms/User_preferences" } ) }} diff --git "a/files/fr/archive/web/xforms/r\303\251f\303\251rence_api_xforms/index.html" "b/files/fr/archive/web/xforms/r\303\251f\303\251rence_api_xforms/index.html" deleted file mode 100644 index b70aae242f..0000000000 --- "a/files/fr/archive/web/xforms/r\303\251f\303\251rence_api_xforms/index.html" +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: XForms API Reference -slug: Archive/Web/XForms/Référence_API_XForms -tags: - - XForms -translation_of: Archive/Web/XForms/API_Reference ---- -
-

Cette page n'est que le début du recensement de la référence de l'API de XForms. Notez le mot début :-)

-
- -

 

- -

Convention de nommage

- -

L'interface XForms a les conventions de nommage suivantes :

- -
-
nsIXForms...Element 
-
Interfaces implémentées par la partie C++ d'un contrôle.
-
nsIXFormsNS...Element 
-
Interfaces étendant la spécification des interfaces XForms.
-
nsIXForms...UIElement 
-
Interfaces implémentées par la partie JavaScript d'un contrôle.
-
nsIXForms...Accessors 
-
Interfaces exposant l'état d'un nœud d'instance liée d'un contrôle donné.
-
- -

Interfaces gelées

- -
-
nsIXFormsModelElement
-
L'interface modèle
-
- -

Interfaces expérimentales

- -
-
nsIXFormsDelegate
-
L'interfacedéléguée de XForms:Contrôles personnalisés.
-
nsIXFormsAccessors
-
L'interfaceaccessoires de {{ mediawiki.external('XForms:Contrôles personnalisés') }}].
-
nsIXFormsNSModelElement
-
Extensions personnalisées de l'interface nsIXFormsModelElement.
-
nsIXFormsNSInstanceElement
-
Extensions personnalisées de l'élément instance.
-
diff --git "a/files/fr/archive/web/xforms/r\303\251solution_des_probl\303\250mes_avec_xforms/index.html" "b/files/fr/archive/web/xforms/r\303\251solution_des_probl\303\250mes_avec_xforms/index.html" deleted file mode 100644 index 7607702cdc..0000000000 --- "a/files/fr/archive/web/xforms/r\303\251solution_des_probl\303\250mes_avec_xforms/index.html" +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Résolution des problèmes -slug: Archive/Web/XForms/Résolution_des_problèmes_avec_XForms -translation_of: Archive/Web/XForms/Form_Troubleshooting ---- -

 

-
- Cette page est en cours de traduction, son contenu peut donc être incomplet ou contenir des parties en anglais. N'hésitez pas à participer à sa traduction à partir de
-

 

-

Introduction

-

Le but de cette page est de collecter toute une sériée de solutions à des erreurs fréquemment rencontrées quand on utilise XForm.

-

Commencez toujours par ça

-
    -
  1. Assurez-vous d'utiliser la dernière version de l'extension.
  2. -
  3. Testez votre code avec le validateur XForms. Il vérifie votre formulaire pour y déceler les erreurs. Ce n'est pas parfait mais c'est mieux que rien et permet de mettre en lumière un certain nombre d'erreurs.
  4. -
  5. Ayez toujours un œil sur la Console d'erreurs (Outils, Console d'erreurs). Si des erreurs sont détectées, n'espérez pas que votre formulaire fonctionne.
  6. -
-

Problèmes et solutions

-

Vérifiez le type de fichier

-

La page est-elle interprétée en tant que document XHTML ? Cliquez droit dans un endroit vide de la page, et sélectionnez Informations sur la page. Le champ Type devrait afficher application/xhtml+xml comme valeur. Toute autre valeur est mauvaise.

-

Si vous ouvrez votre fichier directement depuis votre système (en local), l'extension du fichier doit être .xhtml ou .xml. Si vous chargez le fichier depuis un serveur, vérifiez que le serveur déserve bien le fichier en tant qu'application/xhtml+xml ou en tant que text/xml.

-

Vérifiez la déclaration de l'espace de nom XHTML 1.0

-

Mozilla XForms est construit sur base de la spécification d'XHTML 1.0, laquelle se trouve ici http://www.w3.org/1999/xhtml. Assurez-vous que l'élément <html> contienne la bonne déclaration de l'espace de nom :

-
xmlns="http://www.w3.org/1999/xhtml"
-

(à la place de la dernière spécification, non-ratifiée, XHTML 2.0, située ici http://www.w3.org/2002/06/xhtml2 )

diff --git "a/files/fr/archive/web/xforms/\303\251l\303\251ment_interface_utilisateur_xforms/index.html" "b/files/fr/archive/web/xforms/\303\251l\303\251ment_interface_utilisateur_xforms/index.html" deleted file mode 100644 index b6b6a12505..0000000000 --- "a/files/fr/archive/web/xforms/\303\251l\303\251ment_interface_utilisateur_xforms/index.html" +++ /dev/null @@ -1,159 +0,0 @@ ---- -title: Mozilla XForms User Interface -slug: Archive/Web/XForms/Élément_interface_utilisateur_XForms -translation_of: Archive/Web/XForms/User_Interface_Elements ---- -

Introduction

- -

Cette article est une référence rapide des éléments de l'interface utilisateur de XForms. Il a pour principal but de documenter la façon dont les éléments XForms seront présentés dans Mozilla car les spécifications de XForms ne donnent que des indices sur le comportement des divers contrôles.

- -

Currently XForms can be hosted by XHTML and XUL in Seamonkey and Firefox. Later we have plans to support XForms hosted by SVG. The XForms specs define two kinds of XForms UI elements, called 'Form Controls' and 'XForms User Interface'. Elements from the "Form Controls" group allows users to interact with instance data. The set of "XForms User Interface" elements exist to aid form authors in combining host language markup and XForms markup together in order to build user interfaces. Some of the 'Form Controls' can have multiple appearances and thus may be rendered in multiple ways. We use the data type of the instance node that the form control is bound to as a clue when making a rendering decision. The form author can also use the 'appearance' attribute on the form control to give us another clue. For example, a XForms input control may appear as a text field or as a datepicker depending on whether it is bound to a xsd:string type or a xsd:date type. When a xf:output binds to a node that has a type of xsd:date, we output the date value as plain text. An output bound to a date and also having @appearance='full' will display as a calendar.

- -

This article uses several notations. If you see Fx 3.0 only, that means that the control will only be available for Firefox 3.0 (Gecko 1.9). There are several possible reasons for this restriction. The first is that the changes required for such controls could not be safely made to Firefox 1.5 or Firefox 2.0. The second is that the control is introduced in XForms 1.1 and we don't feel adding the enhancement would be prudent until the 1.1 spec is more stable. For instance, when the spec reaches 'recommendation'-level status. If you see xhtml/xul then it means the control is available when XForms is hosted in either XHTML or XUL. Similarly, if you see xhtml only or xul only, then it means the control is available only in that host language.

- -

Ensembles d'attributs

- -

This section describes attributes that are often used on XForms elements. These attributes are combined into following logical groups.

- -

UI Common

- -

The UI Common attribute set (see the spec) contains the attributes that are available for the XForms elements that are used to build the user interface presentation in a form.

- - - -

Attributs de liaison

- -

Single-Node (see the spec) and Node-Set (see the spec) attributes are used to bind XForms elements to instance nodes. These attributes are: ref, nodeset, model and bind.

- -

Éléments XForms

- -

Almost every XForms element can be presented as one of serveral different kinds of widgets. This section contains a short description of each XForms element and its representation. The XForms specification offers suggestions for some of the representations, but some of the widgets we use are only available in the Mozilla XForms processor. The choice of widget that we use is often determined by the data type of the instance node that the xforms element is bound to. The form author can also influence the widget by using the appearance attribute on the element.

- -

Module des contrôles de formulaire

- -

This section contains a short description for each form control element.

- -
input
- -

A key xforms element to show and change the instance data to which it is bound. Usually bound to data that can be well-represented by a string (see the spec). It can have the following representations:

- - - -
secret
- -

Used for inputting passwords. Each character typed by the user is represented by an asterisk on the screen (see the spec).

- -
textarea
- -

Serves to show/change multiline text (see the spec).

- -
output
- -

Serves to show the instance data that the element is bound to in a read-only manner (see the spec). It can have the following presentations:

- - - -
upload
- -

Provides a means for the user to select a file (see the spec).

- -
range
- -

Allows the user to choose a value from within a specific range of values. It is represented by a slider widget (see the spec).

- -
trigger
- -

Allows the user to initiate actions (see the spec). It can have the following representations:

- - - -
submit
- -

Invokes the submission of the selected instance data to its target destination, which could be local or remote (see the spec). It can have the following representations:

- - - -
select
- -

List control. Allows the user to choose one or multiple values from a list of pre-defined values (see the spec). It can have the following representations:

- - - -
select1
- -

Combobox control. Allows the user to choose a single value from a list of pre-defined values (see the spec). It can have the following representations:

- - - -

Éléments supplémentaires

- -

These elements may be used as child elements to the form controls described above.

- -
label
- -

Specifies the label for the xforms control (see the spec). Every form control other than the output element must contain a label element. It is valid for a form control to have an empty label element.

- -
help
- -

Specifies contextual help for the containing form control (see the spec). The help will be displayed if the F1 key is pressed while the containing form control has focus.

- -
hint
- -

Similar to a tooltip (see the spec). The hint is displayed when the mouse moves and pauses over the containing form control.

- -
alert
- -

This message will be shown when the form control cannot properly bind to instance data or when the instance data value is invalid or out of the specified range of selectable values (see the spec).

- -
message
- -

Used in combination with event listeners to display a message to the user when the specified event occurs (see the spec).

- -

Interface utilisateur de XForms

- -

These elements are mainly used to organize and manage the form's markup.

- -

They can be bound to instance nodes to define context for the xforms controls that they contain, should any of their child nodes happen to use relative xpath expressions. Binding these elements to instance data is also a way to apply Model Item Properties (for example, relevancy) to the elements.

- -

Elements in this section do not have any behaviors that are dependent on the host language.

- -
group
- -

This element is used to logically group xforms elements together (see the spec).

- -
switch
- -

This element is used in conjunction with 'case' and 'toggle' elements (see the spec). The 'switch' element contains 'case' elements which in turn contain markup. Only the contents of a single case may be displayed at one time. The 'toggle' element is used (as an event handler) to make a 'case' visible and thereby hiding all other cases contained by the same 'switch'.

- -
repeat
- -

A repeat element contains markup and is itself bound to a nodeset in an instance document (see the spec). For each node in the nodeset, the contents of the repeat element will be displayed in the form. That node will serve as the context node for any relative xpath expressions in that set of repeated markup. For example, if a repeat is bound to a nodeset that contains 5 nodes and the repeat contains an 'output' element that echoes the current node, then the user will see 5 outputs in the form. Combined together, these outputs would echo the value of every node in the selected nodeset.

diff --git "a/files/fr/assurance_qualit\303\251/tests_en_charge/index.html" "b/files/fr/assurance_qualit\303\251/tests_en_charge/index.html" deleted file mode 100644 index 4c851c2817..0000000000 --- "a/files/fr/assurance_qualit\303\251/tests_en_charge/index.html" +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Tests en charge -slug: Assurance_qualité/Tests_en_charge -tags: - - Tools -translation_of: Archive/Mozilla/Stress_testing ---- -

 

-

Outils pour Microsoft Windows

-

L'outil - - consume.exe - de la trousse à outils de Windows Server 2003 peut consommer différentes ressources : mémoire physique, temps de CPU, fichier d'échange, espace disque et même la mémoire noyau. Bien qu'il soit recommandé pour Win2003, il peut être installé sous Windows XP (la compatibilité avec Win2000 est inconnue). La seule restriction est que vous ne pouvez pas définir l'exacte quantité de ressource à utiliser, mais seulement celle à utiliser. Attention : n'oubliez jamais l'option -time, sinon vous devrez appuyer sur le bouton reset de votre PC plus tôt que prévu !

-

{{ languages( { "en": "en/QA/Stress_Testing" } ) }}

diff --git a/files/fr/bundles/index.html b/files/fr/bundles/index.html deleted file mode 100644 index c9ba41e9fc..0000000000 --- a/files/fr/bundles/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Structure d'un paquet installable -slug: Bundles -tags: - - API_du_toolkit -translation_of: Archive/Mozilla/Bundles ---- -

 

-

Les applications XULRunner, les extensions et les thèmes partagent tous une structure de répertoire commune, et dans certains cas le même paquet peut être utilisé comme une application XULRunner indépendante aussi bien que comme une extension installable dans une autre application. La structure de base des paquets (bundles) peut contenir n'importe quels fichiers parmi ceux-ci :

-
/install.rdf                        Manifeste d'installation de thème/extension
-/application.ini                    Manifeste de lancement de l'application
-/components/*                       Fichiers XPT et composants .so/.dll/.js (>=1.7)
-/defaults/preferences/*.js          Préférences par défaut              (>=1.7)
-/plugins/*                          Plugins NPAPI                       (>=1.8)
-/chrome.manifest                    Manifestes d'enregistrements chrome (>=1.8)
-/chrome/icons/default/*             Icônes de fenêtre                   (>=1.8)
-
-

Bien sûr, une extension n'a pas besoin de (et normalement n'aura pas) tous ces répertoires. Les thèmes sont limités pour des raisons de sécurité et ne peuvent normalement fournir qu'un chrome.manifest enregistrant le thème et un fichier JAR.

-

 

-

Sous-répertoires spécifiques à une plateforme

-

Dans certains cas, une seule extension ou application peut avoir besoin d'inclure des composants binaires ou plugins pour plusieurs plateformes, ou des auteurs de thème peuvent vouloir inclure plusieurs fichiers JAR spécifiques à une plateforme. Pour faciliter les choses dans le premier cas, le chargeur d'extension/application possède des sous-répertoires spéciaux prévus spécialement pour les fichiers spécifiques à une plateforme (à partir du toolkit/Gecko 1.8, Firefox/Thunderbird 1.5). La chaîne de plateforme est définie au cours du processus de compilation du toolkit à une valeur unique pour la combinaison du système d'exploitation, l'architecture du processeur et le compileur. Le format de la chaîne de plateforme est :

-
{OS_TARGET}_{TARGET_XPCOM_ABI}
-
-

Tous les fichiers qui sont chargés depuis le répertoire principal de l'extension sont chargés depuis le sous-répertoire

-
/platform/{chaîne de plateforme}
-
-

si celui-ci existe. Par exemple, si un vendeur de plugin désire fournir un plugin aux utilisateurs de Linux, Macintosh et Windows, il fournira les fichiers suivants :

-
/platform/Linux_x86-gcc3/plugins/libMyPlugin.so
-/platform/WINNT_x86-msvc/plugins/MyPlugin.dll
-/platform/Darwin_ppc-gcc3/plugins/libMyPlugin.dylib
-/platform/Linux_x86-gcc3/components/myComponents.so
-
-
-

Étant donné que les fichiers XPT ne dépendent pas de la plateforme, tous les éventuels fichiers XPT associés seront placés dans le répertoire de composants génériques :

-
/components/MyPlugin.xpt
-
-

Si une extension a du code spécifique à une plateforme non binaire (comme du code utilisant la base de registres de Windows depuis un script), elle peut aussi utiliser l'identifiant du système d'exploitation comme sous-répertoire de plateforme :

-
/platform/WINNT/components/registerDoctype.js
-
-

Lorsque des fichiers JAR spécifiques à une plateforme sont utilisés, chaque répertoire de plateforme doit avoir son propre fichier chrome.manifest :

-
chrome.manifest
-chrome/mytheme-base.jar
-platform/Darwin/chrome.manifest
-platform/Darwin/chrome/mytheme-mac.jar
-platform/WINNT/chrome.manifest
-platform/WINNT/chrome/mytheme-win.jar
-
-

Le chargeur d'application/extension analyse d'abord le répertoire de base, puis les répertoires de plateforme applicables (d'abord /{OS_TARGET}/, ensuite /{OS_TARGET}_{TARGET_XPCOM_ABI}/). Lorsque les préférences par défaut sont définies dans plusieurs répertoires, ceux qui sont chargés en dernier ont priorité sur ceux chargés auparavant.

-

Fichiers d'extension spécifiques à une application

-

En plus des fichiers d'extension listés plus haut, les applications peuvent lire des fichiers supplémentaires depuis des extensions. Par exemple, Firefox 1.5 et supérieur cherchera les plugins de recherche Sherlock dans

-
/searchplugins/*.src
-
-

Firefox 2 (et supérieurs) recherchera également les plugins MozSearch et OpenSearch dans

-
/searchplugins/*.xml
-
-

ainsi que les dictionnaires Myspell dans

-
/dictionaries/*.{aff|dic}
-
-

Références officielles de l'API du toolkit

-

-

- -

 

diff --git a/files/fr/changements_dans_xmlhttprequest_pour_gecko_1.8/index.html b/files/fr/changements_dans_xmlhttprequest_pour_gecko_1.8/index.html deleted file mode 100644 index f6958dd779..0000000000 --- a/files/fr/changements_dans_xmlhttprequest_pour_gecko_1.8/index.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Changements dans XMLHttpRequest pour Gecko 1.8 -slug: Changements_dans_XMLHttpRequest_pour_Gecko_1.8 -tags: - - AJAX - - Extensions - - XMLHttpRequest -translation_of: Mozilla/XMLHttpRequest_changes_for_Gecko_1.8 ---- -

Ce document décrit les quelques modifications subies par l'implémentation de XMLHttpRequest dans Gecko depuis sa version 1.7 (c'est-à-dire la version de Gecko équipant Firefox 1.0). Ces modifications n'affectent que les extensions et applications XUL. Elles ne s'appliquent pas à vos applications Web. -

-

Modifications de XMLHttpRequest.send

-

Si vous passez une instance nsIInputStream à la méthode send, alors elle ne devra plus inclure les en-têtes <tt>Content-Length</tt> et <tt>Content-Type</tt> au début du flux de données. Au lieu de cela, l'en-tête <tt>Content-Length</tt> sera déduit de la longueur du flux de données, et l'en-tête <tt>Content-Type</tt> devra être spécifié manuellement par l'appel de la méthode setRequestHeader. Ces exigences sont décrites plus en détail dans nsIXMLHttpRequest.idl. -

-

Modifications de XMLHttpRequest.onreadystatechange

-

Cet attribut a maintenant un type nsIOnReadyStateChangeHandler plutôt que nsIOnReadystatechangeHandler (Le "S" et le "C" du nom du type ont été mis en majuscule). -

-
-
-{{ languages( { "en": "en/XMLHttpRequest_changes_for_Gecko1.8", "es": "es/XMLHttpRequest_cambios_en_Gecko1.8", "it": "it/Cambiamenti_di_XMLHttpRequest_in_Gecko1.8", "ja": "ja/XMLHttpRequest_changes_for_Gecko1.8", "ko": "ko/XMLHttpRequest_changes_for_Gecko1.8", "pl": "pl/Zmiany_w_obiekcie_XMLHttpRequest_w_Gecko_1.8" } ) }} diff --git a/files/fr/comment_integrer_le_moteur_javascript/index.html b/files/fr/comment_integrer_le_moteur_javascript/index.html deleted file mode 100644 index e7af5a2337..0000000000 --- a/files/fr/comment_integrer_le_moteur_javascript/index.html +++ /dev/null @@ -1,249 +0,0 @@ ---- -title: Comment intégrer le moteur Javascript -slug: Comment_integrer_le_moteur_Javascript -tags: - - Intégrer Mozilla - - JavaScript - - SpiderMonkey - - Tutoriel -translation_of: Mozilla/Projects/SpiderMonkey/How_to_embed_the_JavaScript_engine ---- -

Voir aussi le guide utilisateur JSAPI. Il possède de meilleurs et plus nombreux exemples de code!

-

Un Tutoriel Couvrant l'Essentiel

-

Exemple d'intégration dans une application

-

Le code suivant est une simple application montrant comment intégrer SpiderMonkey et exécuter un script Javascript simple. Voir les instructions concernant la compilation et l'exécution en dessous du code.

-
/*
- * Uniquement sur Windows, il s'agit d'un fix pour le bug 661663.
- */
-#ifdef _MSC_VER
-# define XP_WIN
-#endif
-
-/* Inclusion du header JSAPI afin d'accéder à SpiderMonkey. */
-#include "jsapi.h"
-
-/* La classe de l'objet global. */
-static JSClass global_class = {
-    "global", JSCLASS_GLOBAL_FLAGS,
-    JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
-    JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
-    JSCLASS_NO_OPTIONAL_MEMBERS
-};
-
-/* Callback du rapporteur d'erreurs. */
-void reportError(JSContext *cx, const char *message, JSErrorReport *report)
-{
-    fprintf(stderr, "%s:%u:%s\n",
-            report->filename ? report->filename : "<no filename=\"filename\">",
-            (unsigned int) report->lineno,
-            message);
-}
-
-int main(int argc, const char *argv[])
-{
-    /* Variables JSAPI. */
-    JSRuntime *rt;
-    JSContext *cx;
-    JSObject  *global;
-
-    /* Créer un runtime JS. Il faut toujours un runtime par processus. */
-    rt = JS_NewRuntime(8 * 1024 * 1024);
-    if (rt == NULL)
-        return 1;
-
-    /*
-     * Créée un contexte. Il faut toujours un contexte par thread.
-     * Notez que ce programme n'est pas multi-threadé.
-     */
-    cx = JS_NewContext(rt, 8192);
-    if (cx == NULL)
-        return 1;
-    JS_SetOptions(cx, JSOPTION_VAROBJFIX | JSOPTION_JIT | JSOPTION_METHODJIT);
-    JS_SetVersion(cx, JSVERSION_LATEST);
-    JS_SetErrorReporter(cx, reportError);
-
-    /*
-     * Créée l'objet global dans un nouveau compartiment.
-     * Il faut toujours un objet global par contexte.
-     */
-    global = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
-    if (global == NULL)
-        return 1;
-
-    /*
-     * On peuple l'objet global avec les fonctions et les objets
-     * Javascript standard, tels que Object, Array ou Date.
-     */
-    if (!JS_InitStandardClasses(cx, global))
-        return 1;
-
-    /* Le code de votre application est ici. Ceci inclue la création de
-     * vos propres objets Javascript ou l'exécution de scripts via JSAPI.
-     *
-     * L'exemple suivant créée un script Javascript littéral,
-     * l'évalue, et affiche le résultat dans stdout.
-     *
-     * Par convention les erreurs sont stockées dans la variable JSBool ok.
-     */
-    const char *script = "'Hello ' + 'World!'";
-    jsval rval;
-    JSString *str;
-    JSBool ok;
-    const char *filename = "noname";
-    uintN lineno = 0;
-
-    ok = JS_EvaluateScript(cx, global, script, strlen(script),
-                           filename, lineno, &rval);
-    if (rval == JS_NULL | rval == JS_FALSE)
-        return 1;
-
-    str = JS_ValueToString(cx, rval);
-    printf("%s\n", JS_EncodeString(cx, str));
-
-    /* Fin de votre code d'application */
-
-    /* Nettoyage et fermeture de SpiderMonkey. */
-    JS_DestroyContext(cx);
-    JS_DestroyRuntime(rt);
-    JS_ShutDown();
-    return 0;
-}
-

L'exemple Hello World mis à jour pour SpiderMonkey24:

-
#include "jsapi.h"
-
-/* Classe de l'objet global. */
-static JSClass global_class = {
-    "global", 
-    JSCLASS_GLOBAL_FLAGS,
-    JS_PropertyStub, 
-    JS_DeletePropertyStub, 
-    JS_PropertyStub, 
-    JS_StrictPropertyStub,
-    JS_EnumerateStub,  
-    JS_ResolveStub, 
-    JS_ConvertStub
-};
-
-
-int main(int argc, const char *argv[])
-{
-    JS_Init();
-
-    JSRuntime *rt = JS_NewRuntime(8L * 1024 * 1024, JS_NO_HELPER_THREADS);
-    if (!rt)
-        return 1;
-
-    JSContext *cx = JS_NewContext(rt, 8192);
-    if (!cx)
-        return 1;
-
-    JS::RootedObject global(cx, JS_NewGlobalObject(cx, &global_class, nullptr, JS::DontFireOnNewGlobalHook));
-    if (!global)
-        return 1;
-
-    JS::Value rval;
-    bool ok;
-    {
-      JSAutoCompartment ac(cx, *global); 
-      JS_InitStandardClasses(cx, *global);
-
-      const char *script = "'hello'+'world, it is '+new Date()";
-      const char *filename = "noname";
-      int lineno = 0;
-      ok = JS_EvaluateScript(cx, *global, script, strlen(script), filename, lineno, &rval);
-      if (rval.isNull() | rval.isFalse() )
-        return 1;
-    }
-
-    JSString *str = rval.toString();
-    printf("%s\n", JS_EncodeString(cx, str));
-
-    JS_DestroyContext(cx);
-    JS_DestroyRuntime(rt);
-    JS_ShutDown();
-    return 0;
-}
-
-  
-

Compiler et exécuter l'exemple Hello World

-
- Voici un exemple en ligne de commande Linux (où <objdir> est le dossier dans lequel SpiderMonkey a été compilé):
-
-     g++ -I<objdir>/dist/include -L<objdir>/dist/bin -lmozjs185  helloworld.cpp -O helloworld
-    
-
- Voici un exemple en ligne de commande Windows avec le shell MozillaBuildHere:
-
-     cl helloworld.cpp -link dist/lib/mozjs185-1.0.lib
-    
-
- Ceci devrait afficher Hello World!
-    
-
    -
  1. Assurez-vous que l'ordinateur sur lequel vous effectuez la compilation remplit les prérequis pour compiler SpiderMonkey: Linux, Windows, Mac OS X, autres. Pour Windows, les étapes suivantes permettent de s'assurer que le package MozillaBuild est bien installé.
  2. -
  3. Récupérez le code source de SpiderMonkey. Vous pouvez télécharger un archive contenant les sources ou utiliser Mercurial (hg) pour cloner le dépôt SpiderMonkey. Sur Windows, n'installez pas les sources de SpiderMonkey sous le dossier racine MSYS (qui est en général c:\mozilla-build\msys). Utilisez plutôt par exemple c:\js-1.8.5.
  4. -
  5. Compilez SpiderMonkey en utilisant les instructions se trouvant dans Documentation de la compilation de SpiderMonkey. Par défaut une bibliothèque partagée de SpiderMonkey sera compilée que vous pourrez lier à votre application dans une prochaine étape.
  6. -
  7. Copiez l'exemple de code plus haut dans un éditeur de texte et enregistrer le fichier en tant que helloworld.cpp dans le dossier de SpiderMonkey js\src. Pour copier le code sans les numéros de lignes, placez la souris au dessus de l'exemple près du haut et attendez l'apparition des boutons. Cliquez ensuite sur le bouton voir source, et copiez le code depuis la fenêtre qui apparaît.
  8. -
  9. Compilez l'application HelloWorld and liez avec la bibliothèque SpiderMonkey.
  10. -
  11. cl helloworld.cpp -link dist/lib/mozjs185-1.0.lib
  12. -
  13. Exécutez le programme helloworld à l'aide de la ligne de commande:
    -     ./helloworld
  14. -
-

Appeler des fonctions C depuis Javascript

-

Mettons que la fonction C est nommée doit et demande au moins deux paramètres lors de l'appel (si l'appelant en fournit moins, le moteur JS doit s'assurer que undefined est passé pour ceux manquants) :

-
#define DOIT_MINARGS 2
-
-static JSBool
-doit(JSContext *cx, unsigned argc, jsval *vp)
-{
-    jsval *argv = JS_ARGV(cx, vp);
-    /*
-     * Cherche dans argv les paramètres, et assigne *rval pour
-     * retourner une valeur à l'appelant.
-     */
-    ...
-}
-
-

Pour faire le lien avec JS, vous pouvez écrire :

-
ok = JS_DefineFunction(cx, global, "doit", doit, DOIT_MINARGS, 0);
-
-

Si vous avez plusieurs fonction natives à définir, vous pouvez les mettre dans un tableau :

-
static JSFunctionSpec my_functions[] = {
-    {"doit", doit, DOIT_MINARGS, 0, 0},
-    etc...
-    {0,0,0,0,0},
-};
-
-

(la spécification de fonction comportant uniquement des zéros délimite la fin du tableau) et effectuer :

-
ok = JS_DefineFunctions(cx, global, my_functions);
-
-

Appeler des fonctions Javascript depuis C

-

Considérons qu'un évènement de clic concerne l'élément d'interface utilisateur le plus à l'avant ou qui a le focus à une position donnée (x, y) :

-
JSObject *target, *event;
-jsval argv[1], rval;
-
-/*
- * On trouve la cible de l'évènement et créée un object d'évènement
- * représentant le clic.
- * On passe cx à NewEventObject pour que JS_NewObject puisse être appelé.
- */
-target = FindEventTargetAt(cx, global, x, y);
-event = NewEventObject(cx, "click", x, y);
-argv[0] = OBJECT_TO_JSVAL(event);
-
-/* Pour émuler le DOM, vous pouvez aussi essayer "onclick". */
-ok = JS_CallFunctionName(cx, target, "onClick", 1, argv, &rval);
-
-/* On teste rval pour voir si l'évènement doit être annulé. */
-if (JSVAL_IS_BOOLEAN(rval) && !JSVAL_TO_BOOLEAN(rval))
-    CancelEvent(event);
-
-

Une fois de plus, les tests d'erreurs ont été omis (tel que tester !ok après l'appel), et quelques comportements dans la gestion des évènements C pour annuler un évènement si le handler retourne false ont été simulés.

-
-

Informations sur le document original

- -
-

 

diff --git a/files/fr/compare-locales/index.html b/files/fr/compare-locales/index.html deleted file mode 100644 index 31f048da4c..0000000000 --- a/files/fr/compare-locales/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Compare-locales -slug: Compare-locales -tags: - - Localisation - - Tools -translation_of: Mozilla/Projects/compare-locales ---- -

compare-locales est un script en python pour aider les localisateurs à vérifier leur travail sans lancer Firefox ou une autre application.

-

Installation

-

compare-locales doit être installé, et nécessite une installation de Python sur votre machine. La manière la plus simple est de faire

-
easy_install -U compare-locales
-
-

si Python est déjà installé, car la version courante a été placée sur pypi. Si ce n'est pas le cas, vous en saurez plus en consultant EasyInstall.

-

It's checked in to cvs at <code>mozilla/testing/tests/l10n</code>, so you can get it via cvs -z3 -d:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/testing/tests/l10n To actually install it, go into the source dir and use the regular distutils <code>setup.py</code> commands: cd mozilla/testing/tests/l10n python setup.py install You can specify a <code>--prefix</code> option in the latter, but make sure that you have your <code>PYTHONPATH</code> set up correctly to pick it up.

-

Ceci installera les modules python nécessaires ainsi que quelques scripts en ligne de commande, en particulier compare-locales.

-
- La dernière version se trouve à présent sur http://hg.mozilla.org/users/axel_mozilla.com/tooling, bien qu'elle n'ait pas été vérifiée récemment par quelqu'un d'extérieur. La version placée sur pypi est cependant également produite à partir de là.
-

Exécution

-
- Ceci décrit la syntaxe d'appel pour les versions 0.5 et ultérieures. Pour les versions plus anciennes veuillez consulter les archives de la documentation.
-

compare-locales rassemble les répertoires à comparer depuis un fichier INI, généralement placé dans $APP/locales/l10n.ini. Passez à la fois le chemin vers le fichier INI et le répertoire parent des localisations comme premiers paramètres, suivis des codes des locales à comparer. Si vous voulez par exemple tester la localisation pour fr, exécutez

-
compare-locales browser/locales/l10n.ini ../l10n/ fr
-
-

À partir de la version 0.5, les répertoires de localisation ne doivent pas se trouver liées dans un emplacement relatif à votre répertoire mozilla. Ceci fonctionne sur les branches CVS ainsi que sur mozilla-central.

-

Options

-

À faire.

-

Sortie

-

La sortie de compare-locales donne les chaînes manquantes et obsolètes dans un format pseudo-diff.

-
ab-CD
-  browser
-    chrome/browser
-      browser.dtd
-          +backForwardMenu.tooltip
-          +fullZoomEnlargeCmd.commandkey3
-          +fullZoomReduceCmd.commandkey2
-          +fullZoomResetCmd.commandkey2
-          +organizeBookmarks.label
-          -showAllBookmarksCmd2.label
-      migration/migration.dtd
-          -importFromFile.accesskey
-          -importFromFile.label
-          +importFromHTMLFile.accesskey
-          +importFromHTMLFile.label
-
-

Lorsque vous voyez des entités retirées et ajoutées avec un nom similaire, ce sont probablement des chaînes modifiées. Les noms de fichiers seront affichés sous une forme hiérarchique, dans l'exemple ci-dessus les fichiers sont browser.dtd dans ab-CD/browser/chrome/browser et migration.dtd dans un autre répertoire de niveau inférieur.

-

La sortie se termine par un résumé, donnant le compte total des chaînes manquantes et obsolètes (les entrées individuelles dans les fichiers manquants ne sont pas comptées pour l'instant), ainsi que quelques statistiques sur le nombre de chaînes modifiées ou non, à l'exclusion des touches d'accès rapide et de commandes. Cela permet aux localisateurs d'avoir une idée de la complétude de leur localisation. Ce nombre n'atteindra en général par 100% mais devrait se situer aux alentours de 85% en définitive.

diff --git a/files/fr/components.utils.evalinsandbox/index.html b/files/fr/components.utils.evalinsandbox/index.html deleted file mode 100644 index 365f93e2ea..0000000000 --- a/files/fr/components.utils.evalinsandbox/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Components.utils.evalInSandbox -slug: Components.utils.evalInSandbox -translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.evalInSandbox ---- -

Introduction

-

Il peut arriver que vous vouliez exécuter du code JavaScript avec des droits restreints. Depuis Firefox 1.5 (Gecko 1.8) vous pouvez faire cela en utilisant une API qui permet la création de "bacs à sables" à l'intérieur desquels le code sera interprété avec des droits restreints, comme le code exécuté dans une page web.

-

Usage

-

Il faut créer un objet au moyen du constructeur Components.utils.Sandbox, pour pouvoir ensuite utiliser la fonction evalInSandbox(). L'objet doit être initialisé soit avec une URI, soit, et c'est préférable, avec un objet DOM window (nsIDOMWindow). Depuis Firefox 3, il est également possible de l'initialiser avec un nsIPrincipal. Qu'il s'agisse d'une URI, d'une nsIDOMWindow ou d'un nsIPrincipal, l'objet utilisé pour initialiser le bac à sable, servira d'origine pour le code interprété. Cette origine sera par exemple utilisée pour les contrôles de sécurité basés sur la "même origine". Par exemple, si le bac à sable est initialisé avec l'URI http://www.example.com/, les appels AJAX exécutés à l'intérieur seront limités au serveur http://www.example.com. Si le code interprété modifie la propriété document.domain, ce qui à un impact sur les contrôles de même origine, il faut initialiser le bac à sable avec une nsIDOMWindow ou un nsIPrincipal

-

Voici un exemple avec une URI:

-
// crée un bac à sable en précisant l'URI d'origine
-var s = Components.utils.Sandbox("http://www.example.com/");
-
-

Le bac à sable n'est qu'un objet JavaScript vide marqué comme créé avec des droits restreints. Il deviendra le contexte global d'exécution du code interprété au moyen de evalInSandbox(text, sandbox). En ajoutant des propriétés à l'objet, elles seront accessibles dans ce contexte. Ainsi, en utilisant l'exemple précédent:

-
s.y = 5;  // ajoute la propriété 'y' valant 5 dans le contexte global du bac à sable
-var result = Components.utils.evalInSandbox("x = y + 2; x + 3", s);
-// le résultat vaut 10 et s.x 7
-
-

Les manipulations sur les objets mis à disposition dans le bac à sable ne transmettent pas de droits:

-
s.foo = Components;
-// l'instruction suivante déclenchera une erreur "Opération interdite"
-Components.utils.evalInSandbox("foo.classes", s);
-
-

Par contre, toute fonction réussissant à "sortir" du bac à sable s'exécutera avec les mêmes droits que le code dans le chrome. La section suivante décrit plusieurs situation où cela peut se produire.

-

Note: du fait du bug 350558, les tableaux créés à l'intérieur du bac à sable ne sont pas des instance de l'objet Array

-

Sécurité

-
- Attention: Des problèmes de sécurité peuvent survenir lorsque vous utilisez evalInSandbox() si vous accédez aux propriétés d'un objet créé dans le bac à sable.
-

Exemples:

-
<script src="prototype.js"></script>
-
-<script>
-var s = new Components.utils.Sandbox(url);
-var x = Components.utils.evalInSandbox(untrusted_code, s);
-if (x == 1) {
-  /* ce code n'est pas sûr car il fait appel à la fonction x.valueOf() */
-}
-
-if (x === 1) {
-  /* ce code est sûr */
-}
-
-/* les deux assignations suivantes ne sont pas sûres */
-var y = x.y;
-var z = sandbox.z;
-
-if (typeof x == "number") {
-  /* sûr */
-}
-</script>
-
-

Lorsque le code (x == 1) est exécuté, la méthode x.valueOf() est appelée depuis le chrome, ce qui peut permettre à du code non sûr de créer un objet String dans le contexte global du chrome.

-

Si du code dans le Chrome a ajouté une fonction privilégiée au prototype des objets String, Object, ou Function, du code non sûr pourrait utiliser cette fonction et s'en servir pour s'exécuter avec les droits du chrome.

-

Pour éviter ce risque, il faut soit éviter d'utiliser des objets créés par evalInSandbox() de quelque manière qui pourrait faire qu'une fonction de cet objet serait appelée, ou vous devez vous assurer avant d'appeler evalInSandbox() pour exécuter une chaîne contenant un objet au format JSON que celle-ci ne contient aucune fonction.

-


- Pour en savoir plus: PiggyBank analysis of sandbox

-

diff --git a/files/fr/components.utils.import/index.html b/files/fr/components.utils.import/index.html deleted file mode 100644 index 7e0b6da116..0000000000 --- a/files/fr/components.utils.import/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Components.utils.import -slug: Components.utils.import -tags: - - NeedsContent - - 'XPCOM:Liaisons_de_langage' - - XPConnect -translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.import ---- -

- -

Cette méthode a été introduite dans Firefox 3 et est utilisée pour partager aisément du code entre différentes visibilités. Par exemple, il est possible d'importer XPCOMUtils.jsm pour éviter de copier/coller de longs pavés d'enregistrement de composants XPCOM dans vos fichiers de composants. -

Consultez le bug 238324, la documentation dans xpccomponents.idl ainsi que les tests dans js/src/xpconnect/tests/unit/ pour plus de détails et des exemples. -

-

Différences avec mozIJSSubScriptLoader

-

Les différences avec mozIJSSubScriptLoader sont les suivantes : -

- -


-

-
-
diff --git a/files/fr/components.utils.reporterror/index.html b/files/fr/components.utils.reporterror/index.html deleted file mode 100644 index ff02808792..0000000000 --- a/files/fr/components.utils.reporterror/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Components.utils.reportError -slug: Components.utils.reportError -tags: - - 'XPCOM:Liaisons_de_langage' - - XPConnect -translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.reportError ---- -

-

Components.utils.reportError reporte un objet d'erreur JavaScript vers la console d'erreurs JavaScript, et se termine. Vous pouvez l'utiliser dans des blocs de gestion d'exceptions pour « avaler » une exception, mais tout en conservant un report d'erreurs dans la console. -

Il doit être appelé avec un seul paramètre qui est habituellement l'objet capturé par l'exception. S'il ne s'agit pas d'un objet d'erreur JavaScript, le paramètre est converti en chaîne de caractères et reporté en tant qu'erreur. Vous pouvez ainsi utiliser Components.utils.reportError pour afficher des messages de débogage dans la console d'erreurs JavaScript, comme dump() le fait dans un terminal. -

Cependant pour ces reports, vous devriez utiliser nsIConsoleService qui affiche les messages avec une gravité normale, contrairement à reportError. -

-
function myDump(aMessage) {
-  var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
-                                 .getService(Components.interfaces.nsIConsoleService);
-  consoleService.logStringMessage("Mon composant : " + aMessage);
-}
-
-

Exemples

-

Utilisation dans un gestionnaire d'exception : -

-
try {
-  ceci.doit.lever.une.exception;
-} catch(e) {
-  Components.utils.reportError(e); // Reporter l'erreur et continuer l'exécution
-}
-
-

Affichage de messages de débogage dans la console d'erreurs JavaScript : -

-
Components.utils.reportError("init() appelée");
-
diff --git a/files/fr/components.utils/index.html b/files/fr/components.utils/index.html deleted file mode 100644 index 8277a8f08a..0000000000 --- a/files/fr/components.utils/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Components.utils -slug: Components.utils -tags: - - 'XPCOM:Liaisons_de_langage' - - XPConnect -translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils ---- -

Components.utils est une collection de diverses fonctionnalités utiles à XPConnect. Son interface est définie dans js/xpconnect/idl/xpccomponents.idl. Cet objet a actuellement les membres suivants :

-

REDACTEURS! Veuillez garder cette liste synchronisée avec la page Components object

-

Méthodes

- -
Méthode Description
createObjectIn() Crée un nouvel objet, créé dans le cadre du compartiment de l'objet spécifié.
evalInSandbox Exécute du code JavaScript dans une sandbox, généralement utilisé pour exécuter un code avec des privilèges restreints.
forceGC Force un cycle de ramasse-miettes.
getGlobalForObject() Renvoie l'objet global avec lequel un objet donné est associé (à travers sa chaîne prototype à sa naissance, par exemple).
getWeakReference Obtient une faible référence de l'objet passé.
import Charge un module JS dans le script courant, sans partager de visibilité.
lookupMethod Examine une méthode ou propriété native (c'est-à-dire déclaré dans l'interface) d'un objet XPCOM. Sert à la même chose que XPCNativeWrapper.
makeObjectPropsNormal() S'assure que toutes les fonctions viennent du champ d'application de l'objet spécifié, et les enveloppes des compartiments ne sont pas croisées. Ne peut être appelée qu'à partir de code JavaScript.
reportError Rapporte l'erreur d'un objet JavaScript dans la Console d'erreurs.
schedulePreciseGC() Prévoit un cycle de ramasse-miettes au cours duquel aucun code JavaScript ne sera exécuté. Cela vous permet de spécifier un rappel afin que vous puissiez être averti lorsque le cycle de ramasse-miettes a été effectué.
setGCZeal() Règle le niveau du ramasse-miettes pour une collecte complète. Voir JS_SetGCZeal pour plus de détails, cette méthode appelle par le biais de la valeur spécifiée comme la valeur zeal.
-

Propriétés

-
- -
Propriété Type Description
Sandbox nsIXPCComponents_utils_Sandbox Crée des objets sandbox pout être utilisés avec evalInSandbox.
atline Booléen Lorsque atline est activé, les comemntaires de la forme //@line num définissent le nombre de la ligne suivante à num. Cela reflète la valeur de l'option de l'environnement JavaScript par le même nom. lecture seule.
methodjit Booléen Cela reflète la valeur de l'option de l'environnement JavaScript par le même nom. lecture seule.
methodjit_always Booléen Cela reflète la valeur de l'option de l'environnement JavaScript par le même nom. lecture seule.
relimit Booléen Cela reflète la valeur de l'option de l'environnement JavaScript par le même nom. lecture seule.
strict Booléen le mode strict est activé. Cela reflète la valeur de l'option de l'environnement JavaScript par le même nom. lecture seule.
werror Booléen Les avertissements doivent être traités comme des erreurs. Cela reflète la valeur de l'option de l'environnement JavaScript par le même nom. lecture seule.
xml Booléen Le mode XML est activé. Cela reflète la valeur de l'option de l'environnement JavaScript par le même nom. lecture seule.
-

diff --git a/files/fr/comportement_du_mode_quirks_de_mozilla/index.html b/files/fr/comportement_du_mode_quirks_de_mozilla/index.html deleted file mode 100644 index 53ee30b0a6..0000000000 --- a/files/fr/comportement_du_mode_quirks_de_mozilla/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Comportement du mode quirks de Mozilla -slug: Comportement_du_mode_quirks_de_Mozilla -tags: - - Développement_Web -translation_of: Mozilla/Mozilla_quirks_mode_behavior ---- -

-

Ce qui suit est une liste sommaire des différences qui existent entre les modes standard et quirks de Mozilla. Cette liste date de début juin 2001 (avec quelques ajouts depuis lors, mais pas la liste complète de ce qui a changé). Depuis lors, le changement le plus important est que beaucoup de déviations liées au contrôle des formulaires ont été retirées. Un autre changement souvent remarqué est qu'en mode standard, les feuilles de styles CSS qui portent un autre type MIME que text/css sont rejetées. -

-

Généralités et style

- -

Rendu de bloc et inline

- -

Tableaux

- -

Formulaires

- -

Frames

- -

Analyseur HTML

- -
-

Informations sur le document original

- -
-

Voir aussi

-

Mode quirks de Mozilla -

{{ languages( { "en": "en/Mozilla_Quirks_Mode_Behavior", "ja": "ja/Mozilla_Quirks_Mode_Behavior" } ) }} diff --git a/files/fr/console_d'erreurs/index.html b/files/fr/console_d'erreurs/index.html deleted file mode 100644 index a21be460e8..0000000000 --- a/files/fr/console_d'erreurs/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Console d'erreurs -slug: Console_d'erreurs -tags: - - Extensions - - JavaScript - - Tools -translation_of: Archive/Mozilla/Error_console ---- -

La console d'erreur, disponible dans la plupart des applications basées sous Mozilla, est un outil permettant de suivre le rapport des erreurs de l'application chrome et des pages Web ouvertes par l'utilisateur. Elle affiche les erreurs relatives au JavaScript, les erreurs CSS, et les messages arbitraires du code chrome.

-

Avant Gecko 1.8.1 (Firefox 2.0), elle s'appelait Console JavaScript (voir le {{ Bug(265871) }}).

-

Types d'erreurs

-
-
- Erreur 
-
- Habituellement, une erreur de syntaxe empêchant le programme de compiler.
-
- Avertissement 
-
- Laisse habituellement le programme se compiler mais alerte sur un mauvais codage et suggère une erreur de conception.
-
- Message 
-
- Très proche de l'avertissement, mais rarement utilisé.
-
-

Manipulation des données affichées dans la console d'erreur

-

Les informations affichées dans la console d'erreur peut être lues et manipulées grâce à nsIConsoleService. Une méthode plus simple pour écrire dans la console depuis le JavaScript utilise Components.utils.reportError et dump().

-

Pour faire apparaître la console dans un overlay de navigateur ou de messagerie, utilisez la fonction toJavaScriptConsole.

-

Alternatives

-
-
- Console2
-
- Cette extension offre une alternative à la console d'erreurs, avec la correction de nombreux bogues et des améliorations longtemps attendues.
-
-
-
- Firebug
-
- Cette autre extension pour Firefox intègre également une console d'erreur comportant de très nombreuses améliorations.
-
-

Sujets connexes

-
-
- JavaScript, CSS, Développement Web
-
-


- Liens Interwikis

diff --git "a/files/fr/cr\303\251ation_d'expression_r\303\251guli\303\250res_pour_les_g\303\251n\303\251rateurs_de_micror\303\251sum\303\251s/index.html" "b/files/fr/cr\303\251ation_d'expression_r\303\251guli\303\250res_pour_les_g\303\251n\303\251rateurs_de_micror\303\251sum\303\251s/index.html" deleted file mode 100644 index 258ea118ed..0000000000 --- "a/files/fr/cr\303\251ation_d'expression_r\303\251guli\303\250res_pour_les_g\303\251n\303\251rateurs_de_micror\303\251sum\303\251s/index.html" +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Création d'expression régulières pour les générateurs de microrésumés -slug: Création_d'expression_régulières_pour_les_générateurs_de_microrésumés -tags: - - Microrésumés -translation_of: Archive/Mozilla/Creating_regular_expressions_for_a_microsummary_generator ---- -
- Attention: la compatibilité avec Microsummary a été retirée dans Gecko 6.0 {{ geckoRelease("6.0") }}
-

- Introduction

-

- Une expression régulière est un type particulier de chaîne (une séquence de caractères) qui coïncide avec la disposition des caractères dans certaines autres chaînes. Les générateurs de microrésumés les emploient pour déterminer les pages sur lesquelles ils savent travailler en comparant l'expression régulière aux URL des pages.

-

- Ce tutoriel propose de créer des expressions régulières correspondant aux URL des pages d'enchères eBay. Les bases de la création d'expressions régulières destinées à sélectionner des URL devraient vous être familières d'ici la fin de cet article.

-

- Si vous recherchez une documentation complète sur les expressions régulières, consultez Référence de JavaScript 1.5 Core:Objets globaux:RegExp. Si vous désirez apprendre à créer un générateur de microrésumé, consultez Création d'un générateur de microrésumé.

-

- URL eBay

-

- Comme celles de nombreux sites, les URL des pages d'enchères sur eBay se composent en général de la chaîne "http://", d'un nom de domaine, d'un chemin d'accès à un fichier et de paramètres de requête. Un exemple d'une URL de ventes aux enchères d'un article :

-
 http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=280018439106
-
-

- Dans cette URL, on peut noter le nom de domaine, "cgi.ebay.com", le chemin d'accès au fichier, "/ws/eBayISAPI.dll", et les paramètres définissant la requête, "?ViewItem&item=280018439106".

-

- Cibler une URL eBay

-

- Pour cibler cette URL avec une expression régulière, nous avons besoin d'utiliser dans celle-ci des caractères qui coïncident avec les caractères de l'URL. La plupart du temps, nous pouvons cibler un caractère de l'URL en utilisant le même caractère dans l'expression régulière. Par exemple, l'expression régulière suivante coïncide, et est identique, avec le début de l'URL :

-
 http://
-
-

- Mais certains caractères sont spéciaux dans les expressions régulières. Par exemple, un point <tt>.</tt> coïncide avec tous les caractères, et un point suivi d'un astérisque <tt>.*</tt> coïncide avec n'importe quelle combinaison de caractères. Quand de tels caractères apparaissent dans une URL, et que nous voulons les cibler dans une expression régulière, nous devons les échapper dans l'expression en les préfixant avec un antislash <tt>\</tt>.

-

- Voici une expression régulière qui cible notre URL d'exemple :

-
 http://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&item=280018439106
-
-

- Cela ressemble presque à l'identique à l'URL. La seule différence est que l'expression régulière utilise des antislash avant le point et le point d'interrogation, ces deux caractères ayant une signification particulière dans les expressions régulières.

-

- Cibler depuis le début de l'URL

-

- Comme cette expression coïncide avec l'URL, elle correspondrait aussi avec d'autres URL contenues dans les paramètres de requête, comme celle-ci :

-
http://www.example.com/redirect.php?url=http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=280018439106
-
-

- Ce n'est probablement pas ce que vous recherchez, malgré les URLs contenues cet exemple n'est vraisemblablement pas une page d'enchères en tant que telle. Afin de limiter notre expression régulière à l'URL commençant notre URL d'exemple, nous la préfixerons avec un caractère d'omission <tt>^</tt> :

-
 ^http://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&item=280018439106
-
-

- Quand un caractère d'omission est le premier caractère d'une expression régulière, cela signifie que l'expression doit être trouvée au début de la correspondance. Maintenant que notre expression régulière est préfixée avec un caractère d'omission, la correspondance sera seulement faite sur l'URL à droite du début, comme notre URL d'exemple.

-

- Cibler plusieurs URLs

-

- Mais cette expression correspond seulement à l'URL d'une page d'enchères d'un seul article. Cela ne fonctionne pas avec tout autre article aux enchères. Pour ce faire, nous devons enlever la partie spécifique à un article particulier dans l'URL, et laisser seulement les parties communes à tous les articles.

-

- Pour identifier les parties spécifiques et communes, regardons les URLs de plusieurs autres pages d'enchères :

-
 http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=130017517168
- http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=290019763032
- http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=170019463424
-
-

- En se basant sur ces exemples, il apparaît que la partie spécifique est le numéro d'article à la fin de l'URL, le reste étant commun à toutes les URLs. Aussi, enlevons le numéro d'article pour garder l'expression régulière suivante :

-
 ^http://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&item=
-
-

- Prévoir les variations dans les paramètres de requête

-

- Nous avons maintenant une expression régulière qui cible nos quatre exemples. Elle correspondra aussi probablement à d'autres pages d'enchères. Mais pour la rendre plus robuste, nous devrions prévoir la possibilité de variations dans les paramètres de requête.

-

- Un paramètre nommé est une chaîne sous la forme <name>=<value>, ou <name> et <value> sont des chaînes arbitraires. Dans notre URL, "item=280018439106" est le seul paramètre de ce genre. Mais des URLs peuvent contenir de multiples paramètres nommés séparés par des esperluettes <tt>&</tt>, et les paramètres peuvent apparaître dans n'importe quel ordre. Aussi quoique que le paramètre "item" semble nécessaire, il pourrait ne pas apparaître immédiatement à droite de "ViewItem".

-

- Par exemple, l'URL suivante est également valide pour le même article d'enchères :

-
 http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&foo=bar&item=170019463424
-
-

- Pour s'accommoder de ces variations dans les paramètres de requête, nous pouvons insérer un point suivi d'un astérisque <tt>.*</tt> entre "ViewItem&" et "item=" pour cibler toute combinaison de caractères qui pourraient apparaître entre ces deux chaînes :

-
 ^http://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&.*item=
-
-

- Le point suivi d'un astérisque correspond à n'importe quelle combinaison de caractères, y compris s'il n'y a pas de caractères. Aussi cela fonctionne si "ViewItem&" et "item=" sont immédiatement à droite l'un de l'autre (comme dans notre URL d'exemple) aussi bien que s'il y avait quelques caractères entre eux.

-

- Cibler une autre URL eBay

-

- Nous avons maintenant une expression régulière qui cible des URLs d'enchères, incluant celles avec plusieurs paramètres de requête, dans n'importe quel ordre. Mais eBay utilise un style d'URL différent dans certains cas (par exemple dans une page de résultats d'une recherche). Voici une URL pour le même article dans un style différent :

-
 http://cgi.ebay.com/Mozilla-Firefox-logo-1-inch-pin-badge-button-browser_W0QQitemZ280018439106QQihZ018QQcategoryZ2036QQcmdZViewItem
-
-

- Pour se conformer à ces URLs, nous pouvons créer une deuxième expression régulière qui leur correspondront. Comme nous l'avons vu, nous devons distinguer les composants de l'URL qui sont spécifiques de ceux communs à toutes les URLs d'enchères de ce style.

-

- Plusieurs autres URLs de ce style :

-
 http://cgi.ebay.com/Firefox-2002-DVD_W0QQitemZ130017517168QQihZ003QQcategoryZ617QQcmdZViewItem
- http://cgi.ebay.com/AHM-HO-SCALE-FIREFOX-TANK-CAR_W0QQitemZ290019763032QQihZ019QQcategoryZ19130QQcmdZViewItem
- http://cgi.ebay.com/Inuyasha-anime-pin-of-Kirara-Kilala-firefox_W0QQitemZ170019463424QQihZ007QQcategoryZ39557QQcmdZViewItem
-
-

- En se basant sur ces exemples, il apparaît que toutes les URLs commencent avec "http://cgi.ebay.com/", qu'elles contiennent la chaîne "QQitemZ" suivie par le numéro d'article et qu'elles se terminent avec la chaîne "QQcmdZViewItem". Nous pouvons donc construire l'expression régulière suivante pour obtenir cette correspondance :

-
 ^http://cgi\.ebay\.com/.*QQitemZ.*QQcmdZViewItem
-
-

- Dans cette expression, nous utilisons <tt>.*</tt> deux fois, car il y a deux endroits où des caractères changent entre plusieurs URLs d'enchères.

-

- Manipuler des URLs HTTPS

-

- Note: bien que eBay ne le fasse pas, un site peut parfois rendre des pages disponibles avec deux URLs, sécurisée ou non. Par exemple, les deux URLs suivantes pourraient pointer sur la même page :

-
 http://www.example.com/index.html
- https://www.example.com/index.html
-
-

- Pour faire une expression régulière qui cible ces deux pages, nous avons juste besoin de commencer l'expression avec "https" et d'ajouter un point d'interrogation <tt>?</tt> après cette chaîne, par exemple :

-
 ^https?://www\.example\.com/index\.html
-
-

- Le point d'interrogation rend le caractère qui le précède optionnel, ainsi l'expression régulière correspond aussi bien aux chaînes contenant un "s" dans "https" qu'à celles qui n'en contiennent pas.

-

- Conclusion

-

- Si nous incluons ces deux expressions régulières dans un générateur de microrésumé pour les pages d'enchère eBay, le générateur les utilisera pour toutes les pages concernant des articles aux enchères (au moins toutes les pages que nous avons étudiées jusqu'à présent).

-

- Notez que comme les générateurs de microrésumé sont en langage XML, nous devons échapper les caractères spéciaux inférieur <tt><</tt>, supérieur <tt>></tt> et esperluette <tt>&</tt> en les remplaçant par leur entité équivalente (respectivement <tt>&lt;, &gt;,</tt> et <tt>&amp;</tt>) dans les expressions régulières, quand nous les plaçons dans un générateur.

-

- Pour les expressions régulières que nous avons créées dans ce tutoriel, le seul caractère spécial que nous devons échapper est l'esperluette. Voici à quoi pourrait ressembler l'élément <pages> dans un générateur de microrésumé pour les pages d'enchères eBay :

-
 <pages>
-   <include>^http://cgi\.ebay\.com/.*QQitemZ.*QQcmdZViewItem</include>
-   <include>^http://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&amp;.*item=</include>
- </pages>
-
-

- Pour voir ces expressions régulières en action, installez le générateur de microrésumé pour les pages d'enchères eBay disponible dans cette page d'exemples de générateurs.

diff --git "a/files/fr/cr\303\251ation_d'un_g\303\251n\303\251rateur_de_micror\303\251sum\303\251/index.html" "b/files/fr/cr\303\251ation_d'un_g\303\251n\303\251rateur_de_micror\303\251sum\303\251/index.html" deleted file mode 100644 index 82453ff045..0000000000 --- "a/files/fr/cr\303\251ation_d'un_g\303\251n\303\251rateur_de_micror\303\251sum\303\251/index.html" +++ /dev/null @@ -1,227 +0,0 @@ ---- -title: Création d'un générateur de microrésumé -slug: Création_d'un_générateur_de_microrésumé -tags: - - Microrésumés -translation_of: Archive/Mozilla/Creating_a_microsummary ---- -

- Un générateur de microrésumé est un ensemble d'instructions permettant de créer un microrésumé à partir du contenu d'une page. Les pages Web peuvent faire référence à de tels générateurs à l'aide d'éléments <link rel="microsummary"> au sein de leur section <head>. Il est également possible pour les utilisateurs de télécharger et d'installer des générateurs indépendamment si ceux-ci comprennent une liste de pages auxquelles ils s'appliquent.

-

- Dans ce tutoriel, nous créerons un générateur de microrésumé pour la page d'accueil de Spread Firefox qui affichera le compteur de téléchargements de Firefox entouré d'un peu de texte ; par exemple Fx : 195728643 téléchargements.

-

- Nous construirons la feuille de transformation XSLT convertissant la page en son microrésumé, apprendrons comment indiquer que le générateur s'applique à cette page et découvrirons comment rendre ce générateur téléchargeable et installable.

-

- À chaque étape de construction de la feuille de transformation et des autres codes dans ce tutoriel, les ajouts seront affichés en caractères gras pour faciliter la lecture.

-

- Note : si vous êtes développeur de sites et que vous voulez créer des microrésumés, vous pouvez écrire des générateurs, mais il est plus simple et plus efficace de créer les microrésumés du côté serveur en utilisant les mêmes outils et langages que ceux utilisés pour générer les pages.

-

- Par exemple, si vous utilisez des scripts PHP pour générer les pages de votre site, vous pourriez écrire du code PHP pour créer un microrésumé lorsque le paramètre view=microsummary se trouve dans l'adresse, puis renseigner le générateur au sein de la page à l'aide d'une balise <link rel="microsummary"> :

-
<head>
-  <link rel="microsummary" href="index.php?view=microsummary">
-</head>
-
-

- Lorsque Firefox rencontre une balise <link rel="microsummary">, il charge l'adresse renseignée dans l'attribut href. Si celle-ci pointe vers un générateur, il l'utilise pour générer un microrésumé pour la page. Par contre, si le lien renvoie un fichier texte (ou du contenu HTML pouvant être converti en texte simple), Firefox utilise son contenu comme microrésumé pour la page.

-

-  

-

- Pour commencer

-

- Les générateurs s'expriment sous la forme de documents XML dont l'élément racine est <generator> dans l'espace de nommage http://www.mozilla.org/microsummaries/0.1. Pour commencer à construire le générateur, créez un nouveau fichier texte vide, ajoutez une déclaration XML et une balise <generator> vide :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1">
-</generator>
-
-

- Baptiser un générateur

-

- Les générateurs doivent être dotés d'attributs name qui sont des descriptions arbitraires des microrésumés créés. Ces noms doivent être suffisamment descriptifs pour donner aux utilisateurs une bonne idée de l'information fournie par les microrésumés. Comme notre générateur créera des microrésumés affichant le compteur de téléchargements de Firefox, appelons-le « Compteur de téléchargements de Firefox » :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1"
-           name="Compteur de téléchargements de Firefox">
-</generator>
-
-

- Ajout d'une feuille de transformation XSLT

-

- Les générateurs doivent fournir une feuille de transformation XSLT (également appelée feuille de style XSLT) qui transformera le contenu de la page en son microrésumé. XSLT est un puissant langage de transformation de documents en d'autres représentations de la même information.

-

- Ajoutez la feuille de transformation XSLT au générateur en la déclarant au sein d'un élément <template> :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1"
-           name="Compteur de téléchargements de Firefox">
-  <template>
-    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
-    </transform>
-  </template>
-</generator>
-
-

- Notez que si les générateurs de microrésumés peuvent contenir n'importe quel code XSLT, même un code contenant des instructions de formatage, Firefox n'affiche pour l'instant que la version texte de la sortie XSLT.

-

- Spécification du type de sortie

-

- Puisque la feuille de transformation XSLT va générer un microrésumé texte, il faut l'indiquer dans l'élément XSLT <output> :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1"
-           name="Compteur de téléchargements de Firefox">
-  <template>
-    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
-      <output method="text"/>
-    </transform>
-  </template>
-</generator>
-
-

- Utilisation d'un <template> XSLT simple

-

- Le processeur XSLT transforme les documents en comparant chaque élément XSLT <template> de la feuille de transformation en un ensemble de nœuds dans le document. Lorsque l'attribut match d'un élément <template> correspond à un nœud, le processeur effectue la transformation spécifiée au sein de l'élément.

-

- Ce mécanisme est très puissant, car il permet de traverser l'arbre des nœuds d'un document, en générant récursivement une sortie basée sur le contenu du document. Mais dans le cas d'un microrésumé pour la page de Spread Firefox, nous aurons juste besoin d'un seul élément <template> correspondant au nœud racine du document et qui sera traité une seule fois :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1"
-           name="Compteur de téléchargements de Firefox">
-  <template>
-    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
-      <output method="text"/>
-      <template match="/">
-      </template>
-    </transform>
-  </template>
-</generator>
-
-

- Inclusion du compteur de téléchargements

-

- Pour inclure le compteur de téléchargements dans la sortie de la feuille de transformation XSLT, il est nécessaire d'ajouter un élément XSLT <value-of> au template dont l'attribut select contient une expression XPath pointant vers le nœud contenant le compteur.

-

- XPath est un langage permettant d'identifier des nœuds dans des documents HTML/XML. Il fournit également quelques fonctions basiques permettant de manipuler ces nœuds et leur contenu. La manière la plus simple d'obtenir une expression XPath pointant vers le nœud désiré est d'utiliser l'extension XPath Checker.

-

- Installez l'extension (en redémarrant Firefox pour terminer l'installation) et rendez-vous ensuite sur la page d'accueil de Spread Firefox, trouvez le compteur de téléchargements de Firefox (un grand nombre en bas de la colonne de droite), cliquez avec le bouton de droite sur ce nombre et choisissez View XPath dans le menu contextuel.

-

- XPath Checker ouvrira une nouvelle fenêtre. Celle-ci contiendra un champ XPath contenant l'expression XPath qui pointe vers le nœud du compteur de téléchargements : id('download-count').

-

- Ajoutez un élément <value-of> dont l'attribut select contient cette expression XPath à l'élément <template> :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1"
-           name="Compteur de téléchargements de Firefox">
-  <template>
-    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
-      <output method="text"/>
-      <template match="/">
-        <value-of select="id('download-count')"/>
-      </template>
-    </transform>
-  </template>
-</generator>
-
-

- Ajout de texte

-

- Pour ajouter du texte dans le microrésumé, nous devrons ajouter des éléments XSLT <text> contenant le texte désiré à l'élément <template>.

-

- Ajoutez des éléments <text> au template XSLT contenant Fx : et téléchargements:

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1"
-           name="Compteur de téléchargements de Firefox">
-  <template>
-    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
-      <output method="text"/>
-      <template match="/">
-        <text>Fx : </text>
-        <value-of select="id('download-count')"/>
-        <text> téléchargements</text>
-      </template>
-    </transform>
-  </template>
-</generator>
-
-

- Notez que les espaces blancs entre les balises XSLT ne sont pas repris dans la sortie XSLT, contrairement au HTML où les espaces sont condensés en un seul caractère espace, assurez-vous donc d'ajouter un espace devant le mot téléchargements pour qu'il ne soit pas collé au nombre de téléchargements.

-

- Avec cet ajout, nous avons terminé d'écrire la feuille de transformation XSLT qui convertira la page d'accueil de Spread Firefox en un microrésumé.

-

- Spécifier à quelle page s'applique le générateur

-

- Maintenant que nous avons la feuille de transformation, il nous faut spécifier à quelle page elle s'applique. Si nous étions les webmestres de Spread Firefox, nous pourrions simplement renseigner le générateur au sein de la page à l'aide d'une balise <link rel="microsummary"> dans son élément <head> :

-
<head>
-  <link rel="microsummary" href="chemin/vers/notre/generateur.xml">
-</head>
-
-

- Comme ce n'est pas le cas, nous allons devoir spécifier à quelle page s'applique le générateur dans le code du générateur lui-même, et permettre ensuite de télécharger celui-ci. Pour spécifier les pages auxquelles un générateur s'applique, on utilise un élément <pages> au sein de l'élément <generator> :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1"
-           name="Compteur de téléchargements de Firefox">
-  <template>
-    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
-      <output method="text"/>
-      <template match="/">
-        <text>Fx : </text>
-        <value-of select="id('download-count')"/>
-        <text> téléchargements</text>
-      </template>
-    </transform>
-  </template>
-  <pages>
-  </pages>
-</generator>
-
-

- L'élément <pages> peut contenir une séquence d'éléments <include> et <exclude> spécifiant respectivement les pages auxquelles le générateur s'applique ou ne s'applique pas.

-

- Pour que le générateur s'applique à une page, ajoutez un élément <include> dont le contenu est une expression rationelle s'appliquant à la page. Pour qu'il ne s'applique pas à une page, ajoutez un élément <exclude> à la place.

-

- Par défaut, les générateurs ne s'appliquent à aucune page. Vous devrez donc explicitement lister les pages auxquelles ils s'appliquent sans avoir à exclure aucune page, à moins de les avoir inclues auparavant.

-

- Ajoutez un élément <include> correspondant à la page d'accueil de Spread Firefox :

-
<?xml version="1.0" encoding="UTF-8"?>
-<generator xmlns="http://www.mozilla.org/microsummaries/0.1" name="Compteur de téléchargements de Firefox">
-  <template>
-    <transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
-      <output method="text"/>
-      <template match="/">
-        <text>Fx : </text>
-        <value-of select="id('download-count')"/>
-        <text> téléchargements</text>
-      </template>
-    </transform>
-  </template>
-  <pages>
-    <include>http://(www\.)?spreadfirefox\.com/(index\.php)?</include>
-  </pages>
-</generator>
-
-

- Si vous n'êtes pas expérimenté avec les expressions régulières, consultez Création d'expression régulières pour les générateurs de microrésumés, un tutoriel pour l'écriture de ceux-ci.

-

- Rendre le générateur téléchargeable

-

- Maintenant que le générateur s'applique à la page d'accueil de Spread Firefox, la seule chose qui reste à faire est de le rendre téléchargeable. Pour ce faire, il faut le placer quelque part en ligne et ensuite créer un lien JavaScript sur une page Web appelant la méthode window.sidebar.addMicrosummaryGenerator() de Firefox pour télécharger et installer le générateur.

-

- Par exemple, si l'on place le fichier du générateur sur le Web à l'adresse http://people.mozilla.com/~myk/micro...-generator.xml, et que l'on veut permettre au visiteurs de l'installer depuis http://people.mozilla.com/~myk/micro...ial/index.html, on peut ajouter le code suivant à la page index.html :

-
<button onclick="window.sidebar.addMicrosummaryGenerator('http://people.mozilla.com/~myk/microsummaries/tutorial/sfx-generator.xml')">Installer le microrésumé pour la page d'accueil de Spread Firefox</button>
-
-

- Un clic sur ce bouton génèrera cependant une erreur JavaScript sur les navigateurs ne gérant pas les microrésumés. Pour être plus sympathique avec ceux-ci, nous devrions vérifier si le visiteur utilise un navigateur gérant les microrésumés et afficher un message explicatif dans le cas contraire. Cela peut se faire avec le code suivant :

-
<script>
-  const warning = "Désolé, vous devez disposer d'un navigateur acceptant les microrésumés comme Firefox 2 pour installer et utiliser des générateurs de microrésumés.";
-  function addGenerator(url) {
-    if (typeof window.sidebar == "object" &&
-        typeof window.sidebar.addMicrosummaryGenerator == "function")
-      window.sidebar.addMicrosummaryGenerator(url);
-    else
-     alert(warning);
-  }
-</script>
-<button onclick="addGenerator('http://people.mozilla.com/~myk/microsummaries/tutorial/sfx-generator.xml')">Installer le microrésumé pour la page d'accueil de Spread Firefox</button>
-
-

- Note: à cause du {{ Bug(341283) }}, addMicrosummaryGenerator() n'accepte pas d'URL relative.

-

- Conclusion

-

- Vous devriez à présent disposer d'un générateur de microrésumé affichant le compteur de téléchargements de Firefox. Lorsqu'il est installé, Placez la page d'accueil de Spread Firefox dans vos marque-pages, et sélectionnez le microrésumé depuis le menu déroulant Nom de la fenêtre Ajouter un marque-page.

-

- Pour plus d'informations sur les microrésumés, consultez Microsummaries home page sur le wiki de Mozilla.

diff --git "a/files/fr/cr\303\251ation_d'un_pack_de_langue/index.html" "b/files/fr/cr\303\251ation_d'un_pack_de_langue/index.html" deleted file mode 100644 index fcac23806f..0000000000 --- "a/files/fr/cr\303\251ation_d'un_pack_de_langue/index.html" +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Création d'un pack de langue -slug: Création_d'un_pack_de_langue -tags: - - Localisation -translation_of: Mozilla/Creating_a_language_pack ---- -

Pour créer un pack de langue, ou un repaquetage de localisation, lisez d'abord les Préalables à la localisation.

-

Dans votre .mozconfig, vous aurez besoin de

-
ac_add_options --disable-compile-environment
-mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../firefox
-
-

Exécutez ensuite dans votre répertoire de source de Mozilla

-
make -f client.mk configure
-
-

et rendez-vous dans votre répertoire objdir

-
cd ../firefox
-
-

et (pour Firefox)

-
cd browser/locales
-make langpack-ab-CD
-
-

ou, pour créer un installateur

-
make installers-ab-CD
-
-

À moins que vous ayez les bons binaires en-US dans le répertoire dist, cette dernière commande échouera. La manière la plus simple de déterminer ce qu'il faut y mettre est d'exécuter la cible et de télécharger les binaires attendus aux emplacements indiqués par les messages d'erreur.

-
- {{ languages( { "en": "en/Creating_a_Language_Pack" } ) }}
diff --git "a/files/fr/cr\303\251ation_d'un_patch/index.html" "b/files/fr/cr\303\251ation_d'un_patch/index.html" deleted file mode 100644 index 9c40190048..0000000000 --- "a/files/fr/cr\303\251ation_d'un_patch/index.html" +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Création d'un patch -slug: Création_d'un_patch -tags: - - Développement_de_Mozilla -translation_of: Mercurial/Using_Mercurial ---- -

 

-

Après avoir récupéré le code source, l'avoir modifié, compilé et testé, vous voudrez peut être que vos modifications soient examinées et intégrées. Pour cela, vous devez créer un fichier répertoriant les modifications que vous avez apporté, appelé - - patch - ou - - fichier diff - . Vous pouvez le générer en utilisant la commande cvs diff.

-

Création d'un diff pour un unique fichier

-

Afin de créer le diff d'un unique fichier local par rapport à son homologue sur le dépôt cvs, utilisez :

-
$ cvs diff -u8p NOM_FICHIER
-
-

Cette commande crée un diff dans le format dit 'unifié' (<tt>-u</tt>), avec 8 lignes de contexte. Par défaut, le résultat est envoyé vers la sortie standard. Pour le rediriger vers un fichier, utilisez la commande :

-
$ cvs diff -u8p NOM_FICHIER > FICHIER_RESULTAT
-
-

Création d'un diff pour plusieurs fichiers

-

Si, au lieu d'indiquer un fichier dans NOM_FICHIER, vous indiquez un répertoire, ce répertoire et tous ses sous-répertoires sont examinés récursivement. Par exemple :

-
$ cvs diff -u8p . > FICHIER_RESULTAT
-
-

Cette commande compare tous les fichiers du répertoire courant et de ses sous-répertoires aux versions du dépôt cvs, et écrit les diffs unifiés combinés dans un fichier appelé FICHIER_RESULTAT, en utilisant 8 lignes de contexte.

-

Le contexte fourni dans le patch devrait être suffisant pour le rendre compréhensible sans avoir à ouvrir le fichier source. La règle de base est d'utiliser 8 lignes de contexte ; si plus de contexte est nécessaire pour rendre le patch compréhensible, remplacez 8 par une valeur plus élevée. Notez que plus vous insérez de contexte, plus vous aurez de chance que votre patch puisse être appliqué à un fichier qui diffère nettement du fichier original sur le dépôt qui a servi à créer le diff.

-

Inclusion de nouveaux fichiers dans un patch

-

Pour inclure un nouveau fichier dans votre patch, utilisez l'option <tt>-N</tt> :

-
$ cvs diff -u8pN . > FICHIER_RESULTAT
-
-

Un problème courant ici est que cvs diff n'inclura pas les nouveaux fichiers qui n'ont pas été préalablement ajoutés sur le dépot par un cvs add, et cette dernière commande nécessite des droits d'écriture sur le dépôt cvs.

-

La solution est d'utiliser l'utilitaire cvsdo qui permet d'édition de <tt>CVS/Entries</tt> pour faire croire à cvs que le fichier a été ajouté au dépôt.

-
$ cvsdo add NOUVEAU_FICHIER
-$ cvs diff -u8pN NOUVEAU_FICHIER > FICHIER_RESULTAT
-
-

Notez que cette astuce ne fonctionne pas pour des nouveaux répertoires ; pour ceux là en fait, cvs add doit pouvoir modifier le dépôt immédiatement, ce qui nécessite des droits d'écriture.

diff --git "a/files/fr/cr\303\251ation_de_plugins_mozsearch/index.html" "b/files/fr/cr\303\251ation_de_plugins_mozsearch/index.html" deleted file mode 100644 index 74b2254d17..0000000000 --- "a/files/fr/cr\303\251ation_de_plugins_mozsearch/index.html" +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Création de plugins MozSearch -slug: Création_de_plugins_MozSearch -tags: - - Plugins - - Plugins_de_recherche -translation_of: Mozilla/Creating_MozSearch_plugins ---- -

Firefox 2 utilise une forme simplifiée du format OpenSearch pour stocker ses plugins de recherche en interne. Un plugin MozSearch est un fichier XML décrivant le moteur de recherche, son URL ainsi que les paramètres à communiquer à cette URL. -

-
Attention : MozSearch n'est pas un standard et n'est prévu que pour un usage interne dans les produits Mozilla. Ce format ne devrait être utilisé que si vous envisagez de distribuer le plugin de recherche au sein d'une extension, ou s'il est prévu pour être distribué par défaut dans une compilation de Firefox. Si vous souhaitez écrire un plugin installable depuis le Web, consultez Création de plugins OpenSearch.
-

Le fichier plugin

-

Le format MozSearch est très semblable au format OpenSearch. Les seules différences concernent l'élément racine et l'espace de nommage. -

-

Exemple : recherche Yahoo!

-

Le code XML suivant correspond au plugin de recherche Yahoo! fourni avec Firefox 2 : -

-
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Yahoo</ShortName>
-<Description>Yahoo Search</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<SuggestionUrl>http://ff.search.yahoo.com/gossip?output=fxjson&command=</SuggestionUrl>
-<Image width="16" height="16">data:image/x-icon;base64,R0lGODlhEAAQAJECAP8AAAAAAP///wAAACH5BAEAAAIALAAAAAAQABAAAAIplI+py+0NogQuyBDEnEd2kHkfFWUamEzmpZSfmaIHPHrRguUm/fT+UwAAOw==</Image>
-<Url type="text/html" method="GET" template="http://search.yahoo.com/search">
-  <Param name="p" value="{searchTerms}"/>
-  <Param name="ei" value="UTF-8"/>
-  <Param name="fr" value="moz2"/>
-</Url>
-<SearchForm>http://search.yahoo.com/</SearchForm>
-</SearchPlugin>
-
-

Supposons que l'utilisateur choisisse d'utiliser le plugin de recherche Yahoo!, qu'il saisisse « Mozilla » dans le champ de recherche et qu'il presse la touche Entrée. Firefox utilisera les informations du moteur de recherche décrites ci-dessus pour construire l'URL suivante : -

-
http://search.yahoo.com/search?p=mozilla&ei=UTF-8&fr=moz2
-
-

Si l'utilisateur clique sur l'icône loupe dans la barre de recherche, ou choisit l'option Rechercher sur le Web dans le menu Outils lorsque la barre de recherche n'est pas visible, le navigateur l'emmènera sur <tt>http://search.yahoo.com/</tt>, qui est la valeur de l'élément <SearchForm>. -

-

Exemple : recherche MDC

-

Ce plugin vous permet de faire facilement des recherches sur le site Web Mozilla Developer Center. -

-
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>MDC fr</ShortName>
-<Description>Recherche sur Mozilla Developer Center</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz%2F%2Fz8DJQAggJiQOe%2Ffv2fv7Oz8rays%2FN%2BVkfG%2FiYnJfyD%2F1%2BrVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw%2F8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi%2FG%2BQKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo%2BMXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia%2BCuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq%2FvLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg%2FkdypqCg4H8lUIACnQ%2FSOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD%2BaDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg%3D%3D</Image>
-<Url type="text/html" method="GET" template="http://developer.mozilla.org/fr/docs/Special:Search?search={searchTerms}"/>
-<SearchForm>http://developer.mozilla.org/fr/docs/Special:Search</SearchForm>
-</SearchPlugin>
-
-

Notez que dans ce cas, au lieu d'utiliser <Param> pour définir les paramètres du moteur de recherche, ceux-ci sont directement intégrés à l'URL modèle. Cette méthode est préconisée avec GET. <Param> devrait être réservée à la méthode POST. -

-

Voir également

- -


-Liens Interwiki -

-
-
-{{ languages( { "ca": "ca/Creaci\u00f3_de_connectors_MozSearch", "en": "en/Creating_MozSearch_plugins", "es": "es/Creaci\u00f3n_de_plugins_MozSearch", "it": "it/Creare_Plugin_MozSearch", "ja": "ja/Creating_MozSearch_plugins", "pl": "pl/Tworzenie_wtyczek_MozSearch", "zh-tw": "zh_tw/\u88fd\u4f5c_MozSearch_\u641c\u5c0b\u6a21\u7d44" } ) }} diff --git "a/files/fr/cr\303\251er_un_th\303\250me_pour_firefox_premiers_pas/index.html" "b/files/fr/cr\303\251er_un_th\303\250me_pour_firefox_premiers_pas/index.html" deleted file mode 100644 index f2aa2a6bb0..0000000000 --- "a/files/fr/cr\303\251er_un_th\303\250me_pour_firefox_premiers_pas/index.html" +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Créer_un_thème_pour_Firefox//Premiers_pas -slug: Créer_un_thème_pour_Firefox_Premiers_pas -tags: - - Themes -translation_of: Archive/Mozilla/Creating_a_sking_for_Firefox_Getting_Started ---- -

Téléchargez la dernière version stable de Firefox, et installez-la. Assurez-vous d'installer également l'inspecteur DOM dans « Outils de développement ». -

-

Extraction du thème

-

Même si vous pourriez potentiellement débuter avec n'importe quel thème déjà conçu pour Firefox, pour des raisons d'uniformité nous parlerons comme si tout le monde éditait Winstripe (le thème par défaut de Firefox). -Ce thème est situé dans le fichier <tt>classic.jar</tt> qui se trouve dans le répertoire d'installation de Firefox. -Un fichier .jar est en fait un fichier zip renommé. Vous devriez pouvoir l'ouvrir avec votre gestionnaire d'archives compressées habituel, comme si vous ouvriez n'importe quel autre fichier zip. Cependant, si votre application ne détecte pas automatiquement qu'il s'agit d'un fichier zip standard, vous pouvez simplement renommer le fichier en <tt>classic.zip</tt> et poursuivre son extraction. -

-

Emplacement de classic.jar

-

Linux : /usr/lib/MozillaFirefox/chrome/classic.jar -

Windows : \Program Files\Mozilla Firefox\chrome\classic.jar -

Pour Mac OS X : -

- -

Copier <tt>classic.jar</tt> vers un autre dossier facilement accessible (« Classic » est recommandé) et extraire le contenu de ce dossier, en faisant attention de conserver l'arborescence du répertoire. -

-

Répertoires

-

À l'intérieur de <tt>classic.jar</tt>, vous trouverez un répertoire appelé <tt>skin</tt>, ainsi que deux fichiers, <tt>preview.png</tt> et <tt>icon.png</tt>. -

-
<tt>skin</tt> -
<tt>skin</tt> contient simplement un autre répertoire, <tt>classic</tt> qui contient tout le reste -
<tt>classic</tt> -
<tt>classic</tt> contient les sous-répertoires suivants. -
<tt>browser</tt> -
<tt>browser</tt> contient toutes les icônes de la barre d'outils, aussi bien que les icônes pour le gestionnaire de marque-pages et le panneau des préférences de Firefox. -
<tt>global</tt> -
<tt>global</tt> contient presque tous les fichiers CSS importants définissant l'apparence de votre navigateur Firefox. C'est le répertoire le plus critique dans un thème. -
<tt>mozapps</tt> -
<tt>mozapps</tt> contient tous les styles et les icônes pour les éléments périphériques du navigateur, comme le gestionnaire d'extensions ou les assistants de mises à jour. -
<tt>help</tt> -
<tt>help</tt> contient l'ensemble des fichiers pour habiller la fenêtre d'aide. -
<tt>communicator</tt> -
<tt>communicator</tt> n'est vraiment pas important et peut par conséquent être oublié aussi sec. -
-

Installer votre nouveau thème

-

Avant de pouvoir voir les changements fait sur un thème Firefox (puisque les éditions en direct sont difficiles à mettre en œuvre), il est nécessaire d'apprendre à « réempaqueter » le thème classic pour le rendre installable. -Au cours de cette explication, nous appellerons votre thème « Mon_thème », bien que vous puissiez choisir n'importe quel autre nom. -

-

Copie des fichiers nécessaires

-

La première étape est de déplacer l'ensemble des fichiers dans la bonne arborescence. Créez donc un nouveau répertoire que vous appellerez du nom de votre thème (ici <tt>Mon_thème</tt>). -Dans ce répertoire, placez les sous-répertoires <tt>browser</tt>, <tt>global</tt>, <tt>communicator</tt>, <tt>help</tt> et <tt>mozapps</tt>, ainsi que les fichiers <tt>icon.png</tt> et <tt>preview.png</tt>. (Cela signifie que la structure de votre nouveau répertoire et de <tt>classic.jar</tt> sera légèrement différente.) -

-

Création des fichiers d'installations

-
Contents.rdf
-

Faites une copie du fichier contents.rdf et placez-la dans \Mon_thème. Ouvrez-la dans votre éditeur de texte favori. Ce fichier est une petite base de données XML utilisée pour décrire le thème. -

Dans le code, toutes les occurences de (Mon_thème) sont à remplacer par votre nom de thème. -

La sections appelé packages liste les composants du navigateur que vous allez modifier. -Si nous avions également des thèmes pour ChatZilla, il faudrait ajouter une ligne semblable pointant vers ChatZilla. -Mais cette liste comprend tout ce que nous avons changé, modifiez donc simplement le texte bleu pour qu'il pointe vers le nom et la version utilisés dans les sections précédentes. -

-
<RDF:li resource="urn:mozilla:skin:Mon_thème:communicator"/>
-<RDF:li resource="urn:mozilla:skin:Mon_thème:editor"/>
-<RDF:li resource="urn:mozilla:skin:Mon_thème:global"/>
-<RDF:li resource="urn:mozilla:skin:Mon_thème:messenger"/>
-<RDF:li resource="urn:mozilla:skin:Mon_thème:navigator"/>
-
-

Enregistrez votre fichier et quittez l'éditeur. -

-
Install.rdf
-

Faites une copie du install.rdf et placez-la dans \Mon_thème. Ouvrez-la dans votre éditeur de texte favori. Ce fichier est une petite base de données XML utilisée pour décrire le thème. -

-
 <Description about="urn:mozilla:install-manifest">
- {UUID_du_thème}
- Version_du_thème
-
-

La première section nécessite d'établir un identifiant UUID pour votre thème et de lui donner un numéro de version. Une fois que c'est fait, ajoutez ces informations comme ci-dessus et poursuivez votre lecture. -

Vous devrez également mettre à jour les versions compatibles minimum et maximum pour l'application cible (Firefox) dans la section suivante : -

-
<em:targetApplication>
-  <Description>
-    <!-- Firefox's UUID -->
-    <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-    <em:minVersion>Min_FF_Version</em:minVersion>
-    <em:maxVersion>Max_FF_Version</em:maxVersion>
-  </Description>
-</em:targetApplication>
-
-

L'établissement de versions compatibles minimum et maximum vous permet d'éviter les conflits avec des versions de Firefox pour lesquelles votre thème n'a pas été conçu, ou sur lesquelles il n'a pas été testé. -

Consultez Manifestes d'installation pour des informations de référence concernant le fichier <tt>install.rdf</tt>. -

-

Feuilles de style CSS

-

Les fichiers CSS dans ces répertoires indiquent au navigateur comment afficher les boutons et d'autres contrôles, où mettre les images, quelle bordure et quel espacement faut-il autour d'eux, etc. -

À titre d'exemple, modifions les boutons standards du thème. -

Rendez-vous dans global/ et ouvrez le fichier button.css dans votre éditeur favori. -Descendez jusqu'à trouver la chaine « button { ». La section qui suit définit le bouton standard dans son état de base (c'est à dire que le pointeur de souris n'est pas dessus, et il n'est pas désactivé ni sélectionné). -

Modifiez la valeur de l'attribut background-color: en « DarkBlue », la valeur de l'attribut color: en « White » et enregistrez le fichier. -

<Plus de détails seront fournis après quelques tests> -

-

Reconstruction du fichier JAR

-

À présent, tout ce qui reste à faire est de reconstruire un fichier JAR à l'aide de votre gestionnaire d'archives favori avec la structure de répertoires suivante : -

-
/browser/*
-/communicator/*
-/global/*
-/help/*
-/mozapps/*
-/contents.rdf
-/install.rdf
-/icon.png
-/preview.png
-
-

Assurez-vous de ne pas simplement zipper le répertoire parent <tt>Mon_thème</tt>, car cela causerait l'échec de l'installation par glisser-déposer décrite dans la section suivante sans le moindre message d'erreur. -

-

Déclenchement de l'installation depuis le Web

-

Pour installer l'archive JAR de votre thème directement depuis le Web, il sera nécessaire d'exécuter le JavaScript suivant : -

-
<a href='javascript:InstallTrigger.installChrome(InstallTrigger.SKIN,
- "montheme.jar", "Mon thème")'>Installer mon thème</a>
-
-

Si vous avez des fichiers JAR sur votre disque dur et que vous désirez les installer, vous pouvez aussi télécharger/utiliser ce formulaire. -

Vous pouvez aussi simplement ouvrir la fenêtre des thèmes de l'application et glisser-déposer votre fichier .jar à l'intérieur. -

Vous vous demandez comment refaire un .jar de votre dossier. Ce n'est pas compliqué, ce qu'il suffit de faire est de placer le dossier dans un fichier .zip, et une fois qu'il est compressé renommez-le en un fichier .jar. -

-
-
-{{ languages( { "de": "de/Theme_erstellen/Einf\u00fchrung", "en": "en/Creating_a_Skin_for_Firefox//Getting_Started", "es": "es/Creando_un_skin_para_Firefox/Como_empezar", "ja": "ja/Creating_a_Skin_for_Firefox/Getting_Started", "pl": "pl/Tworzenie_sk\u00f3rek_dla_Firefoksa/Zaczynamy", "pt": "pt/Criando_um_visual_para_o_Firefox/Iniciando", "zh-tw": "zh_tw/\u88fd\u4f5c_Firefox_\u4f48\u666f\u4e3b\u984c/\u4e0a\u624b\u7bc7" } ) }} diff --git "a/files/fr/css/premiers_pas/donn\303\251es_xml/index.html" "b/files/fr/css/premiers_pas/donn\303\251es_xml/index.html" deleted file mode 100644 index c4608b74eb..0000000000 --- "a/files/fr/css/premiers_pas/donn\303\251es_xml/index.html" +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: Données XML -slug: CSS/Premiers_pas/Données_XML -tags: - - CSS - - 'CSS:Premiers_pas' -translation_of: Archive/Beginner_tutorials/XML_data ---- -

-

Cette page contient un exemple d'utilisation de CSS avec des données XML. -

Vous créerez un document XML simple et une feuille de style servant à l'afficher dans un navigateur. -

-

Information : données XML

-

XML (eXtended Markup Language) est un langage d'usage général prévu pour tous types de données structurées. -

Par défaut, votre navigateur Mozilla affiche XML dans un format très similaire aux données originales contenues dans le fichier XML. -Les balises définissant la structure des données sont visibles. -

En liant un fichier CSS avec le document XML, vous pouvez définir d'autres manières de l'afficher. Pour ce faire, votre feuille de style utilisera des règles associant les balises du document XML aux types d'affichage utilisés par HTML. -

- - -
Exemple -
Les données d'un document XML utilisent des balises <INFO>. Vous désirez que les éléments INFO du document soient affichés comme des paragraphes en HTML. -

Dans la feuille de style du document, vous spécifierez comment les éléments INFO doivent être affichés : -

-
-
INFO {
-  display: block;
-  margin: 1em 0;
-  }
-
-
-
-

Les valeurs les plus courantes pour la propriété display sont : -

- - - - -
blockEst affiché comme un élément DIV en HTML (pour les titres, les paragraphes, etc.) -
inlineEst affiché comme un élément SPAN en HTML (pour insister sur certaines parties du texte) -
-

Vous ajouterez vos propres règles de style spécifiant la police, les marges et d'autres détails de la même façon que pour un document HTML. -

- - -
Plus de détails -
D'autres valeurs de la propriété display permettent d'afficher l'élément comme un élément de liste, ou un élément de tableau. -

Pour la liste complète des types d'affichage, consultez The display property dans la spécification CSS. -

Si vous n'utilisez que CSS, la structure de ce qui est affiché doit être la même que la structure du document. -D'autres technologies peuvent modifier la structure de l'affichage, par exemple XBL peut ajouter du contenu, et JavaScript peut modifier le DOM. -

Pour plus d'informations à propos de l'utilisation de XML dans Mozilla, consultez la page XML de ce wiki. -

-
-

Action : une démonstration de XML

-

Créez un nouveau fichier XML, doc9.xml. -Copiez et collez-y le contenu ci-dessous, en vous assurant de le faire défiler pour en obtenir l'entièreté : -

-
<?xml version="1.0"?>
-<!-- Démonstration de XML -->
-
-<?xml-stylesheet type="text/css" href="style9.css"?>
-
-<!DOCTYPE planete>
-<planete>
-
-<ocean>
-<nom>Arctique</nom>
-<surface>13 000</surface>
-<profondeur>1 200</profondeur>
-</ocean>
-
-<ocean>
-<nom>Atlantique</nom>
-<surface>87 000</surface>
-<profondeur>3 900</profondeur>
-</ocean>
-
-<ocean>
-<nom>Pacifique</nom>
-<surface>180 000</surface>
-<profondeur>4 000</profondeur>
-</ocean>
-
-<ocean>
-<nom>Indien</nom>
-<surface>75 000</surface>
-<profondeur>3 900</profondeur>
-</ocean>
-
-<ocean>
-<nom>Antarctique</nom>
-<surface>20 000</surface>
-<profondeur>4 500</profondeur>
-</ocean>
-
-</planete>
-
-

Créez un nouveau fichier CSS, style9.css. -Copiez et collez-y le contenu ci-dessous, en vous assurant de le faire défiler pour en obtenir l'entièreté : -

-
/*** Démonstration de XML ***/
-
-planete:before {
-  display: block;
-  width: 8em;
-  font-weight: bold;
-  font-size: 200%;
-  content: "Océans";
-  margin: -.75em 0px .25em -.25em;
-  padding: .1em .25em;
-  background-color: #cdf;
-  }
-
-planete {
-  display: block;
-  margin: 2em 1em;
-  border: 4px solid #cdf;
-  padding: 0px 1em;
-  background-color: white;
-  }
-
-ocean {
-  display: block;
-  margin-bottom: 1em;
-  }
-
-nom {
-  display: block;
-  font-weight: bold;
-  font-size: 150%;
-  }
-
-surface {
-  display: block;
-  }
-
-surface:before {
-  content: "Surface : ";
-  }
-
-surface:after {
-  content: " millions de km\B2";
-  }
-
-profondeur {
-  display: block;
-  }
-
-profondeur:before {
-  content: "Profondeur moyenne : ";
-  }
-
-profondeur:after {
-  content: " m";
-  }
-
-

Ouvrez le document dans votre navigateur : -

- - -
-

Océans

-

Arctique
-Surface : 13 000 millions de km²
-Profondeur moyenne : 1 200 m

-

Atlantique
-Surface : 87 000 millions de km²
-Profondeur moyenne : 3 900 m

-

. . .

-
-
-


-Remarques à propos de cette démonstration : -

- -


-

- - -
Challenge -
Modifiez la feuille de style afin qu'elle affiche le document comme un tableau. -

(Consultez le chapître Tables dans la spécification CSS pour des exemples que vous pouvez adapter.) -

-
-

Pour continuer

-

Si vous avez eu des difficultés à comprendre cette page, ou si vous avez d'autres commentaires à son sujet, n'hésitez pas à contribuer à sa page de discussion. -

Ceci est la dernière page du tutoriel. -Pour plus d'informations à propos de l'utilisation de CSS dans Mozilla, consultez la page principale CSS de ce wiki. -

{{ languages( { "en": "en/CSS/Getting_Started/XML_data", "ko": "ko/CSS/Getting_Started/XML_data", "pl": "pl/CSS/Na_pocz\u0105tek/Dane_XML", "pt": "pt/CSS/Como_come\u00e7ar/Dados_XML" } ) }} diff --git a/files/fr/css/premiers_pas/interfaces_utilisateur_xul/index.html b/files/fr/css/premiers_pas/interfaces_utilisateur_xul/index.html deleted file mode 100644 index eba4bce28c..0000000000 --- a/files/fr/css/premiers_pas/interfaces_utilisateur_xul/index.html +++ /dev/null @@ -1,315 +0,0 @@ ---- -title: Interfaces utilisateur XUL -slug: CSS/Premiers_pas/Interfaces_utilisateur_XUL -tags: - - CSS - - 'CSS:Premiers_pas' -translation_of: Archive/Beginner_tutorials/XUL_user_interfaces ---- -

 

-

Cette page illustre le langage spécialisé de Mozilla pour créer des interfaces utilisateur.

-

Vous créerez une démonstration simple utilisable dans votre navigateur Mozilla.

-

Information : les interfaces utilisateur

-

Bien que le HTML propose quelques éléments d'interface utilisateur, il ne contient pas toutes les fonctionnalités nécessaires à la création d'une application complète.

-

Mozilla pallie à cette limitation en fournissant un langage spécialisé dans la création d'interfaces utilisateur : - - XUL - (XML User-interface Language, généralement prononcé en anglais comme « - - zool -  »).

-

Beaucoup des fonctions usuelles des interfaces utilisateur sont intégrées dans XUL. Par exemple, celui-ci fournit des fenêtres spécialisées telles que des dialogues ou des assistants, ainsi que des barres d'état, des barres de menus et d'outils, et même des navigateurs entiers.

-

Des fonctionnalités plus spécialisées peuvent être construites en combinant XUL avec d'autres technologies que vous avez pu voir dans ce tutoriel : les styles CSS, du code JavaScript, et des liaisons XBL.

-

Comme d'autres langages basés sur XML, XUL utilise des feuilles de style CSS.

- - - - - - - -
- Plus de détails
Pour plus d'informations à propos des interfaces utilisateur en XUL, consultez la page XUL de ce wiki.
-

Action : une démonstration de XUL

-

Créez un nouveau document XUL en tant que fichier texte, doc7.xul. Copiez et collez-y le contenu ci-dessous, en vous assurant de le faire défiler pour en obtenir l'entièreté :

-
-
<?xml version="1.0"?>
-<?xml-stylesheet type="text/css" href="style7.css"?>
-<!DOCTYPE window>
-
-<window
-  xmlns="http&58;//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-  title="Premiers pas avec CSS - Démonstration de XUL"
-  onload="init();">
-
-<script type="application/x-javascript" src="script7.js"/>
-
-<label class="head-1" value="Démonstration de XUL"/>
-
-<vbox>
-
-  <groupbox class="demo-group">
-    <caption label="Calculatrice du jour de la semaine"/>
-    <grid>
-      <columns>
-        <column/>
-        <column/>
-        </columns>
-      <rows>
-        <row>
-          <label class="text-prompt" value="Date :"
-            accesskey="D" control="date-text"/>
-          <textbox id="date-text" type="timed"
-            timeout="750" oncommand="refresh();"/>
-          </row>
-        <row>
-          <label value="Day:"/>
-          <hbox id="day-box">
-            <label class="day" value="Dimanche" disabled="true"/>
-            <label class="day" value="Lundi" disabled="true"/>
-            <label class="day" value="Mardi" disabled="true"/>
-            <label class="day" value="Mercredi" disabled="true"/>
-            <label class="day" value="Jeudi" disabled="true"/>
-            <label class="day" value="Vendredi" disabled="true"/>
-            <label class="day" value="Samedi" disabled="true"/>
-            </hbox>
-          </row>
-        </rows>
-      </grid>
-    <hbox class="buttons">
-      <button id="clear" label="Réinitialiser" accesskey="R"
-        oncommand="clearDate();"/>
-      <button id="today" label="Aujourd'hui" accesskey="A"
-        oncommand="setToday();"/>
-      </hbox>
-    </groupbox>
-
-  <statusbar>
-    <statusbarpanel id="status"/>
-    </statusbar>
-
-</vbox>
-
-</window>
-
-
-

Créez un nouveau fichier CSS, style7.css. Copiez et collez-y le contenu ci-dessous, en vous assurant de le faire défiler pour en obtenir l'entièreté :

-
-
/*** Démonstration de XUL ***/
-window {
-  -moz-box-align: start;
-  background-color: -moz-dialog;
-  font: -moz-dialog;
-  padding: 2em;
-  }
-
-.head-1 {
-  font-weight: bold;
-  font-size: 200%;
-  padding-left: 5px;
-  }
-
-
-/* group box */
-.demo-group {
-  padding: 1em;
-  }
-
-.demo-group grid {
-  margin-bottom: 1em;
-  }
-
-.demo-group column {
-  margin-right: .5em;
-  }
-
-.demo-group row {
-  margin-bottom: .5em;
-  }
-
-.demo-group .buttons {
-  -moz-box-pack: end;
-  }
-
-
-/* labels des jours de la semaine */
-.day {
-  margin-left: 1em;
-  }
-
-.day[disabled] {
-  color: #777;
-  }
-
-.day:first-child {
-  margin-left: 4px;
-  }
-
-
-/* labels colonne de gauche */
-.text-prompt {
-  padding-top: .25em;
-  }
-
-
-/* boîte d'entrée de la date */
-#date-text {
-  max-width: 8em;
-  }
-
-
-/* barre d'état */
-statusbar {
-  width: 100%;
-  border: 1px inset -moz-dialog;
-  margin: 4px;
-  padding: 0px 4px;
-  }
-
-#status {
-  padding: 4px;
-  }
-
-#status[warning] {
-  color: red;
-  }
-
-
-

Créez un nouveau fichier texte, script7.js. Copiez et collez-y le contenu ci-dessous, en vous assurant de faire défiler pour en obtenir l'entièreté :

-
-
// Démonstratio de XUL
-
-var dateBox, dayBox, currentDay, status; // éléments
-
-// appelée par window onLoad
-function init() {
-  dateBox = document.getElementById("date-text")
-  dayBox = document.getElementById("day-box")
-  status = document.getElementById("status")
-  setToday();
-  }
-
-// appelée par le bouton Réinitialiser
-function clearDate() {
-  dateBox.value = ""
-  refresh()
-  }
-
-// appelée par le bouton aujourd'hui
-function setToday() {
-  var d = new Date()
-  dateBox.value = (d.getMonth() + 1)
-    + "/" + d.getDate()
-    + "/" + d.getFullYear()
-  refresh()
-  }
-
-// appelée par la boîte de texte Date
-function refresh() {
-  var d = dateBox.value
-  var theDate = null
-
-  showStatus(null)
-  if (d != "") {
-    try {
-      var a = d.split("/")
-      var theDate = new Date(a[2], a[1], a[0] - 1)
-      showStatus(theDate)
-      }
-    catch (ex) {}
-    }
-  setDay(theDate)
-  }
-
-// fonctions internes
-function setDay(aDate) {
-  if (currentDay) currentDay.setAttribute("disabled", "true")
-  if (aDate == null) currentDay = null
-  else {
-    var d = aDate.getDay()
-    currentDay = dayBox.firstChild
-    while (d-- > 0) currentDay = currentDay.nextSibling
-    currentDay.removeAttribute("disabled")
-    }
-  dateBox.focus();
-  }
-
-function showStatus(aDate) {
-  if (aDate == null) {
-    status.removeAttribute("warning")
-    status.setAttribute("label", "")
-    }
-  else if (aDate === false || isNaN(aDate.getTime())) {
-    status.setAttribute("warning", "true")
-    status.setAttribute("label", "Date invalide")
-    }
-  else {
-    status.removeAttribute("warning")
-    status.setAttribute("label", aDate.toLocaleDateString())
-    }
-  }
-
-
-

Pour voir le résultat exactement tel que prévu, utilisez le thème par défaut dans votre navigateur. Si vous utilisz un thème différent, il peut changer certains styles de l'interface et faire en sorte que la démonstration aie l'air étrange.

-

Ouvrez le document dans votre navigateur Mozilla et testez l'interface.

-

Ce wiki ne permet pas d'utiliser XUL et JavaScript dans ses pages, il n'est donc pas possible de faire la démonstration ici. Cela ressemble à ceci :

- - - - - - -
-

Démonstration de XUL

-
-

Calculatrice du jour de la semaine

- - - - - - - - - - - - - - - -
Date :27/06/2005
Day:Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi
  -
-

Réinitialiser Aujourd'hui

-
-
-
-
-

27 juin 2005

-
-
-

Remarques à propos de cette démonstration :

- -

Examinez la feuille de style du document pour vous assurez que vous comprenez toutes les règles qui y figurent. S'il y a une règle que vous ne comprenez pas, mettez-la en commentaire et actualisez dans votre navigateur pour voir son effet sur le document.

- - - - - - - -
- Challenge
Utilisez l'inspecteur DOM pour examiner la boîte de texte Date. Elle est constituée d'autres éléments qui sont générés par sa liaison XBL. -

Découvrez la classe ( - - class - ) de son élément html:input. Il s'agit de l'élément qui reçoit réellement l'entrée de l'utilisateur.

-

À l'aide de ces informations, ajoutez une règle à la feuille de style qui rend le fond de la boîte Date bleu pâle lorsqu'elle a le focus clavier (mais reste blanche lorsque le focus clavier est ailleurs).

-
-

Pour continuer

-

Si vous avez eu des difficultés à comprendre cette page, ou si vous avez d'autres commentaires à son sujet, n'hésitez pas à contribuer à sa page de discussion.

-

Dans cette démonstration, vous voyez les formes rectangulaires standard qui sont communes à la plupart des interfaces utilisateur. Mozilla gère également un langage graphique spécialisé pour créer des formes, et peut utiliser CSS pour en spécifier le style. La page suivante en propose une démonstration : Graphiques SVG.

diff --git a/files/fr/css/premiers_pas/liaisons_xbl/index.html b/files/fr/css/premiers_pas/liaisons_xbl/index.html deleted file mode 100644 index 8f087ebf77..0000000000 --- a/files/fr/css/premiers_pas/liaisons_xbl/index.html +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: Liaisons XBL -slug: CSS/Premiers_pas/Liaisons_XBL -tags: - - CSS - - 'CSS:Premiers_pas' -translation_of: Archive/Beginner_tutorials/Using_XBL_from_stylesheets ---- -

 

-

Cette page illustre la façon d'utiliser CSS dans Mozilla pour améliorer la structure d'applications complexes, afin de rendre le code et ses ressources plus facilement réutilisables.

-

Vous appliquerez cette technique dans une démonstration simple.

-

Information : les liaisons XBL

-

La structure fournie par les langages de balisage et CSS n'est pas idéale pour les applications complexes où certaines parties nécessitent d'être indépendantes et réutilisables. Vous pouvez placer les feuilles de style et les scripts dans des fichiers séparés, mais vous devez lier ces fichiers avec le document dans son ensemble.

-

Une autre limitation structurelle concerne le contenu. Vous pouvez utiliser CSS pour fournir du contenu pour des éléments sélectionnés, mais ce contenu est limité à du texte et des images, et son positionnement est limité à juste avant ou juste après l'élément sélectionné.

-

Mozilla fournit un mécanisme permettant de surmonter ces limitations : - - XBL - (XML Bindings Language). Vous pouvez utiliser XBL pour lier des éléments sélectionnés à leurs propres :

- -

Étant donné que vous évitez de lier tout au niveau du document, vous pouvez créer des pièces indépendantes faciles à maintenir et réutilisables.

- - - - - - - -
- Plus de détails
Pour plus d'informations à propos des liaisons XBL, consultez la page XBL de ce wiki.
-

Action : une démonstration de XBL

-

Créez un nouveau document HTML, doc6.html. Copiez et collez-y le contenu ci-dessous :

-
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-
-<HEAD>
-<TITLE>Premiers pas en CSS avec Mozilla CSS - Démonstration de XBL</TITLE>
-<LINK rel="stylesheet" type="text/css" href="style6.css"></strong>
-</HEAD>
-
-<BODY>
-<H1>Démonstration de XBL</H1>
-<DIV id="square">Cliquez ici</DIV>
-</BODY>
-
-</HTML>
-
-
-

Créez un nouveau fichier CSS, style6.css. Cette feuille de style contient le style du document. Copiez et collez-y le contenu ci-dessous :

-
-
/*** Démonstration de XBL ***/
-#square {
-  -moz-binding: url("square.xbl#square");
-  }
-
-
-

Créez un nouveau fichier texte, square.xbl. Ce fichier contient la liaison XBL. Copiez et collez-y le contenu ci-dessous, en vous assurant de le faire défile pour l'obtenir dans son entièreté :

-
-
<?xml version="1.0"?>
-<!DOCTYPE bindings>
-<bindings xmlns="http://www.mozilla.org/xbl">
-
-<binding id="square">
-
-  <resources>
-    <stylesheet src="bind6.css"/>
-    </resources>
-
-  <content xmlns="http://www.w3.org/1999/xhtml">
-    <div anonid="square"/>
-    <button anonid="button" type="button">
-      <xbl:children/>
-      </button>
-    </content>
-
-  <implementation>
-
-    <field name="square"><![CDATA[
-      document.getAnonymousElementByAttribute(this, "anonid", "square")
-      ]]></field>
-
-    <field name="button"><![CDATA[
-      document.getAnonymousElementByAttribute(this, "anonid", "button")
-      ]]></field>
-
-    <method name="doDemo">
-      <body><![CDATA[
-        this.square.style.backgroundColor = "#cf4"
-        this.square.style.marginLeft = "20em"
-        this.button.setAttribute("disabled", "true")
-        setTimeout(this.clearDemo, 2000, this)
-        ]]></body>
-      </method>
-
-    <method name="clearDemo">
-      <parameter name="me"/>
-      <body><![CDATA[
-        me.square.style.backgroundColor = "transparent"
-        me.square.style.marginLeft = "0"
-        me.button.removeAttribute("disabled")
-        ]]></body>
-      </method>
-
-    </implementation>
-
-  <handlers>
-    <handler event="click" button="0"><![CDATA[
-     if (event.originalTarget == this.button) this.doDemo()
-     ]]></handler>
-    </handlers>
-
-  </binding>
-
-</bindings>
-
-
-

Créez un nouveau fichier CSS, bind6.css. Cette feuille de style séparée contient le style pour la liaison. Copiez et collez-y le contenu ci-dessous :

-
-
/*** Démonstration de XBL ***/
-[anonid="square"] {
-  width: 20em;
-  height: 20em;
-  border: 2px inset gray;
-  }
-
-[anonid="button"] {
-  margin-top: 1em;
-  padding: .5em 2em;"
-  }
-
-
-

Ouvrez le document dans votre navigateur et appuyez sur le bouton.

-

Ce wiki ne permet pas d'utiliser JavaScript au sein des pages, il n'est dont pas possible de montrer la démonstration ici. Cela ressemble à ceci, avant et après l'appui sur le bouton :

- - - - - - - -
- - - - - - -
-

Démonstration de XBL

-
-
-  
-
-
-
- - - - - - -
-

Démonstration de XBL

-
-
-  
-
-
-
-

Remarques à propos de cette démonstration :

- - - - - - - - -
- Challenges
Modifiez le fichier XBL afin que le carré double sa largeur lorsqu'il change de couleur au lieu de se déplacer vers la droite. -

Utilisez l'inspecteur DOM pour examiner le document, afin de révéler le contenu ajouté.

-
-

Pour continuer

-

Si vous avez eu des difficultés à comprendre cette page, ou si vous avez d'autres commentaires à son sujet, n'hésitez pas à contribuer à sa page de discussion.

-

Dans cette démonstration, le carré et le bouton forment un composant graphique ( - - widget - ) indépendant qui fonctionne au sein d'un document HTML. Mozilla dispose d'un langage de balisage spécialisé pour créer des interfaces utilisateur. La page suivante en donne une démonstration : Interfaces utilisateur XUL.

diff --git "a/files/fr/d\303\251veloppement_web/design_web_responsive/index.html" "b/files/fr/d\303\251veloppement_web/design_web_responsive/index.html" deleted file mode 100644 index 7dc87fc640..0000000000 --- "a/files/fr/d\303\251veloppement_web/design_web_responsive/index.html" +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Design web Responsive -slug: Développement_Web/Design_web_Responsive -tags: - - Design responsive - - Développement Web - - Mobile -translation_of: Web/Progressive_web_apps ---- -

Maintenant que les utilisateurs du Web se servent de plus en plus d'appareils mobiles pour naviguer sur les sites web et pour leurs applications, les concepteurs et les développeurs web doivent s'assurer que leurs créations ont unbon rendu visuel et un bon fonctionnement aussi bien sur les appareils mobiles que sur les ordinateurs de bureau traditionnels. Concepteur de premier plan, Luke Wroblewski préconise la conception pour « mobiles d'abord » (article en anglais), plutôt que comme une réflexion venant après la conception pour les postes de travail. Que votre conception pour les appareils mobiles soit votre objectif principal ou un supplément sympa, vous pouvez utiliser la puissance des CSS pour vous assurer que le même contenu est accessible sur toutes les plateformes matérielles, des téléphones portables aux grands écrans haute définition.

-

Cette approche est connue sous le nom «Web design réactif ». Certaines de ses stratégies comprennent :

- -

Exigences minimales pour le Firefox Marketplace

-

Si vous soumettez une application sur le marketplace de Firefox pour Firefox OS ou Firefox pour Android, elle doit être adaptable aux tailles d'écran mobiles et à leur densité en pixels. Gardez à l'esprit que les plus petits écrans ne font que 320px par 480px. Une autre erreur courante est de ne pas reconnaître la densité de l'écran et puis ne pas ajuster la taille des polices et des cibles tactiles en conséquence. Pour plus d'informations, voir les critères d'examen du Marketplace.

-

Ressources

-

Aperçus

- -

Techniques

- -

Outils

- -

Exemples

- -

 

diff --git a/files/fr/e4x/index.html b/files/fr/e4x/index.html deleted file mode 100644 index a52f712f7d..0000000000 --- a/files/fr/e4x/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: E4X -slug: E4X -tags: - - E4X - - JavaScript -translation_of: Archive/Web/E4X ---- -

-ECMAScript pour XML (E4X) est une extension de langage de programmation ajoutant un support XML natif à JavaScript. Cela se fait en fournissant un accès aux documents XML dans une forme qui semblera naturelle aux programmeurs ECMAScript. Son but est de proposer une syntaxe alternative et plus simple que les interfaces DOM pour accéder aux documents XML. -

E4X est standardisé par l'Ecma International dans le standard ECMA-357 (actuellement dans sa seconde édition, de décembre 2005). -

E4X est implémenté (au moins partiellement) dans SpiderMonkey (le moteur JavaScript de Gecko) et dans Rhino (moteur JavaScript écrit en Java). -

-
Note : Dans les navigateurs basés sur Gecko 1.8 comme Firefox 1.5, E4X est déjà partiellement activé pour les auteurs de pages Web. Pour activer complètement E4X, l'élément <script> doit avoir le type MIME « text/javascript;e4x=1 » (c'est-à-dire avoir un attribut de la forme type="text/javascript;e4x=1"). La différence entre les deux modes est que sans le type MIME indiquant « e4x=1 », tous les littéraux de commentaires XML/HTML au niveau déclaratif (<!--...-->) sont ignorés afin d'assurer une rétro-compatibilité avec les astuces de masquage des scripts dans des commentaires. De plus, les sections CDATA (<![CDATA{{ mediawiki.external('...') }}]>) ne sont pas analysées comme des littéraux CDATA (ce qui mènerait à une erreur de syntaxe JS en HTML puisque l'élément <script> génère une section CDATA implicite, et ne peut donc pas contenir de sections CDATA explicites). -
-

Bogues connus et limitations

- -

Solution : -

-
var response = xmlhttprequest.responseText; // bug 270553
-response = response.replace('<?xml version="1.0"?>', ""); // bug 336551
-var e4x = new XML(response);
-
-

Ressources

- -
-
-{{ languages( { "en": "en/E4X", "es": "es/E4X", "it": "it/E4X", "ja": "ja/E4X", "ko": "ko/E4X", "pl": "pl/E4X" } ) }} diff --git a/files/fr/extensions/bootcamp_tutorial/index.html b/files/fr/extensions/bootcamp_tutorial/index.html deleted file mode 100644 index 32d38ac9dc..0000000000 --- a/files/fr/extensions/bootcamp_tutorial/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Tutoriel pour s'entrainer -slug: Extensions/Bootcamp_tutorial -translation_of: Extensions/Bootcamp_tutorial ---- -

Myk Melez a donné cette présentation de tutoriel sur les extensions de développement comme faisant partie du « Mozilla Labs Challenge ». Cette présentation fournis une introduction rapide au concept dextension dans le but de vous apprendre les bases sur le développement dextension.

- -

Cette présentation répond aux questions suivantes :

- - - -

Téléchargez la présentation (ANGL).

- -

Téléchargez les fichiers du tutoriel  (ANGL).

- -

Regardez la vidéo (en format Ogg) (ANGL).

- -

{{ListSubpages}}

diff --git "a/files/fr/extensions/communaut\303\251/index.html" "b/files/fr/extensions/communaut\303\251/index.html" deleted file mode 100644 index c0e23ece18..0000000000 --- "a/files/fr/extensions/communaut\303\251/index.html" +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Communauté -slug: Extensions/Communauté -tags: - - Extensions -translation_of: Extensions/Community ---- -

-

Si vous connaissez d'autres listes de diffusion, newsgroups, forums ou d'autres communautés ayant trait aux extensions, n'hésitez pas à ajouter un lien ci-dessous. -

-

Communauté francophone

- -

Communauté anglophone

- -{{ languages( { "en": "en/Extensions/Community", "ja": "ja/Extensions/Community", "pl": "pl/Rozszerzenia/Spo\u0142eczno\u015b\u0107" } ) }} diff --git "a/files/fr/faq_de_mozilla_pour_d\303\251veloppeurs_web/index.html" "b/files/fr/faq_de_mozilla_pour_d\303\251veloppeurs_web/index.html" deleted file mode 100644 index 8d29b0ee5c..0000000000 --- "a/files/fr/faq_de_mozilla_pour_d\303\251veloppeurs_web/index.html" +++ /dev/null @@ -1,159 +0,0 @@ ---- -title: FAQ de Mozilla pour développeurs web -slug: FAQ_de_Mozilla_pour_développeurs_web -tags: - - Aide_pour_les_éditeurs_de_MDC - - Traduction_en_cours -translation_of: Mozilla/Mozilla_Web_Developer_FAQ ---- -

Ce document répond aux questions que les auteurs web posent souvent en relation avec Firefox et d'autres navigateurs basés sur Gecko. Des liens vers des FAQ plus généralistes sur le développement web sont disponibles à la fin de ce document.

-
- Cette page est en cours de traduction, son contenu peut donc être incomplet ou contenir des parties en anglais. N'hésitez pas à participer à sa traduction à partir de
-

Que sont les modes Quirks et Standards ?

-

Gecko dispose de deux modes de mise en page et demi : Quirks, Presque Standards et Standards. Dans son mode Standards, Gecko a pour but de traiter les documents écrits en concordance avec les spécifications de formats web applicables. Dans son mode Quirks, et à des fins de rétrocompatibilité, Gecko imite certains comportements d'anciens navigateurs qui le conduisent à violer certaines de ces spécifications. Le mode Presque Standards est semblable au mode Standards, sauf qu'il traite la question suivante en dessinant les cellules de tableaux comportant des images selon la méthode traditionnelle. Ce mode est déterminé en fonction de la déclaration doctype (ou de son absence) au début d'un document HTML.

- -

La manière la plus simple d'activer le mode Quirks pour un document HTML est de ne pas mettre de déclaration de doctype. Il est toutefois vivement déconseillé de créer de nouveaux documents qui dépendraient du mode Quirks.

-

Le mode Presque Standards a été ajouté dans Mozilla 1.1 beta et Mozilla 1.0.1. Dans les versions plus anciennes, les déclarations de doctype qui activent le mode Presque Standards aujourd'hui activaient plutôt le mode Standards.

-

Le reniflage de doctype s'applique uniquement aux documents servis comme text/html. Les documents envoyés en XML activent toujours le mode de rendu Standards. C'est notamment le cas des documents servis comme application/xhtml+xml. Par conséquent, les documents XHTML 1.0 Transitional sont rendus en mode Presque Standards lorsqu'ils sont servis en text/html selon l'Annexe C de XHTML, mais en mode Standards lorsqu'ils sont servis en application/xhtml+xml.

-

Comme les autres navigateurs contemporains disposent également d'un mode Standards, l'utilisation des doctypes mentionnés ci-dessus est la meilleure manière d'obtenir une mise en page CSS consistante quel que soit le navigateur utilisé. Par contre, les dérogations du mode quirks varieront d'un navigateur à l'autre et ne sont donc pas fiables.

-

Pourquoi y a-t-il de l'espace autour des images dans les tableaux en mode Standards ?

-

Dans le modèle de mise en page par boîtes de CSS2, la taille verticale des boîtes et l'alignement vertical des images diffèrent du comportement des anciens navigateurs. Ces aspects de la mise en page peuvent être changés en définissant explicitement la propriété CSS display des images (et éventuellement des éléments <a> qui les entourent) à block.

-

Si les cellules de tableaux qui contiennent uniquement une image sont par exemple marquées avec <td class="imgcell">, la règle CSS correspondante sera : .imgcell img, .imgcell a { display: block; }

-

Explication plus détaillée…

-

Why are there still gaps even between text rows in tables when the layout engine is in the Standards mode or in the Almost Standards mode?

-

In the Standards mode and in the Almost Standards mode Mozilla does not suppress the default margins of the first and last child element in table cells. Therefore, the default margins for paragraphs apply even with markup such as <td><p>foo</p></td>.

-

Often the content of a cell in a table of tabular data does not constitute a paragraph. In that case, the easy solution is not to mark the contents of the cell as a paragraph.

-

When the paragraph markup is called for but the default margins are unwanted, zero margins can be suggested using CSS.

-

Ma feuille de style ne fonctionne pas! Pourquoi?

-

Voici quelques points à vérifier:

- -

Il est aussi possible, mais moins probable, que vous fassiez l'expérience d'un bug du navigateur.

-

JavaScript doesn’t work! Why?

-

Some proprietary document objects such as document.all and document.layers are not part of the W3C DOM and are not supported in Mozilla. (There is partial undetectable support for document.all, though, in newer versions of Mozilla. However, that functionality only exists for compatibility with sites authored specifically for IE. You should not rely on Mozilla’s document.all support on new pages.) The method document.getElementById() can be used instead.

-

In the Standards mode Mozilla does not generate implicit top-level JavaScript variable bindings for elements with the id or name attribute. The correct way to access an element by id is to call the document.getElementById() method with the id as a string as the argument.

-

Also, old client sniffers can shut out new browsers. The point of having a common API (the W3C DOM) is interoperability, and checking for a particular browser defeats that purpose. When working with the DOM, it is better to check for the existence of the methods and objects you are planning on using. For example, the existence of document.getElementById() can be checked as follows:

-
if(document.getElementById) {
-   /* code that uses document.getElementById() */
-}
-
-

Why doesn’t Mozilla display my alt tooltips?

-

Contrary to a popular belief stemming from the behavior of a couple browsers running on the Windows platform, alt isn’t an abbreviation for ‘tooltip’ but for ‘alternative’. The value of the alt attribute is a textual replacement for the image and is displayed when the image isn’t.

-

Mozilla doesn’t display the alt attribute as a tooltip, because it has been observed that doing so encourages authors to misuse the attribute.

- -

There is another attribute that Mozilla shows as a tooltip: title. In fact, the HTML 4.01 specification suggests that the title attribute may be displayed as a tooltip. However, this particular display method is not required and some other browsers show the title attribute in the browser status bar, for example.

-

At this point some people feel compelled to post a “But IE…” rant in the newsgroups or in Bugzilla. Please note that Mac IE 5 behaves in the same way as Mozilla when it comes to the alt and title attributes. Windows IE also shows the title attribute in a tooltip.

-

Does Mozilla support downloadable fonts?

-

Downloadable fonts in TrueType and OpenType formats (.ttf and .otf) are supported since Firefox 3.5. The fonts have to be served from the same origin (protocol, host, port) as the content that uses them unless the fonts are served with the appropriate Cross-Origin Resource Sharing HTTP headers.

-

Downloadable fonts in the EOT format are not supported.

-

If you use downloadable fonts, please make sure the fonts have the right Unicode mappings and the content uses the right Unicode characters. The past practice of displaying non-Latin text by assigning non-Latin glyphs to Latin code points breaks copying and pasting, breaks searching on the page, breaks indexing by search engines and breaks readability in browsers that do not support downloadable fonts (e.g. legacy browsers or mobile browsers that opt not to download fonts due to file size).

-

Why aren’t symbol/dingbat fonts working?

-

They are working. Characters in HTML 4 and XML documents are Unicode characters (even if the document has been encoded using a legacy encoding for transfer)—not font glyph indexes.

-

<font face="Symbol">a</font> means the character LATIN SMALL LETTER A (U+0061) preferably displayed using the Symbol font. Since the Symbol font does not have glyph for that character, another font is used. If you mean α, you should use GREEK SMALL LETTER ALPHA (U+03B1). If you are using a legacy encoding that cannot represent that character, you can use a numeric character reference: &#945;.

-

Likewise, to use a dingbat, you should use the appropriate Unicode character instead of trying to apply a dingbat font to an ASCII character. For example, to represent ☺, you should use WHITE SMILING FACE (U+263A).

-

Why isn’t Mozilla rendering my page as I intended? So my page isn’t standards-compliant, but good browsers should render pages as the author intended anyway!

-

Authors are supposed to communicate their intentions using the Web standards. Otherwise, finding out the intentions of each particular author would require psychic abilities which can’t be implemented in software. Even in cases where a human could deduce the intention, doing so in software would be very slow, bug-inducing, difficult and complicated.

-

The usual counter argument is that there is no need to guess—Mozilla should do whatever browser x does (where x is the favorite non-Mozilla browser of whoever is presenting the counter argument). However, doing whatever browser x does in every conceivable case isn’t simple at all, even though it might appear to be simple when presented as a passing remark.

-

Different people have different ideas about what x should be. The second problem is that Web authors are very creative in coming up with different ways of deviating from the standards. In fact, since the input to the browser can be of arbitrary length, there is no upper bound for the number of distinct ways of deviating from the standards. Therefore, it is impossible to test whether Mozilla reacts exactly like browser x to every possible input. (Likewise, there is no upper bound for the number of ways different features of the standards themselves can be combined, which makes software quality assurance challenging.)

-

Also, the ways in which browser x reacts to some standards-incompliant input are not all intentional. Some of the reactions are due to unknown and unintentional interactions within a complex program. Even if you had the source code for browser x, you couldn’t change anything without risking changing one or more of the unknown and unintentional interactions within the program.

-

The usual counter argument is that Mozilla doesn’t need to match the behavior of browser x in every possible case but only in the alleged common cases. However, it turns out Mozilla is doing that already. Mozilla’s Standards mode is, obviously, already compatible with other browsers that implement the same standards reasonably correctly. On the other hand, Mozilla’s quirks mode already accommodates common non-standardisms that are due to the behaviors of common legacy browsers.

-

Instead of putting time and effort into reverse-engineering and cloning legacy browsers, it makes more sense to focus on implementing standards. Standards (when implemented by others as well) promote interoperability better than cloning legacy software bug by bug.

-

Also, HTML was designed to adapt to different presentation media, so different presentations of the same document are to be expected.

-

According to the Accept header, Gecko accepts both application/xhtml+xml and text/html. Should I serve application/xhtml+xml to Gecko?

-

application/xhtml+xml was added to the Accept header in order to enable the serving of MathML to both Mozilla and IE with Apache without scripting back when the MathPlayer plug-in for IE did not handle application/xhtml+xml.

-

If your document mixes MathML or SVG with XHTML, you should use application/xhtml+xml (until HTML5 parsing is supported).

-

However, if you are using the usual HTML features (no MathML or SVG) and are serving your content as text/html to other browsers, there is no need to serve application/xhtml+xml to Mozilla. Serving valid HTML as text/html ensures the widest browser and search engine support.

-

There is a fad of serving text/html to IE but serving the same markup with no added value as application/xhtml+xml to Gecko. This is usually done without a mechanism that would ensure the well-formedness of the served documents. Mechanisms that ensure well-formed output include serializing from a document tree object model (eg. DOM) and XSLT transformations that do not disable output escaping. When XHTML output has been retrofitted to a content management system that was not designed for XML from the ground up, the system usually ends up discriminating Gecko users by serving tag soup labeled as XML to Gecko (leading to a parse error) and serving the same soup labeled as text/html to IE (not leading to a parse error).

-

How is the treatment of application/xhtml+xml documents different from the treatment of text/html documents?

- -

I didn’t find the answer I was looking for. Where should I ask?

-

Try asking in the newsgroup relevant to your question in the comp.infosystems.www.authoring.* hierarchy or, if your question is about JavaScript/ECMAScript or the DOM, in comp.lang.javascript (after reading the group FAQs first, of course). Please do not ask Web authoring questions in the newsgroups intended for discussion about the development of Mozilla.

- -
-

Informations sur le document original

- -
-

 

diff --git a/files/fr/feed_content_access_api/index.html b/files/fr/feed_content_access_api/index.html deleted file mode 100644 index 43fb8bfbe3..0000000000 --- a/files/fr/feed_content_access_api/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: API d'accès au contenu de flux -slug: Feed_content_access_API -tags: - - Extensions -translation_of: Mozilla/Tech/Feed_content_access_API ---- -

Firefox 2 et Thunderbird 2 introduisent de nouvelles interfaces permettant aux développeurs d'extensions d'accéder plus facilement aux flux RSS et Atom.

-

Les interfaces de flux

-
-
- nsIFeed
-
- Représente un flux RSS ou Atom.
-
- nsIFeedContainer
-
- Une classe de base dont dérivent plusieurs des interfaces liées aux flux.
-
- nsIFeedElementBase
-
- Une classe de base dont dérivent plusieurs des autres interfaces liées aux flux.
-
- nsIFeedEntry
-
- Représente une entrée unique dans un flux RSS ou Atom.
-
- nsIFeedGenerator
-
- Décrit le logiciel générateur du flux RSS ou Atom.
-
- nsIFeedPerson
-
- Représente une personne. Contient le nom de la personne, son adresse de courrier électronique et celle de sa page Web.
-
- nsIFeedProcessor
-
- Analyse les flux RSS et Atom.
-
- nsIFeedProgressListener
-
- Implémentée par le logiciel désirant analyser le flux RSS ou Atom pour recevoir des messages pendant le processus d'analyse.
-
- nsIFeedResult
-
- Décrit le résultat de l'analyse d'un flux.
-
- nsIFeedResultListener
-
- Implémentée par le logiciel désirant analyser le flux RSS ou Atom pour recevoir un message lorsque l'analyse est terminée.
-
- nsIFeedTextConstruct
-
- Représente les valeurs texte dans un flux ; comprend les fonctions permettant de charger le texte au format texte ou HTML.
-
- nsIScriptableUnescapeHTML
-
- Une classe utilitaire qui décode les chaînes HTML.
-
-

Exemple : lecture d'un flux depuis le Web

-

Il est assez facile de lire et d'analyser un flux. Utilisez XMLHttpRequest pour charger le flux, puis analysez la chaîne reçue à l'aide de nsIFeedProcessor.

-

Le chargement et l'envoi du flux vers l'analyseur peuvent se faire à l'aide d'un code semblable à celui-ci :

-
  fetch: function(feedUrl)
-  {
-    var httpRequest = null;
-
-    function infoReceived() {
-      var data = httpRequest.responseText;
-
-      var ioService = Components.classes['@mozilla.org/network/io-service;1']
-                                         .getService(Components.interfaces.nsIIOService);
-      var uri = ioService.newURI(feedUrl, null, null);
-
-      if (data.length) {
-        var parser = Components.classes["@mozilla.org/feed-processor;1"]
-                                        .createInstance(Components.interfaces.nsIFeedProcessor);
-        var listener = new FeedTestResultListener();
-        try {
-          parser.listener = listener;
-          parser.parseFromString(data, uri);
-        }
-        catch(e) {
-          alert("Erreur de traitement du flux.");
-        }
-      }
-    }
-
-    httpRequest = new XMLHttpRequest();
-
-    httpRequest.open("GET", feedUrl, true);
-    try {
-      httpRequest.onload = infoReceived;
-      httpRequest.send(null);
-    }
-    catch(e) {
-      alert(e);
-    }
-  }
-
-

L'interface nsIFeedProcessor permet d'analyser les données du flux depuis plusieurs sources possibles ; dans ce cas, nous chargeons le document dans une chaîne, puis nous analysons celle-ci avec sa méthode parseFromString(). Vous pouvez également l'analyser depuis un fichier en utilisant parseFromStream(), ou directement depuis une URL avec parseAsync().

-

La traitement à proprement parler du flux analysé est fait par la méthode handleResult() de l'objet FeedTestResultListener. Le code ressemble à cela :

-
    FeedTestResultListener.prototype = {
-      handleResult: function(result) {
-        var feed = result.doc;
-
-        feed.QueryInterface(Components.interfaces.nsIFeed);
-
-        // Ouvre une nouvelle fenêtre
-
-        var win = window.open("", "FeedTest_Window");
-        var doc = win.document;
-
-        doc.open();
-
-        // Écrit l'en-tête HTML et le titre de la page
-
-        doc.write("<html><head><title>Flux : " + feed.title.text + "</title></head><body>");
-        doc.write("<h1>" + feed.title.text + "</h1><p>");
-
-        var itemArray = feed.items;
-        var numItems = itemArray.length;
-
-        // Écrit les informations sur l'article
-
-        if (!numItems) {
-          doc.write("<i>Pas de nouvelles, bonnes nouvelles !</i>");
-        }
-        else {
-          var i;
-          var theEntry;
-          var theUrl;
-          var info;
-
-          for (i=0; i<numItems; i++) {
-            theEntry = itemArray.queryElementAt(i, Components.interfaces.nsIFeedEntry);
-
-            if (theEntry) {
-              theUrl =
-              doc.write('<b><a href="' + theEntry.link.resolve("") + '">' + theEntry.title.text + '</a></b><br>');
-              if (theEntry.summary) {
-                info = theEntry.summary.text + "<p><hr><p>";
-              }
-              else {
-                info = theEntry.content.text + "<p><hr><p>";
-              }
-              doc.write("<blockquote>" + info);
-              doc.write("</blockquote><p>");
-            }
-          }
-        }
-
-        // Ferme le document ; c'est terminé !
-
-        doc.write("</body></html>");
-        doc.close();
-      }
-    }
-
-

La fonction handleResult() reçoit comme argument un nsIFeedResult, qui décrit un flux ; sa propriété doc est un nsIFeed qui contient toutes les données du flux.

-

Pour obtenir le titre du flux, cherchez la propriété feed.title. Le titre est de type nsIFeedTextConstruct qui peut présenter du texte dans différents formats ; on utilise sa propriété text pour extraire le titre du flux encodé en HTML. Nous pourrions également utiliser la méthode plainText() pour obtenir une copie du titre formatée en texte simple.

-

On peut parcourir la liste des éléments du flux en utilisant feed.items de type nsIArray. Cette liste contient les objects nsIFeedEntry qui décrivent chaque élément du flux.

-

On construit le document en récupérant les propriétés titre, lien, résumé et contenu de chaque élément. L'URL complète du lien est obtenue en utilisant la méthode resolve().

-

Pour initialiser l'extraction du flux, on appelle la fonction fetch(url). Ceci ouvre une nouvelle fenêtre affichant le contenu du flux, où les titres de chaque élément sont des liens redirigeant vers les articles correspondants.

-

Pour plus d'informations sur chaque interface d'accès au flux, consultez leurs pages de références respectives.

-

 

diff --git a/files/fr/fuel/annotations/index.html b/files/fr/fuel/annotations/index.html deleted file mode 100644 index 8e7a47d542..0000000000 --- a/files/fr/fuel/annotations/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Annotations -slug: FUEL/Annotations -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/FUEL/fuelIAnnotations ---- -

- -


-

-

Synoptique

- - - - - - - - -
boolean has(in AString aName) -
nsIVariant get(in AString aName) -
void set(in AString aName, in nsIVariant aValue, in PRInt32 aExpiration) -
void remove(in AString aName) -
-

Attributs

- - - - -
Attribut -Type -Description -
names -Attribut nsIVariant en lecture seule -Tableau des noms de commentaires associés à l'élément parent -
-

Méthodes

-

has()

-

Détermine l'existence d'un commentaire pour le nom donné. -

-
boolean has(in AString aName)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom du commentaire -
-
Valeur retournée
-

true si le commentaire existe pour le nom donné, false dans le cas contraire. -

-

get()

-

Récupère la valeur du commentaire pour le nom donné. -

-
nsIVariant get(in AString aName)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom du commentaire -
-
Valeur retournée
-

Une variable contenant la valeur du commentaire. La valeur sera une chaîne, un booléen ou un nombre. -

-

set()

-

Définit la valeur d'un commentaire pour le nom donné. -

-
void set(in AString aName, in nsIVariant aValue, in PRInt32 aExpiration)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom du commentaire -
-
Valeur retournée
-


-

-

remove()

-

Supprime le commentaire nommé de l'élément parent. -

-
void remove(in AString aName)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom du commentaire. -
-
Valeur retournée
-

Voir également

-


-

-
-
diff --git a/files/fr/fuel/bookmark/index.html b/files/fr/fuel/bookmark/index.html deleted file mode 100644 index 6ee2b8494a..0000000000 --- a/files/fr/fuel/bookmark/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Bookmark -slug: FUEL/Bookmark -tags: - - FUEL - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/FUEL/fuelIBookmark ---- -

- -


-

-

Synoptique

- - -
void remove() -
-

Attributs

- - - - - - - - - - - - - - - - - - - - -
Attribut -Type -Description -
id -attribut long en lecture seule -L'id du marque-page. -
title -attribut AString -Le titre du marque-page. -
uri -attribut nsIURI -L'uri du marque-page. -
description -attribut AString -La description du marque-page. -
keyword -attribut AString -Les mots clefs associés au marque-page. -
type -attribut AString en lecture seule -Le type de marque-page. Valeurs : bookmark, separator -
parent -attribut fuelIBookmarkFolder -Le dossier parent du marque-page. -
annotations -attribut fuelIAnnotations -Les objets commentaires du marque-page. -
events -attribut fuelIEvents en lecture seule -Les objets événements du marque-page. Accepte les valeurs : remove, change, visit, move -
-

Méthodes

-

remove()

-

Supprime l'élément du dossier parent. Utilisé pour effacer un marque-page ou un séparateur -

-
void remove()
-
-
Paramètres
-
Valeur retournée
-


-

-

Voir également

-


-

-
-
diff --git a/files/fr/fuel/bookmarkfolder/index.html b/files/fr/fuel/bookmarkfolder/index.html deleted file mode 100644 index 16ae9335a2..0000000000 --- a/files/fr/fuel/bookmarkfolder/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: BookmarkFolder -slug: FUEL/BookmarkFolder -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/FUEL/fuelIBookmarkFolder ---- -

- -


-

-

Synoptique

- - - - - - - - -
fuelIBookmark addBookmark(in AString aTitle, in nsIURI aURI) -
fuelIBookmark addSeparator() -
fuelIBookmarkFolder addFolder(in AString aTitle) -
void remove() -
-

Attributs

- - - - - - - - - - - - - - - - - - -
Attribut -Type -Description -
id -attribut long long en lecture seule -L'id du dossier. -
title -attribut AString -Le titre du dossier. -
description -attribut AString -La description du dossier. -
type -attribut AString en lecture seule -Le type du dossier. Valeurs : folder -
parent -attribut fuelIBookmarkFolder -Le dossier parent du dossier. -
annotations -attribut fuelIAnnotations en lecture seule -L'objets Annotations du dossier. -
events -attribut fuelIEvents en lecture seule -Les objets événements du dossier. Accepte les valeurs : add, addchild, remove, removechild, change, move -
children -attribut nsIVariant en lecture seule -Tableau de tous les marque-pages, séparateurs et dossiers contenus dans ce dossier. -
-

Méthodes

-

addBookmark()

-

Ajoute un nouveau marque-page enfant dans ce dossier. -

-
fuelIBookmark addBookmark(in AString aTitle, in nsIURI aURI)
-
-
Paramètres
-
<tt>aTitle</tt> -
Le titre du marque-page. -
-
Valeur retournée
-


-

-

addSeparator()

-

Ajoute un nouveau séparateur enfant dans ce dossier. -

-
fuelIBookmark addSeparator()
-
-
Paramètres
-
Valeur retournée
-


-

-

addFolder()

-

Ajoute un nouveau dossier enfant dans ce dossier. -

-
fuelIBookmarkFolder addFolder(in AString aTitle)
-
-
Paramètres
-
<tt>aTitle</tt> -
Le titre du dossier. -
-
Valeur retournée
-


-

-

remove()

-

Supprime le dossier de son dossier parent. -

-
void remove()
-
-
Parameters
-
Valeur retournée
-

Voir également

-


-

-
-
diff --git a/files/fr/fuel/browsertab/index.html b/files/fr/fuel/browsertab/index.html deleted file mode 100644 index 4feba94116..0000000000 --- a/files/fr/fuel/browsertab/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: BrowserTab -slug: FUEL/BrowserTab -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/FUEL/fuelIBrowserTab ---- -

- -


-

-

Synoptique

- - - - - - - - - - -
void load(in nsIURI aURI) -
void focus() -
void close() -
void moveBefore(in fuelIBrowserTab aBefore) -
void moveToEnd() -
-

Attributs

- - - - - - - - - - - - -
Attribut -Type -Description -
uri -attribut nsIURI en lecture seule -L'URI actuel de cet onglet. -
index -attribut PRInt32 en lecture seule -L'index actuel de cet onglet dans la fenêtre du navigateur. -
window -attribut fuelIWindow en lecture seule -La fenêtre du navigateur qui contient l'onglet. -
document -attribut nsIDOMHTMLDocument en lecture seule -Le document contenu dans l'onglet du navigateur. -
events -attribut fuelIEvents en lecture seule -Les objets événements de l'onglet. Accepte la valeur : load -
-

Méthodes

-

load()

-

Charge une nouvelle URI pour l'onglet. -

-
void load(in nsIURI aURI)
-
-
Paramètres
-
<tt>aURI</tt> -
L'URI à charger pour l'onglet -
-
Valeur retournée
-

focus()

-

Donne le focus à l'onglet et le met à l'avant-plan. -

-
void focus()
-
-
Paramètres
-
Valeur retournée
-

close()

-

Ferme l'onglet. L'onglet peut ne pas se fermer car le script peut annuler l'opération de fermeture. -

-
void close()
-
-
Paramètres
-
Valeur retournée
-

moveBefore()

-

Déplace l'onglet avant un autre onglet dans la fenêtre du navigateur. -

-
void moveBefore(in fuelIBrowserTab aBefore)
-
-
Paramètres
-
<tt>aBefore</tt> -
L'onglet précédent celui qu'on veut déplacer. -
-
Valeur retournée
-

moveToEnd()

-

Déplace l'onglet en dernière position dans la fenêtre du navigateur. -

-
void moveToEnd()
-
-
Paramètres
-
Valeur retournée
-

Voir également

-


-

-
-
diff --git a/files/fr/fuel/console/index.html b/files/fr/fuel/console/index.html deleted file mode 100644 index 5e0d1c2657..0000000000 --- a/files/fr/fuel/console/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Console -slug: FUEL/Console -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/extIConsole ---- -

- -


-

-

Synoptique

- - - - -
void log(in AString aMsg) -
void open() -
-

Attributs

- - -
Attribut -Type -Description -
-

Méthodes

-

log()

-

Envoie une chaîne donnée vers la console. -

-
void log(in AString aMsg)
-
-
Paramètres
-
<tt>aMsg</tt> -
Le texte à envoyer vers la console -
-
Valeur retournée
-


-

-

open()

-

Ouvre la fenêtre de la console d'erreurs. La fenêtre de la console devient la fenêtre active si elle est déjà ouverte. -

-
void open()
-
-
Paramètres
-
Valeur retournée
-


-

-

Voir également

-
-
diff --git a/files/fr/fuel/eventitem/index.html b/files/fr/fuel/eventitem/index.html deleted file mode 100644 index c477c66940..0000000000 --- a/files/fr/fuel/eventitem/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: EventItem -slug: FUEL/EventItem -tags: - - FUEL - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/extIEventItem ---- -

- -


-

-

Synoptique

- - -
void preventDefault() -
-

Attributs

- - - - - - -
Attribut -Type -Description -
type -attribut AString en lecture seule -Le nom de l'événement -
data -attribut AString en lecture seule -Peut contenir des informations ou des données supplémentaires associées à l'événement. Cet attribut est optionnel et spécifique à l'événement. Si l'événement n'envoie pas d'informations supplémentaires, sa valeur est vide. -
-

Méthodes

-

preventDefault()

-

Annule l'événement s'il peut être annulé. -

-
void preventDefault()
-
-
Paramètres
-
Valeur retournée
-

Voir également

-
-
diff --git a/files/fr/fuel/eventlistener/index.html b/files/fr/fuel/eventlistener/index.html deleted file mode 100644 index 75d3689136..0000000000 --- a/files/fr/fuel/eventlistener/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: EventListener -slug: FUEL/EventListener -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/extIEventListener ---- -

- -


-

-

Synoptique

- - -
void handleEvent(in fuelIEventItem aEvent) -
-

Attributs

- - -
Attribut -Type -Description -
-

Méthodes

-

handleEvent()

-

Cette méthode est appelée chaque fois qu'un événement se produit du type pour lequel... -

-
void handleEvent(in fuelIEventItem aEvent)
-
-
Paramètres
-
<tt>aEvent</tt> -
Le fuelIEventItem associé à l'événement. -
-
Valeur retournée
-

Voir également

-
-
diff --git a/files/fr/fuel/events/index.html b/files/fr/fuel/events/index.html deleted file mode 100644 index 4e8c5e3787..0000000000 --- a/files/fr/fuel/events/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Events -slug: FUEL/Events -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/extIEvents ---- -

- -

-

Synoptique

- - - - -
void addListener(in AString aEvent, in fuelIEventListener aListener) -
void removeListener(in AString aEvent, in fuelIEventListener aListener) -
-

Attributs

- - -
Attribut -Type -Description -
-

Méthodes

-

addListener()

-

Ajoute un gestionnaire d'événement dans la liste. Si plusieurs gestionnaires identiques sont ajoutés sur le même événement cible avec les mêmes paramètres, les instances dupliquées sont supprimées. Elles ne provoquent pas l'appel répété de EventListener et comme elles sont supprimées, elles n'ont pas besoin d'être effacées à l'aide de la méthode removeListener. -

-
void addListener(in AString aEvent, in fuelIEventListener aListener)
-
-
Paramètres
-
<tt>aEvent</tt> -
Le nom de l'événement -
-
Valeur retournée
-

removeListener()

-

Supprime un gestionnaire d'événements de la liste. Appeler cette méthode avec des arguments ne correspondant à aucun des événements actuellement enregistrés dans le gestionnaire n'a aucun effet. -

-
void removeListener(in AString aEvent, in fuelIEventListener aListener)
-
-
Paramètres
-
<tt>aEvent</tt> -
Le nom d'un événement -
-
Valeur retournée
-

Voir également

-
-
diff --git a/files/fr/fuel/extensions/index.html b/files/fr/fuel/extensions/index.html deleted file mode 100644 index 9b0f90687a..0000000000 --- a/files/fr/fuel/extensions/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Extensions -slug: FUEL/Extensions -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/extIExtensions ---- -

- -


-

-

Synoptique

- - - - -
boolean has(in AString aId) -
fuelIExtension get(in AString aId) -
-

Attributs

- - - - -
Attribut -Type -Description -
all -attribut nsIVariant en lecture seule -Tableau de fuelIExtension listant toutes les extensions installées. -
-

Méthodes

-

has()

-

Détermine si une extension existe avec l'id donné. -

-
boolean has(in AString aId)
-
-
Paramètres
-
<tt>aId</tt> -
L'id de l'extension -
-
Valeur retournée
-

true si l'extension existe avec l'id donné, false dans le cas contraire. -

-

get()

-

Récupère un id -

-
fuelIExtension get(in AString aId)
-
-
Paramètres
-
<tt>aId</tt> -
L'id d'une extension -
-
Valeur retournée
-

Un objet Extension ou vide si aucune extension n'existe avec l'id donné. -

-

Voir également

-


-

-
-
diff --git a/files/fr/fuel/index.html b/files/fr/fuel/index.html deleted file mode 100644 index d1fc8b5399..0000000000 --- a/files/fr/fuel/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: FUEL -slug: FUEL -tags: - - FUEL - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/FUEL ---- -

-

FUEL est une bibliothèque JavaScript conçue pour aider les développeurs à écrire des extensions en utilisant une terminologie et des interfaces qui leurs sont familières. FUEL est une nouveauté de Firefox 3 et sera backporté dans Firefox 2. -

FUEL est destiné à améliorer la productivité des développeurs d'extensions, en minimisant certaines formalités de XPCOM et en ajoutant quelques idées « modernes » de JavaScript. Nous commencerons par les domaines qui apporteront le plus de bénéfices. -

-

Objets

- -


-

-
-
diff --git a/files/fr/fuel/preference/index.html b/files/fr/fuel/preference/index.html deleted file mode 100644 index 875a404956..0000000000 --- a/files/fr/fuel/preference/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Preference -slug: FUEL/Preference -tags: - - FUEL - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/SMILE/smileIWindow ---- -

- -


-

-

Synoptique

- - -
void reset() -
-

Attributs

- - - - - - - - - - - - - - - - -
Attribut -Type -Description -
name -attribut AString en lecture seule -Le nom de la préférence. -
type -attribut AString en lecture seule -Une chaîne représentant le type de préférence (chaîne, booléen ou nombre). -
value -attribut nsIVariant -Récupère/définit la valeur de la préférence. -
locked -attribut boolean -Récupère l'état de la préférence. Mettre true ou false pour bloquer ou débloquer. -
modified -attribut boolean en lecture seule -Vérifie si la préférence a été modifiée par l'utilisateur ou non. -
branch -attribut fuelIPreferenceBranch en lecture seule -La branche des préférences qui contient cette préférence. -
events -attribut fuelIEvents en lecture seule -Les objets événements pour cette préférence. Accepte la valeur : change -
-

Méthodes

-

reset()

-

Réinitialise une préférence à ses valeurs par défaut. -

-
void reset()
-
-
Paramètres
-
Valeur retournée
-


-

-

Voir également

-
-
diff --git a/files/fr/fuel/preferencebranch/index.html b/files/fr/fuel/preferencebranch/index.html deleted file mode 100644 index 511ba6eeb9..0000000000 --- a/files/fr/fuel/preferencebranch/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: PreferenceBranch -slug: FUEL/PreferenceBranch -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/extIPreferenceBranch ---- -

- -


-

-

Synoptique

- - - - - - - - - - -
boolean has(in AString aName) -
fuelIPreference get(in AString aName) -
nsIVariant getValue(in AString aName, in nsIVariant aDefaultValue) -
void setValue(in AString aName, in nsIVariant aValue) -
void reset() -
-

Attributs

- - - - - - - - -
Attribut -Type -Description -
root -attribut AString en lecture seule -Le nom de la branche racine. -
all -attribut nsIVariant en lecture seule -Un tableau de fuelIPreference listant toutes les préférences de la branche. -
events -attribut fuelIEvents en lecture seule -Les objets événements pour les préférences. Accepte la valeur : change -
-

Méthodes

-

has()

-

Vérifie l'existence d'une préférence. -

-
boolean has(in AString aName)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom de la préférence -
-
Valeur retournée
-

true si la préférence existe, false dans le cas contraire -

-

get()

-

Récupère un objet représentant une préférence. -

-
fuelIPreference get(in AString aName)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom de la préférence -
-
Valeur retournée
-

Un objet préférence, ou vide si la préférence n'existe pas -

-

getValue()

-

Récupère la valeur d'une préférence. Retourne une valeur par défaut si la préférence n'existe pas. -

-
nsIVariant getValue(in AString aName, in nsIVariant aDefaultValue)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom de la préférence -
-
Valeur retournée
-

La valeur de la préférence ou la valeur par défaut donnée si la préférence n'existe pas. -

-

setValue()

-

Définit la valeur d'un élément de stockage avec le nom donné. -

-
void setValue(in AString aName, in nsIVariant aValue)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom d'un élément -
-
Valeur retournée
-

reset()

-

Réinitialise toutes les préférences à leur valeur par défaut. -

-
void reset()
-
-
Paramètres
-
Valeur retournée
-

Voir également

-


-

-
-
diff --git a/files/fr/fuel/sessionstorage/index.html b/files/fr/fuel/sessionstorage/index.html deleted file mode 100644 index d0bb29cf59..0000000000 --- a/files/fr/fuel/sessionstorage/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: SessionStorage -slug: FUEL/SessionStorage -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/extISessionStorage ---- -

- -

-

Synoptique

- - - - - - -
boolean has(in AString aName) -
void set(in AString aName, in nsIVariant aValue) -
nsIVariant get(in AString aName, in nsIVariant aDefaultValue) -
-

Attributs

- - - - -
Attribut -Type -Description -
events -attribut fuelIEvents en lecture seule -Les objets événements pour le stockage. Accepte la valeur : change -
-

Méthodes

-

has()

-

Détermine si un élément de stockage portant le nom donné existe. -

-
boolean has(in AString aName)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom de l'élément -
-
Valeur retournée
-

true si un élément avec le nom donné existe, false dans le cas contraire. -

-

set()

-

Définit la valeur d'un élément de stockage avec le nom donné. -

-
void set(in AString aName, in nsIVariant aValue)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom de l'élément -
-
Valeur retournée
-

get()

-

Récupère la valeur de l'élément de stockage avec le nom donné. Retourne une valeur par défaut si cet élément n'existe pas. -

-
nsIVariant get(in AString aName, in nsIVariant aDefaultValue)
-
-
Paramètres
-
<tt>aName</tt> -
Le nom d'un élément -
-
Valeur retournée
-

Valeur d'un élément ou la valeur par défaut si aucun élément portant le nom donné n'existe. -

-

Voir également

-


-

-
-
diff --git a/files/fr/fuel/window/devicelight/index.html b/files/fr/fuel/window/devicelight/index.html deleted file mode 100644 index b324542eb6..0000000000 --- a/files/fr/fuel/window/devicelight/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: devicelight -slug: FUEL/Window/devicelight -translation_of: Archive/Web/devicelight_event ---- -

L'événement devicelight se déclenche lorsque de nouvelles données sont disponibles à partir d'un capteur de lumière.

- -

Informations générales

- -
-
Spécification
-
Sensor
-
Interface
-
SensorCallback
-
Propagation
-
Non
-
Annulable
-
Non
-
CIble
-
DefaultView (window)
-
Action par défaut
-
Aucune
-
- -

Propriétés

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyTypeDescription
target {{readonlyInline}}EventTargetThe event target (the topmost target in the DOM tree).
type {{readonlyInline}}DOMStringThe type of event.
bubbles {{readonlyInline}}BooleanWhether the event normally bubbles or not.
cancelable {{readonlyInline}}BooleanWhether the event is cancellable or not.
value {{readonlyInline}}Double (float)The sensor data for ambient light in Lux.
min {{readonlyInline}}Double (float)The minimum value in the range the sensor detects (if available, 0 otherwise).
max {{readonlyInline}}Double (float)The maximum value in the range the sensor detects (if available, 0 otherwise).
diff --git a/files/fr/fuel/window/index.html b/files/fr/fuel/window/index.html deleted file mode 100644 index 5ab75e57f3..0000000000 --- a/files/fr/fuel/window/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Window -slug: FUEL/Window -tags: - - FUEL - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/Toolkit_API/FUEL/fuelIWindow ---- -

- -


-

-

Synoptique

- - -
fuelIBrowserTab open(in nsIURI aURI) -
-

Attributs

- - - - - - - - -
Attribut -Type -Description -
tabs -attribut nsIVariant en lecture seule -Une liste des onglets ouverts dans la fenêtre du navigateur. -
activeTab -attribut fuelIBrowserTab en lecture seule -L'onglet actuellement actif dans la fenêtre du navigateur. -
events -attribut fuelIEvents en lecture seule -Les objets événements pour la fenêtre du navigateur. Accepte les valeurs : TabOpen, TabClose, TabMove, TabSelect -
-

Méthodes

-

open()

-

Ouvre un nouvel onglet pointant vers l'URI spécifiée. -

-
fuelIBrowserTab open(in nsIURI aURI)
-
-
Paramètres
-
<tt>aURI</tt> -
L'URI à ouvrir dans l'onglet -
-
Valeur retournée
-

Voir également

-


-

-
-
diff --git a/files/fr/git/index.html b/files/fr/git/index.html deleted file mode 100644 index 79b9d96826..0000000000 --- a/files/fr/git/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Git -slug: Git -tags: - - Guide - - Outils - - git -translation_of: Mozilla/Git ---- -

L'actuel mirroir officiel git du code Firefox (aussi connu sous le nom de "gecko" ou "mozilla-central") peut être trouvé à https://github.com/mozilla/gecko-dev. Ce répertoire contient toutes les branches faisant partie des versions en cours, incluant les branches mozilla-central (nightly), mozilla-aurora (édition pour les développeurs), mozilla-beta ainsi que mozilla-release.

- -

Si vous voulez travailler sur d'autres branches de Mozilla, https://github.com/mozilla/gecko-projects peut vous aider.  Ce répertoire contient les branches du projet (aussi appelé "twings") dont l'utilisation a varié.

- -

Si vous préférez utiliser git directement avec les répertoires hg cette page vous guidera. De cette façon vous pourrez pousser directement votre travail du répertoire git au répertoire mercurial.

- -

Un etherpad est également à disposition pour vous aider à utiliser git avec mozilla-central.

- -

Pour les références historiques, le reste de la page décrit comment maintenir votre propre mirroir mais tout le monde devrait être capable d'utiliser l'URL ci-dessus.

- -

Maintenir votre propre mirroir Mercurial de mozilla-central

- -

Le reste de la page est uniquement pour les références historiques  - la plupart des gens peuvent l'ignorer et le contenu et sûrement déjà obsolète - reportez vous aux informations ci-dessus.

- -

Le mirroir Mercurial le plus utilisé est disponible ici.

- -

Ce repository est synchronisé avec hg-git. La git-mapfile est disponible ici-même.

- -

Bootstrapper un repo hg-git

- -

hg clone http://hg.mozilla.org/mozilla-central mozilla-central-hg-git

- -

cd mozilla-central-hg-git/.hg

- -

wget http://www.bluishcoder.co.nz/git-mapfile.bz2

- -

bunzip2 git-mapfile.bz2

- -

git clone git://github.com/doublec/mozilla-central.git --bare git

- -

cd ../

- -

# synchroniser le reste

- -

hg gexport

- -

 Autre

- -

 -R peut-être utilisé pour spécifier un repo autre que le plus proche .hg
- ex : hg -R ../mozilla-central-hg-git push .

- -

Ce qui serait utile de pouvoir faire

- -

utiliser try-server

diff --git a/files/fr/guide_de_migration_vers_places/index.html b/files/fr/guide_de_migration_vers_places/index.html deleted file mode 100644 index d6585547a9..0000000000 --- a/files/fr/guide_de_migration_vers_places/index.html +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: Guide de migration vers Places -slug: Guide_de_migration_vers_Places -tags: - - Développement_de_Mozilla - - Extensions - - NeedsContent - - Places -translation_of: Mozilla/Tech/Places/Places_Developer_Guide ---- -

-Ce document est destiné aux développeurs d'extensions et d'applications utilisant les API de marque-pages et d'historique dans Firefox 2 ou précédents, et migrent leur code vers Firefox 3. -

-

Aperçu

-

Places est un ensemble d'API pour gérer l'historique de navigation et les métadonnées d'URI. Cela regroupe l'historique, les marque-pages, les étiquettes, favicônes et annotations. Deux modèles d'identité existent dans le système : les URI et les identifiants uniques pour les éléments du système de marque-pages. Certaines de ces API sont basées sur les URI, d'autres utilisent des id. La signature de l'API et son contexte suffisent généralement à indiquer ce qui doit être fourni. -

-

Marque-pages

-

Le service de marque-pages du toolkit est nsINavBookmarksService : -

-
var bookmarks = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
-                getService(Ci.nsINavBookmarksService);
-
-

Le magasin de données des marque-pages est hiérarchique, modélisant les dossiers et leur contenu. Certains dossiers significatifs sont disponibles comme attributs de nsINavBookmarksService. -

- -

Note : ce document couvre le service Places du toolkit. Cependant, les développeurs de Firefox peuvent tirer profit de certaines API supplémentaires qui sont spécifiques au navigateur : -

- -

Création

-

Création d'un marque-page -

-
// crée un nsIURI pour l'URL à marquer.
-var bookmarkURI = Cc["@mozilla.org/network/io-service;1"].
-                  getService(Ci.nsIIOService).
-                  newURI("http://www.mozilla.com", null, null);
-
-var bookmarkId = bookmarks.insertBookmark(
-  bookmarks.toolbarFolder, // L'id du dossier dans lequel le marque-page sera placé.
-  bookmarkURI,             // L'URI du marque-page — un objet nsIURI.
-  bookmarks.DEFAULT_INDEX, // La position du marque-page dans son dossier parent.
-  "mon titre");    // Le titre du marque-page.
-
-

Création d'un dossier -

-
var folderId = bookmarks.createFolder(
-  bookmarks.toolbarFolder, // L'id du dossier dans lequel le nouveau dossier sera placé.
-  "mon dossier",           // Le titre du nouveau dossier .
-  bookmarks.DEFAULT_INDEX);    // La position du nouveau dossier dans son dossier parent.
-
-

Création d'un séparateur -

-
var separatorId = bookmarks.insertSeparator(
-  bookmarks.toolbarFolder, //L'id du dossier dans lequel le séparateur sera placé.
-  bookmarks.DEFAULT_INDEX);    // La position du séparateur dans son dossier parent.
-
-

Création d'un marque-page dynamique -

-
var IOService = Cc["@mozilla.org/network/io-service;1"].
-                  getService(Ci.nsIIOService);
-
-var siteURI = IOService.newURI("http://www.mozilla.com", null, null);
-var feedURI = IOService.newURI("http://www.mozilla.org/news.rdf", null, null);
-
-var livemarks = Cc["@mozilla.org/browser/livemark-service;2"].
-                getService(Ci.nsILivemarkService);
-
-livemarks.createLivemark(bookmarks.toolbarFolder, // L'id du dossier dans lequel le marque-page dynamique sera placé.
-  "Mon titre",        // Le titre du marque-page dynamique
-  siteURI,                    // L'URI du site. Un objet nsIURI.
-  feedURI,                    // L'URI du flux. Un objet nsIURI.
-  bookmarks.DEFAULT_INDEX);   // La position du marque-page dynamique dans son dossier parent.
-
-

Lecture

-

Propriétés d'un élément

-

Pour tous les éléments : -

- -

Pour les marque-pages : -

- -

Pour les dossiers : -

- -

Contenu d'un dossier

-

Les requêtes dans Places sont exécutées au travers du service d'historique principal. L'exemple ci-dessous montre comment parcourir le contenu d'un dossier de marque-pages, et comment accéder aux propriétés des éléments eux-mêmes. -

-
var history = Cc["@mozilla.org/browser/nav-history-service;1"].
-              getService(Ci.nsINavHistoryService);
-var query = history.getNewQuery();
-query.setFolders([myFolderId], 1);
-
-var result = history.executeQuery(query, history.getNewQueryOptions());
-
-// La propriété root d'un résultat de requête est un objet représentant le dossier spécifié plus haut.
-var folderNode = result.root;
-
-// Ouverture du dossier et parcours de son contenu.
-folderNode.containerOpen = true;
-for (var i=0; i < folderNode.childCount; ++i) {
-  var childNode = folderNode.getChild(i);
-
-  // Quelques propriétés des éléments.
-  var title = childNode.title;
-  var id = childNode.itemId;
-  var type = childNode.type;
-
-  // Quelques actions spécifiques selon le type.
-  if (type == Ci.nsINavHistoryResultNode.RESULT_TYPE_URI) {
-
-    var uri = childNode.uri;
-
-  }
-  else if (type == Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER) {
-
-    childNode.QueryInterface(Ci.nsINavHistoryContainerResultNode);
-    childNode.containerOpen = true;
-    // à présent vous pouvez parcourir les enfants d'un sous-dossier
-
-  }
-}
-
-

Les autres types de nœuds disponibles sont documentés dans l'IDL. -

-

Recherche

-

Mise à jour

-

Pour tous les éléments : -

- -

Pour les marque-pages : -

- -

Suppression

- -

Observation

-

Import/export HTML

-

Sauvegarde/restauration

-

Nouveautés

- -

Historique

-

Ajout

-

Interrogation

-

Observation

-

Nouveautés

-
-
diff --git "a/files/fr/g\303\251n\303\251ration_de_guid/index.html" "b/files/fr/g\303\251n\303\251ration_de_guid/index.html" deleted file mode 100644 index 19360bd4af..0000000000 --- "a/files/fr/g\303\251n\303\251ration_de_guid/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Génération de GUID -slug: Génération_de_GUID -tags: - - Extensions - - NeedsUpdate - - Tools - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Generating_GUIDs ---- -

Les identificateurs GUID sont utilisés dans le code de Mozilla pour identifier différents types d'entités, dont les Interfaces XPCOM, les composants et modules complémentaires comme les extensions et les thèmes, bien que les modules complémentaires puissent aussi être identifiés avec des ID de la forme nomextension@organisation.tld depuis Firefox 1.5.

- -

Un certain nombre d'outils permettant de générer des GUID sont listés ici.

- -

Outils en ligne

- -

Vous pouvez créer un GUID depuis la page de Shailesh N. Humbad Generate GUID Online. Un autre générateur se trouve sur la page de la famille Kruithof — UUID (GUID) Generator on the WEB. Enfin, il est généralement possible d'obtenir un GUID d'un des bots (comme botbot) sur le canal IRC #mozilla.

- -

Windows

- -

Les utilisateurs de Windows peuvent utiliser l'outil GuidGen de Microsoft pour obtenir un GUID. (Cet outil fait également partie de Microsoft Visual C++)

- -

Linux

- -

Utilisez /usr/bin/uuidgen. Ce programme peut être trouvé dans le package libuuid1 (Debian).

- -

Perl

- -

Les jkeiser's Mozilla tools fournissent un générateur d'UUID avec des formats de sortie de style C++ et de style IDL.

- -

nsIUUIDGenerator

- -

Un UUID peut être généré depuis du code privilégié de Mozilla à l'aide de nsIUUIDGenerator. Consultez la page liée pour plus de détails.

diff --git a/files/fr/how_to_pass_an_xpcom_object_to_a_new_window/index.html b/files/fr/how_to_pass_an_xpcom_object_to_a_new_window/index.html deleted file mode 100644 index f879d5af67..0000000000 --- a/files/fr/how_to_pass_an_xpcom_object_to_a_new_window/index.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: How To Pass an XPCOM Object to a New Window -slug: How_To_Pass_an_XPCOM_Object_to_a_New_Window -translation_of: Mozilla/Tech/XPCOM/How_to_pass_an_XPCOM_object_to_a_new_window ---- -
-

Un exemple plus utile est disponible dans le code sourcee: toolkit/components/help/content/contextHelp.js#61

-
- -

Si vous voulez être en mesure d'appeler des fonctions au sein d'un objet XPCOM à partir du code d'une fenêtre XUL, vous pouvez le faire si vous passez l'objet XPCOM comme un des arguments de la méthode de création de la fenêtre Windows.

- -

Par exemple

- -
var ww =
-      Components.classes["@mozilla.org/embedcomp/window-watcher;1"].
-            getService(Components.interfaces.nsIWindowWatcher);
-
-var win = ww.openWindow(null,
-      "chrome://myextension/content/debug.xul",
-      "debug history", "chrome,centerscreen,resizable", myObject);
-
- -

Notez dans cet exemple que myObject à la méthode openWindow(); vous pouvez passer tous objets XPCOM (ou toute autre valeur, en l'occurence) par ce moyen. Pour accéder à l'objet XPCOM à partir du code de la fenêtre, vous pouvez accéder au tableau des arguments de la fenêtre comme illustré dans l'exemple ci-dessous

- -
Components.utils.reportError(String(window.arguments[0]));
-
- -

This will produce output similar to "[xpconnect wrapped nsIMyXPCOMObject]".

diff --git "a/files/fr/images_png_anim\303\251es/index.html" "b/files/fr/images_png_anim\303\251es/index.html" deleted file mode 100644 index 1f78377581..0000000000 --- "a/files/fr/images_png_anim\303\251es/index.html" +++ /dev/null @@ -1,545 +0,0 @@ ---- -title: Images PNG animées -slug: Images_PNG_animées -tags: - - Firefox 3 -translation_of: Mozilla/Tech/APNG ---- -

- -

Auteurs

- -

La spécification APNG a été rédigée par :

- - - -

Aperçu

- -

APNG est une extension du format Portable Network Graphics (PNG), qui ajoute la gestion des images animées. Elle est prévue pour remplacer les images animées simples qui utilisaient traditionnellement le format GIF, tout en ajoutant la gestion des images 24-bits et la transparence 8-bits. APNG est une alternative plus simple à MNG, fournissant une spécification pour la plupart des utilisations d'images animées sur Internet.

- -

APNG est rétrocompatible avec PNG ; tout décodeur PNG devrait être capable d'ignorer les bouts d'informations spécifiques à APNG et d'afficher une image statique.

- -

Terminologie

- -

L'image par défaut est l'image décrite par les blocs standards « IDAT », et est l'image qui sera affichée par les décodeurs ne gérant pas APNG.

- -

Le canevas est la zone sur le dispositif de sortie où les trames doivent être affichées. Le contenu du canevas n'est pas nécessairement accessible au décodeur. Selon la spécification PNG, si un bloc « bKGD » existe il peut être utilisé pour remplir le canevas si aucun autre fond préférable n'existe.

- -

Le tampon de sortie est un tableau de pixels dont les dimensions sont définies par les paramètres width et height du bloc « IHDR » du fichier PNG. Conceptuellement, chaque trame est construite dans le tampon de sortie avant d'être retranscrite sur le canevas. Le contenu du tampon de sortie est accessible par le décodeur. Les angles du canevas correspondent à ceux du tampon de sortie.

- -

Noir totalement transparent signifie que les composantes rouge, verte, bleue et alpha sont toutes mises à zéro.

- -

Dans les descriptions de blocs, une valeur unsigned int sera un entier non signé sur 32 bits dont les octets sont dans l'ordre du réseau, limité à l'intervalle 0 à (2^31)-1 ; une valeur unsigned short sera un entier non signé sur 16 bits dont les octets sont dans l'ordre du réseau, limité à l'intervalle 0 à (2^16)-1 ; et une valeur byte sera un entier non signé sur 8 bits dans l'intervalle 0 à (2^8)-1.

- -

Gestion d'erreurs

- -

APNG est conçu pour permettre l'affichage incrémental de trames avant que l'image entière ait été lue. Ceci implique que certaines erreurs peuvent ne pas être détectées avant le démarrage partiel de l'animation. Dès qu'une erreur est rencontrée, il est vivement recommandé que les décodeurs suppriment les trames qui suivent, arrêtent l'animation et reviennent à l'affichage de l'image par défaut. Un décodeur qui détecte une erreur avant que l'animation ne démarre doit afficher directement l'image par défaut. Un message d'erreur peut être affiché pour l'utilisateur si nécessaire.

- -

Structure

- -

Un flux APNG est un flux PNG normal tel que défini dans la spécification PNG, avec trois types de blocs supplémentaires décrivant l'animation et contenant les données des trames supplémentaires.

- -

Pour qu'il soit reconnu comme APNG, un bloc « acTL » doit apparaître dans le flux avant tout bloc « IDAT ». La structure « acTL » est décrite plus bas.

- -

Conceptuellement, au début de chaque exécution, le buffer de sortie doit être complètement initialisé à un rectangle noir totalement transparent, avec les dimensions renseignées dans le bloc « IHDR ».

- -

L'image par défaut peut être définie comme la première trame de l'animation par la présence d'un unique bloc « fcTL » avant « IDAT ». Si ce n'est pas le cas, l'image par défaut ne fera pas partie de l'animation.

- -

Les trames suivantes sont encodées dans des blocs « fdAT », qui ont la même structure que les blocs « IDAT » mais précédés d'un numéro de séquence. Les informations de positionnement et d'affichage pour chaque trame sont stockées dans des blocs « fcTL ». La structure complète des blocs « fdAT » et « fcTL » est décrite ci-dessous.

- -

Les limites de l'ensemble de l'animation sont spécifiées par les paramètres width et height du bloc PNG « IHDR », que l'image par défaut fasse partie ou non de l'animation. L'image par défaut doit être complétée par des pixels complètement transparents si de l'espace supplémentaire est nécessaire pour les trames suivantes.

- -

Chaque trame est identique à chaque exécution, les applications ne doivent donc pas hésiter à mettre les trames en cache.

- -

Numéros de séquence des blocs

- -

Les blocs « fcTL » et « fdAT » ont un numéro de séquence de 4 octets. Les deux types de blocs partagent la même séquence. Le rôle de ce nombre est de permettre de détecter (et éventuellement corriger) les erreurs de séquence dans un PNG animé, car la spécification PNG n'impose pas d'ordre particulier pour les blocs auxiliaires.

- -

Le premier bloc « fcTL » doit contenir le numéro de séquence 0, et les numéros de séquence dans les autres blocs « fcTL » et « fdAT » doivent être dans l'ordre, sans trous ni doublons.

- -

Le tableau ci-dessous illustre l'utilisation des numéros de séquence pour les images avec plus d'une trame et plus d'un bloc « fdAT ».

- -

Si l'image par défaut est la première trame :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Numéro de séquenceBloc
(aucun)« acTL »
0« fcTL » (première trame)
(aucun)« IDAT » (première trame — utilisée comme image par défaut)
1« fcTL » (deuxième trame)
2« fdAT » (premier « fDAT » pour la deuxième trame)
3« fdAT » (deuxième « fDAT » pour la deuxième trame)
- -

Si l'image par défaut ne fait pas partie de l'animation :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Numéro de séquenceBloc
(aucun)« acTL »
(aucun)« IDAT » (image par défaut)
0« fcTL » (première trame)
1Premier « fdAT » pour la première trame
2Deuxième « fDAT » pour la première trame
- -

Les décodeurs doivent traiter des blocs APNG désordonnés comme une erreur. Les éditeurs connaissant le format APNG devraient les restaurer dans l'ordre correct à l'aide des numéros de séquence.

- -

« acTL » : le bloc de contrôle de l'animation

- -

Le bloc « acTL » est un bloc auxiliaire tel que défini dans la spécification PNG (ancillary chunk). Il doit apparaître avant le premier bloc « IDAT » dans un flux PNG valide.

- -

Le bloc « acTL » contient :

- - - - - - - - - - - - - - - - - - - - - - -
Décalage d'octetsNom du champType de champDescription
0num_framesunsigned intLe nombre de trames dans l'APNG.
4num_playsunsigned intLe nombre de fois que l'animation doit être répétée. 0 indique une répétition infinie.
- -

num_frames indique le nombre total de trames dans l'animation. Ce nombre doit être identique au nombre de blocs « fcTL ». 0 n'est pas une valeur acceptable. 1 est valide pour un APNG d'une seule trame. Si cette valeur n'est pas identique au nombre de trames, il convient de traiter ceci comme une erreur.

- -

num_plays indique le nombre de fois où l'animation doit être jouée ; si c'est 0, l'animation doit jouer indéfiniment. Si la valeur est supérieure à zéro, l'animation doit s'arrêter sur la dernière trame à la fin de la dernière exécution.

- -

« fcTL » : le bloc de contrôle de trame

- -

Le bloc « fcTL » est un bloc auxiliaire tel que défini dans la spécification PNG (ancillary chunk). Il doit apparaître avant les blocs « IDAT » ou « fdAT » de la trame à laquelle il s'applique. En particulier :

- - - -

Exactement un bloc « fcTL » est nécessaire pour chaque trame.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Décalage d'octetsNom du champType de champDescription
0sequence_numberunsigned intNuméro de séquence du bloc d'animation, commençant à 0.
4widthunsigned intLargeur de la trame suivante.
8heightunsigned intHauteur de la trame suivante.
12x_offsetunsigned intPosition X à laquelle afficher la trame suivante.
16y_offsetunsigned intPosition Y à laquelle afficher la trame suivante.
20delay_numunsigned shortNumérateur de la fraction de délai de trame.
22delay_denunsigned shortDénominateur de la fraction de délai de trame.
24dispose_opbyteType de nettoyage de la zone de trame après qu'elle a été rendue.
25blend_opbyteType de rendu de la zone de trame pour cette trame.
- -

La trame doit être rendue à l'intérieur de la région définie par x_offset, y_offset, width et height. Les décalages et les dimensions doivent être positifs et les régions ne peuvent pas s'étendre en dehors de l'image par défaut.

- -

Contraintes sur les régions de trame :

- - - -

Les paramètres delay_num et delay_den forment une fraction indiquant le temps d'affichage de la trame courante, en secondes. Si le dénominateur vaut 0, il sera traité comme s'il valait 100 (c'est-à-dire que delay_num spécifie alors 1/100e de seconde). Si la valeur du numérateur est 0, le décodeur devrait afficher la trame suivante aussi rapidement que possible, même si une limite inférieure raisonnable peut être définie.

- -

Les intervalles de temps devraient être indépendants du temps nécessaire pour décoder et afficher chaque trame, afin que les animations soient exécutées à la même vitesse quelles que soient les performances de l'implémentation du décodeur.

- -

dispose_op spécifie la manière de changer le tampon de sortie à la fin du délai (avant l'affichage de la trame suivante).

- -

Les valeurs acceptables pour dispose_op sont :

- - - - - - - - - - - - - - - - - - - - - - - - -
ValeurConstanteDescription
0APNG_DISPOSE_OP_NONEAucun nettoyage n'est fait sur cette trame avant d'afficher la suivante ; le contenu du tampon de sortie est laissé tel quel.
1APNG_DISPOSE_OP_BACKGROUNDLa région de la trame dans le tampon de sortie est rempli de noir totalement transparent avant d'afficher la trame suivante.
2APNG_DISPOSE_OP_PREVIOUSLa région de la trame dans le tampon de sortie est réinitialisée au contenu précédent avant d'afficher la trame suivante.
- -

Si le premier bloc « fcTL » utilise une valeur dispose_op de APNG_DISPOSE_OP_PREVIOUS, elle devrait être traitée commeAPNG_DISPOSE_OP_BACKGROUND.

- -

blend_op indique si la trame doit être mélangée avec le contenu actuel du tampon de sortie suivant les canaux alpha, ou si elle doit remplacer complètement sa région sur le tampon de sortie.

- -

Les valeurs acceptables pour blend_op sont :

- - - - - - - - - - - - - - - - - - - -
ValeurConstanteDescription
0APNG_BLEND_OP_SOURCEToutes les composantes de couleur de la trame, y compris le canal alpha, écrasent le contenu actuel de la région de la trame sur le tampon de sortie.
1APNG_BLEND_OP_OVERLa trame doit être composée sur le tampon de sortie selon son canal alpha, à l'aide d'une opération OVER simple telle que définie dans la section Alpha Channel Processing de la spécification Extensions to the PNG Specification, Version 1.2.0. Notez que la deuxième variation de l'exemple de code est applicable.
- -

Notez que pour la première trame, les deux modes sont fonctionnellement équivalents puisque le tampon de sortie est vidé au début de chaque exécution.

- -

Le bloc « fcTL » correspondant à l'image par défaut, si elle existe, a les restrictions suivantes :

- - - -

Comme noté précédemment, le tampon de sortie doit être complètement initialisé en noir totalement transparent au début de chaque exécution. Ceci permet de s'assurer que chaque exécution de l'animation sera identique. Les décodeurs peuvent éviter cette étape explicite de nettoyage à condition qu'un résultat identique soit garanti. Par exemple, si l'image par défaut fait partie de l'animation, et utilise une valeur blend_op de APNG_BLEND_OP_SOURCE, le nettoyage n'est pas nécessaire puisque tout le tampon de sortie sera écrasé.

- -

« fdAT » : le bloc de données de trame

- -

Le bloc « fdAT » a la même fonction qu'un bloc « IDAT ». Il en a également la même structure, sauf qu'il est précédé d'un numéro de séquence.

- -

Au moins un bloc « fdAT » est nécessaire pour chaque trame. Le flux de données compressé est alors la concaténation du contenu des champs de données de tous les blocs « fdAT » d'une trame. Lorsqu'il est décompressé, le flux de données est constitué des données complètes des pixels d'une image PNG, incluant l'octet de filtre au début de chaque ligne de parcours, comme dans les données décompressées de tous les blocs « IDAT ». Il utilise les mêmes profondeurs d'octets, type de couleur, méthode de compression, méthode de filtre, méthode d'interlaçage et palette (si applicable) que l'image par défaut.

- - - - - - - - - - - - - - - - - - - - - - -
Décalage d'octetsNom du champType de champDescription
0sequence_numberunsigned intNuméro de séquence du bloc d'animation, à partir de 0.
4frame_dataX bytesDonnées de trame pour cette trame.
- -

Chaque trame hérite de toutes les propriétés spécifiées par tout bloc critique ou auxiliaire avant le premier « IDAT » du fichier, sauf la hauteur et la largeur, qui viennent du bloc « fcTL ».

- -

Si le bloc PNG « pHYs » est présent, les images APNG et leurs valeurs x_offset et y_offset doivent être dimensionnées de la même manière que l'image principale. Conceptuellement, un tel dimensionnement se produit lors de la transposition du tampon de sortie vers le canevas.

- -

Révisions de cette spécification

- -

Depuis 0.1

- - - - - - - - - -

Depuis 0.2

- - - - - - - - - -

Depuis 0.3

- - - - - - - - - - - - - - - - - - - - - -

Depuis 0.4

- - - - - - - - - - - -

Depuis 0.5

- - - - - -

Depuis 0.6

- - - - - - - - - -

Depuis 0.7

- - - - - -

Depuis 0.8

- - - - - -

Depuis 0.9

- - - -

Depuis 0.10

- - - -

Encodeur de test et exemples d'images

- -

Des exemples d'images sont disponibles sur la page de l'implémentation d'APNG à l'adresse http://littlesvr.ca/apng/

- -

Un encodeur (open source) est disponible dans les versions du moteur Gecko à partir de la version 1.9 alpha 4.

- -

Une application (open source) utilisant l'encodeur de Mozilla pour assembler des APNG est disponible à l'adresse http://littlesvr.ca/apng/apngedit.html

- -

Voir également

- - diff --git a/files/fr/installation_de_mercurial/index.html b/files/fr/installation_de_mercurial/index.html deleted file mode 100644 index e89632b3b4..0000000000 --- a/files/fr/installation_de_mercurial/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Installation de Mercurial -slug: Installation_de_Mercurial -tags: - - Développement_de_Mozilla - - Mercurial -translation_of: Mozilla/Mercurial/Installing_Mercurial ---- -

{{ Note("si vous n\'avez pas lu Les bases de Mercurial, faites-le maintenant ou consultez la page Mercurial pour d\'autres ressources.") }}

-

Installation

-

Si vous utilisez apt-get, emerge, port, yast ou yum pour installer des logiciels, faites simplement comme d'habitude. Si cela vous donne une vieille version (inférieure à 1.0 — vérifiez avec hg version), vous pouvez la mettre à jour à l'aide d'easy_install comme suit (nous utiliserons apt-get dans cet exemple) :

-
sudo apt-get install python-setuptools python-dev build-essential
-sudo easy_install -U mercurial
-
-

Autrement, les paquets binaires de Mercurial sont pour vous. Consultez également {{ interwiki('wikimo', 'Mercurial_on_Windows', 'wikimo:Mercurial on Windows') }} (en anglais).

-

Programme de fusion

-

Après l'installation, choisissez un programme de fusion (merge). Cela doit être fait directement, sinon Mercurial en choisira un pour vous et il apparaîtra au moment le plus inattendu.

-

Il est raisonnable de définir ui.merge=internal:merge dans le fichier de configuration de Mercurial (voir plus bas), Mercurial essaiera alors de fusionner les modifications et d'ajouter les marqueurs de conflits (à la manière de CVS) aux fichiers qui n'ont pas pu être fusionnés.

-

Vous pouvez voir la liste des conflits en cherchant les lignes « merging ... failed! » dans la sortie de mise à jour.

-

Configuration

-

Mercurial doit être configuré avant de récupérer le code. Votre fichier de configuration de Mercurial doit au moins contenir les paramètres suivants :

-
[ui]
-username = Votre vrai nom <utilisateur@example.com>
-merge = votre-programme-de-fusion
-
-[diff]
-git = 1
-
-[defaults]
-diff=-p -U 8
-
-

Sous Windows, ces paramètres peuvent être ajoutés à C:\Program Files\Mercurial\Mercurial.ini. Sur les systèmes UNIX et apparentés, ils doivent se trouver dans votre fichier $HOME/.hgrc.

-

Vous pouvez configurer l'éditeur à utiliser pour les messages de soumission à l'aide de l'option editor dans la section {{ mediawiki.external('ui') }} ou en définissant la variable d'environnement EDITOR.

-

{{ languages( { "en": "en/Installing_Mercurial" } ) }}

diff --git "a/files/fr/interfaces/\303\240_propos_des_interfaces_gel\303\251es/index.html" "b/files/fr/interfaces/\303\240_propos_des_interfaces_gel\303\251es/index.html" deleted file mode 100644 index 65374ef691..0000000000 --- "a/files/fr/interfaces/\303\240_propos_des_interfaces_gel\303\251es/index.html" +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: À propos des interfaces gelées -slug: Interfaces/À_propos_des_interfaces_gelées -tags: - - 'Interfaces:Gelées' -translation_of: Interfaces/About_Frozen_Interfaces ---- -

 

-

 

-

Statut de ce document

-

Ce document est un brouillon, et ne doit pas être considéré comme complet.

-

Interfaces et composants XPCOM : Présentation

-

Les applications Mozilla sont écrites comme un ensemble de composants XPCOM qui fournissent les fonctionnalités des applications, et un assortiment de XUL, de DTD et de JavaScript qui fournit l'interface utilisateur (UI).

-

Les composants XPCOM sont dévoilés au monde par l'intermédiaire des interfaces. (À traduire de en:Creating XPCOM Components)

-

Les Interfaces décrivent des portions de fonctionnalités fournies par les composants XPCOM, et sont écrites à l'aide d'un Langage de description d'interface (IDL : Interface Description Language, en anglais). (À traduire de en:Creating XPCOM Components:An Overview of XPCOM#Interfaces)

-

Interface gelées

-

Certaines interface (leurs IDL) ont évoluées en même temps que Mozilla. Cependant cela a provoqué des effets de bords :

-
  1. Vous devez modifier l'implémentation du composant pour être en mesure de rester compatible avec les changements des interfaces.
  2. Les clients utilisant ces composants doivent être modifiés en conséquence.
  3. -
-

Cela ne semble pas être un gros problème, mais avec l'apparition de nouvelles extensions (ou d'autres contributions), les développeurs doivent pouvoir compter sur la stabilité des interfaces qu'ils utilisent dans leurs extensions. Aussi avons nous un mécanisme qui fournit une telle confiance.

-

L'équipe de développement de Mozilla fournit ce mécanisme en déclarant gelée une interface qui n'est plus susceptible d'évoluer. Cela signifie que chacun peut être sûr qu'un interface gelée ne changera plus, ainsi elle peut être utilisée comme on le désire : soit en implémentant un composant fournissant une fonctionnalité, soi en utilisant un composant à l'aide de cette interface.

-

Les interfaces en développement (appelées également interfaces non gelées) sont susceptibles d'êtres modifiées et les développeurs les utilisant, de quelques manières que ce soit, doivent surveiller les changements pour adapter leurs travaux. Heureusement, les interfaces en développement peuvent être gelées sans autres modifications.

-

Mozilla garde une trace de la liste actuelle des interfaces et leur statut.

-

Voir également

-

Interface Freeze Status (en)

-

Interwiki Languages Links

-

{{ languages( { "en": "en/Interfaces/About_Frozen_Interfaces", "ja": "ja/Interfaces/About_Frozen_Interfaces", "pl": "pl/Interfejsy/O_zamro\u017conych_interfejsach" } ) }}

diff --git "a/files/fr/interfaces/\303\240_propos_des_interfaces_scriptables/index.html" "b/files/fr/interfaces/\303\240_propos_des_interfaces_scriptables/index.html" deleted file mode 100644 index 6222a1740b..0000000000 --- "a/files/fr/interfaces/\303\240_propos_des_interfaces_scriptables/index.html" +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: À propos des interfaces scriptables -slug: Interfaces/À_propos_des_interfaces_scriptables -tags: - - Interfaces - - 'Interfaces:Scriptable' - - XPCOM -translation_of: Interfaces/About_Scriptable_Interfaces ---- -

 

- -

Statut de ce document

- -

Il s'agit juste d'un début de document, il ne doit pas être considéré comme complet. La plupart des informations qui y figurent sont basées sur http://www.mozilla.org/scriptable/ et Création de composants XPCOM

- -

Interfaces scriptables

- -

Les interfaces permettent aux composants XPCOM d'exposer leurs fonctionnalités au monde extérieur tout en masquant les détails internes de leur implémentation. Celles-ci sont écrites dans un langage de description d'interfaces.

- -

Lorsqu'une interface est indiquée comme scriptable, cela signifie que les composants exportant cette interface peuvent être référencés au travers de celle-ci depuis des scripts (par exemple JavaScript), et qu'il est possible d'écrire de nouveaux composants implémentant cette interface à l'aide de langages de script.

- -

XPConnect

- -

XPConnect est une technologie permettant aux interfaces scriptables d'être utilisées/implémentées depuis/dans des scripts JavaScript. XPConnect ne gère actuellement pas d'autres langages.

- -

Python

- -

Il existe une extension {{ Source("extensions/python") }} qui fait le pont entre XPCOM et Python, permettant aux interfaces scriptables d'être utilisées/implémentées depuis/dans des scripts Python.

diff --git a/files/fr/introduction_au_shell_javascript/index.html b/files/fr/introduction_au_shell_javascript/index.html deleted file mode 100644 index 7bf010bb3d..0000000000 --- a/files/fr/introduction_au_shell_javascript/index.html +++ /dev/null @@ -1,404 +0,0 @@ ---- -title: Introduction au shell JavaScript -slug: Introduction_au_shell_JavaScript -tags: - - JavaScript - - SpiderMonkey -translation_of: Mozilla/Projects/SpiderMonkey/Introduction_to_the_JavaScript_shell ---- -

Cet article sert d'introduction à l'obtention et à la compilation du shell JavaScript depuis le serveur CVS de Mozilla, en se concentrant particulièrement sur les versions de développement (prerelease) pour des tests ou expérimentations.

- -

En outre, cet article fournit des informations de base sur l'utilisation du shell pour faire des expériences avec du code JavaScript et pour exécuter des programmes JavaScript.

- -

Récupérer et compiler l'interpréteur JavaScript

- -
Note : Vous devez récupérer entièrement le code source de l'interpréteur JavaScript même si vous avez déjà une copie de travail d'un autre projet Mozilla, car certains fichiers sont spécifiques à l'interpréteur et ne se trouvent donc pas dans l'arborescence des fichiers source Mozilla.
- -

Connexion au serveur CVS

- -

Comme lorsque vous souhaitez récupérer les sources d'un autre projet Mozilla depuis CVS, vous devez d'abord vous authentifier auprès du serveur CVS. Pour cela, placez vous en ligne de commande dans le répertoire où vous souhaitez que les fichiers soient récupérés, puis saisissez la commande suivante dans votre terminal :

- -
cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot login
-
- -

Lorsqu'il vous est demandé, saisissez le mot de passe anonymous.

- -

Compilation de la version courante « trunk » de JavaScript

- -

Une fois authentifié auprès du serveur, il faut récupérer le code source depuis le dépôt CVS. Premièrement, vous devez aller dans le répertoire racine de votre copie de travail CVS, ensuite vous devez saisir la commande suivante :

- -
cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -l mozilla/js/src mozilla/js/src/config mozilla/js/src/editline mozilla/js/src/fdlibm
-
- -

Cette commande récupèrera tous les fichiers nécessaires à la compilation de l'interpréteur JavaScript.

- -

Maintenant vous pouvez démarrer la compilation de JavaScript en saisissant les deux commandes suivantes :

- -
cd mozilla/js/src
-make -f Makefile.ref
-
- -

Une fois la compilation terminée, vous devriez avoir un exécutable nommé js dans un répertoire dont le nom est dépendant du système d'exploitation utilisé pour la compilation. Par exemple, sur mac OS X, l'exécutable se situe dans Darwin_DBG.OBJ/js.

- -

À partir de maintenant, vous êtes prêt à exécuter et tester l'interpréteur.

- -

Compilation d'une version spécifique « branch » de JavaScript

- -

Si vous voulez tester une version particulière de JavaScript, vous pouvez le faire facilement en ajoutant -r nom_de_la_branche à la ligne de commande qui permet la récupération des fichiers sur le serveur CVS.

- -

Suivez les mêmes étapes que précédemment, mais lors de la récupération des fichiers, changez la ligne cvs co... par :

- -
cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -l -rnom_de_la_branche mozilla/js/src mozilla/js/src/config mozilla/js/src/editline mozilla/js/src/fdlibm
-
- -

Remplaceznom_de_la_branche par le nom de la branche que vous voulez récupérer. Par exemple, pour récupérer la branche 1.7 alpha de JavaScript, Vous devez utiliser JS_1_7_ALPHA_BRANCH.

- -

Ensuite, vous pouvez compiler et exécuter l'interpréteur comme précédemment.

- -

Utilisation de l'interpréteur JavaScript

- -

L'interpréteur propose deux modes de fonctionnement. Vous pouvez l'utiliser comme un interpréteur interactif, dans lequel vous saisissez le code JavaScript dans une invite de commandes et obtenez directement le résultat. Ce qui est très pratique pour tester et expérimenter de nouvelles fonctionnalités. Vous pouvez aussi donner, avec la ligne de commande, un fichier JavaScript à exécuter. Dans ce cas, le programme sera exécuté automatiquement.

- -
Note : étant donné que l'interpréteur JavaScript est utilisé comme environnement de test pour le moteur JavaScript, les options disponibles et les fonctions intégrées peuvent changer avec le temps.
- -

Options de la ligne de commandes

- -

Il y a un bon nombre d'options de ligne de commande que vous pouvez spécifier pour contrôler l'interpréteur. Elles sont résumées ci-dessous.

- -
-
-bnombre de branchements
-
Définition du nombre de branchements maximum.
-
-ctaille d'un bloc de la pile
-
Définition de la taille d'un bloc de la pile.
-
-C
-
Demande à l'interpréteur de compiler le programme mais de ne pas l'exécuter. C'est une méthode pratique pour vérifier rapidement la présence d'erreurs de syntaxe dans votre programme sans avoir besoin de l'exécuter.
-
-escript
-
Exécute le script spécifié, qui est une chaîne de caractères littérale contant le code source à exécuter.
-
-fchemin_du_fichier
-
Exécute le programme JavaScript spécifié par le chemin_du_fichier.
-
-i
-
Active le mode interactif.
-
-P
-
Je ne suis pas encore certain du fonctionnement de cette option.
-
-s
-
Active le mode d'avertissement strict.
-
-Staille de la pile
-
Définition de la taille maximale de la pile.
-
-vversion
-
Force la version de JavaScript à la version spécifiée par version (ex : 170 pour JavaScript 1.7).
-
-w
-
Active les messages d'avertissement.
-
-W
-
Désactive les messages d'avertissement.
-
-x
-
Active le mode XML E4X.
-
- -

Utilisation de l'interpréteur

- -

Si vous voulez exécuter l'interpréteur en mode interactif, vous pouvez utiliser simplement la commande:

- -
js
-
- -

Si vous voulez exécuter le code JavaScript contenu dans le fichier foo.js, vous pouvez utiliser cette commande :

- -
js -f foo.js
-
- -

Pour exécuter foo.js puis passer l'interpréteur en mode interactif, faites ceci :

- -
js -f foo.js -f -
-
- -
Utilisation de l'interpréteur en mode interactif
- -

En mode interactif, vous pouvez saisir du code JavaScript à la main pour créer des objets et des fonctions, mais aussi des tests conditionnels. Cet un moyen pratique pour tester vos idées et, plus important pour les développeurs du moteur JavaScript, de tester les nouvelles fonctionnalités du langage.

- -

Fonctions intégrées

- -

Pour proposer un interpréteur JavaScript le plus utile possible, il y a des fonctions intégrées qui vous sont proposées et que vous pouvez utiliser à partir de vos programmes JavaScript ou en mode interactif.

- -
build()
- -

Renvoie la date et l'heure de compilation de l'interpréteur JavaScript.

- -
clear([object])
- -

Efface les propriétés de l'objet spécifié. Appeler clear() sans paramètres efface tout, ainsi vous pouvez démarrer dans un état connu.

- -
Note : clear() sans paramètre nettoie vraiment tout. Cela inclut toutes les fonctions intégrées.
- -
clone(fonction, [portée])
- -

Duplique l'objet fonction spécifié. Si la variable portée n'est pas spécifiée, le parent du nouvel objet est le même que l'objet original. Autrement, le nouvel objet est placé dans la même portée que l'objet spécifié par portée.

- -
dis([fonction])
- -

Désassemble le code binaire JavaScript pour le programme entier, ou pour la fonction spécifiée.

- -

Par exemple, si vous saisissez la fonction JavaScript suivante :

- -
function test() {
-  var i = 3;
-  print(i+2);
-}
-
- -

Puis exécutez la commande dis(test);, vous aurez la sortie suivante :

- -
main:
-00000:  uint16 3
-00003:  setvar 0
-00006:  pop
-00007:  name "print"
-00010:  pushobj
-00011:  getvar 0
-00014:  uint16 2
-00017:  add
-00018:  call 1
-00021:  pop
-00022:  stop
-
-Source notes:
-  0:     0 [   0] newline
-  1:     3 [   3] decl     offset 0
-  2:     7 [   4] newline
-  3:    18 [  11] xdelta
-  4:    18 [   0] pcbase   offset 11
- -
dissrc([fonction])
- -

Désassemble le code binaire JavaScript du programme complet, ou de la fonction spécifiée, en affichant le code source. Cette fonction fonctionne seulement avec des programmes exécutés à partir de fichiers, aussi bien en utilisant le commutateur -t au lancement de l'interpréteur qu'en utilisant la fonction load().

- -

Si votre programme contient une fonction, unTraitement(), comme ceci :

- -
function unTraitement(entrée) {
-	print("Entrez un nombre : ");
-	var n1 = readline();
-	print("Entrez en autre : ");
-	var n2 = readline();
-
-	print("Vous avez entré " + n1 + " et " + n2 + "\n");
-}
-
- -

l'appel suivant dissrc(unTraitement) devrait donner le résultat suivant :

- -
;-------------------------  10:         print("Entrez un nombre : ");
-00000:  10  name "print"
-00003:  10  pushobj
-00004:  10  string "Entrez un nombre : "
-00007:  10  call 1
-00010:  10  pop
-;-------------------------  11:         var n1 = readline();
-00011:  11  name "readline"
-00014:  11  pushobj
-00015:  11  call 0
-00018:  11  setvar 0
-00021:  11  pop
-;-------------------------  12:         print("Entrez en un autre : ");
-00022:  12  name "print"
-00025:  12  pushobj
-00026:  12  string "Entrez en un autre : "
-00029:  12  call 1
-00032:  12  pop
-;-------------------------  13:         var n2 = readline();
-00033:  13  name "readline"
-00036:  13  pushobj
-00037:  13  call 0
-00040:  13  setvar 1
-00043:  13  pop
-;-------------------------  14:
-;-------------------------  15:         print("Vous avez entré " + n1 + " et " + n2 + "\n");
-00044:  15  name "print"
-00047:  15  pushobj
-00048:  15  string "Vous avez entré "
-00051:  15  getvar 0
-00054:  15  add
-00055:  15  string " et "
-00058:  15  add
-00059:  15  getvar 1
-00062:  15  add
-00063:  15  string "\\n"
-00066:  15  add
-00067:  15  call 1
-00070:  15  pop
-00071:  15  stop
-
- -
evalcx(chaine[, objet])
- -

Évalue le code JavaScript contenu dans chaîne. Si objet est spécifié, le code est exécuté dans cet objet, en le considérant comme un bac à sable.

- -

Si chaîne est vide et que 'objet n'est pas spécifié, evalcx() renvoie un nouvel objet contenant les classes standard.

- -
Note : evalcx() est utile seulement pour les personnes réalisant un travail en profondeur dans le moteur JavaScript, pour tester des environnements comme evalInSandbox dans l'interpréteur.
- -
gc()
- -

Lance le ramasse-miettes (garbage collector) pour nettoyer la mémoire des objets inutiles.

- -
getpda(objet)
- -

Renvoie les descripteurs de propriétés pour l'objet spécifié.

- -
getslx(objet)
- -

Renvoie l'étendue de l'objet en nombre de lignes de script, qui correspond au nombre de lignes de code source où l'on peut trouver l'objet spécifié en paramètre.

- -
help([commande ...])
- -

Affiche une information concise à propos de la commande spécifiée, ou à propos de toutes les fonctions disponibles si aucune n'est spécifiée.

- -
intern(chaîne)
- -

Intègre la chaîne spécifiée dans la table des atomes. Chaque chaîne de caractères possède un identifiant unique, appelé atome. Ce système permet de faciliter la comparaison entre chaînes de caractères.

- -
Note : Cette fonction est prévue pour être utilisée seulement lors des tests du moteur JavaScript.
- -
line2pc([fonction, ] ligne)
- -

Renvoie la valeur du pointeur d'instruction pour la ligne de code spécifiée. Si fonction est spécifiée, ligne est un offset dans la fonction spécifiée.

- -
load(chemin[chemin])
- -

Charge les fichiers spécifiés en paramètre.

- -
notes([fonction])
- -

Affiche les commentaires de code source pour la fonction spécifiée. Les commentaires contiennent des informations qui permettent de relier le code binaire avec le code source. Cette fonction est utilisée pour décompiler le code, comme lorsque la fonction dissrc() est utilisée.

- -
options([option ...])
- -

Permet de définir ou de récupérer des options. Si vous spécifiez des options en ligne de commandes, les résultats de l'appel des options indiquera celles que vous avez demandées. Il est également possible de passer de nouvelles options à définir.

- -

Si vous lancez l'interpréteur avec la commande js -x, alors la fonction options() retournera xml. Si vous lancez l'interpréteur sans option et que vous voulez activer le mode XML, vous pouvez le faire en utilisant la commande :

- -
options('xml');
-
- -

Les options disponibles sont :

- - - - - - - - - - - - - - - - - - - - - - - - -
Nom de l'optionDescription
strictMode strict activé.
werrorLes avertissements seront traités comme des erreurs.
atlineLorsque atline est activée, les commentaires de la forme //@linenum définissent le nombre de lignes suivantes à num.
xmlMode XML activé.
- -
pc2line(function, [pc])
- -

Renvoie le nombre de lignes du code JavaScript code qui correspondent à la première ligne de la fonction spécifiée. Si vous spécifiez un décalage du compteur du programme dans la fonction, le nombre de ligne de code contenant cet offset sera renvoyé.

- -
print([expression ...])
- -

Évalue l'expression et affiche le résultat sur la sortie standard stdout.

- -
quit()
- -

Quitte l'interpréteur.

- -
readline()
- -

Lit une ligne de texte à partir de l'entrée standard stdin, et la renvoie à l'appelant. Vous pouvez utiliser cette fonction pour créer des programmes interactifs en JavaScript.

- -
seal(objet[, profond])
- -

Scelle l'objet spécifié, ou une arborescence d'objets siprofond est à true. En scellant un objet ou arborescence d'objet, vous désactivez la modification de ces objets.

- -
stats([chaîne ...])
- -

Vide les statistiques. Les options valide sont arena, atom et global.

- - - - - - - - - - - - - - - - - - - - -
OptionDescription
arenaAffiche la table arena.
atomAffiche la table atom.
globalAffiche la table global.
- -

Un arena est un large bloc mémoire depuis lequel le moteur JavaScript alloue des sous-blocs afin d'optimiser les performances ; l'émission d'un grand nombre d'appels malloc() pour chaque bloc individuel est inefficace, aussi le moteur crée des arenas, puis utilise un système de gestion interne de la mémoire pour allouer la mémoire dans chacun des arenas. La table des arena est une liste de tous les arenas alloués par l'interpréteur. stats("arena") vous permet d'inspecter la table pour que vous puissiez comprendre l'utilisation des arenas par un test.

- -

Un atom est un identifieur unique pour une chaîne. Afin d'optimiser les comparaisons entre chaînes, un atome est attribué à chacune d'entre elles. Ces atomes sont stockés dans la table de hachage, qui peut être affichée par la commande stats("atom").

- -

stats("global") affiche la table globale de noms, qui contient les noms et les informations concernant chaque objet en mémoire.

- -
stringsAreUtf8()
- -

Renvoie true si les chaînes de caractères sont codées au format UTF8 ; dans le cas contraire false est renvoyé.

- -
testUtf8(mode)
- -

Exécute des tests UTF-8. Le paramètre mode peut être un nombre entier de 1 à 4.

- -

C'est une commande de déboguage qui lance simplement certaines vérifications sur les chaînes UTF-8, et qui n'est pas d'utilisation courante, à moins de travailler sur le moteur JavaScript lui-même.

- -
throwError()
- -

Lance une erreur depuis la fonction JS_ReportError().

- -
Note : Cette fonction est prévue pour n'être utilisée que lors de tests du moteur JavaScript.
- -
tracing([toggle])
- -

Active ou désactive le mode de traçage. Passez true pour activer le traçage ou false pour le désactiver. Si aucun paramètre n'est spécifié, tracing() renvoie le paramétrage courant.

- -
Astuce : Ceci ne fonctionne qui si vous compilez JavaScript avec JS_THREADED_INTERP désactivé dans le fichier jsinterp.c.
- -
trap([fonction, [pc,]] expression)
- -

Définit une trappe à une endroit spécifique du code JavaScript. Lorsque le code qui se trouve à l'offset spécifié par pc dans la fonction fonction est exécuté, l'expression est évaluée.

- -

C'est un puissant mécanisme de débogage lorsqu'il est utilisé de concert avec line2pc(). Par exemple, si vous voulez afficher un message lorsque la ligne 6 d'une fonction doSomething() est exécutée, vous pouvez utiliser le code suivant :

- -
trap(doSomething, line2pc(test, 6), "print('line 6!\n')");
-
- -
Note : Lorsqu'une trappe est définie, le code correspondant dans le programme est remplacé par un code trap jusqu'à l'utilisation de untrap() qui supprimera la trappe.
- -
untrap(fonction [, pc])
- -

Supprime une trappe dans la fonction spécifiée à l'offset pc. Si pc n'est pas spécifié, la trappe est enlevée du point d'entrée de la fonction.

- -

Cette fonction n'a aucun effet si aucune trappe n'est définie à la position spécifiée.

- -
version([nombre])
- -

La fonction version() vous permet de récupérer ou de spécifier le numéro de version de JavaScript. Cela peut être utile pour avoir accès à des syntaxes spécifiquement disponibles pour certaines versions de JavaScript (par exemple, voir Utilisation de JavaScript 1.7).

- -

Interwiki Language Links

- -

{{ languages( { "en": "en/Introduction_to_the_JavaScript_shell", "ja": "ja/Introduction_to_the_JavaScript_shell" } ) }}

diff --git "a/files/fr/introduction_\303\240_la_cryptographie_\303\240_clef_publique/index.html" "b/files/fr/introduction_\303\240_la_cryptographie_\303\240_clef_publique/index.html" deleted file mode 100644 index ffa18e0573..0000000000 --- "a/files/fr/introduction_\303\240_la_cryptographie_\303\240_clef_publique/index.html" +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Introduction à la cryptographie à clef publique -slug: Introduction_à_la_cryptographie_à_clef_publique -tags: - - Sécurité -translation_of: Archive/Security/Introduction_to_Public-Key_Cryptography ---- -

Introduction

- -

La cryptographie à clef publique ainsi que les standards et les techniques qui s'y rapportent sont à la base des dispositifs de sécurité de nombreux produits Red Hat. Cela comprend : la signature et le chiffrement de messages électroniques, la signature de formulaire, la signature d'objet, les ouvertures de session unique et le protocole SSL (Secure Sockets Layer). Ce document est une introduction aux concepts de base de la cryptographie à clef publique.

- - - -

Pour une présentation de SSL, voir l'article « Introduction à SSL ».

- -
-

Informations sur le document original

- - -
diff --git "a/files/fr/introduction_\303\240_ssl/index.html" "b/files/fr/introduction_\303\240_ssl/index.html" deleted file mode 100644 index 325ec3277b..0000000000 --- "a/files/fr/introduction_\303\240_ssl/index.html" +++ /dev/null @@ -1,253 +0,0 @@ ---- -title: Introduction à SSL -slug: Introduction_à_SSL -tags: - - Sécurité -translation_of: Archive/Security/Introduction_to_SSL ---- -

Introduction

- -

Ce document est une introduction au protocoleSecure Sockets Layer (SSL). SSL a été universellement adopté sur leWorld Wide Web pour authentifier et chiffrer les communications entre clients et serveurs.

- - - -

Le nouveau protocole standard de l'Internet Engineering Task Force (IETF), appeléTransport Layer Security (TLS) est basé sur SSL. Les détails de ce protocole sont disponible dans le documentRequest For Comments (RFC): 2246,The TLS Protocol Version 1.0. Certains produits de Red Hat supportent déjà le TLS, et la plupart des autres produits Red Hat prévoient son support dans leurs futures versions.

- -

Ce document est d'abord destiné aux administrateurs des produits serveurs de Red Hat, mais les informations qu'il contient peuvent être tout aussi utiles aux développeurs d'applications supportant SSL. Ce document suppose que vous connaissez les concepts de base de la cryptographie à clef publique, tels que décrits dans « Introduction à la cryptographie à clef publique ».

- -

Le protocole SSL

- -

LeTransmission Control Protocol/Internet Protocol (TCP/IP) contrôle le transport et le routage des données sur Internet. D'autres protocoles, tels que l'HyperText Transport Protocol (HTTP),Lightweight Directory Access Protocol (LDAP), ouInternet Messaging Access Protocol (IMAP), s'exécutent « par dessus » TCP/IP dans le sens où ils utilisent tous TCP/IP pour permettre des applications typiques telles qu'afficher des pages Web ou faire fonctionner des serveurs de courrier.

- -

Figure 1. Where SSL Runs

- -

Le protocole SSL s'exécute au dessus de TCP/IP, mais en dessous des protocoles applicatifs tels que HTTP ou IMAP. Il utilise TCP/IP au nom des protocoles de haut niveau, et ce faisant, il permet à un serveur gérant SSL de s'authentifier auprès d'un client gérant SSL, il permet au client de s'authentifier auprès du serveur, et permet aux deux ordinateurs d'établir une connexion chiffrée.

- -

Ces fonctions répondent à des soucis fondamentaux concernant les communications sur Internet ou tout autre réseau TCP/IP :

- - - - - - - -

Le protocole SSL inclus deux sous-protocoles : le protocoleSSL record et le protocoleSSL handshake (négociation SSL). Le protocoleSSL record définit le format utilisé pour la transmission des données. Le protocole de négociation SSL utilise le protocoleSSL record pour échanger une série de messages entre un serveur et un client lorsqu'ils débutent une connexion SSL. Cet échange de messages est destiné à faciliter les actions suivantes :

- - - -

Pour plus d'informations à propos du processus de négociation, voir la section « La négociation SSL ».

- -

Chiffrements utilisés avec SSL

- -

Le protocole SSL supporte l'utilisation d'un grand nombre d'algorithmes de cryptographie, ou de chiffrement, pour des opérations telles que l'authentification réciproque d'un serveur et d'un client, la transmission de certificat, et l'établissement d'une clef de session. Les clients et les serveurs peuvent supporter différentes suites de chiffrement, c'est à dire différents ensembles d'algorithmes, selon la version de SSL qu'ils intègrent, la politique de l'entreprise concernant le niveau minimum de cryptage acceptable et les restrictions légales sur l'exportation de logiciels employant SSL. Parmi ses fonctions annexes, le protocole de négociation SSL détermine comment serveur et client choisissent l'algorithme de chiffrement utilisé pour s'authentifier l'un à l'autre, pour transmettre des certificats et pour établir les clefs de session.

- -

Les algorithmes d'échange de clef, tels que KEA et RSA-échange de clé, déterminent la manière dont le serveur et le client déterminent les clefs symétriques qu'ils utiliseront pendant la session SSL. Les suites de chiffrement les plus courantes emploient l'échange de clefs RSA.

- -

Les protocoles SSL 2.0 et SSL 3.0 autorisent l'emploi de suites de chiffrement qui se recouvrent partiellement. Les administrateurs peuvent activer ou désactiver chacune des suites supportées sur les clients ou sur les serveurs. Lorsqu'un client et un serveur s'échangent des informations durant la négociation SSL, ils identifient les plus fortes suites de chiffrement autorisées qu'ils ont en commun pour les utiliser lors de la session SSL.

- -
Note : Dans Firefox 2, le support de SSL 2.0 est désactivé par défaut, en faveur de SSL 3.0. Référez-vous à l'article La sécurité dans Firefox 2 pour plus d'informations.
- -

La décision d'une organisation d'activer telle ou telle suite de chiffrement est un compromis entre la sensibilités des données à échanger, la rapidité du chiffrement, et des conditions d'application des règles d'exportation.

- -

Certaines organisations peuvent vouloir désactiver les chiffrement les plus faibles pour empêcher les connexions SSL faiblement cryptées. Cependant, à cause de restrictions imposées par le gouvernement étasunien sur les produits supportant un cryptage de plus de 40-bits, désactiver le support de tous les chiffrements 40-bit restreindra l'accés aux seuls navigateurs provenant des États-Unis (à moins que le serveur n'ait uneGlobal Server ID qui permette aux clients internationaux d'utiliser un cryptage plus fort).

- -

Pour satisfaire le plus d'utilisateurs possible, il est préférable que les administrateurs activent le plus grand nombre de suites de chiffrement possibles. Ainsi, lorsqu'un client et un serveur étatsuniens se connectent, ils choisiront le plus fort chiffrement disponible. Lorsqu'un client ou serveur étatsunien se connecte à un serveur ou un client international, il négociera l'utilisation de chiffrements autorisés par les lois sur l'exportations étasuniennes.

- -

Cependant, comme les chiffrements 40-bits peuvent être cassés assez rapidement, les administrateurs dont les utilisateurs peuvent utiliser de plus forts chiffrements sans déroger aux restrictions sur l'exportation devraient désactiver les chiffrements 40-bits s'ils sont soucieux de l'interception des données par des tiers non autorisés.

- -
Red HatConsole ne supporte pas toutes les suites de chiffrement intégrer par les serveurs et les clients Red Hat. Pour s'assurer que Red Hat Console peut contrôler un serveur SSL, le serveur doit autoriser au moins une des suites de chiffrement pour SSL 3.0 suivantes : - - -
- -

Suites de chiffrement avec clef d'échange RSA

- -

intentionnel Le tableau 1 liste les suites de chiffrement supportées par SSL utilisant un algorithme à clef d'échange RSA. À moins que cela ne soit indiqué, tous les chiffrements listés dans ce tableau sont supportés par les protocoles SSL 2.0 et SSL 3.0. Les suites de chiffrement sont listées du plus haut au plus bas niveau de chiffrement.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 1. Suites de chiffrement supportées par le protocole SSL utilisant un algorithme de clef d'échange RSA
-
Niveau de chiffrement et usage recommandé
-
-
Suites de chiffrement
-
Chiffrement de très haut niveau Autorisé pour un déploiement uniquement aux États-Unis. Ces suites de chiffrement supportent un chiffrement de très haut niveau utilisées par les banques et toutes autres institutions pour chiffrer des données hautement sensibles. Red Hat Console n'intègre pas ces suites de chiffrement.Chiffrement 168-Bit triple DES et message d'authentification SHA-1 Triple DES est le chiffrement de plus haut niveau supporté par SSL, mais il n'est pas aussi rapide que RC4. Triple DES uses a key three times as long as the key for standard DES. À cause de la longueur de la clef, il y a infiniment plus de possibilités de clefs que la plupart des autres chiffrements avoisinant les 3.7 * 1050. Cette suite de chiffrement est compatible avec FIPS. Elle est supportée par SSL 2.0 et SSL 3.0.
Chiffrement de haut niveau Autorisé pour un déploiement uniquement aux États-Unis. Ces suites de chiffrement supportent un chiffrement d'assez haut niveau pour la plupart des besoin commerciaux et gouvernementaux.Chiffrement 128-Bit avec RC4 et message d'authentification MD5 Du fait de leur encryptage 128-bit, les chiffrements RC4 et RC2 sont parmi les plus forts chiffrements après le Triple DES (Data Encryption Standard), avec un encryptage 168-bit. Les encryptages RC4 et RC2 128-bit permettent approximativement 3.4 * 1038 clefs possibles, les rendant très difficiles à briser. Les chiffrements RC4 sont les plus rapide des chiffrements supportés.. Cette suite de chiffrement est supportée par le protocole SSL 3.0 mais pas par SSL 2.0. Red HatConsole ne supporte que la version pour SSL 3.0 de cette suite de chiffrement.
Chiffrement 128-Bit avec RC2 et message d'authentification MD5 Du fait de leur encryptage 128-bit, les chiffrements RC4 et RC2 sont parmi les plus forts chiffrements après le Triple DES (Data Encryption Standard), avec un encryptage 168-bit. Les encryptages RC4 et RC2 128-bit permettent approximativement 3.4 * 1038 clefs possibles, les rendant très difficiles à briser. Les chiffrements RC2 sont plus lents que les RC4. Cette suite de chiffrement est uniquement supportée par le protocole SSL 2.0. Red HatConsole ne la supporte pas
Chiffrement 56-Bit avec DES et message d'authentification SHA-1 DES est plus fort que le cryptage 40-bit, mais moins que le 128-bit. Le cryptage 56-bit DES permet environ 7.2 * 1016 clefs possibles. Cette suite de chiffrement est compatible avec FIPS. Cette suite de chiffrement est supportée par SSL 2.0 et SSL 3.0, excepté que SSL 2.0 utilises le message d'authentification MD5 à la place de SHA-1. Red HatConsole ne supporte pas cette suite de chiffrement.
Chiffrements exportables Cette suite de chiffrement est moins forte que les précédentes, mais elle peut être utilisée dans la plupart des pays (notez que la France les autorise pour SSL mais pas pour S/MIME). Ils fournissent le cryptage de plus haut niveau exportable.1Chiffrement 40-Bit avec RC4 et message d'authentification MD5 L'encryptage 40-bit de RC4 40-bit permet approximativement 1.1 * 1012 (un billion) de clefs possibles. Les chiffrements RC4 sont les plus rapides de tous les chiffrements supportés. Ce chiffrement est supporté par SSL 2.0 et SSL 3.0. Red HatConsole ne supporte que la version pour SSL 3.0 de cette suite de chiffrement.
Chiffrement 40-bit avec RC2 et message d'authentification MD5 L'encryptage RC2 40-bit permet environ 1.1 * 1012 (un billion) de clefs possibles. Les chiffrements RC2 sont plus lents que les RC4. Ce chiffrement est supporté par le protocole SSL 3.0 mais pas par SSL 2.0. Red HatConsole ne supporte que la version pour SSL 3.0 de cette suite de chiffrement.
Chiffrement de bas niveau Cette suite de chiffrement fournit une authentification et une détection de l'altération des données mais pas d'encryptage. Les administrateurs de serveurs doivent être très prudents concernant son activation, du fait que les données transmises avec cette suites de chiffrement ne sont pas encryptées et qu'elles sont potentiellement accessibles à de personnes tierces espionnant le réseau.Pas de chiffrement, uniquement message d'authentification MD5 Cette suite de chiffrement utilise le message d'authentification MD5 pour détecter l'altération des données. Elle est généralement utilisée lorsqu'un client et un serveur n'ont aucun autre chiffrement en commun. Cette suite de chiffrement est supportée par SSL 3.0 mais pas par SSL 2.0.
- - - - - - - -
-

1 Notez que pour les chiffrements RC4 et RC2, le terme "chiffrement 40-bit" signifie que les clefs sont en 128 bits, mais que seuls 40 bits ont une signification cryptographique.

-
- -

Suites de chiffrement de Fortezza

- -

Le tableau 2 liste les suites de chiffrement additionnelles supportées par les produits Red Hat intégrant Fortezza. Pour SSL 3.0 Fortezza est un système de cryptage utilisé par les agences gouvernementales étasuniennes pour la gestion des informations sensibles, mais déclassifiées. Il fournit une implémentation hardware de 2 chiffrements classifiés, développés par le gouvernement fédéral étasunien : Fortezza KEA et SKIPJACK. Les chiffrements Fortezza pour SSL utilise un algorithme par clef d'échange (KEA) plutôt qu'un algorithme de clef d'échange RSA mentionné dans la précédente section, et il utilise les cartes Fortezza et DSA pour l'authentification client.

- - - - - - - - - - - - - - - - - - - - -
Tableau 2. Suites de chiffrement supportées par Red Hat lors de l'utilisation de Fortezza pour SSL 3.0
Niveau de chiffrement et usage recommandéSuites de chiffrement
Suites de chiffrement Fortezza haut niveau Autorisé pour un déploiement uniquement aux États-Unis. Ces suites de chiffrement supportent un chiffrement d'assez haut niveau pour la plupart des besoin commerciaux et gouvernementaux.Red Hat Console n'intègre pas ces suites de chiffrement.Chiffrement 128-Bit avec RC4 et message d'authentification SHA-1 Comme le chiffrement 128-Bit avec RC4 et message d'authentification MD5, ce chiffrement est un des deux plus fort chiffrements après le Triple DES. Il permet approximativement 3.4 * 1038 clefs, le rendant très difficile à briser. Cette suite de chiffrement est supportée par le protocole SSL 3.0 mais pas par SSL 2.0.
Chiffrement 80-bit RC4 avecSKIPJACK et message d'authentification SHA-1 Le chiffrement SKIPJACK est un algorithme cryptographique à clefs symétriques classifié, implémenté dans les matériels compatibles Fortezza. Certaines implémentations de SKIPJACK supportent les clefs tierce partie utilisant leLaw Enforcement Access Field (LEAF). Les plus récentes implémentations ne les supportent pas. Cette suite de chiffrement est supportée par le protocole SSL 3.0 mais pas par SSL 2.0.
Suites de chiffrement Fortezza bas niveau Cette suite de chiffrement fournit l'authentification et la détection des altérations mais pas l'encryptage des données. Les administrateurs de serveurs doivent être très prudents concernant son activation, du fait que les données transmises avec cette suites de chiffrement ne sont pas encryptées et qu'elles sont potentiellement accessibles à de personnes tierces espionnant le réseau. Red HatConsole ne supporte pas ces suites de chiffrement.Pas de chiffrement, message d'authentification SHA-1 uniquement Ce chiffrement utilise le message d'authentification SHA-1 pour détecter les altérations de données. Cette suite de chiffrement est supportées par le protole SSL 3.0 mais pas par SSL 2.0.
- -

La négociation SSL

- -

Le protocole SSL utilise une combinaison de clef publique et de cryptage par clef symétrique. Le cryptage par clef symétrique est plus rapide que le cryptage par clef publique, cependant, le cryptage par clef publique fournit de bien meilleures techniques d'authentification. Une session SSL débute toujours par un échange de messages appelénégociation SSL. La négociation permet au serveur de s'authentifier auprès du client en utilisant les techniques par clef publique, puis autorise le client et le serveur à coopérer pour la création de clefs symétriques utilisées pour le cryptage rapide, le décryptage, et la détection de l'altération des données pendant la session qui suit. Éventuellement, la négociation SSL peut également permettre au client de s'authentifier auprès du serveur.

- -

Les détails programmatiques exacts des messages échangés pendant la négociation SSL fait parti des objectifs de ce document. Cependant, les étapes mises en œuvre peuvent être résumées comme suit (en admettant l'utilisation de suites de chiffrement listées à la section « Suites de chiffrement avec clef d'échange RSA ») :

- -
    -
  1. Le client envoie au serveur sa version de SSL, ses paramètres de chiffrement, des données générées aléatoirement, et toutes autres informations dont le serveur à besoin pour communiquer avec lui en utilisant SSL.
  2. -
  3. Le serveur envoie au client sa version de SSL ses paramètres de chiffrement, des données générées aléatoirement, et toutes autres informations dont le client à besoin pour communiquer avec lui en utilisant SSL. Le serveur envoie également son propre certificat et, si le client demande une ressource serveur nécessitant une authentification client, il demande le certificat client.
  4. -
  5. Le client utilise certaines informations envoyées par le serveur pour l'authentifier (pour plus d'informations, voir la section « Authentification serveur »). Si le serveur ne peut pas être authentifié, l'utilisateur est averti du problème et il est informé que la connexion chiffrée et authentifiée ne peut pas être établie. Si le serveur peut être correctement authentifié, le client procède alors à l'étape 4.
  6. -
  7. En utilisant toutes les données générées pendant la négociation SSL, le client (avec la coopération du serveur, suivant les chiffrements utilisés) crée un code secret préliminaire pour la session, le chiffre avec la clef publique du serveur (obtenue dans le certificat du serveur envoyé à l'étape 2), et envoie le code secret préliminaire chiffré au serveur.
  8. -
  9. Si le serveur requiert une authentification client (une étape optionnelle dans la négociation), le client doit alors signer une autre portion de données limitée à cette négociation et connue par le client et le serveur. Dans ce cas, le client envoie les données chiffrées et son propre certificat au serveur ainsi que le code secret préliminaire chiffré.
  10. -
  11. Si le serveur a requis une authentification client, il tente cette authentification (pour plus d'information, voir la section « Authentification client »). Si le client ne peut être authentifié, alors la session prend fin. Si le client est authentifié avec succès, le serveur utilise sa clef privée pour déchiffrer le code secret préliminaire, puis procéder à une série d'étapes (également exécutée par le client, à partir du même code secret préliminaire) pour générer le code secret principale.
  12. -
  13. Le client et le serveur utilise tout les deux, le code secret principale pour générer desclefs de sessions, qui sont des clefs symétriques utilisées pour chiffrer et déchiffrer les informations échangées pendant la session SSL et pour vérifier leur intégrité, afin de détecter tout changement intervenu dans les données entre leur envoie et leur réception durant la connexion SSL.
  14. -
  15. Le client envoie un message au serveur pour l'informer que les futures données transmises seront chiffrées avec la clef de session. Il envoie alors séparément un message (chiffré) indiquant que la négociation côté client est finie.
  16. -
  17. Le serveur envoie un message au client pour l'informer que les futures données transmises seront chiffrées avec la clef de session. Il envoie alors séparément un message chiffré indiquant que la négociation SSL côté serveur est finie.
  18. -
  19. La négociation SSL est maintenant terminée et la session SSL peut commencer. Le client et le serveur utilisent les clefs de session pour crypter et décrypter les données échangées et pour valider leur intégrité.
  20. -
- -

Avant d'aller plus loin dans la session, les serveurs Red Hat peuvent être configurés pour vérifier que le certificat client est présent dans les données de l'utilisateur dans le répertoire LDAP. Cette option de configuration fournit un moyen sûr de savoir si le certificat client n'a pas été révoqué.

- -

Il est important de retenir que l'authentification du serveur comme celle du client entraîne le cryptage de certaines données à l'aide d'une clef, privée ou publique, et leur décryptage à l'aide de l'autre clef :

- - - -

Les sections ci-dessous fournissent plus de détails concernant les authentifications serveur et client.

- -

Authentification serveur

- -

Les logiciels client SSL de Red Hat requirent toujours une authentification du serveur, ou une validation cryptographique de l'identité du serveur par le client. Comme expliqué à l'étape 2 de « La négociation SSL », le serveur envoie un certificat au client pour s'identifier. Le client utilise le certificat serveur lors de l'étape 3 pour authentifier l'identité que le certificat dit représenter.

- -

Pour authentifier le lien existant entre la clef publique et le serveur identifié par le certificat contenant cette clef, un client SSL doit pouvoir répondre affirmativement aux quatre questions décrites dans la Figure 2. Bien que la quatrième question ne fasse pas techniquement partie du protocole SSL, il est de la responsabilité du client d'y répondre, ce qui donne une plus grande assurance quant à l'identité du serveur et aide ainsi à se protéger contre les attaques de type «Man-in-the-Middle ».

- -

Figure 2. Authentification d'un certificat client

- -

Un client SSL doit valider toutes ces étapes pour authentifier l'identité d'un serveur :

- -
    -
  1. Le certificat est-il valide aujourd'hui ? Le client vérifie la période de validité du certificat serveur. Si la date et l'heure courantes sont en dehors de cette période de validité, le processus d'authentification n'ira pas plus loin. Dans le cas contraire, le client continue le processus d'authentification.
  2. -
  3. L'AC émettrice est-elle une AC de confiance ? Chaque client SSL possède une liste de certificat d'AC de confiance, représentée par la zone ombrée à droite de la figure 3. Cette liste détermine quels certificats serveur le client acceptera. Si le nom distinct (DN ou distinguished name en anglais) de l'AC émettrice correspond au DN d'une AC de confiance présente dans la liste du client, la réponse à la question sera « Oui », et le client passera à l'étape 3. Si l'AC émettrice n'est pas dans la liste, le serveur ne sera pas authentifié à moins que le client ne puisse établir une chaîne de confiance qui se termine sur un certificat se trouvant dans la liste.
  4. -
  5. La clef publique de l'AC émettrice valide-t-elle la signature numérique de l'émetteur ? Le client utilise la clef publique provenant du certificat de l'AC (trouvé dans sa liste d'AC de confiance à l'étape 2) pour valider la signature numérique de l'AC présente dans le certificat serveur qui lui est présenté. Si l'information du certificat serveur a été modifiée depuis qu'elle a été signée par l'AC ou si la clef publique du certificat d'AC ne correspond pas à la clef privée utilisée par l'AC pour signer le certificat serveur, le client n'authentifiera pas l'identité du serveur. Si la signature numérique de l'AC peut être validée, le serveur traite le certificat client comme une « lettre de recommandation » valide de la part de l'AC et poursuit le processus. À ce moment, le client a déterminé que le certificat serveur est valide. Il est désormais de sa responsabilité de procéder à l'étape 4 avant de passer à l'étape 5.
  6. -
  7. Le nom de domaine présent dans le certificat serveur correspond-il au nom de domaine du serveur ? Cette étape confirme que le serveur est bien localisé à l'adresse réseau spécifiée par le nom de domaine du certificat serveur. Bien que cette étape ne fasse pas partie du protocole SSL, elle fournit l'unique protection contre une attaque de type «Man-in-the-midlle ». Les clients doivent effectuer cette étape et ils doivent refuser d'authentifier un serveur ou d'établir une connexion si le nom de domaine ne correspond pas. Si le nom de domaine du serveur correspond à celui présent dans le certificat serveur, alors le client peut procéder à l'étape 5.
  8. -
  9. Le serveur est authentifié. Le client procède à la négociation SSL. Si le client ne parvient pas à l'étape 5, quelle qu'en soit la raison, le serveur identifié par le certificat ne peut pas être authentifié, et l'utilisateur sera averti du problème et informé qu'une connexion chiffrée et authentifiée ne peut pas être établie. Si le serveur requiert une authentification client, il exécutera les étapes décrites dans la section « Authentification client ».
  10. -
- -

Après les étapes décrites ici, le serveur doit réussir à utiliser sa clef privée pour décrypter le code secret préliminaire que le client lui envoie lors de l'étape 4 de « la négociation SSL ». Dans le cas contraire, la session SSL se terminera. Ceci fournit l'assurance que l'identité associée à la clef publique présente dans le certificat serveur est bien celle du serveur auquel le client est connecté.

- -

Attaque du type « Man-in-the-Middle » (l'homme-au-milieu)

- -

Comme suggéré dans l'étape 4 ci-dessus, l'application cliente doit comparer le nom de domaine du serveur, spécifié dans le certificat serveur, avec le nom de domaine du serveur avec lequel le client communique. Cette étape est nécessaire pour protéger la communication contre une attaque de type « Man-in-the-Middle » qui fonctionne comme expliqué ci-dessous.

- -

L'« homme au milieu » est un programme parasite qui intercepte toutes les communications entre le client et le serveur avec lequel il veut établir une connexion SSL. Ce programme intercepte les clefs légitimes qui sont échangées dans les deux sens, leur substitue ses propres clefs, et se fait passer pour le serveur auprès du client, et pour le client auprès du serveur.

- -

Les informations chiffrées échangées au commencement de la négociation SSL sont en réalité chiffrées avec la clef publique ou privée du programme parasite, au lieu de celles du client, ou du serveur. Le programme parasite finit par établir un premier ensemble de clefs de session à utiliser avec le véritable serveur, puis un second ensemble à utiliser avec le client. Ceci permet au programme parasite non seulement de lire toutes les données transmises entre le client et le serveur, mais également de modifier ces données sans que cela ne soit détecté. Il est donc très important pour le client de vérifier que le nom de domaine du certificat serveur correspond effectivement au nom de domaine du serveur avec lequel il tente de communiquer, en plus de vérifier la validité du certificat en procédant aux autres étapes décrites dans la section « Authentification serveur ».

- -

Authentification client

- -

Les serveurs SSL peuvent être configurés pour exiger une authentification client, ou une validation cryptographique de l'identité du client par le serveur. Un serveur ainsi configuré demande l'authentification du client (voir l'étape 6 de « La négociation SSL »), le client envoie au serveur un certificat et des données signées numériquement pour s'authentifier. Le serveur utilise les données signées numériquement pour valider la clef publique dans le certificat et pour authentifier l'identité que le certificat est supposé représenter.

- -

Le protocole SSL requiert que le client crée une signature numérique en créant une empreinte unidirectionnelle générée à partir de données aléatoires pendant la négociation et connues uniquement du client et du serveur. L'empreinte des données est alors chiffrée avec la clef privée correspondant à la clef publique du certificat soumis au serveur.

- -

Pour authentifier le lien entre la clef publique et la personne ou tout autre entité identifiée par le certificat contenant la clef publique, un serveur SSL doit pouvoir répondre affirmativement aux quatre questions représentées sur la Figure 3. Bien que la cinquième question ne fasse pas partie du protocole SSL, les serveurs Red Hat peuvent être configurés pour la poser afin de tirer avantage de l'enregistrement de l'utilisateur dans un répertoire LDAP lors du processus d'authentification.

- -

Figure 3. Authentification et vérification du certificat client

- -

Un serveur SSL suit ces étapes pour authentifier l'identité d'un utilisateur :

- -
    -
  1. La clef publique de l'utilisateur valide-t-elle sa signature numérique ? Le serveur vérifie que la signature numérique de l'utilisateur peut être validée par la clef publique présente dans le certificat. Si oui, le serveur établit que la clef publique certifiée appartenir à John Doe correspond à la clef privée utilisée pour la création de la signature et que les données n'ont pas été corrompues depuis qu'elle a été créée. - -
    Cependant, après cette étape, le lien entre la clef publique et le DN (Nom distinctif) spécifié dans le certificat n'est pas encore établi. Le certificat a pu être créé par quelqu'un essayant d'usurper l'identité de l'utilisateur. Pour valider le lien entre la clef publique et le DN, le serveur doit également compléter les étapes 3 et 4.
    -
  2. -
  3. Le certificat est-il valide aujourd'hui ? Le serveur vérifie la période de validité du certificat. Si la date et l'heure courantes sont en dehors de cette période de validité, le processus d'authentification n'ira pas plus loin. Dans le cas contraire, le serveur continue le processus d'authentification.
  4. -
  5. L'AC (autorité de certification) émettrice est-elle une AC de confiance ? Chaque serveur SSL possède une liste de certificats provenant d'AC de confiance, représenté par la zone grisée sur la droite de la Figure 3. Cette liste détermine les certificats acceptés par le serveur. Si le DN de l'AC émettrice correspond au DN d'une AC de confiance présente dans la liste du serveur, la réponse à la question est « Oui » et le serveur passe à l'étape 4. Si l'AC émettrice n'est pas dans la liste, le client ne sera pas authentifié à moins que le serveur ne puisse établir une chaîne de confiance qui se termine sur un certificat se trouvant dans la liste. Les administrateurs peuvent contrôler, pour leur organisation, quels certificats seront de confiance ou non en contrôlant les listes de certificats d'AC maintenues par les clients et les serveurs.
  6. -
  7. La clef publique de l'AC émettrice correspond-elle à sa signature numérique ? Le serveur utilise la clef publique du certificat d'AC (qui a été trouvé dans la liste des AC de confiance à l'étape 3) pour valider la signature numérique de l'AC dans le certificat présenté. Si l'information contenue dans le certificat a été modifiée depuis qu'il a été signé par l'AC ou si la clef publique incluse avec le certificat ne correspondent pas à la clef privée utilisée par l'AC pour signer le certificat, alors le serveur n'authentifiera pas l'identité de l'utilisateur. Si la signature numérique de l'AC peut être validée, le serveur traite le certificat de l'utilisateur comme « lettre de recommandation » valide de la part de l'AC et continue le processus. À partir d'ici, le protocole SSL autorise le serveur à considérer le client comme authentifié et procède à la connexion telle que décrite à l'étape 6. Les serveurs Red Hat peuvent éventuellement être configurés pour exécuter l'étape 5 avant l'étape 6.
  8. -
  9. Le certificat de l'utilisateur est-il listé dans les entrées LDAP ? Cette étape optionnelle fournit un moyen aux administrateurs système de révoquer un certificat utilisateur même si celui-ci valide toutes les autres étapes du test. LeRed Hat Certificate System peut supprimer automatiquement un certificat révoqué des données concernant l'utilisateur dans le répertoire LDAP. Tous les serveurs configurés pour exécuter cette étape refuseront alors d'authentifier ce certificat ou d'établir une connexion. Si le certificat utilisateur présent dans le répertoire est identique à celui présenté par l'utilisateur lors de la négociation SSL, alors le serveur passera à l'étape 6.
  10. -
  11. Le client authentifié est-il autorisé à accéder aux ressources demandées ? Le serveur vérifie les ressources auxquelles l'utilisateur a le droit d'accéder selon les listes de contrôle d'accès du serveur (ACLs) et il établit la connexion avec les droits d'accès appropriés. Si, pour une raison ou une autre, le serveur ne parvient pas à l'étape 6, l'utilisateur identifié par le certificat ne peut pas être authentifié et il ne sera pas autorisé à accéder aux ressources du serveur qui nécessitent l'authentification.
  12. -
- -
-

Informations sur le document original

- - -
diff --git a/files/fr/ipdl/index.html b/files/fr/ipdl/index.html deleted file mode 100644 index 0c58fbab3d..0000000000 --- a/files/fr/ipdl/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: IPC Protocol Definition Language (IPDL) -slug: IPDL -translation_of: Mozilla/IPDL ---- -

IPDL, raccourci pour "Langue de Définition pour Protocole IPC (Inter-Processus Communication = Communication entre processus)", est un langage spécifique à Mozilla permettant le codage en C++ afin de transmettre des messages entre les processus ou les fils d'exécution (threads) de façon organisée et sécurisée. Tous messages destinés aux implants (plugins) multi-process et onglets dans Firefox sont programmés en langage IPDL.

- - diff --git a/files/fr/ipdl/tutorial/index.html b/files/fr/ipdl/tutorial/index.html deleted file mode 100644 index aba5ce476d..0000000000 --- a/files/fr/ipdl/tutorial/index.html +++ /dev/null @@ -1,690 +0,0 @@ ---- -title: IPDL Tutorial -slug: IPDL/Tutorial -translation_of: Mozilla/IPDL/Tutorial ---- -

IPDL, raccourci pour "Inter-process-communication Protocol  Definition Language (Langage de Définition de Protocole de communication-intra-processus)", est un langage spécifique à Mozilla permettent le codage en C++ afin de transmettre des messages entre les processus ou mappes de façon organisée et sécurisée. Tous messages destnés aux implants(plugins) et onglets multi-processus de Firefox sont programmés en langage IPDL.

- -
Pour experimenter l'ajout d'un nouveau protocole IPDL, voir Creation d'un Nouveau Protocole.
- -

Tous les messages IPDL sont envoyés entre des polarités parents/enfants, appelés acteurs. Un protocole IPDL programme la façon dont les acteurs communiquent: il progrmme les éventuels messages pouvant être envoyés entre les acteurs, ainsi qu'une machine officielle indiquant quand des messages peuvent être envoyés.

- -

L'acteur parent est typiquement le côté le plus permanent de la conversation:

- - - - - - - - - - - - - - - - - - - - - - -
Acteurs Parents/Enfants
 ParentEnfant
Onglets IPCprocessus Chromeprocessus Contenu
Implants/Plugins IPCprocessus ContenuProcessus Implaznt/Plugin
- -

Chaque protocole est programmé dans un fichier séparé. Le compilateur IPDL génère plusieurs en-têtes C++ avec chaque protocole IPDL. Le code généré organise les détails de la couche initiale de communication (prises et conduits), construisant et envoyant les messages, assurant que tous les acteurs respectent leurs particularités, et contrôlant de nombreux cas d'erreur. Le code IPDL suivant definit une interaction très basique dui navigateur et des implants/plugin acteurs:

- -
async protocol PPlugin
-{
-child:
-  Init(nsCString pluginPath);
-  Shutdown();
-
-parent:
-  Ready();
-};
-
- -

Ce code programme le protocole PPlugin. Deux messages peuvent être envoyés du parent à l'enfant, "Init(Initialisation)" et "Shutdown(Fermeture)". Un message peut être envoyé de l'enfant au parent, Ready(Prêt).

- -
Les protocoles IPDL commencent avec la lettre P. Le fichier dans lequel le protocole est programmé doit avoir un nom concnordant, PPlugin.ipdl.
- -

Code C++ Generé

- -

Lorsque PPlugin.ipdl est compilé, les en-têtes PPluginParent.h, et PPluginChild.h seront generés dans le répertoire ipc/ipdl/_ipdlheaders/ de l'arbre ainsi construit. Les classes PPluginParent et PPluginChild sont des classes abstraites qui doivent être sous-classées. Chaque message sortant est une méthode C++ qui peut être appelée. Chaque message entrant est une méthode C++ purement virtuelle qui doit être mise en oeuvre:

- -
class PPluginParent
-{
-public:
-  bool SendInit(const nsCString& pluginPath) {
-    // generated code to send an Init() message
-  }
-
-  bool SendShutdown() {
-    // generated code to send a Shutdown() message
-  }
-
-protected:
-  /**
-   * A subclass of PPluginParent must implement this method to handle the Ready() message.
-   */
-  bool RecvReady() = 0;
-};
-
-class PPluginChild
-{
-protected:
-  bool RecvInit(const nsCString& pluginPath) = 0;
-  bool RecvShutdown() = 0;
-
-public:
-  bool SendReady() {
-    // generated code to send a Ready() message
-  }
-};
-
- -

Ces classes abstraites Parent et Child assurent tous les problèmes de "couche de protocole": tri du data, envoyant et recevant les messages, et vérifiant la sécurité des protocoles. C'est la responsabilité de l'exécuteur de créer des sous-classes afin de réaliser le travail du moment inclus dans chaque message. Voici un exemple-brouillon de comment un développeur de navigateur pourrait utiliser PPluginParent.

- -
class PluginParent : public PPluginParent
-{
-public:
-  PluginParent(const nsCString& pluginPath) {
-    // launch child plugin process
-    SendInit(pluginPath);
-  }
-
-  ~PluginParent() {
-    SendShutdown();
-  }
-
-protected:
-  bool RecvReady() {
-    mObservers.Notify("ready for action");
-  }
-};
-
- -

Voici comment le "PPluginChild" pourrait être utilisé par un développeur C++ dans le processus plugin:

- -
class PluginChild : public PPluginChild
-{
-protected:
-  void RecvInit(const nsCString& pluginPath) {
-    mPluginLibrary = PR_LoadLibrary(pluginPath.get());
-    SendReady();
-  }
-  void RecvShutdown() {
-    PR_UnloadLibrary(mPluginLibrary);
-  }
-
-private:
-  PRLibrary* mPluginLibrary;
-};
-
- -

Démarrer le sous-processus et installer ces acteurs de protocole dans notre "couche de transport" IPC n'est pas le but de ce document. Voir Processus et Connections IPDL pour plus de détails.

- -

Vu que les messages de protocole sont representées comme des méthodes C++, il est facile d'oublier qu'ils sont en fait des messages asynchrones: par defaut, la méthode C++ se commutera immediatement, avant que les message soient rendus à destination.

- -

Les parametres des méthodes Recv* (const nsCString& pluginPath dans l'exemple) font référence à des objets temporaires; aussi, il vaut mieux les copier si vous avez besoin de conserver leurs datas.

- -

Direction

- -

Chaque type de message inclut une "direction." La direction du message indique si le message peut être envoyé de-parent-à-enfant, d'-enfant-à-parent, ou dans les deux sens. Trois mots-clefs servent d'indicateurs de direction; l'enfant a été introduit ci-dessus. Le second est le parent, ce qui veut dire que les messages declarés en tant que parent ne peuvent être qu'envoyés d'-enfant-à-parent. Le troisième est les deux, ce qui veut dire que les messages declarés peuvent être envoyés dans les deux directions. L'exemple artificiel suivant montre comment ces particularités sont utilisées et comment ces particularités changent les classes acteurs abstaites ainsi generées.

- -
// PDirection.ipdl
-async protocol PDirection
-{
-child:
-  Foo();  // can be sent from-parent-to-child
-parent:
-  Bar();  // can be sent from-child-to-parent
-both:
-  Baz();  // can be sent both ways
-};
-
- -
// PDirectionParent.h
-class PDirectionParent
-{
-protected:
-  virtual void RecvBar() = 0;
-  virtual void RecvBaz() = 0;
-
-public:
-  void SendFoo() { /* boilerplate */ }
-  void SendBaz() { /* boilerplate */ }
-};
-
- -
// PDirectionChild.h
-class PDirectionChild
-{
-protected:
-  virtual void RecvFoo() = 0;
-  virtual void RecvBaz() = 0;
-
-public:
-  void SendBar() { /* boilerplate */ }
-  void SendBaz() { /* boilerplate */ }
-};
-
- -

Vous pouvez utiliser l'enfant, le parent, et les deux labels de multiples fois dans un protocole de réalisation. Ils se comportent tels des labels publiques, protégés, et privés dans C++.

- -

Paramètres

- -

Les programations de messages permettent tous nombres of paramètres. Les Paramètres indiquent les données envoyées avec le message. Leurs valeurs sont codées par l'envoyeur et décodées par le receveur. IPDL authorise les caractères inclus et les personnalisations de base, de même que les traits d'union et les flèches.

- -
-
-
-

The built-in simple types include the C++ integer types (bool, char, int, double) and XPCOM string types (nsString, nsCString). IPDL imports these automatically because they are common, and because the base IPC library knows how to serialize and deserialize these types. See ipc/ipdl/ipdl/builtin.py for the most up-to-date list of automatically imported types.

- -

Actors may be passed as parameters. The C++ signature will accept a PProtocolParent* on one side and convert it to a PProtocolChild* on the other.

- -

Custom primitive types. When you need to send data of a type other than one built into IPDL, you can add a using declaration in an IPDL specification.
- A custom serializer and deserializer must be provided by your C++ code.

- -
using mozilla::plugins::NPRemoteEvent;
-
-sync protocol PPluginInstance
-{
-child:
-  HandleEvent(NPRemoteEvent);
-};
-
- -

Unions

- -

IPDL has built-in support for declaring discriminated unions.

- -
using struct mozilla::void_t from "ipc/IPCMessageUtils.h";
-
-union Variant
-{
-  void_t;
-  bool;
-  int;
-  double;
-  nsCString;
-  PPluginScriptableObject;
-};
- -

This union generates a C++ interface which includes the following:

- -
struct Variant
-{
-  enum Type {
-    Tvoid_t, Tbool, Tint, Tdouble, TnsCString, TPPlugionScriptableObject
-  };
-  Type type();
-  void_t& get_void_t();
-  bool& get_bool();
-  int& get_int();
-  double& get_double();
-  nsCString& get_nsCString();
-  PPluginScriptableObject* get_PPluginScriptableObject();
-};
-
- -

aUnion.type() can be used to determine the type of a union received in an IPDL message handler, with the remaining functions granting access to its contents.  To initialize a union, simply assign a valid value to it, as follows:

- -
aVariant = false;
-
- -

Structs

- -

IPDL has built-in support for arbitrary collections of serializable data types.

- -
struct NameValuePair
-{
-  nsCString name;
-  nsCString value;
-};
- -

In implementation code, these structs can be created and used like so:

- -
NameValuePair entry(aString, anotherString);
-foo(entry.name(), entry.value()); // Named accessor functions return references to the members
-
- -

Arrays

- -

IPDL has simple syntax for arrays:

- -
InvokeMethod(nsCString[] args);
- -

 In C++ this is translated into a nsTArray reference:

- -
virtual bool RecvInvokeMethod(nsTArray<nsCString>& args);
-
-
-
-
- -

IPDL's generated data structures can be used in several protocols if they are defined in a separate .ipdlh file. These files must be added to the ipdl.mk makefile like regular .ipdl files, and they use the same syntax (except they cannot declare protocols). To use the structures defined in Foo.ipdlh, include it as follows.

- -
// in a .ipdl file
-include Foo;
-
- -

Synchronous and RPC Messaging

- -

Up until now, all the messages have been asynchronous. The message is sent, and the C++ method returns immediately. But what if we wanted to wait until the message was handled, or get return values from a message?

- -

In IPDL, there are three different semantics:

- -
    -
  1. asynchronous semantics; the sender is not blocked.
  2. -
  3. Wait until the receiver acknowledges that it received the message. We call this synchronous semantics, as the sender blocks until the receiver receives the message and sends back a reply. The message may have return values.
  4. -
  5. rpc semantics are a variation on synchronous semantics, see below.
  6. -
- -

Note that the parent can send messages to the child, and vice versa, so 'sender' and 'receiver' in the above three cases can be either the parent or the child. The messaging semantics applies in the same way to both directions. So, for example, in synchronous semantics from the child to the parent, the child will block until the parent receives the message and the response arrives, and in asynchronous semantics from the parent to the child the parent will not block.

- -

When creating a plugin instance, the browser should block until instance creation is finished, and needs some information returned from the plugin:

- -
protocol PPluginInstance
-{
-child:
-    sync Init() returns (bool windowless, bool ok);
-};
-
- -

We added two new keywords to the Plugin protocol, sync and returns. sync marks a message as being sent synchronously (async is the default if no semantic is specified). The returns keyword marks the beginning of the list of values that are returned in the reply to the message. It is an error to add a returns block to an asynchronous message.

- -

To make the blocking nature more noticeable to programmers, the C++ method names for synchronous and RPC messages are different:

- - - - - - - - - - - - - - - - - - - - - -
 senderreceiver
async/syncSendMessageNameRecvMessageName
rpcCallMessageNameAnswerMessageName
- -

Message Semantics Strength

- -

The above protocol will fail the IPDL type checker. IPDL protocols also have "semantics specifiers", just like messages. A protocol must be declared to have semantics at least as "strong" as its strongest message semantics. Synchronous semantics is called "stronger than" asynchronous. Like message declarations, the default protocol semantics is asynchronous; however, since the Plugin protocol declares a synchronous message, this type rule is violated. The fixed up Plugin protocol is shown below.

- -
sync protocol PPluginInstance
-{
-child:
-    sync Init() returns (bool windowless, bool ok);
-};
- -

The generated C++ code for this method uses outparam pointers for the returned values:

- -
class PPluginInstanceParent
-{
-  ...
-  bool SendInit(bool* windowless, bool* ok) { ... };
-};
-
-class PPluginInstanceChild
-{
-  ...
-  virtual bool RecvInit(bool* windowless, bool* ok) = 0;
-}
- -

RPC semantics

- -

"RPC" stands for "remote procedure call," and this third semantics models procedure call semantics. A quick summary of the difference between RPC and sync semantics is that RPC allows "re-entrant" message handlers: while an actor is blocked waiting for an "answer" to an RPC "call", it can be unblocked to handle a new, incoming RPC call.

- -

In the example protocol below, the child actor offers a "CallMeCallYou()" RPC interface, and the parent offers a "CallYou()" RPC interface. The rpc qualifiers mean that if the parent calls "CallMeCallYou()" on the child actor, then the child actor, while servicing this call, is allowed to call back into the parent actor's "CallYou()" message.

- -
rpc protocol Example {
-child:
-    rpc CallMeCallYou() returns (int rv);
-
-parent:
-    rpc CallYou() returns (int rv);
-};
-
- -

If this were instead a sync protocol, the child actor would not be allowed to call the parent actor's "CallYou()" method while servicing the "CallMeCallYou()" message. (The child actor would be terminated with extreme prejudice.)

- -

Preferred semantics

- -

Use async semantics whenever possible.

- -

Blocking on replies to messages is discouraged. If you absolutely need to block on a reply, use sync semantics very carefully. It is possible to get into trouble with careless uses of synchronous messages; while IPDL can check and/or guarantee that your code does not deadlock, it is easy to cause nasty performance problems by blocking.

- -

Please don't use RPC semantics. RPC semantics exists mainly to support remoting plugins (NPAPI), where we have no choice.

- -
Chrome to content calls (for IPC tabs) must only use async semantics. In order to preserve responsiveness, the chrome process may never block on a content process which may be busy or hung.
- -

Message Delivery Order

- -

Delivery is "in-order", that is, messages are delivered to the receiver in the order that they are sent, regardless of the messages' semantics.  If an actor A sends messages M1 then M2 to actor B, B will be awoken to process M1 then M2.

- -

Subprotocols and Protocol Management

- -

So far we've seen a single protocol, but no real-world situation would have a single protocol in isolation. Instead, protocols are arranged in a managed hierarchy of subprotocols. A sub-protocol is bound to a "manager" which tracks its lifetime and acts as a factory. A protocol hierarchy begins with a single top-level protocol from which all subprotocol actors are eventually created. In Mozilla there are two main top-level protocols: PPluginModule for remote plugins, and PContent for remote tabs.

- -

The following example extends the toplevel plugin protocol to manage plugin instances.

- -
// ----- file PPlugin.ipdl
-
-include protocol PPluginInstance;
-
-rpc protocol PPlugin
-{
-    manages PPluginInstance;
-child:
-    rpc Init(nsCString pluginPath) returns (bool ok);
-    rpc PPluginInstance(nsCString type, nsCString[] args) returns (int rv);
-};
-
- -
// ----- file PPluginInstance.ipdl
-
-include protocol PPlugin;
-
-rpc protocol PPluginInstance
-{
-    manager PPlugin;
-child:
-    rpc __delete__();
-    SetSize(int width, int height);
-};
- -

This example has several new elements: `include protocol` imports another protocol declaration into this file. Note that this is not a preprocessor directive, but a part of the IPDL language. The generated C++ code will have proper #include preprocessor directives for the imported protocols.

- -

The `manages` statement declares that this protocol manages PPluginInstance. The PPlugin protocol must declare constructor and destructor messages for PPluginInstance actors. The `manages` statement also means that PPluginInstance actors are tied to the lifetime of the Plugin actor that creates them: if this PPlugin instance is destroyed, all the PPluginInstances associated with it become invalid or are destroyed as well.

- -

The mandatory constructor and destructor messages (PPluginInstance and __delete__ respectively) exist, confusingly, in separate locations.  The constructor must be located in the managing protocol, while the destructor belongs to the managed subprotocol.  These messages have syntax similar to C++ constructors, but the behavior is different. Constructors and destructors have parameters, direction, semantics, and return values like other IPDL messages. A constructor and destructor message must be declared for each managed protocol.

- -

Each subprotocol must include a `manager` statement.

- -

At the C++ layer, the subclasses in both the child and the parent must implement methods for allocating and deallocating the subprotocol actor. The constructor and destructor are translated into standard C++ methods for messages.

- -

Note: __delete__ is a built-in construct, and is the only IPDL message which does not require an overridden implementation (ie. Recv/Answer__delete__).  However, overridden implementations are encouraged when some action should happen on protocol destruction in lieu of using the DeallocPProtocol function.

- -
class PPluginParent
-{
-  /* Allocate a PPluginInstanceParent when the first form of CallPluginInstanceConstructor is called */
-  virtual PPluginInstanceParent* AllocPPluginInstance(const nsCString& type, const nsTArray<nsCString>& args, int* rv) = 0;
-
-  /* Deallocate the PPluginInstanceParent after PPluginInstanceDestructor is done with it */
-  virtual bool DeallocPPluginInstance(PPluginInstanceParent* actor) = 0;
-
-  /* constructor message */
-  virtual CallPPluginInstanceConstructor(const nsCString& type, const nsTArray<nsCString>& args, int* rv) { /* generated code */ }
-
-  /* alternate form of constructor message: supply your own PPluginInstanceParent* to bypass AllocPPluginInstance */
-  virtual bool CallPPluginInstanceConstructor(PPluginInstanceParent* actor, const nsCString& type, const nsTArray<nsCString>& args, int* rv)
-  { /* generated code */ }
-
-  /* destructor message */
-  virtual bool Call__delete__(PPluginInstanceParent* actor) { /* generated code */ }
-
-  /* Notification that actor deallocation is imminent, IPDL mechanisms are now unusable */
-  virtual void ActorDestroy(ActorDestroyReason why);
-
-  ...
-};
-
-class PPluginChild
-{
-  /* Allocate a PPluginInstanceChild when we receive the PPluginInstance constructor */
-  virtual PPluginInstanceChild* AllocPPluginInstance(const nsCString& type, const nsTArray<nsCString>& args, int* rv) = 0;
-
-  /* Deallocate a PPluginInstanceChild after we handle the PPluginInstance destructor */
-  virtual bool DeallocPPluginInstance(PPluginInstanceChild* actor) = 0;
-
-  /* Answer the constructor message. Implementing this method is optional: it may be possible to answer the message directly in AllocPPluginInstance. */
-  virtual bool AnswerPPluginInstanceConstructor(PPluginInstanceChild* actor, const nsCString& type, const nsTArray<nsCString>& args, int* rv) { }
-
-  /* Answer the desctructor message. */
-  virtual bool Answer__delete__(PPluginInstanceChild* actor) = 0;
-
-  /* Notification that actor deallocation is imminent, IPDL mechanisms are now unusable */
-  virtual void ActorDestroy(ActorDestroyReason why);
-
-  ...
-};
- -

Subprotocol Actor Lifetime

- -

AllocPProtocol and DeallocPProtocol are a matched pair of functions. The typical implementation of these functions uses `new` and `delete`:

- -
class PluginChild : PPluginChild
-{
- virtual PPluginInstanceChild* AllocPPluginInstance(const nsCString& type, const nsTArray<nsCString>& args, int* rv)
-  {
-    return new PluginInstanceChild(type, args, rv);
-  }
-
-  virtual bool DeallocPPluginInstanceChild(PPluginInstanceChild* actor)
-  {
-    delete actor; // actor destructors are always virtual, so it's safe to call delete on them!
-    return true;
-  }
-
-  ...
-};
- -

In some cases, however, external code may hold references to actor implementations which require refcounting or other lifetime strategies. In this case, the alloc/dealloc pairs can perform different actions. Here is an example of refcounting:

- -
class ExampleChild : public nsIObserver, public PExampleChild { ... };
-
-virtual PExampleChild* TopLevelChild::AllocPExample()
-{
-  nsRefPtr<ExampleChild*> actor = new ExampleChild();
-  return actor.forget();
-}
-
-virtual bool TopLevelChild::DeallocPExample(PExampleChild* actor)
-{
-  NS_RELEASE(static_cast<ExampleChild*>(actor));
-  return true;
-}
-
- -

If an object that implements a protocol can't be constructed inside AllocPFoo, or has been previously constructed and doesn't require an IPDL connection throughout its lifetime, there is a second form of SendPFooConstructor which can be used:

- -
class ExampleChild
-{
-public:
-    void DoSomething() {
-        aManagerChild->SendPExampleConstructor(this, ...);
-    }
-};
-
- -

Internally, the first constructor form simply calls

- -
PExample(Parent|Child)* actor = AllocPExample(...);
-SendPExampleConstructor(actor, ...);
-return actor;
-
- -

with the same effect.

- -

Subprotocol Deletion

- -

It is worth understanding the protocol deletion process.  Given the simple protocols:

- -
// --- PExample.ipdl
-include protocol PSubExample;
-
-async protocol PExample
-{
-    manages PSubExample;
-
-parent:
-    PChild();
-};
-
-// --- PSubExample.ipdl
-include protocol PExample;
-
-async protocol PSubExample
-{
-    manager PExample;
-
-child:
-    __delete__();
-};
-
- -

We assume that there is a PSubExampleParent/Child pair in existence, such that some element now wishes to trigger the protocol's deletion from the parent side.

- -
aPSubExampleParent->Send__delete__();
- -

will trigger the following ordered function calls:

- -
PSubExampleParent::ActorDestroy(Deletion)
-/* Deletion is an enumerated value indicating
-   that the destruction was intentional */
-PExampleParent::DeallocPSubExample()
- -
PSubExampleChild::Recv__delete__()
-PSubExampleChild::ActorDestroy(Deletion)
-PExampleChild::DeallocPSubExample()
- -

ActorDestroy is a generated function that allows code to run with the knowledge that actor deallocation is imminent.  This is useful for actors with lifetimes outside of IPDL - for instance, a flag could be set indicating that IPDL-related functions are no longer safe to use.

- -

Accessing the protocol tree from C++

- -

The IPDL compiler generates methods that allow actors to access their manager (if the actor isn't top-level) and their managees (if any) from C++.  For a protocol PFoo managed by PManager, that manages PManagee, the methods are

- -
PManager* PFoo::Manager()
-const InfallibleTArray<PManagee*> PFoo::ManagedPManagee();
-void PFoo::ManagedPManagee(InfallibleTArray<PManagee*>&);
-
- -

Shutdown and Error Handling

- -

The C++ methods which implement IPDL messages return bool: true for success, and false for catastrophic failure. Message implementations should return false from a message implementation if the data is corrupted or otherwise malformed. Any time a message implementation returns false, IPDL will immediately begin catastrophic error handling: the communication channels for the child process (tab or plugin) will be disconnected, and the process will be terminated. Do not return false from message handlers for "normal" error conditions such as inability to load a network request! Normal errors should be signaled with a message or return value.

- -

Note: the following paragraphs are not yet implemented. IPDL tracks all active protocols between two endpoints. If if the child side crashes or becomes hung:

- - - -

When a manager protocol is destroyed, any subprotocols will be notified:

- - - -

When the toplevel protocol is destroyed, this is equivalent to shutting down the entire IPDL machinery for that connection, because no more messages can be sent and all subprotocols are destroyed.

- -

Protocol state machines

- -

The astute reader might question why IPDL includes the word "protocol" when all that has been introduced so far are unstructured grab-bags of messages. IPDL allows protocol authors to define the order and structure of how messages may be sent/received by defining protocol state machines (finite state machines).

- -

[Note that the state machine portion of the IPDL compiler is not complete as of this writing, 22 October 2009. IPDL code for state machines is accepted by the compiler, but it does not affect the generated C++, yet.]

- -

IPDL parent and child actors communicating via a protocol are paired. Each actor in the pair follows the same state machine. The pair attempts to keep their single collective state synchronized. Though, it is possible that the parent and child actors may be momentarily out of sync while messages are transmitted.

- -

IPDL (arbitrarily) requires state machines to be defined from the perspective of the parent side of the protocol. For example, when you see the send Msg syntax, it means "when the parent actor sends Msg".

- -

The following example shows one such state machine for the Plugin protocol.

- -
Note: The following example uses the old ~Destructor syntax, and needs significant reworking to make use of the new __delete__ syntax instead.  This is no longer a good example.
- -
include protocol PPluginInstance;
-
-sync protocol PPlugin {
-  manages PPluginInstance;
-
-child:
-  sync Init() returns (int rv);
-  Deinit();
-
-  sync PPluginInstance(String type, StringArray args) returns (int rv);
-
-// NOTE: state machine follows
-state START:
-  send Init goto IDLE;
-
-state IDLE:
-  send PPluginInstance goto ACTIVE;
-
-state ACTIVE:
-  send PPluginInstance goto ACTIVE;
-  send ~PPluginInstance goto ACTIVE;
-  send Deinit goto DYING;
-
-state DYING:
-  send ~PPluginInstance goto DYING;
-};
-
- -

There are three new syntactic elements, above. First are "state declarations": the code state FOO: declares a state "FOO". (States are capitalized by convention, not because of syntactic rules.) The first state to be declared is the protocol's "start state"; when an actor is created, its initial state is the "start state."

- -

The second new syntactic element is the trigger. The syntax send MsgDecl defines a trigger for a state transition; in this case, the trigger is sending the async or sync message "MsgDecl." The triggers are:

- -
    -
  1. sending an async or sync message
  2. -
  3. recving an async or sync message
  4. -
  5. calling an RPC
  6. -
  7. answering an RPC
  8. -
- -

Aside: this is why actor ctors/dtors act like normal messages, with directions etc.: this allows them to be checked against the protocol state machine like any other message.

- -

The third new syntactic element is a state transition. The syntax is: goto NEXT_STATE. When the trigger preceding this transition occurs, the protocol actor's internal state is changed to, in this case, "NEXT_STATE."

- -

Another example state machine, for PluginInstance, follows.

- -
sync protocol PluginInstance {
-  manager Plugin;
-
-child:
-  SetWindow(PluginWindow window);
-  Paint();
-
-parent:
-  sync GetBrowserValue(String key) returns (String value);
-
-state START:
-  send SetWindow goto SENT_WINDOW;
-  recv GetBrowserValue goto START;
-
-state SENT_WINDOW:
-  send SetWindow goto SENT_WINDOW;
-  send Paint goto SENT_WINDOW;
-  recv GetBrowserValue goto SENT_WINDOW;
-};
-
- -


- Note:

- - - -
 
-<link href="chrome://s3gt/skin/s3gt_tooltip.css" rel="stylesheet" type="text/css"> diff --git a/files/fr/javascript_guide/traitement_de_xml_avec_e4x/index.html b/files/fr/javascript_guide/traitement_de_xml_avec_e4x/index.html deleted file mode 100644 index d69c0d0d3d..0000000000 --- a/files/fr/javascript_guide/traitement_de_xml_avec_e4x/index.html +++ /dev/null @@ -1,252 +0,0 @@ ---- -title: Traitement de XML avec E4X -slug: JavaScript_Guide/Traitement_de_XML_avec_E4X -translation_of: Archive/Web/E4X/Processing_XML_with_E4X ---- -

Traitement de XML avec E4X

- -

Introduit pour la première fois dans JavaScript 1.6, E4X ajoute un objet XML natif au langage JavaScript, ainsi qu'une syntaxe pour intégrer des document XML littéraux dans du code JavaScript.

- -

Une définition complète d'E4X peut être trouvé dans la spécification Ecma-357 (en anglais). Cet chapitre fournit un aperçu pratique du langage ; il ne s'agit pas d'une référence complète.

- -

Problèmes de compatibilité

- -

Avant que l'élément <script> soit couramment géré dans les navigateurs, il n'était pas rare de voir le JavaScript intégré dans une page entouré de balises de commentaires HTML pour empêcher les navigateurs ne connaissant pas <script> d'afficher le code JavaScript à l'utilisateur. Cette pratique n'est plus nécessaire, mais reste visible dans d'anciens codes. Pour des raisons de compatibilité ascendante, E4X ignore par défaut les commentaires et sections CDATA. Il est possible d'ajouter un paramètre e4x=1 à une balise <script> pour désactiver cette restriction :

- -
<script type="text/javascript;e4x=1">
-...
-</script>
-
- -

Création d'un objet XML

- -

E4X permet de créer un objet XML de deux manières. La première est de passer une chaîne au constructeur XML :

- -
 var langages = new XML('<langages type="dynamique"><lang>JavaScript</lang><lang>Python</lang></langages>');
-
- -

La seconde est d'intégrer le XML directement dans un script, comme littéral XML :

- -
 var langages = <langages type="dynamique">
-   <lang>JavaScript</lang>
-   <lang>Python</lang>
- </langages>;
-
- -

Dans les deux cas, l'objet résultat sera un objet XML E4X, qui permet d'utiliser une syntaxe pratique pour l'accès et la modification des données encapsulées.

- -

Bien que l'objet XML ressemble et se comporte d'une manière similaire à un objet JavaScript normal, ce n'est pas tout à fait la même chose. E4X introduit une nouvelle syntaxe qui ne fonctionne qu'avec les objets XML E4X. La syntaxe est conçue pour être familière aux programmeurs JavaScript, mais E4X ne fournit pas une correspondance directe entre XML et les objets JavaScript natifs ; juste l'illusion qu'il y en a une.

- -

Utilisation d'attributs

- -

Après avoir exécuté l'exemple ci-dessus, la variable langages fait référence à un objet XML correspondant au nœud <langages> dans le document XML. Ce nœud a un attribut, type, qui peut être consulté et modifié de différentes manières :

- -
 alert(langages.@type); // Affiche "dynamique"
- langages.@type = "agile";
- alert(langages.@type); // Affiche "agile"
-
- -
 alert(langages.toString());
- /* Affiche :
-   <langages type="agile"><lang>JavaScript</lang><lang>Python</lang></langages>
- */
-
- -

Utilisation d'objets XML

- -

Les objets XML fournissent un certain nombre de méthodes pour inspecter et mettre à jour leur contenu. Ils permettent d'utiliser la notation classique de JavaScript avec des points et [], mais plutôt que d'accéder à des propriétés de l'objet, E4X surcharge ces opérateurs pour accéder aux enfants de l'élément :

- -
var personne = <personne>
-  <nom>Jean Dupont</nom>
-  <aime>
-    <os>Linux</os>
-    <navigateur>Firefox</navigateur>
-    <langage>JavaScript</langage>
-    <langage>Python</langage>
-  </aime>
-</personne>;
-
-alert(personne.nom); // Jean Dupont
-alert(personne['nom']); // Jean Dupont
-alert(personne.aime.navigateur); // Firefox
-alert(personne['aime'].navigateur); // Firefox
-
- -

Si l'on accède à quelque chose qui correspond à plus d'un élément, on reçoit une XMLList :

- -
alert(personne.aime.langage.length()); // 2
-
- -

Comme avec le DOM, * peut servir à accéder à tous les nœuds enfants :

- -
alert(personne.aime.*.length()); // 4
-
- -

Alors que l'opérateur . accède aux enfants directs du nœud, l'opérateur .. accède à tous les enfants quel que soit leur niveau de profondeur :

- -
alert(personne..*.length()); // 11
-
- -

La méthode length() renvoie ici 11 car tant les éléments que les nœuds texte font partie de la XMLList résultante.

- -

Les objets représentant des éléments XML fournissent un bon nombre de méthodes utiles, dont certaines sont illustrées ci-dessous : TODO : Ajouter toutes les méthodes à la référence JavaScript, et les lier depuis cette section

- -
alert(personne.nom.text()); // Jean Dupont
-
-var xml = personne.toXMLString(); // Une chaîne contenant le XML
-
-var copiePersonne = personne.copy(); // Une copie profonde de l'objet XML
-
-var enfant = person.child(1); // Le second nœud enfant ; dans ce cas l'élément <aime>
-
- -

Utilisation de XMLLists

- -

Outre l'objet XML, E4X introduit un objet XMLList. XMLList est utilisé pour représenter une collection ordonnée d'objets XML ; par exemple, une liste d'éléments. Pour poursuivre avec l'exemple ci-dessus, on peut accéder à une XMLList des éléments <lang> dans la page comme ceci :

- -
 var langs = langages.lang;
-
- -

XMLList fournit une méthode length() qui peut être utilisée pour trouver le nombre d'éléments contenus :

- -
 alert(langages.lang.length());
-
- -

Notez que contrairement aux tableaux JavaScript, length est une méthode et non une propriété, et doit donc être appelée avec des parenthèses comme ceci : length().

- -

Il est possible de parcourir les éléments correspondants comme ceci :

- -
 for (var i = 0; i < langages.lang.length(); i++) {
-     alert(langages.lang[i].toString());
- }
-
- -

Ici on utilise une syntaxe identique à celle utilisée pour accéder à des éléments numérotés dans un tableau. Malgré ces similarités avec les tableaux normaux, XMLList ne gère pas les méthodes d'Array comme forEach, et les méthodes génériques comme Array.forEach() ne sont pas compatibles avec les objets XMLList.

- -

Il est également possible d'utiliser l'instruction for each...in introduite dans JavaScript 1.6 en même temps que le support E4X :

- -
 for each (var lang in langages.lang) {
-     alert(lang);
- }
-
- -

for each...in peut également être utilisée avec des objets JavaScript normaux pour parcourir les valeurs (par opposition aux clés) contenues dans l'objet. Comme avec for...in, il est fortement déconseillé de l'utiliser avec des tableaux.

- -

Il est possible de créer une XMLList à l'aide de la syntaxe XML littérale sans avoir à créer un document XML bien formé, de la manière suivante :

- -
 var xmllist = <>
-   <lang>JavaScript</lang>
-   <lang>Python</lang>
- </>;
-
- -

L'opérateur += peut être utilisé pour ajouter des éléments à une XMLList au sein d'un document:

- -
 langages.lang += <lang>Ruby</lang>;
-
- -

Notez que contrairement aux listes de nœuds renvoyées par les méthodes DOM classiques, les XMLLists sont statiques et ne sont pas mises à jour automatiquement pour refléter les changements dans le DOM. Si vous créez une XMLList comme un sous-ensemble d'un objet XML existant et modifiez ensuite l'objet XML original, la XMLList ne reflètera pas ces changements ; il vous faudra la recréer pour avoir les mises à jour les plus récentes :

- -
 var langages = <langages>
-   <lang>JavaScript</lang>
-   <lang>Python</lang>
- </langages>;
-
- var lang = langages.lang;
- alert(lang.length()); // Affiche 2
-
- langages.lang += <lang>Ruby</lang>;
- alert(lang.length()); // Affiche toujours 2
-
- lang = langages.lang; // Recrée la XMLList
- alert(lang.length()); // Affiche 3
-
- -

Recherche et filtrage

- -

E4X fournit des opérateurs spéciaux pour sélectionner des nœuds dans un document qui correspondent à des critères spécifiques. Ces opérations de filtrage sont spécifiées à l'aide d'une expression contenue entre parenthèses :

- -
var html = <html>
-  <p id="p1">Premier paragraphe</p>
-  <p id="p2">Second paragraphe</p>
-</html>;
-
-alert(html.p.(@id == "p1")); // Affiche "Premier paragraphe"
-
- -

Les nœuds correspondant au chemin avant l'expression (dans ce cas les éléments paragraphe) sont ajoutées à la chaîne de visibilité avant l'évaluation de l'expression, comme s'ils avaient été spécifiés avec l'instruction with.

- -

Par conséquents, des filtres peuvent également être utilisés pour la valeur d'un seul nœud contenu dans l'élément courant :

- -
var gens = <gens>
-  <personne>
-    <nom>Pierre</nom>
-    <age>32</age>
-  </personne>
-  <personne>
-    <nom>Paul</nom>
-    <age>46</age>
-  </personne>
-</gens>;
-
-alert(gens.personne.(nom == "Paul").age); // Affiche 46
-
- -

Les expressions de filtres peuvent même utiliser des fonctions JavaScript :

- -
function plusde40(i) {
-    return i > 40;
-}
-
-alert(gens.personne.(plusde40(parseInt(age))).nom); // Affiche Paul
-
- -

Gestion des espaces de noms

- -

E4X gère entièrement les espaces de noms. Tout objet XML représentant un nœud ou un attribut fournit une méthode name() renvoyant un objet QName, qui permet d'inspecter facilement les éléments avec un espace de noms.

- -

Défini par défaut

- -
default xml namespace = "http://www.w3.org/1999/xhtml";
-// Il n'est plus nécessaire de spécifier l'espace de noms dans la balise html
-var xhtml = <html><head><title></title></head><body>
-            <p>text</p></body></html>;
-alert(xhtml.head);
-
- -

Défini "manuellement"

- -
var xhtml = <html xmlns="http://www.w3.org/1999/xhtml">
-	<head>
-		<title>Démo de SVG intégré</title>
-	</head>
-	<body>
-		<h1>Démo de SVG intégré</h1>
-		<svg xmlns="http://www.w3.org/2000/svg"
-			viewBox="0 0 100 100">
-			<circle cx="50"
-				cy="50"
-				r="20"
-				stroke="orange"
-				stroke-width="2px"
-				fill="yellow" />
-		</svg>
-	</body>
-</html>;
-
-alert(xhtml.name().localName); // Affiche "html"
-alert(xhtml.name().uri); // Affiche "http://www.w3.org/1999/xhtml"
-
- -

Pour accéder à des éléments qui sont au sein d'un espace de noms pas défini par défaut, créez d'abord un objet Namespace encapsulant l'URI pour cet espace de noms :

- -
var svgns = new Namespace('http://www.w3.org/2000/svg');
-
- -

Celui-ci peut alors être utilisé dans des requêtes E4X en utilisant namespace::localName au lieu d'un nom d'élément normal :

- -
var svg = xhtml..svgns::svg;
-alert(svg); // Affiche la portion <svg> du document
-
- -

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Processing_XML_with_E4X", "ja": "ja/Core_JavaScript_1.5_Guide/Processing_XML_with_E4X" } ) }}

diff --git a/files/fr/javaxpcom/index.html b/files/fr/javaxpcom/index.html deleted file mode 100644 index 4c06af91ba..0000000000 --- a/files/fr/javaxpcom/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: JavaXPCOM -slug: JavaXPCOM -tags: - - JavaXPCOM - - 'XPCOM:Liaisons_de_langage' -translation_of: Mozilla/Tech/XPCOM/Language_bindings/JavaXPCOM ---- -

 

-
-

JavaXPCOM permet la communication entre Java et XPCOM de telle façon qu'une application Java puisse accéder à des objets XPCOM, et que XPCOM puisse accéder à des classes Java qui implémentent une interface XPCOM. Avec JavaXPCOM, une application Python peut dialoguer avec XPCOM ou Gecko embarqué. JavaXPCOM est similaire à XPConnect (passerelle JavaScript-XPCOM) et utilise XPIDL.

-

JavaXPCOM est maintenant compilé par défaut avec XULRunner. Téléchargez une compilation récente de XULRunner 1.8.0.4 et testez le.

-
- -

Documentation

Développer sous JavaXPCOM
Comment récupérer et compiler les sources, ainsi que de voir et reporter les bogues. (à traduire JavaXPCOM Development)
Codes exemples
Voici plusieurs applications test Java qui vous donneront des exemples pour embarquer Gecko ou manipuler du XPCOM dans Java. (à traduire de Sample code)
Embarquer Mozilla dans une application Java avec JavaXPCOM
XULRunner contient le composant JavaXPCOM qui permet à du code Java d'interagir avec des objets XPCOM. Comme vous le verrez dans cet article, travailler avec des objets XPCOM dans Java n'est pas très différent que dans C++. (à traduire de Embedding Mozilla in a Java Application using JavaXPCOM)

Tous les articles...

Communauté

  • Forums Mozilla Java...

  • Forums Mozilla Embedding...

Sujets liés

XPCOM, Mozilla embarqué
-

Categories

-

Interwiki Language Links

-

 

-

diff --git a/files/fr/l'objet_components/index.html b/files/fr/l'objet_components/index.html deleted file mode 100644 index fceb1985e1..0000000000 --- a/files/fr/l'objet_components/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Objet Components -slug: L'objet_Components -tags: - - Référence_du_DOM_Gecko - - 'XPCOM:Liaisons_de_langage' - - XPConnect -translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components_object ---- -

L'objet Components est l'objet au travers duquel les fonctionnalités XPConnect sont reflétées en JavaScript. Il s'agit en réalité d'une instance native de l'interface nsIXPCComponents qui est reflétée en JavaScript comme un objet de niveau global à l'aide d'XPConnect.

- -

Certaines propriétés de Components ont besoin de privilèges élevés et peuvent ne pas fonctionner dans des pages Web.

- -

L'objet Components dispose des membres suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MembreDescription
classestableau de classes par ContractID
classesByIDtableau de classes par CID
Constructorconstructeur de constructeur de composants
Exceptionconstructeur d'exception XPConnect
IDconstructeur de nsID XPCOM
interfacestableau d'interfaces par nom d'interface
interfacesByIDtableau d'interfaces par IID
isSuccessCodefonction pour déterminer si un résultat donné est un code de réussite
lastResultcode de résultat de l'appel XPConnect le plus récent
managerle gestionnaire global de composants XPCOM
resultstableau des codes de résultats connus par nom
returnCoderésultat en attente pour l'appel courant
stackpile d'appels JavaScript courante
utilsdonne accès à différentes fonctionnalités utiles
utils.evalInSandboxLance du code JavaScript dans une sandbox, généralement pour lancer du code à privilèges restreints.
utils.forceGC Force un cycle de garbage collection.
utils.getWeakReference Obtient une référence faible à l'objet passé.
utils.import Charge un module JS dans le script courant, sans partager de visibilité.
utils.lookupMethodExamine une méthode ou propriété native (c'est-à-dire déclaré dans l'interface) d'un objet XPCOM. Sert à la même chose que XPCNativeWrapper.
utils.reportErrorRapporte un objet d'erreur JavaScript dans la Console d'erreurs.
utils.SandboxCrée des objets de sandbox pout utiliser avec evalInSandbox.
- -

EDITORS! please keep descriptions of the following properties in sync with Components.utils page.

- -

diff --git a/files/fr/les_bases_de_mercurial/index.html b/files/fr/les_bases_de_mercurial/index.html deleted file mode 100644 index 59559e3619..0000000000 --- a/files/fr/les_bases_de_mercurial/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Les bases de Mercurial -slug: Les_bases_de_Mercurial -tags: - - Développement_de_Mozilla - - Mercurial -translation_of: Mozilla/Mercurial/Basics ---- -
« I am about to tell you some stuff about Mercurial that will save you a lot of frustration. This page is cynical and survival-oriented. But I still claim Mercurial is a lot better than CVS. » —jorendorff 16:06, 12 May 2008 (PDT)
- -
« Je vais vous expliquer certaines choses à propos de Mercurial qui vous éviteront beaucoup de frustration. Cette page est cynique et ressemble à un manuel de survie. Mais j'affirme toujours que Mercurial est bien supérieur à CVS.  » —jorendorff à 16:06, le 12 mai 2008 (PDT)
- -

Attentes

- -

Mercurial n'est pas CVS. Les commandes sont différentes. Les concepts sont différents.

- -

C'est un fusil chargé. Vous pouvez vous tirer dans le pied. Vous pouvez perdre votre travail. L'outil essaie de vous protéger, mais ça peut toujours arriver. Les deux types de ratages habituels sont : (a) vous lancez une commande sans savoir ce qu'elle va faire ; (b) vous lancez hg commit ou hg qrefresh en comprenant mal l'état de votre répertoire de travail. Vous soumettez ainsi accidentellement des modifications que vous ne vouliez pas publier ; ou vous soumettez accidentellement une mauvaise fusion ; etc. On voit rarement immédiatement que quelque chose ne va pas.

- -

Mieux vaut prévenir que guérir. Ne faites pas ces erreurs. Ne lancez pas de commandes sans savoir ce qu'elles feront ; hg help est votre ami. Ne faites pas un commit sans comparer et réfléchir. Et ne vous laissez pas entrainer dans un « mode jeu » en arrêtant de faire attention au fait que vous jouez avec votre travail non enregistré.

- -

Mercurial n'est pas de la poudre magique. Mercurial est flexible, puissant et amusant. Il vous laisse essayer des choses que vous n'auriez jamais tentées avec CVS. Mais évidemment toutes les idées ne sont pas bonnes en définitive. (Par exemple, on a essayé de partager les files de patchs. Ça ne marchait pas vraiment.)

- -

Prévention des ennuis

- -

Utilisez Mercurial 1.0 ou plus récent. (hg version pour vérifier.)

- -

Apprenez à vous repérer. Utilisez des commandes en lecture seule (comme hg status, hg head, hg parents, hg log ou hg diff) pour vérifier l'état de votre référentiel. C'est une compétence indispensable.

- -

Configurez un programme de fusion (merge program) et assurez-vous de savoir l'utiliser. FAITES-LE MAINTENANT. Autrement, vous allez sans doute détruire votre référentiel à un moment ou à un autre.

- -

CVS laisse parfois des marqueurs de conflits dans vos fichiers. Mercurial ne le fait pas : à la place il vous demande de régler les conflits immédiatement, en utilisant un programme de fusion (comme kdiff3) qu'il lancera pour vous.

- -

Ce comportement peut être la cause de beaucoup d'erreurs. Par défaut, Mercurial utilise le premier outil de fusion qu'il trouve sur votre système, et la plupart de ceux-ci sont assez difficiles à utiliser correctement. Mercurial n'est pas doué pour détecter les fusions ratées et refuser de continuer, vous pourriez donc vous mettre dans de sales draps rien qu'en fermant une fenêtre. Même des grandes personnes fuient souvent les arbres hg contenant de nombreuses heures de travail, en citant des comportements inexplicables de hg, à cause d'une fusion ratée.

- -

Si une fusion échoue, assurez-vous que Mercurial sache que la fusion a échoué. Lorsque vous êtes encore en apprentissage, les fusions se passent souvent mal. Vous pourriez voir ce message :

- -
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
-There are unresolved merges, you can redo the full merge using:
-  hg update -C 2
-  hg merge 1
-
- -

Ceci signifie que certains conflits n'ont pas été résolus au cours de la fusion. Si vous ne savez pas exactement en quoi ils consistent et comment les corriger, utilisez la commande hg update -C pour avertir Mercurial que vous voulez laisser tomber cette fusion.

- -

Si vous ne le faites pas, Mercurial ne le saura pas et à votre prochain commit, il fera la fusion. C'est très mauvais. Le résultat peut ressembler très fort à la destruction accidentelle d'une grosse quantité de travail en fait, mais les dommages peuvent être réparés.

- -

Si hg parents montre deux parents, vous êtes en mode de fusion.

- -

Si vous utilisez des files Mercurial (Mercurial Queues), sauvegardez votre travail. hg qrefresh remplace l'ancien patch par le nouveau de manière destructive ! Utilisez hg qinit -c pour créer un référentiel de secours séparé pour vos patchs et lancez hg qcommit -m backup régulièrement.

- -

N'utilisez pas de files Mercurial dans un référentiel que quelqu'un pourrait importer.

- -

Récupération

- -

Oups ! Mercurial vous a coupé un bras !

- -

N'essayez pas des trucs au hasard pour voir si les choses vont se corriger miraculeusement. Souvenez-vous de ce que vous avez à perdre, et reposez la tronçonneuse tant que vous avez encore un bras valide.

- -

Demandez de l'aide sur IRC. Essayez sur #hg ou #developers sur l'IRC de Mozilla, ou #mercurial sur freenode.

- -
 
- -

{{ languages( { "en": "en/Mercurial_basics", "es": "es/Lo_b\u00e1sico_de_Mercurial", "ja": "ja/Mercurial_basics" } ) }}

diff --git a/files/fr/les_bases_des_services_web/index.html b/files/fr/les_bases_des_services_web/index.html deleted file mode 100644 index 8535e5538a..0000000000 --- a/files/fr/les_bases_des_services_web/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Les bases des services Web -slug: Les_bases_des_services_Web -tags: - - SOAP - - Services_Web_XML - - XML -translation_of: Archive/The_Basics_of_Web_Services ---- -

-


-Résumé : un des grand sujet de débat sur le Web concerne les services Web. Ce petit guide vous permettra d'en apprendre à peu plus à propos de ces services Web. -

-

Les bases

-

Les services Web ne sont pas quelque chose de nouveau, si vous avez déjà utilisé les flux RSS ou Atom pour extraire l'actualité d'un site Web, vous devez avoir une petite idée sur la façon dont un service Web fonctionne. -

Les services Web échangent des données entre un serveur et un client, en utilisant le format XML pour envoyer des requêtes, de façon à ce que le serveur et le client puissent se comprendre mutuellement (Introduction à XML). -

Le meilleur moyen pour comprendre un service Web est de le comparer à un formulaire HTML avec un script côté serveur (tel que PHP ou ASP) pour publier et envoyer des données. Services Web et formulaires envoient et reçoivent tous les deux des requêtes. La différence majeure est que le service Web utilise XML. -

-

Exemples de services Web en action

-

Comme on l'a vu ci-dessus, les flux RSS et Atom sont des exemples simples de fonctionnement d'un service Web, plus communément, XML-RPC ou SOAP sont également utilisés pour les communications entre un serveur et un client. -

-

Présentation de XML-RPC

-

XML-RPC est un type de service Web créé aux alentours de 1998, et bien que ne faisant pas partie des recommandations officielles du W3C, il est largement utilisé. XML-RPC a été développé par Useful Inc., en partenariat avec Microsoft. -

-

Présentation de SOAP

-

SOAP, un autre service Web, fait partie des standards du W3C. Il est similaire à XML-RPC. SOAP est entre autres supporté par IBM et par Microsoft. -

-

SOAP ou XML-RPC ?

-

Brièvement, SOAP a été conçu pour combler les lacunes de XML-RPC. Par exemple, il est plus facile d'envoyer des tableaux multidimensionnels avec SOAP qu'avec XML-RPC. SOAP possède également plus de fonctionnalités que XML-RPC, mais XML-RPC a tout de même quelques intérêts. -

-
-

Informations sur le document original

- -
-

Interwiki Languages Links -

{{ languages( { "en": "en/The_Basics_of_Web_Services", "pl": "pl/Podstawy_Web_Services", "ko": "ko/The_Basics_of_Web_Services" } ) }} diff --git "a/files/fr/les_cha\303\256nes_useragent_de_gecko/index.html" "b/files/fr/les_cha\303\256nes_useragent_de_gecko/index.html" deleted file mode 100644 index 7f04af69ce..0000000000 --- "a/files/fr/les_cha\303\256nes_useragent_de_gecko/index.html" +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Les chaînes UserAgent de Gecko -slug: Les_chaînes_UserAgent_de_Gecko -tags: - - Développement_Web - - Développement_inter-navigateur -translation_of: Web/HTTP/Headers/User-Agent/Firefox ---- -

Liste de user agents sorties par Netscape et AOL basée sur Gecko™. -

-

Utilisation appropriée

-

Nous ne recommandons pas l'utilisation de chaînes User Agent comme méthode principale de détection du navigateur. Consultez Détection du navigateur et support inter-navigateur pour une vision plus détaillée et des recommandations sur diverses approches liées à la détection du navigateur. -

En particulier, nous recommandons d'employer seulement la détection basée par chaîne de user agent pour la détection du navigateur côté serveur. Si vous avez du code existant de détection du navigateur côté client qui utilise la chaîne user agent, vous pouvez simplement rechercher la chaîne « Gecko » dans user agent afin de détecter tous les navigateurs basés sur Gecko. -

Pour tous les problèmes de détection de Gecko liés à un bogue spécifique ou qui nécessite la connaissance spécifique des chaînes du fournisseur ou des dates de compilation, utilisez l'objet navigator. -

-

Références de chaînes Gecko User Agent Netscape

-

Consultez la référence des chaînes user-agent sur mozilla.org pour des valeurs spécifiques de Platform, de Security, de OS-or-CPU (Le système d'exploitation ou le processeur), ou de Localization (langues). -

- -


-Pour plus d'informations concernant les dernières versions de Netscape et Mozilla, consultez la référence des cvstags de mozilla.org. -

-
-

Informations sur le document original

- -
-{{ languages( { "en": "en/Gecko_User_Agent_Strings", "it": "it/Stringhe_User_Agent_di_Gecko", "ja": "ja/Gecko_User_Agent_Strings" } ) }} diff --git a/files/fr/localisation_avec_mercurial/index.html b/files/fr/localisation_avec_mercurial/index.html deleted file mode 100644 index 12be0acf12..0000000000 --- a/files/fr/localisation_avec_mercurial/index.html +++ /dev/null @@ -1,261 +0,0 @@ ---- -title: Localisation avec Mercurial -slug: Localisation_avec_Mercurial -tags: - - Localisation - - Mercurial - - Tutoriel -translation_of: Mozilla/Localization/Localizing_with_Mercurial ---- -

Dans Mozilla, nous utilisons le système de contrôle de version  Mercurial  (Hg) pour gérer le code source et les localisations. Mercurial permet aux localisateurs de travailler localement (sur leurs machines) et ensuite de pousser (push, un terme Hg) les changements vers un dépôt distant, qui est généralement hébergé sur les serveurs Mozilla (hg.mozilla.org . La localisation des versions actuelles de Firefox, Thunderbird et SeaMonkey inclut le travail avec Mercurial. Si la documentation est incomplète ou si vous avez des questions, veuillez passer par les canaux #l10n ou #hg  sur irc.mozilla.org. Les FAQ Mercurial valent également le détour, en cas de problème

- -

Pour les plus avides et rapides, vous trouverez ci-dessous des instructions sur l'installation et la configuration de Mercurial, des instructions sur la réception d'un privilège de validation de compte Hg, ainsi que quelques tâches que vous pouvez effectuer sans privilège de compte.

- -

Installation de Mercurial

- -

Suivez les instructions ci-dessous pour installer Mercurial sur votre système. Une fois que vous aurez installé Mercurial, nous suivrons les étapes pour le configurer.

- -

Mercurial sur Linux

- -

Vous pouvez facilement installer Mercurial à partir de la ligne de commande en exécutant l'une des commandes suivantes. Choisissez la commande appropriée pour votre installation et assurez-vous de l'exécuter en tant que root.

- -
# Debian/ubuntu
-$ apt-get install mercurial
-
-# Fedora
-$ dnf install mercurial
-
-# Gentoo
-$ emerge mercurial
-
-# Arch Linux
-$ pacman -S mercurial
-
-# OpenSolaris
-$ pkg install SUNWmercurial
- -

Si vous préférez une interface graphique, vous pouvez télécharger et installer MercurialEclipse ici.

- -

Ça a marché ?

- -

Ouvrez une fenêtre de terminal et entrez  hg --version . Si vous voyez un message à propos de la version de Mercurial (par exemple, Mercurial Distributed SCM (version 1.3.1)), vous avez installé Mercurial avec succès.

- -

Plus de détails

- -

Pour davantage de détails sur l'installation d' Hg sur les systèmes Linux, référez-vous aux instructions de la page de téléchargement de Mercurial.

- -

Mercurial sur Windows

- -

Avec Windows, vous avez quelques options d'installation ;

- - - -

Mercurial Installer.png Une partie de la ligne de commande d'installation de Hg pour Windows implique de s'assurer que l'exécutable hg est dans la variable %PATH% du système (TortoiseHg n'a pas besoin de cette étape). Utilisez l'utilitaire add_path.exe trouvé dans C:\mozilla-build\hg pour faire cela.

- -
PS C:\Users\your_id> cd C:\mozilla-build\hg
-PS C:\mozilla-build\hg> .\add_path.exe /result .
- -

Notez le point (".") À la fin de la deuxième commande, ce qui signifie le répertoire courant. Si l'utilitaire a modifié avec succès %PATH%, une boîte de dialogue s'ouvrira disant "%PATH% a été correctement mis à jour".

- -

Ou bien, vous pouvez éditer la variable %PATH% manuellement. Pour ce faire, faites un clic droit sur l'icône de votre ordinateur, choisissez Propriétés > Avancé > Variables d'environnement, sélectionnez PATH et cliquez sur Modifier (Edit). Si vous ne voyez pas PATH parmi les options, vous devrez cliquer sur Ajouter (Add) et éditer dans la boîte de dialogue Ajouter. Voir la capture d'écran pour un exemple. PATH.jpg

- -

Ça a marché ?

- -
    -
  1. Allez sur Start > Run... (Démarrer > Éxécuter...)
  2. -
  3. Tapez cmd.exe et cliquez sur OK. Une nouvelle fenêtre shell devrait apparaître.
  4. -
  5. Tapez hg --version dans la nouvelle fenêtre shell. Si vous voyez un message sur la version de Mercurial (par exemple, Mercurial Distributed SCM (version 1.3.1)), vous avez installé Mercurial avec succès !
  6. -
- -

Plus de détails

- -

Pour davantage de détails sur l'installation d'Hg sur Windows, référez-vous aux instructions sur la page de téléchargement de Mercurial.

- -

Mercurial sur Mac OSX

- -

L'installation d'Hg sur Mac OSX est très facile. Vous pouvez installer Mercurial via MacPorts  depuis le terminal, comme ceci :

- -

$ sudo port install mercurial

- -

Vous pouvez aussi l'installer par téléchargement du dmg package à partir de la page de téléchargement Hg . Elle a une boîte de dialogue d'installation qui vous guidera à travers le processus.

- -

Si vous préférez une interface graphique, vous pouvez télécharger et installer MercurialEclipse ici.

- -

Ça a marché ?

- -

Ouvrez une fenêtre de terminal et tapez hg --version. Si vous voyez un message à propos de la version de Mercurial (par exemple, Mercurial Distributed SCM (version 1.3.1)), vous avez installé Mercurial avec succès.

- -

Plus de détails

- -

Pour davantage de détails sur l'installation d'Hg sur Mac OSX, référez-vous aux instructions de la page de téléchargement Mercurial's.

- -

Configuration de Mercurial

- -

Une fois que vous avez installé Mercurial, vous devrez le configurer avant de pouvoir l'utiliser.

- -

Votre configuration Mercurial est contenue dans un fichier "config" que vous devez créer vous-même. Votre fichier de configuration s'appelle ~/ hgrc (systèmes UNIX) ou Mercurial.ini (Windows), selon votre système d'exploitation.

- -

Votre fichier config doit avoir les paramètres suivants :

- -
[ui]
-username = Votre vrai nom <user@example.com>
-merge = internal:merge
-
-[defaults]
-commit = -v
-
-[diff]
-git = 1
-showfunc = 1
-unified = 8
- -

Pour configurer Hg, suivez ces étapes :

- -
    -
  1. créez un nouveau fichier dans votre éditeur de texte préféré,
  2. -
  3. copiez les paramètres ci-dessus et collez-les dans votre nouveau fichier,
  4. -
  5. enregistrez le fichier avec l'extension, soit .hgrc (système UNIX) , soit . Ini (Windows) et enregistrez-le dans $HOME/  ou C:\mozilla-build\hg\ ou C:\Program Files\Mercurial\.
  6. -
- -

Maintenant que vous avez installé et configuré Mercurial, voici quelques tâches que vous pouvez faire sans privilèges d'accès Hg commit.

- -

Clonage et mise à jour de référentiels

- -

Il y a quelques référentiels qui contiennent les fichiers source en-US que la plupart des paramètres régionaux voudront traiter.

- - - -
-

Note ; Lorsque vous récupérez le référentiel comm-central, il contient également mozilla-central. Il est donc possible d'utiliser une seule installation pour le développement de Firefox, SeaMonkey et Thunderbird sans pour autant devoir récupérer mozilla-central une seconde fois.

-
- -

Voici maintenant comment récupérer (ou cloner) les fichiers source en-US pour la première fois

- - - -
hg clone https://hg.mozilla.org/mozilla-central/
-
- -

Cette commande crée un clone du référentiel mozilla-central dans le répertoire mozilla-central.

- - - -
hg clone https://hg.mozilla.org/comm-central/
-cd comm-central
-python client.py checkout
-
- -

La première commande crée un clone du référentiel comm-central. La seconde commande vous déplace dans le répertoire correspondant. La troisième commande produit un clone de mozilla-central et récupère d'autres référentiels hg. Les autres répertoires sont requis pour SeaMonkey et Thunderbird.

- - - -
hg clone https://hg.mozilla.org/l10n-central/ab-CD/
- -

Mise à jour de votre référentiel local

- - - -
hg pull -u
-
- -

Cela permet à la fois d'obtenir les nouvelles modifications de mozilla-central et d'appliquer ces changements dans votre copie de travail.

- - - -
python client.py checkout
- -

Ceci permet à la fois d'obtenir les modifications de comm-central, mozilla-central et des autres emplacements appropriés et d'appliquer ces changements dans votre copie de travail.

- - - -
hg pull -u
- -

Création des paquets L10n

- -

Une autre chose que vous pouvez faire avec Hg sans avoir besoin de privilège de compte, est de créer des paquets L10n de votre travail pour que quelqu'un d'autre l'engage dans votre référentiel L10n distant sur les serveurs Mozilla. Cela garantit que vos tableaux de bord sont toujours précis, car ils regardent votre référentiel distant.

- -

Voici comment créer un paquet L10n avec Hg et l' extension Mq:

- -
    -
  1. -

    Activez Mq pour ajouter hg.ext = sur votre fichier config Mercurial (~/.hgrc sur Unix ou Mercurial.ini sur Windows) sous la section [extensions].

    -
  2. -
  3. -

    Ouvrez votre outil de ligne de commande et naviguez vers votre répertoire L10n.

    -
  4. -
  5. -

    Dans votre répertoire L10n, initialisez votre référentiel avec Mq par l'exécution de hg init --mq.

    -
  6. -
  7. -

    Pour créer un nouveau paquet, exécutez hg qnew -m "Votre message d'engagement" patch-name.patch. Le message d'engagement doit prendre la forme de "Bug 123456 - Change this thing to work better by doing something; r=reviewers" si votre paquet résoud un bogue.

    -
  8. -
  9. -

    Faites votre modification.

    -
  10. -
  11. -

    Une fois vos changements finis, exécutez hg qrefresh pour engager vos changements dans le paquet.

    -
  12. -
  13. -

    Naviguez vers votre "référentiel/.hg/paquet" pour trouver votre .patch (paquet).

    -
  14. -
  15. -

    Vous pouvez répéter à partir de l'étape 4 pour un autre paquet. Vos paquets seront incrémentés, c'est-à-dire que de nouveaux paquets seront créés basés sur les anciens. Si vous voulez engager tous les paquets du référentiel et effacer la file de paquets, exécutez hg qfinish.

    -
  16. -
- -

Référez-vous aux MqTutorial et documentation Mq pour l'utilisation de l'extension Mq et la gestion des correctifs.

- -

Les privilèges de compte de Mercurial

- -

Finalement, vous ou votre chef d'équipe aurez besoin de privilèges de compte Hg. Regardons les choses en face, il est juste plus commode d'engager et de pousser votre travail sur le référentiel à distance vous-même, plutôt que de créer des correctifs et de demander à quelqu'un d'autre de les pousser pour vous.

- -

Pour avoir un accès en écriture aux référentiels l10n hg sur le serveur Mozilla, il y a un peu de paperasse à faire. Le "patron" de l'équipe de localisation doit trouver un bogue demandant un compte hg. Ce bogue va demander le privilège L10n niveau 1. Vous devez suivre les instructions concernant le formulaire de contributeur. L'accès en écriture aux référentiels hg nécessite un '' voucher '', qui, pour le propriétaire, sera fait en fonction de la critique de Mozilla. Pour les pairs d'une localisation, le propriétaire peut se porter garant (une fois enregistré).

- -

Envoi des modifications à Mozilla

- -

Maintenant, vous avez les privilèges de compte, et vous pouvez envoyer votre travail à Mozilla vous-même. Les étapes pour l'envoi de votre travail L10n utilisant Mercurial :

- -
    -
  1. Puisque votre travail L10n a lieu dans votre propre référentiel local, vous devez vous assurer qu'aucune modification n'a été apportée au référentiel distant avant de valider votre travail.  Pour ce faire, mettez à jour votre référentiel local, comme vu dans la section ci-dessus..
  2. -
  3. Lorsque vous avez terminé une modification ou un ensemble de modifications et que vous avez vérifié les modifications du référentiel distant, vous pouvez entrer cette commande : -
    hg commit -m "your message identifying the change (bug 555)"
    - -

    La validation n'envoie pas vos modifications au référentiel de Mozilla, mais les prépare pour cela. L'étape suivante enverra vos modifications à votre référentiel distant via "push".

    -
  4. -
  5. Pour les envoyer aux répertoires hébergés chez Mozilla, vous devez avoir un accès en écriture et vous devez modifier le fichier (votre-racine-hg-locale)/. hg/hgrc (note, ce n'est PAS votre fichier ~/.hgrc) pour ajouter cette ligne (en remplaçant ab-CD par votre code de locale) : -
    [paths]
    -default = https://hg.mozilla.org/l10n-central/ab-CD
    -default-push = ssh://hg.mozilla.org/l10n-central/ab-CD
    -
    -
    -
  6. -
  7. Vous devrez encore indiquer à ssh le compte à utiliser pour vos envois, en ajoutant ces lignes à ~/.ssh/config et en ajoutant ces lignes,, sur lesquelles : user@host.domain est votre compte. -
    Host hg.mozilla.org
    -User user@host.domain
    -
    -
  8. -
  9. Vous pouvez enfin faire un push de vos modifications vers le référentiel central (et vérifier le résultat sur le tableau de bord) par l'entrée de cette commande depuis votre répertoire local  :
  10. -
- -
hg push
- -

Et tah dah ! Vous avez réussi ! Félicitations pour avoir achevé ce tutoriel. Faites une pause et prenez une collation, vous le méritez !

diff --git a/files/fr/localisation_d'une_extension/index.html b/files/fr/localisation_d'une_extension/index.html deleted file mode 100644 index c651722da7..0000000000 --- a/files/fr/localisation_d'une_extension/index.html +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: Localisation d'une extension -slug: Localisation_d'une_extension -tags: - - Extensions - - Localisation -translation_of: Archive/Localizing_an_extension ---- -

{{Previous("Ajout de préférences à une extension")}}

- -

Introduction

- -

Cet article reprend et développe les précédents exemples de création d'extension en ajoutant le support de localisation à notre extension stock watcher. En quelques étapes faciles vous rendrez votre extension facile à localiser en diverses langues sans qu'il soit nécessaire d'éditer de fichiers XUL ou JavaScript.

- -

Si vous n'avez pas encore créé d'extension, ou si vous souhaitez vous rafraîchir la mémoire, jetez un coup d'œil aux articles précédents de la même série :

- - - -

Télécharger l'exemple

- -

Vous pouvez télécharger le code de l'exemple utilisé dans cet article, de manière à l'avoir sous les yeux pendant la lecture, ou bien pour l'utiliser comme point de départ pour votre propre extension.

- -

http://developer.mozilla.org/samples...ockwatcher.zip

- -

Créer les fichiers de localisation nécessaires

- -

Chaque fichier XUL qui inclut une interface utilisateur de votre extension devrait avoir un fichier de locale correspondant dans le répertoirelocale

- -

Chaque fichier de locale dresse la liste des entités correspondant aux chaînes ellles-mêmes. Le dialogue d'options, par exemple, dont le fichier XUL est options.xul, a un fichier correspondant options.dtd qui ressemble à ceci :

- -
 <!ENTITY options_window_title "StockWatcher 2 Preferences">
- <!ENTITY options_symbol.label "Stock to watch: ">
-
- -

Le nom d'entité "options_window_title" fait référence à la chaîne "StockWatcher 2 Preferences", qui est utilisée comme titre de la fenêtre des options.

- -

Le fichier stockwatcher2.dtd contient de même les entités correspondant au fichier stockwatcher2.xul file:

- -
 <!ENTITY panel_loading "Loading...">
- <!ENTITY menu_refresh_now.label "Refresh Now">
- <!ENTITY menu_apple.label "Apple (AAPL)">
- <!ENTITY menu_google.label "Google (GOOG)">
- <!ENTITY menu_microsoft.label "Microsoft (MSFT)">
- <!ENTITY menu_yahoo.label "Yahoo (YHOO)">
-
- -

Mettre à jour les fichiers XUL

- -

Chaque fichier XUL doit faire référence à son fichier de locale correspondant. Nous devons aussi mettre à jour le code pour utiliser les entités et non les chaînes de caractères, afin que les substitutions s'opèrent en utilisant la locale active.

- -

Pour faire référence au fichier de locale correspondant à un fichier XUL donné, nous devons ajouter une ligne au fichier XUL. Dans options.xul, nous ajoutons cette ligne :

- -
 <!DOCTYPE window SYSTEM "chrome://stockwatcher2/locale/options.dtd">
-
- -

Nous ajoutons une ligne du même type au fichier stockwatcher.xul :

- -
 <!DOCTYPE overlay SYSTEM "chrome://stockwatcher2/locale/stockwatcher2.dtd">
-
- -

Notez que les URLs des fichiers DTD ne mentionnnent pas le nom de la localisation à utiliser. Le mot "locale" qui apparaît dans ces URLs permet de diriger automatiquement vers le répertoire adéquat, en fonction du choix de locale de l'utilisateur.

- -

Ensuite nous remplaçons simplement chaque chaîne de texte de nos fichiers XUL par l'entité correspondante. Par exemple, dans stockwatcher2.xul, nous transformons cette ligne :

- -
 <menuitem label="Refresh Now" oncommand="StockWatcher.refreshInformation()"/>
-
- -

en

- -
 <menuitem label="&menu_refresh_now.label;" oncommand="StockWatcher.refreshInformation()"/>
-
- -

Reproduire cette substitution pour toutes les chaînes utilisées dans tous les fichiers XUL.

- -

Mettre à jour le fichier chrome manifest

- -

Pour indiquer à Firefox l'existence de fichiers de locale, nous devons réviser notre fichier chrome.manifest file, en ajoutant une ligne comme celle-là pour chaque localisation :

- -
 locale stockwatcher2 en-US chrome/locale/en-US/
-
- -

Elle indique à Firefox que la locale en-US est située dans le répertoire chrome/locale/en-US.

- -

Localiser les chaînes du code JavaScript

- -

Si notre code JavaScript contient des chaînes de caractères qui doivent être localisées, comme c'est le cas dans notre exemple avec stock watcher, nous devons également les rendre localisables. C'est possible en transférant ces chaînes dans unstring bundle . Lesstring bundles sont créés grâce à un fichier properties qui liste les variables renvoyant aux chaînes de caractères. Pour une explication détaillée de ce processus, voir Tutoriel XUL : fichiers de propriétés.

- -

Créer un fichier properties

- -

La première chose à faire est de créer un fichier properties pour les chaînes utilisées dans le code JavaScript de stockwatcher2.js :

- -
changeString=Chg:
-openString=Open:
-lowString=Low:
-highString=High:
-volumeString=Vol:
-
- -

Le fichier stockwatcher2.properties ci-dessus attribue à 5 variables (changeString, openString, lowString, highString, et volumeString) les textes en anglais correspondants.

- -

Créer lestring bundle

- -

L'étape suivante consiste à modifier le fichier stockwatcher2.xul pour faire référence à ce fichier properties. Nous créons pour cela unstring bundle , en utilisant le code XML suivant :

- -
 <stringbundleset id="stringbundleset">
-   <stringbundle id="string-bundle" src="chrome://stockwatcher2/locale/stockw...er2.properties"/>
- </stringbundleset>
-
- -

Un nouveau string bundle est ainsi créé avec son identifiant (ID) ; ses variables et leur valeur (= les chaînes de caractères correspondantes) seront récupérées dans le fichier stockwatcher2.properties que nous avons déjà créé.

- -

Mettre à jour le code JavaScript

- -

Nous voilà prêts pour réviser le code JavaScript afin qu'il charge les chaînes depuis lestring bundle au lieu d'utiliser directement les chaînes d'origine. Ceci implique la réécriture de la fonction refreshInformation() pour charger les chaînes, ainsi que la fonction incluse infoReceived() pour que soient utilisées les chaînes localisées et chargées et non les chaînes de départ.

- -

Nous ajoutons à la fonction refreshInformation() le code suivant :

- -
 stringsBundle = document.getElementById("string-bundle");
- var changeString = stringsBundle.getString('changeString') + " ";
- var openString = stringsBundle.getString('openString') + " ";
- var lowString = stringsBundle.getString('lowString') + " ";
- var highString = stringsBundle.getString('highString') + " ";
- var volumeString = stringsBundle.getString('volumeString') + " ";
-
- -

Ce code fait référence austring bundle en appelant document.getElementById(), et en précisant l'ID "string-bundle". Puis il va chercher toutes les chaînes dont nous avons besoin dans le bundle, une à une, en faisant appel à la méthode getString() pour demander la variable correspondant à chaque chaîne.

- -

Dans notre cas, nous ajoutons également un espace à la fin de chaque chaîne. Il en va seulement ainsi pour l'extension que nous prenons pour exemple, il ne s'agit pas d'une nécessité pour vous.

- -

Ensuite nous replaçons chaque occurrence de la chaîne initiale par la variable appropriée :

- -
 samplePanel.tooltipText = changeString + fieldArray[4] + " | " +
-     openString + fieldArray[5] + " | " +
- lowString + fieldArray[6] + " | " +
-     highString + fieldArray[7] + " | " +
-     volumeString + fieldArray[8];
-
- -

Ajouter d'autres localisations

- -

Pour ajouter une autre localisation (=une autre langue), il suffit d'écrire une nouvelle ligne au chrome manifest avec la référence de la nouvelle langue. Par exemple, pour ajouter une localisation française, vous écrirez :

- -
 locale stockwatcher2 fr chrome/locale/fr/
-
- -

Puis créez un sous-répertoire chrome/locale/fr et ajoutez tous les fichiers DTD nécessaires; dans notre exemple, options.dtd et stockwatcher2.dtd. Ces fichiers doivent inclure les entités correspondant aux chaînes utilisées dans l'extension, avec leur traduction française bien entendu.

- -

De même, si nous avons des fichiers properties contenant des chaînes localisées du code JavaScript, nous devons créer des versions françaises de ces fichiers properties dans le répertoire chrome/locale/fr. Seules les chaînes de caractères doivent être localisées ; les noms d'entités doivent être strictement les mêmes pour toutes les localisations.

diff --git a/files/fr/localisation_des_descriptions_d'extensions/index.html b/files/fr/localisation_des_descriptions_d'extensions/index.html deleted file mode 100644 index 1279b91f72..0000000000 --- a/files/fr/localisation_des_descriptions_d'extensions/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Localisation des descriptions d'extensions -slug: Localisation_des_descriptions_d'extensions -tags: - - Extensions - - Localisation -translation_of: Mozilla/Localization/Localizing_extension_descriptions ---- -

 

-

Localisation avec Gecko 1.9

-

{{ Gecko_minversion_header(1.9) }} {{ Fx_minversion_header(3) }}

-

Gecko 1.9 procure une nouvelle méthode plus efficace de localisation des descriptions et autres métadonnées des extensions. Toutes les descriptions en différentes langues peuvent maintenant apparaître dans le fichier install.rdf grâce aux propriétés em:localized. Une propriété em:locale indique pour quelle langue utiliser l'information, de même que les diverses chaînes disponibles dans le dossier locale. L'exemple ci-dessous en donne l'illustration (les propriétés les plus courantes n'y figurent pas par souci de concision) :

-
<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>TabSidebar@blueprintit.co.uk</em:id>
-    <em:localized>
-      <Description>
-        <em:locale>fr</em:locale>
-        <em:name>Tab Sidebar</em:name>
-        <em:description>Affiche des aperçus de vos onglets dans le panneau latéral.</em:description>
-      </Description>
-    </em:localized>
-    <em:localized>
-      <Description>
-        <em:locale>es-ES</em:locale>
-        <em:name>Tab Sidebar</em:name>
-        <em:description>Muestra una vista previa de sus pestañas en su panel lateral.</em:description>
-      </Description>
-    </em:localized>
-    <em:localized>
-      <Description>
-        <em:locale>nl-NL</em:locale>
-        <em:name>Tab Sidebar</em:name>
-        <em:description>Laat voorbeeldweergaven van uw tabbladen in de zijbalk zien.</em:description>
-      </Description>
-    </em:localized>
-    <em:name>Tab Sidebar</em:name>
-    <em:description>Displays previews of your tabs in your sidebar.</em:description>
-  </Description>
-</RDF>
-
-

Toutes les métadonnées mentionnées ci-dessous peuvent être localisées de la même façon. Les informations fournies par la propriété em:localized peuvent être remplacées en utilisant une série de préférences comme détaillée plus bas. Si aucune préférence n'est indiquée, ou s'il n'existe pas de propriété em:localized pour la locale courante, alors les propriétés indiquées directement dans le manifeste d'installation seront utilisées en dernier recours, comme elles l'ont toujours été avant Gecko 1.9.

-

La localisation avant Gecko 1.9

-

Avant Gecko 1.9, les développeurs d'extensions devaient recourir à une procédure particulière pour définir des descriptions localisées pour les extensions destinées aux applications telles que Firefox ou Thunderbird.

- -

Chaînes localisables

-

Les métadonnées suivantes pour les extensions peuvent être localisées en utilisant le même procédé :

- - -

Au cas où plusieurs valeurs différentes existent, on peut ajouter un nombre à l'extrémité du nom de la préférence :

-
extensions.EXTENSION_ID.contributor.1=NOM_DU_PREMIER_CONTRIBUTEUR
-extensions.EXTENSION_ID.contributor.2=NOM_DU_DEUXIÈME_CONTRIBUTEUR
-extensions.EXTENSION_ID.contributor.3=NOM_DU_TROISIÈME_CONTRIBUTEUR
-
-pref("extensions.EXTENSION_ID.contributor.1", "CHEMIN_DU_FICHIER_LOCALISÉ");
-pref("extensions.EXTENSION_ID.contributor.2", "CHEMIN_DU_FICHIER_LOCALISÉ");
-pref("extensions.EXTENSION_ID.contributor.3", "CHEMIN_DU_FICHIER_LOCALISÉ");
-
-

Ceci peut s'appliquer aux éléments localisables suivants :

- -
-  
-

{{ languages( { "de": "de/Lokalisierung_von_Erweiterungsbeschreibungen", "en": "en/Localizing_extension_descriptions", "es": "es/Traducir_las_descripciones_de_las_extensiones", "ja": "ja/Localizing_extension_descriptions", "pl": "pl/Lokalizacja_opisu_rozszerzenia", "pt": "pt/Localizar_descri\u00e7\u00f5es_de_extens\u00f5es" } ) }}

diff --git "a/files/fr/localisation_des_m\303\251tadonn\303\251es_extension_sur_addons.mozilla.org/index.html" "b/files/fr/localisation_des_m\303\251tadonn\303\251es_extension_sur_addons.mozilla.org/index.html" deleted file mode 100644 index d21e3fc92d..0000000000 --- "a/files/fr/localisation_des_m\303\251tadonn\303\251es_extension_sur_addons.mozilla.org/index.html" +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Localisation des métadonnées d'une extension sur addons.mozilla.org -slug: Localisation_des_métadonnées_extension_sur_addons.mozilla.org -tags: - - Extensions - - Localisation -translation_of: Mozilla/Localization/Localizing_extension_metadata_on_addons.mozilla.org ---- -

AMO permet la localisation des méta-données de chaque extension. Ces données sont décrivent l'extension et ne changent pas nécessairement avec chaque révision (mais cela peut arriver). Les champs de données localisable d'une extension sont les suivants :

- - - -

Lorsque vous soumettez une nouvelle extensions sur AMO, le processus se divise en plusieurs étapes.

- -

À l'étape 2, il vous est demandé de fournir les attributs listés ci-dessus dans la locale par défaut du module (sélectionnée à l'étape 1). Les valeurs que vous fournirez seront utilisées comme valeurs de remplacement si quelqu'un demande une locale qui n'existe pas.

- -

L'étape 4 vous permet de traduire chacun des champs ci-dessus dans une des locales supportées par AMO. Souvenez-vous que chaque champs est optionnel lors de la localisation. Si un champ est laissé vide, alors AMO affichera les chaînes dans la locale par défaut.

- -

Obtenir de l'aide pour la traduction

- -

Nous vous conseillons fortement d'éviter tout outil de traduction automatique, qui peuvent donner une traduction de très mauvaise qualité. Préférez toujours une traduction « humaine » qualifiée.

- -

AMO ne fournit pas d'assistance directe pour la localisation aux auteurs d'extensions, mais il existe de nombreuses communautés qui peuvent vous aider.

- -

BabelZilla.org

- -

BabelZilla.org (en) est une communauté dédiée à la localisation d'extensions pour les applications de la famille Mozilla. Elle est formée de traducteurs volontaires provenant du monde entier et ils maintiennent les traductions de plus de 400 extensions avec un système de traduction en-ligne.

- -

Ils fournissent également de l'aide pour le support de la localisation de votre extension si elle ne possède pas encore la structure de localisation.

- -

Vous pouvez déjà demander la localisation des champs de AMO sur ces forums (en), et ils seront ajouter prochainement dans le système de traduction Web (« Web Translation System »).

diff --git a/files/fr/localisation_et_pluriels/index.html b/files/fr/localisation_et_pluriels/index.html deleted file mode 100644 index 259852ec61..0000000000 --- a/files/fr/localisation_et_pluriels/index.html +++ /dev/null @@ -1,313 +0,0 @@ ---- -title: Localisation et pluriels -slug: Localisation_et_pluriels -tags: - - Localisation -translation_of: Mozilla/Localization/Localization_and_Plurals ---- -

{{ Fx_minversion_header(3) }} -Vous vous trouvez probablement ici parce que vous localisez un fichier <tt>.properties</tt> et que celui-ci liait vers cette page. Celle-ci a pour objet d'expliquer comment localiser ces chaînes afin que la forme plurielle correcte soit affichée pour l'utilisateur. Par exemple, on aura « 1 page », mais « 2 pages ». -

Si vous êtes ici pour rendre votre code (par exemple une extension) localisable avec des formes plurielles, vous pouvez passer directement au paragraphe Développement avec PluralForm, mais vous aurez probablement besoin de définir les chaînes initiales pour votre code de la même manière, il vaudrait donc mieux parcourir également au moins la section Utilisation. -

-

Utilisation

-

Les termes suivants sont utilisés dans cette page pour que les choses soient les plus claires possibles : -

- -

Si vous êtes ici pour traiter <tt>pluralRule</tt> dans le fichier <tt>chrome/global/intl.properties</tt>, vous devrez d'abord établir quelle règle de pluriel choisir pour votre localisation. Cette règle de pluriel est utilisée pour déterminer le nombre de formes plurielles nécessaires pour chaque mot qui doit être localisé en tenant compte des pluriels. -

Pour tous les autres fichiers properties qui lient vers cette page, vous devrez fournir autant de formes plurielles que nécessaire du mot désiré et les séparer par des points-virgules (;). Si vous ne savez pas combien vous en avez besoin, vérifiez le nombre <tt>pluralRule</tt> dans <tt>chrome/global/intl.properties</tt> et vérifiez l'entrée correspondante dans la liste suivante de règles de pluriel. -

-

Liste de règles de pluriel

-

Cette section contient une liste de règles de pluriel triées par leur nombre de règle. Chaque entrée indique combien de formes plurielles sont nécessaires pour localiser un mot. Pour chacune d'entre-elles, une liste de familles et de langues correspondantes est fournie afin de vous aider à déterminer s'il s'agit de la règle à choisir pour <tt>pluralRule</tt>. En outre, vous y trouverez une brève description de chaque forme plurielle suivie de quelques exemples de nombres entrant dans cette forme particulière. -

Pour une règle de pluriel donnée, l'ordre dans lequel les formes de pluriels sont données est le même que celui dans lequel vous devrez localiser un mot en les séparant par des points-virgules. Par exemple, le français utilise la règle plurielle 2 et la localisation de <tt>pluriels</tt> nécessiterait une chaîne de type « pluriel;pluriels » où le premier mot est la forme au singulier et le second la forme plurielle générique. -

-

Règle de pluriel n°0 (1 forme)

-

Familles : asiatiques (chinois, japonais, coréen, vietnamien), turques/altaïques (turc), thaïes
-tout : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, …
-

-

Règle de pluriel n°1 (2 formes)

-

Familles : germaniques (danois, néerlandais, anglais, féroïen, frison, allemand, norvégien, suédois), finno-ougriennes (estonien, finnois, hongrois), isolats (basque), latines/grecques (grec), sémitiques (hébreu), romanes (italien, portugais, espagnol, catalan)
-pour 1 : 1
-tout le reste : 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, …
-

-

Règle de pluriel n°2 (2 formes)

-

Familles: romanes (français, portugais brésilien)
-pour 0 ou 1 : 0, 1
-tout le reste: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, …
-

-

Règle de pluriel n°3 (3 formes)

-

Familles : baltes (letton)
-pour 0 : 0
-se termine par 1, sauf 11: 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291, …
-tout le reste : 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, …
-

-

Règle de pluriel n°4 (3 formes)

-

Familles : celtiques (gaélique écossais)
-pour 1 : 1
-pour 2 : 2
-tout le reste : 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, …
-

-

Règle de pluriel n°5 (3 formes)

-

Familles : romanes (roumain)
-pour 1 : 1
-pour 0 ou se terminant par 01-19 : 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, …
-tout le reste : 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, …
-

-

Règle de pluriel n°6 (3 formes)

-

Familles : baltes (lituanien)
-se termine par 1, sauf 11 : 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291, …
-se termine par 0 ou par 10-20 : 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, …
-tout le reste : 2, 3, 4, 5, 6, 7, 8, 9, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 72, 73, …
-

-

Règle de pluriel n°7 (3 formes)

-

Familles : slaves (croate, serbe, russe, ukrainien)
-se termine par 1, sauf 11 : 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291, …
-se termine par 2-4, sauf 12-14 : 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104, 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164, 172, 173, 174, 182, 183, …
-tout le reste : 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 35, 36, 37, 38, 39, 40, 45, 46, 47, 48, 49, 50, 55, 56, 57, 58, 59, 60, 65, 66, 67, 68, 69, 70, 75, 76, 77, …
-

-

Règle de pluriel n°8 (3 formes)

-

Familles : slaves (slovaque, tchèque)
-pour 1 : 1
-pour 2-4 : 2, 3, 4
-tout le reste : 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, …
-

-

Règle de pluriel n°9 (3 formes)

-

Familles : slaves (polonais)
-pour 1 : 1
-se termine par 2-4, sauf 12-14 : 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104, 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164, 172, 173, 174, 182, 183, …
-tout le reste : 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 39, 40, 41, 45, 46, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 65, 66, 67, 68, …
-

-

Règle de pluriel n°10 (4 formes)

-

Familles : slaves (slovène, sorabe)
-se termine par 01 : 1, 101, 201, …
-se termine par 02 : 2, 102, 202, …
-se termine par 03-04 : 3, 4, 103, 104, 203, 204, …
-tout le reste : 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, …
-

-

Règle de pluriel n°11 (5 formes)

-

Familles : celtiques (gaélique irlandais)
-pour 1 : 1
-pour 2 : 2
-pour 3-6 : 3, 4, 5, 6
-pour 7-10 : 7, 8, 9, 10
-tout le reste : 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, …
-

-

Règle de pluriel n°12 (4 formes)

-

Familles : sémitiques (arabe)
-pour 1 : 1
-pour 2 : 2
-pour 0 ou 3-10 : 0, 3, 4, 5, 6, 7, 8, 9, 10
-tout le reste : 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, …
-

-

Règle de pluriel n°13 (4 formes)

-

Familles : sémitiques (maltais)
-pour 1: 1
-pour 0 ou se termine par 01-10 : 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, …
-se termine par 11-19 : 11, 12, 13, 14, 15, 16, 17, 18, 19, 111, 112, 113, 114, 115, 116, 117, 118, 119, 211, 212, 213, 214, 215, 216, 217, 218, 219, …
-tout le reste : 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, …
-

-

Règle de pluriel n°14 (3 formes)

-

Familles : slaves (macédonien)
-se termine par 1 : 1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 201, 211, 221, 231, 241, 251, 261, 271, 281, 291, …
-se termine par 2 : 2, 12, 22, 32, 42, 52, 62, 72, 82, 92, 102, 112, 122, 132, 142, 152, 162, 172, 182, 192, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, …
-tout le reste : 0, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 53, 54, 55, 56, 57, 58, 59, 60, 63, …
-

-

Exemples

-

Suivent quelques exemples pour diverses langues et une brève explication du processus. -

-

Français

-

Dans certaines régions francophones, le zéro est traité comme un pluriel alors que dans d'autres c'est un singulier. Le seul autre singulier est 1 alors que tout le reste est au pluriel. Choisissez donc la règle de pluriel n°1 ou n°2. -

-pluralRule=2
-seconds=seconde;secondes
-minutes=minute;minutes
-hours=heure;heures
-days=jour;jours -
-

Comme souvent lorsque vous localisez des mots, l'accord en genre peut vous forcer à réarranger les mots de manière à ce que le genre soit toujours identique (seconde est féminin alors que jour est masculin). -

-

Chinois

-

Un mot ne change pas s'il est précédé d'un nombre, donc tous les nombres utilisent la même forme plurielle. Comme il n'y a qu'une seule forme il s'agit de la règle de pluriel n°0. Pour chaque mot à localiser, il n'y a que ce mot à préciser, sans qu'il soit nécessaire d'ajouter des points-virgules. -

-pluralRule=0
-seconds=秒
-minutes=分
-hours=時
-days=日 -
-

-

Polonais

-

Il existe une forme de singulier pour 1, une forme plurielle pour 2-4, et une autre pour 5-21. À partir de là, 22 est la même forme que 2. La règle de pluriel n°7 a bien « se termine par 2-4, sauf 12-14 », mais la forme du singulier comprend tout ce qui se termine par 1 à part 11. La règle n°9 est donc préférable puisqu'elle a correctement la forme au singulier pour 1 uniquement. -

-pluralRule=9
-seconds=sekunda;sekundy;sekund
-minutes=minuta;minuty;minut
-hours=godzina;godziny;godzin
-days=dzień;dni;dni -
-

Bien que les deux dernières formes plurielles de « days » soient les mêmes, elles sont toutes deux nécessaires car il doit y avoir trois formes plurielles pour chaque mot. -

-

Sorabe

-

Quatre formes plurielles existent : nominatif singulier, nominatif double, nominatif pluriel, génitif pluriel. Ceci correspond à la règle de pluriel n°10. -

-pluralRule=10
-seconds=sekunda;sekundźe;sekundy;sekundow
-minutes=mjeńšina;mjeńšinje;mjeńšiny;mjeńšin
-hours=hodźina;hodźinje;hodźiny;hodźin
-days=dźeń;dnjej;dny;dnjow -
-

-

Extension de test

-

Pour vous assurer de choisir la bonne règle de pluriel et fournir suffisamment de formes plurielles pour une chaîne, utilisez l'extension pluralForm Checker. Après son installation, elle devrait être accessible depuis le menu Outils. -

Pour l'utiliser, remplissez la liste des fichiers properties et des chaînes à vérifier et cliquez sur le bouton. L'extension chargera chaque chaîne et affichera les formes plurielles dans un tableau. La sélection d'une entrée du tableau remplira la boîte inférieure avec des exemples d'utilisation du mot pour certains nombres. -

Image:pluralForm-checker.0.3.png -

Installation de l'extension pluralForm Checker v0.3 -

-

Entrées pour l'extension

-

Cette liste devrait être maintenue pour contenir tous les mots nécessitant des formes plurielles. Les utilisateurs de l'extension pourront alors copier-coller cette entrée. -

-chrome://mozapps/locale/downloads/do...tes,hours,days
-chrome://mozapps/locale/downloads/do...dsTitlePercent
-chrome://browser/locale/browser.prop...ausedDownloads -
-

-

Historique des versions

-

0.1 : Version initiale avec vérification de pluralRule, chargement de properties en entrée, génération de tableaux, exemple d'affichage en sortie
-0.2 : Utilisation de PluralForm.numForms() pour obtenir le nombre de formes au lieu d'essayer de le déterminer localement afin de mieux gérer les futures règles — nécessite une compilation ultérieure à 2007-01-27
-0.3 : Génération d'une liste des nombres tombant dans chaque forme plurielle afin de réduire la sortie d'exemples à 3 par forme tout au plus -

-

Développement avec PluralForm

-

La fonctionnalité permettant d'obtenir les formes plurielles correctes est fournie par un module JavaScript, <tt>PluralForm.jsm</tt>. Ce module fournit un ensemble de méthodes pour la localisation vers la locale courante du navigateur ainsi que pour localiser en utilisant la règle de pluriel désirée. Cette dernière possibilité de spécifier une règle de pluriel est utile pour les extensions car celles-ci ne devront pas nécessairement être localisées dans la même locale que le navigateur. -

-

Chargement de <tt>PluralForm.jsm</tt>

-

Le chargement du module PluralForm depuis JavaScript est simple avec Components.utils.import. Placez simplement la ligue qui suit à un endroit quelconque qui sera évalué avant d'utiliser PluralForm. Par exemple en haut de votre fichier JavaScript. -

-
Components.utils.import("resource://gre/modules/PluralForm.jsm");
-

Les méthodes <tt>get</tt> et <tt>numForms</tt>

-

Ces méthodes utilisent la locale courante du navigateur spécifiée par la valeur <tt>pluralRule</tt> de <tt>chrome://global/locale/intl.properties</tt>. -

-
/**
- * Obtient la forme plurielle correcte d'un mot basée sur le nombre
- *
- * @param aNum
- *        Le nombre pour lequel décider de la forme plurielle à utiliser
- * @param aWords
- *        Une chaîne séparée par des points-virgules (;) composée des mots pour lesquels obtenir la forme plurielle
- * @return La forme plurielle appropriée pour le mot
- */
-string pluralForm
-get(int aNum, string aWords)
-
/**
- * Obtient le nombre de formes pour la règle de pluriel courante
- *
- * @return The number of forms
- */
-int numForms
-numForms()
-

Voici un exemple d'utilisation de ces méthodes : -

-
// Chargement de PluralForm et pour cet exemple, utilisation du français
-Components.utils.import("resource://gre/modules/PluralForm.jsm");
-
-// PluralForm.get attend une liste de mots séparés par des points-virgules
-let forms = "forme;formes";
-// On va choisir la forme plurielle correcte selon le nombre suivant
-let numForms = PluralForm.numForms();
-
-// Affiche la forme plurielle correcte pour « formes »
-print("Cette locale a " + numForms + " " + PluralForm.get(numForms, forms) + ".");
-
-

L'exemple ci-dessus fonctionne, mais est toujours difficile à localiser parce qu'on concatène des chaînes en présupposant une structure grammaticale particulière. Le code suivant serait préférable : -

-
Components.utils.import("resource://gre/modules/PluralForm.jsm");
-
-let forms = "Cette locale a une forme.;Cette locale a #1 formes.";
-let numForms = PluralForm.numForms();
-
-// Pour le français, ceci afficherait « Cette locale a 2 formes. »
-print(PluralForm.get(numForms, forms).replace("#1", numForms);
-

Remarquez dans l'exemple qui précède que le code peut être écrit pour gérer des remplacements ou non dans certaines formes de la chaîne. De plus, le localiseur a le contrôle sur la position du remplacement par rapport au reste du texte. -

Bien sûr, les chaînes à localiser seront placées dans un fichier séparé comme monextension.properties au lieu d'être codées en dur dans le fichier de code JavaScript. -

Les trois extraits de fichiers suivants montrent comment utiliser PluralForm avec des fichiers <tt>.xul</tt>, <tt>.properties</tt> et <tt>.js</tt>. -

<tt>downloads.xul</tt> : -

-
<stringbundleset>
-  <stringbundle id="strings" src="chrome://downloads.properties"/>
-</stringbundleset>
-

<tt>downloads.properties</tt> en anglais : -

-
# LOCALIZATION NOTE (downloadsTitleFiles): Semi-colon list of plural forms.
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #1 number of files
-# example: 111 files - Downloads
-downloadsTitleFiles=#1 file - Downloads;#1 files - Downloads
-
-# LOCALIZATION NOTE (timePair): #1 time number; #2 time unit
-# example: 1 second; 11 seconds
-timePair=#1 #2
-seconds=second;seconds
-

<tt>downloads.properties</tt> en français : -

-
# LOCALIZATION NOTE (downloadsTitleFiles): Semi-colon list of plural forms.
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #1 number of files
-# example: 111 files - Downloads
-downloadsTitleFiles=#1 fichier - Téléchargements;#1 fichiers - Téléchargements
-
-# LOCALIZATION NOTE (timePair): #1 time number; #2 time unit
-# example: 1 second; 11 seconds
-timePair=#1 #2
-seconds=seconde;secondes
-

<tt>downloads.js</tt> : -

-
Components.utils.import("resource://gre/modules/PluralForm.jsm");
-let getStr = function(string) document.getElementById("strings").getString(string);
-
-// Get the correct plural form for the title
-let numDownloads = 3;
-let title = PluralForm.get(numDownloads, getStr("downloadsTitleFiles"));
-// Put in the correct number of downloads
-print(title.replace("#1", numDownloads));
-
-// Get the correct plural form of seconds
-let timeLeft = 55;
-let seconds = PluralForm.get(timeLeft, getStr("seconds"));
-// Print the localized string for "55 seconds"
-print(getStr("timePair").replace("#1", timeLeft).replace("#2", seconds));
-

La méthode <tt>makeGetter</tt>

-

Si vous écrivez une extension, vous voudrez utiliser <tt>makeGetter</tt> au lieu de <tt>PluralForm.get()</tt> ou <tt>PluralForm.numForms()</tt> parce qu'il utilisateur installant l'extension dans une locale différente utiliserait les chaînes fournies par la locale par défaut de votre extension. Par exemple, votre extension localisée pour l'anglais avec la règle de pluriel #1, qui attend deux formes plurielles, est installée sur une version de Firefox avec la règle de pluriel #4, qui attend trois formes. -

-
/**
- * Crée une paire de fonctions de formes plurielles pour le numéro de règle de pluriel donné.
- *
- * @param aRuleNum
- *        Le numéro de règle de pluriel pour lequel créer des fonctions
- * @return Une paire : [fonction qui récupère la forme plurielle correcte,
- *                  fonction qui renvoie le nombre de formes plurielles]
- */
-[string pluralForm get(int aNum, string aWords), int numForms numForms()]
-makeGetter(int aRuleNum)
-

Voici un exemple d'utilisation de <tt>makeGetter</tt> : -

-
Components.utils.import("resource://gre/modules/PluralForm.jsm");
-
-// Utilisons le gaélique irlandais (règle de pluriel #11)
-let [get, numForms] = PluralForm.makeGetter(11);
-
-// Fabriquons quelques valeurs à utiliser avec « get »
-let dummyText = "form 1;form 2;form 3;form 4;form 5";
-let dummyNum = 10;
-
-// Dans le cas du gaélique irlandais, la valeur 10 utilise la forme plurielle #4, ainsi « form 4 » est affiché
-print(get(dummyNum, dummyText));
-

Dans cet exemple, la règle de pluriel du gaélique irlandais était codée en dur, mais elle pourrait être une valeur spécifiée dans le fichier .properties. Donc, pour votre extension, spécifiez une valeur de pluralRule dans le fichier .properties et appelez <tt>PluralForm.makeGetter(pluralRuleFromProperties)</tt> en vous assurant de sauvegarder les deux fonctions renvoyées. (Vous pouvez utiliser l'assignation déstructurante de JavaScript 1.7 pour plus de clarté.) Les fonctions renvoyées se comportent tout à fait comme <tt>PluralForm.get()</tt> et <tt>PluralForm.numForms()</tt> sauf qu'elles utilisent la règle de pluriel spécifiée plutôt que la règle de pluriel par défaut. -

-

Crédits

-

Le code de formes plurielles a été implémenté pour la première fois pour le {{ Bug(394516) }} — Figure out a remaining-time rounding scheme for minutes -> hours/days
-Les règles de pluriel et leurs familles sont dérivées de la documentation de GNU <tt>gettext</tt>. -


-

-
-
-{{ languages( { "en": "en/Localization_and_Plurals", "es": "es/Localizaci\u00f3n_y_Plurales", "ja": "ja/Localization_and_Plurals", "pl": "pl/Lokalizacja_i_liczba_mnoga" } ) }} diff --git "a/files/fr/manuel_de_compatibilit\303\251_gecko/index.html" "b/files/fr/manuel_de_compatibilit\303\251_gecko/index.html" deleted file mode 100644 index 76438b65d5..0000000000 --- "a/files/fr/manuel_de_compatibilit\303\251_gecko/index.html" +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: Manuel de compatibilité Gecko -slug: Manuel_de_compatibilité_Gecko -tags: - - Développement_Web - - Développement_inter-navigateur - - Gecko -translation_of: Archive/Mozilla_Gecko_Compatibility_Handbook ---- -

L'objectif de ce manuel est de vous aider à mettre à jour vos sites Web pour qu'ils fonctionnent dans les navigateurs respectant les standards du Web et détectent correctement Gecko.

-

Si vous ne connaissez pas les standards du Web, l'article Utilisation des standards dans vos pages Web (à traduire de en:Using Web Standards in Your Web Pages) constitue une introduction utile. Consultez également le site OpenWeb.

-

Gecko est un composant navigateur Web embarquable, développé dans le cadre du projet open source Mozilla. Il est basé sur les standards du W3C plutôt que sur une approche propriétaire typique des solutions du passé. Le respect des standards du Web simplifie la compatibilité inter-navigateurs lors du développement et permet de mettre en œuvre des solutions d'accessibilité (en).

-

De Netscape 4.x à Gecko

-

Depuis 1997, de nombreux sites Internet ont été conçus pour fonctionner avec Microsoft Internet Explorer 4 ou Netscape Navigator 4. Ces navigateurs ont été développés avant que les recommandations du W3C pour HTML, CSS, et le DOM n'existent.

-

Ces navigateurs plus anciens non basés sur les standards du Web s'opposent à Gecko sur un certain nombre de points :

- -

Gecko est un moteur de rendu multiplateforme, compatible avec un grand nombre de versions de systèmes d'exploitation, dont Windows XP, Mac OS et Linux. De par sa nature multiplateforme, ses fonctionnalités sont en général identiques quelle que soit la plateforme, contrairement aux versions Mac et Windows d'Internet Explorer qui sont des programmes distincts pouvant donc se comporter de façons fort différentes.

-

Test de compatibilité rapide

-

Si votre site utilise les technologies propriétaires de Netscape 4.x et de Microsoft, consultez l'article Utilisation des standards dans vos pages Web (à traduire) pour prendre rapidement connaissance des principes de bases des standards. Ce test de compatibilité sera d'autant plus bénéfique pour les sites utilisant un code simple ou ayant commencé une mise à jour pour supporter les standards.

-

Préparation des navigateurs pour le test

-

Les nombreux navigateurs utilisant Gecko ne contiennent pas tous Firefox ou Netscape dans leur chaîne user-agent. Ainsi, il est important de vérifier que vous détectez correctement des navigateurs comme AOL pour Mac OS X.

-

Vous pouvez télécharger un certain nombre de navigateurs Mozilla. Ou, si vous utilisez la détection d'user-agent, vous pouvez installer une extension pour Firefox ou Mozilla qui vous permettra de « simuler » les chaînes user-agent de ces navigateurs Gecko. Voici comment faire :

-
  1. Lancez SeaMonkey, Firefox ou l'ancienne suite Mozilla. L'avantage d'utiliser ces navigateurs est qu'en détectant uniquement les chaînes Netscape ou Netscape6, vous tomberez sur les éventuels problèmes directement.
  2. Installez l'extension User Agent Switcher (en).
  3. Après le redémarrage de votre navigateur, ajoutez les chaînes User-Agent pour lesquelles vous désirez tester la détection (Outils | User Agent Switcher | Options | Options… | User Agents | Ajouter…). Une fois la boîte de dialogue complétée (cela devrait ressembler à la capture ci-dessous), cliquez sur « OK » et fermer la fenêtre « Options ».

    Image:GeckoCompatibilityHandbook-Configure-UASwitcher.PNG
  4. Vous pouvez maintenant commencer à utiliser la chaîne User-Agent que vous venez de créer en cliquant sur Outils | User Agent Switcher | Le nom que vous avez utilisé. Vous pouvez vérifier que la chaîne à changée en regardant dans Aide | À propos.
  5. -
-

Vous pourrez trouver les chaînes User Agent des navigateurs Gecko sur cette page. Si possible, téléchargez également les différents navigateurs pour les tester individuellement.

-

Examen des résultats

-

Tous les scénarios suivants sont en rapport avec la détection du navigateur. Pour des solutions concernant les problèmes courant veuillez lire la suite de ce manuel.

-
Problème : Le site respecte les standards Web mais ne s'affiche pas correctement
-

Essayez d'utiliser la chaîne User Agent d'Internet Explorer 6. Si cela fonctionne, paramétrez la détection pour fournir le contenu IE 6 aux visiteurs dont les chaînes User Agent contiennent Gecko. IE 6.x est en fait plus proche des navigateurs Gecko que ne l'était Netscape 4.x, de fait d'un meilleur support des standards du W3C.

-
Problème : Le site certifié Netscape 6.x s'affiche incorrectement dans les autres navigateurs
-

Si votre site est déjà compatible avec Gecko, essayez de revenir à une chaîne User Agent de Netscape 6. Si cela semble bon, vous ne détectez probablement que Netscape ou Netscape6. Détecter Gecko est le meilleur moyen de corriger cela afin de prendre en compte les utilisateurs de Mozilla, SeaMonkey, CompuServe 7, etc. (Article connexe) (À traduire de en:Browser Detection and Cross Browser Support)

-
Problème : Le site pose problème dans tous les navigateurs Gecko
-

Si le problème se produit toujours, consultez la section de dépannage de ce manuel. De plus, si vous utilisez des technologies propriétaires de Netscape 4.x et de Microsoft, consultez Utilisation des standards dans vos pages Web pour un tutoriel rapide sur les différences avec Gecko.

-

Problèmes liés à AOL ou à CompuServe

-

Même si votre site s'affiche correctement dans Netscape 7.x, il est important de le tester également dans AOL pour Mac OS X et CompuServe 7 pour vérifier la détection du navigateur (à traduire de en:Browser Detection and Cross Browser Support) et les problèmes réseau.

-

Test d'AOL derrière un pare-feu

-

Si vous devez vous connecter à AOL derrière un pare-feu, AOL a ouvert les ports TCP 5190 et 11523 pour que vous puissiez communiquer avec le logiciel client d'AOL. Ainsi vous pourrez tester votre site dans un client AOL derrière votre pare-feu, à condition que votre administrateur réseau ait ouvert ces ports.

-

Vous devez être connecté à Internet pour tester votre site dans AOL ; il n'est pas possible d'accéder à votre site depuis un machine locale via votre réseau local, sans une connexion Internet. Pour plus d'informations, voir Webmaster@AOL (en).

-

Référence de dépannage rapide

-

Comme expliqué dans Utilisation des standards dans vos pages Web, coder pour obtenir une compatibilité inter-navigateur nécessite de produire un balisage standard que les navigateurs Gecko, Netscape 4 et IE pourront rendre correctement.

- -
Symptôme Problème possible Solution
Le site s'affiche correctement dans Netscape 6.x mais pas dans les autres navigateurs Gecko. La détection du navigateur par JavaScript détecte Netscape 6.x mais pas les autres navigateurs Gecko.
  • Mettez à jour le JavaScript de la détection du navigateur pour qu'il détecte « Gecko » (article connexe).
Le contenu s'affiche différemment dans les navigateurs Gecko et Internet Explorer. Utilisation de balisage propriétaire ou invalide (tel que celui généré par les applications Microsoft Office).
  • Utilisez les outils de validation HTML et CSS du W3C pour valider la page Web. Corrigez les erreurs et remplacez le code propriétaire où c'est possible.
  • Mettez à jour vos outils d'édition Web avec des versions respectueuses des standards du W3C et des navigateurs Gecko.
Le contenu s'affiche différemment dans les navigateurs Gecko et Internet Explorer. La console JavaScript de Netscape, Mozilla ou Firefox affiche des erreurs concernant document.all, document.layers, document.<propriété> qui ne sont pas définis à cause d'une détection incorrecte du navigateur ou de l'utilisation de JavaScript propriétaire.
  • Mettez à jour votre détection de navigateur pour détecter correctement les navigateurs Gecko.
  • Mettez à jour les API pour utiliser des versions plus récentes conformes aux standards.
  • Mettez à jour vos outils d'édition Web avec des version supportant les standards du W3C et les navigateurs Gecko.
Le contenu s'affiche différemment dans les navigateurs Gecko et Internet Explorer.
  • Votre CSS repose sur les bogues d'implémentation de CSS par Internet Explorer.
  • Internet Explorer ne traite pas correctement les noms d'ID et de classes en en ignorant la casse, alors que les navigateurs Gecko respectent la casse. Une utilisation inconsistante de la casse entre la feuille de styles CSS et les éléments HTML en ce qui concerne les ID et noms de classe provoquera la non application des styles dans les navigateurs Gecko.
  • Internet Explorer ne spécifie pas correctement les hauteurs et largeurs des éléments de type en-ligne tels que SPAN.
  • Internet Explorer n'implémente par correctement le modèle de boîtes CSS (padding, margin, border).
  • N'utilisez pas les implémentations CSS invalides de Internet Explorer. N'utilisez que les fonctionnalités standard et inter-navigateurs de CSS. Soyez consistant en spécifiant des noms de classes et d'ID entre vos documents HTML et vos feuilles de style CSS. Ne spécifiez pas de hauteurs ou de largeurs sur les éléments en-ligne comme les span. Utilisez les spécifications de modèle de boîtes standard CSS.
Le contenu s'affiche différemment dans les navigateurs Gecko et Internet Explorer. Mauvais mode de rendu spécifié par le DOCTYPE.
  • Si les pages doivent être affichées dans de vieilles versions des navigateurs telles que Netscape Navigator 4 ou Internet Explorer 4 et 5, veillez à bien spécifier le mode de rendu « Quirks » à l'aide du DOCTYPE.
Les images sont rendues sans espace dans Internet Explorer mais s'affichent avec un espace entre elles dans les navigateurs Gecko. Mauvaise spécification du mode de rendu par le DOCTYPE.
  • Le mode de rendu standard a été déclenché par le DOCTYPE spécifié. Changez le DOCTYPE pour appeler le mode de rendu « Quirks  » à la place. Plus d'informations….
Cliquer sur un lien renvoie une erreur 404-page non trouvée, mais fonctionne avec Internet Explorer. Le lien utilise peut-être une forme non valide d'URL relative.
  • Changez les URL relatives de http://directory/... en directory/... ou utilisez des chemins absolus pour les URL, comme http://example.com/directory/...
  • Vérifiez que tous les hyperliens utilisent des barres obliques dans le sens correct (/).
Cliquer sur un lien déclenche un « téléchargement » ou affiche le code HTML plutôt que de rendre correctement la page Web, mais fonctionne comme prévu dans Internet Explorer Le serveur Web a spécifié incorrectement le type MIME du contenu. Internet Explorer essaie de deviner le type MIME des documents tandis que les navigateurs Gecko font confiance au serveur Web pour connaitre le bon type MIME. Gecko n'essaie pas de « sniffer » le type MIME pour un document afin de réduire les possibilités de traiter des contenus non sûrs ou dangereux déguisés en un type MIME sûr.
  • Utilisez l'utilitaire HEAD de Perl ou PHP pour déterminer le type MIME réel utilisé par le serveur Web. Corrigez tous les types incorrects sur le serveur (article connexe).
La feuille de style n'est pas reconnue. La présence d'un attribut title dans un élément link qui se réfère à une feuille de style externe peut faire que celle-ci soit ignorée.
  • Assurez-vous que toute feuille de style devant toujours appliquée est persistante et non simplement préférée (article connexe).
Échec de la connexion à un site sécurisé avec un navigateurs Gecko, mais pas avec Internet Explorer. Le serveur n'implémente pas correctement la négociation de secours pour SSL.
  • L'administrateur du serveur Web doit mettre à jour le logiciel SSL. Pour naviguer sur un site utilisant une implémentation défectueuse de SSL, les visiteurs doivent désactiver TLS dans Netscape 6/7 ou Mozilla jusqu'à ce que le site mettre à jour les logiciels vers des versions supportant correctement ce protocole.
Les menus DHTML implémentés à l'aide de la fonction HierMenu ont des problèmes. La version de HierMenu est obsolète. Les premières versions de HierMenu ne supportent que Netscape Navigator 4.x et Internet Explorer 4.x. Des versions un peu plus récentes supportent Netscape 6 ; cependant, dans Netscape 6.1 et au-dessus, le support des propriétés propriétaires offsetXXX d'Internet Explorer fait que HierMenu place des popups aux mauvaises positions. Les dernières versions de HierMenu supportent pleinement tous les navigateurs Gecko.
  • Mettez à jour avec la version la plus récente de HierMenu (en).
-

Problèmes courants liés au code et au serveur

-

Cette section détaille les solutions les plus courantes aux problèmes affectant les navigateurs respectant les standards ainsi que les questions spécifiques à Gecko.

-

HTML propriétaire

-

Problème : Utilisation du balisage HTML propriétaire spécifique à un navigateur (tel que <LAYER>).

-

Comme un navigateur est supposé ignorer les balises HTML qu'il ne connaît pas et rendre le contenu entre ces balises, les auteurs de pages Web ont combiné les codes HTML propriétaires afin que leurs pages s'affiche correctement dans chaque navigateur.

-

Les navigateurs Gecko ignoreront les balises HTML propriétaires d'Internet Explorer et Netscape Navigator 4. Ainsi, une page Web peut ne pas s'afficher pas dans les navigateurs Gecko de la même façon qu'elle le ferait dans Internet Explorer 4 ou dans Netscape Navigator 4.

-

L'exemple principal est l'utilisation de la balise HTML propriétaire <LAYER> de Netscape Navigator 4, couramment utilisée pour la navigation dans un site. Pour les alternatives respectant les standards, voir Updating DHTML Web Pages for Next Generation Browsers.

-

On peut rapidement vérifier l'utilisation de balisage HTML propriétaire dans une page en la soumettant au validateur HTML du W3C en utilisant le DOCTYPE HTML 4.01. Nous aborderons les DOCTYPE plus en détail dans la suite de cet article, mais en substance, le DOCTYPE doit indiquer au navigateur la version de HTML utilisée dans la page.

-

La Référence croisée des éléments HTML fournit une liste des tous les éléments HTML supportés dans Netscape 4, les navigateurs Gecko, Internet Explorer 4 et supérieurs, et peut être utilisée pour déterminer les éléments supportés par tous les navigateurs.

-

Détection du navigateur

-

Problème : Mauvaise détection du navigateur ou Sniffing (reniflage)

-

Même si la détection du navigateur est utile pour permettre aux auteurs d'écrire des pages Web qui ne fonctionneront que dans certains navigateurs spécifiques, une détection erronée peut conduire à une très mauvaise expérience utilisateur.

-

De nombreux problèmes peuvent survenir lorsqu'une page Web utilise la détection du navigateur pour déterminer quelles fonctionnalités propriétaires utiliser dans un navigateur particulier.

-

Consultez l'article Détection du navigateur et support inter-navigateur pour une meilleure approche de la détection des navigateurs. (À traduire de en:Browser Detection and Cross Browser Support

-

Solutions spécifiques à un navigateur

-

Problème : Le code contient des solutions de rechange pour les bogues et comportements spéciaux de certains navigateurs (quirks).

-

Comme une page Web n'est pas jugée selon la façon dont elle est codée mais sur son affichage dans les navigateurs, les auteurs on développé de nombreuses techniques qui tirent avantage des caractéristiques particulières des navigateurs pour obtenir les effets souhaités. Ceci revêt une importance particulière étant donné que les toutes premières implémentations de CSS dans Internet Explorer 4 et dans Netscape Navigator 4 comportent de nombreux bogues. Afin d'obtenir les effets désirés, les auteurs ont écrit leur code HTML et des scripts JavaScript qui dépendaient de ces bogues pour fonctionner correctement.

-

Cela peut provoquer des problèmes avec les navigateurs Gecko, qui implémentent strictement les standards. La vieille approche de « coder pour les bugs » ne fonctionne plus dans Mozilla, Netscape 6.x et 7.x et tous les autres navigateurs Gecko.

-
Exemple — Inclusion de formulaires dans un tableau
-

HTML non valide pour éliminer les retours à la ligne dans <FORM>.

-

Dans les anciens navigateurs, cela permettait à la cellule TD d'envelopper un élément input au plus près.

-
<table border="1">
-  <tr>
-    <form name="form2">
-      <td>
-        <input type="text">
-      </td>
-    </form>
-  </tr>
-<table>
-
-

Cette approche est communément utilisée pour contourner le fait que <FORM> est un élément bloc en HTML et qu'il commencera tout naturellement sur une nouvelle ligne dans la page. Malheureusement, ce code n'est pas valide et peut provoquer des erreurs lors de l'affichage et de l'application de règles de styles CSS.

-
Utilisation incorrecte de la notation de balise XML vide
-

De nombreux auteurs utilisent la notation de balise XML vide (<tag />) dans leurs fichiers HTML. En XML, une balise vide n'a jamais de contenu. Les règles de compatibilité ascendante du XHTML stipulent que les éléments vides peuvent être utilisés en faisant suivre le nom de la balise par une espace suivie d'un signe / comme dans <tag />. Pour être compatible, vous devez avoir une espace avant />. De plus, vous ne devez utiliser cette notation XML que pour les éléments HTML qui sont toujours vides — et non pour les éléments HTML possédant une balise de fermeture optionnelle.

-

Par exemple, il est correct d'utiliser <br /> pour coder <br>, bien qu'il n'y ait aucun avantage à le faire dans des documents HTML. Mais, il est incorrect d'utiliser <option /> pour coder <option>. Pour comprendre pourquoi, considérons ce qui suit :

- -
HTML sans balise de fermeture optionnelle Équivalent HTML avec les balises de fermetures optionnelles
-<select>
-<option>OptionValue
-</select>
-<select>
-<option>OptionValue</option>
-</select>
-

Maintenant, regardons ce qui se passe lorsqu'on utilise la notation de balise XML vide : <option />.

- -
HTML avec notation de balise XML vide Équivalent HTML avec balise de fermeture
-<select>
-<option />OptionValue
-</select>
-<select>
-<option></option>OptionValue
-</select>
-

c'est tout simplement faux. Si vous devez utiliser la notation de balise XML vide, vous ne devez le faire que pour des éléments HTML ne possédant jamais de contenu — pas pour les éléments HTML dont la balise de fermeture est optionnelle.

-
Les ID CSS devraient être sensibles à la casse
-

Gecko implémente correctement la sensibilité à la casse des identificateurs CSS ID et affichera correctement cet exemple. Cependant Internet Explorer ne prend pas en compte la casse des identificateurs CSS ID et affichera incorrectement cet exemple.

-
<style type="text/css">
-  #id1 { text-decoration: line-through; }
-  #ID1 { text-decoration: underline; }
-</style>
-<div id="id1">
-  Devrait être barré (line-through)
-</div>
-<div id="ID1">
-  Devrait être souligné (underline)
-</div>
-

-(EXEMPLE SUPPRIMÉ)-

-

Note : Le validateur HTML du W3C marquera les attributs des ID HTML comme dupliqués si seule la casse diffère. Il semble y avoir un manque de cohérence en la recommandation HTML 4.01 et la déclaration SGML pour le HTML dans laquelle les attributs des identificateurs ID sont sensibles à la casse. C'est d'autant plus malheureux que le validateur HTML est, pour les développeurs Web, un des principaux moyens d'apprentissage des standards.

-

En raison de la fréquence de cette erreur, Netscape 6.2 a également traité les attributs des ID CSS comme étant insensibles à la casse en mode de compatibilité (mode quirks). Si vous invoquez le mode de respect des standards, vous devriez écrire vos CSS en respectant cette sensibilité à la casse.

-
Les classes CSS devraient être sensibles à la casse
-

Gecko implémente correctement la sensibilité à la casse des classes CSS CLASS et affichera correctement cet exemple. Cependant Internet Explorer ne prend pas en compte la casse des classes CSS CLASS et affichera incorrectement cet exemple.

-
<style type="text/css">
-  .class1 { font-size: 1em; }
-  .CLASS1 { font-size: 2em; }
-</style>
-<div>
-<div class="class1">
-  devrait avoir la taille font-size: 1em;
-</div>
-<div class="CLASS1">
-  devrait avoir la taille font-size: 2em;
-</div>
-

-(EXEMPLE SUPPRIMÉ)-

-

En raison de la fréquence de cette erreur, Netscape 6.2 a également traité les attributs des CLASS CSS comme étant insensibles à la casse en mode de compatibilité (mode quirks). Si vous invoquez le mode de respect des standards, vous devriez écrire vos CSS en respectant cette sensibilité à la casse.

-
URL relatives incorrectes
-

Une URL relative se réfère au même serveur Web qui héberge la page. Une URL relative qui se réfère à un chemin relatif par rapport au répertoire où est stockée la page Web ressemble à chemin/fichier.html. Les URL relatives qui se réfèrent à un chemin relatif par rapport au répertoire racine du serveur ressemblent à /chemin/fichier.html.

-

Les anciens navigateurs acceptaient l'utilisation non valide de http://chemin/ pour les URL relatives au répertoire racine du serveur Web, ce qui n'est pas le cas des navigateurs Gecko. Pour spécifier correctement le lien d'un page Web relative au répertoire racine du serveur, utilisez la forme /chemin/fichier.html.

-
Utilisation non valide des espaces dans les noms d'attributs
-

De nombreux auteurs semblent avoir un penchant pour l'utilisation d'espaces dans les noms. Un attribut name ou id en HTML 4.01 ne doit pas contenir d'espace. Ceci peut poser des problèmes avec les navigateurs Gecko, spécialement dans les maps d'images. Vous devriez vérifier que les noms de vos attributs ne comportent que des caractères valides.

-

Mauvais code du aux vieilles API et aux outils obsolètes

-

Problème : Les API sont obsolètes ou les outils d'éditions génèrent un code HTML non standard.

-

De nombreuses versions passées des API les plus communément utilisées sur le Web, telle que DYNAPI (en), ne supportent pas Gecko pour l'une ou l'autre raison citée ci-dessus. C'est également le cas d'anciennes version des outils d'édition Web tel que Macromedia Dreamweaver 2 et 3.

-

Les versions les plus récentes de ces API et de ces outils supportent Gecko. Par exemple, DYNAPI (en) est maintenant développé sur SourceForge et offre une version compatible avec Gecko. Les récentes versions des Outils d'édition respectueux des standards supportent Gecko.

-

Mauvais DOCTYPE

-

Problème : une déclaration DOCTYPE incorrecte peut complètement altérer la présentation de la page.

-

Gecko, Internet Explorer pour Mac OS et Internet Explorer 6 utilisent tous une technique de détection du DOCTYPE pour déterminer si une page doit être servie en utilisant un mode de compatibilité avec les anciens navigateurs ou, au contraire, si elle doit être servi en conformité avec les standards W3C.

-

L'utilisation du DOCTYPE approprié dans un document HTML permet aux auteurs de pages Web de supporter aussi bien les vieux navigateurs, moins conformes, que les plus récents en spécifiant le mode de compatibilité spécial à l'aide du DOCTYPE. Au fil du temps, et avec la disparition progressive des navigateurs obsolètes, les auteurs de pages Web peuvent effectuer la transition vers des pages Web respectant les standards en utilisant le DOCTYPE approprié (article connexe).

-

Alors que la détection du DOCTYPE est un moyen utile de continuer à supporter les vieux navigateurs, il peut cependant poser problème pour les navigateurs de nouvelles générations tels que Netscape 6.x et Netscape 7.x si le mode d'affichage spécifié est inapproprié.

-

Gecko possède également deux modes de rendus : mode de compatibilité et mode de respect strict des standards. Le mode de compatibilité imite le comportement de Netscape Navigator 4 alors que le mode de respect strict de standards suit les recommandations HTML et CSS du W3C. En particulier, le mode de respect strict des standards utilise le modèle de boîte CSS tel que défini dans le Chapitre 10 de la recommandation CSS 2. Le mode de rendu est déterminé à l'aide de la déclaration du DOCTYPE (ou de son absence) au début du document HTML.

-

Commentaires non valides

-

Gecko possède également trois modes d'analyse : mode de compatibilité, mode presque standard et respect des standards. Le mode de compatibilité permet l'utilisation de commentaires non valides contenant plus de deux tirets -- ce qui n'est pas le cas des deux autres modes.

-
<!---- Ceci est un commentaire HTML non valide accepté par l'analyse en mode de compatibilité des commentaires ---->
-<!-- Ceci est un commentaire HTML valide accepté par l'analyse stricte des commentaires -->
-

Pour connaître les règles d'appel du mode de compatibilité ou les modes de respect des standards par le DOCTYPE, consultez l'article Le sniffing de DOCTYPE dans Mozilla.

-

Codage de plugins

-

Vous pourrez remarquer que certains plugins ne se comportent pas de la même façon dans Gecko et dans Netscape Navigator 4. Visitez la page Plugins pour plus d'informations à propos des langages de script dans les navigateurs Gecko, la bonne utilisation des balises, les changements dans l'architecture des plugins par rapport à la génération Netscape 4, et les suggestions sur l'utilisation des plugins.

-

Problèmes de configuration du serveur Web

-

Types MIME spécifiés incorrectement

-

Beaucoup de serveurs Web déclarent incorrectement les types MIME des fichiers. Les navigateurs Gecko requièrent qu'ils soient correctement définis pour correspondre aux différents types de contenus :

- -

Mauvaise implémentation de HTTP

-

Plusieurs serveurs Web implémentent de façon incorrecte le protocole HTTP ce qui peut provoquer quelques problèmes pour Mozilla.

-

Mauvaise implémentation de SSL

-

Les vieux navigateurs tels que Internet Explorer 4 et Netscape Navigator 4 implémentaient de vielles versions du protocole SSL. De nos jours, la version la plus couramment déployée est SSL 3.0, cependant, la dernière version de TLS (SSL 3.1), intégrée aux navigateurs Gecko, n'est supportée que par très peu de serveurs Web. Malheureusement, plusieurs implémentations de SSL 3.0 implémentent de manière incorrecte la négociation du protocole SSL à utiliser et échouent lors de la connexion avec les navigateurs Gecko.

-

Pour plus d'informations à propos de ces problèmes, veuillez lire Notes sur TLS - Serveurs SSL 3.0 intolérants.

-

Ressources utiles

- -

Références

- -
-

Informations sur le document original

- -
-

Interwiki Languages Links

-

{{ languages( { "en": "en/Gecko_Compatibility_Handbook", "es": "es/Manual_de_Compatibilidad_de_Gecko" } ) }}

diff --git a/files/fr/mccoy/index.html b/files/fr/mccoy/index.html deleted file mode 100644 index e6c598fd8d..0000000000 --- a/files/fr/mccoy/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: McCoy -slug: McCoy -tags: - - Extensions - - Tools -translation_of: Mozilla/Projects/McCoy ---- -

McCoy est une application permettant aux auteurs de modules de fournir des mises à jours sécurisées à leurs utilisateurs. Les applications vérifient régulièrement la disponibilité de mises à jour de leurs modules. Il est important que l'information de mise à jour ne soit pas altérée depuis qu'elle a été écrite par l'auteur du module. Plus précisément, le processus de mise à jour vérifie grâce à des signatures numériques qu'un manifeste récupéré sur des sites normalement non sécurisés soit intègre.

-

Si vous voulez plus de détails techniques concernant McCoy, consultez le {{ interwiki('wikimo', 'McCoy', 'wiki du projet') }}.

-

Installation de McCoy

-

Pour utiliser McCoy, vous devez le télécharger et l'installer. McCoy est fourni dans un paquetage propre à votre système d'exploitation ; décompressez-le où vous voulez et exécutez-le.

- -
- Il existe quelques problèmes d'exécution de McCoy sous Linux. Il ne fonctionne pas sur de vieilles versions de Linux et pose même des problèmes sur des systèmes à jour. Nous espérons résoudre ce souci dans une prochaine version.
-

Désinstallation de McCoy

-

Pour désinstaller McCoy, effacez simplement les fichiers de l'application. Les clés de cryptographie et les autres données de McCoy sont conservées dans un répertoire du profil utilisateur indépendant de l'application, ce qui vous permet de le désintaller et le réinstaller sans perdre vos précieuses clés.

-

Sauvegarde des données

-

Si vous devez sauvegarder vos données ou les déplacer vers une autre machine, vous devrez faire une copie du répertoire du profil situé :

- -

Lancement de McCoy

-

Pour exécuter McCoy, lancez simplement l'exécutable mccoy (ou l'application McCoy sous OS X). Au premier lancement, il vous demandera de créer un mot de passe principal. Il est fortement conseillé d'utiliser un mot de passe pour protéger les données de McCoy. Une fois le mot de passe défini, vous pouvez le modifier depuis le menu Keys, et vous devrez le retaper à chaque lancement de McCoy.

-

Signature des manifestes de mise à jour

-

Avant de publier votre module

-

Afin de pouvoir vérifier l'intégrité des manifestes d'installation, les applications ont besoin de disposer au préalable des informations nécessaires pour cela. Le principe réside dans la partie publique de la clé de cryptage inclus dans votre version initiale de votre module.

-

La première étape consiste à créer une clé de cryptage. Cliquez simplement sur le bouton "Créer" de la barre d'outils ou sélectionnez "Create Key" depuis le menu "Keys". Vous devriez utiliser pour la clé un nom en rapport avec son usage. Il vous appartient d'utiliser vos clés, soit pour un usage commun à tous vos modules, soit une clé pour chaque module ; ce dernier choix est le meilleur.

-

Une fois la clé obtenue, vous devez ajouter sa partie publique au fichier install.rdf de votre module. La manière la plus simple est de sélectionner la clé et cliquez ensuite sur le bouton Install de la barre d'outils. Vous devez alors indiquer l'emplacement du fichier Install à MacCoy et la partie publique de la clé sera ajoutée automatiquement au fichier. Le fichier sera remplacé donc faites en une copie si nécessaire.

-

Vous pouvez ensuite inclure ce fichier Install dans votre module et le publier.

-
- Si vous désirez ajouter manuellement la clé publique à votre fichier Install, faites un clic droit sur la clé, sélectionnez "Copy Public Key" et ajoutez-la au fichier suivant l'entrée updateKey.
-

Publication d'une mise à jour

-

Dès que vous êtes prêt à publier une mise à jour de votre module, vous devez créer votre propre fichier update.rdf. Vous devez utiliser McCoy pour signer ce fichier afin que l'application sache que vous en êtes vraiment l'auteur. Sélectionnez simplement la clé que vous avez initialement ajoutée dans le fichier install.rdf du module, cliquez ensuite sur le bouton "Sign" de la barre d'outils, sélectionnez votre fichier update.rdf et les données incluses seront signées. Il est important de signaler que toute modification dans le fichier de mise à jour nécessite qu'il soit de nouveau signé.

-
- La signature est indépendante du RDF, ce qui signifie que si vous réorganisez le contenu XML du fichier en une version plus lisible pour un humain sans modifier les données RDF, alors la signature restera valide.
diff --git a/files/fr/mdn/contribute/howto/lier_un_compte_github/index.html b/files/fr/mdn/contribute/howto/lier_un_compte_github/index.html deleted file mode 100644 index 6a3ac68db6..0000000000 --- a/files/fr/mdn/contribute/howto/lier_un_compte_github/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Comment lier un compte GitHub à votre profil MDN -slug: MDN/Contribute/Howto/Lier_un_compte_GitHub -tags: - - Documentation - - MDN - - MDN Meta - - Projet MDN -translation_of: Archive/MDN/Howto_Link_a_Github_account ---- -
{{MDNSidebar}}
- -
{{IncludeSubnav("/en-US/docs/MDN")}}
- -
-

Note: Support for Persona logins on MDN was disabled on November 1, 2016. The method for adding a Github account to your profile therefore no longer works. If you didn't add a GitHub login to your MDN account before we disabled Persona logins, please file an "Account Help" bug on Bugzilla. For further reading about the end of life of Persona, see: Persona shutdown guidelines.

-
diff --git a/files/fr/mdn/contribute/persona_sign-in/index.html b/files/fr/mdn/contribute/persona_sign-in/index.html deleted file mode 100644 index 158fb3d3c3..0000000000 --- a/files/fr/mdn/contribute/persona_sign-in/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: MDN et connexions Persona -slug: MDN/Contribute/Persona_sign-in -tags: - - Documentation - - MDN - - MDN Meta - - Mozilla - - Persona -translation_of: Archive/MDN/Persona_sign-ins ---- -
{{MDNSidebar}}
-

Veuillez lier votre compte GitHub à votre profil MDN dès maintenant afin de pouvoir continuer à vous connecter sur MDN.

-
- -

À l'heure actuelle, MDN laisse les contributeurs se connecter grâce à deux fournisseurs d'authentification différents : Mozilla Persona et GitHub. À compter du 1er novembre 2016, nous supprimerons Persona en tant qu'option pour ouvrir une session. Par conséqent, vous devez activer l'authentification Github dans votre profil pour ne pas perdre la possibilité d'accéder à MDN.

- -

Nous reconnaissons qu'il s'agit là d'un désagrément et nous nous en excusons. Malheureusement, cela ne dépend pas de nous.

- -

Pourquoi Persona est sur le point d'être supprimé ?

- -

Mozilla a fermé le projet Persona et ses serveurs seront coupés en novembre 2016. Vous pouvez en apprendre davantage sur la décision de Mozilla d'arrêter Persona en allant sur le wiki de Mozilla.

- -

Quand sera supprimé Persona ?

- -

Nous désactiverons Persona en tant que fournisseur d'authentication le 1er novembre 2016 ; en d'autres termes, le 31 octobre 2016 sera le dernier jour où vous pourrez vous connecter sur MDN en utilisant Persona. Nous allons publier à partir de maintenant des notifications de plus en plus urgentes et de plus en plus souvent pour l'ajout de compte GitHub à votre profil MDN. Faîtes-le dès que possible pour éviter tout risque de perdre l'accès à votre compte MDN.

- -

Est-ce-que MDN proposera un autre fournisseur d'authentification ?

- -

Nous aimerions beaucoup faire ainsi mais nous n'avons pas encore identifié d'autre fournisseur qui corresponde à nos critères ; de plus, nous ne disposons pas actuellement des ressources développeurs pour en intégrer un. Pour l'instant, votre seule option pour conserver votre accès contributeur à MDN est de lier votre profil MDN à votre compte GitHub.

- -

Bien sûr, gardez à l'esprit que vous n'avez pas besoin de vous identifier sur MDN pour lire nos contenus. Par contre, si vous avez un compte pour participer et que vous souhaitez pouvoir contribuer de temps en temps à l'avenir, assurez-vous d'ajouter un compte GitHub à votre profil dès que vous le pourrez, avant le 31 octobre 2016.

diff --git "a/files/fr/mdn/user_guide/r\303\251daction/index.html" "b/files/fr/mdn/user_guide/r\303\251daction/index.html" deleted file mode 100644 index a9dcd7f7cf..0000000000 --- "a/files/fr/mdn/user_guide/r\303\251daction/index.html" +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Rédaction de contenu -slug: MDN/User_guide/Rédaction -tags: - - MDN - - Projet MDC -translation_of: Archive/Meta_docs/Writing_content ---- -
{{MDNSidebar}}

Il y a toujours des choses qui peuvent être ajoutées ou mises à jour sur le MDN. Que ce soit une toute nouvelle documentation pour une nouvelle API brillante ou la révision d'une ancienne API qui a changé subtilement, vous trouverez beaucoup de possibilités pour aider.

- -

Modifier une page existante

- -

Si vous avez trouvé une page que vous souhaitez réviser, cliquez simplement sur le bouton « Modifier » dans le coin supérieur droit. Cela ouvrira l'éditeur WYSIWYG pour travailler sur le contenu de la page. Consultez le guide de l'éditeur MDN pour plus de détails sur la façon de travailler avec l'éditeur, ainsi que la façon de travailler avec le système macro que nous utilisons pour aider à automatiser la construction et la mise en forme du contenu.

- -

Il y a de nombreuses raisons qui peuvent vous pousser à modifier une page existante :

- - - -

Ajouter une nouvelle page

- -

Voici le grand défi ! Ajouter une nouvelle page de MDN permet de construire le Web que vous aimez tant et que vous voulez étreindre. Il existe plusieurs raisons évidentes pour créer une nouvelle page, comme documenter une API qui n'est pas encore documentée ou pour ajouter un nouveau tutoriel ou un guide sur un sujet.

- -

Il y a plusieurs manières d'aller sur la création d'une nouvelle page sur MDN, une fois que vous êtes connecté:

- -
-
Cliquez sur le lien "page manquante"
-
Lorsque vous naviguez sur MDN, vous aurez l'occasion de trouver des liens vers des pages qui n'existent pas encore. Souvent, lorsque nous créons des articles, nous incluons des liens vers des pages qui doivent être créées, même si elles ne sont pas encore réalisées. Cela nous aide à garder une trace des choses qui doivent éventuellement être faites, bien que parfois il faille un certain temps pour revenir à elles. Vous devriez vous sentir libre de le faire! Il suffit de cliquer sur ces liens et vous serez redirigé directement dans l'éditeur de la nouvelle page.
-
Créer une sous-page
-
-

Près du coin supérieur droit de chaque article, il y a un menu déroulant "Avancé". Dans ce menu, il y a une option "Nouvelle sous-page". En cliquant sur cette option, elle ouvre l'éditeur de page pour la création d'une nouvelle page dont la page parente dans la hiérarchie du site est la page sur laquelle vous avez choisi "Nouvelle sous-page". Il suffit de définir le titre et de commencer à écrire le contenu de l'article.

-
-
Créer un clone
-
Vous pouvez également cloner une page existante en utilisant l'option "Cloner cette page" dans le menu déroulant "Cette page". En cliquant sur cette option, elle crée une copie de la page en cours, dont la page parent est identique à la page en cours, et ouvre l'éditeur sur cette page, où vous pouvez définir le titre de la page, ainsi que modifier le contenu de la page. Ceci est généralement un bon moyen d'ajouter une nouvelle page à une zone de référence existante du site, par exemple, parce qu'il vous procure une mise en page de l'échantillon pour le contenu.
-
Créer un lien vers une page qui n'existe pas, puis cliquer dessus
-
Ceci est un peu une méthode hybride. Etant donné que chaque page doit être liée à partir d'une source, vous pourriez commencer par créer un lien vers le nouvel article en l'ajoutant à une page existante, puis, après avoir sauvé cette page, vous pouvez cliquer sur le lien que vous venez d'insérer pour ouvrir un éditeur pour le nouvel article.
-
- -
-

Note : si vous n'êtes pas connecté, vous obtiendrez une erreur 404 lorsque vous essayez de visiter un article qui n'existe pas, au lieu d'un éditeur pour créer une nouvelle page.

-
- -

Trouver l'information

- -

Il y a beaucoup d'informations un peu partout, et il peut être difficile de trouver l'aide dont vous avez besoin. Voici quelques conseils pour vous aider à démarrer.

- -
-
Liste des propriétaire des Modules
-
Les projets Mozilla travaillent sur une base "de propriétaire de module"; chaque composant majeur a un propriétaire ou des propriétaires qui sont responsables de ce qui se passe là-bas. Ces propriétaires sont souvent la meilleure source d'informations - ou au moins un excellent moyen de trouver la bonne personne à qui parler.
-
Mozilla source cross-reference
-
MXR, le Mozilla cross-reference, vous permet d'accéder à tout le code source pour le projet Mozilla (à l'exception de certaines choses, comme le projet Firefox OS, qui est situé sur GitHub). Le code et ses commentaires sont souvent une excellente source d'informations.
-
Mozilla wiki
-
Le wiki de Mozilla - souvent désigné comme "wikimo" - est un référentiel de processus et de conception de notes, projets, plans et devis préliminaires. En dépit d'être souvent un désordre encombré, il est un trésor de renseignements précieux.
-
diff --git a/files/fr/mercurial/index.html b/files/fr/mercurial/index.html deleted file mode 100644 index 01bc490284..0000000000 --- a/files/fr/mercurial/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Mercurial -slug: Mercurial -tags: - - Développement_de_Mozilla - - Mercurial -translation_of: Mozilla/Mercurial ---- -

Mercurial est le logiciel distribué de contrôle de versions que nous utilisons pour le développement des prochaines versions majeures (« le tronc »). Il a pris la place de CVS après la branche Mozilla 1.9.

- -

hg est l'outil en ligne de commande de Mercurial, Hg étant le symbôle chimique de l'élément mercure.

- -

Apprentissage de l'utilisation de Mercurial

- -

Avant de faire quoi que ce soit d'autre, lisez chaque mot de Les bases de Mercurial.

- -

Ensuite, la FAQ sur Mercurial est un bon endroit pour commencer.

- -

Consultez Code source de Mozilla (Mercurial) pour obtenir un arbre à compiler.

- -

Pour en savoir plus

- -

Le hg book est le guide ultime d'utilisation de Mercurial.

- -

Catégorie:Mercurial liste les articles liés à Mercurial sur MDC.

- -

Et sur wiki.mozilla.org, vous trouverez ces pages utiles :

- - - - - -

{{ languages( { "en": "en/Mercurial", "es": "es/Mercurial", "ja": "ja/Mercurial" } ) }}

diff --git a/files/fr/midas/index.html b/files/fr/midas/index.html deleted file mode 100644 index 0039e15835..0000000000 --- a/files/fr/midas/index.html +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Midas -slug: Midas -translation_of: Mozilla/Projects/Midas ---- -

This page was auto-generated because a user created a sub-page to this page.

diff --git a/files/fr/midas/security_preferences/index.html b/files/fr/midas/security_preferences/index.html deleted file mode 100644 index 5f6c73dc86..0000000000 --- a/files/fr/midas/security_preferences/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Préférences de sécurité du module éditeur Midas -slug: Midas/Security_preferences -translation_of: Mozilla/Projects/Midas/Security_preferences ---- -
-
-
Note : Si vous avez atteint cette page à partir d'une boîte de message dans Firefox ou un autre produit Mozilla, essayez d'utiliser les raccourcis clavier pour les commandes couper, copier et coller :
- - -
Copier : Ctrl + C ou Ctrl + Inser (cmd + C sur Mac)
- -
Coller : Ctrl + V ou Maj + Inser (commande + V sur Mac)
- -
Couper : Ctrl + X ou Maj + Suppr (commande + X sur Mac)
- -
L'information sur le reste de cette page concerne les développeurs Web et les utilisateurs avancés. N'essayez pas de modifier cette page.
-
- -

Pour protéger les informations privées des utilisateurs, les scripts non privilégiés ne peuvent invoquer les commandes Couper, Copier et Coller dans Midas, qui est l'éditeur de texte enrichi de Mozilla. Cela signifie que les boutons correspondants de la page de démonstration Mozilla Rich Text Editing ne fonctionneront pas. Pour activer ces fonctions, vous devez modifier les préférences de votre navigateur.

- -
-

Avertissement : modifier ces préférences peut laisser votre navigateur instable, surtout si vous autorisez les sites non approuvés. Ne modifiez ces paramètres que si nécessaire pour essayer la démo ci-dessus et tester votre propre add-on ou le code interne de Firefox, et assurez-vous de restaurer les paramètres par défaut lorsque vous avez terminé !

-
- -

Changement des préférences dans Firefox

- -
    -
  1. Quittez Firefox. Si vous avez lancé Quick Launch (lancement rapide, sur Windows, c'est une icône dans la barre d'outils), quittez aussi.
  2. -
  3. Trouvez votre répertoire de profil Firefox.
  4. -
  5. Ouvrez le fichier user.js à partir de ce répertoire dans un éditeur de texte. S'il n'y a pas de fichier user.js, créez-en un.
  6. -
  7. -

    Ajoutez ces lignes dans user.js :

    - -
    user_pref("capability.policy.policynames", "allowclipboard");
    -user_pref("capability.policy.allowclipboard.sites", "https://www-archive.mozilla.org");
    -user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess");
    -user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess");
    -
  8. -
  9. Changez l'URL : https://www.mozilla.org  sur le site pour lequel vous souhaitez activer cette fonction.
  10. -
  11. Enregistrez le fichier et redémarrez Firefox. Les boutons du presse-papiers dans la démo, ou les boutons similaires sur les sites que vous avez énumérés, devraient maintenant fonctionner.
  12. -
- -
-

La préférence est le site ainsi que le protocole spécifique. Par exemple :

- -
user_pref("capability.policy.allowclipboard.sites", "http://www-archive.mozilla.org")
- -

n'est pas le même que :

- -
user_pref("capability.policy.allowclipboard.sites", "https://www-archive.mozilla.org")
- -

C'est parce que, le premier utilise HTTP tandis que le second concerne HTTPS.

- -

Si vous voulez autoriser plusieurs URL à accéder à l'opération Coller, séparez les URL avec un espace. Par exemple :

- -
user_pref("capability.policy.allowclipboard.sites", "https://www-archive.mozilla.org https://developer.mozilla.org")
-
- -
 
-
- -
-
Encore une fois, gardez à l'esprit les risques de sécurité impliqués ici et assurez-vous d'enlever l'autorisation d'accéder au presse-papiers une fois que vous n'en avez plus besoin.
- -

Voir aussi

- - -
- -
 
- -
-
-
-
 
- -
 
-
-
-
diff --git a/files/fr/migration_applications_internet_explorer_vers_mozilla/index.html b/files/fr/migration_applications_internet_explorer_vers_mozilla/index.html deleted file mode 100644 index 828fe18994..0000000000 --- a/files/fr/migration_applications_internet_explorer_vers_mozilla/index.html +++ /dev/null @@ -1,1245 +0,0 @@ ---- -title: Migration d'applications d'Internet Explorer vers Mozilla -slug: Migration_applications_Internet_Explorer_vers_Mozilla -tags: - - Développement_Web - - Standards_du_Web -translation_of: Archive/Mozilla/Migrate_apps_from_Internet_Explorer_to_Mozilla ---- -

Introduction

- -

Lorsque Netscape a débuté le projet Mozilla, la décision de suivre les standards du W3C a été prise en toute conscience. C'est la raison pour laquelle Mozilla n'est pas entièrement compatible avec le code anciennement conçu pour Netscape Navigator 4.x et Microsoft Internet Explorer. Par exemple, Mozilla ne reconnaît pas <layer> comme nous le verrons plus tard. Les navigateurs, comme Internet Explorer 4, qui ont été conçus avant la publication des standards du W3C ont hérité de nombreuses bizarreries. Nous parlerons dans cet article du mode quirks de Mozilla, qui offre une bonne compatibilité HTML ascendante avec Internet Explorer et d'autres anciens navigateurs.

- -

Nous aborderons également certaines technologies non standard, comme XMLHttpRequest et l'édition de texte enrichi, que Mozilla supporte parce qu'aucun équivalent W3C n'existait à l'époque. Parmi les standards supportés, on peut citer :

- - - -

Astuces générales de codage multinavigateur

- -

Même si les standards du Web existent, des navigateurs différents se comporteront différemment (en réalité, le même navigateur peut se comporter différemment suivant la plateforme). De nombreux navigateurs, comme Internet Explorer, gèrent également des API plus anciennes que celles du W3C et le support complet de celles-ci n'a jamais été ajouté.

- -

Avant de se plonger dans les différences entre Mozilla et Internet Explorer, voyons quelques manières de base de rendre une application Web extensible afin qu'elle puisse fonctionner dans de nouveaux navigateurs par la suite.

- -

Puisque des navigateurs différents utilisent parfois des API différentes pour la même fonctionnalité, on trouvera souvent une série de blocs if() else() tout au long du code pour différentier les différents navigateurs. Le code qui suit montre des blocs conçus pour Internet Explorer :

- -
. . .
-
-var elm;
-
-if (ns4)
-  elm = document.layers["monID"];
-else if (ie4)
-  elm = document.all["monID"]
-
- -

Ce code n'est pas extensible, par conséquent si l'on désire qu'il gère un nouveau navigateur, ces blocs doivent être mis à jour un peu partout dans l'application Web.

- -

La manière la plus simple d'éliminer le besoin de recoder pour un nouveau navigateur est de rendre la fonctionnalité abstraite. Plutôt que d'utiliser une série de blocs if() else(), il sera plus performant d'extraire certaines tâches courantes et de les placer dans leurs propres fonctions. Non seulement le code en sera plus lisible, mais l'ajout de nouveaux clients en sera simplifié :

- -
var elm = getElmById("myID");
-
-function getElmById(aID){
-  var element = null;
-
-  if (isMozilla || isIE5)
-    element = document.getElementById(aID);
-  else if (isNetscape4)
-    element = document.layers[aID];
-  else if (isIE4)
-    element = document.all[aID];
-
-  return element;
-}
-
- -

Ce code a toujours un problème, c'est qu'il utilise un « sniffing » du navigateur, c'est-à-dire qu'il détecte le navigateur utilisé par l'utilisateur. Le sniffing est généralement fait sur la chaîne d'agent utilisateur (useragent), comme celle-ci :

- -
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031016
-
- -

Bien que l'utilisation de la chaîne useragent pour détecter le navigateur fournisse un bon nombre d'informations détaillées sur le navigateur utilisé, le code de gestion de ces chaînes peut souvent faire des erreurs lorsque de nouvelles versions de ces navigateurs font leur apparition, ce qui oblige à modifier le code.

- -

Si le type de navigateur n'a pas d'importance (supposons que l'accès à l'application Web ait déjà été bloqué aux navigateurs non supportés), il est nettement plus sûr et efficace de vérifier le support de capacités ou d'objets particuliers du navigateur. Cela peut généralement être réalisé en testant la fonctionnalité requise en JavaScript. Par exemple, plutôt que :

- -
if (isMozilla || isIE5)
-
- -

On peut utiliser :

- -
if (document.getElementById)
-
- -

Cela permettra à d'autres navigateurs supportant cette méthode standard du W3C, comme Opera ou Safari, de fonctionner sans aucun changement.

- -

Le sniffing de la chaîne useragent reste cependant approprié lorsque la précision est importante, comme la vérification qu'un navigateur soit d'une version suffisante pour accéder à votre application Web ou si vous essayez de contourner un bug connu.

- -

JavaScript permet également d'utiliser des instructions conditionnelles en une ligne, qui peuvent rendre le code plus lisible :

- -
var test = (condition) ? laConditionEstVraie : laConditionEstFausse;
-
- -

Par exemple, pour retrouver un élément, on peut utiliser :

- -
function getElement(aID){
-  return (document.getElementById) ? document.getElementById(aID)
-                                   : document.all[aID]);
-}
-
- -

Une autre manière est d'utiliser l'opérateur || :

- -
function getElement(aID){
-  return (document.getElementById(aID)) || document.all[aID]);
-}
-
- -

Différences entre Mozilla et Internet Explorer

- -

Pour commencer, nous parlerons des différences entre la manière dont HTML se comporte dans Mozilla et dans Internet Explorer.

- -

Bulles d'information

- -

Les premiers navigateurs ont introduit les bulles d'information en HTML en les montrant sur les liens et en utilisant la valeur de l'attribut alt d'une image comme contenu de cette bulle. Les spécifications HTML du W3C ont cependant créé l'attribut title, prévu pour contenir une description détaillée du lien. Les navigateurs modernes utiliseront cet attribut title pour afficher des bulles d'information, et Mozilla ne les affichera que pour cet attribut, jamais pour l'attribut alt.

- -

Entités

- -

Le balisage HTML peut contenir plusieurs entités, qui ont été définies par le W3C. Celles-ci peuvent être référencées par leur valeur numérique ou par une chaîne de caractères. Par exemple, le caractère d'espacement #160 peut être référencé par &#160; ou par sa référence en caractères équivalente &nbsp;.

- -

Certains navigateurs plus anciens, comme Internet Explorer, permettaient d'utilisation des entités sans le caractère ; (point-virgule) à la fin :

- -
&nbsp Foo
-&nbsp&nbsp Foo
-
- -

Mozilla affichera les &nbsp ci-dessus comme des espaces, même si c'est à l'encontre des spécifications du W3C. Le navigateur ne traitera par contre pas un &nbsp s'il est directement suivi d'autres caractères, par exemple :

- -
&nbsp12345
-
- -

Ce dernier code ne fonctionnera pas dans Mozilla, puisqu'il ne respecte absolument pas les standards du W3C. Utilisez toujours la forme correcte (&nbsp;) pour éviter les différences de traitement entre les navigateurs.

- -

Différences dans le DOM

- -

Le Document Object Model (DOM) est la structure arborescente contenant les éléments du document. Celle-ci peut être manipulée au travers d'API JavaScript qui ont été standardisées par le W3C. Cependant, avant cette standardisation, Netscape 4 et Internet Explorer 4 avaient déjà implémenté des API similaires. Mozilla n'implémente ces anciennes API que si elles ne sont pas réplicables avec les standards Web du W3C.

- -

Accès aux éléments

- -

Pour obtenir une référence à un élément en utilisant une approche multinavigateur, on utilise document.getElementById(aID) qui fonctionne dans Internet Explorer 5.0+, les navigateurs basés sur Mozilla, les autres navigateurs suivant le W3C et fait partie de la spécification DOM Level 1.

- -

Mozilla ne permet pas d'accéder à un élément via document.elementName ou même par le nom d'un élément, ce que fait Internet Explorer (et qu'on peut appeler pollution de l'espace de noms global). Mozilla ne permet pas non plus d'utiliser les méthodes document.layers de Netscape et document.all d'Internet Explorer. Alors que document.getElementById permet de trouver un seul élément, document.layers et document.all servaient également à obtenir une liste de tous les éléments portant un certain nom de balise, comme tous les éléments <div>.

- -

La méthode du DOM Level 1 du W3C obtient les références de tous les éléments portant le même nom de balise par getElementsByTagName(). Cette méthode renvoie un tableau en JavaScript, et peut également être appelée sur l'élément document ou sur d'autres nœuds pour chercher uniquement parmi leurs descendants dans l'arbre. Pour obtenir un tableau de tous les éléments dans l'arbre DOM, on peut utiliser getElementsByTagName("*").

- -

Les méthodes du DOM Level 1, telles que montrées dans le Tableau 1, sont souvent utilisées pour déplacer un élément à un certain endroit et modifier sa visibilité (menus, animations). Netscape 4 utilisait la balise <layer>, qui n'est pas reconnue par Mozilla, comme élément HTML pouvant être positionné n'importe où. Dans Mozilla, n'importe quel élément utilisant la balise <div> peut être repositionné, ce qui est également utilisé par Internet Explorer et figure dans la spécification HTML.

- - - - - - - - - - - - - - - - - -
Tableau 1. Méthodes utilisées pour accéder aux éléments
MéthodeDescription
document.getElementById(unID)Renvoie une référence à l'élément portant l'ID spécifié.
document.getElementsByTagName(nomBalise)Renvoie un tableau des éléments portant le nom spécifié dans le document.
- -

Parcours du DOM

- -

Mozilla supporte les API du DOM W3C pour le parcours de l'arbre DOM depuis JavaScript (voir le Tableau 2). Ces API existent pour chaque nœud dans le docment et permettent de parcourir l'arbre dans toutes les directions. Internet Explorer supporte également ces API, outre ses anciennes API de parcours de l'arbre DOM comme la propriété children.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tableau 2. Méthodes utilisées pour parcourir le DOM
Propriété/MéthodeDescription
childNodesRenvoie un tableau de tous les nœuds enfants de l'élément.
firstChildRenvoie le premier nœud enfant de l'élément.
getAttribute(nomAttribut)Renvoie la valeur de l'attribut spécifié.
hasAttribute(nomAttribut)Renvoie une valeur booléenne précisant si le nœud courant a un attribut défini portant le nom spécifié.
hasChildNodes()Renvoie une valeur booléenne précisant si le nœud courant a des nœuds enfants.
lastChildRenvoie le dernier nœud enfant de l'élément.
nextSiblingRenvoie le nœud suivant directement le nœud courant.
nodeNameRenvoie le nom du nœud courant sous la forme d'une chaîne.
nodeTypeRenvoie le type du nœud courant. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValeurDescription
1Nœud d'élément
2Nœud d'attribut
3Nœud texte
4Nœud de section CDATA
5Nœud de référence à une entité
6Nœud d'entité
7Nœud d'instruction de traitement
8Nœud de commentaire
9Nœud de document
10Nœud de type de document
11Nœud de fragment de document
12Nœud de notation
-
nodeValueRenvoie la valeur du nœud courant. Pour les nœuds contenant du texte, comme les nœuds texte et de commentaires, il s'agira de ce texte. Pour les nœuds d'attributs, leur valeur d'attribut. Pour tous les autres nœuds, null sera renvoyé.
ownerDocumentRenvoie l'objet document contenant le nœud courant.
parentNodeRenvoie le nœud parent du nœud courant.
previousSiblingRenvoie le nœud qui précède immédiatement le nœud courant.
removeAttribute(nom)Retire l'attribut spécifié du nœud courant.
setAttribute(nom, valeur)Définit la valeur de l'attribut spécifié avec sur le nœud courant.
- -

Internet Explorer a un comportement s'éloignant du standard, dans le sens où beaucoup de ces API ignoreront les nœuds comportant uniquement des espaces blancs, générés par exemple par les caractères de retour à la ligne. Mozilla ne les ignorera pas, il sera donc parfois nécessaire de les distinguer. Chaque nœud a une propriété nodeType indiquant le type de nœud. Par exemple, un élément aura le type 1, un nœud texte le type 3 et un nœud de commentaire le type 8. La meilleure manière de ne traiter que les nœuds d'éléments et de ne pas parcourir tous les nœuds enfants et de ne traiter que ceux dont l'attribut nodeType vaut 1 :

- -
HTML:
-  <div id="foo">
-    <span>Test</span>
-  </div>
-
-JavaScript:
-  var myDiv = document.getElementById("foo");
-  var myChildren = myXMLDoc.childNodes;
-  for (var i = 0; i < myChildren.length; i++) {
-    if (myChildren[i].nodeType == 1){
-      // nœud élément
-    };
-  };
-
- -

Génération et manipulation de contenu

- -

Mozilla supporte les anciennes méthodes d'ajout dynamique de contenu dans le DOM, comme document.write, document.open et document.close. Mozilla gère également la méthode innerHTML d'Internet Explorer, qui peut être appelée sur presque tous les nœuds. Il ne supporte cependant pas outerHTML (qui ajoute des balises autour d'un élément, et n'a pas d'équivalent standard) ni innerText (qui change la valeur textuelle du nœud, et qui peut être remplacée dans Mozilla par l'utilisation de textContent).

- -

Internet Explorer dispose de plusieurs méthodes de manipulation du contenu qui ne sont pas standard et ne sont pas gérées par Mozilla, permettant de récupérer la valeur, d'insérer du texte et des éléments à côté d'un nœud, comme getAdjacentElement et insertAdjacentHTML. Le Tableau 3 montre comment manipuler le contenu avec le standard W3C et Mozilla, avec des méthodes disponibles sur tous les nœuds DOM.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 3. Méthodes standards utilisées par Mozilla pour manipuler le contenu
MéthodeDescription
appendChild(nœud)Crée un nouveau nœud enfant. Renvoie une référence à ce nouveau nœud.
cloneNode(profond)Crée une copie du nœud depuis lequel la méthode est appelée, et renvoie cette copie. Si le paramètre profond vaut true, copie également tous les descendants du nœud.
createElement(nomDeBalise)Crée et renvoie un nouveau nœud DOM orphelin (sans parent), du type d'élément spécifié par le paramètre nomDeBalise.
createTextNode(valeurTexte)Crée et renvoie un nouveau nœud DOM orphelin de type texte avec la valeur spécifiée dans valeurTexte.
insertBefore(nouveauNœud, nœudEnfant)Insère le nœud nouveauNœud avant le nœud nœudEnfant, qui doit être un enfant du nœud courant.
removeChild(nœudEnfant)Retire le nœud nœudEnfant des enfants du nœud courant, et renvoie une référence vers ce nœud.
replaceChild(nouveauNœud, nœudEnfant)Remplace le nœud nœudEnfant par nouveauNœud dans les nœuds enfants de l'élément courant et renvoie une référence vers le nœud retiré.
- -

Fragments de document

- -

Pour des questions de performances, il est possible de créer des documents en mémoire plutôt que de travailler avec le DOM du document existant. Le DOM Level 1 Core propose pour cela les fragments de document, qui sont des documents légers contenant un sous-ensemble des interfaces d'un document normal. Par exemple, getElementById n'y existe pas, mais appendChild bien. Il est aisé d'ajouter des fragments de document à un document existant.

- -

Mozilla permet de créer des fragments de document à l'aide de document.createDocumentFragment(), qui renvoie un fragment de document vide.

- -

L'implémentation des fragments de document dans Internet Explorer, par contre, ne respecte pas les standards du W3C et renvoie simplement un document normal.

- -

Différences concernant JavaScript

- -

On attribue souvent la plupart des différences entre Mozilla et Internet Explorer à JavaScript. Pourtant, les problèmes concernent généralement les API que les navigateurs exposent via JavaScript, comme la gestion du DOM. Les deux navigateurs diffèrent très peu dans leur gestion du langage JavaScript ; les problèmes rencontrés sont souvent liés à la synchronisation.

- -

Différences dans les dates en JavaScript

- -

La seule différence concernant Date est la méthode getYear. Selon la spécification ECMAScript (qui est suivie par JavaScript), cette méthode ne passe pas l'an 2000, et l'exécution de new Date().getYear() en 2004 renvoie « 104 ». La spécification ECMAScript indique que getYear renvoie l'année moins 1900, ce qui était prévu à l'origine pour renvoyer « 98 » pour 1998. La méthode getYear a été rendue obsolète dans la troisième édition d'ECMAScript et remplacée par getFullYear(). Internet Explorer a modifié getYear() pour fonctionner comme getFullYear() et lui faire passer l'an 2000, tandis que Mozilla gardait le comportement standard.

- -

Différences dans l'exécution de JavaScript

- -

Les scripts JavaScript sont exécutés différemment selon le navigateur. Par exemple, le code suivant suppose que le nœud div existe déjà dans le DOM au moment où le bloc script est exécuté :

- -
...
-<div id="foo">Chargement…</div>
-
-<script>
-  document.getElementById("foo").innerHTML = "Terminé.";
-</script>
-
- -

Cependant, il n'y a aucune garantie que ce soit le cas. Pour s'assurer que tous les éléments existent, il vaut mieux utiliser le gestionnaire d'évènement onload sur la balise <body> :

- -
<body onload="terminer();">
-
-<div id="foo">Chargement…</div>
-
-<script>
-  function terminer() {
-    var element = document.getElementById("foo");
-    element.innerHTML = "Terminé.";
-  }
-</script>
-...
-
- -

De tels problèmes de synchronisation peuvent également être liés au matériel — les systèmes plus lents peuvent révéler des bugs que des systèmes plus rapides auraient masqués. Un exemple concret est window.open, qui ouvre une nouvelle fenêtre :

- -
<script>
-  function ouvrirFenetre(){
-    var myWindow = window.open("about:blank");
-    myWindow.location.href = "http://www.ibm.com";
-  }
-</script>
-
- -

Le problème dans ce code est que window.open est asynchrone — l'exécution de JavaScript n'est pas bloquée jusqu'à ce que l'ouverture de la fenêtre soit terminée. Par conséquent, la première ligne après l'appel à window.open peut être exécutée avant que la nouvelle fenêtre soit prête. Cette situation peut être traitée en disposant un gestionnaire onload dans la nouvelle fenêtre qui rappelle ensuite la fenêtre ouvrante (à l'aide de window.opener).

- -

Différences dans la génération de HTML contenant du JavaScript

- -

JavaScript est capable, au travers de document.write, de générer du HTML au fil de l'eau depuis une chaîne. Le problème principal se pose ici lorsque du JavaScript, intégré dans un document HTML (donc, à l'intérieur d'une balise <script>), génère du HTML contenant une balise <script>. Si le document est en mode de rendu strict, il analysera la balise </script> à l'intérieur de la chaîne comme la balise de fermeture pour la balise <script> externe. Le problème apparait plus clairement dans le code qui suit :

- -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-...
-<script>
-  document.write("<script type='text\/javascript'>alert('Hello');<\/script>")
-</script>
-
- -

Comme la page est en mode strict, le moteur d'analyse de Mozilla verra le premier <script> et continuera jusqu'à trouver une balise de fermeture, dans ce cas-ci le premier </script>. En effet, l'analyseur XHTML n'a aucune connaissance de JavaScript (ou tout autre langage) lorsqu'il est en mode strict. En mode quirks, l'analyseur fera attention au JavaScript pendant qu'il travaille (ce qui le ralentit). Internet Explorer est toujours en mode quirks, étant donné qu'il ne gère pas vraiment le XHTML. Pour que ça fonctionne en mode strict dans Mozilla, la chaîne doit être séparée en deux parties :

- -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-...
-<script>
-  document.write("<script type='text\/javascript'>alert('Hello');</" + "script>")
-</script>
-
- -

Débogage de JavaScript

- -

Mozilla propose différentes manières de déboguer les problèmes liés à JavaScript dans les applications créées pour Internet Explorer. Le premier outil est la console JavaScript intégrée, montrée dans la Figure 1, où les erreurs et avertissements sont enregistrés. Elle est accessible dans Mozilla depuis le menu Outils -> Développement Web -> Console JavaScript ou dans Firefox (le navigateur simplifié de Mozilla) depuis Outils -> Console d'erreurs.

- -

Figure 1. La console JavaScript

- -

La console Javascript

- -

La console JavaScript peut afficher la liste complète des évènements enregistrés, ou juste les erreurs, avertissements et messages. Le message d'erreur dans la Figure 1 indique que sur le site aol.com, la ligne 17 essaie d'accéder à une variable non définie appelée adSetTarget. En cliquant sur le lien, la fenêtre interne de visualisation du code source de Mozilla s'ouvrira en surlignant la ligne concernée.

- -

La console permet également d'évaluer du code JavaScript. Pour évaluer la syntaxe JavaScript entrée, introduisez 1+1 dans le champ et appuyez sur Évaluer, comme montré dans la Figure 2.

- -

Figure 2. Évaluation dans la console JavaScript

- -

Évaluation dans la console JavaScript

- -

Le moteur JavaScript de Mozilla intègre un support pour le débogage et peut donc servir de base à de puissants outils pour les développeurs JavaScript. Venkman, montré dans la Figure 3, est un débogueur JavaScript puissant et multiplateforme s'intégrant dans Mozilla. Il est généralement fourni avec les distributions de Mozilla et SeaMonkey ; il peut être trouvé dans Outils -> Développement Web -> Débogueur JavaScript. En ce qui concerne Firefox, le débogueur n'est pas fourni ; il peut être téléchargé et installé depuis la page du projet Venkman. Des tutoriels peuvent également être consultés sur la page de développement de Venkman. Toujours pour Firefox, vous trouverez un débogueur JavaScript intégré et d'autres outils de développement indispensables dans l'extension Firebug.

- -

Figure 3. Le débogueur JavaScript de Mozilla

- -

Le débogueur JavaScript de Mozilla

- -

Le débogueur JavaScript peut traiter les scripts exécutés dans la fenêtre de navigation de Mozilla. Comme la plupart des débogueurs, il permet de gérer des points d'arrêt, d'inspecter la pile des appels et d'examiner des variables/objets. Toutes ces fonctionnalités sont accessibles depuis l'interface graphique ou la console interactive. Cette console permet d'exécuter des commandes JavaScript arbitraires dans le contexte du script en cours de débogage.

- -

Différences concernant CSS

- -

Les produits basés sur Mozilla ont un des meilleurs supports pour les feuilles de style en cascade (CSS), dont la plupart de CSS1, CSS2.1 et certaines parties de CSS3, lorsqu'on les compare à Internet Explorer ou d'autres navigateurs.

- -

Pour la plupart des problèmes mentionnés ci-dessous, Mozilla signalera une erreur ou un avertissement dans la console JavaScript. Jetez un œil à la console JavaScript si vous rencontrez des problèmes liés aux CSS.

- -

Types mime (lorsque les fichiers CSS ne sont pas chargés)

- -

Le problème le plus courant lié aux CSS est la non application des définitions CSS présentes dans des fichiers référencés. La cause en est souvent l'envoi du mauvais type mime pour le fichier CSS par le serveur. La spécification CSS indique que les fichiers CSS doivent être servis avec le type mime text/css. Mozilla respectera cela et ne chargera que les fichiers CSS de ce type lorsqu'en mode de respect strict des standards. Internet Explorer chargera toujours le fichier CSS, quel que soit le type mime sous lequel il est servi. Les pages Web sont considérés comme étant en mode de respect strict des standards lorsqu'elles commencent par un doctype strict. Pour résoudre ce problème, vous pouvez faire en sorte que le serveur envoie le bon type mime, ou modifier ou retirer la déclaration doctype. Nous parlerons plus avant des doctypes dans la section suivante.

- -

CSS et unités

- -

Beaucoup d'applications Web n'utilisent pas d'unités au sein de leurs CSS, particulièrement lorsque JavaScript est utilisé pour définir ces CSS. Mozilla le tolère tant que la page n'est pas affichée en mode strict. Comme Internet Explorer ne supporte pas réellement XHTML, il ne se soucie pas de la présence d'unités ou non. Si la page est en mode de respect strict des standards, et qu'aucune unité n'est précisée, Mozilla ignorera le style :

- -
<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>Exemple CSS et unités</title>
-  </head>
-  <body>
-    // fonctionne en mode strict
-    <div style="width: 40px; border: 1px solid black;">
-      Texte
-    </div>
-
-    // ne fonctionnera pas en mode strict
-    <div style="width: 40; border: 1px solid black;">
-      Texte
-    </div>
-  </body>
-</html>
-
- -

Comme l'exemple ci-dessus porte un doctype strict, la page sera rendue en mode de respect strict des standards. Le premier élément div aura une largeur de 40px, puisque les unités sont précisées, mais le second n'aura aucune largeur précise, et prendra donc la largeur par défaut de 100%. La même chose se produirait si la largeur était définie en JavaScript.

- -

JavaScript et CSS

- -

Comme Mozilla supporte les standards CSS, c'est également le cas pour le DOM CSS permettant de définir des styles CSS via JavaScript. Il est possible d'accéder à, retirer et modifier les règles CSS d'un élément via sa propriété membre style :

- -
<div id="monDiv" style="border: 1px solid black;">
-  Texte
-</div>
-
-<script>
-  var monElm = document.getElementById("monDiv");
-  monElm.style.width = "40px";
-</script>
-
- -

Chaque attribut CSS peut être atteint de cette manière. À nouveau, si la page Web est en mode strict, vous devez préciser une unité ou Mozilla ignorera la commande. Lorsque la valeur d'une propriété est demandée, disons par .style.width, la valeur renvoyée dans Mozilla et Internet Explorer contiendra l'unité. Cela signifie qu'une chaîne est renvoyée. Celle-ci peut être convertie en un nombre grâce à parseFloat("40px").

- -

Différences dans les débordements CSS

- -

CSS ajoute la notion de débordement, qui permet de préciser comment traiter les dépassements de contenu ; par exemple, lorsque le contenu d'un élément div d'une hauteur précise est plus imposant que cette hauteur. Le standard CSS définit que si aucun comportement de débordement n'est précisé dans ce cas, le contenu du div débordera. Cependant, Internet Explorer ne respecte pas cela et étirera l'élément div au-delà de sa hauteur définie pour qu'il englobe tout son contenu. L'exemple ci-dessous illustre cette différence :

- -
<div style="height: 100px; border: 1px solid black;">
-  <div style="height: 150px; border: 1px solid red; margin: 10px;">
-    a
-  </div>
-</div>
-
- -

Comme vous pouvez le voir dans la Figure 4, Mozilla se comporte comme spécifié dans le standard du W3C. Celui-ci précise que, dans ce cas, l'élément div intérieur déborde vers le bas puisque le contenu est plus haut que son élément parent. Si vous préférez le comportement d'Internet Explorer, il suffit de ne pas préciser de hauteur sur l'élément extérieur.

- -

Figure 4. Débordement de DIV

- -

DIV Overflow

- -

Différences de survol (hover)

- -

Le comportement non standard du survol CSS dans Internet Explorer s'illustre sur quelques sites Web. Il se manifeste généralement par un changement du style du texte lorsqu'il est survolé dans Mozilla, mais pas dans Internet Explorer. Ce comportement apparait parce que le sélecteur CSS a:hover dans Internet Explorer trouvera <a href="">...</a> mais pas <a name="">...</a>, qui permet de définir des ancres en HTML. Le changement du texte se produit lorsque les auteurs entourent certaines zones de balises définissant des ancres :

- -
CSS:
-  a:hover {color: green;}
-
-HTML:
-  <a href="foo.com">This text should turn green when you hover over it.</a>
-
-  <a name="anchor-name">
-    Ce texte devrait changer de couleur lorsqu'il est survolé, mais
-    cela n'arrive pas dans Internet Explorer.
-  </a>
-
- -

Mozilla suit la spécification CSS et changera la couleur en vert dans cet exemple. Il existe deux manières d'obtenir le même comportement dans Mozilla que dans Internet Explorer pour ne pas changer la couleur du texte lorsqu'il est survolé :

- - - -

Mode quirks et mode standard

- -

Les anciens navigateurs, comme Internet Explorer 4, affichaient les pages de manière un peu étrange dans certaines conditions. Bien que Mozilla vise à être un navigateur respectueux des standards, il possède trois modes permettant d'afficher les pages plus anciennes créées autour de ces comportements particuliers. Le contenu de la page et son mode d'acheminement détermineront le mode utilisé par Mozilla. Mozilla indiquera son mode de rendu dans Affichage -> Informations sur la page (ou Ctrl+I) ; Firefox indiquera son mode de rendu dans Outils -> Informations sur la page. Le mode dans lequel une page est chargée dépend de son doctype.

- -

Les déclarations doctype (déclarations de type de document) ressemblent à ceci :

- -

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

- -

La partie en bleu s'appelle l'identificateur public, la partie en vert est l'identificateur système, qui est une URI.

- -

Mode standard

- -

Le mode standard est le mode de rendu le plus strict — il affichera les pages conformément aux spécifications HTML et CSS du W3C et n'acceptera aucune déviance. Mozilla l'utilise si une des trois conditions suivantes est remplie :

- - - -

Mode presque standard

- -

Mozilla a ajouté un mode presque standard pour une raison particulière : une section de la spécification CSS 2 détruit les mises en page basées sur une disposition précise de petites images dans des cellules de tableaux. Au lieu de former une image aux yeux de l'utilisateur, chaque petite image est accompagnée d'un certain décalage. L'ancienne page d'accueil d'IBM montrée dans la Figure 5 en est un exemple.

- -

Figure 5. Images décalées

- -

Images décalées

- -

Le mode presque standard se comporte presque exactement comme le mode standard, sauf en ce qui concerne les questions de décalage des images. Ce problème apparait souvent sur des pages respectant les standards et produit un affichage incorrect.

- -

Mozilla utilise le mode presque standard dans les conditions suivantes :

- - - -

Vous pourrez en savoir plus en lisant l'article sur les images décalées.

- -

Mode quirks

- -

Actuellement, le Web est rempli de balisages HTML invalides, ainsi que de balisages qui ne fonctionnent que grâce à des bugs dans les navigateurs. Les anciens navigateurs de Netscape, lorsqu'ils dominaient le marché, avaient des bugs. Lorsqu'Internet Explorer est arrivé, il a imité ces bugs afin de fonctionner avec le contenu disponible à l'époque. Chaque fois qu'un nouveau navigateur est arrivé sur le marché, la plupart de ces bugs, appelés quirks (bizarreries en anglais) ont été conservés pour rester compatible avec les anciennes pages. Mozilla en gère un grand nombre dans son mode de rendu quirks. Notez qu'à cause de ces « quirks », les pages sont affichées plus lentement que si elles respectaient les standards. La plupart des pages Web sont affichées dans ce mode.

- -

Mozilla utilise le mode quirks aux conditions suivantes :

- - - -

Pour en savoir plus, consultez les articles Comportement du mode quirks de Mozilla et Le sniffing de DOCTYPE dans Mozilla.

- -

Différences dans la gestion des évènements

- -

Mozilla et Internet Explorer diffèrent à peu près totalement dans leur gestion des évènements. Le modèle évènementiel de Mozilla suit celui du W3C et de Netscape. Dans Internet Explorer, si une fonction est appelée depuis un évènement, elle peut accéder à l'objet event depuis window.event. Mozilla passe un objet event aux gestionnaires d'évènements. Ils doivent passer spécifiquement l'objet en paramètre à la fonction appelée.

- -

Voici un exemple de gestion d'évènement fonctionnant dans les deux navigateurs (notez que cela signifie que vous ne pourrez pas définir de variable globale appelée event dans votre) :

- -
<div onclick="handleEvent(event);">Cliquez ici !</div>
-
-<script>
-  function handleEvent(aEvent) {
-    var myEvent = window.event ? window.event : aEvent;
-  }
-</script>
-
- -

Les propriétés et fonctions exposées par l'objet event portent souvent des noms différents dans Mozilla et dans Internet Explorer, comme le montre le Tableau 4.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tableau 4. Différences entre les propriétés d'évènements dans Mozilla et Internet Explorer
Nom dans Internet ExplorerNom dans MozillaDescription
altKeyaltKeyPropriété booléenne indiquant si la touche Alt était enfoncée au cours de l'évènement.
cancelBubblestopPropagation()Utilisé pour empêcher l'évènement de se propager plus haut dans l'arbre.
clientXclientXLa coordonnée X de l'évènement, relativement à la fenêtre de visualisation de l'élément.
clientYclientYLa coordonnée Y de l'évènement, relativement à la fenêtre de visualisation de l'élément.
ctrlKeyctrlKeyPropriété booléenne indiquant si la touche Ctrl était enfoncée au cours de l'évènement.
fromElementrelatedTargetPour les évènements souris, il s'agit de l'élément depuis lequel le pointeur a bougé.
keyCodekeyCodePour les évènements clavier, il s'agit d'un nombre représentant la touche pressée. Il vaut 0 pour les évènements souris. Pour les évènements keypress (pas keydown ou keyup) sur des touches produisant une sortie, l'équivalent dans Mozilla est charCode plutôt que keyCode.
returnValuepreventDefault()Utilisé pour empêcher l'action par défaut de l'évènement de se déclencher.
screenXscreenXLa coordonnée X de l'évènement, relativement à l'écran.
screenYscreenYLa coordonnée Y de l'évènement, relativement à l'écran.
shiftKeyshiftKeyPropriété booléenne indiquant si la touche Majuscule était enfoncée au cours de l'évènement.
srcElementtargetL'élément auquel l'évènement a été envoyé en premier lieu.
toElementcurrentTargetPour les éléments souris, il s'agit de l'élément vers lequel la souris s'est déplacée.
typetypeRenvoie le nom de l'évènement.
- -

Accrochage de gestionnaires d'évènements

- -

Mozilla permet d'attacher des évènements de deux manières différentes depuis JavaScript. La première, permise dans tous les navigateurs, est de définir des propriétés event directement sur les objets. Pour définir un gestionnaire d'évènement click, une référence à une fonction est passée à la propriété onclick de l'objet :

- -
<div id="myDiv">Cliquez ici !</div>
-
-<script>
-  function handleEvent(aEvent) {
-    // si aEvent vaut null, on est dans le modèle d'Internet Explorer,
-    // donc on utilise window.event.
-    var myEvent = aEvent ? aEvent : window.event;
-  }
-
-  function onPageLoad(){
-    document.getElementById("myDiv").onclick = handleEvent;
-  }
-</script>
-
- -

Mozilla permet également d'utiliser la manière standardisée par le W3C d'attacher des gestionnaires d'évènements à des nœuds DOM. On utilise pour cela les méthodes addEventListener() et removeEventListener(), tout en bénéficiant de la possibilité de définir plusieurs écouteurs pour le même type d'évènement. Chacune de ces deux méthodes a besoin de trois paramètres : le type d'évènement, une référence à une fonction et une valeur booléenne indiquant si l'écouteur doit traiter l'évènement dans sa phase de capture. Si cette valeur vaut false, seuls les évènements en cours de propagation seront traités. Les évènements W3C se déroulent en trois phases : une phase de capture, une phase sur l'objectif et une phase de propagation (bubbling). Chaque objet event dispose d'un attribut eventPhase indiquant la phase dans laquelle il se trouve (les indices débutent à 0). Chaque fois qu'un évènement est déclenché, il démarre depuis l'élément DOM le plus extérieur, celui que se trouve à la racine de l'arbre. Il parcourt ensuite le DOM en utilisant le chemin le plus court vers l'objectif, c'est alors la phase de capture. Lorsque l'évènement atteint son objectif, il passe dans la seconde phase. Il repart en suite à travers l'arbre DOM vers la racine ; c'est la troisième phase, dite de propagation (bubbling). Le modèle évènementiel d'Internet Explorer ne possède que cette troisième phase ; par conséquent, en définissant le troisième paramètre à false, on obtient un comportement semblable à celui d'Internet Explorer :

- -
<div id="monDiv">Cliquez ici !</div>
-
-<script>
-
-  function handleEvent(aEvent) {
-    // si aEvent vaut null, on est dans le modèle d'Internet Explorer,
-    // on récupère donc window.event.
-    var myEvent = aEvent ? aEvent : window.event;
-  }
-
-  function onPageLoad() {
-    var element = document.getElementById("monDiv");
-    element.addEventListener("click", handleEvent, false);
-  }
-</script>
-
- -

Un avantage de addEventListener() et removeEventListener() par rapport à la définition de propriétés est qu'il devient possible de placer plusieurs écouteurs pour le même évènement, chacun appelant une fonction différente. Par conséquent, le retrait d'un gestionnaire d'évènement nécessite les trois mêmes paramètres que pour son ajout.

- -

Mozilla ne permet pas d'utiliser la méthode de conversion des balises <script> en gestionnaires d'évènements qui existe dans Internet Explorer, qui étend <script> avec des attributs for et event (voir le Tableau 5). Il ne permet pas non plus d'utiliser les méthodes attachEvent et detachEvent. À la place, il faut utiliser les méthodes addEventListener et removeEventListener. Internet Explorer ne supporte quant à lui pas la spécification d'évènements du W3C.

- - - - - - - - - - - - - - - - - - - - -
Table 5. Différences entre les méthodes évènementielles de Mozilla et d'Internet Explorer
Méthode d'Internet ExplorerMéthode de MozillaDescription
attachEvent(type, fonction)addEventListener(type, fonction, capture)Ajoute un gestionnaire d'évènement à un élément DOM.
detachEvent(type, fonction)removeEventListener(type, fonction, capture)Retire un gestionnaire d'évènement d'un élément DOM.
- -

Édition de texte enrichi

- -

Bien que Mozilla se flatte d'être un des navigateurs les plus respectueux des standards Web du W3C, il permet également d'utiliser des fonctionnalités non standard, comme innerHTML et l'édition de texte enrichi, lorsqu'aucun équivalent W3C n'existe.

- -

Mozilla 1.3 a intégré une implémentation de la fonctionnalité designMode d'Internet Explorer, qui transforme un document HTML en un champ d'édition de texte enrichi. Une fois en mode d'édition, des commandes peuvent être exécutées sur le document via execCommand. Mozilla ne permet pas d'utiliser l'attribut contentEditable pour rendre n'importe quel contrôle modifiable. Vous pouvez par contre utiliser un élément iframe pour créer un éditeur de texte enrichi.

- -

Différences dans l'édition de texte enrichi

- -

Mozilla supporte la méthode standard W3C d'accès à l'objet document d'un iframe avec IFrameElmRef.contentDocument, tandis qu'Internet Explorer vous demande d'y accéder par document.frames{{ mediawiki.external('\"IframeName\"') }} avant de pouvoir accéder à l'objet document :

- -
<script>
-function getIFrameDocument(aID) {
-  var rv = null;
-
-  // si contentDocument existe, on utilise la méthode W3C
-  if (document.getElementById(aID).contentDocument){
-    rv = document.getElementById(aID).contentDocument;
-  } else {
-    // IE
-    rv = document.frames[aID].document;
-  }
-  return rv;
-}
-</script>
-
- -

Une autre différence entre Mozilla et Internet Explorer est le code HTML généré par l'éditeur de texte enrichi. Mozilla utilise CSS par défaut sur le balisage généré. Cependant, il vous permet de passer du mode CSS au mode HTML en utilisant la commande useCSS avec execCommand et de la passer indifféremment de true à false. Internet Explorer utilise toujours un balisage HTML.

- -
Mozilla (CSS):
-  <span style="color: blue;">Big Blue</span>
-
-Mozilla (HTML):
-  <font color="blue">Big Blue</font>
-
-Internet Explorer:
-  <FONT color="blue">Big Blue</FONT>
-
- -

Voici une liste des commandes qui peuvent être passées à execCommand dans Mozilla :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tableau 6. Commandes d'édition de texte enrichi
Nom de commandeDescriptionParamètre
boldInverse l'attribut bold (gras) de la sélection.---
createlinkGénère un lien HTML depuis le texte sélectionné.L'URL à utiliser pour le lien
deleteSupprime la sélection.---
fontnameChange la police utilisée pour le texte sélectionné.Le nom de la police à utiliser (par exemple Arial)
fontsizeChange la taille de police utilisée pour le texte sélectionné.La taille de police à utiliser
fontcolorChange la couleur de police utilisée pour le texte sélectionné.La couleur à utiliser
indentDécale le bloc dans lequel se trouve le curseur vers la droite.---
inserthorizontalruleInsère une ligne horizontale (élément <hr>) à l'emplacement du curseur.---
insertimageInsère une image à l'emplacement du curseur.URL de l'image à utiliser
insertorderedlistInsère une liste ordonnée (élément <ol>) à l'emplacement du curseur.---
insertunorderedlistInsère une liste non ordonnée (élément <ul>) à l'emplacement du curseur.---
italicInverse l'attribut italique de la sélection.---
justifycenterCentre le contenu à la ligne courante.---
justifyleftAligne à gauche le contenu à la ligne courante.---
justifyrightAligne à droite le contenu à la ligne courante.---
outdentRéduit le décalage vers la droite du bloc dans lequel se trouve le curseur.---
redoRétablit la dernière commande annulée.---
removeformatRetire tout le formatage de la sélection.---
selectallSélectionne tout dans l'éditeur de texte enrichi.---
strikethroughInverse l'attribut barré du texte sélectionné.---
subscriptConvertit la sélection en indice.---
superscriptConvertit la sélection en exposant.---
underlineInverse l'attribut souligné du texte sélectionné.---
undoAnnule la dernière commande exécutée.---
unlinkEnlève toute information de lien de la sélection.---
useCSSActive ou désactive l'utilisation de CSS pour le balisage généré.Valeur booléenne
- -

Pour plus d'informations, consultez L'édition de texte enrichi dans Mozilla.

- -

Différences dans la gestion de XML

- -

Mozilla un très bon support d'XML et des technologies liées, comme XSLT et les services Web. Il permet également d'utiliser quelques extensions non standard d'Internet Explorer comme XMLHttpRequest.

- -

Gestion de XML

- -

Comme dans le cas du HTML standard, Mozilla supporte la spécification DOM XML du W3C, qui permet de manipuler à peu près n'importe quel aspect d'un document XML. Les différences entre le DOM XML d'Internet Explorer et celui de Mozilla sont généralement causées par le comportement non standard d'Internet Explorer. La différence la plus commune est sans doute leur manière de gérer les nœuds texte constitués d'espaces blancs. Souvent, le XML généré contient des espaces entre les nœuds XML. Dans Internet Explorer, Node.childNodes ne renverra pas ces nœuds texte d'espaces blancs. Dans Mozilla, ils feront partie du tableau de résultats.

- -
XML :
-  <?xml version="1.0"?>
-  <myXMLdoc xmlns:myns="http://myfoo.com">
-    <myns:foo>bar</myns:foo>
-  </myXMLdoc>
-
-JavaScript :
-  var myXMLDoc = getXMLDocument().documentElement;
-  alert(myXMLDoc.childNodes.length);
-
- -

La première ligne de JavaScript charge le document XML et accède à l'élément racine (myXMLDoc) à l'aide de documentElement. La seconde ligne affiche simplement le nombre de nœuds enfants. Selon la spécification du W3C, les espaces blancs et les nouvelles lignes fusionnent en un seul nœud texte s'ils se suivent. Pour Mozilla, le nœud myXMLdoc a trois enfants : un nœud texte contenant un retour à la ligne et deux espaces ; le nœud myns:foo ; et un autre nœud texte avec un retour à la ligne. Internet Explorer, cependant, ne respecte pas cela et renverra « 1 » dans le code ci-dessus, c'est-à-dire uniquement le nœud myns:foo. Par conséquent, pour parcourir les nœuds enfants sans prendre en compte les nœuds texte, il faut pouvoir distinguer de tels nœuds.

- -

Comme mentionné plus haut, chaque nœud a une propriété nodeType représentant le type de nœud. Par exemple, un nœud d'élément est de type 1, tandis qu'un nœud de document est de type 9. Pour éviter les nœuds textes, vous devez regarder ceux qui sont de type 3 (nœud texte) et 8 (nœud de commentaire).

- -
XML :
-  <?xml version="1.0"?>
-  <myXMLdoc xmlns:myns="http://myfoo.com">
-    <myns:foo>bar</myns:foo>
-  </myXMLdoc>
-
-JavaScript :
-  var myXMLDoc = getXMLDocument().documentElement;
-  var myChildren = myXMLDoc.childNodes;
-
-  for (var run = 0; run < myChildren.length; run++){
-    if ( (myChildren[run].nodeType != 3) &&
-          myChildren[run].nodeType != 8) ){
-      // not a text or comment node
-    };
-  };
-
- -

Consultez Gestion des espaces dans le DOM pour plus de détails et une solution possible.

- -

Ilots de données XML (data islands)

- -

Internet Explorer dispose d'une fonctionnalité non standard appelée XML data islands, permettant d'intégrer du XML à l'intérieur d'un document HTML à l'aide d'une balise HTML non standard <xml>. Mozilla ne gère pas ces ilots de données XML et les traite comme des balises HTML inconnues. Même s'il est possible d'accomplir la même chose en utilisant XHTML, ce n'est généralement pas une option, le support d'Internet Explorer pour XHTML étant faible.

- -

Ilot de données XML dans IE :

- -
<xml id="xmldataisland">
-  <foo>bar</foo>
-</xml>
-
- -

Une solution fonctionnant dans les deux navigateurs est d'utiliser des analyseurs DOM (parsers) qui analyseront une chaîne contenant un document XML sérialisé pour le transformer en un document généré. Mozilla utilise l'objet DOMParser, qui reçoit la chaîne sérialisée et en fait un document XML. Dans Internet Explorer, on peut réaliser la même chose en utilisant ActiveX. L'objet créé par new ActiveXObject("Microsoft.XMLDOM") dispose d'une méthode loadXML pouvant recevoir une chaîne en paramètre depuis laquelle il pourra générer un document. Le code suivant montre comment faire :

- -
var xmlString = "<xml id=\"xmldataisland\"><foo>bar</foo></xml>";
-var myDocument;
-
-if (window.DOMParser) {
-  // Ce navigateur semble connaitre DOMParser
-  var parser = new DOMParser();
-  myDocument = parser.parseFromString(xmlString, "text/xml");
-} else if (window.ActiveXObject){
-  // Internet Explorer, on crée un nouveau document XML avec ActiveX
-  // et loadXML comme analyseur DOM.
-  myDocument = new ActiveXObject("Microsoft.XMLDOM");
-  myDocument.async = false;
-
-  myDocument.loadXML(xmlString);
-} else {
-  // Not supported.
-}
-
- -

Consultez Utilisation de Data Islands XML dans Mozilla pour une approche alternative.

- -

XMLHttpRequest

- -

Internet Explorer permet d'envoyer et de récupérer des fichiers XML au travers de la classe XMLHTTP de MSXML, instanciable via ActiveX à l'aide de new ActiveXObject("Msxml2.XMLHTTP") ou new ActiveXObject("Microsoft.XMLHTTP"). Comme il n'existait pas de méthode standard de faire cela, Mozilla fournit la même fonctionnalité dans un objet JavaScript global XMLHttpRequest. Depuis sa version 7, Internet Explorer a adopté cet objet « natif » XMLHttpRequest. Un brouillon de travail du W3C a également été créé sur base de cet objet global.

- -

Après instanciation de l'objet à l'aide de new XMLHttpRequest(), il est possible d'utiliser la méthode open pour spécifier le type de requête (GET ou POST) à utiliser, le fichier à charger, et si cela doit se faire de manière asynchrone ou non. Si l'appel est asynchrone, il faut donner à la propriété membre onload la référence à une fonction, qui sera appelée dès que la requête aura abouti .

- -

Requête synchrone :

- -
var myXMLHTTPRequest = new XMLHttpRequest();
-myXMLHTTPRequest.open("GET", "data.xml", false);
-
-myXMLHTTPRequest.send(null);
-
-var myXMLDocument = myXMLHTTPRequest.responseXML;
-
- -

Requête asynchrone :

- -
var myXMLHTTPRequest;
-
-function xmlLoaded() {
-  var myXMLDocument = myXMLHTTPRequest.responseXML;
-}
-
-function loadXML(){
-  myXMLHTTPRequest = new XMLHttpRequest();
-  myXMLHTTPRequest.open("GET", "data.xml", true);
-  myXMLHTTPRequest.onload = xmlLoaded;
-  myXMLHTTPRequest.send(null);
-}
-
- -

Le Tableau 7 fournit une liste des méthodes et propriétés disponibles pour l'objet XMLHttpRequest dans Mozilla.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tableau 7. Méthodes et propriétés de XMLHttpRequest
NameDescription
void abort()Arrête la requête si elle est toujours en cours.
string getAllResponseHeaders()Renvoie tous les en-têtes de réponse dans une chaîne.
string getResponseHeader(string entete)Renvoie la valeur de l'en-tête spécifié.
functionRef onerrorSi ce paramètre est défini, la fonction référencée sera appelée si jamais une erreur se produit au cours de la requête.
functionRef onloadSi ce paramètre est défini, la fonction référencée sera appelée lorsque la requête aboutit et que la réponse a été reçue. Utilisé avec les requêtes asynchrones.
void open (string methode_HTTP, string URL)
-
- void open(string methode_HTTP, string URL, boolean async, string utilisateur, string motdepasse)
Initialise la requête pour l'URL spécifiée, en utilisant la méthode HTTP GET ou POST. Pour envoyer la requête, appelez la méthode send() après initialisation. Si async vaut false, la requête sera synchrone, autrement elle restera asynchrone (comportement par défaut). Il est également possible de spécifier un nom d'utilisateur et un mot de passe pour l'URL fournie si nécessaire.
int readyStateÉtat de la requête. Valeurs possibles : - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValeurDescription
0NON INITIALISÉE — open() n'a pas encore été appelée.
1CHARGEMENT — send() n'a pas encore été appelée.
2CHARGÉE — send() a été appelée, les en-têtes et l'état sont disponibles.
3EN COURS D'INTERACTION — Le téléchargement est en cours, responseText contient la partie déjà reçue.
4TERMINÉE — Toutes les opérations sont terminées.
-
string responseTextChaîne contenant la réponse.
DOMDocument responseXMLDocument DOM contenant la réponse.
void send(variant corps)Lance la requête. Si le paramètre body est défini, il est envoyé comme corps de la requête POST. body peut être un document XML ou un document XML sérialisé dans une chaîne.
void setRequestHeader(string entete, string valeur)Définit un en-tête de requête HTTP à utiliser dans la requête. Doit être appelée après l'appel à open().
string statusLe code d'état de la réponse HTTP.
- -

Différences concernant XSLT

- -

Mozilla supporte la version 1.0 des transformation XSL (XSLT). Il permet également d'utiliser JavaScript pour effectuer des transformations XSLT et permet d'utiliser XPath sur un document.

- -

Mozilla a besoin que les fichiers XML et XSLT soient envoyés avec un type mime XML (text/xml ou application/xml). C'est la raison la plus courante pour laquelle XSLT ne fonctionne pas dans Mozilla alors qu'il fonctionne avec Internet Explorer. Mozilla est strict dans ce domaine.

- -

Internet Explorer 5.0 et 5.5 supportaient le brouillon de travail de XSLT, qui est sensiblement différent de la recommandation finale XSLT 1.0. La meilleure manière de savoir pour quelle version un fichier XSLT a été écrit est de regarder son espace de noms (namespace). L'espace de noms pour la recommandation XSLT 1.0 est http://www.w3.org/1999/XSL/Transform, tandis que celui du brouillon de travail était http://www.w3.org/TR/WD-xsl. Internet Explorer 6 gère toujours ce brouillon de travail pour pour des raisons de compatibilité, mais ce n'est pas le cas de Mozilla. Mozilla gère uniquement la recommandation finale.

- -

Si votre XSLT a besoin de distinguer les navigateurs, vous pouvez utiliser la propriété système « xsl:vendor ». Le moteur XSLT de Mozilla s'identifiera comme "Transformiix" tandis qu'Internet Explorer renverra "Microsoft".

- -
<xsl:if test="system-property('xsl:vendor') = 'Transformiix'">
-  <!-- Instructions spécifiques à Mozilla -->
-</xsl:if>
-<xsl:if test="system-property('xsl:vendor') = 'Microsoft'">
-  <!-- Instructions spécifiques à Internet Explorer -->
-</xsl:if>
-
- -

Mozilla fournit également des interfaces JavaScript pour XSLT, permettant à un site Web de réaliser des transformations XSLT en mémoire. Cela peut se faire en utilisant l'objet JavaScript global XSLTProcessor. XSLTProcessor a besoin que les fichiers XML et XSLT soient chargés, car il utilise leurs documents DOM. Le document XSLT, importé par XSLTProcessor, permet de manipuler les paramètres XSLT.

- -

XSLTProcessor peut générer un document standalone à l'aide de transformToDocument(), ou créer un fragment de document avec transformToFragment() qui peut ensuite être ajouté facilement à un autre document DOM. Un exemple est fourni ci-dessous :

- -
var xslStylesheet;
-var xsltProcessor = new XSLTProcessor();
-
-// charge le fichier xslt, example1.xsl
-var myXMLHTTPRequest = new XMLHttpRequest();
-myXMLHTTPRequest.open("GET", "example1.xsl", false);
-myXMLHTTPRequest.send(null);
-
-// récupère le document XML et l'importe
-xslStylesheet = myXMLHTTPRequest.responseXML;
-
-xsltProcessor.importStylesheet(xslStylesheet);
-
-// charge le fichier xml, example1.xml
-myXMLHTTPRequest = new XMLHttpRequest();
-myXMLHTTPRequest.open("GET", "example1.xml", false);
-myXMLHTTPRequest.send(null);
-
-var xmlSource = myXMLHTTPRequest.responseXML;
-
-var resultDocument = xsltProcessor.transformToDocument(xmlSource);
-
- -

Après la création d'un XSLTProcessor, le fichier XSLT doit être chargé à l'aide de XMLHttpRequest. L'attribut membre responseXML de XMLHttpRequest contient le document XML du fichier XSLT, qui est passé à importStylesheet. On réutilise ensuite XMLHttpRequest pour charger le document XML source à transformer ; ce docuemnt est alors passé à la méthide transformToDocument de XSLTProcessor. Le Tableau 8 fournit une liste des méthodes de XSLTProcessor.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tableau 8. Méthodes de XSLTProcessor
MéthodeDescription
void importStylesheet(Node styleSheet)Importe la feuille de styles XSLT. Le paramètre styleSheet est le nœud racine du document DOM d'une feuille de style XSLT.
DocumentFragment transformToFragment(Node source, Document owner)Transforme le nœud source en appliquant la feuille de styles importée par la méthode importStylesheet et génère un objet DocumentFragment. owner spécifie le document DOM auquel ce fragment doit appartenir, ce qui lui permettra d'être ajouté à ce document.
Document transformToDocument(Node source)Transforme le nœud source en lui appliquant la feuille de styles importée par la méthode importStylesheet et renvoie un document DOM standalone.
void setParameter(String namespaceURI, String localName, Variant value)Définit un paramètre dans la feuille de styles XSLT importée.
Variant getParameter(String namespaceURI, String localName)Obtient la valeur d'un paramètre dans la feuille de styles XSLT importée.
void removeParameter(String namespaceURI, String localName)Retire tous les paramètres définis de la feuille de styles XSLT importée et rétablit les paramètres par défaut pour XSLT.
void clearParameters()Retire tous les paramètres définis et rétablit les paramètres par défaut spécifiés dans la feuille de styles XSLT.
void reset()Retire tous les paramètres et toutes les feuilles de styles.
- -
-

Informations sur le document original

- - -
- -

{{ languages( { "en": "en/Migrate_apps_from_Internet_Explorer_to_Mozilla", "es": "es/Migrar_aplicaciones_desde_Internet_Explorer_a_Mozilla", "ko": "ko/Migrate_apps_from_Internet_Explorer_to_Mozilla", "zh-cn": "cn/\u4eceInternet_Explorer\u8fc1\u79fb\u5230Mozilla", "zh-tw": "zh_tw/\u8f49\u63db\u7db2\u9801\u7a0b\u5f0f\uff1a\u5f9e_IE_\u5230_Mozilla" } ) }}

diff --git "a/files/fr/mod\303\250le_de_s\303\251curit\303\251_mozilla_des_services_web/index.html" "b/files/fr/mod\303\250le_de_s\303\251curit\303\251_mozilla_des_services_web/index.html" deleted file mode 100644 index b20ca8da17..0000000000 --- "a/files/fr/mod\303\250le_de_s\303\251curit\303\251_mozilla_des_services_web/index.html" +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Modèle de sécurité Mozilla des services Web -slug: Modèle_de_sécurité_Mozilla_des_services_Web -tags: - - Services_Web_XML -translation_of: Mozilla/Mozilla_Web_Services_Security_Model ---- -

Présentation

- -

(This document is being compiled from scattered documentation and source code and most of the information in it has not been verified. Please do not depend on anything in it being correct for security.)

- -

Afin d'empêcher le navigateur d'être utilisé comme un outil permettant aux sites Web d'obtenir des privilèges qui doivent rester du domaine de l'utilisateur (tels qu'être derrière un pare-feu ou tirer avantage des cookies utilisateur), Les navigateurs Web restreignent les droits de pages Web lorsqu'elles accèdent à des ressources d'autres domaines. Ces restrictions s'appliquent également aux services Web.

- -

Cependant, les services Web peuvent être destinés à être accessible depuis d'autres domaines, voire depuis n'importe quel domaine. Mozilla permet aux sites d'hébergement des services Web de lui indiquer quels services Web sont accessibles depuis d'autres sites. Ils y parviennent en créant un fichier nommé web-scripts-access.xml à la racine du serveur qui accorde les permissions d'accès aux services Web par les domaines extérieurs. Par exemple, pour déterminer quels sites Web peuvent accéder à un service situé à l'adresse http://www.example.com/dir1/dir2/service, Mozilla chargera le fichier http://www.example.com/web-scripts-access.xml, qui pourra choisir de déléguer la décision au fichier http://www.example.com/dir1/dir2/web...pts-access.xml.

- -

Format du fichier web-scripts-access.xml

- -

Le fichier web-scripts-access.xml est un document XML. Toutes erreurs dans la syntaxe XML, aussi bien que tout échec to follow the format, fera que le document sera ignoré.

- -

L'élément webScriptAccess

- -

Son élément racine doit être une élément webScriptAccess de l'espace de nommage http://www.mozilla.org/2002/soap/security. Cet élément doit avoir au moins un élément descendant delegate ou n'importe quelle quantité (0 ou plus) d'élément descendant allow. Tous ces éléments descendants doivent être dans le même espace de nommage que le parent, et doivent être vide.

- -

L'élément delegate

- -

La présence d'un élément delegate signifie que le navigateur pourra déléguer les contrôles d'accès à un fichier web-scripts-access.xml situé dans le répertoire du service Web. Par exemple, lors de l'accès à un service Web situé à l'adresse http://www.example.com/dir1/dir2/service, si le fichier d'accès situé à l'adresses http://www.example.com/web-scripts-access.xml contient un élément delegate, Mozilla utilisera plutôt http://www.example.com/dir1/dir2/web...ipt-access.xml pour déterminer si l'accès est autorisé ou non. Si un tel fichier n'existe pas, alors l'accès sera interdit.

- -

L'élément allow

- -

Si aucun élément delegate n'est présent ou si e service Web est dans le même répertoire que le fichier web-script-access.xml, alors les éléments allow seront traités. Si le fichier existe mais qu'il ne contient pas d'élément allow, alors tous les accès seront autorisés. Si des éléments allow existent, alors l'accès sera permis si au moins l'un d'entre eux l'autorise.

- -
L'attribut type
- -

L'attribut type de l'élément allow peut prendre les valeurs suivantes :

- -
-
any 
-
Signifie que l'élément allow s'applique à tous les services qui utilisent le fichier web-scripts-access.xml pour les vérifications de sécurité. Il pourra y avoir bien plus de services Web dans l'avenir qu'il n'en existe à l'heure actuelle. Ceci est équivalent à l'absence d'attribut type.
-
load (Non implémenté) 
-
Capacité à charger des documents via XMLHttpRequest ou tout autre mécanisme similaire.
-
soap 
-
Requêtes SOAP sans vérification des en-têtes
-
soapv 
-
Requêtes SOAP avec vérification des en-têtes
-
- -
L'attribut from
- -

L'attribut from de l'élément allow indique les sites appelants auxquels s'applique l'élément allow. Si aucun attribut from n'existe alors l'élément allow s'applique à tous les sites. Autrement, l'attribut from donne une URL à valider, qui peut contenir jusqu'à deux astérisques (*) qui correspondent à n'importe quel caractère. La validation se fait par rapport à une URL pour laquelle le répertoire et le fichier ont été supprimés, ainsi valider une page spécifique fera échouer la validation dans son ensemble. (Is this correct?)

- -

Exemples de fichier web-scripts-access.xml

- -

Ces exemples n'ont pas été testés ! Ils devraient l'être afin de s'assurer qu'ils font bien se qu'ils sont supposé faire.

- -

Autoriser l'accès depuis n'importe quelle page Web à tous les services Web d'un site

- -

Notez que ceci est une chose sensible à ne faire que le site ne sert pas de contenu basé sur les cookies, l'authentification HTTP, l'adresse IP/Domaine d'origine, ou tout autre méthode d'authentification.

- -
<webScriptAccess xmlns="http://www.mozilla.org/2002/soap/security"/></pre>
-
- - - -

Autoriser l'accès aux services SOAP depuis un répertoire de services Web

- -

Pour autoriser l'accès aux services uniquement depuis un répertoire donné (par exemple, le répertoire où se trouve des services sécurisés, publiques et ne nécessitant pas d'authentification), vous avez besoin d'un fichier web-scripts-access.xml dans le répertoire racine du serveur et un autre dans le répertoire contenant les services. Dans le répertoire racine du serveur :

- -
<webScriptAccess xmlns="http://www.mozilla.org/2002/soap/security">
-<delegate/>
-<allow type="none"/>
-</webScriptAccess>
-
- -

Et dans le répertoire des services :

- -
<webScriptAccess xmlns="http://www.mozilla.org/2002/soap/security">
-<allow type="soapv"/>
-<allow type="soap"/>
-</webScriptAccess>
-
- -

=== Good examples === (Needed.)

- -

Références

- - - -

Autres ressources

- - diff --git a/files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html b/files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html deleted file mode 100644 index 9f040164df..0000000000 --- a/files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: omni.ja (formerly omni.jar) -slug: Mozilla/About_omni.ja_(formerly_omni.jar) -translation_of: Mozilla/About_omni.ja_(formerly_omni.jar) ---- -

{{ gecko_minversion_header("2.0") }}

- -

Firefox et Thunderbird réalisent des améliorations de performances en déplaçant plusieurs de leurs fichiers autonomes dans un seul fichier JAR appelé omni.ja; ce qui réduit le nombre d'E/S nécessaire pour charger l'application. Cet article couvre le contenu de l'archive et des techniques d'inspection de ces contenus.

- -
-

Remarque: Depuis Firefox 10 et Thunderbird 10, l'extension de fichier .ja est utilisée parce que Windows System Restore ne sauvegarde pas les fichiers .jar.

-
- -

Inspecter omni.ja

- -
Remarque: Lors de l'extraction omni.ja, vous pouvez obtenir de manière incorrecte de faux avertissements de certains logiciels de protection contre les virus.
- -

Plusieurs outils d'archivage et de zip/unzip (y compris toutes les versions de 7-Zip) ne peuvent pas lire omni.ja, en raison de l'optimisation qui est appliquée au fichier. Il est suggéré que les utilisateurs de Windows 7 décompressent le fichier en le renommant omni.zip et en utilisant l'Explorateur Windows pour extraire tous les fichiers. Les utilisateurs de versions plus anciennes de Windows peuvent utiliser l'outil InfoZip pour extraire les fichiers - faire une copie de omni.ja, et glisser-déposer sur unzip.exe. Les utilisateurs de Linux peuvent utiliser simplement unzip pour decompresser les fichiers de omni.ja.

- -

omni.ja est également incompatible avec les fichiers Zip dans l'autre sens; l'édition de fichiers extraits n'affecteront pas Firefox et le zip des fichiers modifiés peuvent empecher Firefox de fonctionner si vous n'utilisez pas les bonnes options. La commande correcte pour zipper omni.ja est:

- -
zip -qr9XD omni.ja *
- -
Remarque: Avant Firefox 10 et Thunderbird 10, omni.ja était appelé omni.jar .
- -

contenu de omni.ja

- -

Le fichier omni.ja contient des ressources d'application variés:

- -
-
chrome.manifest
-
Le fichier chrome manifest.
-
/chrome/
-
fichiers d'interface utilisateur pour l'application
-
/chrome/localized.manifest
-
Manifeste du contenu francisé; référencé par le fichier chrome manifeste principal.
-
/chrome/nonlocalized.manifest
-
Manifest de contenu non-francisé; référencé par le fichier chrome manifeste principal.
-
/components/
-
Composants de l'application reposant sur XPCOM.
-
/defaults/
-
Fichiers de préférences par défaut.
-
/modules
-
modules de code JavaScript.
-
/res/
-
Divers fichiers de ressources.
-
- -

Voir aussi

- - - -
-

{{ languages( { "ja": "ja/About_omni.jar" } ) }}

-
diff --git a/files/fr/mozilla/add-ons/add-on_debugger/index.html b/files/fr/mozilla/add-ons/add-on_debugger/index.html deleted file mode 100644 index 0cb1094c3f..0000000000 --- a/files/fr/mozilla/add-ons/add-on_debugger/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Débogueur de module complémentaire -slug: Mozilla/Add-ons/Add-on_Debugger -tags: - - Développement - - Extensions - - Firefox - - Guide - - JavaScript - - Modules complémentaires - - debogueur -translation_of: 'https://extensionworkshop.com/documentation/develop/debugging/' ---- -
{{AddonSidebar}}
- -

Le débogueur de module complémentaire (Add-on) vous permet d'exécuter un ensemble d'outils de développement de Firefox dans le contexte de votre module :

- - - -

Le débogueur de module complémentaire n'est pas disponible pour les modules de superposition XUL requis pour le redémarrage. Pour déboguer des modules comme ceux-ci, utilisez la boîte à outils du navigateur.

- -

Pour une rapide introduction sur le débogueur, regardez la rapide démonstration ici (en) :

- -

{{EmbedYouTube("KU3Xsck7qy0")}}

- -

Ouverture du débogueur de module complémentaire

- -
-

Ceci décrit comment ouvrir le débogueur à partir de Firefox 45. Pour les versions antérieures de Firefox, vous devez :

- - - - -
- -

Pour connecter le débogueur d'extensions à un module complémentaire, ouvrez la page modules dans Firefox, assurez-vous que la case "Activer le débogage des modules" est cochée et cliquez sur le bouton "Déboguer" à proximité de votre add-on dans la page.

- -

Ensuite, vous verrez une boîte de dialogue vous demandant d'accepter une connexion entrante. Cliquez sur "OK", et le débogueur va commencer dans une fenêtre séparée. Notez que parfois la fenêtre du débogueur est masquée par la fenêtre principale de Firefox.

- -

{{EmbedYouTube("tGGcA3bT3VA")}}

- -

Utilisation du débogueur de module complémentaire

- -

Le débogueur de module complémentaire a une apparence et un comportement proches de ceux de la Boîte à outils du navigateur, à ceci près que, que la portée de la boîte à outils est l'intégralité du navigateur, alors que celle du débogueur de module est sur le seul module pour lequel il a été lancé. À l'instar de la boîte à outils du navigateur, une barre d'outils en haut vous permet de basculer entre plusieurs outils différents. Dans Firefox 31, il n'y a qu'un seul outil, le débogueur JavaScript, mais à partir de Firefox 32, vous obtenez également la console et l'ardoise.

- -

Le débogueur JavaScript

- -

Il se comporte comme le débogueur JavaScript normal, à l'exception de sa portée qui est le module complémentaire et non une page Web. Sur la gauche, il répertorie les sources JavaScript:

- - - -

Scripts de contenu

- -

Les scripts de contenu ne sont listés que s'ils sont chargés. Par conséquent, si votre module complémentaire charge un script de contenu avec contentScriptFile, le fichier n'apparaîtra pas dans les sources du débogueur tant que vous n'allez pas sur une page qui le charge.

- -

Si vous définissez un point d'arrêt dans un script de contenu, il ne sera pas actif pour les instances du script de contenu chargées après la définition du point d'arrêt.

- -

Par exemple, supposons que vous ayez un module complémentaire qui attache un script de contenu à chaque onglet chargé par l'utilisateur. Le script de contenu ajoute un gestionnaire de clics à la page. Dès que vous ouvrez un onglet, ce script de contenu sera répertorié dans le débogueur. Si vous définissez ensuite un point d'arrêt dans le gestionnaire de clics du script de contenu, l'exécution s'arrêtera lorsque vous cliquerez sur la page. Mais si vous ouvrez un nouvel onglet, il y a maintenant deux instances du script de contenu, et le point d'arrêt ne sera pas activé pour la deuxième instance. Vous devez définir un nouveau point d'arrêt si vous voulez qu'il fonctionne pour la seconde.

- -

Nous étudions des améliorations à ce bug 1016046.

- -

La console

- -

La console se comporte comme la console web, mais sa portée est le module complémentaire et non une page web.

- -

Notez toutefois qu'elle s'exécute réellement dans le contexte du bootstrap.js du module complémentaire, ce qui n'est peut-être pas ce à quoi vous vous attendez si votre module utilise le SDK : vous ne verrez aucun objet défini dans le main.jsde votre extension, et vous ne verrez pas require() non plus. Ce problème fait l'objet d'un suivi  bug 1005193.

- -

Vous pouvez exécuter des instructions de la console dans le contexte de main.js tandis que l'exécution est interrompue dans main.js.

- -

L'ardoise JavaScript

- -

L'ardoise se comporte comme l'ardoise JavaScript normale, mais sa portée est l'extension et non la page web.

- -

Comme pour la console, le module complémentaire s'exécute dans le contexte du bootstrap.js du module complémentaire, même s'il utilise le SDK et, comme avec la console, vous pouvez exécuter le code de l'ardoise dans le contexte de main.js pendant que l'exécution est suspendue dans main.js.

- -

Débogage des pages chrome: et about:

- -

À partir de Firefox 37, vous pouvez déboguer les pages chrome: et about: en utilisant le débogueur normal, comme s'il s'agissait de pages de contenu ordinaires.

diff --git "a/files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" "b/files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" deleted file mode 100644 index 6955588244..0000000000 --- "a/files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: AMO Featured Extensions Policies -slug: Mozilla/Add-ons/AMO/Règles/Featured -translation_of: Mozilla/Add-ons/AMO/Policy/Featured ---- -

{{AddonSidebar}}

- -

Featured add-ons are top-quality extensions and themes highlighted on AMO, Firefox's Add-ons Manager, and across other Mozilla websites. These add-ons showcase the power of Firefox customization and are useful to a wide audience.

- -

Featured extensions are chosen by the Featured Extensions Advisory Board, a small group of extension developers and fans from the Mozilla community who have volunteered to review and vote on nominations.

- -

New featured extensions are chosen every month.

- - - -

Before nominating an extension to be featured, please ensure it meets the following criteria:

- -
    -
  1. The extension must have a complete and informative listing on AMO. This means: -
      -
    • a 64-pixel custom icon
    • -
    • a clear and concise name (no lengthy keywords)
    • -
    • a clear and concise summary of the extension's functionality
    • -
    • detailed description and privacy policy, if applicable
    • -
    • updated screenshots of the extension's functionality
    • -
    -
  2. -
  3. The extension must have excellent user reviews and any problems or support requests must be promptly addressed by the developer.
  4. -
  5. The extension must have a minimum of 500 users.
  6. -
  7. The extension must be built with WebExtensions API.
  8. -
  9. The extension must be compatible with the latest release of Firefox.
  10. -
  11. Most importantly, the extension must have wide consumer appeal to Firefox's users and be outstanding in nearly every way: user experience, performance, security, and usefulness or entertainment value.
  12. -
- -

Discovery Pane

- -

The Get Add-ons section (also referred to as the Discovery Pane) in about:addons serves a distinct editorial function: it is a tightly curated list of extensions and themes selected by Mozilla staff to address an array of the most common user needs (e.g. ad blockers, screenshot tools, etc.). The Discovery Pane is primarily intended to introduce extensions to Firefox users who have limited experience with browser customization. As such, we only select extensions that meet the highest standards of functionality, user experience, and Firefox compatibility.

- -

Only content that is part of AMO’s Featured Extensions collection will be considered for the Discovery Pane; please note that featured content must meet certain criteria.

- -

Discovery Pane content is updated monthly, though some highly popular extensions may remain on the page for an indefinite period of time.

- -

If you’d like to nominate a great extensions for consideration in the Discovery Pane, please send us a link to the add-on on AMO to amo-featured@mozilla.org and we’ll add your nomination to the editorial review queue. There’s no need to mention you’re nominating add-ons specifically for the Discovery Pane, but feel free to note that if you like.

- -

Nominating an Add-on

- -

If you wish to nominate an extension to be featured and it meets the criteria above, send an email to amo-featured@mozilla.org with:

- - - -

Extension nominations are reviewed by the Advisory Board once a month. Common reasons for rejection include lacking wide appeal to consumers, a suboptimal user experience, quality or security issues, incompatibility, and similarity to another featured extension. Rejected extension cannot be re-nominated within 3 months.

- - - -

Mozilla and the Featured Extensions Advisory Board regularly evaluate and rotate out featured extensions. Some of the most common reasons for extensions being removed from the featured list are:

- - - - - -

Every six months a new Advisory Board is chosen based on applications from the add-ons community. Members must:

- - - -

Members of the Mozilla Add-ons team may veto any extension's selection because of security, privacy, compatibility, or any other reason, but in general it is up to the Board to select extensions to feature.

- -

This featured policy only applies to the addons.mozilla.org global list of featured extensions. Extensions featured in other locations are often pulled from this list, but Mozilla may feature any extension in other locations without the Board's consent. Additionally, locale-specific features override the global defaults, so if a locale has opted to select its own features, some or all of the global features may not appear in that locale.

- -

Follow the Add-ons Blog or @mozamo on Twitter to learn when the next application period opens.

- -

Last updated: April 12, 2018

- -

How up-and-coming add-ons become featured and what's involved in the process.

diff --git "a/files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" "b/files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" deleted file mode 100644 index c99c0d1094..0000000000 --- "a/files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Règles des modules -slug: Mozilla/Add-ons/AMO/Règles -translation_of: Mozilla/Add-ons/AMO/Policy ---- -

{{AddonSidebar}}

- -

Mozilla s'engage à assurer une excellente expérience pour nos utilisateurs et développeurs d'extensions. Veuillez consulter les règles ci-dessous avant de soumettre votre module.

- -
-
Agrément du développeur
-
Effective January 5, 2016

-
Processus de revue
-
Add-ons extend the core capabilities of Firefox, allowing users to modify and personalize their Web experience. A healthy add-on ecosystem, built on trust, is vital for developers to be successful and users to feel safe making Firefox their own. For these reasons, Mozilla requires all add-ons to comply with the following set of policies on acceptable practices. The below is not intended to serve as legal advice, nor is it intended to serve as a comprehensive list of terms to include in your add-on’s privacy policy.

-
Présentation des extensions
-
How up-and-coming add-ons become featured and what's involved in the process.

- Nous contacter - -

Comment nous contacter à propos de ces règles ou de votre module.

- -
diff --git "a/files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" "b/files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" deleted file mode 100644 index fab668a282..0000000000 --- "a/files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Add-on Policies -slug: Mozilla/Add-ons/AMO/Règles/Reviews -translation_of: Mozilla/Add-ons/AMO/Policy/Reviews ---- -

{{AddonSidebar}}

- -

Add-ons extend the core capabilities of Firefox, allowing users to modify and personalize their Web experience. A healthy add-on ecosystem, built on trust, is vital for developers to be successful and users to feel safe making Firefox their own. For these reasons, Mozilla requires all add-ons to comply with the following set of policies on acceptable practices. The below is not intended to serve as legal advice, nor is it intended to serve as a comprehensive list of terms to include in your add-on’s privacy policy.

- -

All add-ons are subject to these policies, regardless of how they are distributed. Add-ons that do not comply with these policies may be subject to rejection or disabling by Mozilla.

- -

No Surprises

- -

Surprises can be appropriate in many situations, but they are not welcome when user security, privacy and control are at stake. It is extremely important to be as transparent as possible when submitting an add-on. Users should be able to easily discern what the functionality of your add-on is and not be presented with unexpected user experiences after installing it.

- -

Unexpected Features

- -

“Unexpected” features are those that are unrelated to the add-on’s primary function, and are not likely from the add-on name or description to be expected by a user installing that add-on.

- -

Should an add-on include any unexpected feature that falls into one of the following categories:

- - - -

Then the “unexpected” feature(s) must adhere to all of the following requirements:

- - - -

Content

- -

Add-ons that make use of Mozilla trademarks must comply with the Mozilla Trademark Policy. If the add-on uses “Firefox” in its name, the naming standard the add-on is expected to follow is “<Add-on name> for Firefox”.

- -

In addition, add-ons listed on addons.mozilla.org (AMO) must adhere to the following policies:

- - - -

Submission Guidelines

- -

Add-ons must function only as described, and should provide an appealing user experience. Based on the description of the add-on, a user must be able to understand and use the add-on’s features without requiring expert knowledge. Tips on how to create a good user experience for your add-on can be found here.

- -

During review, the add-on undergoes basic testing in addition to code review. To facilitate the functional testing, the add-on author must provide testing information and, if applicable, testing credentials required to use the add-on if an account is needed for any part of the add-on’s functionality.

- -

Issues brought up during review must be addressed using best efforts. If corrections have been requested, the new version should not contain unrelated changes, as this complicates the review process and can lead to further rejections.

- -

Source Code Submission

- -

Add-ons may contain transpiled, obfuscated, minified or otherwise machine-generated code, but Mozilla needs to review a copy of the human-readable source code. The author must provide this information to Mozilla during submission as well as instructions on how to reproduce the build.

- -

The provided source code will be reviewed by an administrator and will not be redistributed in any way. The code will only be used for the purpose of reviewing the add-on. Failure to provide this information will result in rejection.

- -

Please read our Source Code Submission guidelines to avoid unexpected rejections.

- -

Development Practices

- -

In general, developers are free to maintain their add-ons in the manner they choose. However, in order to maintain appropriate data security and effectively review code, we do have certain technical requirements that all add-ons must meet. In particular, potentially dangerous APIs may only be used in ways that are demonstrably safe, and code within add-ons that cannot be verified as behaving safely and correctly may need to be refactored.

- -

While any code, method or practice in a submitted add-on is subject to review and rejection, the following requirements are of particular importance:

- - - -

Data Disclosure, Collection and Management

- -

You must disclose how the add-on collects, uses, stores and shares user data in the privacy policy field on AMO. Mozilla expects that the add-on limits data collection whenever possible, in keeping with Mozilla’s Lean Data Practices and Mozilla’s Data Privacy Principles, and uses the data only for the purpose for which it was originally collected.

- -

User data includes all information the add-on collects, regardless of the manner. It can be personal data actively provided by the user (such as a name or email address), technical data (such as operating system, build ID, version numbers, crash reports, activation, updates), and interaction or activity data (add-on activity data, visited URLs, console logs), including interactions with Firefox.

- -

The add-on’s privacy policy must be the full policy text; it cannot be a link to an externally hosted privacy policy. In addition, the privacy policy must:

- - - -

A summary of this information must be included in the add-on’s listing description. Finally, you and your add-on must also comply with all applicable data privacy laws as well as any other laws that may apply to your specific add-on.

- -

User Interactions & Technical Data

- - - -

Cookies

- - - -

Personal Data

- - - -

Additional Privacy Protocols

- - - -

Security Vulnerabilities

- -

Because add-ons run in an environment with elevated privileges relative to ordinary web pages, they present a very serious set of security considerations. They have the potential to open security holes not only in the add-ons themselves, but also in the browser, in web pages, and, in particularly distressing cases, the entire system the browser is running on.

- -

As a result, we take our security policies very seriously and apply them to all add-ons, whether hosted on AMO or not. We expect all add-ons to be secure and well-maintained in handling both their own data and their user’s data. They must also securely manage all of their interactions with the web, the browser and the operating system.

- -

Monetization

- - - -

Compliance & Blocklisting

- -

For add-ons that don’t meet these policies, Mozilla may reject or blocklist affected versions or entire add-ons, depending on the extent of their non-compliance.

- -

Generally, Mozilla will attempt to contact the add-on’s developer(s) and provide a reasonable time frame for the problems to be corrected before a block is deployed. If an add-on is considered malicious or its developers have proven unreachable or unresponsive, or in case of repeat violations, blocklisting may be immediate.

- -

Mozilla reserves the right to block or delete the developer’s account on addons.mozilla.org, thereby preventing further use of the service.

diff --git a/files/fr/mozilla/add-ons/bootstrapped_extensions/index.html b/files/fr/mozilla/add-ons/bootstrapped_extensions/index.html deleted file mode 100644 index 4cc231fe1d..0000000000 --- a/files/fr/mozilla/add-ons/bootstrapped_extensions/index.html +++ /dev/null @@ -1,348 +0,0 @@ ---- -title: Modules complémentaires bootstrapés -slug: Mozilla/Add-ons/Bootstrapped_extensions -tags: - - Extensions - - Guide - - Modules complémentaires -translation_of: Archive/Add-ons/Bootstrapped_extensions ---- -

{{LegacyAddonsNotice}}{{AddonSidebar}}

- -

{{ gecko_minversion_header("2.0") }}

- -

Les extensions traditionnelles incluent des superpositions, dans lesquelles l'application peut charger XUL depuis le paquet de l'extension et l'appliquer automatiquement sur sa propre interface utilisateur. Bien que la création d'extensions, qui ajoutent à l'interface utilisateur de l'application, soit relativement simple, cela signifie que la mise à jour, l'installation ou la désactivation d'une extension nécessite un redémarrage de l'application.

- -

Gecko 2.0 {{geckoRelease ("2.0")}} introduit des extensions "bootstrapées". Ce sont des extensions spéciales qui, au lieu d'utiliser une superposition pour appliquer leur interface utilisateur à l'application, s'insèrent par programmation dans l'application. Ceci est fait en utilisant un fichier de script spécial inclus dans l'extension qui contient les fonctions que le navigateur appelle pour commander à l'extension d'installer, désinstaller, démarrer et arrêter.

- -

Toute l'application fait appel à ce fichier de script; l'extension est responsable de l'ajout et de la suppression de son interface utilisateur et de la gestion des autres tâches d'installation et d'arrêt nécessaires.

- -

Cet article explique comment fonctionnent les extensions "bootstrap". Consultez ce didacticiel sur la conversion d'une extension superposée en une opération sans redémarrage pour obtenir un guide pratique étape par étape de la migration.

- -

Le processus de démarrage et d'arrêt

- -

Une fonctionnalité clé des extensions "bootstrapées" est qu'elles doivent pouvoir démarrer et arrêter à la demande de l'application. Lorsque la fonction de startup() (démarrage) de l'extension est appelée, elle doit injecter manuellement son interface utilisateur et tout autre comportement dans l'application. De même, lorsque sa fonction shutdown() (arrêt) est appelée, elle doit supprimer tout ce qu'elle a ajouté à l'application, ainsi que toutes les références à l'un de ses objets.

- -

Il existe plusieurs scénarios dans lesquels la fonction startup() peut être appelée, par exemple :

- - - -

Quelques exemples  de situations où la fonction shutdown() peut être appelée :

- - - -

Notes sur la modification de l'interface utilisateur de l'application

- -

chrome.manifest dans les extensions "bootstrapées"

- -

Vous pouvez utiliser un fichier chrome.manifest dans l'extension "bootstrapée" pour :

- - - -

Toutes les instructions chrome.manifest ne sont pas supportées dans les extensions bootstrapées, par exemple, vous ne pouvez toujours pas enregistrer d' Overlays XUL à partir d'une extension "bootstrapée". Voir la documentation Enregistrement chrome pour les détails.

- -

Dans Firefox 10 et versions ultérieures, le fichier chrome.manifest situé dans la racine du XPI du module complémentaire (c'est-à-dire un frère du fichier install.rdf) est chargé automatiquement. Dans Firefox 8 et 9, vous devez charger / décharger manuellement le manifeste en utilisant {{ifmethod ("nsIComponentManager", "addBootstrappedManifestLocation")}} et {{ifmethod ("nsIComponentManager", "removeBootstrappedManifestLocation")}}. Cette fonctionnalité n'était pas disponible dans les versions de Firefox avant 8.

- -

Ajout manuel d'une interface utilisateur

- -

Si vous décidez de développer une extension "bootstrapée", qui modifie l'interface utilisateur de l'application, voici quelques suggestions pour vous aider à démarrer.

- -

Vous devez rechercher les éléments d'interface utilisateur de l'application appropriés par leur ID en appelant {{domxref ("document.getElementById ()")}}, puis les manipuler pour injecter votre interface utilisateur. Par exemple, vous pouvez accéder à la barre de menus de Firefox avec document.getElementById ("main-menubar").

- -

Assurez-vous qu'au moment de l'arrêt, vous supprimez toute interface utilisateur que vous avez ajoutée.

- -

Création d'une extension "bootstrapée"

- -

Pour marquer une extension comme "bootstrappable", vous devez ajouter l'élément suivant à son manifeste d'installation :

- -
<em:bootstrap>true</em:bootstrap>
- -

Alors, vous devez ajouter un fichier bootstrap.js qui contient les fonctions requises ; elles devraient être à côté du fichier install.rdf dans le paquet de l'extension.

- -

Rétrocompatibilité

- -

Parce que les anciennes versions de Firefox ne connaissent pas la propriété bootstrap ou le fichier bootstrap.js, il n'est pas trop difficile de créer un XPI qui fonctionnera à la fois comme une extension "bootstrapable" et comme une extension traditionnelle. Créez votre extension en tant qu'extension "bootstrapable", puis ajoutez les "overlays" (superpositions) traditionnels. Les versions plus récentes de Firefox utiliseront le script bootstrap.js, en ignorant les composants et les superpositions, alors que les versions plus anciennes utiliseront les superpositions.

- -

Points d'entrée Bootstrap

- -

Le script bootstrap.js doit contenir plusieurs fonctions spécifiques, appelées par le navigateur pour gérer l'extension. Le script est exécuté dans un bac à sable privilégié, qui est mis en cache jusqu'à ce que l'extension soit arrêtée.

- -

startup (démarrage)

- -

Appelé lorsque l'extension doit se démarrer elle-même. Il se produit au moment du lancement de l'application, lorsque l'extension est activée après avoir été désactivée ou après son arrêt afin d'installer une mise à jour. Il peut être appelé plusieurs fois pendant la durée de vie de l'application.

- -

C'est à ce moment que votre extension doit injecter son interface utilisateur, démarrer toutes les tâches qu'elle peut avoir besoin d'exécuter et ainsi de suite.

- -
void startup(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason (motif)
-
Une des constantes causales, indiquant pourquoi l'extension est en cours de démarrage. Ce peut être l'une d'entre elles : APP_STARTUP, ADDON_ENABLE, ADDON_INSTALL, ADDON_UPGRADE ou ADDON_DOWNGRADE.
-
- -

shutdown (arrêt)

- -

Appelé lorsque l'extension doit se fermer, par exemple lorsque l'application est en cours de fermeture, ou lorsqu'elle est sur le point d'être mise à niveau ou désactivée. Toute interface utilisateur qui a été injectée doit être supprimée, les tâches doivent être arrêtées et les objets éliminés.

- -
void shutdown(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason (motif)
-
Une des constantes causales, indiquant pourquoi l'extension est en train de se fermet. Ce peut être l'une d'entre elles : APP_SHUTDOWN, ADDON_DISABLE, ADDON_UNINSTALL, ADDON_UPGRADE ou ADDON_DOWNGRADE.
-
- -

install (installation)

- -

Votre script "bootstrap" doit inclure une fonction install() que l'application appelle avant le premier appel startup() après l'installation, la mise à niveau ou le déclassement de l'extension.

- -
void install(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason (motif)
-
Une des constantes causales, indiquant pourquoi l'extension est en train d'être installée. Ce peut être l'une d'entre elles : ADDON_INSTALL, ADDON_UPGRADE, ou ADDON_DOWNGRADE.
-
- -

uninstall (désinstallation)

- -

Cette fonction est appelée après le dernier appel à shutdown()  avant qu'une version particulière de l'extension soit désinstallée. Il n'est pas appelé si install()  n'a jamais été appelé .

- -
Note : Si vous ouvrez le gestionnaire de modules complémentaires, puis cliquez sur «Supprimer» sur un module complémentaire, il n'appellera pas la fonction de désinstallation immédiatement. Il s'agit d'une désinstallation en raison de l'option "Annuler" disponible. Si le gestionnaire de modules complémentaires est fermé ou qu'un autre événement se déroule de telle sorte que l'option "Annuler" devient indisponible, la désinstallation en dur a lieu et la fonction de désinstallation est appelée.
- -
Note : La fonction de désinstallation s'exécute sur déclassement et mise à niveau, ainsi vous devriez vous assurer qu'il s'agit d'une désinstallation en faisant ceci :
-function uninstall(aData, aReason) {
-     if (aReason == ADDON_UNINSTALL) {
-          console.log('really uninstalling');
-     } else {
-          console.log('not a permanent uninstall, likely an upgrade or downgrade');
-     }
-}
- -
void uninstall(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason
-
Une des constantes causales, indiquant pourquoi l'extension est en train d'être désinstallée. Ce peut être l'une d'entre elles : ADDON_UNINSTALL, ADDON_UPGRADE ou ADDON_DOWNGRADE.
-
- -

Constantes causales

- -

La fonction bootstrap accepte un paramètre reason (motif), qui explique pourquoi l'extension est appelée. Les constantes causales sont :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstanteValeurDescription
APP_STARTUP1L'application est démarrée.
APP_SHUTDOWN2L'application est fermée.
ADDON_ENABLE3Le module complémentaire est activé.
ADDON_DISABLE4Le module complémentaire est désactivé. (également envoyé pendant la désinstallation)
ADDON_INSTALL5Le module complémentaire est installé.
ADDON_UNINSTALL6Le module complémentaire est désinstallé.
ADDON_UPGRADE7Le module complémentaire est mis à jour.
ADDON_DOWNGRADE8Le module complémentaire est déclassé.
- -

Données bootstrap

- -

Chacun des points d'entrée est transmis à une structure de données simple contenant des informations utiles sur le module complémentaire "bootstrapé". Plus d'informations sur l'extension peuvent être obtenues en appelant AddonManager.getAddonByID(). Les données sont un objet JavaScript simple avec les propriétés suivantes :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriétéTypeDescription
idchaîne de caractèresL'ID du module complémentaire est "bootstrapé".
versionchaîne de caractèresLa version du module complémentaire est "bootstrapée".
installPath (chemin d'installation)nsIFileL'emplacement d'installation du module complémentaire est "bootstrapé". Il peut s'agir d'un répertoire ou d'un fichier XPI selon que le module complémentaire est installé décompressé ou non.
resourceURI (URI ressource)nsIURIL'URI pointe sur la racine des fichiers complémentaires, il peut s'agir d'un URI jar: ou file: , selon que le module complémentaire est installé ou non. {{ gecko_minversion_inline("7.0") }}
oldVersion (ancienne version)chaîne de caractèresLa précédente version installée, si le motif est ADDON_UPGRADE ou ADDON_DOWNGRADE, et si la méthode est install oustartup. {{ gecko_minversion_inline("22.0") }}
newVersion (nouvelle version)chaîne de caractèresLa version à installer, si le motif est ADDON_UPGRADE ou ADDON_DOWNGRADE, et si la méthode est shutdown ou uninstall. {{ gecko_minversion_inline("22.0") }}
- -
-

Note : Un module complémentaire peut être mis à niveau / déclassé au démarrage de l'application, dans ce cas, le motif de la méthode startup est APP_STARTUP et la propriété oldVersion n'est pas définie. Sachez également que, dans certaines circonstances, une mise à niveau ou un déclassement additif peut se produire sans que la méthode de désinstallation soit appelée.

-
- -

Débogueur de module complémentaire

- -

A partir de Firefox 31, vous pouvez utiliser le débogueur de module complémentaire pour déboguer les modules complémentaires "bootstrapés".

- -

Localisation (L10n)

- -

La localisation des modules complémentaires "bootstrapés" est très similaire à celle de Firefox 7, car c'est à ce moment-là que la compatibilité de chrome.manifest a démarré.

- -

Fichiers JS et JSM - Utilisation des fichiers de propriétés

- -

Pour localiser vos fichiers .js et .jsm , vous avez à utiliser les fichiers de propriétés.

- -

Le minimum absolument nécessaire est :

- -
    -
  1. Fichier : install.rdf
  2. -
  3. Fichier : chrome.manifest
  4. -
  5. Fichier : bootstrap.js
  6. -
  7. Dossier : locale (langue) -
      -
    1. Dossier : VALID_LOCALE_HERE (localisation valide ici) -
        -
      1. Fichier : ANYTHING.properties (toutes les propriétés)
      2. -
      -
    2. -
    -
  8. -
- -

Dans le dossier "locale", vous devez disposer de dossiers pour chacune des langues que vous souhaitez fournir; chaque dossier doit être nommé avec un nom "locale" valide (exemple : fr). Dans ce dossier, doit exister un fichier de propriétés. Dans le fichier chrome.manifest, ces paramètres régionaux doivent être définis. Par exemple, si vous disposez d'un sous-dossier fr dans le dossier "locale", votre fichier chrome.manifest devra contenir : locale NAME_OF_YOUR_ADDON fr locale/fr/

- -

Ici un exemple : GitHub :: l10n-properties - au démarrage de ce module, il affichera une invite indiquant USA ou Grande-Bretagne, avec laquelle choisir la langue la plus proche de la vôtre. Vous pouvez tester différents "locale" en allant sur about:config et en changeant les préférences de general.useragent.locale, et en désactivant puis en réactivant le module complémentaire.

- -

Fichiers XUL et HTML - Utilisation d'entités à partir de fichiers DTD

- -

Plusieurs pages HTML sont utilisées, mais elles ne peuvent pas être localisées avec des fichiers DTD. Il y a trois changements que vous devez faire :

- -
    -
  1. Vous devez changer l'extension du fichier HTML en .xhtml
  2. -
  3. Le doctype doit être défini pointant sur un fichier DTD dans votre dossier "locale", ainsi par exemple : <!DOCTYPE html SYSTEM "chrome://l10n/locale/mozilla.dtd">
  4. -
  5. Vous devez ajouter l'attribut xmlns à la balise html, par exemple : <html xmlns="http://www.w3.org/1999/xhtml">
  6. -
  7. Si vous avez plusieurs fichiers DTD lisez ceci : Utilisation de plusieurs DTD
  8. -
- -

Le minimum nécessaire est :

- -
    -
  1. Fichier : install.rdf
  2. -
  3. Fichier : chrome.manifest
  4. -
  5. Fichier : bootstrap.js
  6. -
  7. Dossier : locale -
      -
    1. Dossier : VALID_LOCALE_HERE -
        -
      1. Fichier : ANYTHING.dtd
      2. -
      -
    2. -
    -
  8. -
- -

Le fichier chrome.manifest doit inclure une définition pour le contenu, par exemple: content NAME_OF_YOUR_ADDON ./

- -

Le fichier chrome.manifest doit aussi inclure une ligne pointant sur le dossier "locale", comme dans la section de propriété ci-dessus, si vous avez un dossier nommé en-US dans le dossier "locale", le fichier chrome.manifest doit contenir : locale NAME_OF_YOUR_ADDON en-US locale/en-US/

- -

ici un exemple de module complémentaire qui ouvre une page HTML et une page  XUL sur install : GitHub :: l10n-xhtml-xul. Voici un exemple montrant comment utiliser une page HTML localisée en tant que page d'options : GitHub :: l10n-html-options. Vous pouvez aller sur about:config et changer la valeur de la préférence general.useragent.locale en-US par en-GB et recharger la page ouverte pour voir les changements sur les paramètres régionaux.

- -

Plus de lecture

- - diff --git a/files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html b/files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html deleted file mode 100644 index 3a2515f3ce..0000000000 --- a/files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: Gagner de l'argent avec les extensions de navigateur -slug: >- - Mozilla/Add-ons/Distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur -tags: - - Guide - - Monétisation - - WebExtensions - - distribution -translation_of: Mozilla/Add-ons/Distribution/Make_money_from_browser_extensions ---- -

{{AddonSidebar}}

- -

Alors que les utilisateurs peuvent télécharger des extensions de navigateur pour Firefox gratuitement depuis addons.mozilla.org (AMO), cela ne signifie pas que vous ne pouvez pas faire de l'argent avec des extensions de navigateur, et dans une mesure plus limitée thèmes.

- -

Cet article passe en revue vos options pour générer des revenus à partir des extensions de navigateur en ajoutant des fonctions payantes, en faisant de la publicité ou en demandant des dons. L'article conclut ensuite en suggérant certaines choses que vous pouvez faire pour maximiser la production de revenus. Mais, tout d'abord, l'article se penche sur l'AMO et les limites des mécanismes de revenu dans les extensions de navigateur..

- -

Est-ce que je pourrai un jour vendre par l'entremise d'AMO ?

- -

Mozilla a l'intention de maintenir AMO en tant que source gratuite à télécharger d'extensions de navigateur et de thèmes. Mozilla n'a pas non plus l'intention de fournir des mécanismes pour les achats d'applications dans les extensions.

- -

Qu'est-ce que tu ne peux pas faire ?

- -

Mozilla place peu de restrictions sur la façon dont vous pouvez monétiser votre extension de navigateur. Les restrictions en place visent généralement à assurer un bon comportement lors de l'interaction avec vos utilisateurs tout en générant des revenus. Donc, avant d'envisager de faire de l'argent, sachez que vous devez le faire :

- - - -

Pour plus de détails, consultez les sections contenu et monétisation des politiques complémentaires.

- -

Que pouvez-vous faire ?

- -

Il y a trois approches que vous pouvez adopter pour monétiser l'extension de votre navigateur :

- - - -

Facturation des fonctions

- -

Il existe de nombreuses approches que vous pouvez prendre pour facturer les fonctionnalités de votre extension de navigateur, vous pouvez par exemple :

- - - -

À moins que vous ne fournissiez une fonctionnalité ayant une valeur intrinsèque très élevée, l'approche la plus efficace consistera probablement à fournir aux utilisateurs certaines fonctionnalités gratuites moyennant des frais supplémentaires. Si vous êtes réticent à offrir des fonctionnalités gratuites, considérez que les développeurs qui ont essayé de commercialiser des extensions sans fonctionnalités gratuites rapportent qu'il est difficile d'attirer un public vers un produit entièrement commercial. Un avantage supplémentaire de fournir une partie ou la totalité de vos fonctionnalités sous une forme ou une autre gratuitement est que les utilisateurs peuvent confirmer que votre extension répond à leurs attentes. Si vous demandez aux utilisateurs de payer d'avance, certains demanderont un remboursement parce que l'extension n'avait pas les fonctionnalités qu'ils attendaient.

- -

Choisir un fournisseur de paiement

- -

La clé pour implémenter des fonctions payantes dans votre navigateur est de choisir un fournisseur de traitement des paiements. Il existe de nombreux fournisseurs auxquels vous pouvez faire appel, mais celui qui répond le mieux à vos besoins et celui de vos utilisateurs n'est pas nécessairement le plus connu. Lorsque vous choisissez votre fournisseur de paiement, voici quelques points à prendre en considération :

- - - -

Choix de la fréquence de paiement

- -

De nombreux fournisseurs de paiement vous permettront de proposer des achats ponctuels ou par abonnement. Les achats uniques offrent l'approche la plus simple, car vous n'avez pas à vous soucier de surveiller les paiements d'abonnement et d'annuler la licence si elle expire. D'autre part, avec l'abonnement, vous pouvez offrir des fonctions à un prix de transaction plus bas, réduisant ainsi l'obstacle au paiement. Les abonnements peuvent également créer une source de revenus fiable et récurrente.

- -

Mise en œuvre d'un mécanisme de paiement et d'octroi de licences

- -

Si vous rendez l'extension de votre navigateur disponible sur Chrome, vous pouvez profiter de l'API de paiement Google in-app pour gérer les transactions.

- -

Pour Firefox, et la plupart des autres navigateurs majeurs, vous aurez besoin d'installer un système de paiement. Une approche simple et raisonnablement robuste consiste à faire ce qui suit :

- - - -

En plus d'avoir un moyen pour l'utilisateur d'entrer la clé de licence manuellement, il est important de gérer les interactions avec la page d'achat afin que la licence soit installée automatiquement. Cela permet d'économiser beaucoup de travail d'assistance en expliquant comment installer la licence.

- -

Conseil du développeur : Ne passez pas trop de temps à protéger votre système de licence contre les pirates informatiques, car les utilisateurs qui sont enclins à utiliser une licence piratée sont peu susceptibles d'en payer le prix. Votre temps est mieux employé à développer de nouvelles fonctions d'extension qui attirent plus d'utilisateurs payants.

- -

Conversion de la gratuité en paiement

- -

Si vous avez initialement lancé votre extension de navigateur en tant que produit gratuit, votre meilleure approche pour générer des revenus est d'ajouter de nouvelles fonctionnalités commerciales. La conversion d'un produit gratuit en un produit payant n'est pas susceptible de plaire à vos utilisateurs. Même l'ajout de caractéristiques commerciales doit être fait avec soin. Vous devriez vous préparer à une réaction négative, du genre "il était gratuit", même si vous ne modifiez pas ou ne limitez pas l'accès aux fonctions gratuites.

- -

Affichage d'annonces

- -

Si vous pensez que la base d'utilisateurs de votre navigateur est peu susceptible d'être réceptive aux fonctions payantes, les publicités peuvent être une option viable pour générer des revenus. Cependant, sachez que les publicités ne sont susceptibles de générer des revenus importants que si votre extension dispose d'une large base d'utilisateurs.

- -

Il y a trois façons d'afficher techniquement des publicités, mais toutes ne sont pas acceptables pour les canaux publicitaires et les utilisateurs. Les options sont :

- - - -

Choisir un programme publicitaire

- -

Il existe de nombreux fournisseurs d'ajouts allant des grands fournisseurs mondiaux bien connus, comme Google AdSense, jusqu'aux petits services régionaux. Trouver le bon fournisseur dépendra beaucoup de l'extension de votre navigateur, mais voici quelques points à considérer :

- - - -

Vous pouvez toujours chercher à vendre de l'espace publicitaire vous-même. Toutefois, cela ne sera probablement viable que si vous disposez de ressources importantes que vous pouvez mobiliser pour vendre de l'espace publicitaire et que vous avez le trafic nécessaire pour soutenir cette approche. Cependant, vous pourriez être en mesure d'identifier un fournisseur d'un produit ou d'un service complémentaire qui serait intéressé par votre base d'utilisateurs et être en mesure de faire une vente en gros de votre espace publicitaire.

- -

Meilleures pratiques pour l'affichage des annonces

- -

Les publicités représentent un défi intéressant, la nécessité de trouver un compromis entre elles étant suffisamment visible pour générer des revenus, mais pas assez visible pour décourager les utilisateurs. Il n'y a pas de règles strictes et rapides pour une bonne conception de l'incorporation de publicités, mais ce sont certaines des choses que vous devriez considérer.

- - - -

Demander des dons

- -

Si la mise en place d'un accès payant aux fonctionnalités de l'extension de votre navigateur ou la navigation dans les méandres de la mise en œuvre d'annonces publicitaires semble inappropriée pour votre extension, demander des dons peut être la voie à suivre.

- -

Cependant, sachez que la plupart des développeurs rapportent que les dons ne génèrent des revenus importants que lorsque l'extension du navigateur a une large base d'utilisateurs.

- -

Les dons peuvent également être une bonne option par rapport au passage à un modèle payant où vous pourriez rencontrer des résistances de la part des utilisateurs, où l'extension de votre navigateur est déjà disponible gratuitement et avec toutes ses fonctionnalités.

- -

Il existe un certain nombre de plates-formes que vous pouvez utiliser pour fournir des services de paiement pour les dons, y compris :

- - - -

Lorsque vous choisissez un fournisseur de plateforme de dons, tenez compte de ce qui suit  :

- - - -

Avec les extensions de navigateur pour Firefox, vous avez deux façons de demander des dons : par AMO et par votre extension.

- -

Demande de dons par l'entremise de l'AMO

- -

Vous pouvez ajouter un bouton "contributions" à la page AMO de votre extension qui renvoie à votre page de paiement à partir d'un des fournisseurs supportés. Pour ajouter le bouton :

- - - -

Une section de contribution est alors ajoutée à la page AMO de votre poste.

- -

Example extension page on AMO highlighting the contribution next section

- -

Demander des dons à partir de l'extension de votre navigateur

- -

Pour ce faire, vous ajoutez un bouton de don ou un lien vers un endroit approprié dans votre extension.

- -

Bonnes pratiques

- -

Vous n'obtiendrez pas de don si vous ne le demandez pas, mais les demandes excessives de dons peuvent être déconcertantes pour vos utilisateurs et peuvent les encourager à supprimer votre extension de navigateur.  Cependant, trouver la bonne méthode et la bonne fréquence pour les demandes de dons sera une question d'essais et d'erreurs. Lorsque vous ajoutez des demandes de dons, tenez compte de ce qui suit :

- - - -

N'oubliez pas non plus que si vous demandez des dons réguliers, vous devrez également fournir régulièrement du nouveau contenu ou de nouvelles fonctionnalités.

- -

Offres non sollicitées

- -

Au fur et à mesure que votre extension gagnera en popularité, il est fort probable que vous serez contacté par des agences qui vous proposeront de vous transformer en millionnaire en un rien de temps, sans grand effort de votre part ; quelque chose du genre : "Insérez juste une ligne dans le code de votre add-on et devenez riche en ne faisant rien !"

- -

Traitez ces offres avec la plus grande prudence. Il est probable que le système cherchera à capturer les données privées de vos utilisateurs pour les vendre. Et, si vous obtenez de l'argent, il est probable qu'il soit beaucoup moins élevé que ce qui vous avait été promis à l'origine. Mais pire encore, vous pourriez vous retrouver avec votre extension bloquée et votre réputation ternie.

- -

Comment puis-je maximiser mon revenu ?

- -

La création d'une base d'utilisateurs large et fidèle est essentielle pour maximiser les revenus que vous générez, quel que soit le mécanisme que vous choisissez. Pour construire votre base d'utilisateurs :

- - diff --git a/files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html b/files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html deleted file mode 100644 index f2a3c408f0..0000000000 --- a/files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Retrait de votre extension -slug: Mozilla/Add-ons/Distribution/retrait_de_votre_extension -tags: - - Extensions - - WebExtension - - end of life - - publication -translation_of: Mozilla/Add-ons/Distribution/Retiring_your_extension ---- -

{{AddonSidebar}}

- -

Il peut arriver que vous souhaitiez retirer une de vos extensions. Cet article suggère les étapes à suivre, ainsi que des pointeurs vers un calendrier approprié.

- -

Raisons du retrait d'une extension

- -

Il y a deux raisons principales pour lesquelles vous pourriez vouloir mettre fin à votre extension :

- - - -

Étapes à suivre pour retirer une extension

- -

Lorsque vous souhaitez retirer une extension, envisagez de prendre les mesures suivantes :

- -
    -
  1. Concevoir un calendrier pour la fin de vie de votre extension
    - Envisagez d'inclure les étapes suivantes dans un calendrier de retrait de votre extension : -
      -
    1. publier le calendrier de fin de vie de votre poste, y compris une explication des raisons pour lesquelles vous retirez votre poste.
    2. -
    3. publier une mise à jour qui supprime les copies installées de votre extension.
    4. -
    5. rendre l'extension indisponible pour les nouvelles installations, en rendant sa liste AMO invisible.
    6. -
    -
  2. -
  3. Publier des conseils que vous prévoyez de mettre fin à votre extension
    - Considérez les options suivantes pour informer les gens de votre intention de prendre votre extension : -
      -
    1. mettez à jour la page AMO de votre extension avec son calendrier de fin de vie.
    2. -
    3. Si votre extension est remplacée par une autre, fournissez un lien vers la nouvelle extension. Vous pouvez utiliser {{WebExtAPIRef("management.onInstalled")}} pour écouter l'installation de la nouvelle extension afin de déclencher la suppression de l'extension d'origine en utilisant  {{WebExtAPIRef("management.uninstallSelf")}}.
    4. -
    5. communiquez le calendrier par le biais des médias sociaux, des forums ou, si possible, par courrier électronique.
    6. -
    -
  4. -
  5. Publier une version finale, auto-supprimée de votre extension
    - Utilisez {{WebExtAPIRef("management.uninstallSelf")}} pour que votre extension se désinstalle automatiquement. Avant cela, fournissez un avis rappelant à l'utilisateur la suppression de l'extension. Si votre extension est remplacée par une autre, n'oubliez pas de fournir un rappel concernant le lien vers la nouvelle extension. Vous pouvez offrir à l'utilisateur la possibilité de supprimer l'extension maintenant ou dans quelques jours.
  6. -
  7. Rendez votre liste AMO invisible pour éviter de nouvelles installations
    - Pour masquer la liste des AMO de votre extension -
      -
    1. Ouvrez la liste de votre extension dans AMO.
    2. -
    3. Dans le menu de la barre latérale, ouvrez Gérer le statut & les  versions.
    4. -
    5. Dans la section Visibilité de la liste, cliquez sur Invisible.
    6. -
    -
  8. -
- -

Votre extension cachée ne sera pas disponible pour une recherche d'AMO ou pour tenter d'y accéder directement en utilisant l'URL AMO de la page.

- -

Calendrier de départ suggéré

- -

Il n'y a pas de période idéale entre la publication de votre calendrier de fin de vie et la suppression de votre extension des navigateurs des utilisateurs. En établissant le calendrier, vous pourriez envisager :

- - - -

Lorsque vous avez commencé à retirer l'extension, utilisez les statistiques d'utilisateur actives sur AMO pour affiner votre timing. Par exemple, si le nombre d'utilisateurs actifs ne diminue pas de manière significative, vous pouvez retarder le déploiement de la version finale de votre extension et envoyer un rappel concernant vos projets. Pour accéder aux statistiques de l'utilisateur actif, ouvrez votre extension dans AMO Developer Hub et cliquez sur Afficher le tableau de bord des statistiques dans le menu contextuel.

diff --git a/files/fr/mozilla/add-ons/install_manifests/index.html b/files/fr/mozilla/add-ons/install_manifests/index.html deleted file mode 100644 index 841725f370..0000000000 --- a/files/fr/mozilla/add-ons/install_manifests/index.html +++ /dev/null @@ -1,566 +0,0 @@ ---- -title: Install Manifests -slug: Mozilla/Add-ons/Install_Manifests -translation_of: Archive/Add-ons/Install_Manifests ---- -

Présentation

- -

Un manifeste d'installation est un fichier d'application XUL add-on Manager-enabled (par exemple de Firefox ou de Thunderbird) utilisé pour déterminer les informations sur une add-on quant il est en cours d'installation. Il contient des métadonnées identifiant l'add-on, fournit des informations sur son créateur, des informations sur les versions, ses compatibilités, sa mis à jour, etc...

- -

Le format du manifest d'installation est RDF/XML.

- -

Le fichier doit être appelé install.rdf et se trouver au niveau le plus haut du fichier XPI de l'add-on.

- -

Disposition

- -

La disposition de base d'un Manifest d'installation est comme cela:

- -
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-  <Description about="urn:mozilla:install-manifest">
-    <!-- properties -->
-  </Description>
-</RDF>
-
-
- -

Certaines des propriétés sont essentielles, d'autres sont optionnelles. Certaines ont de simples chaînes comme valeur, d'autres sont de complexes ressources.

- -

Référence de Propriété Requise

- -

Votre Manifest d'installation doit spécifier ces propriétés autrement votre add-on ne s'installera pas.

- -

id

- -

L'ID de l'extension, qui doit être l'une des suivantes:

- - - -

Ce dernier format est considérablement plus facile à générer et à manipuler. Firefox 1.5 vérifie que votre id correspond à un format ou à l'autre et refusera d'installer des addons contenant des id mal formés. Cependant, vous ne devriez pas utiliser une adresse email réelle pour votre id, car cela pourrait attirer des spams.

- -

Exemples

- -
<em:id>extensionname@example.org</em:id>
-
-<em:id>{daf44bf7-a45e-4450-979c-91cf07434c3d}</em:id>
- -

version

- -

A version string identifying the version of the add-on being supplied.

- -

For Firefox/Thunderbird 1.0, the format must conform to the rules specified in Extension Versioning, Update and Compatibility. For Firefox/Thunderbird 1.5, see Toolkit version format.

- -

Examples

- -
<em:version>2.0</em:version>
-
-<em:version>1.0.2</em:version>
-
-<em:version>0.4.1.2005090112</em:version>
- -

Firefox 1.5 / XULRunner 1.8 - add-ons that do not use a valid version format will not be installed. The version format is different from, although backwards-compatible with, 1.0's.

- -

For addons hosted on addons.mozilla.org - Mozilla's update website may repackage your add-on and correct or reject malformed version strings.

- -

type

- -

An integer value representing the type of add-on.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2Extensions
4Themes
8Locale
32Multiple Item Package
64Spell check dictionary
128Telemetry Experiment
- -

Examples

- -
<em:type>2</em:type>
- -

{{ Fx_minversion_inline(1.5) }} This property was added for Firefox 1.5, and is only required for add-on types other than Extensions and Themes.

- -

{{ Fx_minversion_inline(3) }} Firefox 2 and previous supported a value of 16 to represent plug-ins. In Firefox 3 this has been removed.

- -

targetApplication

- -

An object specifying an application targeted by this add-on. This means that the add-on will work with the application identified by the id property (<em:id>) specified (for a comprehensive list of application IDs and valid min/maxVersions for them see Valid application versions for add-on developers), from the minimum version (<em:minVersion>) up to and including the maximum version (<em:maxVersion>). These version strings are formatted in the same fashion as the version property and will be compared to the application version; this allows the extension author to specify which versions of Firefox an extension has been tested with.

- -

id, minVersion, and maxVersion are all required.

- -
Note: Extensions compatible with Firefox 3.5 should specify a maxVersion of 3.5.*, so that they are automatically compatible with security and stability updates. For Firefox 3.0, a maxVersion of 3.0.* should be used. Extensions compatible only with Firefox or Thunderbird 2 should specify a maxVersion of 2.0.0.*.
- -

The Install Manifest must specify at least one of these objects, and may specify more if the add-on targets multiple applications that support the Add-on Manager (e.g. Firefox and Thunderbird).

- -

Examples

- -
<em:targetApplication>
- <Description>
-  <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
-  <em:minVersion>1.5</em:minVersion>
-  <em:maxVersion>3.0.*</em:maxVersion>
- </Description>
-</em:targetApplication>
- -

{{ Fx_minversion_inline(3) }} Gecko 1.9 based applications allow you to use the special targetApplication id toolkit@mozilla.org to say that the add-on is compatible with any toolkit app with a toolkit version matching the minVersion and maxVersion.

- -

name

- -

The name of the add-on; intended for display in the UI.

- -

Examples

- -
<em:name>My Extension</em:name>
- -

Optional Property Reference

- -

You may need to supply these properties, depending on the capabilities of your add-on.

- -

bootstrap

- -

{{ Fx_minversion_inline(4) }} A Boolean value that tells the application whether the extension is boot-strappable. At the moment this only works for add-ons with em:type="2". The default value is false. For more information, see Bootstrapped extensions.

- -

unpack

- -

{{ Fx_minversion_inline(4) }} A true or false value that tells the application whether the extension requires its files be unpacked into a directory in order to work or whether the extension can be loaded direct from the XPI. In versions before Gecko 2.0 all extensions were unpacked, in Gecko 2.0 and later the default is to not unpack. If an extension includes the following then it must request unpacking:

- - - -

Examples

- -
<Description about="urn:mozilla:install-manifest">
-   <em:id>extension@mysite.com</em:id>
-   <em:unpack>true</em:unpack>
-   ...
-</Description>
- -

skinnable

- -

{{ Fx_minversion_inline(4) }} A true or false value property fo that tells the application whether the (complete) theme can be skinned by lightweight themes/personas:

- -

Examples

- -
<em:skinnable>true</em:skinnable>
-
- -

localized

- -

{{ Fx_minversion_inline(3) }} Allows you to localize the add-on's name, description, contributors and other metadata. The localized description must specify at least one em:locale which indicates which locales to use this information for.

- -

Examples

- -

This declares a set of add-on metadata to be displayed when the application is running in the de-DE locale.

- -
<em:localized>
-  <Description>
-    <em:locale>de-DE</em:locale>
-    <em:name>Tab Sidebar</em:name>
-    <em:description>Zeigt in einer Sidebar Vorschaubilder der Inhalte aller offenen Tabs an.</em:description>
-  </Description>
-</em:localized>
- -

The following properties which are described elsewhere in this page can be included in the localized property:

- - - -

More documentation can be found at Localizing extension descriptions.

- -

description

- -

A short description of the add-on - intended for display in the user interface. This description should fit on one short line of text.

- -

Examples

- -
<em:description>Advanced foo tools.</em:description>
- -

creator

- -

The name of the creator/principal developer - intended for display in the user interface.

- -

Examples

- -
<em:creator>John Doe</em:creator>
- -

or

- -
<em:creator>CoolExtension Team</em:creator>
- -

developer

- -

{{ Fx_minversion_inline(2) }} The name(s) of co-developers. You may specify more than one of this value to specify multiple developers.

- -

Examples

- -
<em:developer>Jane Doe</em:developer>
-<em:developer>Koos van der Merwe</em:developer>
-
- -

translator

- -

{{ Fx_minversion_inline(2) }} The name(s) of translators. You may specify more than one of this value to specify multiple translators.

- -

Examples

- -
<em:translator>Janez Novak</em:translator>
-<em:translator>Kari Nordmann</em:translator>
-
- -

contributor

- -

The name(s) of additional contributors. You may specify more than one of this value to specify multiple contributors.

- -

Examples

- -
<em:contributor>John Doe</em:contributor>
-
-<em:contributor>John Doe</em:contributor>
-<em:contributor>Jane Doe</em:contributor>
-<em:contributor>Elvis Presley</em:contributor>
-
- -

homepageURL

- -

A link to the add-on's home page - intended for display in the user interface.

- -

Examples

- -
<em:homepageURL>http://www.foo.com/</em:homepageURL>
-
- -

updateURL

- -

A link to a custom Update Manifest file that specifies available updates to the add-on. The format is described below. If enabled, the add-on manager periodically checks with this Manifest file to determine if newer versions are available. When not included, the add-on manager will still check for updates on AMO, using the ID of the extension.

- -
Note: It is strongly recommended that the updateURL be an HTTPS (secure) link. Non-secure update URLs can be hijacked by a malicious update.rdf file, enabling malware to infiltrate the user's computer. Alternatively, you could host your extension on AMO and leave out the updateURL completely. This provides secure updates automatically.
- -

{{ Fx_minversion_inline(3) }} For security reasons, Gecko 1.9 applications require that if you specify an updateURL, it must be an https URL, or you must include an updateKey.

- -

Your server must send this file as text/rdf, text/xml or application/rdf+xml or the update checker may not work.

- -

The addon manager will substitute the following values into this URL in case you wish to generate the response RDF dynamically, such as using PHP or CGI:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%REQ_VERSION%The version of the request. Currently 1
%ITEM_ID%The id of the addon being updated
%ITEM_VERSION%The version of the addon being updated
%ITEM_MAXAPPVERSION%The maxVersion of the targetApplication object corresponding to the current application for the addon being updated.
%ITEM_STATUS%{{ Fx_minversion_inline(2) }} Comma separated list of the add-ons operating status in the application. Contains at the least either userEnabled or userDisabled plus any number of incompatible, blockslisted or needsDependencies.
%APP_ID%The id of the current application
%APP_VERSION%The version of the application to check for updates for
%CURRENT_APP_VERSION%{{ Fx_minversion_inline(3.5) }} The version of the current application
%APP_OS%{{ Fx_minversion_inline(1.5) }} The value of OS_TARGET from the Firefox build system, identifying the operating system being used.
%APP_ABI%{{ Fx_minversion_inline(1.5) }} The value of the TARGET_XPCOM_ABI value from the Firefox build system, identifying the compiler/architecture combination used to compile the current application.
%APP_LOCALE%{{ Fx_minversion_inline(3) }} The current application's locale.
%UPDATE_TYPE%{{ Fx_minversion_inline(4) }} UPDATE_TYPE_COMPATIBILITY(32), UPDATE_TYPE_NEWVERSION(64)
%COMPATIBILITY_MODE%{{ Fx_minversion_inline(10) }} related to default to compatible, values could be normal, ignore or strict.
- -

Examples

- -
<em:updateURL>http://www.foo.com/update.cgi?id=%ITEM_ID%&amp;version=%ITEM_VERSION%</em:updateURL>
-<em:updateURL>http://www.foo.com/extension/windows.rdf</em:updateURL>
-
- -

For add-ons hosted on addons.mozilla.org: You may not specify an updateURL property. By default, Mozilla applications using the Add-on Manager (such as Firefox and Thunderbird) will send update requests to addons.mozilla.org using the default web service. Every time you upload a new version of your add-on or change its compatibility parameters through the author interface, your update manifest will be generated automatically.

- -

Format of the Update Manifest: The Update Manifest is a RDF/XML datasource. For an example of an update manifest, see Extension Versioning, Update and Compatibility.

- -

updateKey

- -
{{ Gecko_minversion_header(1.9) }} {{ Fx_minversion_header(3) }}
- -

To ensure the security of update rdf data that is retrieved over plain http you must use a digital signature to verify the contents of the data. In order to do so you must include the public part of the cryptographic key in an updateKey entry in the install.rdf of the add-on. This can be generated using the McCoy tool. Any line breaks and whitespace as part of this entry are ignored.

- -
<em:updateKey>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj
-              Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD
-              NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf
-              awB/zH4KaPiY3vnrzQIDAQAB</em:updateKey>
-
- -

optionsURL

- -

The chrome:// URL of the extension's options dialog box. This is only useful to extensions. If this property is specified, when the extension is selected in the Extensions list, the Options button is enabled and will show this.

- -
<em:optionsURL>chrome://myext/content/options.xul</em:optionsURL>
- -

{{ gecko_minversion_note("7", "In Firefox 7 you can also simply include your options XUL as a file named options.xul, in the base directory of the add-on.") }}

- -

{{ h3_gecko_minversion("optionsType", 7) }}

- -

The type of user-interface used for displaying the options. Accepted values are:

- - - - - - - - - - - - - - - - -
1Opens optionsURL in a dialog box
2Options are displayed inside the Add-on Manager
3Opens optionsURL in a new tab (if the application supports that), or a dialog box
- -

optionsType defaults to 1 if there is an optionsURL included in install.rdf or 2 if there is no optionsURL and the file options.xul exists in the root of the add-on.

- -
<em:optionsType>2</em:optionsType>
-
- -

Open Options in New Tab {{ Gecko_minversion_header(7) }}

- -

Options can be opened in a new tab since Firefox 7.0a1. To do so, set optionsType to 3 and set optionsURL to a the path of a page to open.

- -
<em:optionsType>3</em:optionsType>
-<em:optionsURL>chrome://myaddon/content/options.html</em:optionsURL>
- -

This section here contains an example of localized HTML page as an option panel in a new tab: Bootstrapped Extensions :: Localization (L10n) (example linked to is: GitHub :: l10n-html-options)

- -

Make Options Button Execute Arbitrary Javascript

- -
-

This method is not recomended by AMO Editors, however it is noted here in case none of the default methods suit the developers needs. For example: Overlay a panel over Add-on Manager on click of options button

-
- -

If the default methods offered by optionsType does not fit your needs (see the table above), there is a last resort option. The method here is to use inline JavaScript and the observer service. The observer service is used to send a notification on click of the options button and then from your add-on, when you receive that notification, you can do whatever you want. For example, in the install.rdf we would have:

- -
<em:optionsType>2</em:optionsType>
-<em:optionsURL>javascript:Components.utils.import('resource://gre/modules/Services.jsm');Services.obs.notifyObservers(window, 'hellothisisyourcaptainspeaking', 'options'); window.close();</em:optionsURL>
- -

This sends a notification hellothisisyourcaptainspeaking and passes window to the listener. Notice the window.close() at the end of this inline script. This is important, because an invisible modal dialog is opened and this script runs in that context. So if you do not close the window, you will be stuck modal mode (clicks and key presses will not take). That's why we have to re-import the Services.jsm. Now in your add-on have a listener that does this:

- -
var observer = {
-  observe: function(aSubject, aTopic, aData) {
-    //do something here, such as insert panel element into addon manager and load your page in an iframe in this panel
-  }
-};
-
-Services.obs.addObserver(observer, "hellothisisyourcaptainspeaking", false);
-// Don't forget to remove your observer when your add-on is shut down.
- -

aboutURL

- -

The chrome:// URL of the extension's about dialog box. This is only useful to extensions. If this property is specified,  in the about:addons extensions list, the About... link in the extension's context menu will show this dialog, rather than the default.

- -
-

Note: As of {{Gecko("2.0")}}, the dialog receives the Addon object representing your add-on as a parameter.

-
- -

Examples

- -
<em:aboutURL>chrome://myext/content/about.xul</em:aboutURL>
-
- -

iconURL

- -

A chrome:// URL to an icon to display in the add-ons list. The icon will be displayed at 32x32 in Firefox 3.6 and lower. In Firefox 4.0 and later the icon can be up to 48x48 pixels in size. If this property is not specified, a default icon is used.

- -
<em:iconURL>chrome://myext/skin/icon.png</em:iconURL>
-
- -
Note: For the above example to work you will also have to add a skin package line to your chrome.manifest file. See Chrome Registration#skin. Alternatively you can place your icon in the directory specified in your content package line.
- -

{{ gecko_minversion_note("1.9.2", "Starting in Gecko 1.9.2 (Firefox 3.6), you can also simply include your icon, named icon.png, in the base directory of the add-on. This allows your add-on's icon to be displayed even when the add-on is disabled, or if the manifest is missing an iconURL entry.") }}

- -

{{ h3_gecko_minversion("icon64URL", "2.0") }}

- -

A chrome:// URL to a 64x64 pixel icon to display in the add-on's details view . If this property is not specified, the smaller icon above will be used.

- -
<em:icon64URL>chrome://myext/skin/icon64.png</em:icon64URL>
-
- -
Note: For the above example to work you will also have to add a skin package line to your chrome.manifest file. See Chrome Registration#skin. Alternatively you can place your icon in the directory specified in your content package line.
- -

{{ gecko_minversion_note("2.0", "Starting in Gecko 2.0 (Firefox 4.0), you can also simply include your icon, named icon64.png, in the base directory of the add-on. This allows your add-on's icon to be displayed even when the add-on is disabled, or if the manifest is missing an icon64URL entry.") }}

- -

{{ h3_gecko_minversion("targetPlatform", "1.8") }}

- -

A string specifying a platform that the add-on supports. It contains either the value of OS_TARGET alone or combined with TARGET_XPCOM_ABI, separated by an underscore (_).

- -

You can specify multiple targetPlatform properties per manifest. If any value matches the application's build parameters, it will be installed; if not, the user will get an appropriate error message.

- -

Examples

- -
<em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-
-<em:targetPlatform>Linux</em:targetPlatform>
-
-<em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
-
-<em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
- -

Usually, you would use only the OS part for themes or for extensions that are not fully cross-platform. For extensions including binary (compiled) components, you should never use the OS alone, but include the ABI (s) that you compiled the components with. If you want to include multiple versions of the components, you should also use Platform-specific Subdirectories.

- -

Notes

- - - -

This property was added for Firefox/Thunderbird 1.5. Previous versions of these applications will ignore the restrictions and install the add-on regardless of the platform.

- -

{{ h3_gecko_minversion("strictCompatibility", "10.0") }}

- -

A Boolean value indicating if the add-on should be enabled when the version of the application is greater than its max version. By default, the value of this property is false meaning that the compatibility checking will not be performed against the max version.

- -
<em:strictCompatibility>true</em:strictCompatibility>
- -

Usually, there is no need to restrict the compatibility: not all new releases will break your extension and, if it is hosted on AMO, you'll get notice several weeks in advance if a potential risk has been detected. Moreover, an extension being disabled, even for a short period, leads to a bad experience for the user. About the only time you should need to set this if your add-on does things that are likely to be broken by Firefox updates. You do not need to set this flag if your add-on has a binary component, since add-ons with binary components are always subject to strict compatibility checking (because binary components need to be rebuilt for every major application release anyway).

- -
Note: If you want to restore the old behavior of strict compatibility checking of all add-ons, regardless of the value of this setting in their manifests, you can set the extensions.strictCompatibility preference to true.
- -
-

Note: Starting in {{Gecko("11.0")}}, applications such as Firefox will assume add-ons that have not been updated in a very long time are no longer compatible by default.

-
- -

{{ h3_gecko_minversion("multiprocessCompatible", "33.0") }}

- -

A Boolean value declaring whether this add-on is, or is not, compatible with multiprocess Firefox. If present and set to true, this flag instructs Firefox not to load various compatibility shims that enable many add-ons to work even when the add-on is not compatible with multiprocess Firefox:

- -
<em:multiprocessCompatible>true</em:multiprocessCompatible>
- -

The setting defaults to false, meaning that if you omit the property, the shims are loaded for your add-on.

- -

You can set this property to test whether your add-on is multiprocess compatible, or after you have ensured that it is multiprocess compatible. In some future release we will change the default to true,  and after that point incompatible add-ons will have to explicitly declare that they are not compatible.

- -

Obsolete Property Reference

- -

These properties were required in older versions of the Add-on Manager, but have been replaced with newer and better mechanisms.

- -

file

- -

Firefox 1.0 This property pointed to a chrome .jar file that contains chrome packages that require registration with the Chrome Registry.

- -

The <em:file> property has a complex object value. The uri of the value is urn:mozilla:extension:file:jarFile.jar where jarFile.jar is the name of the jar file that contains the chrome package's files. This could also be the name of a directory that contains the chrome package's files, un-jarred (e.g. urn:mozilla:extension:file:directory). In either case, the referenced chrome package file(s) must be placed in the chrome subdirectory of the XPI's top level.

- -

This object has a package property (with a path within the jar file or directory that leads to the location where the contents.rdf file responsible for registering that package is located), a locale property (ditto, but to register the locale) and a skin property (ditto, but to register the theme material).

- -

In extensions for Firefox 1.5, this property is no longer necessary: the chrome.manifest at the top level of the XPI is used to locate chrome to register. If there is no chrome.manifest, this property is still read by the Add-on Manager and a chrome.manifest is generated from old-style contents.rdf.

- -

Examples

- -
<em:file>
- <Description about="urn:mozilla:extension:file:myext.jar">
-  <em:package>content/myext/</em:package>
-  <em:locale>locale/en-US/myext/</em:locale>
-  <em:skin>skin/classic/myext/<em:skin>
- </Description>
-</em:file>
-
- -

An Install Manifest may specify multiple file properties, one for each jar file or subdirectory that contains chrome to register.

- -

hidden

- -

Firefox 1.0 - 3.5 A boolean value that when true makes the add-on not show up in the add-ons list, provided the add-on is installed in a {{ Anch("restricted access area") }} (so it does not work for add-ons installed in the profile). This is for bundling integration hooks to larger applications where having an entry in the Extensions list does not make sense.

- -
Note: This property is no longer supported under Gecko 1.9.2 (Firefox 3.6) or later, to prevent extensions from being installed in such a way that the user might not be able to tell they're installed.
- -

Examples

- -
<em:hidden>true</em:hidden>
-
- -

requires

- -

Firefox 2.0 - 3.6.x. Other versions will ignore the restrictions and install the add-on regardless of the requirements.

- -

See Replacement for install.rdf property "requires" discussion for rationale behind removing this feature and the suggested workaround.

- -

<em:requires> has a similar syntax to the <em:targetApplication> tag (i.e. you must specify <em:id>, <em:minVersion>, <em:maxVersion> when using it). If the add-on specified by the <em:id> tag is not installed or has an incompatible version, the extension manager will disable your extension and show the message "Requires additional items". You can add as many <em:requires> tags as you like. Your extension will be disabled if any of the specified requirements fail. It is not possible to add dependencies that are specific to a <em:targetApplication>. See Extension Dependencies for more details.

- -

Glossary

- -

restricted access area

- -

A restricted access area is an install location that could be restricted on a restricted-access account, regardless of whether or not the location is restricted with the current user privileges (see {{ Source("toolkit/mozapps/extensions/public/nsIExtensionManager.idl#80", "nsIInstallLocation::restricted") }}). Currently, the ($APPDIR)/extensions folder and the registry install location under HKEY_LOCAL_MACHINE (see Adding Extensions using the Windows Registry for details) are restricted.

- -

The ($PROFILE)/extensions and HKEY_CURRENT_USER install locations, on the other hand, are not restricted.

diff --git a/files/fr/mozilla/add-ons/nous_contacter/index.html b/files/fr/mozilla/add-ons/nous_contacter/index.html deleted file mode 100644 index b15844c18c..0000000000 --- a/files/fr/mozilla/add-ons/nous_contacter/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Nous contacter -slug: Mozilla/Add-ons/nous_contacter -tags: - - Add-ons - - Extension - - Extensions - - Mozilla -translation_of: Mozilla/Add-ons/Contact_us ---- -

{{AddonSidebar}}

- -

Utilisez les liens ci-dessous pour obtenir de l'aide, pour vous tenir au courant des actualités des add-ons et pour nous faire part de vos commentaires.

- -

Forum des add-ons

- -

Utilisez le forum Discourse Add-ons pour discuter de tous les aspects du développement d'add-on et demander de l'aide.

- -

Mailing listes

- -

Utilisez la liste dev-addons pour discuter du développement de l'écosystème des add-ons, y compris le système WebExtensions et addons.mozilla.org:

- - - -

Chat

- -

Matrix est un protocole ouvert et léger pour les communications décentralisées en temps réel. Pour plus d'informations sur la manière de rejoindtre l'instance Matrix de Mozilla, reportez-vous à la page Matrix sur MozillaWiki.

- - - -

Signaler des problèmes

- -

Vulnérabilités de sécurité

- -

Si vous découvrez une vulnérabilité de sécurité d'un add-on, même si l'add-on n'est pas hébergé sur un site Mozilla, veuillez nous en informer. Nous travaillerons avec le développeur pour corriger le problème. Veuillez signaler les failles de sécurité de manière confidentielle dans Bugzilla ou par e-mail à amo-admins@mozilla.com.

- -

Bugs sur addons.mozilla.org (AMO)

- -

Si vous rencontrez un problème avec le site, nous serions ravis de le résoudre. Veuillez déposer un rapport de bug et inclure autant de détails que possible.

diff --git a/files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html b/files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html deleted file mode 100644 index f7043ecc70..0000000000 --- a/files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Bonnes pratiques pour la performance des extensions -slug: Mozilla/Add-ons/Performance_best_practices_in_extensions -tags: - - Bonnes pratiques - - Exemple nécessaire - - Extensions - - Guide - - Performance -translation_of: Archive/Add-ons/Performance_best_practices_in_extensions ---- -

Un des grands avantages de Firefox est son extrême extensibilité. Les extensions peuvent faire presque tout. Toutefois, il y a un revers à cela : des extensions mal écrites peuvent avoir des conséquences graves sur l'usage de la navigation, y compris sur la performance globale de Firefox. Cet article propose quelques bonnes pratiques et recommandations qui peuvent non seulement améliorer la performance et la vitesse de votre extension, mais aussi de Firefox lui-même.

- -

Améliorer les performances du démarrage

- -

Les extensions sont chargées et exécutées dès que s'ouvre une nouvelle fenêtre du navigateur. Cela signifie qu'à chaque fois qu'une fenêtre s'ouvre, votre extension peut avoir une incidence sur la durée de visualisation du contenu. Plusieurs procédés sont possibles  pour réduire le délai d'attente d'affichage des contenus provoqué par votre extension.

- -

Chargez seulement ce dont vous avez besoin quand vous en avez besoin

- -

Ne chargez pas lors du démarrage les ressources qui ne seront nécessaires que lorsque l'utilisateur cliquera sur un bouton, ou qu'une préférence donnée sera activée alors qu'elle ne l'est pas encore. De la même façon, si votre extension dispose de caractéristiques qui s'exécutent uniquement quand l'utilisateur est identifié à un service, n'en chargez pas les ressources avant qu'il ne soit réellement connecté.

- -

Utilisez les modules de code JavaScript

- -

Vous pouvez créer vos propres modules de code JavaScript regroupant les fonctionnalités nécessaires dans des circonstances précises. Cela permet de charger votre extension par grand bloc à la volée au cas par cas, au lieu de tout charger à la fois.

- -

Bien que les modules JavaScript puissent être extrêmement utiles et offrir des avantages de performance significatifs, ils doivent être utilisés à bon escient. Le chargement des modules engage peu de coût, donc segmenter le code jusqu'à un degré inutile peut être contre-productif. Le code devrait être modulaire, à souhait, ce qui augmente la clarté et le chargement des morceaux importants ou coûteux de fragments de code, s'ils peuvent être différés d'une façon significative.

- -

Différez tout ce que vous pouvez

- -

La plupart des extensions ont un auditeur d'événements de chargement dans leur séquence principale qui exécute les fonctions de démarrage. Faites-en le moins possible à cet endroit. La fenêtre du navigateur est bloquée pendant que le gestionnaire de chargement de votre extension fonctionne, ainsi plus il tarde dans cette opération, plus Firefox semblera lent à l'utilisateur.

- -

S'il y a quelque chose qui peut être fait, même en une fraction de seconde plus tard, vous pouvez utiliser les méthodes {{ interface("nsITimer") }} ou {{ domxref("window.setTimeout()") }} pour planifier une exécution différée. Même un court report peut avoir un grand impact.

- -

Conseils sur les performances générales

- -

Évitez de créer des fuites de mémoire

- -

Les fuites de mémoire exigent du ramasse-miette et du collecteur de cycle un travail plus intense qui peut de manière significative dégrader les performances.

- -

Les compartiments zombie sont un type particulier de fuite mémoire que vous pouvez détecter avec un minimum d'effort. Consultez la page Compartiments zombie, particulièrement la section Vérification proactive des extensions.

- -

Consultez les Causes classiques de fuites de mémoire dans les extensions afin d'éviter les compartiments zombie et d'autres genres de fuites.

- -

Aussi bien que la recherche de ces types spécifiques de fuite, il vaut la peine de s'exercer sur les fonctionnalités de votre extension et d'examiner le contenu de la mémoire pour s'assurer de toute utilisation excessive. Par exemple, le bug 719601 de Firefox a indiqué un compartiment JavaScript « Système principal » contenant des centaines de Mo de mémoire, ce qui est beaucoup plus important qu'habituellement.

- -

Évitez l'écriture de CSS lent

- - - -

Évitez les auditeurs d'événements de mutation dans un DOM

- -

Les auditeurs d'événements de mutation sont extrêmement consommateurs de temps, une fois ajoutés même brièvement à un document, ils nuisent de manière significative à sa performance.

- -

Les événements de mutation sont officiellement obsolètes, et il existe denombreuses alternatives ; ils devraient donc être évités à tout prix.

- -

Chargez les services en mode paresseux

- -

Le module XPCOMUtils JavaScript fournit deux méthodes pour le chargement lent de ressources :

- - - -

Beaucoup de services communs sont déjà mis en cache pour vous dans Services.jsm.

- -

Utilisez les entrées-sorties en asynchrone

- -

Cela ne peut pas être suffisamment souligné : ne jamais faire d'entrées-sorties dans une tâche principale.

- -

N'importe quel genre d'entrée-sortie dans un traitement principal, que ce soit l'entrée-sortie de disque ou de réseau, peut causer les questions sérieuses de réactivité de l'unité centrale.

- - - -

Évitez les événements de mouvement de souris

- -

Évitez d'utiliser les auditeurs d'événement de souris, y compris le mouseover, le mouseout, le mouseenter, le mouseexit, et particulièrement le mousemove. Ces événements se produisent avec la haute fréquence, ainsi leurs auditeurs peuvent trivialement créer des surcharges très élevées de l'unité centrale .

- -

Quand ces événements ne peuvent pas être évités, pendant le calcul, les auditeurs devraient être maintenus à un minimum et à un travail réel restreint. Les auditeurs devraient être ajoutés à l'élément le plus spécifique possible, et être enlevés lorsqu'ils ne sont pas immédiatement nécessaires.

- -

Évitez les images animées

- -

Généralement les images animées sont beaucoup plus consommatrices de temps que prévu, particulièrement lorsqu'elles sont utilisées dans l'élément XUL {{ XULElem("tree") }}.

- -

Envisagez d'utiliser les exécuteurs du Chrome

- -

Vous pouvez utiliser l'élément {{ domxref("ChromeWorker") }} pour exécuter des tâches de longue durée ou faire du traitement de données.

- -

Consulter aussi

- - diff --git a/files/fr/mozilla/add-ons/plugins/index.html b/files/fr/mozilla/add-ons/plugins/index.html deleted file mode 100644 index c978874fe1..0000000000 --- a/files/fr/mozilla/add-ons/plugins/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Plugins -slug: Mozilla/Add-ons/Plugins -translation_of: Archive/Plugins ---- -
-

Important: Since Firefox 52, all plugin support except Flash has been dropped (see Plug-in support has been dropped other than Flash for more details). Flash usage is also set to be phased out in the future.

-
- -
-

Note: Plugins are now a legacy technology. They are not available on most mobile devices. Mozilla encourages website developers to avoid using plugins wherever possible and use standard Web APIs instead. If there are plugin features which are not available in the web platform, we encourage developers to post their use cases to mozilla.dev.platform project list, so that Mozilla can prioritize web platform work to make those use cases possible.

-
- -

For more information about plugin roadmap, see non-archived plugin information.

- -

Plugins are shared libraries that users can install to display content that the browser can't display natively. For example, the Adobe Reader plugin lets the user open PDF files directly inside the browser, and the QuickTime and RealPlayer plugins are used to play special format videos in a web page.

- -

Plugins are written using NPAPI, the cross-browser API for plugins. The main source of documentation for NPAPI is the Gecko Plugin API Reference. To make your plugin scriptable from web pages, use npruntime.

- -

Plugins can be written completely from scratch using C APIs (usually in C or C++) or they may be built on a plugin framework such as Firebreath, JUCE, or QtBrowserPlugin. There are also some code generation tools that may be helpful. More information about these tools can be found on the External Resources page.

- -

Plugins are different from extensions, which modify or enhance the functionality of the browser itself. Plugins are also different from search plugins, which plug additional search engines in the search bar.

- -
-
-
-
-
Gecko Plugin API Reference (NPAPI)
-
This reference describes the application programming interfaces for NPAPI plugins and provides information about how to use these interfaces.
-
Site Author Guide For Click-To-Activate Plugins
-
These guidelines will help website authors use plugins when they are blocked by default with the Firefox click-to-activate feature.
-
- -
-
Scripting plugins (npruntime)
-
This reference describes the new cross-browser NPAPI extensions that let plugins be scriptable and also let them access the script objects in the browser.
-
- -
-
Shipping a plugin as a Toolkit bundle
-
Plugins can be shipped as a Toolkit bundle, allowing a user to easily install, uninstall and manage their personal plugins.
-
- -
-
Supporting private browsing in plugins
-
Firefox 3.5 introduced support for private browsing; learn how to make your plugin respect the user's privacy wishes.
-
Multi-Process Plugin Architecture
-
How Firefox loads plugins into a separate process. Firefox 3.6.4 introduced out-of-process plugins which execute in a separate process so that a crashing plugin does not crash the browser.
-
Logging and Debugging for Multi-Process Plugins
-
How to create a plugin log to aid in debugging problems with multi-process plugins.
-
-
- -
-
-
Writing a plugin for Mac OS X
-
Learn how to write a plugin for Mac OS X; a template Xcode project is provided.
-
- -
-
Monitoring Plugins
-
Use an observer service notification to monitor the amount of time spent executing calls in plugins. This can be useful when trying to determine if a plug-in is consuming too many resources.
-
- -
-
Scripting Plugins: Macromedia Flash
-
This article explains how JavaScript can be used to access methods from within the Flash plugin, as well as how a feature called FSCommands can be used to access JavaScript functions from within the Flash animation.
-
- -
-
Plugins: The First Install Problem
-
The First Install Problem is the name given to the conditions arising when a plugin or embeddable software installs itself on a system first, before any other Gecko-based browser.
-
- -
-
Plugins: Samples and Test Cases
-
NPAPI plugin samples and test cases.
-
External Resources for Plugin Creation
-
External projects, frameworks, and blog posts that may be useful.
-
- -
-
XEmbed Extension for Mozilla Plugins
-
Recent versions of Mozilla on *nix-based systems include an extension for writing plugins that use XEmbed instead of using the old Xt-based main loop that most plugins have been using since the Netscape 3.x days.
-
-
-
- -
-

Categories

- -

Interwiki Language Links

- -
-
-

Join the plugin development community

- -
-
Choose your preferred method for joining the discussion:
- - -
- -
-
-
diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html deleted file mode 100644 index f4d71166d9..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: base64 -slug: Mozilla/Add-ons/SDK/High-Level_APIs/base64 -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/base64 ---- -

 Le codage des données et le décodage en utilisant des algorithmes Base64.
-
- var base64 = require ("sdk / base64");
-  
- var encodedData = base64.encode ("Bonjour, monde»);
- var decodedData = base64.decode (encodedData);

- -
-
Les fonctions
-encode (données, charset)
-
-Crée une chaîne de caractères ASCII de base 64 codé à partir d'une chaîne de données binaires.
-Paramètres
-
-données: string
-Les données pour coder
-
-charset: string
-Le charset de la chaîne à coder (en option). La seule valeur acceptée est "utf-8". Pour coder et décoder les chaînes Unicode, le paramètre charset doit être réglé:
-
-var base64 = require ("sdk / base64");
-
-var encodedData = base64.encode (UnicodeString, "utf-8");
-
-résultats
-
-string: La chaîne codée
-decode (données, charset)
-
-Décode une chaîne de données qui a été codé en utilisant la base 64 codage.
-Paramètres
-
-données: string
-Les données codées
-
-charset: string
-Le charset de la chaîne à coder (en option). La seule valeur acceptée est "utf-8". Pour coder et décoder les chaînes Unicode, le paramètre charset doit être réglé:
-
-var base64 = require ("sdk / base64");
-
-var decodedData = base64.decode (encodedData, "utf-8");
-
-résultats
-
-string: La chaîne décodée (encodedData);
-
- -
-

{{AddonSidebar}}

-
- -
-

Unstable

-
- -

Data encoding and decoding using Base64 algorithms.

- -
var base64 = require("sdk/base64");
-
-var encodedData = base64.encode("Hello, World");
-var decodedData = base64.decode(encodedData);
- -

Globals

- -

Functions

- -

encode(data, charset)

- -

Creates a base-64 encoded ASCII string from a string of binary data.

- -
Parameters
- -

data : string
- The data to encode

- -

charset : string
- The charset of the string to encode (optional). The only accepted value is "utf-8". In order to encode and decode Unicode strings, the charset parameter needs to be set:

- -
var base64 = require("sdk/base64");
-
-var encodedData = base64.encode(unicodeString, "utf-8");
-
- -
Returns
- -

string : The encoded string

- -

decode(data, charset)

- -

Decodes a string of data which has been encoded using base-64 encoding.

- -
Parameters
- -

data : string
- The encoded data

- -

charset : string
- The charset of the string to encode (optional). The only accepted value is "utf-8". In order to encode and decode Unicode strings, the charset parameter needs to be set:

- -
var base64 = require("sdk/base64");
-
-var decodedData = base64.decode(encodedData, "utf-8");
- -
Returns
- -

string : The decoded string

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html deleted file mode 100644 index 9af486cc64..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html +++ /dev/null @@ -1,833 +0,0 @@ ---- -title: context-menu -slug: Mozilla/Add-ons/SDK/High-Level_APIs/context-menu -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/context-menu ---- -

{{AddonSidebar}}

- -
-

Stable

-
- -

Ajouez des éléments, sous-menus et des séparateurs au menu contextuel.

- -

Usage

- -

Instead of manually adding items when particular contexts occur and then removing them when those contexts go away, you bind items to contexts, and the adding and removing is automatically handled for you. Items are bound to contexts in much the same way that event listeners are bound to events. When the user invokes the context menu, all of the items bound to the current context are automatically added to the menu. If no items are bound, none are added. Likewise, any items that were previously in the menu but are not bound to the current context are automatically removed from the menu. You never need to manually remove your items from the menu unless you want them to never appear again.

- -

For example, if your add-on needs to add a context menu item whenever the user visits a certain page, don't create the item when that page loads, and don't remove it when the page unloads. Rather, create your item only once and supply a context that matches the target URL.

- -

Context menu items are displayed in the order created or in the case of sub menus the order added to the sub menu. Menu items for each add-on will be grouped together automatically. If the total number of menu items in the main context menu from all add-ons exceeds a certain number (normally 10 but configurable with the extensions.addon-sdk.context-menu.overflowThreshold preference) all of the menu items will instead appear in an overflow menu to avoid making the context menu too large.

- -

Specifying contexts

- -

As its name implies, the context menu should be reserved for the occurrence of specific contexts. Contexts can be related to page content or the page itself, but they should never be external to the page.

- -

For example, a good use of the menu would be to show an "Edit Image" item when the user right-clicks an image in the page. A bad use would be to show a submenu that listed all the user's tabs, since tabs aren't related to the page or the node the user clicked to open the menu.

- -

The page context

- -

First of all, you may not need to specify a context at all. When a top-level item does not specify a context, the page context applies. An item that is in a submenu is visible unless you specify a context.

- -

The page context occurs when the user invokes the context menu on a non-interactive portion of the page. Try right-clicking a blank spot in this page, or on text. Make sure that no text is selected. The menu that appears should contain the items "Back", "Forward", "Reload", "Stop", and so on. This is the page context.

- -

The page context is appropriate when your item acts on the page as a whole. It does not occur when the user invokes the context menu on a link, image, or other non-text node, or while a selection exists.

- -

Declarative contexts

- -

You can specify some simple, declarative contexts when you create a menu item by setting the context property of the options object passed to its constructor, like this:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "My Menu Item",
-  context: cm.URLContext("*.mozilla.org")
-});
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
PageContext() The page context.
SelectionContext() This context occurs when the menu is invoked on a page in which the user has made a selection.
SelectorContext(selector) This context occurs when the menu is invoked on a node that either matches selector, a CSS selector, or has an ancestor that matches. selector may include multiple selectors separated by commas, e.g., "a[href], img".
URLContext(matchPattern) This context occurs when the menu is invoked on pages with particular URLs. matchPattern is a match pattern string or an array of match pattern strings. When matchPattern is an array, the context occurs when the menu is invoked on a page whose URL matches any of the patterns. These are the same match pattern strings that you use with the page-mod include property. Read more about patterns.
PredicateContext(predicateFunction)predicateFunction is called when the menu is invoked, and the context occurs when the function returns a true value. The function is passed an object with properties describing the menu invocaton context.
arrayAn array of any of the other types. This context occurs when all contexts in the array occur.
- -

Menu items also have a context property that can be used to add and remove declarative contexts after construction. For example:

- -
var context = require("sdk/context-menu").SelectorContext("img");
-myMenuItem.context.add(context);
-myMenuItem.context.remove(context);
- -

When a menu item is bound to more than one context, it appears in the menu when all of those contexts occur.

- -

In content scripts

- -

The declarative contexts are handy but not very powerful. For instance, you might want your menu item to appear for any page that has at least one image, but declarative contexts won't help you there.

- -

When you need more control over the context in which your menu items are shown, you can use content scripts. Like other APIs in the SDK, the context-menu API uses content scripts to let your add-on interact with pages in the browser. Each menu item you create in the top-level context menu can have a content script.

- -

A special event named "context" is emitted in your content scripts whenever the context menu is about to be shown. If you register a listener function for this event and it returns true, the menu item associated with the listener's content script is shown in the menu.

- -

For example, this item appears whenever the context menu is invoked on a page that contains at least one image:

- -
require("sdk/context-menu").Item({
-  label: "This Page Has Images",
-  contentScript: 'self.on("context", function (node) {' +
-                 '  return !!document.querySelector("img");' +
-                 '});'
-});
- -

Note that the listener function has a parameter called node. This is the node in the page that the user context-clicked to invoke the menu. You can use it to determine whether your item should be shown.

- -

You can both specify declarative contexts and listen for contexts in a content script. Your context listener is called even if any declarative contexts are not current (since Firefox 36).

- -

If you combine SelectorContext and the "context" event, be aware that the node argument passed to the "context" event will not always match the type specified in SelectorContext.

- -

SelectorContext will match if the menu is invoked on the node specified or any descendant of that node, but the "context" event handler is passed the actual node on which the menu was invoked. The example above works because <IMG> elements can't contain other elements, but in the example below, node.nodeName is not guaranteed to be "P" - for example, it won't be "P" if the user context-clicked a link inside a paragraph:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "A Paragraph",
-  context: cm.SelectorContext("p"),
-  contentScript: 'self.on("context", function (node) {' +
-                 '  console.log(node.nodeName);' +
-                 '  return true;' +
-                 '});'
-});
- -

The content script is executed for every page that a context menu is shown for. It will be executed the first time it is needed (i.e. when the context menu is first shown and all of the declarative contexts for your item are current) and then remains active until you destroy your context menu item or the page is unloaded.

- -

Handling menu item clicks

- -

In addition to using content scripts to listen for the "context" event as described above, you can use content scripts to handle item clicks. When the user clicks your menu item, an event named "click" is emitted in the item's content script.

- -

Therefore, to handle an item click, listen for the "click" event in that item's content script like so:

- -
require("sdk/context-menu").Item({
-  label: "My Item",
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  console.log("Item clicked!");' +
-                 '});'
-});
- -

Note that the listener function has parameters called node and data.

- -

The "node" argument

- -

node is the node that the user context-clicked to invoke the menu.

- - - -

For example, suppose your add-on looks like this:

- -
var script = "self.on('click', function (node, data) {" +
-             "  console.log('clicked: ' + node.nodeName);" +
-             "});";
-
-var cm = require("sdk/context-menu");
-
-cm.Item({
-  label: "body context",
-  context: cm.SelectorContext("body"),
-  contentScript: script
-});
- -

This add-on creates a context-menu item that uses SelectorContext to display the item whenever the context menu is activated on any descendant of the <BODY> element. When clicked, the item just logs the nodeName property for the node passed to the click handler.

- -

If you run this add-on you'll see that it always logs "BODY", even if you click on a paragraph element inside the page:

- -
info: contextmenu-example: clicked: BODY
- -

By contrast, this add-on uses the PageContext:

- -
var script = "self.on('click', function (node, data) {" +
-             "  console.log('clicked: ' + node.nodeName);" +
-             "});";
-
-var cm = require("sdk/context-menu");
-
-cm.Item({
-  label: "body context",
-  context: cm.PageContext(),
-  contentScript: script
-});
- -

It will log the name of the actual node clicked:

- -
info: contextmenu-example: clicked: P
- -

The "data" Argument

- -

data is the data property of the menu item that was clicked. Note that when you have a hierarchy of menu items the click event will be sent to the content script of the item clicked and all ancestors so be sure to verify that the data value passed matches the item you expect. You can use this to simplify click handling by providing just a single click listener on a Menu that reacts to clicks for any child items.:

- -
var cm = require("sdk/context-menu");
-cm.Menu({
-  label: "My Menu",
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  console.log("You clicked " + data);' +
-                 '});',
-  items: [
-    cm.Item({ label: "Item 1", data: "item1" }),
-    cm.Item({ label: "Item 2", data: "item2" }),
-    cm.Item({ label: "Item 3", data: "item3" })
-  ]
-});
-
- -

Communicating With the Add-on

- -

Often you will need to collect some kind of information in the click listener and perform an action unrelated to content. To communicate to the menu item associated with the content script, the content script can call the postMessage function attached to the global self object, passing it some JSON-able data. The menu item's "message" event listener will be called with that data.

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Image",
-  context: cm.SelectorContext("img"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(node.src);' +
-                 '});',
-  onMessage: function (imgSrc) {
-    openImageEditor(imgSrc);
-  }
-});
- -

Updating a menu item's label

- -

Each menu item must be created with a label, but you can change its label later using a couple of methods.

- -

The simplest method is to set the menu item's label property. This example updates the item's label based on the number of times it's been clicked:

- -
var numClicks = 0;
-var myItem = require("sdk/context-menu").Item({
-  label: "Click Me: " + numClicks,
-  contentScript: 'self.on("click", self.postMessage);',
-  onMessage: function () {
-    numClicks++;
-    this.label = "Click Me: " + numClicks;
-    // Setting myItem.label is equivalent.
-  }
-});
- -

Sometimes you might want to update the label based on the context. For instance, if your item performs a search with the user's selected text, it would be nice to display the text in the item to provide feedback to the user. In these cases you can use the second method. Recall that your content scripts can listen for the "context" event and if your listeners return true, the items associated with the content scripts are shown in the menu. In addition to returning true, your "context" listeners can also return strings. When a "context" listener returns a string, it becomes the item's new label.

- -

This item implements the aforementioned search example:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Search Google",
-  context: cm.SelectionContext(),
-  contentScript: 'self.on("context", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  if (text.length > 20)' +
-                 '    text = text.substr(0, 20) + "...";' +
-                 '  return "Search Google for " + text;' +
-                 '});'
-});
- -

The "context" listener gets the window's current selection, truncating it if it's too long, and includes it in the returned string. When the item is shown, its label will be "Search Google for text", where text is the truncated selection.

- -

You can also get the selected text using the High Level selection API.

- -
var selection = require("sdk/selection");
- -

and within the contentScript, reference the selected text as selection.text

- -

Private windows

- -

If your add-on has not opted into private browsing, then any menus or menu items that you add will not appear in context menus belonging to private browser windows.

- -

To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the documentation for the private-browsing module.

- -

More examples

- -

For conciseness, these examples create their content scripts as strings and use the contentScript property. In your own add-on, you will probably want to create your content scripts in separate files and pass their URLs using the contentScriptFile property. See Working with Content Scripts for more information.

- -
-

Warning: Unless your content script is extremely simple and consists only of a static string, don't use contentScript: if you do, you may have problems getting your add-on approved on AMO.

- -

Instead, keep the script in a separate file and load it using contentScriptFile. This makes your code easier to maintain, secure, debug and review.

-
- -

Show an "Edit Page Source" item when the user right-clicks a non-interactive part of the page:

- -
require("sdk/context-menu").Item({
-  label: "Edit Page Source",
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(document.URL);' +
-                 '});',
-  onMessage: function (pageURL) {
-    editSource(pageURL);
-  }
-});
- -

Show an "Edit Image" item when the menu is invoked on an image:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Image",
-  context: cm.SelectorContext("img"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(node.src);' +
-                 '});',
-  onMessage: function (imgSrc) {
-    openImageEditor(imgSrc);
-  }
-});
- -

Show an "Edit Mozilla Image" item when the menu is invoked on an image in a mozilla.org or mozilla.com page:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Mozilla Image",
-  context: [
-    cm.URLContext(["*.mozilla.org", "*.mozilla.com"]),
-    cm.SelectorContext("img")
-  ],
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(node.src);' +
-                 '});',
-  onMessage: function (imgSrc) {
-    openImageEditor(imgSrc);
-  }
-});
- -

Show an "Edit Page Images" item when the page contains at least one image:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Page Images",
-  // This ensures the item only appears during the page context.
-  context: cm.PageContext(),
-  contentScript: 'self.on("context", function (node) {' +
-                 '  var pageHasImgs = !!document.querySelector("img");' +
-                 '  return pageHasImgs;' +
-                 '});' +
-                 'self.on("click", function (node, data) {' +
-                 '  var imgs = document.querySelectorAll("img");' +
-                 '  var imgSrcs = [];' +
-                 '  for (var i = 0 ; i < imgs.length; i++)' +
-                 '    imgSrcs.push(imgs[i].src);' +
-                 '  self.postMessage(imgSrcs);' +
-                 '});',
-  onMessage: function (imgSrcs) {
-    openImageEditor(imgSrcs);
-  }
-});
- -

Show a "Search With" menu when the user right-clicks an anchor that searches Google or Wikipedia with the text contained in the anchor:

- -
var cm = require("sdk/context-menu");
-var googleItem = cm.Item({
-  label: "Google",
-  data: "http://www.google.com/search?q="
-});
-var wikipediaItem = cm.Item({
-  label: "Wikipedia",
-  data: "http://en.wikipedia.org/wiki/Special:Search?search="
-});
-var searchMenu = cm.Menu({
-  label: "Search With",
-  context: cm.SelectorContext("a[href]"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  var searchURL = data + node.textContent;' +
-                 '  window.location.href = searchURL;' +
-                 '});',
-  items: [googleItem, wikipediaItem]
-});
- -

To create sub-menus, one of the items in your main menu must be defined as a menu.

- -
var cm = require("sdk/context-menu");
-var googleItem = cm.Item({
-  label: "Google",
-  data: "http://www.google.com/search?q="
-});
-var wikipediaItem = cm.Item({
-  label: "Wikipedia",
-  data: "http://en.wikipedia.org/wiki/Special:Search?search="
-});
-var bingItem = cm.Item({
-  label: "Bing",
-  data: "http://www.bing.com/search?q="
-});
-var yahooItem = cm.Item({
-  label: "Yahoo",
-  data: "https://search.yahoo.com/search?p="
-});
-var moreMenu = cm.Menu({
-  label: "More Search",
-  items: [bingItem, yahooItem]
-});
-var searchMenu = cm.Menu({
-  label: "Search With",
-  context: cm.SelectorContext("a[href]"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  var searchURL = data + node.textContent;' +
-                 '  window.location.href = searchURL;' +
-                 '});',
-  items: [googleItem, wikipediaItem, moreMenu]
-});
- -

If you need a tooltip:

- -

tooltip

- -

First you need a dummy menu item that will serve as a trigger and subsequently will add the tooltips to the actual menu items.

- -

It is easy to find out which menu items are constructed by the addon-sdk module because they have the class addon-context-menu-item. The difficult part it to identify those that belong to your extension.

- -

One way to achieve this it to utilize the data attribute of Item class constructor, which conveniently maps to the value attribute of the underlying xul element.

- -

So if data consists of unique prefix and the desired tooltip text, it is just a matter of kicking in the right moment.

- -
const { getMostRecentBrowserWindow } = require("sdk/window/utils");
-
-var cm = require("sdk/context-menu");
-var uuid = require('sdk/util/uuid').uuid();
-var uuidstr = uuid.number.substring(1,37);
-
-cm.Item({
-  data: uuidstr+"This is a tooltip",
-  label: "Just a tigger, will never show up",
-  contentScript: 'self.on("context", function(){self.postMessage(); return false;})',
-  onMessage: function(){
-    var cmitems = getMostRecentBrowserWindow().document.querySelectorAll(".addon-context-menu-item[value^='"+ uuidstr +"']");
-    for(var i=0; i < cmitems.length; i++)
-      cmitems[i].tooltipText = cmitems[i].value.substring(36);
-  }
-});
- -

 

- -

Globals

- -

Constructors

- -

Item(options)

- -

Creates a labeled menu item that can perform an action when clicked.

- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - -
NameType 
labelstring -

The item's label. It must either be a string or an object that implements toString().

-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
imagestring -

The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI.

-
datastring -

An optional arbitrary value to associate with the item. It must be either a string or an object that implements toString(). It will be passed to click listeners.

-
accesskeysingle-character string -
-

New in Firefox 35.

-
- -

Access key for the item. Pressing this key selects the item when the context menu is open.

-
contextvalue -

If the item is contained in the top-level context menu, this declaratively specifies the context under which the item will appear; see Specifying Contexts above.

-
contentScriptstring,array -

If the item is contained in the top-level context menu, this is the content script or an array of content scripts that the item can use to interact with the page.

-
contentScriptFilestring,array -

If the item is contained in the top-level context menu, this is the local file URL of the content script or an array of such URLs that the item can use to interact with the page.

-
onMessagefunction -

If the item is contained in the top-level context menu, this function will be called when the content script calls self.postMessage. It will be passed the data that was passed to postMessage.

-
- - - -

Creates a labeled menu item that expands into a submenu.

- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - - - - - - -
NameType 
labelstring -

The item's label. It must either be a string or an object that implements toString().

-
itemsarray -

An array of menu items that the menu will contain. Each must be an Item, Menu, or Separator.

-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
imagestring -

The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI.

-
contextvalue -

If the menu is contained in the top-level context menu, this declaratively specifies the context under which the menu will appear; see Specifying Contexts above.

-
contentScriptstring,array -

If the menu is contained in the top-level context menu, this is the content script or an array of content scripts that the menu can use to interact with the page.

-
contentScriptFilestring,array -

If the menu is contained in the top-level context menu, this is the local file URL of the content script or an array of such URLs that the menu can use to interact with the page.

-
onMessagefunction -

If the menu is contained in the top-level context menu, this function will be called when the content script calls self.postMessage. It will be passed the data that was passed to postMessage.

-
- -

Separator()

- -

Creates a menu separator.

- -

PageContext()

- -

Creates a page context. See Specifying Contexts above.

- -

SelectionContext()

- -

Creates a context that occurs when a page contains a selection. See Specifying Contexts above.

- -

SelectorContext(selector)

- -

Creates a context that matches a given CSS selector. See Specifying Contexts above.

- -
Parameters
- -

selector : string
- A CSS selector.

- -

URLContext(matchPattern)

- -

Creates a context that matches pages with particular URLs. See Specifying Contexts above.

- -
Parameters
- -

matchPattern : string,array
- A match pattern string, regexp or an array of match pattern strings or regexps.

- -

PredicateContext(predicateFunction)

- -
-

New in Firefox 29

-
- -

Creates a context that occurs when predicateFunction returns a true value. See Specifying Contexts above.

- -
Parameters
- -

predicateFunction : function(context)
- A function which will be called with an object argument that provide information about the invocation context. context object properties:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
documentTypeThe MIME type of the document the menu was invoked in. E.g. text/html for HTML pages, application/xhtml+xml for XHTML, or image/jpeg if viewing an image directly.
documentURLThe URL of the document the menu was invoked in.
targetNameThe name of the DOM element that the menu was invoked on, in lower-case.
targetIDThe id attribute of the element that the menu was invoked on, or null if not set.
isEditabletrue if the menu was invoked in an editable element, and that element isn't disabled or read-only.  This includes non-input elements with the contenteditable attribute set to true.
selectionTextThe current selection as a text string, or null. If the menu was invoked in an input text box or area, this is the selection of that element, otherwise the selection in the contents of the window.
srcURLThe src URL of the element that the menu was invoked on, or null if it doesn't have one.
linkURLThe href URL of the element that the menu was invoked on, or null if it doesn't have one.
valueThe current contents of a input text box or area if the menu was invoked in one, null otherwise.
- -

Item

- -

A labeled menu item that can perform an action when clicked.

- -

Methods

- -

destroy()

- -

Permanently removes the item from its parent menu and frees its resources. The item must not be used afterward. If you need to remove the item from its parent menu but use it afterward, call removeItem() on the parent menu instead.

- -

Properties

- -

label

- -

The menu item's label. You can set this after creating the item to update its label later.

- -

image

- -

The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI. You can set this after creating the item to update its image later. To remove the item's image, set it to null.

- -

data

- -

An optional arbitrary value to associate with the item. It must be either a string or an object that implements toString(). It will be passed to click listeners. You can set this after creating the item to update its data later.

- -

context

- -

A list of declarative contexts for which the menu item will appear in the context menu. Contexts can be added by calling context.add() and removed by called context.remove().

- -

parentMenu

- -

The item's parent Menu, or null if the item is contained in the top-level context menu. This property is read-only. To add the item to a new menu, call that menu's addItem() method.

- -

contentScript

- -

The content script or the array of content scripts associated with the menu item during creation.

- -

contentScriptFile

- -

The URL of a content script or the array of such URLs associated with the menu item during creation.

- -

Events

- -

message

- -

If you listen to this event you can receive message events from content scripts associated with this menu item. When a content script posts a message using self.postMessage(), the message is delivered to the add-on code in the menu item's message event.

- -
Arguments
- -

value : Listeners are passed a single argument which is the message posted from the content script. The message can be any JSON-serializable value.

- - - -

A labeled menu item that expands into a submenu.

- -

Methods

- -

addItem(item)

- -

Appends a menu item to the end of the menu. If the item is already contained in another menu or in the top-level context menu, it's automatically removed first. If the item is already contained in this menu it will just be moved to the end of the menu.

- -
Parameters
- -

item : Item,Menu,Separator
- The Item, Menu, or Separator to add to the menu.

- -

removeItem(item)

- -

Removes the given menu item from the menu. If the menu does not contain the item, this method does nothing.

- -
Parameters
- -

item : Item,Menu,Separator
- The menu item to remove from the menu.

- -

destroy()

- -

Permanently removes the menu from its parent menu and frees its resources. The menu must not be used afterward. If you need to remove the menu from its parent menu but use it afterward, call removeItem() on the parent menu instead.

- -

Properties

- -

label

- -

The menu's label. You can set this after creating the menu to update its label later.

- -

items

- -

An array containing the items in the menu. The array is read-only, meaning that modifications to it will not affect the menu. However, setting this property to a new array will replace all the items currently in the menu with the items in the new array.

- -

image

- -

The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI. You can set this after creating the menu to update its image later. To remove the menu's image, set it to null.

- -

context

- -

A list of declarative contexts for which the menu will appear in the context menu. Contexts can be added by calling context.add() and removed by called context.remove().

- -

parentMenu

- -

The menu's parent Menu, or null if the menu is contained in the top-level context menu. This property is read-only. To add the menu to a new menu, call that menu's addItem() method.

- -

contentScript

- -

The content script or the array of content scripts associated with the menu during creation.

- -

contentScriptFile

- -

The URL of a content script or the array of such URLs associated with the menu during creation.

- -

Events

- -

message

- -

If you listen to this event you can receive message events from content scripts associated with this menu item. When a content script posts a message using self.postMessage(), the message is delivered to the add-on code in the menu item's message event.

- -
Arguments
- -

value : Listeners are passed a single argument which is the message posted from the content script. The message can be any JSON-serializable value.

- -

Separator

- -

A menu separator. Separators can be contained only in Menus, not in the top-level context menu.

- -

Methods

- -

destroy()

- -

Permanently removes the separator from its parent menu and frees its resources. The separator must not be used afterward. If you need to remove the separator from its parent menu but use it afterward, call removeItem() on the parent menu instead.

- -

Properties

- -

parentMenu

- -

The separator's parent Menu. This property is read-only. To add the separator to a new menu, call that menu's addItem() method.

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/index.html deleted file mode 100644 index e78b5f5cb5..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/index.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: High-Level APIs -slug: Mozilla/Add-ons/SDK/High-Level_APIs -tags: - - Add-on SDK - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs ---- -

{{AddonSidebar}}

- -

Les modules répertoriés sur cette page implémentent des API de haut niveau pour la création de modules complémentaires: création d'interfaces utilisateur, interaction avec le Web et interaction avec le navigateur.

- -

Sauf indication contraire explicite de la documentation, tous ces modules sont "Stables": nous éviterons d'y apporter des modifications incompatibles. {{ LandingPageListSubpages ("/en-US/Add-ons/SDK/High-Level_APIs", 5) }}

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html deleted file mode 100644 index 4a73e29e98..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: indexed-db -slug: Mozilla/Add-ons/SDK/High-Level_APIs/indexed-db -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/indexed-db ---- -

{{AddonSidebar}}

- -
-

Expérimental

-
- -

Expose l'API IndexedDB pour les add-ons.

- -

Utilisation

- -

Les scripts en cours d'exécution dans les pages Web peuvent accéder à IndexedDB via window. Par exemple:

- -
window.indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
-
-var request = window.indexedDB.open("MyDatabase");
-request.onerror = function(event) {
-  console.log("failure");
-};
-request.onsuccess = function(event) {
-  console.log("success");
-};
- -

Parce que votre code add-on principale ne peut pas accéder au DOM, vous ne pouvez pas faire cela. Mais vous pouvez utiliser le module indexed-db pour y accéder:

- -
var { indexedDB } = require('sdk/indexed-db');
-
-var request = indexedDB.open('MyDatabase');
-request.onerror = function(event) {
-  console.log("failure");
-};
-request.onsuccess = function(event) {
-  console.log("success");
-};
- -

La plupart des objets qui mettent en œuvre l'API IndexedDB, tels que IDBTransaction , IDBOpenDBRequest , et IDBObjectStore , sont accessibles à travers l'objet IndexedDB lui-même. < br>

- -

L'API exposée par indexed-db est presque identique à l'API DOM IndexedDB, donc on n'a pas répété sa documentation ici, référer vous à la documentation de l'API IndexedDB pour tous les détails.

- -

La base de données créé sera unique et privée pour l'add-on, et n'est pas liés à une base de données de site. Le module ne peut pas être utilisé pour interagir avec une base de données du site donné. Voir bug 778197 et bug 786688 .

- -

Exemple

- -
-

Cet exemple utilise l'API bouton d'action , qui est uniquement disponible à partir de Firefox 29 partir.

-
- -

Voici un add-on complet qui ajoute deux boutons pour le navigateur: le bouton "Ajouter" ajoute le titre de l'onglet en cours à une base de données, tandis que le bouton intitulé «Liste» répertorie tous les titres dans la base de données .

- -

L'add-on implémente les fonctions open(), addItem() et getItems() pour ouvrir la base de données, ajouter un nouvel élément à la base de données, et d'obtenir tous les éléments de la base de données.

- -
var { indexedDB, IDBKeyRange } = require('sdk/indexed-db');
-
-var database = {};
-
-database.onerror = function(e) {
-  console.error(e.value)
-}
-
-function open(version) {
-  var request = indexedDB.open("stuff", version);
-
-  request.onupgradeneeded = function(e) {
-    var db = e.target.result;
-    e.target.transaction.onerror = database.onerror;
-
-    if(db.objectStoreNames.contains("items")) {
-      db.deleteObjectStore("items");
-    }
-
-    var store = db.createObjectStore("items",
-      {keyPath: "time"});
-  };
-
-  request.onsuccess = function(e) {
-    database.db = e.target.result;
-  };
-
-  request.onerror = database.onerror;
-};
-
-function addItem(name) {
-  var db = database.db;
-  var trans = db.transaction(["items"], "readwrite");
-  var store = trans.objectStore("items");
-  var time = new Date().getTime();
-  var request = store.put({
-    "name": name,
-    "time": time
-  });
-
-  request.onerror = database.onerror;
-};
-
-function getItems(callback) {
-  var cb = callback;
-  var db = database.db;
-  var trans = db.transaction(["items"], "readwrite");
-  var store = trans.objectStore("items");
-  var items = new Array();
-
-  trans.oncomplete = function() {
-    cb(items);
-  }
-
-  var keyRange = IDBKeyRange.lowerBound(0);
-  var cursorRequest = store.openCursor(keyRange);
-
-  cursorRequest.onsuccess = function(e) {
-    var result = e.target.result;
-    if(!!result == false)
-      return;
-
-    items.push(result.value.name);
-    result.continue();
-  };
-
-  cursorRequest.onerror = database.onerror;
-};
-
-function listItems(itemList) {
-  console.log(itemList);
-}
-
-open("1");
-
-var add = require("sdk/ui/button/action").ActionButton({
-  id: "add",
-  label: "Add",
-  icon: "./add.png",
-  onClick: function() {
-    addItem(require("sdk/tabs").activeTab.title);
-  }
-});
-
-var list = require("sdk/ui/button/action").ActionButton({
-  id: "list",
-  label: "List",
-  icon: "./list.png",
-  onClick: function() {
-    getItems(listItems);
-  }
-});
-
- -

Notez que pour exécuter cet add-on, vous aurez besoin de fournir des icônes nommées "add.png" et "list.png" dans le répertoire "data" de l'add-ons .

- -

Globals

- -

Propriétés

- -

indexedDB

- -

Permet de créer, ouvrir et supprimer des bases de données. Voir la documentation IDBFactory.

- -

IDBKeyRange

- -

Définit une plage de clés. Voir la documentation IDBKeyRange.

- -

DOMException

- -

Fournit des informations plus détaillées sur une exception. Voir la documentation DOMException.

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html deleted file mode 100644 index 2b35fc120b..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: simple-storage -slug: Mozilla/Add-ons/SDK/High-Level_APIs/simple-storage -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/simple-storage ---- -

{{AddonSidebar}}

- -
-

Stable

-
- -

Permet au add-on le stockage des données afin qu'il soit conservé entre les redémarrages de Firefox. Ce module fonctionne de façon similaire au DOM Storage du Web, mais il est uniquement disponible pour des add-ons.

- -

Utilisation

- -

Le module de stockage simple exporte un objet appelé storage qui est persistant et à porté de votre add-on. C'est un objet JavaScript normal, et vous pouvez le traiter comme vous le feriez pour tout autre.

- -

Pour stocker une valeur, il faut juste l'affecter avec la propriété storage:

- -
var ss = require("sdk/simple-storage");
-ss.storage.myArray = [1, 1, 2, 3, 5, 8, 13];
-ss.storage.myBoolean = true;
-ss.storage.myNull = null;
-ss.storage.myNumber = 3.1337;
-ss.storage.myObject = { a: "foo", b: { c: true }, d: null };
-ss.storage.myString = "O frabjous day!";
- -

Vous pouvez stocker des valeurs tableau, booléennes, nombre, objet, null et des textes. Si vous souhaitez stocker d'autres types de valeurs, vous devrez d'abord les convertir en chaînes ou un autre de ces types.

- -

Veillez à définir les propriétés avec storage et non avec le module lui-même:

- -
// This is not good!
-var ss = require("sdk/simple-storage");
-ss.foo = "I will not be saved! :(";
- -

stockage simple et "jpm run"

- -

Le module de stockage simple stocke ses données dans votre profil. Parce que jpm run utilise par défaut un profil frais chaque fois qu'il est exécuté, le stockage simple ne fonctionnera pas avec des add-ons exécutées en utilisant jpm run - les données stockées ne persisteront pas d'une exécution à l'autre.

- -

La solution la plus simple à ce problème est d'utiliser l'option --profile de jpm avec un chemin d'accès à un profil - pas seulement un nom de profil. Vous pouvez aussi avoir besoin d'inclure l'option --no-copie pour empêcher Firefox de copier le profil dans un répertoire de temporaire chaque fois qu'il démarre.

- -
jpm run --no-copy --profile path/to/profile/dir
- -

Si vous spécifiez un profil non-existant, il sera créé.

- -
-

Important: Si vous utilisez cette méthode, vous devez mettre fin à votre session de débogage en quittant Firefox normalement, en annulant la commande shell. Si vous ne fermez pas Firefox normalement, puis un simple stockage ne sera pas informé que la session est terminée, et ne sera pas écrire vos données à la mémoire de sauvegarde.

-
- -

Accès au stockage à partir de la console

- -

Dans l' Add-on Debugger , vous pouvez accéder à vos addons simple stockage par programmation à partir de la console en utilisant ce qui suit:

- -
loader.modules['resource://gre/modules/commonjs/sdk/simple-storage.js'].exports.storage
- -

Constructeur de tableaux

- -

Pour ne pas remettre à zéro un tableau, attention au constructeur. Par exemple, cet add-on essaie de stocker les URL des pages visitées:

- -
var ss = require("sdk/simple-storage");
-ss.storage.pages = [];
-
-require("sdk/tabs").on("ready", function(tab) {
-  ss.storage.pages.push(tab.url);
-});
-
-require("sdk/ui/button/action").ActionButton({
-  id: "read",
-  label: "Read",
-  icon: "./read.png",
-  onClick: function() {
-    console.log(ss.storage.pages);
-  }
-});
- -

Mais cela ne fonctonne pas, car il vide le tableau chaque fois que l'add-on est apellée (par exemple, chaque fois que Firefox est lancé). La ligne 2 a besoin d'être subordonné, de sorte que le tableau est uniquement construite si il n'existe pas déjà:

- -
if (!ss.storage.pages)
-  ss.storage.pages = [];
- -

Suppression de données

- -

Vous pouvez supprimer des propriétés en utilisant l'opérateur delete. Voici une add-on qui ajoute trois boutons pour écrire, lire et supprimer une valeur:

- -
var ss = require("sdk/simple-storage");
-
-require("sdk/ui/button/action").ActionButton({
-  id: "write",
-  label: "Write",
-  icon: "./write.png",
-  onClick: function() {
-    ss.storage.value = 1;
-    console.log("Setting value");
-  }
-});
-
-require("sdk/ui/button/action").ActionButton({
-  id: "read",
-  label: "Read",
-  icon: "./read.png",
-  onClick: function() {
-    console.log(ss.storage.value);
-  }
-});
-
-require("sdk/ui/button/action").ActionButton({
-  id: "delete",
-  label: "Delete",
-  icon: "./delete.png",
-  onClick: function() {
-    delete ss.storage.value;
-    console.log("Deleting value");
-  }
-});
- -

Si vous l'exécutez, vous verrez que si vous cliquez sur "Lire" après avoir cliqué sur "Supprimer" vous aurez le résultat escompté:

- -
info: undefined
-
- -

Notez que pour exécuter cet add-on, vous aurez à enregistrer des fichiers icône nommées "write.png", "read.png", et "delete.png" dans le répertoire "data".

- -

Quotas

- -

Le stockage simple à la disposition de votre add-on est limité. Actuellement, cette limite est environ cinq mégaoctets (5,242,880 octets). Vous pouvez choisir d'être averti lorsque vous dépassez le quota, et vous devez répondre en réduisant la quantité de données dans le stockage. Si vous quittez l'application pendant que vous êtes hors quota, toutes les données stockées depuis la dernière fois que vous étiez sous le quota ne sont pas conservées. Vous ne devriez pas laisser cela se produire.

- -

Pour écouter les notifications du quota, utiliser l'evenement "OverQuota". il sera appelée quand votre stockage dépasse le quota.

- -
function myOnOverQuotaListener() {
-  console.log("Uh oh.");
-}
-ss.on("OverQuota", myOnOverQuotaListener);
- -

Les auditeurs peuvent également être retirés:

- -
ss.removeListener("OverQuota", myOnOverQuotaListener);
- -

Pour connaitre le % de saturation du quota utiliser la proprieté quotaUsage. Si vous êtes dans votre quota, c'est un nombre entre 0 et 1. Si votre add-on utilise plus que son quota, cette valeur est supérieure à 1,0.

- -

Par conséquent, lorsque vous êtes averti que vous êtes hors quota, vous devez répondre en supprimant les données de l'espace de stockage jusqu'à ce que votre quotaUsage soit inférieur ou égal à 1.

- -
ss.storage.myList = [ /* some long array */ ];
-ss.on("OverQuota", function () {
-  while (ss.quotaUsage > 1)
-    ss.storage.myList.pop();
-});
- - - -

Si votre mémoire est liée à l'histoire de vos utilisateurs Web, des renseignements personnels, ou d'autres données sensibles, votre add-on devrait respecter la navigation privé .

- -

Pour en savoir plus sur la façon de choisir en mode de navigation privée et comment utiliser le SDK pour éviter de stocker des données d'utilisateur associées aux fenêtres privées, reportez-vous à la documentation du private-browsing Module .

- -

Globals

- -

Propriétés

- -

storage

- -

Un objet persistant privé de votre add-on.

- -

quotaUsage

- -

Un certain nombre dans l'intervalle [0, Infinity) qui indique le pourcentage de quota occupé par le stockage. Une valeur dans l'intervalle [0, 1] indique que le stockage est dans le quota. Une valeur supérieure à 1 indique que le stockage dépasse le quota.

- -

Événements

- -

OverQuota

- -

Le module émet cet événement lorsque votre stockage add-ons dépasse son quota.

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html deleted file mode 100644 index 5ffa11d9a4..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html +++ /dev/null @@ -1,669 +0,0 @@ ---- -title: tabs -slug: Mozilla/Add-ons/SDK/High-Level_APIs/tabs -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/tabs ---- -

{{AddonSidebar}}

- -
-

Stable

-
- -

Ouvre, manipule, accède et recevoir les événements des onglets.

- -

Utilisation

- -

Ouvrez un onglet

- -

Vous pouvez ouvrir un nouvel onglet, en spécifiant diverses propriétés, y compris l'emplacement:

- -
var tabs = require("sdk/tabs");
-tabs.open("http://www.example.com");
- -

Track tabs

- -

You can register event listeners to be notified when tabs open, close, finish loading DOM content, or are made active or inactive:

- -
var tabs = require("sdk/tabs");
-
-// Listen for tab openings.
-tabs.on('open', function onOpen(tab) {
-  myOpenTabs.push(tab);
-});
-
-// Listen for tab content loads.
-tabs.on('ready', function(tab) {
-  console.log('tab is loaded', tab.title, tab.url);
-});
- -

Access tabs

- -

The module itself can be used as a list of all opened tabs across all windows. In particular, you can enumerate it:

- -
var tabs = require('sdk/tabs');
-for (let tab of tabs)
-  console.log(tab.title);
- -

You can also access individual tabs by index:

- -
var tabs = require('sdk/tabs');
-
-tabs.on('ready', function () {
-  console.log('first: ' + tabs[0].title);
-  console.log('last: ' + tabs[tabs.length-1].title);
-});
- -

You can access the currently active tab:

- -
var tabs = require('sdk/tabs');
-
-tabs.on('activate', function () {
-  console.log('active: ' + tabs.activeTab.url);
-});
- -

Track a single tab

- -

Given a tab, you can register event listeners to be notified when the tab is closed, activated or deactivated, or when the page hosted by the tab is loaded or retrieved from the "back-forward cache":

- -
var tabs = require("sdk/tabs");
-
-function onOpen(tab) {
-  console.log(tab.url + " is open");
-  tab.on("pageshow", logShow);
-  tab.on("activate", logActivate);
-  tab.on("deactivate", logDeactivate);
-  tab.on("close", logClose);
-}
-
-function logShow(tab) {
-  console.log(tab.url + " is loaded");
-}
-
-function logActivate(tab) {
-  console.log(tab.url + " is activated");
-}
-
-function logDeactivate(tab) {
-  console.log(tab.url + " is deactivated");
-}
-
-function logClose(tab) {
-  console.log(tab.url + " is closed");
-}
-
-tabs.on('open', onOpen);
- -

Manipulate a tab

- -

You can get and set various properties of tabs (but note that properties relating to the tab's content, such as the URL, will not contain valid values until after the tab's ready event fires). By setting the url property you can load a new page in the tab:

- -
var tabs = require("sdk/tabs");
-tabs.on('activate', function(tab) {
-  tab.url = "http://www.example.com";
-});
- -

Run scripts in a tab

- -

You can attach a content script to the page hosted in a tab, and use that to access and manipulate the page's content (see the Modifying the Page Hosted by a Tab tutorial):

- -
var tabs = require("sdk/tabs");
-
-tabs.on('activate', function(tab) {
-  var worker = tab.attach({
-    contentScript: 'self.port.emit("html", document.body.innerHTML);'
-  });
-  worker.port.on("html", function(message) {
-    console.log(message)
-  })
-});
- -

Note that tab.attach is tab-centric: if the user navigates to a new page in the same tab, then the worker and content scripts will be reattached to the new page.

- -

Attaching stylesheets

- -
-

New in Firefox 34.

-
- -

You can't attach style sheets to a tab using tab.attach(), but from Firefox 34 onwards you can attach and detach them using the low-level stylesheet/style and content/mod APIs. Here's an add-on that uses a toggle button to attach a stylesheet to the active tab, and detach it again. The stylesheet is called "style.css" and is located in the add-on's "data" directory:

- -
var tabs = require("sdk/tabs");
-var { attach, detach } = require('sdk/content/mod');
-var { Style } = require('sdk/stylesheet/style');
-var { ToggleButton } = require("sdk/ui/button/toggle");
-
-var style = Style({
-  uri: './style.css'
-});
-
-var button = ToggleButton({
-  id: "stylist",
-  label: "stylist",
-  icon: "./icon-16.png",
-  onChange: function(state) {
-    if (state.checked) {
-      attach(style, tabs.activeTab);
-    }
-    else {
-      detach(style, tabs.activeTab);
-    }
-  }
-});
- -

Private windows

- -

If your add-on has not opted into private browsing, then you won't see any tabs that are hosted by private browser windows.

- -

Tabs hosted by private browser windows won't be seen if you enumerate the tabs module itself, and you won't receive any events for them.

- -

To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the documentation for the private-browsing module.

- -

Converting to XUL tabs

- -

To convert from the high-level Tab objects used in this API to the low-level XUL tab objects used in the tabs/utils API and by traditional add-ons, use the viewFor() function exported by the viewFor module.

- -

To convert back the other way, from a XUL tab to a high-level Tab object, use the modelFor() function, exported by the modelFor module.

- -

Here's an example converting from a high-level Tab to a XUL tab and then back the other way:

- -
var { modelFor } = require("sdk/model/core");
-var { viewFor } = require("sdk/view/core");
-
-var tabs = require("sdk/tabs");
-var tab_utils = require("sdk/tabs/utils");
-
-function mapHighLevelToLowLevel(tab) {
-  // get the XUL tab that corresponds to this high-level tab
-  var lowLevelTab = viewFor(tab);
-  // now we can, for example, access the tab's content directly
-  var browser = tab_utils.getBrowserForTab(lowLevelTab);
-  console.log(browser.contentDocument.body.innerHTML);
-  // get the high-level tab back from the XUL tab
-  var highLevelTab = modelFor(lowLevelTab);
-  console.log(highLevelTab.url);
-}
-
-tabs.on("ready", mapHighLevelToLowLevel);
-
- -

Note that directly accessing XUL objects and web content like this means you're no longer protected by the compatibility guarantees made by the SDK's high-level APIs. In particular, your code might not work with multiprocess Firefox.

- -

Globals

- -

Functions

- -

open(options)

- -

Opens a new tab. The new tab will open in the active window or in a new window, depending on the inNewWindow option.

- -

Example

- -
var tabs = require("sdk/tabs");
-
-// Open a new tab on active window and make tab active.
-tabs.open("http://www.mysite.com");
-
-// Open a new tab in a new window and make it active.
-tabs.open({
-  url: "http://www.mysite.com",
-  inNewWindow: true
-});
-
-// Open a new tab on active window in the background.
-tabs.open({
-  url: "http://www.mysite.com",
-  inBackground: true
-});
-
-// Open a new tab as an app tab and do something once it's open.
-tabs.open({
-  url: "http://www.mysite.com",
-  isPinned: true,
-  onOpen: function onOpen(tab) {
-    // do stuff like listen for content
-    // loading.
-  }
-});
- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - -
NameType 
urlstring -

String URL to be opened in the new tab. This is a required property.

-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
isPrivateboolean -

Boolean which will determine whether the new tab should be private or not. If your add-on does not support private browsing this will have no effect. See the private-browsing documentation for more information. Defaults to false.

-
inNewWindowboolean -

If present and true, a new browser window will be opened and the URL will be opened in the first tab in that window. This is an optional property.

-
inBackgroundboolean -

If present and true, the new tab will be opened to the right of the active tab and will not be active. This is an optional property.

-
isPinnedboolean -

If present and true, then the new tab will be pinned as an app tab.

-
onOpenfunction -

A callback function that will be registered for the 'open' event. This is an optional property.

-
onClosefunction -

A callback function that will be registered for the 'close' event. This is an optional property.

-
onReadyfunction -

A callback function that will be registered for the 'ready' event. This is an optional property.

-
onLoadfunction -

A callback function that will be registered for the 'load' event. This is an optional property.

-
onPageShowfunction -

A callback function that will be registered for the 'pageshow' event. This is an optional property.

-
onActivatefunction -

A callback function that will be registered for the 'activate' event. This is an optional property.

-
onDeactivatefunction -

A callback function that will be registered for the 'deactivate' event. This is an optional property.

-
- -

Properties

- -

activeTab

- -

The currently active tab in the active window. This property is read-only. To activate a Tab object, call its activate method.

- -

Example

- -
// Get the active tab's title.
-var tabs = require("sdk/tabs");
-console.log("title of active tab is " + tabs.activeTab.title);
- -

length

- -

The number of open tabs across all windows.

- -

Events

- -

open

- -

This event is emitted when a new tab is opened. This does not mean that the content has loaded, only that the browser tab itself is fully visible to the user.

- -

Properties relating to the tab's content (for example: title, favicon, and url) will not be correct at this point. If you need to access these properties, listen for the ready event:

- -
var tabs = require("sdk/tabs");
-tabs.on('open', function(tab){
-  tab.on('ready', function(tab){
-    console.log(tab.url);
-  });
-});
- -
Arguments
- -

Tab : Listeners are passed the tab object that just opened.

- -

close

- -

This event is emitted when a tab is closed. When a window is closed this event will be emitted for each of the open tabs in that window.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has closed.

- -

ready

- -

This event is emitted when the DOM for a tab's content is ready. It is equivalent to the DOMContentLoaded event for the given content page.

- -

A single tab will emit this event every time the DOM is loaded: so it will be emitted again if the tab's location changes or the content is reloaded.

- -

After this event has been emitted, all properties relating to the tab's content can be used.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has loaded.

- -

activate

- -

This event is emitted when an inactive tab is made active.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has become active.

- -

deactivate

- -

This event is emitted when the active tab is made inactive.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has become inactive.

- -

Tab

- -

A Tab instance represents a single open tab. It contains various tab properties, several methods for manipulation, as well as per-tab event registration.

- -

Tabs emit all the events described in the Events section. Listeners are passed the Tab object that triggered the event.

- -

Methods

- -

pin()

- -

Pins this tab as an app tab.

- -

unpin()

- -

Unpins this tab.

- -

close(callback)

- -

Closes this tab.

- -
Parameters
- -

callback : function
- A function to be called when the tab finishes its closing process. This is an optional argument.

- -

reload()

- -

Reloads this tab.

- -

activate()

- -

Makes this tab active, which will bring this tab to the foreground.

- -

getThumbnail()

- -

Returns thumbnail data URI of the page currently loaded in this tab.

- -

attach(options)

- -

Attach one or more scripts to the document loaded in the tab. Note that by attaching inside ready event, this becomes tab-centric: if the user navigates to a new page in the same tab, then the content scripts will be reattached to the new page.

- -

Example

- -
var tabs = require("sdk/tabs");
-
-tabs.on('ready', function(tab) {
-  var worker = tab.attach({
-      contentScript:
-        'document.body.style.border = "5px solid red";'
-  });
-});
- -
Parameters
- -

options : object
- Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
contentScriptFilestring,array -

The local file URLs of content scripts to load. Content scripts specified by this option are loaded before those specified by the contentScript option. Optional.

-
contentScriptstring,array -

A string or an array of strings of code to be evaluated in the context. Content scripts specified by this option are loaded after those specified by the contentScriptFile option. Optional.

-
contentScriptOptionsobject -

You can use this option to define read-only values for your content scripts.

- -

The option consists of an object literal listing name:value pairs for the values you want to provide to the content script. For example:

- -
-// main.js
-
-const tabs = require("sdk/tabs");
-
-tabs.open({
-  url: "./page.html",
-  onReady: function(tab) {
-    tab.attach({
-      contentScriptFile: "./content-script.js",
-      contentScriptOptions: {
-        a: "blah"
-      }
-    });
-  }
-});
- -

The values are accessible to content scripts via the self.options property:

- -
-// content-script.js
-
-alert(self.options.a);
-
onMessagefunction -

A function called when the content worker receives a message from content scripts. Listeners are passed a single argument, the message posted from the content script. Optional.

-
onErrorfunctionA function called when the content worker receives an error from content scripts. Listeners are passed a single argument, error, which is the error posted from the content script and an object of type Error. Optional
- -
Returns
- -

Worker : The Worker object can be used to communicate with the content script. See Content Scripts guide to learn the details.

- -

Properties

- -

id

- -

The unique id for the tab. This property is read-only.

- -

title

- -

The title of the tab (usually the title of the page currently loaded in the tab) This property can be set to change the tab title.

- -

url

- -

The URL of the page currently loaded in the tab. This property can be set to load a different URL in the tab.

- -

favicon

- -

The URL of the favicon for the page currently loaded in the tab. This property is read-only.

- -
This property is deprecated. From version 1.15, use the favicon module's getFavicon() function instead.
- -

contentType

- -
-

This is currently an experimental API, so we might change it in future releases.

- -

Returns the MIME type that the document currently loaded in the tab is being rendered as. This may come from HTTP headers or other sources of MIME information, and might be affected by automatic type conversions performed by either the browser or extensions. This property is read-only.

-
- -

index

- -

The index of the tab relative to other tabs in the application window. This property can be set to change its relative position.

- -

isPinned

- -

Whether or not this tab is pinned as an app tab. This property is read-only.

- -

window

- -

The window object for this tab.

- -

readyState

- -
-

New in Firefox 33.

-
- -

A string telling you the load state of the document hosted by this tab. This corresponds directly to Document.readyState. It has one of four possible values:

- - - -

Once a tab's readyState has entered "interactive", you can retrieve properties such as the document's URL.

- -

Events

- -

close

- -

This event is emitted when the tab is closed. It's also emitted when the tab's window is closed.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

ready

- -

This event is emitted when the DOM for the tab's content is ready. It is equivalent to the DOMContentLoaded event for the given content page. At this point the document itself is fully loaded and parsed, but resources such as stylesheets and images may still be loading.

- -

A single tab will emit this event every time the DOM is loaded: so it will be emitted again if the tab's location changes or the content is reloaded. After this event has been emitted, all properties relating to the tab's content can be used.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

load

- -

This event is emitted when the page for the tab's content is loaded. It is equivalent to the load event for the given content page. At this point the document and its resources, such as images and stylesheets, have finished loading.

- -

This event can be used for pages that do not have a DOMContentLoaded event, like images. For pages that have a DOMContentLoaded event, load is fired after ready.

- -

A single tab will emit this event every time the page is loaded: so it will be emitted again if the tab's location changes or the content is reloaded. After this event has been emitted, all properties relating to the tab's content can be used.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

pageshow

- -

The pageshow event is emitted when the page for a tab's content is loaded. It is equivalent to the pageshow event for the given content page.

- -

This event is similar to the load and ready events, except unlike load and ready, pageshow is triggered if the page was retrieved from the bfcache. This means that if the user loads a page, loads a new page, then moves back to the previous page using the "Back" button, the pageshow event is emitted when the user moves back to the previous page, while the load and ready events are not.

- -

This event is not emitted when the tab is made the active tab: to get notified about that, you need to listen to the activate event.

- -

After this event has been emitted, all properties relating to the tab's content can be used. It is emitted after load and ready.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

persisted : Listeners are passed a boolean value indicating whether or not the page was loaded from the bfcache.

- -

activate

- -

This event is emitted when the tab is made active.

- -

Note that you cannot guarantee that a tab's content, or even its url, are initialized at the time activate is emitted. This is because when a new tab is opened, its activate event may be emitted before the content is loaded.

- -

You can use the tab's readyState property to determine whether the tab's content and url will be available: if readyState is uninitialized or loading, then you can't access the tab's properties and must wait for the tab's ready event.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

deactivate

- -

This event is emitted when the tab is made inactive.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

diff --git a/files/fr/mozilla/add-ons/sdk/index.html b/files/fr/mozilla/add-ons/sdk/index.html deleted file mode 100644 index 4de1603cd2..0000000000 --- a/files/fr/mozilla/add-ons/sdk/index.html +++ /dev/null @@ -1,337 +0,0 @@ ---- -title: Add-on SDK -slug: Mozilla/Add-ons/SDK -tags: - - Add-on SDK - - Jetpack -translation_of: Archive/Add-ons/Add-on_SDK ---- -

- -
-

Support for extensions using XUL/XPCOM or the Add-on SDK was removed in Firefox 57, released November 2017. As there is no supported version of Firefox enabling these technologies, this page will be removed by December 2020.

- -

Add-ons using the techniques described in this document are considered a legacy technology in Firefox. Don't use these techniques to develop new add-ons. Use WebExtensions instead. If you maintain an add-on which uses the techniques described here, consider migrating it to use WebExtensions.

- -

Starting from Firefox 53, no new legacy add-ons will be accepted on addons.mozilla.org (AMO) for desktop Firefox and Firefox for Android.

- -

Starting from Firefox 57, only extensions developed using WebExtensions APIs will be supported on Desktop Firefox and Firefox for Android.

- -

Even before Firefox 57, changes coming up in the Firefox platform will break many legacy extensions. These changes include multiprocess Firefox (e10s), sandboxing, and multiple content processes. Legacy extensions that are affected by these changes should migrate to use WebExtensions APIs if they can. See the "Compatibility Milestones" document for more information.

- -

A wiki page containing resources, migration paths, office hours, and more, is available to help developers transition to the new technologies.

-
- - - -

- -

Using the Add-on SDK, you can create Firefox add-ons. You can use various standard Web technologies: JavaScript, HTML, and CSS, to create the add-ons. The SDK includes JavaScript APIs, which you can use to create add-ons and tools for creating, running, testing, and packaging add-ons.

- -
-

Tutorials

- -
-
-
-
Getting started
-
How to install the SDK and use the jpm tool to develop, test, and package add-ons.
-
Interact with the browser
-
Open web pages, listen for pages loading and list open pages.
-
Development techniques
-
Learn about common development techniques, such as unit testing, logging, creating reusable modules, localization, and mobile development.
-
-
- -
-
-
Create user interface components
-
Create user interface components such as toolbar buttons, context menus, menu items, and dialogs.
-
Modify web pages
-
Modify pages matching a URL pattern or dynamically modify a particular tab.
-
Putting it together
-
Walkthrough of the Annotator example add-on.
-
-
-
- -
-

Guides

- -
-
-
-
Contributor's guide
-
Learn how to start contributing to the SDK and about the most important idioms used in the SDK code such as modules, classes and inheritance, private properties, and content processes.
-
SDK infrastructure
-
Aspects of the SDK's underlying technology: modules, the Program ID and the rules defining Firefox compatibility.
-
Content scripts
-
A detailed guide to working with content scripts.
-
-
- -
-
-
SDK idioms
-
The SDK's event framework and the distinction between add-on scripts and content scripts.
-
XUL migration
-
A guide to porting XUL add-ons to the SDK. This guide includes a comparison of the two toolsets and a working example of porting a XUL add-on.
-
Multiprocess Firefox and the SDK
-
How to check whether your add-on is compatible with multiprocess Firefox or not and fix it accordingly.
-
-
-
- -
-

Reference

- -
-
-
-
High-Level APIs
-
Reference documentation for the high-level SDK APIs.
-
Tools reference
-
Reference documentation for the jpm tool used to develop, test and package add-ons, the console global used for logging, and the package.json file.
-
-
- -
-
-
Low-Level APIs
-
Reference documentation for the low-level SDK APIs.
-
-
-
- -

- -
-
-
-
-

Join the Add-on SDK community

- -
-
Choose your preferred method for joining the discussion:
- - -
- -
- -
-
-
-
diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/index.html deleted file mode 100644 index 0460b4ce3d..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Low-Level APIs -slug: Mozilla/Add-ons/SDK/Low-Level_APIs -tags: - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs ---- -

Les modules de cette section implémentent des API de bas niveau. Ces modules se divisent à peu près en trois catégories:

- - - -

Ces modules sont toujours en développement actif et nous prévoyons d'y apporter des modifications incompatibles dans les prochaines versions.

- -

{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Low-Level_APIs", 5) }}

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html deleted file mode 100644 index c37870a8cb..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: io/byte-streams -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/io_byte-streams -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/io_byte-streams ---- -

{{AddonSidebar}}

- -
-

Expérimental

-
- -

Fournit des flux d'octets en lecture/écriture.

- -
function readBinaryDataFromFile (filename) {
-  var fileIO = require("sdk/io/file");
-  var data = null;
-  if (fileIO.exists(filename)) {
-    var ByteReader = fileIO.open(filename, "rb");
-    if (!ByteReader.closed) {
-      data = ByteReader.read();
-      ByteReader.close();
-    }
-  }
-  return data;
-}
-
- -
function writeBinaryDataToFile(data, filename) {
-  var fileIO = require("sdk/io/file");
-  var ByteWriter = fileIO.open(filename, "wb");
-  if (!ByteWriter.closed) {
-    ByteWriter.write(data);
-    ByteWriter.close();
-  }
-}
- -

Globals

- -

Constructeurs

- -

ByteReader(inputStream)

- -

Crée un flux d'entrée binaire qui lit les octets d'un flux de support.

- -

Vous pouvez également créer un objets ByteReader en utilisant la fonction io/file open().

- -
Paramètres
- -

inputStream: flux
- Le flux de support, un nsIInputStream

- -

ByteWriter(outputStream)

- -

Crée un flux de sortie binaire qui écrit les octets dans un flux de support.

- -

Vous pouvez également créer un objets ByteWriter en utilisant la fonction io/file open().

- -
Parameters
- -

outputStream : flux
- Le flux de support, un nsIOutputStream.

- -

ByteReader

- -

Méthodes

- -

close()

- -

Ferme à la fois le flux et son flux de support. Si le flux est déjà fermé, une exception est levée.

- -

read(numBytes)

- -

Lit une chaîne à partir du flux. Si le flux est fermé, une exception est levée.

- -
Parameters
- -

numBytes: nombre <être> Le nombre d'octets à lire. Sinon donné, la totalité du flux est lu.

- -
Retours
- -

string : Une chaîne contenant les octets lus. Si le flux est finit, retourne une chaîne vide.

- -

Propriétés

- -

closed

- -

Vrai si le flux est fermé.

- -

ByteWriter

- -

Méthodes

- -

close()

- -

Ferme à la fois le flux et son flux de support. Si le flux est déjà fermé, une exception est levée.

- -

write(str)

- -

Ecrit une chaîne dans le flux. Si le flux est fermé, une exception est levée.

- -
Paramètres
- -

str: string La chaîne à écrire .

- -

Propriétés

- -

closed

- -

Vrai si le flux est fermé.

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html deleted file mode 100644 index 51900f5799..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: io/file -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/io_file -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/io_file ---- -

{{AddonSidebar}}

- -
-

Expérimental

-
- -

Permet d'accéder au système de fichiers local.

- -

Utilisation

- -

Paths

- -

Les specifications Path de cette API sont spécifiques à l'OS. Cela signifie que les chemins Windows sont spécifiés en utilisant le séparateur antislash (\), et sur les systèmes de type Unix comme Linux et OS X les slash sont utilisés (/).

- -

To ensure your add-on works for everyone, generate paths using the join function. Unfortunately this API does not currently provide a way to obtain an absolute base path which you could then use with join. For now, you need to require("chrome") and use the XPCOM directory service as described in this article about File I/O.

- -

Note that if you do decide to hardcode Windows-style paths, be sure to escape backslashes in strings. For example, to specify the file at C:\Users\Myk, you need to use the string "C:\\Users\\Myk", not "C:\Users\Myk".  Read more about escaping characters in strings.

- -

Globals

- -

Functions

- -

basename(path)

- -
-

The path parameter must be an absolute path, relative paths will cause an error.

- -

Use the fs/path module for relative path support.

-
- -

Returns the last component of the given path. For example, basename("/foo/bar/baz") returns "baz". If the path has no components, the empty string is returned.

- -
Parameters
- -

path : string
- The path of a file.

- -
Returns
- -

string : The last component of the given path.

- -

dirname(path)

- -

Returns the path of the directory containing the given file. If the file is at the top of the volume, the empty string is returned.

- -
Parameters
- -

path : string
- The path of a file.

- -
Returns
- -

string : The path of the directory containing the file.

- -

exists(path)

- -

Returns true if a file exists at the given path and false otherwise.

- -
Parameters
- -

path : string
- The path of a file.

- -
Returns
- -

boolean : True if the file exists and false otherwise.

- -

join(...)

- -

Takes a variable number of strings, joins them on the file system's path separator, and returns the result.

- -
Parameters
- -

... : strings
- A variable number of strings to join. The first string must be an absolute path.

- -
Returns
- -

string : A single string formed by joining the strings on the file system's path separator.

- -

list(path)

- -

Returns an array of file names in the given directory.

- -
Parameters
- -

path : string
- The path of the directory.

- -
Returns
- -

array : An array of file names. Each is a basename, not a full path.

- -

mkpath(path)

- -

Makes a new directory named by the given path. Any subdirectories that do not exist are also created. mkpath can be called multiple times on the same path.

- -
Parameters
- -

path : string
- The path to create.

- -

open(path, mode)

- -

Returns a stream providing access to the contents of a file.

- -
Parameters
- -

path : string
- The path of the file to open.

- -

mode : string
- An optional string, each character of which describes a characteristic of the returned stream.

- - - -

If mode is not given, "r" is assumed, and the file is opened in read-only text mode.

- -

Apart from these options, this API always passes the following options:  CREATE_FILE, TRUNCATE (see https://dxr.mozilla.org/mozilla-central/source/nsprpub/pr/include/prio.h#550). This means that:

- - - -
Returns
- -

stream : If the file is opened in text read-only mode, a TextReader is returned, and if text write-only mode, a TextWriter is returned. See text-streams for information on these text stream objects. If the file is opened in binary read-only mode, a ByteReader is returned, and if binary write-only mode, a ByteWriter is returned. See byte-streams for more information on these byte stream objects. Opened files should always be closed after use by calling close on the returned stream.

- -

read(path, mode)

- -

Opens a file and returns a string containing its entire contents.

- -
Parameters
- -

path : string
- The path of the file to read.

- -

mode : string
- An optional string, each character of which describes a characteristic of the returned stream. If the string contains "b", the contents will be returned in binary mode. If "b" is not present or mode is not given, the file contents will be returned in text mode.

- -
Returns
- -

string : A string containing the file's entire contents.

- -

remove(path)

- -

Removes a file from the file system. To remove directories, use rmdir.

- -
Parameters
- -

path : string
- The path of the file to remove.

- -

rmdir(path)

- -

Removes a directory from the file system. If the directory is not empty, an exception is thrown.

- -
Parameters
- -

path : string
- The path of the directory to remove.

- -

isFile(path)

- -

Returns true only if this path specifies a file.

- -
const fileIO = require("sdk/io/file");
-
-let path = "/Users/Work/";
-let list = fileIO.list(path);
-
-for (i = 0; i < list.length; i++) {
-  let item = fileIO.join(path, list[i]);
-  if (fileIO.isFile(item)) {
-    console.log(item + " is a file");
-  }
-  else {
-    console.log(item + " is a directory");
-  }
-}
- -
Parameters
- -

path : string
- The path of the object.

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html deleted file mode 100644 index 9c315edd9f..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: system/child_process -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/system_child_process -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/system_child_process ---- -
-

Expérimentale

-
- -

Une mise en œuvre de l'API node.js child_process.

- -

Ce module vous permet d'exécuter un programme sous-jacent dans un nouveau processus. Il émule l'API node.js child_process, qui n'est pas documentées séparément. Cependant, il ya quelques différences :

- - - -

Voici un exemple qui adapte l'exemple de la documentation de node.js pour spawn() :

- -
var child_process = require("sdk/system/child_process");
-
-var ls = child_process.spawn('/bin/ls', ['-lh', '/usr']);
-
-ls.stdout.on('data', function (data) {
-  console.log('stdout: ' + data);
-});
-
-ls.stderr.on('data', function (data) {
-  console.log('stderr: ' + data);
-});
-
-ls.on('close', function (code) {
-  console.log('child process exited with code ' + code);
-});
- -

Utilisation child_process dans les extensions non-jpm

- -

 

- -
// Import SDK Stuff
-const COMMONJS_URI = 'resource://gre/modules/commonjs';
-const { require } = Cu.import(COMMONJS_URI + '/toolkit/require.js', {});
-var child_process = require('sdk/system/child_process');
-
-// Use it in the same way as in the example above
- -

 

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html deleted file mode 100644 index f018689432..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html +++ /dev/null @@ -1,659 +0,0 @@ ---- -title: ui/button/action -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/ui_button_action ---- -

{{AddonSidebar}}

- -
Experimental
- -

Ajouter un boutton dans l'interface utilisateur de Firefox. Avec ce module vous pourrez créer des bouttons contenant des icônes et répondant aux clic de la sourie.

- -

Usage

- -


- Créer des  bouttons

- -

Pour créer un boutton, vous devez lui donné un identifiant (id), une icône et un libellé:

- -
var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "my-button",
-    label: "my button",
-    icon: {
-      "16": "./firefox-16.png",
-      "32": "./firefox-32.png"
-    },
-    onClick: function(state) {
-        console.log("button '" + state.label + "' was clicked");
-    }
-  });
- -

By default, the button appears in the Firefox toolbar:

- -

However, users can move it to the Firefox menu panel using the toolbar customization feature:

- -

- -

Badged buttons

- -
-

New in Firefox 36.

-
- -

You can add a "badge" to a button using its badge property. This can be a number or a string, and you can update it at any time. By default the badge's color is red, but you can set your own color using the badgeColor property, specified as a CSS <color> value:

- -
var { ToggleButton } = require("sdk/ui/button/toggle");
-
-var button = ToggleButton({
-    id: "my-button1",
-    label: "my button1",
-    icon: "./icon-16.png",
-    onChange: changed,
-    badge: 0,
-    badgeColor: "#00AAAA"
-  });
-
-function changed(state) {
-  button.badge = state.badge + 1;
-  if (state.checked) {
-    button.badgeColor = "#AA00AA";
-  }
-  else {
-    button.badgeColor = "#00AAAA";
-  }
-}
- -

- -

Specifying multiple icons

- -

You can specify just one icon, or multiple icons in different sizes.

- -

If you specify multiple icons, Firefox will select the best-fitting icon based on the device screen resolution and the place the icon appears. For example, in the screenshots above, Firefox uses the small icon when the button is in the toolbar and the large icon when the button is in the menu panel. Read more about specifying icons in the reference documentation for the ActionButton constructor.

- -

Responding to click events

- -

You can respond to click events by assigning a listener to the button's click event. You can do this in the button's constructor, by assigning the listener to the onClick option. You can also add, or change, the listener afterwards:

- -
var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "my-button",
-    label: "my button",
-    icon: {
-      "16": "./firefox-16.png",
-      "32": "./firefox-32.png"
-    },
-    onClick: firstClick
-  });
-
-function firstClick(state) {
-  console.log("You clicked '" + state.label + "'");
-  button.removeListener("click", firstClick);
-  button.on("click", subsequentClicks);
-}
-
-function subsequentClicks(state) {
-  console.log("You clicked '" +  state.label + "' again");
-}
- -

The listener is passed a state object that contains all the button's properties.

- -

You can generate click events programmatically with the button's click() method.

- -

Disabling buttons

- -

You can disable a button by setting its disabled property to true. A disabled button will not generate click events and its icon will appear disabled:

- -

- -

Updating state

- -

You can update all the button's properties except for its id.

- -

By default, the button has global state: that is, its properties are the same across all open windows and tabs, and updating them updates the button's state across all open windows and tabs.

- -

You can set state to be specific to a window or tab using the button's state() method. To set state like this, call state() with 2 parameters:

- - - -

Here's an add-on with a button that disables itself when you click it, but only for the currently active window:

- -
var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "my-button",
-    label: "my button",
-    icon: {
-      "16": "./firefox-16.png",
-      "32": "./firefox-32.png"
-    },
-    onClick: disableForThisWindow
-  });
-
-function disableForThisWindow(state) {
-  button.state("window", {
-    disabled: true
-  });
-}
- -

To fetch the state for a specific window or tab, call state(), passing in the window or tab you are interested in, and it will return the state:

- -
var labelForActiveTab = button.state("tab").label;
- -

To learn more about this, see the API documentation for state().

- -

Destroying buttons

- -

When you've finished with a button, destroy it by calling its destroy() method. After that, any attempts to access any of its properties or to call any of its methods will throw exceptions.

- -

Globals

- -

Constructors

- -

ActionButton(options)

- -

Creates an action button.

- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
idstring -

The button's ID. This is used internally to keep track of this button. The ID must be unique within your add-on.

-
labelstring -

The button's human-readable label. When the button is in the toolbar, this appears in a tooltip, and when the button is in the menu, it appears underneath the button as a legend.

-
iconurl, string, object -

One or more icons for the button. You can specify this in one of three ways: 

- -
    -
  • as a resource:// URL pointing at an icon file in your add-on's "data" directory, typically constructed using self.data.url(iconfile)
  • -
  • as a relative path: a string in the form "./iconfile", where "iconfile" is a relative path to the icon file beginning in your add-on's "data" directory
  • -
  • as an object, or dictionary of key-value pairs. Here you can specify a range of sizes for your button's icon. Each key-value pair specifies an icon: -
      -
    • each value specifies an image file as a resource:// URL or relative path.
    • -
    • each key must be a numeric string such as "16", or "32", which represents the size in pixels of the corresponding image.
    • -
    -
  • -
- -
-var { ActionButton } = require('sdk/ui/button/action');
-var self = require("sdk/self");
-
-var button1 = ActionButton({
-    id: "my-button1",
-    label: "my button1",
-    icon: self.data.url("firefox-16.png")
-  });
-
-var button2 = ActionButton({
-    id: "my-button2",
-    label: "my button2",
-    icon: "./firefox-16.png"
-  });
-
-var button3 = ActionButton({
-    id: "my-button3",
-    label: "my button3",
-    icon: {
-      "16" : "./firefox-16.png",
-      "32" : "./firefox-32.png",
-      "64" : "./firefox-64.png"
-    }
-  });
- -

If you use the final form, Firefox will automatically choose the best-fit icon for your button, depending on the device screen resolution and where the button is in the UI. On a device with a "normal" screen resolution, the toolbar has space for 18 x 18 pixels and the menu panel has space for 32 x 32 pixels. On a high resolution screen (such as a HiDPI display), these are doubled to 36 x 36 and 64 x 64 pixels, respectively. So you can supply three icon files:

- -
-icon: {
-  "16": "./addon16.png",
-  "32": "./addon32.png",
-  "64": "./addon64.png"
-}
- -

This will look fine in both toolbar and menu panel, and for both screen resolutions. However, the icons in the toolbar will not quite fill the space available, so you can instead supply four icons:

- -
-icon: {
-  "18": "./addon18.png", // toolbar icon non HiDPI
-  "32": "./addon32.png", // menu panel icon non HiDPI
-  "36": "./addon36.png", // toolbar icon HiDPI
-  "64": "./addon64.png"  // menu panel icon HiDPI
-}
-
-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
disabledboolean -

Determines whether the button is disabled. Disabled buttons appear disabled in the UI, and do not respond to clicks. Defaults to false.

-
onClickfunction -

Click handler for the button.

-
badgeNumber or String -
-

New in Firefox 36.

-
- -

Badge to attach to the button.

- -

The badge can contain as many characters (or digits) as you like, but only the first four will be displayed.

-
badgeColorCSS <color> value -
-

New in Firefox 36.

-
- -

Color for the badge. If badgeColor is omitted and badge is specified, then the badge is red.

-
- -

ActionButton

- -

Methods

- -

click()

- -

Click the button. This will cause the button to generate the click event:

- -
var { ActionButton } = require('sdk/ui/button/action');
-
-var button = ActionButton({
-  id: "my-button",
-  label: "my button",
-  icon: {
-    "16": "./firefox-16.png",
-    "32": "./firefox-32.png"
-  },
-  onClick: function(state) {
-      console.log("You clicked '" + state.label + "'");
-  }
-});
-
-button.click();
-
- -

state()

- -

Get or set the button's state for a specific window or tab.

- -

By default, a button's properties are global, meaning that they are the same across all open windows and tabs, and that if you update these properties, then they are updated across all windows and tabs. But sometimes you want a button attached to one window (or tab) to have a different state to a button attached to a different window (or tab). That's what state() is for.

- -

To set a button's properties for a specific window or tab, call state(), passing it the window or tab you want the property to apply to, and the property value to set. A special shortcut allows you to pass the string "window" or "tab" to select the currently active window or tab.

- -

For example, if you have a button like this:

- -
var { ActionButton } = require('sdk/ui/button/action');
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default",
-  icon: "./firefox-16.png"
-});
- -

You can change its label for only the currently active window like this:

- -
button.state("window", {
-  "label" : "window-specific label"
-});
- -

You can change its label for only the currently active tab like this:

- -
button.state("tab", {
-  "label" : "tab-specific label"
-});
-
- -

To fetch the button state for a specific window or tab, call state(), passing it the window or tab you're interested in, and it will return a state object containing all the properties for the button associated with that window or tab. Again. you can use the strings "window" or "tab" as shortcuts. For example, this add-on:

- - - -
var { ActionButton } = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default label",
-  icon: "./firefox-16.png"
-});
-
-tabs.open({
-  url: "https://mozilla.org/",
-  onOpen: onNewTab
-});
-
-function onNewTab(tab) {
-  // Modify the label only for the new tab
-  button.state(tab, {
-    "label" : "tab-specific label"
-  });
-
-  // access the global label -> "default label"
-  console.log(button.label);
-
-  // access the window's label -> "default label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -> "default label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -> "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-}
- -

Setting a property won't affect a more-specific property setting. For example, if you have a window with two tabs, and you set a tab-specific label, then set the window-specific label, this will not overwrite the tab-specific label:

- -
var { ActionButton } = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default label",
-  icon: "./firefox-16.png"
-});
-
-tabs.open({
-  url: "https://mozilla.org/",
-  onOpen: onNewTab
-});
-
-function onNewTab(tab) {
-  // Modify the label only for the new tab
-  button.state(tab, {
-    "label" : "tab-specific label"
-  });
-
-  // Modify the label for the window
-  button.state("window", {
-    "label" : "window-specific label"
-  });
-
-  // access the global label -> "default label"
-  console.log(button.label);
-
-  // access the window's label -> "window-specific label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -> "window-specific label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -> "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-}
- -

The best way to think of this is as a tree: the global state is the root, followed by the state for each window, followed by the state for each tab in a window. If a property value for a node in the tree has not been set explicitly using state(), then it inherits its value from the next level up. So if you have one window containing two tabs, and have set the button's label only for tab A, then tab B will inherit label's value from the window, and changing the value for the window will implicitly change the value for tab B.

- -

To delete a tab- or window-specific state, assign null to the property. After that, the property will inherit its value from the less-specific state as before:

- -
var { ActionButton } = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default label",
-  icon: "./firefox-16.png"
-});
-
-tabs.open({
-  url: "https://mozilla.org/",
-  onOpen: onNewTab
-});
-
-function onNewTab(tab) {
-  // Modify the label only for the new tab
-  button.state(tab, {
-    "label" : "tab-specific label"
-  });
-
-  // Modify the label for the window
-  button.state("window", {
-    "label" : "window-specific label"
-  });
-
-  // access the global label -> "default label"
-  console.log(button.label);
-
-  // access the window's label -> "window-specific label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -> "window-specific label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -> "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-
-  // Reset the tab-specific state
-  button.state(tab, null);
-
-  // access the second tab's label -> "window-specific label"
-  console.log(button.state(tabs[1]).label);
-}
- -

Finally, you can pass the button itself into state(). This is an alternative way to set or get the global state. The reason for using this, rather than setting properties individually, is that you can define an object with the properties to set in one place, then apply it to the global state with a single line:

- -
const defaultState = {
-  "label": "default label",
-  "icon": "./default.png",
-}
-
-const differentState = {
-  "label": "different label",
-  "icon": "./different.png",
-}
-
-var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "default-label",
-    label: "default label",
-    icon: "./default.png",
-    onClick: function(state) {
-      if (button.label == "default label") {
-        button.state(button, differentState);
-      }
-      else {
-        button.state(button, defaultState);
-      }
-      console.log(button.state(button).label);
-      console.log(button.state(button).icon);
-    }
-  });
-
- -
Parameters
- -

target : button, tab, window, string

- - - -

state : object, null
- Include this parameter only if you are setting state. It is an object containing all the properties you wish to set. For example:

- -
button.state("tab", {
-  "label" : "tab-specific label",
-  "icon": "./tab-specific-icon.ico"
-});
- -

To reset state, pass null:

- -
button.state("tab", null);
- -
Returns
- -

state : if you have passed the second state argument to make this function a setter, it returns undefined. Otherwise, it functions as a getter and returns the button's state for the specified object. This logs the state for the button associated with the currently active tab:

- -
console.log(button.state("tab"));
- -

This object represents a snapshot of the state at the time state() is called. It is not kept up to date with changes made to the button:

- -
button.label = "foo";
-var state = button.state(button);
-button.label = "bar";
-console.log(state.label) // foo
- -

on()

- -

Add a listener to an event emitted by the button. The button only emits one type of event, click:

- -
button.on("click", handleClick)
-
-function handleClick(state) {
-  console.log("button '" + state.label + "' was clicked");
-}
- -
Parameters
- -

event : string
- The event to listen for. Action buttons only emit one type of event, "click".

- -

listener : function
- Function that will be called on click.

- -

once()

- -

Assign a listener to the first occurrence only of an event emitted by the button. The button only emits one type of event, click. The listener is automatically removed after the first time the event is emitted.

- -
Parameters
- -

event : string
- The event to listen for. Action buttons only emit one type of event, "click".

- -

listener : function
- Function that will be called on click.

- -

removeListener()

- -

Removes an event listener. For example, this code is equivalent to once():

- -
button.on("click", handleClick)
-
-function handleClick(state) {
-  console.log("button '" + state.label + "' was clicked");
-  button.removeListener("click", handleClick);
-} 
- -
Parameters
- -

event : string
- The event to listener is listening for. Action buttons only emit one type of event, "click".

- -

listener : function
- The listener to remove.

- -

destroy()

- -

Destroy the button. After calling this function, the button will no longer appear in the UI, and accessing any of its properties or methods will throw an error.

- -

Properties

- -

id

- -

The button's unique ID. This is read-only.

- -

label

- -

The button's label.

- -

icon

- -

The button's icon or icons, as a URL, relative path, or object containing a set of key-value pairs.

- -

disabled

- -

Boolean property indicating whether or not the button is disabled.

- -

badge

- -
-

New in Firefox 36.

-
- -

Value to attach to the button as a badge. May be a number or a string.

- -

The badge can contain as many characters (or digits) as you like, but only the first four will be displayed.

- -

badgeColor

- -
-

New in Firefox 36.

-
- -

Color for the badge, specified as a CSS <color> value.

- -

Events

- -

click

- -

This event is emitted when a user clicks the button or your add-on calls the button's click() method.

- -
Arguments
- -

state : The button's state. This contains all the button's properties.

diff --git a/files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html b/files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html deleted file mode 100644 index e8b50f5006..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: De cfx à jpm -slug: Mozilla/Add-ons/SDK/Tools/cfx_to_jpm -translation_of: Archive/Add-ons/Add-on_SDK/Tools/cfx_to_jpm ---- -
-

L'Add-on SDK inclut un outil de ligne de commande que vous utilisez pour initialiser, exécuter, tester, et empaqueter des add-ons. L'outil actuel est appelé jpm, il est basé sur Node.js . Il remplace l'outil cfx.

- -

Vous pouvez utiliser jpm à partir de Firefox 38.

- -

Cet article met en évidence les principales différences entre cfx et jpm.

-
- -

Un guide pour travailler avec jpm si vous êtes déjà familier avec cfx.

- -

Installation

- -

cfx est basée sur Python et est distribué comme un fichier zip. jpm est baser sur Node.js qui est distribué par npm . Donc, pour jpm vous n'avez pas besoin de Python, mais vous avez besoin npm.

- -

Pour obtenir les mises de cfx vous deviez télécharger et extraire un fichier zip, tandis que pour obtenir la nouvelle version de jpm, utilisez npm update .

- -

Pour obtenir des instructions d'installation de jmp, consultez la section de l' Installation dans la référentiel de jmp.

- -

Activation

- -

Vous devez appeler cfx activate avant de pouvoir utiliser cfx, et cela ne fonctionne que dans le shell de commande de courant:. Si vous ouvrez un nouveau shell, vous devez appeler activate de nouveau

- -

Avec jpm, pas d'activation. Une fois qu'il est installé, vous pouvez simplement l'utiliser.

- -

Incompatibilités

- -

Dans la plupart cas, les add-ons créés avec cfx fonctionnent bien avec jpm. Cependant, il y a quelques différences que vous devez connaitre.

- -

Add-on ID

- -

L'ID de add-on est l'identifiant unique de votre add-on. Dans un xpi, c'est le champ ID dans le fichier Manifest d'instalation de l'add-on (install.rdf).

- -

L'identifiant est utilisé à des fins variées. Par exemple: addons.mozilla.org l'utilise pour distinguer entre les nouvelles add-ons et les mises à jour d'add-ons existantes, et le module simple-storage l'utilise pour déterminer lesquelles des données stockées appartiennent à tel add-on.

- -

Manipulation avec l'ID cfx

- -

Lorsque vous utilisez cfx, l'ID est tiré du champ id dans le fichier de package.json de l'add-on. Vous pouvez éditer ce fichier pour créer votre propre identité, mais si vous ne le faites pas, cfx va le générer pour vous, ce qui va ressembler à quelque chose comme "jid1-F3BoogbjQJE67A". L'ID Add-on doit être l'un des deux types suivant : un GUID ou une chaîne qui comprend un symbole "@". Le SDK ne prévoit que le dernier format, et si l'ID dans package.json ne contient pas de "@", cfx xpi ajouter "@jetpack" dans le champ de package.json, ce qui transforme l'ID de l'add-on.

- -

Donc: si vous n'avez jamais manipulé l'ID lors de l'utilisation cfx, alors la valeur dans le package.json de votre add-on sera quelque chose comme "jid1-F3BoogbjQJE67A", et l'ID correspondant dans la install.rdf sera "jid1-F3BoogbjQJE67A@jetpack".

- -

Manipulation d'ID avec jpm

- -

Lorsque vous créez un xpi avec jpm xpi:

- - - -

Ce que vous devez faire

- -

Tout cela signifie que: si votre package.json contient un champ id, et sa valeur ne contient pas «@», alors vous devez ajouter "@jetpack» lors du passage à jpm .

- -

Si vous faites cela, l'ID de l'add-on sera la même que l'id utilisée avec cfx.

- -

Point d'entrée

- -

Le point d'entrée de l'add-on est le fichier qui est exécutée lorsque l'add-on a besoin de s'initialiser: par exemple, au démarrage de Firefox, ou lorsque l'add-on est installé, activé, ou mis à niveau. Avec cfx, la valeur par défaut à "lib/main.js", même si elle peut être réglée sur un autre fichier en utilisant le main champ dans le package.json .

- -

Dans jpm, le point d'entrée par défaut est "index.js". Donc, lors de la commutation vers jpm:

- - - -

Chargement des modules

- -

L'outil jpm utilise la même logique que Node.js pour déterminer comment résoudre l'argument require(). Dans la plupart des cas, c'est la même logique que cfx. Cependant, il existe quelques différences, parce certaines compatibilités ont été retirées.

- -

Requérir à des modules locaux

- -

Supposons que votre add-on est structuré en modules séparés :

- - - -

Lorsque vous voulez utiliser un module "utils.js" dans "main.js", vous devez utiliser un chemin relatif à "main.js", et le préfixer avec "./" pour indiquer que c'est un chemin relatif:

- -
var utils = require("./utils");
- -

Cependant, avec cfx vous êtes également autorisé à omettre le "./":

- -
var utils = require("utils"); // this will not work with jpm!
- -

Cette seconde forme ne fonctionnera pas avec jpm.

- -

Requérir des modules de code de test

- -

Similarly, suppose you've written some tests for your add-on:

- - - -

Avec cfx, le code de "test-my-addon.js" peut importer "my-addon.js" en utilisant une déclaration de ce genre:

- -
var my_addon = require("my-addon"); // ceci ne fonctionne pas avec jpm!
- -

Avec jpm, vous devez spécifier le chemin vers «my-addon" explicitement, en utilisant un chemin relatif:

- -
var my_addon = require("../lib/my-addon");
-
- -

Modules tiers

- -

Le SDK a toujours soutenu les modules tiers: les développeurs peuvent écrire leurs propres modules qui étendent les API du SDK ou ajouter de nouvelles API, et d'autres add-on peuvent faire usage de ces modules de la même manière qu'ils utilisent les modules intégré au SDK.

- -

Dans jpm cette façon d'utiliser des modules tiers ne fonctionne plus. Au lieu de cela, jpm n'accepte que les modules tiers hébergés sur la npm, vous pouvez les utiliser en les installant à partir de la npm dans l'arbre de répertoire de votre add-on. Voir le tutoriel utilisant des modules tiers avec jpm.

- -

Les commandes et les options de commande

- -

Commandes définitivement retiré

- -

jpm ne soutient plus les commandes cfx "interne".

- -

Options définitivement retiré

- -

jpm ne soutient plus :

- -
--extra-packages
---use-config
---package-path
---pkgdir
---no-strip-xpi
---harness-option
---manifest-overload
---output-file
---templatedir
---keydir
---profiledir
---overload-modules
---static-args
---app
---no-run
---addons
---e10s
---logfile
---dependencies
---test-runner-pkg
- -

Au lieu de --profiledir et de --overload-modules, utilisez --profile et --overload

- -

Champs Package.json

- -

Beaucoup de champs package.json sont des commandes implicites de cfx. Dans jpm, nous avons supprimé le soutien de certains de ces domaines, et travaillons toujours sur le soutien des autres.

- -

Champs définitivement retiré

- - - -

Echappement dans Package.json

- -

Où avec cfx vous auriez dû échapper avec 2 voir 3 barres obliques inverses (\), jpm n'en a besoin que d'une.

- -

 

diff --git a/files/fr/mozilla/add-ons/sdk/tools/index.html b/files/fr/mozilla/add-ons/sdk/tools/index.html deleted file mode 100644 index 89f1db963b..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tools/index.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Tools -slug: Mozilla/Add-ons/SDK/Tools -tags: - - Add-on SDK - - CFX - - JPM - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Tools ---- -

Les articles répertoriés ici fournissent une référence pour les outils du SDK:

- -

{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Tools", 7) }}

diff --git a/files/fr/mozilla/add-ons/sdk/tools/jpm/index.html b/files/fr/mozilla/add-ons/sdk/tools/jpm/index.html deleted file mode 100644 index c079f3b0b5..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tools/jpm/index.html +++ /dev/null @@ -1,600 +0,0 @@ ---- -title: jpm -slug: Mozilla/Add-ons/SDK/Tools/jpm -translation_of: Archive/Add-ons/Add-on_SDK/Tools/jpm ---- -
-

Vous pouvez utiliser jpm pour Firefox 38 et au-delà.

- -

Cet article est la référence pour jpm.

-
- -

The Node-based replacement for cfx. Enables you to test, run, and package add-ons.

- -

Voir aussi le tutoriel jpm pour débuter.

- -

jpm usage is:

- -
jpm [command] [options]
-
- -

jpm supports the following global options:

- -
-h, --help        - show a help message and exit
--V, --version     - print the jpm version number
-
- -

Installation

- -

jpm is distributed using the node package manager npm, so to get jpm you need to have npm installed, if you haven't already. npm is included in Node.js. To install npm, you can either visit nodejs.org and download the latest binary or if you have a package manager like APT installed on your system, you might want to use this package manager to install npm. For example, if you are using an Ubuntu or Debian operating system, execute sudo apt-get install nodejs followed by sudo apt-get install npm in a terminal window.

- -

After that you can install jpm just as you would any other npm package:

- -
npm install jpm --global
- -

Depending on your setup, you might need to run this as an administrator:

- -
sudo npm install jpm --global
- -

Or, you can install jpm using git:

- -
git clone https://github.com/mozilla-jetpack/jpm.git
-cd jpm
-npm install
-npm link
-
- -

À l'invite de commande, tapez:

- -
jpm
- -

You should see a screen summarizing the available jpm commands. Note that unlike cfx, jpm is available in every command prompt you start, as long as you installed it with the --global flag.

- -

If you get an error message saying  /usr/bin/env: node: No such file or directory and you have installed nodejs through a package manager, nodejs may have been installed in the wrong directory. A corresponding topic at stackoverflow.org might help you to solve this problem. Basically, you can solve it by creating a symlink to the node:

- -
sudo ln -s "$(which nodejs)" /usr/bin/node
- -

Problems?

- -

If you don't see this, ask for help. SDK users and project team members discuss problems and proposals on the project mailing list. Someone else may have had the same problem you do, so try searching the list. You're welcome to post a question, too. You can also chat with other SDK users in #jetpack on Mozilla's IRC network.

- -

Command reference

- -

There are six jpm commands:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
jpm initCreate a skeleton add-on as a starting point for your own add-on.
jpm runLaunch an instance of Firefox with your add-on installed.
jpm testRuns your add-on's unit tests.
jpm xpiPackage your add-on as an XPI file, which is the install file format for Firefox add-ons.
jpm postPackage your add-on as an XPI file, then post it to some url.
jpm watchpostPackage your add-on as an XPI file whenever there is a file changed, and post that to some url.
jpm signPackage your add-on as an XPI file, then retrieve a new XPI signed by Mozilla.
- -

jpm init

- -

This command initializes a new add-on from scratch.

- -

Create a new directory, change into it, and run jpm init.

- -
mkdir my-addon
-cd my-addon
-jpm init
- -

You'll then be asked to supply some information about your add-on: this will be used to create your add-on's package.json file.

- - - -

Most of these fields have a default, which is shown in brackets after the question. If you just press Enter, your add-on will get the default value.

- -

Once you've supplied a value or accepted the default for these properties, you'll be shown the complete contents of "package.json" and asked to accept it.

- -

Then jpm will create an skeleton add-on, as a starting point for your own add-on development, with the following file structure:

- - - -

jpm run

- -

This command runs a new instance of Firefox with the add-on installed:

- -
jpm run
- -

jpm run accepts the following options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-b --binary BINARY -

Use the version of Firefox specified in BINARY. BINARY may be specified as a full path or as a path relative to the current directory.

- -
-jpm run -b /path/to/Firefox/Nightly
- See Selecting a browser version.
--binary-args CMDARGS -

Pass extra arguments to Firefox.

- -

For example, to pass the -jsconsole argument to Firefox, which will launch the Browser Console, try the following:

- -
-jpm run --binary-args -jsconsole
- -

To pass multiple arguments, or arguments containing spaces, quote them:

- -
-jpm run --binary-args '-url mzl.la -jsconsole'
-
--debugRun the add-on debugger attached to the add-on.
-o --overload PATH -

Rather than use the SDK modules built into Firefox, use the modules found at PATH. If -o is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.

- -

See Overloading the built-in modules for more information.

-
-p --profile= PROFILE -

By default, jpm uses a clean temporary Firefox profile each time you call jpm run. Use the --profile option to instruct jpm to launch Firefox with an existing profile.

- -

The PROFILE value may be a profile name or the path to the profile.

- -

See Using profiles for more information.

-
-v --verboseVerbose operation.
--no-copy -
Use with caution because jpm run|test changes many preferences, never use with your main profile.
- -
This only applies when --profile is used.
- Disables the copying of the profile used, which allows one to reuse a profile.
 
- -

jpm test

- -

Use this command to run an add-on's unit tests. It will:

- - - -
jpm test
-
- -

See the tutorial on unit testing and the reference documentation for the assert module for more details on this.

- -

jpm test accepts the following options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-b --binary BINARY -

Use the version of Firefox specified in BINARY. BINARY may be specified as a full path or as a path relative to the current directory.

- -
-jpm test -b /path/to/Firefox/Nightly
- -

See Selecting a browser version.

-
--binary-args CMDARGS -

Pass extra arguments to Firefox.

- -

For example, to pass the -jsconsole argument to Firefox, which will launch the Browser Console, try the following:

- -
-jpm test --binary-args -jsconsole
- -

To pass multiple arguments, or arguments containing spaces, quote them:

- -
-jpm test --binary-args '-url mzl.la -jsconsole'
-
--debugRun the add-on debugger attached to the add-on.
-f --filter FILE[:TEST] -

Only run tests whose filenames match FILE and optionally match TEST, both regexps.

- -
-jpm test --filter base64:btoa
- -

The above command only runs tests in files whose names contain "base64", and in those files only runs tests whose names contain "btoa".

-
-o --overload PATH -

Rather than use the SDK modules built into Firefox, use the modules found at PATH. If -o is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.

- -

See Overloading the built-in modules for more information.

-
-p --profile PROFILE -

By default, jpm uses a clean temporary Firefox profile each time you call jpm run. Use the --profile option to instruct jpm to launch Firefox with an existing profile.

- -

The PROFILE value may be a profile name or the path to the profile.

- -

See Using profiles for more information.

-
--stop-on-error -

By default jpm test keeps running tests even after tests fail. Specify --stop-on-error to stop running tests after the first failure:

- -
-jpm test --stop-on-error
-
--tbplPrint test output in Treeherder format
--times NUMBER -

Run tests NUMBER of times:

- -
-jpm test --times 2
-
-v --verboseVerbose operation.
--no-copy -
Use with caution because jpm run|test changes many preferences, never use with your main profile.
- -
This only applies when --profile is used.
- Disables the copying of the profile used, which allows one to reuse a profile.
- -

jpm xpi

- -

This command packages the add-on as an XPI file, which is the install file format for Mozilla add-ons.

- -
jpm xpi
- -

It looks for a file called package.json in the current directory and creates the corresponding XPI file. It ignores any ZIPs or XPIs in the add-on's root, and any test files. It includes all other files. If you want to exclude extra files, see the .jpmignore file.

- -

Once you have built an XPI file you can distribute your add-on by submitting it to addons.mozilla.org.

- -

jpm xpi accepts the following option:

- - - - - - - - -
-v --verbose -

Verbose operation:

- -
-jpm xpi -v
-
- -

jpm post

- -

This command packages the add-on as an XPI file then posts it to some url.

- -
jpm post
- -

It looks for a file called package.json in the current directory and creates a XPI file with which to post to the --post-url.

- -

jpm post accepts the following options:

- - - - - - - - - - - - -
--post-url URL -

The url to post the extension to after creating a XPI.

- -
-jpm post --post-url http://localhost:8888/
- -

See Using Post and Watchpost for more information.

-
-v --verbose -

Verbose operation:

- -
-jpm post --post-url http://localhost:8888/ -v
-
- -

jpm watchpost

- -

This command packages the add-on as an XPI file then posts it to some url whenever a file in the current working directory changes.

- -
jpm watchpost
- -

Creates a XPI whenever a file in the current working directory changes and posts that to the --post-url.

- -

jpm watchpost accepts the following options:

- - - - - - - - - - - - -
--post-url URL -

The url to post the extension to after creating a XPI.

- -
-jpm watchpost --post-url http://localhost:8888/
- -

See Using Post and Watchpost for more information.

-
-v --verbose -

Verbose operation:

- -
-jpm watchpost --post-url http://localhost:8888/ -v
-
- -

jpm sign

- -
-

This feature is only supported from jpm 1.0.4 onwards.

-
- -

This command retrieves a new XPI for your add-on signed by Mozilla. This allows you to self-host your add-on so that users can install it without error when signed add-ons are required.

- -
jpm sign --api-key ${AMO_API_KEY} --api-secret ${AMO_API_SECRET}
- -

This creates an XPI, submits it to the addons.mozilla.org signing API, then downloads a new signed XPI to the working directory if it passes validation. Here are some possible outcomes of running the sign command:

- - - -

Under the hood, jpm sign creates an unlisted add-on inside addons.mozilla.org which means you must distribute the XPI file yourself in order for your users to install it. If you need to create a listed add-on, just submit it directly to addons.mozilla.org where it will be signed automatically. See the debugging section if you're experiencing difficulty installing a signed add-on.

- -

jpm sign accepts the following options:

- - - - - - - - - - - - - - - - -
--api-key API_KEY -

API access key (string) generated on the addons.mozilla.org key management page.

-
--api-secret API_SECRET -

API access secret (string) generated on the addons.mozilla.org key management page. This value should be guarded with care and never checked into version control. If your secret is compromised, another developer could upload add-ons to your account. You should revoke and regenerate compromised API credentials immediately.

-
--api-url-prefix http://.../api -

An optional API URL prefix in case you'd like to use a pre-production signing API. Here is an example of using a dev instance of addons.mozilla.org :

- -
-jpm sign ... --api-url-prefix https://addons-dev.allizom.org/api/v3
-
- -

Techniques

- -

Selecting a browser version

- -

By default, jpm run and jpm test will run the release version of Firefox. You can instruct jpm to use a different version in one of two ways:

- - - -

Using .jpmignore to ignore files

- -

Using .jpmignore is similar to using .gitignore with git, .hgignore with Mercurial, or .npmignore with npm. By using this file you can let jpm know which files you would like it to ignore when building a .xpi file with jpm xpi.

- -

Here is an example:

- -
# Ignore .DS_Store files created by mac
-.DS_Store
-
-# Ignore any zip or xpi files
-*.zip
-*.xpi
-
- -

A .jpmignore file with the above contents would ignore all zip files and .DS_Store files from the xpi generated by jpm xpi.

- -

Using profiles

- -

By default, jpm run uses a new profile each time it is executed. This means that any profile-specific data entered from one run of jpm will not, by default, be available in the next run.

- -

This includes, for example, any extra add-ons you installed, or your history, or any data stored using the simple-storage API.

- -

To make jpm use a specific profile, pass the --profile option, specifying the name of the profile you wish to use, or the path to the profile.

- -
jpm run --profile boogaloo
-
- -
jpm run --profile path/to/boogaloo
- -

If you supply --profile but its argument is not the name of or path to an existing profile, jpm will open the profile manager,  enabling you to select and existing profile or create a new one:

- -
jpm run --profile i-dont-exist
- -

Developing without browser restarts

- -

Because jpm run restarts the browser each time you invoke it, it can be a little cumbersome if you are making very frequent changes to an add-on. An alternative development model is to use the Extension Auto-Installer add-on: this listens for new XPI files on a specified port and installs them automatically. That way you can test new changes without needing to restart the browser:

- - - -

You could even automate this workflow with a simple script. For example:

- -
jpm watchpost --post-url http://localhost:8888/
-
- -

Note that the logging level defined for the console is different when you use this method, compared to the logging level used when an add-on is run using jpm run. This means that if you want to see output from console.log() messages, you'll have to tweak a setting. See the documentation on logging levels for the details on this.

- -

Overloading the built-in modules

- -

The SDK modules you use to implement your add-on are built into Firefox. When you run or package an add-on using jpm run or jpm xpi, the add-on will use the versions of the modules in the version of Firefox that hosts it.

- -

As an add-on developer, this is usually what you want. But if you're developing the SDK modules themselves, of course, it isn't. In this case you need to:

- - - -
jpm run -o
-
- -

This instructs jpm to use the local copies of the SDK modules, not the ones in Firefox. If you don't want to set the JETPACK_ROOT environment variable, you can pass the location of your copy of the SDK modules along with -o:

- -
jpm run -o "/path/to/SDK/"
- -

Supporting updates for self-hosted add-ons

- -
-

This feature is only supported from jpm 1.0.3 onwards.

-
- -

When you make updates to your add-on to add features or fix bugs, you'll want any previously installed versions of the add-on to update themselves to the new version.

- -

If you list your add-on on addons.mozilla.org, then all you have to do here is submit the new version; add-ons default to checking addons.mozilla.org for new versions of themselves. You can stop reading this section.

- -

If you do not list your add-on on addons.mozilla.org, you need to generate a Mozilla-signed XPI and tell Firefox where it can find new versions of your add-on. The way this works is:

- - - -

To do this, include two extra keys in package.json:

- - - -

- -

If you include updateURL and updateLink (and also updateKey in case updateURL is not HTTPS), then jpm xpi will:

- - - -

You then host the update manifest at updateURL, and host new versions of the XPI at updateLink.

- -

For some more details on this, see Automatic Add-on Update Checking.

diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html deleted file mode 100644 index 1ad8700c3d..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Add a Context Menu Item -slug: Mozilla/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Add_a_Context_Menu_Item ---- -

{{AddonSidebar}}

- -
-

Pour suivre ce tuto , vous aurez besoin d'avoir appris des rudiments de jpm.

-
- -

Pour ajouter des éléments et des sous-menus dans le menu contextuel de Firefox, utilisez le module context-menu.

- -

Voici un add-on qui ajoute un nouvel élément de menu contextuel. L'élément est affiché à chaque fois qu'une séléction est opérée dans la page. Si l'élément est cliqué, la séléction est envoyé au code principal.

- -
var contextMenu = require("sdk/context-menu");
-var menuItem = contextMenu.Item({
-  label: "Log Selection",
-  context: contextMenu.SelectionContext(),
-  contentScript: 'self.on("click", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  self.postMessage(text);' +
-                 '});',
-  onMessage: function (selectionText) {
-    console.log(selectionText);
-  }
-});
- -

Executer l'add-on, charger une page web, séléctioner un texte et faites un clic droit, le nouvel élément doit apparaitre:

- -

Click it, and the selection is logged to the console (or the shell, if you're running an instance of Firefox from the command line):

- -
info: elephantine lizard
-
- -

Details

- -

All this add-on does is to construct a context menu item. You don't need to add it: once you have constructed the item, it is automatically added in the correct context. The constructor in this case takes four options: label, context, contentScript, and onMessage.

- -

label

- -

The label is just the string that's displayed.

- -

context

- -

The context describes the circumstances in which the item should be shown. The context-menu module provides a number of simple built-in contexts, including this SelectionContext(), which means: display the item when something on the page is selected.

- -

If these simple contexts aren't enough, you can define more sophisticated contexts using scripts.

- -

contentScript

- -

This attaches a script to the item. In this case the script listens for the user to click on the item, then sends a message to the add-on containing the selected text.

- -

onMessage

- -

The onMessage property provides a way for the add-on code to respond to messages from the script attached to the context menu item. In this case it just logs the selected text.

- -

So:

- -
    -
  1. the user clicks the item
  2. -
  3. the content script's click event fires, and the content script retrieves the selected text and sends a message to the add-on
  4. -
  5. the add-on's message event fires, and the add-on code's handler function is passed the selected text, which it logs
  6. -
- -

More options

- -

Adding an image

- -

You can add an image to a context menu item with the image option. This is a URL pointing to a 16x16 icon that's displayed at the left side of the context menu item. Typically you'd store the image in your add-on's "data" directory, and construct the URL using self.data.url():

- -
var self = require("sdk/self");
-
-var contextMenu = require("sdk/context-menu");
-var menuItem = contextMenu.Item({
-  label: "Log Selection",
-  context: contextMenu.SelectionContext(),
-  contentScript: 'self.on("click", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  self.postMessage(text);' +
-                 '});',
-  image: self.data.url("icon-16.png"),
-  onMessage: function (selectionText) {
-    console.log(selectionText);
-  }
-});
- -

Adding an access key

- -
-

New in Firefox 35.

-
- -

From Firefox 35 you can specify an access key using the accessKey option. This must be a single-character string. Pressing the key selects the option when the context menu is open:

- -
var contextMenu = require("sdk/context-menu");
-var menuItem = contextMenu.Item({
-  label: "Log Selection",
-  context: contextMenu.SelectionContext(),
-  contentScript: 'self.on("click", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  self.postMessage(text);' +
-                 '});',
-  accessKey: "l",
-  onMessage: function (selectionText) {
-    console.log(selectionText);
-  }
-});
-
- -

 

- -

Learning More

- -

To learn more about the context-menu module, see the context-menu API reference.

diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html deleted file mode 100644 index 09fa1442a9..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Commencer avec jpm -slug: Mozilla/Add-ons/SDK/Tutorials/Getting_Started_(jpm) -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Getting_Started_(jpm) ---- -
-

The Add-on SDK includes a command-line tool that you use to initialize, run, test, and package add-ons. The current tool is called jpm, and is based on Node.js. It replaces the old cfx tool.

- -

You can use jpm from Firefox 38 onwards.

- -

This article describes how to develop using jpm.

-
- -

Ce tutoriel est un exemple de création d'une add-on en utilisant le SDK.

- -

Prérequis

- -

Pour créer des add-ons pour Firefox en utilisant le SDK, vous aurez besoin:

- - - -

Initialisation d'un add-on vide

- -

Dans l'invite de commande, créez un nouveau répertoire. Accédez à, tapez jpm init, et appuyez sur Entrée:

- -
mkdir my-addon
-cd my-addon
-jpm init
-
- -

Vous serez alors invité à fournir quelques informations sur votre add-on: elles seront utilisées pour créer votre fichier package.json. Pour l'instant, appuyez sur Entrée pour accepter la valeur par défaut pour chaque propriété. Pour plus d'informations sur jpm init, voir le commande de référence jpm .

- -

Une fois que vous avez fourni une valeur ou accepté la valeur par défaut pour ces propriétés, vous verrez le contenu complet de "package.json" que vous validerez.

- -

Mise en œuvre de l'add-on

- -

Maintenant, vous pouvez écrire le code de l'add-on. Sauf si vous avez changé la valeur du "point d'entrée"("main"dans package.json), allez dans le fichier "index.js" à la racine de votre add-on. Ce fichier a été créé dans l'étape précédente. Ouvrez-le et ajoutez le code suivant:

- -
var buttons = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = buttons.ActionButton({
-  id: "mozilla-link",
-  label: "Visit Mozilla",
-  icon: {
-    "16": "./icon-16.png",
-    "32": "./icon-32.png",
-    "64": "./icon-64.png"
-  },
-  onClick: handleClick
-});
-
-function handleClick(state) {
-  tabs.open("https://www.mozilla.org/");
-}
-
- -
-

Notez que par défaut le "point d'entrée" dans jpm est "index.js", ce qui signifie que votre fichier principal est "index.js", et il se trouve à la racine de votre add-on.

- -

Dans cfx, le "point d'entrée" par défaut est "main.js», il se trouve dans le répertoire "lib" sous la racine de l'add-on.

-
- -

Enregistrez le fichier.

- -

Ensuite, créez un répertoire appelé "data" à la racine de votre add-on, et enregistrer ces trois fichiers d'icônes dans "data" :

- - - - - - - - - - - - - - - - -
icon-16.png
icon-32.png
icon-64.png
- -

Retour à l'invite de commande, tapez:

- -
jpm run
- -

Ceci est la commande de jpm pour lancer une nouvelle instance de Firefox avec votre add-on installée.

- -

Si Firefox ne peut pas être localisé, vous devrez peut-être fournir le chemin d'accès (par exemple dans Ubuntu):

- - -
jpm run -b /usr/bin/firefox
- -
-

Vous pouvez egalement modifier le chemin dans le fichier \npm\node_modules\jpm\node_modules\fx-runner\lib\utils.js.

- -

Par exemple sous windos : var rootKey = '\\Programe Files\\Mozilla Firefox\\';

-
- -

Lorsque Firefox est lancé, dans le coin en haut à droite du navigateur, vous verrez une icône avec le logo de Firefox. Cliquez sur l'icône, et un nouvel onglet sera ouvert avec https://www.mozilla.org/ chargé.

- -

Voilà ce que fait cette add-on. Elle utilise deux modules: le module SDK button_action, qui vous permet d'ajouter des boutons dans le navigateur, et le module tabs, qui vous permet d'effectuer des opérations de base avec des onglets. Dans ce cas, nous avons créé un bouton dont l'icône est celle de Firefox, et ajouté un gestionnaire de clic qui charge la page d'accueil de Mozilla dans un nouvel onglet.

- -

Essayez d'éditer ce fichier. Par exemple, nous pourrions changer la page qui est chargé:

- -
var buttons = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = buttons.ActionButton({
-  id: "mozilla-link",
-  label: "Visit Mozilla",
-  icon: {
-    "16": "./icon-16.png",
-    "32": "./icon-32.png",
-    "64": "./icon-64.png"
-  },
-  onClick: handleClick
-});
-
-function handleClick(state) {
-  tabs.open("https://developer.mozilla.org/");
-}
- -

À l'invite de commande, exécutez à nouveau jpm run. Vous ouvrirez cette fois en cliquant https://developer.mozilla.org/.

- -

Empaquetté l'add-on

- -

Lorsque vous avez terminé l'add-on et êtes prêt à la distribuer, vous aurez besoin de l'emballer dans un fichier XPI. C'est le format de fichier installable pour Firefox Add-ons. Vous pouvez distribuer xpi en les publiant sur https://addons.mozilla.org afin que les autres utilisateurs puissent la télécharger et l'installer.

- -

Pour construire un xpi, exécutez simplement la commande jpm xpi dans le répertoire de l'add-on:

- -
jpm xpi
-
- -

Vous devriez voir un message du type:

- -
JPM info Successfully created xpi at /path/to/getting-started/@getting-started.xpi
-
- -

Pour voir si cela a fonctionné, essayez d'installer le fichier xpi dans votre navigateur Firefox. Vous pouvez le faire en appuyant sur la combinaison de touches Ctrl+O (O+Cmd sur Mac) à partir de Firefox, ou en sélectionnant l'option "Ouvrir" dans le menu "Fichier" de Firefox. Cela fera apparaître une boîte de dialogue de sélection de fichier: naviguer vers le fichier "@getting-started.xpi", ouvrez-le et suivez les instructions pour installer l'add-on.

- -

Pour distribuer votre add-on, soumettre le fichier xpi à addons.mozilla.org ou exécuter jpm sign si vous souhaitez distribuer l'add-on sur votre propre serveur.

- -

Résumé

- -

Dans ce tutoriel, nous avons construit et emballé une add-on en utilisant trois commandes:

- - - -

Ce sont les trois principales commandes que vous utiliserez lors de l'élaboration d'add-ons SDK. Il y a une documentation de référence complète couvrant toutes les commandes que vous pouvez utiliser et toutes les options qu'elles prennent.

- -

Le code de add-on lui-même utilise deux modules de SDK, action bouton et tabs. Il ya une documentation de référence pour toute les APIs high-level et low-level dans le SDK.

- -

Et en suite?

- -

Pour avoir une idée de certaines des choses que vous pouvez faire avec les API du SDK, essayer de travailler avec certains tutoriels.

diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/index.html deleted file mode 100644 index d68fcfd2ac..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/index.html +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Tutoriels -slug: Mozilla/Add-ons/SDK/Tutorials -tags: - - Add-on SDK - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials ---- -

Cette page répertorie les articles sur la façon d'accomplir des tâches spécifiques en utilisant le SDK.

- -
-

Commencer

- -
-
-
-
Installation
-
Comment faire pour installer l'outil de jpm, que vous allez utiliser pour développer des add-ons.
-
- -
-
Dépannage
-
Quelques conseils pour résoudre les problèmes courants et obtenir de l'aide.
-
-
- -
-
-
Commencer
-
Démonstration de la création d'une add-on avec le SDK, en utilisant jpm.
-
-
-
- -
-

Créer des interfaces utilisateur

- -
-
-
-
Ajouter un bouton de barre d'outils
-
Attachez un bouton à la barre d'outils du module complémentaire Firefox.
-
Ajouter un élément de menu à Firefox
-
Ajoutez des éléments aux menus principaux de Firefox.
-
-
- -
-
-
Afficher une popup
-
Afficher une boîte de dialogue contextuelle (popup) implémentée avec HTML et JavaScript.
-
Ajouter un élément de menu contextuel
-
Ajoutez des éléments au menu contextuel de Firefox.
-
-
-
- -
-

Interagir avec le navigateur

- -
-
-
-
Ouvrir une page Web
-
Ouvrez une page Web dans un nouvel onglet ou une nouvelle fenêtre du navigateur à l'aide du module onglets et accédez à son contenu.
-
Écouter le chargement de la page
-
Utilisez le module onglets pour être averti lorsque de nouvelles pages Web sont chargées et accéder à leur contenu.
-
-
- -
-
-
Obtenir la liste des onglets ouverts
-
Utilisez le module onglets pour parcourir les onglets actuellement ouverts et accéder à leur contenu.
-
-
-
- -
-

Modifier les pages Web

- -
-
-
-
Modifier les pages Web en fonction de l'URL
-
Créez des filtres pour les pages Web en fonction de leur URL: chaque fois qu'une page Web dont l'URL correspond au filtre est chargée, exécutez un script spécifié.
-
-
- -
-
-
Modifier la page Web active
-
Chargez dynamiquement un script dans la page Web actuellement active.
-
-
-
- -
-

Techniques de développement

- -
-
-
-
Enregistrement
-
Enregistrez les messages sur la console à des fins de diagnostic.
-
Création de modules réutilisables
-
Structurez votre module complémentaire en modules séparés pour faciliter le développement, le débogage et la maintenance. Créez des paquets réutilisables contenant vos modules, afin que d'autres développeurs de modules complémentaires puissent également les utiliser.
-
Tests unitaires
-
Ecrire et exécuter des tests unitaires à l'aide du framework de test du SDK.
-
Autorité Chrome
-
Accédez à l'objet Components, permettant à votre module complémentaire de charger et d'utiliser n'importe quel objet XPCOM.
-
Création de cibles d'événements
-
Permettez aux objets que vous définissez d'émettre leurs propres événements.
-
-
- -
-
-
Écouter pour charger et décharger
-
Recevez des notifications lorsque votre module complémentaire est chargé ou déchargé par Firefox, et passez des arguments dans votre module complémentaire à partir de la ligne de commande.
-
Utilisation de modules tiers (jpm)
-
Installez et utilisez des modules supplémentaires qui ne sont pas fournis avec le SDK lui-même.
-
Localisation
-
Écriture de code localisable.
-
Développement mobile
-
Développez des modules complémentaires pour Firefox Mobile sur Android.
-
Débogueur de module complémentaire (Add-on)
-
Déboguez le JavaScript de votre module complémentaire.
-
-
-
- -
-

Mettre ensemble

- -
-
-
-
Module complémentaire Annotator
-
Présentation d'un module complémentaire relativement complexe.
-
-
-
diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html deleted file mode 100644 index 4b9ca669e7..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Localisation -slug: Mozilla/Add-ons/SDK/Tutorials/l10n -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/l10n ---- -

Le SDK supporte la localisation des chaînes figurant dans:

- - - -

Il ne le fait pas dans le CSS, les scripts anexe, ou les champs titre et description qui apparaissent dans le gestionnaire de modules complémentaires. Voir Limitations ci-dessous.

- -

Chaînes localisées

- -

Les chaînes traduites sont conservées dans un répertoire appelé "locale" sous votre répertoire principale de l'add-on , avec un fichier pour chaque langue. Les dossiers:

- - - -

Supposons que votre add-on contient une seule chaîne localisable, représentée en anglais comme "Hello!", Et que vous souhaitez fournir les localisations Français FRANCAIS et anglais ETATS-UNIS.

- -

Vous souhaitez ajouter deux fichiers au répertoire "locale" :

- -
my-addon/
-         data
-         lib
-         locale/
-                en-US.properties
-                fr.properties
-
- -

"en-US.properties" contient ceci:

- -
hello_id= Hello!
-
- -

"fr.properties" contient ceci:

- -
hello_id= Bonjour!
-
- -

Maintenant, chaque fois que votre JavaScript ou HTML demande au système de localisation la traduction de l'identifiant hello_id, il obtiendra la traduction correcte pour la localisation en cours.

- -

Utilisation de chaînes localisées en HTML

- -
-

Cet exemple utilise l'API button_action, qui est uniquement disponible à partir de Firefox 29.

-
- -

Pour référencer des chaînes localisées du HTML, ajouter un attribut data-l10n-id à la balise HTML où vous voulez que la chaîne localisée apparaisse, et assignez y l'identifiant :

- -
<html>
-  <body>
-    <h1 data-l10n-id="hello_id"></h1>
-  </body>
-</html>
-
- -

Ensuite, vous pouvez utiliser ce fichier HTML pour construire votre interface, par exemple à l'intérieur d'un panel :

- -
var button = require("sdk/ui/button/action").ActionButton({
-  id: "localized-hello",
-  label: "Localized hello",
-  icon: "./icon-16.png",
-  onClick: function() {
-    hello.show();
-  }
-});
-
-var hello = require("sdk/panel").Panel({
-  height: 75,
-  width: 150,
-  contentURL: require("sdk/self").data.url("my-panel.html")
-});
- -

Compte tenu de fichiers locaux pour "en-US" et "fr" qui fournissent les traductions de hello_id, le panneau affichera désormais "Bonjour!" ou "Hello!", selon la localisation en cours:

- -

- -

La traduction est inséré dans le nœud qui a l'attribut data-l10n-id défini. Tout contenu existant précédemment est simplement remplacé.

- -

La chaîne est insérée sous forme de texte, de sorte que vous ne pouvez pas insérer du code HTML en utilisant une déclaration comme:

- -
# Ne fonctionne pas. Les balises HTML sont insérés sous forme de texte.
-hello_id= <blink>Hello!</blink>
-
- -

Attributs d'Elément Localisation

- -
Cette fonction est nouvelle dans Firefox 39
- -

Vous pouvez localiser certains attributs d'éléments avec un l10n-id en définissant sa valeur avec l10n-id.attributeName dans le fichier de propriétés comme:

- -
hello_id.accesskey= H
- -

Les attributs suivants sont supportés:

- - - -

En outre, la localisation avec les attributs ARIA aria-label , aria-valuetex et aria-moz-hint sont pris en charge avec les mêmes alias que sur Firefox OS :

- - - -

Utilisation de chaînes localisées en JavaScript

- -

Pour référencer les chaînes localisées à partir de votre code d'add-on principale, faites ceci:

- -
var _ = require("sdk/l10n").get;
-console.log(_("hello_id!"));
- -

L'affectation de "_" n'est pas nécessaire, mais pour travailler avec les outils gettext qui attendent "_" pour indiquer les chaînes localisables, cela est préférable.

- -
    -
  1. Importez le module l10n, et assigner sa fonction get à "_"(underscore).
  2. -
  3. Enveloppez toutes les références aux chaînes localisables avec la fonction _().
  4. -
- -

Si vous l'exécutez, vous verrez le résultat attendu pour la localisation en cours:

- -
info: Hello!
-
- -
info: Bonjour!
-
- -

Notez que parce que vous ne pouvez pas appeler des modules avec require() dans les content_scripts, vous ne pouvez pas encore référencer les chaînes localisées à partir des content_scripts.

- -

Pluriels

- -

Le module l10n prend en charge les formes plurielles. Plusieurs langues ont des règles différentes pour la formation des pluriels. Par exemple, l'anglais a deux formes: une forme singulière pour "un", et une forme plurielle pour "tout le reste, y compris zéro":

- -
one tomato
-no tomatoes
-two tomatoes
-
- -

Mais le Russe a des formes différentes pour les numéros se terminant par 1 (sauf 11), numéros se terminant par 2-4 (sauf 12-14) et les autres numéros:

- -
один помидор     // one tomato
-два помидора     // two tomatoes
-пять помидоров   // five tomatoes
-
- -

Le SDK utilise les données de Unicode CLDR pour décrire les différentes formes plurielles utilisés dans les différentes langues.

- -

Formes plurielles de Unicode CLDR

- -

Le projet Unicode CLDR définit un schéma pour décrire les règles de pluriel d'une langue particulière. Dans ce schéma, une langue peut se distinguer par un maximum de six formes, identifié par les catégories suivantes : zero, one, two, few, many et other.

- -

L'englais a deux formes, qui peuvent être décrits par les categories "1" à "one" et "everything else" à "other":

- -
one   → n is 1;
-other → everything else
-
- -

Le russe utilise quatre formes, qui peuvent être décrits comme suit:

- -
one   → n mod 10 is 1 and n mod 100 is not 11;
-few   → n mod 10 in 2..4 and n mod 100 not in 12..14;
-many  → n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14;
-other → everything else
-
- -

Les règles de pluriel pour toutes les langues peuvent être trouvés dans le CLDR Langue règles pluriel (ce tableau est mis à jour par rapport à la source XML CLDR).

- -

Formes plurielles dans le SDK

- -

Dans le code, vous pouvez fournir un paramètre supplémentaire à côté de l'identifiant, en décrivant combien d'articles il y a :

- -
var _ = require("sdk/l10n").get;
-console.log(_("tomato_id"));
-console.log(_("tomato_id", 1));
-console.log(_("tomato_id", 2));
-console.log(_("tomato_id", 5));
-console.log(_("tomato_id", .5));
- -

Dans le fichier .properties pour chaque langue, vous pouvez définir une localisation différente pour chaque forme plurielle possible dans cette langue, en utilisant les mots-clés de CLDR. Donc, en anglais, nous pourrions avoir deux localisations pluriel (à noter que la catégorie «other» ne prendre pas le mot-clé CLDR):

- -
# en-US translations
-tomato_id[one]= %d tomato
-tomato_id= %d tomatoes
-
- -

En Russe, nous pourrions avoir quatre localisations pluriel:

- -
# ru-RU translations
-tomato_id[one]= %d помидор
-tomato_id[few]= %d помидора
-tomato_id[many]= %d помидоров
-tomato_id= %d помидоры
-
- -

Le module de localisation comprend les définitions de CLDR pour chaque langue, ce qui lui permet de faire la différence entre, par exemple, "2" dans le code et "few" dans ru-RU.properties. Ensuite, il récupère et renvoie la localisation pour le compte que vous avez fourni.

- -

Espaces réservés

- -

Le module l10n prend en charge des espaces réservés, vous permettant d'insérer une chaîne qui ne devrait pas être localisé. Dans le code qui suit les fichiers "en-US" et "fr" ".properties" incluent des espaces réservés :

- -
# en-US translations
-hello_id= Hello %s!
-
- -
# fr translations
-hello_id= Bonjour %s !
-
- -

Pour utiliser les espaces réservés, fournir la chaîne de réservation après l'identifiant:

- -
var _ = require("sdk/l10n").get;
-console.log(_("hello_id", "Bob"));
-console.log(_("hello_id", "Alice"));
- -

Dans la localisation "en-US", cela nous donne:

- -
info: Hello Bob!
-info: Hello Alice!
-
- -

Dans "fr" nous obtenons:

- -
info: Bonjour Bob !
-info: Bonjour Alice !
-
- -

Commande espaces réservés

- -

Quand une chaîne localisable peut prendre deux ou plusieurs espaces réservés, les traducteurs peuvent définir l'ordre dans lequel les espaces réservés sont insérés, sans affecter le code.

- -

Principalement, ce qui est important c'est que les différentes langues ont des règles différentes pour l'ordre des mots. Même au sein de la même langue, cependant, les traducteurs doivent avoir la liberté de définir l'ordre des mots.

- -

Par exemple, supposons que nous voulons inclure une chaîne localisée nommer ville natale d'une personne. Il y a deux espaces réservés: le nom de la personne et le nom de la ville natale :

- -
var _ = require("sdk/l10n").get;
-console.log(_("home_town_id", "Bob", "London"));
- -

Un traducteur anglais pourrait vouloir choisir entre les ordres suivantes:

- -
"<town_name> is <person_name>'s home town."
-
- -
"<person_name>'s home town is <town_name>"
-
- -

Pour choisir la première option, le fichier .properties peut commander les espaces réservés comme suit:

- -
home_town_id= %2s is %1s's home town.
-
- -

Cela nous donne le résultat suivant:

- -
info: London is Bob's home town.
-
- -

Utilisation de chaînes localisées dans les Préférences

- -

En incluant une structure "preferences" dans votre fichier "package.json", vous pouvez définir des préférences pour votre add-on que l'utilisateur peut voir et modifier à l'aide de Firefox Add-ons Manager.

- -

Les préférences ont obligatoirement des champs title et description. Ce sont des chaînes qui apparaissent aux côtés de la préférence dans le Gestionnaire Add-ons, pour expliquer à l'utilisateur ce que signifie la préférence.

- - - -

Par exemple, supposons que votre "package.json" définit une seule préférence:

- -
{
-    "preferences": [
-        {
-            "type": "string",
-            "name": "monster_name",
-            "value": "Gerald",
-            "title": "Name"
-        }
-    ],
-    "name": "monster-builder",
-    "license": "MPL 2.0",
-    "author": "me",
-    "version": "0.1",
-    "fullName": "Monster Builder",
-    "id": "monster-builder@me.org",
-    "description": "Build your own monster"
-}
-
- -

Dans votre fichier "en-US.properties", inclure ces deux éléments :

- -
monster_name_title= Name
-monster_name_description= What is the monster's name?
-
- -

Dans votre fichier "fr.properties", inclure la traduction française:

- -
monster_name_title= Nom
-monster_name_description= Quel est le nom du monstre ?
-
- -

Quand la configuration locale du navigateur est "en-US", les utilisateurs voient dans le gestionnaire de modules complémentaires:

- -

- -

Lorsque la configuration locale du navigateur est "fr", ils voient ceci:

- -

- -

Les types menulist et radio de préférences ont des options. L'attribut label de chaque option est affichée à l'utilisateur. Si le fichier de paramètres régionaux a une entrée avec la valeur de l'élément label préfixé «{name}_options." comme clé (où {name} est le nom de la préférence), sa valeur est utilisée comme étiquette localisée.

- -

Utilisation de l'identificateurs

- -

Si le système de localisation ne peut pas trouver une entrée pour un identifiant particulier en utilisant la localisation en cours, elle retourne juste l'identifiant lui-même.

- -

C'est intéressante car vous pouvez écrire du code "localisable", entièrement fonctionnel sans avoir à écrire des fichiers locaux. Vous pouvez simplement utiliser les chaînes de langue par défaut et fournir ultérieurement les fichiers .properties pour toutes les langues supplémentaires que vous souhaitez soutenir.

- -

Par exemple, dans le cas ci-dessus, vous pouvez utiliser "Bonjour!" comme identificateur, et juste avoir un .properties pour la locale "fr":

- -
Hello!= Bonjour!
-
- -

Puis, quand la locale "en-US", le système ne parviennent pas à trouver un .properties, et revoit "Bonjour!".

- -
-

Cependant, cette approche rend difficile le maintien d'une add-on qui a de nombreuses localisations, parce que vous utilisez les chaînes de langue par défaut en tant que chaînes de l'interface utilisateur et que les clés recherchent vos traductions. Cela signifie que si vous voulez changer le libellé d'une chaîne dans la langue par défaut, ou corriger une faute de frappe, alors vous cassez tous vos fichiers de paramètres régionaux.

-
- -

Locale Updater

- -

L'add-on locale updater (paramètres régionaux de mise à jour) rend plus facile la mise à jour des fichiers locaux. Une fois que vous l'avez installé, ouvrez le Gestionnaire de modules complémentaires, et vous verrez un nouveau bouton "Update l10n" à côté de chaque add-on que vous avez installé :

- -

- -

Cliquez sur le bouton et vous serez invité à entrer un nouveau fichier .properties pour cette add-on. Si vous fournissez un nouveau fichier, les données locales de l'add-on seront mis à jour avec le nouveau fichier.

- -

Limites

- -

Le support de la localisation actuelle est un premier pas vers la prise en charge complète, et contient un certain nombre de limitations.

- - - -

Voir aussi - pour les développeurs qui cherchent à localiser les add-ons non-SDK

- - diff --git a/files/fr/mozilla/add-ons/thunderbird/index.html b/files/fr/mozilla/add-ons/thunderbird/index.html deleted file mode 100644 index b15b535a59..0000000000 --- a/files/fr/mozilla/add-ons/thunderbird/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Thunderbird extensions -slug: Mozilla/Add-ons/Thunderbird -tags: - - Add-ons - - Extensions - - NeedsTranslation - - TopicStub - - thunderbird -translation_of: Mozilla/Thunderbird/Thunderbird_extensions ---- -
Building a Thunderbird extension
-Step-by-step explanation on how to build an extension for Thunderbird.
- -
-

{{AddonSidebar}}

-The following documentation provides help for creating extensions for Mozilla's Thunderbird email client. Although there are many similarities with Firefox extensions there are also some differences that may confound the starting developer.
- -

-Please help! You can add a how-to (a question or an answer or a code snippet), summarize and link to a relevant newsgroup discussion, or create a tutorial. Need help? Contact jenzed.
- - - - - - - - -
-

Documentation

- -

Getting started with Thunderbird

- -

A brave, young developer wants to develop an add-on for Thunderbird. Here's a few links to help them through this journey.

- -
    -
  • Start by reading the tutorial and learn how to build a Thunderbird extension (Outdated, still talks about overlays and the add-on builder is no longer available but the tutorial has not been updated.)
  • -
  • Read about the main windows so that you know what one means when they say « thread pane », « preview pane », and « folder pane ».
  • - -
  • Want to do some real stuff? See how to inspect a message (demo add-on included!)
  • -
  • Play with our other demo add-on that exercises some more advanced Thunderbird-specific features
  • -
  • Want to do even more stuff? Don't reinvent the wheel: steal functions from the thunderbird-stdlib project (doc here). Functions for dealing with messages (delete them, archive them, change their tags, etc.) are included.
  • -
  • Haven't found what you're looking for? Read the Thunderbird how-tos; they contain a lot of recipes for things extensions want to do.
  • -
  • Still haven't managed to do what you wanted? See the list of all Thunderbird communication channels so that you know where to ask when you get stuck :-).
  • -
  • Feeling really brave? Read the source using a fancy interface; you can often find tests that demonstrate how to do what you're trying to achieve.
  • -
- -

The Gloda database

- -

Thunderbird has a subsystem called Gloda. Gloda stands for « Global Database », and creates Thunderbird-wide relations between objects. Gloda provides concepts such as Conversations, Messages, Identities, Contacts. All these concepts are related together: a Conversation contains Messages which are linked to Identities (from field, to field) which are themselves part of a Contact: indeed, a contact has multiple identities.

- -

Typical use cases for Gloda: find all messages whose subject matches [search term], find all messages from [person], find all messages in the same thread as [a given message], find all messages involving [person], etc. etc.

- -

Gloda is extremely powerful and is used heavily by add-ons such as Thunderbird Conversations. Learn more about Gloda:

- - - - - -

Some of these links may be wildly out of date, but they still provide valuable information on the codebase.

- - - - - - -
-

Community

- - - -

{{ DiscussionList("dev-extensions", "mozilla.dev.extensions") }}

- - - -

Tools

- - - -

... more tools ...

- -

View All...

- - - -
-
XUL, JavaScript, XPCOM, Themes, Developing Mozilla
-
-
- -

Categories

- -

{{ languages( { "ja": "ja/Extensions/Thunderbird" } ) }}

diff --git "a/files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" "b/files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" deleted file mode 100644 index 2af0b0031c..0000000000 --- "a/files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Thème de fond -slug: Mozilla/Add-ons/Thèmes/Fond -translation_of: Mozilla/Add-ons/Themes/Lightweight_themes ---- -

{{AddonSidebar}}

- -

Comment créer votre propre thème

- -
-

Les thèmes sont fait d'une image "header" qui va remplacer le fond de base de Firefox.

- -

Vous avez fini votre thème ? Mettez-le en ligne maintenant !

- -

Création de l'image "header" du thème

- -

L'image header est affichée en fond en haut de la fenêtre du navigateur, on la voit aussi derrière les barres d'outils, la barre d'adresse, la barre "Rehercher" et la ligne d'onglets. Elle sera ancrée au coin supérieur-droit de la fenêtre.

- -

- - - -

Image Requise

- - - -

Petites aides

- - - -

Ressources : édition d'images en ligne

- - - -

Envoyer votre thème personnalisé

- -

Pour commencer à envoyer vos images, allez sur la page Soumettre un thème.

- -
    -
  1. Nommez votre thème — choisissez un nom unique pour votre thème. 2 thèmes avec le même nom ne sont pas autorisés, alors vus devriez peut-être essayer plusieurs fois pour trouver un nom unique.
  2. -
  3. Choisissez une catégorie et des tags — sélectionnez une catégorie et entrez des tags (mots clés) qui décrivent le mieux votre thème. Rappelez-vous qu'un utilisateur pourrait rejeter votre thème si sa catégorie et ses tags ne sont pas fidèles à votre thème.
  4. -
  5. Décrivez votre thème — écrivez une courte description de votre thème. Rappelez-vous qu'un utilisateur pourrait rejeter votre thème si sa description n'est pas fidèle à votre thème.
  6. -
  7. Sélectionnez une license pour votre thème — décidez une license de droits d'auteurs pour votre travail. Lire plus à propos des types de licences Creative Common. -
      -
    • Important: Soyez sur d'avoir les droits d'utiliser cette image dans votre thème !
    • -
    -
  8. -
  9. Envoyez votre image — soyez sur qu'elle fait moins de 300 KB et qu'elle soit au formant JPG ou PNG !
  10. -
  11. Sélectionnez la couleur des textes et des onglets — vous pouvez choisir la couleur de "fond" des onglets et celle des textes qui colle le mieux avec votre image header.
  12. -
  13. Prévisualisez votre thème — vous êtes prêts à prévisualiser votre thème ! Passez simplement votre souris sur le bouton "Soumettre le thème", et vous verrez à quoi il ressemble.
  14. -
  15. Soumettre votre thème — si tout à l'air bon, cliquez sur le bouton "Soumettre le thème" et vous avez fini ! Vous pouvez voir tous les thèmes que vous avez créé sur votre page de profil. -
      -
    • Info: pour vous assurer que votre thème est approuvé pour la galerie, soyez sur qu'il n'enfreint aucune règles des Conditions d'Utilisation !
    • -
    -
  16. -
- -

soumettre votre thème ici

- -

Plus de tutoriels

- -

Mozilla Themes Focal Point on Sizing - A tutorial on theming with a focus on sizing, by VanillaOrchids.
-
-
- Traduit par Tocram2 ;)

-
diff --git "a/files/fr/mozilla/add-ons/th\303\250mes/index.html" "b/files/fr/mozilla/add-ons/th\303\250mes/index.html" deleted file mode 100644 index b0b2cd163a..0000000000 --- "a/files/fr/mozilla/add-ons/th\303\250mes/index.html" +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Thèmes -slug: Mozilla/Add-ons/Thèmes -tags: - - Apparences - - Extensions - - Theme -translation_of: Mozilla/Add-ons/Themes ---- -

{{AddonSidebar}}

- -

Les thèmes vous permettent de modifier l'apparence de l'interface utilisateur et de la personnaliser selon vos goûts. Apprenez comment créer et partager des thèmes !

- -
-
-

Documentation

- -
-
Créer un thème de navigateur
-
Introduction pour la création de thèmes pour les dernières versions de Firefox.
-
-

Thèmes légers

-
-
Thèmes légers
-
La création de thèmes utilisant peu d'espaces pour Firefox.
-
FAQ des thèmes légers
-
Donne les réponses aux questions les plus courantes.
-
-
- - -
- -

 

diff --git "a/files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" "b/files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" deleted file mode 100644 index 8856f4e38f..0000000000 --- "a/files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" +++ /dev/null @@ -1,231 +0,0 @@ ---- -title: Theme concepts -slug: Mozilla/Add-ons/Thèmes/Theme_concepts -translation_of: Mozilla/Add-ons/Themes/Theme_concepts ---- -
{{AddonSidebar()}}
- -

Dans Firefox, les thèmes développés par la bibliothèque WebExtensions API vous permet de modifier le rendu du navigateur. Le cas se présente en ajoutant des images à la région de l'en-tête du navigateur Firefox : il s'agit de la partie, en arrière-plan, des barres de menu, d'outils, d'hyperliens, de recherche et de l'ensemble des onglets d'une même fenêtre.

- -

These theme options can be implemented as static themes (although the theme images themselves may be animated) or as dynamic themes created in a browser extension.

- -
-

If you have a lightweight theme it will be converted to this new theme format automatically before lightweight themes are deprecated. You do not need to port your theme. However, please feel free to update your themes to use any of the new features described here.

-
- -

Static themes

- -
-

Note that you can't yet submit static WebExtension-based themes to addons.mozilla.org. The work to support this is tracked in https://github.com/mozilla/addons/issues/501. If you want to share a theme with other users, you'll need to make it either a lightweight theme or a dynamic theme.

-
- -

Static themes are specified using the same resources as a browser extension: a manifest.json file to define the theme components with those components stored in the same folder as the manifest.json file or a sub folder. These resources are then packed in a zip for publication on addons.mozilla.org (AMO).

- -
-

A theme and browser extension functionality cannot be defined in one package, such as including a theme to complement an extension. You can, however, programmatically include a theme in an extension using the Theme API. See Dynamic themes.

-
- -

Defining a theme

- -

To create a theme (in this example a simple, single image theme):

- - - -

Static theme approaches

- -

There are two approaches you can take to theming the header area of Firefox: using a single image or using multiple images. You could combine the two, but it’s easier to treat them separately.

- -

Single image themes

- -

This is the basic or minimal theming option, where you define:

- - - -

The area your header image needs to fill is a maximum of 200 pixels high. The maximum image width is determined by the resolution of the monitor Firefox is displaying on and how much of the monitor Firefox is using. Practically, this means you would need to allow for a width of up to 5120 pixels wide (for the next generation of 5k monitors). However, rather than creating a very wide image, a better approach is to use a narrower image with a transparent left edge so that it fades to the background color. For example, we could use this image
- An image of a weta (the common name for a group of about 70 insect species in the families Anostostomatidae and Rhaphidophoridae, endemic to New Zealand) with the left edge fading to total transparency.
- combined with a complementary background color, to create this effect in the header
- A single image theme using the weta.png image

- -

See details about this theme in the themes example weta_fade.

- -

Obviously, you can still provide a single wide image if you prefer.

- -

Multiple image themes

- -

As an alternative to creating a single image theme, you have the option to use multiple images. These images can be individually anchored to locations within the header, with the option to apply tiling to each image.

- -

Depending on the effect you want to create you may need to suppress the mandatory "headerURL": image with an empty or transparent image. You would use an empty or transparent image if, for example, you wanted to tile a centrally justified image, such as
- An image of a weta (the common name for a group of about 70 insect species in the families Anostostomatidae and Rhaphidophoridae, endemic to New Zealand) with the left and right edges fading to total transparency.
- to create this effect
- A single image theme using the additional images option to align an image to the center of the heading and tile it.
- Here you specify the weta image like this:

- -
"images": {
-  "headerURL": "empty.png",
-  "additional_backgrounds": [ "weta_for_tiling.png"]
-},
- -

and the images tiling with:

- -
"properties": {
-  "additional_backgrounds_alignment": [ "top" ],
-  "additional_backgrounds_tiling": [ "repeat"  ]
-},
- -

Full details of how to setup this theme can be found in the themes example weta_tiled. Full detais of the alignment and tiling options can be found in the "theme" key description.

- -

Alternatively, you can use multiple images, say combining the original weta image with this one anchored to the left of the header
- An image of a weta (the common name for a group of about 70 insect species in the families Anostostomatidae and Rhaphidophoridae, endemic to New Zealand) with the right edge fading to total transparency.
- to create this effect
- A theme using the additional images option to place two mirrored image to the left and right of the browser header.

- -

Where the images are specified with:

- -
"images": {
-  "headerURL": "empty.png",
-  "additional_backgrounds": [ "weta.png", "weta-left.png"]
-},
- -

and their alignment by:

- -
"properties": {
-  "additional_backgrounds_alignment": [ "right top" , "left top" ]
-},
- -

Full details of how to setup this theme can be found in the themes example weta_mirror. Full detais of the alignment options can be found in the "theme" key description.

- -

Static animated themes

- -

It is possible to create an animated theme using an APNG format image, as in the themes example animated. However, remember that rapid animations, such as the one in the example might be too distracting for a practical theme.

- -

You can also animate themes programmatically, which we discuss in Dynamic themes.

- -

Dynamic themes

- -

As an alternative to defining a static theme, you can use the {{WebExtAPIRef("theme")}} API to control the theme used in Firefox from within a browser extension. There are a couple of use cases for this option:

- - - -

And, obviously, you can combine the two and bundle a programmatically controlled theme with your extension.

- -

Using the {{WebExtAPIRef("theme")}} API is straightforward. First, request "theme" permission in the extension's manifest.json file. Next, you build a JSON object containing the same information you would use in a static theme’s manifest.json, Finally, pass the JSON object in a {{WebExtAPIRef("theme.update()")}} call.

- -

For example, the following code, from the dynamic theme example defines the content for the day and night elements of the dynamic theme:

- -
const themes = {
-  'day': {
-    images: {
-     headerURL: 'sun.jpg',
-    },
-    colors: {
-     accentcolor: '#CF723F',
-     textcolor: '#111',
-    }
-  },
-  'night': {
-    images: {
-     headerURL: 'moon.jpg',
-    },
-    colors: {
-     accentcolor: '#000',
-     textcolor: '#fff',
-    }
-  }
-};
- -

The theme.Theme object is then passed to {{WebExtAPIRef("theme.update()")}} to change the header theme, as in this code snippet from the same example:

- -
function setTheme(theme) {
-  if (currentTheme === theme) {
-    // No point in changing the theme if it has already been set.
-    return;
-  }
-  currentTheme = theme;
-  browser.theme.update(themes[theme]);
-}
- -

Learn more about dynamic themes and see an additional example in the following video:

- -

{{EmbedYouTube("ycckyrUN0AY")}}

- -

 

- -

If you have not built a browser extension before, check out Your first extension for a step-by-step guide.

- -

Cross browser compatibility

- -

There is currently limited compatibility between themes in the major browsers. Opera takes an entirely different approach, and Microsoft Edge themes are not yet open to developers.

- -

There is some compatibility between Firefox static themes and Chrome themes, providing the ability to port a single header image theme from Firefox to Chrome. This would be done by amending the manifest.json keys as follows:

- - - -

Noting that "frame": and "tab_text": support RGB color definition only.

- -

So, in the single image theme example (weta_fade) could be supported in Chrome using the following manifest.json file:

- -
{
-  "manifest_version": 2,
-  "version": "1.0",
-  "name": "<your_theme_name>",
-  "theme": {
-    "images": {
-      "theme_frame": "weta.png"
-    },
-    "colors": {
-      "frame": [ 173 , 176 , 159 ],
-      "tab_text": [ 0 , 0 , 0 ]
-    }
-  }
-}
- -

However, there will be a couple of differences:

- - - -

The basic theme example using the Chrome compatible manifest.json keys, showing the differences in how those keys are implemented.

- -

For more information, see the notes on Chrome compatibility.

diff --git a/files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html b/files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html deleted file mode 100644 index 7a80ac75e7..0000000000 --- a/files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html +++ /dev/null @@ -1,219 +0,0 @@ ---- -title: WebExtensions intégrées -slug: Mozilla/Add-ons/WebExtensions/Embedded_WebExtensions -translation_of: Archive/Add-ons/Embedded_WebExtensions ---- -
{{AddonSidebar}}
- -
-

À partir de Firefox 57 (sorti en novembre 2017), la prise en charge des types d'extensions héritées a été supprimée, y compris les extensions héritées qui intègrent les WebExtensions.

- -

A partir de Firefox 64 (sortie en décembre 2018), la prise en charge des extensions bootstrapped sera supprimée, y compris la prise en charge des extensions bootstrapped qui intègrent des WebExtensions.

-
- -

A partir de Firefox 51, vous pouvez intégrer une WebExtension dans une extension bootstrapped classique ou dans une extension dans le SDK des extensions.

- -

Les fichiers de WebExtension intégrés sont packagés dans les modules complémentaires existant. La WebExtension intégrée ne partage pas directement son champ d'application avec l'ajout d'un complément hérité, mais ils peuvent échanger des messages à l'aide des fonctions de messagerie définies dans l'API {{WebExtAPIRef("runtime")}}.

- -

- -

Cela signifie que vous pouvez migrer un add-on existant vers WebExtensions une pièce à la fois, et disposer d'un add-on entièrement fonctionnel à chaque étape. En particulier,  il vous permet de migrer des données stockées à partir d'un add-on existant vers une WebExtension, en écrivant un add-on hybride intermédiaire qui lit les données à l'aide des API existantes (par exemple, simple-prefs ou le service de préférence) et les écrit en utilisant les APIs WebExtension (par exemple, {{WebExtAPIRef("storage")}}).

- -

Avec ce guide, nous avons écrit deux exemples montrant comment utiliser les WebExtensions embarquées pour faciliter la migration à partir d'un type d'add-on existant. L'un montre comment porter à partir d'un add-on amorcé, et l'autre montre comment porter à partir d'un add-on sdk.

- -

Pour intégrer une WebExtension, vous aurez besoin de Firefox 51 ou ultérieur. Pour intégrer une WebExtension dans un add-on SDK, vous aurez également besoin de jpm 1.2.0.

- -
-

Firefox 57 laisse tomber la prise en charge des types d'add-on hérités. Si vous maintenez actuellement un add-on au format de l'ancien add-on et que vous souhaitez migrer des données, publiez une mise à jour contenant une WebExtension intégrée le plus tôt possible. Si la mise à jour est publiée près de la date de sortie de Firefox 57, les données stockées dans votre add-on seront perdues si l'utilisateur met à jour Firefox avant de recevoir votre mise à jour du add-on.

-
- -

Incorporation d'une WebExtension

- -

Si l'extension héritée est une extension bootstrap avec un install.rdf, incluez la propriété  "hasEmbeddedWebExtension" dans le RDF, contenant la valeur "true":

- -
<em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
- -
Si le complément hérité est une SDK add-on, incluez la clé "hasEmbeddedWebExtension" dans le package.json, définissez sur true:
- -
 
- -
"hasEmbeddedWebExtension": true
-
- -
La WebExtension elle-même vit dans un dossier de niveau supérieur appelé "webextension" dans l'add-on. Par exemple:
- -
 
- -
my-boostrapped-addon/
-    chrome/
-    webextension/
-        manifest.json
-        background.js
-        ...
-    bootstrap.js
-    chrome.manifest
-    install.rdf
- -
 
- -
-
my-sdk-addon/
-    index.js
-    package.json
-    webextension/
-        manifest.json
-        background.js
-        ...
-
- -

Notez que la WebExtension intégrée doit se trouver directement dans le répertoire webextension/.  Il ne peut pas être dans un sous-répertoire. Cela signifie également que vous ne pouvez pas intégrer plus d'une WebExtension.

- -

Firefox ne traite pas les WebExtensions intégrées comme une extension indépendante. Pour cette raison, vous ne devez pas spécifier une identification d'extension pour elle. Si vous le faites, il sera simplement ignoré.

- -

Toutefois, lorsque vous avez terminé la migration de l'add-on et supprimé le code d'intégration existant, vous devez inclure une clé d'application pour l'identifiant soit identique à un ID d'extension original. De cette façon, addons.mozilla.org reconnaîtra que WebExtension est une mise à jour de l'extension existante.

- -

Démarré la WebExtension

- -

La WebExtension intégrée doit être explicitement démarré par l'extension d'intégration.

- -

Si l'extension d'intégration est un add-on bootstrap, l'argument de données passé à la fonction de startup() obtiendra une propriété supplémentaire à la webExtension :

- -
// bootstrapped add-on
-
-function startup({webExtension}) {
-
-...
- -

Si l'add-on d'intégration est une extension SDK, il pourra accéder à un objet WebExtension à l'aide du module sdk/webextension :

- -
// SDK add-on
-
-const webExtension = require("sdk/webextension");
- -

Quoi qu'il en soit, cet objet a une seule fonction, startup(), qui renvoie une Promise. La promesse résolue à un objet avec un seul navigateur de propriétés :  il contient les API {{WebExtAPIRef("runtime")}} que le complément d'intégration peut utiliser pour échanger des messages avec le WebExtension intégré :

- - - -

Pour exemple:

- -
// bootstrapped add-on
-
-function startup({webExtension}) {
-  webExtension.startup().then(api => {
-    const {browser} = api;
-    browser.runtime.onMessage.addListener(handleMessage);
-  });
-}
- -
// SDK add-on
-
-const webExtension = require("sdk/webextension");
-
-webExtension.startup().then(api => {
-  const {browser} = api;
-  browser.runtime.onMessage.addListener(handleMessage);
-});
-
- -

Notez que l'ajout d'un module d'extension intégré ne peut pas démarrer les communications: il peut recevoir (et éventuellement à répondre) des messages ponctuels, en utilisant onMessage, et peut accepter des requêtes de connexion en utilisant onConnect.

- -

La promesse est rejetée si le WebExtension intégré manque un manifeste ou si le manifeste est invalide. Dans ce cas, vous verrez plus de détails dans la boite à outils de la console du navigateur.

- -

Echange des messages

- -

Une fois que la WebExtension intégré est en cours d'exécution, elle peut échanger des messages avec l'add-on hérité en utilisant le sous-ensemble des APIs {{WebExtAPIRef("runtime")}} :

- - - -

Messagerie sans connexion

- -

Pour envoyer un message unique, la WebExtension peut utiliser {{WebExtAPIRef("runtime.sendMessage()")}}. Vous pouvez omettre l'argument extensionId, car le navigateur considère la WebExtension intégrée comme faisant partie intégrante de l'add-on :

- -
browser.runtime.sendMessage("message-from-webextension").then(reply => {
-  if (reply) {
-    console.log("response from legacy add-on: " + reply.content);
-  }
-});
- -

L'add-on d'intégration peut recevoir (et répondre facultativement) ce message en utilisant l'objet {{WebExtAPIRef("runtime.onMessage")}} :

- -
// bootstrapped add-on
-
-function startup({webExtension}) {
-  // Start the embedded webextension.
-  webExtension.startup().then(api => {
-    const {browser} = api;
-    browser.runtime.onMessage.addListener((msg, sender, sendReply) => {
-      if (msg == "message-from-webextension") {
-        sendReply({
-          content: "reply from legacy add-on"
-        });
-      }
-    });
-  });
-}
- -

Messagerie orientée connexion

- -

Pour configurer une connexion plus longue entre la WebExtension et l'extension héritée, la WebExtension peut utiliser {{WebExtAPIRef("runtime.connect()")}}.

- -
var port = browser.runtime.connect({name: "connection-to-legacy"});
-
-port.onMessage.addListener(function(message) {
-  console.log("Message from legacy add-on: " + message.content);
-});
-
- -

L'extension héritée peut écouter les tentatives de connexion à l'aide de {{WebExtAPIRef("runtime.onConnect")}}, et les deux côtés peuvent alors utiliser {{webExtAPIRef("runtime.Port")}} pour échanger des messages :

- -
function startup({webExtension}) {
-  // Start the embedded webextension.
-  webExtension.startup().then(api => {
-    const {browser} = api;
-    browser.runtime.onConnect.addListener((port) => {
-      port.postMessage({
-        content: "content from legacy add-on"
-      });
-    });
-  });
-}
- -

Migration de données à partir d'extensions existantes

- -

Une utilisation majeure pour les WebExtensions intégrées sont de migrer les données stockées d'une extension.

- -

Les données stockées sont un problème pour les personnes qui essaient de migrer à partir de types d'extension existants, car les extensions existantes ne peuvent pas utiliser les API de stockage WebExtension, alors que les  WebExtensions ne peuvent pas utiliser les API de stockage existantes. Par exemple, si une extension du SDK utilise l'API simple-prefs  pour stocker les préférences, la version WebExtension ne pourra pas accéder à ces données.

- -

Avec les WebExtensions intégrées, vous pouvez migrer des données en créant une version intermédiaire de l'extension qui intègre une WebExtension. Cette version intermédiaire lit les données stockées à l'aide des API existantes et écrit les données à l'aide des API des WebExtensions.

- - - -

Nous avons fourni deux exemples illustrant ce modèle : "embedded-webextension-bootstrapped" montre la migration à partir d'un add-on bootstrap, tandis que "embedded-webextension-sdk" montre la migration à partir du SDK de l'extension.

- -

Préférences

- -

Une extension qui contient une WebExtension intégré peut définir des préférences dans l'extension d'héritage (en utilisant, par exemple, simple-prefs ou le service des préférences) ou dans la WebExtension intégrée (en utilisant options_ui).

- -

Si les deux parties définissent les préférences, que les préférences de la WebExtension intégrée annuleront les anciennes.

- -

Si la diffusion de la WebExtension intégrée définit les préférences, elles ne seront initialisées qu'après la WebExtension intégré a commencée. Jusque-là, le bouton "Préférences" dans "about:addons" ne sera pas affiché pour l'add-on, et le navigateur enregistrera une erreur dans la console du navigateur lorsque "about:addons" is ouvert.

- -

Pour cette raison, c'est important que l'extension d'intégration démarre immédiatement le démarrage WebExtension intégré lors du démarrage. Pour une extension bootstrap, cela signifie que vous devez appeler webExtension.startup() dans le bootstrap de démarrage. Pour une extension SDK supplémentaire, cela signifie que vous devez appeler  webExtension.startup() dans le point d'entrée de l'add-on (par défaut, index.js).

- -

Si la page "about:addons" est déjà ouverte dans un onglet lorsque le WebExtension intégré est démarré, le bouton Préférences ne sera visible qu'après la prochaine recharge de la page "about:addons".

- -

Limitations

- -

Debogage

- -

Si vous avez un add-on hérité qui intègre une WebExtension, vous ne pouvez pas utiliser le nouveau débogueur add-on pour le déboguer. Vous devrez utiliser l'ancien flux de travail de débogage, basé sur la boite d'outils du navigateur.

diff --git a/files/fr/mozilla/bugzilla/index.html b/files/fr/mozilla/bugzilla/index.html deleted file mode 100644 index d899f74c9e..0000000000 --- a/files/fr/mozilla/bugzilla/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Bugzilla -slug: Mozilla/Bugzilla -translation_of: Mozilla/Bugzilla ---- -

bugzilla.mozilla.org (souvent abrégé b.m.o) est un système de suivi des bugs de Mozilla.org, une base de données pour enregistrer les bugs et les demandes d'améliration pour Firefox, Thunderbird, SeaMonkey, Camino, et d'autres projets de mozilla.org.

- -
-
-

Documentation à propos B.m.o.

- -
-
What to do and what not to do in Bugzilla
-
Des conseils sur la façon d'utiliser Bugzilla, ainsi que des choses que vous devriez éviter.
-
Bugzilla etiquette
-
A guide to etiquette; this guide will help you understand how best to conduct yourself on b.m.o. and how using proper manners and civility will help ensure your problem gets solved sooner rather than later.
-
Comment savoir si un bug a déjà été signalé
-
Il vous est utile (mais pas obligatoire) de vérifier si le problème que vous signalez est déjà suivi.Ce guide vous aidera donc à le faire.
-
Assurance qualité
-
Documentation sur l'assurance qualité chez Mozilla.
-
Recommandations pour l'écriture de bug
-
A guide to writing a good, understandable, bug that will be easily followed by the development team.
-
Comment soumettre un patch
-
If you've fixed a bug, or have implemented a new feature, you'll need to get your patch into the tree so it can become part of the product. This guide will teach you how!
-
- -

View All...

-
- -
-

Obtenir de l'aide de la communauté

- -

You need help on a CSS-related problem and can't find the solution in the documentation?

- - - -

N'oubliez pas la netiquette pour poser vos questions…

- - - - - -

Outils

- -
    -
  • Bugzilla Todos lists review and flag requests, patches to check in, unfulfilled requests you made of other people, and assigned bugs.
  • -
-
-
diff --git a/files/fr/mozilla/command_line_options/index.html b/files/fr/mozilla/command_line_options/index.html deleted file mode 100644 index 377bbee16b..0000000000 --- a/files/fr/mozilla/command_line_options/index.html +++ /dev/null @@ -1,472 +0,0 @@ ---- -title: Options de ligne de commande -slug: Mozilla/Command_Line_Options -tags: - - Administration - - Documentation - - FAQ - - Greffons - - XULRunner - - ligne de commande -translation_of: Mozilla/Command_Line_Options ---- -

{{FirefoxSidebar}}

- -

Les options de ligne de commande servent à spécifier des options de démarrage des applications Mozilla. Par exemple, vous pouvez utiliser une option pour outrepasser le gestionnaire de profils et ouvrir un profil spécifique (si vous en avez plusieurs). Vous pouvez aussi contrôler la façon dont les applications Mozilla s'ouvrent, quels composants sont lancés au démarrage et ce qu'ils font à leur ouverture. Cette page décrit les options les plus courantes et comment les utiliser. Vous pouvez ouvrir l'interface de ligne de commande en appuyant sur Maj + F2

- -

Règles de syntaxe

- -

Commençons par décrire les règles syntaxiques applicables à toutes les options.

- - - -

Utilisation des options de ligne de commande

- -

Les options sont saisies après la commande servant à lancer l'application. Si les options contiennent des arguments, saisir le paramètre après l'option. Certaines options peuvent être abrégées. Par exemple, l'option « -editor » peut être abrégée en « -edit ». Quand une abréviation est disponible, elle est décrite ci-dessous avec l'option. De même pour le cas des paramètres qui dans certains cas doivent être encadrés par des guillemets droits anglais ("). Plusieurs options de ligne de commande peuvent être spécifiées. En général, la syntaxe est comme suit :

- -
application -option -option "paramètre" -option paramètre
- -

Exemples

- -

Les exemples qui suivent montrent l'usage de l'option « -ProfileManager », qui ouvre le gestionnaire de profils avant de démarrer Firefox ou Thunderbird :

- -

Windows

- -

Sélectionner « Exécuter » depuis le « Menu démarrer ». Puis taper :

- -
firefox -ProfileManager
-
- -

Mac OS X

- -

Aller à « Applications > Utilitaires > Ouvrir un terminal » et taper :

- -
cd /Applications/Firefox.app/Contents/MacOS
-./firefox -ProfileManager
-
- -

Linux

- -

Ouvrir un terminal (invite de commandes) et taper :

- -
cd Thunderbird installation directory
-./thunderbird -ProfileManager
-
- -

L'exemple ci-dessus appelle l'option « -ProfileManager » pour Mozilla Thunderbird.

- -

Profil utilisateur

- -

-allow-downgrade

- -

La protection contre la rétrogradation de Firefox 67 empêche de démarrer accidentellement Firefox avec un profil ayant été exécuté dans une version plus récente de Firefox. Selon les changements entre les deux versions, certains fichiers figurant dans un profil peuvent ne pas être rétrocompatibles. Ajouter cette option outrepasse la protection contre la rétrogradation .

- -

-CreateProfile nom_du_profil

- -

Crée un nouveau profil dans le dossier par défaut sans démarrer l'application. Le profil s'appellera  nom_du_profil dans le gestionnaire de profils. nom_du_profil ne doit pas contenir d'espaces ( ). Pour utiliser cette option correctement, aucune instance de l'application ne doit être en cours d'exécution ou alors l'option -no-remote doit être utilisée.

- -
firefox -CreateProfile UtilisateurJoel
-
- -

-CreateProfile "nom_du_profil nom_du_dossier"

- -

Crée un nouveau profil dans le dossier nom_du_dossier sans démarrer l'application. Le profil s'appellera  nom_du_profil dans le gestionnaire de profils. Attention : nom_du_profil et nom_du_dossier sont encadrés ensemble par des guillemets droits anglais et sont séparés par une seule espace (comme précédemment, nom_du_profil ne doit pas contenir d'espaces). Pour utiliser cette option correctement, l'application ne doit pas être en cours d'exécution ou alors l'option -no-remote doit être utilisée.

- -
-

Note : nom_du_dossier doit exister et il ne doit pas déjà exister de profil appelé nom_du_profil.

-
- -
firefox -CreateProfile " UtilisateurJoel c:\internet\utilisateurjoel-moz-profil"
-
- -

-migration

- -

Démarre avec l'assistant d'importation.

- -

-new-instance

- -

Ouvre une nouvelle instance et pas une nouvelle fenêtre dans l'instance en cours d'exécution, ce qui permet que plusieurs copies de l'application soient ouvertes en même temps.

- -
firefox -no-remote -P "un autre profil"
- -
-

Note: non disponible pour Windows, voir {{bug(855899)}}.

-
- -

-no-remote

- -

N'accepte pas ni n'envoie de commandes distantes. Implique -new-instance.

- -
firefox -no-remote -P "un autre profil"
- -
-

Note : depuis Firefox 9, cela signifie réellement ce que son nom implique pour toutes les plateformes, c.-à-d. que les instances créées avec cette option n'acceptent pas et n'envoient pas de commandes distantes, voir {{ bug(650078) }}. Cela signifie que de telles instances ne sont pas réutilisables. Utiliser cette option crée systématiquement de nouvelles instances.

-
- -

-override /chemin/vers/override.ini

- -

Charge le fichier override.ini spécifié pour outrepasser application.ini ({{Source("browser/app/application.ini")}}). Cette option peut être utilisée pour faire disparaître le gestionnaire de migration au démarrage en chargeant l’override.ini qui suit. Uniquement pour Firefox.

- -
[XRE]
-EnableProfileMigrator=0
- -

-ProfileManager

- -

Lance le gestionnaire de profils. Abréviation : -P sans nom de profil.

- -

-P "nom_du_profil"

- -

Outrepasse le gestionnaire de profils et lance l'application avec le compte nom_du_profil. Ceci est utile pour gérer plusieurs profils. Attention ! La chaîne nom_du_profil est sensible à la casse. Si vous ne précisez pas de nom de profil, le gestionnaire de profils sera lancé. Vous devez utiliser un P majuscule sous Linux avec les versions antérieures à la 7.x, vu que l'option p (minuscule) sert à lancer le mode Purify (test des fuites et de la mémoire). Les autres plateformes acceptent aussi bien la minuscule que la majuscule.

- -
firefox -P "Utilisateur Joel"
-
- -

-profile "chemin_du_profil"

- -

Démarre avec le profil fourni depuis le chemin spécifié. Seulement pour Firefox, Thunderbird et SeaMonkey 2.x.

- -

"chemin_du_profil" peut aussi bien être un chemin absolu ("/chemin/du/profil")  que relatif ("/chemin/du/profil").

- -
Note : sur Mac OS X, utiliser un chemin relatif n'est plus pris en charge depuis Firefox 4.0 à cause d'une régression, voir {{ bug(673955) }}.
- - - -

-browser

- -

Démarre le navigateur. Seulement pour Firefox et SeaMonkey.

- -

-url URL

- -

Ouvre l'URL dans un nouvel onglet ou une nouvelle fenêtre, dépendant de l'absence ou de la présence de l'option browser. -url peut être omis. Vous pouvez charger plusieurs URL, separées par des espaces. Pour Firefox et SeaMonkey seulement.

- -
Note : quand vous ouvrez plusieurs URL, Firefox les ouvre dans des onglets d'une seule nouvelle fenêtre.
- -
firefox www.mozilla.com
-firefox www.mozilla.com developer.mozilla.org
-
- -

-private

- -

Ouvre Firefox en « fenêtre privée » de manière permanente. Pour Firefox 3.6 et ultérieur.

- -

Pourrait ne pas fonctionner pour Firefox 20 et précédents sous Ubuntu. Fonctionnement correct confirmé sous Ubuntu 14.04.

- -

-private-window

- -

Ouvre Firefox en « fenêtre privée » dans une instance déja en cours. Pour Firefox 20 et ultérieur.

- -

-private-window URL

- -

Ouvre l'URL dans une nouvelle « fenêtre privée ». Si une fenêtre privée est déja ouverte, ouvre un nouvel onglet. Firefox 29 et ultérieur seulement. Non fonctionnel pour Firefox 31 sous Linux Mint 17 (qui ouvre l'URL dans une fenêtre normale).

- -

-new-tab URL

- -

Ouvre l'URL dans un nouvel onglet. Firefox et SeaMonkey2.x seulement.

- -

-new-window URL

- -

Ouvre l'URL dans une nouvelle fenêtre. Firefox et SeaMonkey2.x seulement.

- -

-search Mot

- -

Recherche Mot avec le moteur de recherche par défaut. Firefox et SeaMonkey 2.1 et ultérieur.

- -

-preferences

- -

Ouvre la fenêtre des Préférences/Options. Firefox et SeaMonkey2.x seulement.

- -

-setDefaultBrowser

- -

Définit l'application comme navigateur par défaut. Firefox seulement.

- -

-foreground

- -

Fait de l'instance l'application active.

- -

Courriel/Nouvelles

- -

-mail

- -

Démarre le client courriel. Thunderbird et SeaMonkey seulement.

- -

-news news_URL

- -

Démarre le client de nouvelles. Si news_URL (optionnel) est spécifié, ouvre le groupe de nouvelles spécifié. Thunderbird et SeaMonkey seulement.

- -
thunderbird -news news://server/group
-
- -

-compose options_du_message

- -

Démarre l'outil de création de courriel. Voyez les régles de syntaxe. Thunderbird et SeaMonkey seulement.

- -
thunderbird -compose "to=foo@nowhere.net"
-
- -

-addressbook

- -

Démarre le carnet d'adresses. Thunderbird et SeaMonkey seulement.

- -

-options

- -

Ouvre la fenêtre des Préférences. Thunderbird seulement.

- -

-offline

- -

Démarre le logiciel en mode déconnecté. Thunderbird et SeaMonkey seulement.

- -

-setDefaultMail

- -

Définit l'application comme client courriel par défaut. Thunderbird seulement.

- -

Calendrier

- -

-calendar

- -

Démarre le client d'agenda. Sunbird seulement.

- -

-subscribe URL or -url URL

- -

S'abonne à l'URL. Sunbird seulement.

- -

-showdate date

- -

Affiche la date dans l'agenda. Sunbird seulement.

- -
sunbird -showdate 08/04/2008
-
- -

Autres composants

- -

-editor URL or -edit URL

- -

Démarre avec l'éditeur (compositeur) pour l'URL spécifiée (URL est optionnel). SeaMonkey seulement.

- -
seamonkey -edit www.mozilla.org
-
- -

-jsdebugger

- -

Démarre l'application avec Browser Toolbox (auparavant Browser Debugger). Ce débogueur est différent du Venkman (voyez l'option -venkman).

- -

-jsconsole

- -

Démarre l'application avec la console d'erreur, ou, dans le cas de Firefox, la console du navigateur.

- -

-start-debugger-server port

- -

Firefox seulement. Démarre le serveur du débogueur avec le port. Ceci permet à une autre instance de Firefox de connecter ses outils de développement à l'instance visée. Voyez l'article sur le débogage à distance du bureau Firefox.

- -

Le paramètre port est optionnel ; par défaut, le port 6000 est utilisé.

- -

-inspector URL

- -

Démarre l'inspecteur de DOM (s'il est installé) et inspecte l'URL spécifiée (URL est optionnel).

- -

-venkman

- -

Démarre le débogueur JavaScript, Venkman, s'il est installé.

- -

-purgecaches

- -

Vide le cache JavaScript de Gecko (le moteur de mise en page). Normalement le cache survit au redémarrage.

- -

-chat

- -

Démarre le client de clavardage IRC, ChatZilla, s'il est installé.

- -

XULRunner

- -

-app /chemin/vers/application.ini

- -

Démarre un nouveau processus XULRunner pour l'application se trouvant à chemin/vers. Fonctionne aussi pour Firefox version 3 et ultérieur.

- -

--register-global

- -

Inscrit XULRunner avec le système pour tous les usagers. Exige les privilèges admin / root.

- -

--register-user

- -

Inscrit XULRunner pour l'utilisateur en cours.

- -

--unregister-user

- -

Désinscrit XULRunner pour tous les utilisateurs.

- -

--unregister-user

- -

Désinscrit XULRunner pour l'utilisateur en cours.

- -

--install-app chemin/vers/myapplication.(xpi|xulapp)

- -

Installe l'application XULRunner se trouvant à chemin/vers sur le système. Les applications sont installées à l'emplacement par défaut du système (program files|Applications|usr/lib) sous nom_du_vendeur/nom_de_l_application. Les applications peuvent être désinstallées par les méthodes habituelles du système.

- -
"C:\Program Files\Mozilla XULRunner\1.8.0.4\xulrunner\xulrunner.exe" --install-app "C:\Users\Billdo\Desktop\myapplication.xpi"
- -
/opt/xulrunner/1.8.0.4/xulrunner/xulrunner --install-app ~/Desktop/myapplication.xulapp
- -
​/Library/Frameworks/XUL.framework/xulrunner-bin --install-app ~/Desktop/myapplication.xpi
- -

Chrome

- -

-chrome chrome_URL

- -

Charge le chrome spécifié.

- -
firefox -chrome chrome://inspector/content
-
- -

-register chrome_URL

- -

Inscrit le chrome spécifié, sans démarrer l'application.

- -

Modules complémentaires

- -

{{ gecko_minversion_note("1.9.2", "-install-global-extension et -install-global-theme ont été retirés de Gecko 1.9.2 et ultérieur.") }}

- -

-install-global-extension /chemin/vers/extension

- -

Installe l'extension spécifiée dans le dossier de l'application. Le paramètre donne le chemin menant au module. Vous devez disposer des privilèges administrateur.

- -

-install-global-theme /chemin/vers/theme

- -

Installe le thème spécifié. Vous devez disposer des privilèges administratifs.

- -
-

Note : depuis Firefox 2.0.0.7, les options -install-global-extension et -install-global-theme ne peuvent installer que depuis le stockage local (incluant le stockage réseau monté localement). L'installation directe depuis un stockage réseau échouera.

-
- -

-safe-mode

- -

Démarre l'application avec toutes les extensions désactivées, cette fois-ci seulement (les extensions ne sont pas chargées, mais ne sont pas non plus désactivées de façon permanente par le gestionnaire de modules complémentaires).

- -

Locale

- -

-UILocale locale

- -

Démarre avec l'interface régionalisée en locale.

- -
firefox -UILocale en-US
-
- -

Contrôle à distance

- -

-remote remote_command {{deprecated_inline}}

- -
-

Note : cette option a été retirée de Firefox 36.0, puis restaurée avec 36.0.1 pour être retirée définitivement avec 39.0. Voyez {{ bug(1080319) }}.

-
- -

Exécute la remote_command spécifiée dans un processus déja actif (voyez contrôle à distance).

- -
firefox -remote "openURL(www.mozilla.org, new-tab)"
-
- -
-

Note : cette option n'est disponible que pour les plateformes X-windows Unix.

-
- -

Divers

- -

-tray

- -

Démarre l'application minimisée dans la zone de notification du système. Utile avec le démarrage automatique.

- -

-silent

- -

N'ouvre pas les fenêtres par défaut. Utile pour les options qui ouvrent leurs propres fenêtres sans empêcher les fenêtres par défaut de s'ouvrir. Firefox, Thunderbird3.x et SeaMonkey2.x seulement.

- -

-console

- -

Démarre l'application avec la console de débogage. Note : Windows seulement.

- -

-attach-console

- -

Détourne les messages destinés à la console de débogage vers la fenêtre qui a lancé l'application. Note : Windows seulement.

- -

-h or -help or -?

- -

Affiche la liste des options et paramètres disponibles. Sous Windows, cette option ne fonctionne qu'avec une redirection |more ({{ Bug(355889) }}). Cette option n'est disponible qu'en ligne de commande.

- -

-v or -version

- -

Affiche la version de l'application. Sous Windows, cette option ne fonctionne qu'avec une redirection |more ({{ Bug(355889) }}). Cette option n'est disponible qu'en ligne de commande.

- -

-osint

- -

Indique à l'application qu'elle est lancée par l'invite de commande du système. Cette option ne doit être spécifiée que si l'application invocatrice prend en charge toutes les fonctionnalités de l'invite de commande du système ({{ Bug(384384) }}).

- -

-requestPending

- -

Indique à l'application qu'il y aura une requête DDE (Dynamic Data Exchange, Windows seulement) pour l'ouverture du même URL que celui spécifié par la ligne de commande. Cette option ne doit être spécifiée que si l'application invocatrice prend en charge toutes les fonctionnalités de l'invite de commande du système ({{ Bug(354005) }}).

- -

options X11

- -

Ces options ne sont disponibles que pour une application roulant sous le système graphique X11 / X.org (Linux et autres systèmes Unix).

- -

--display=DISPLAY

- -

Définit l'affichage X à utiliser.

- -

--class=WM_CLASS

- -

Définit WM_CLASS comme étant la classe de ressource X11 des fenêtres créées par l'application.

- -

--sync

- -

Rend les appels X synchrones.

- -

--g-fatal-warnings

- -

Rend tous les avertissements fatals.

- -

Autre options restant à documenter

- - - -

Références

- - - -
-

Information sur le document d'origine

- - -
diff --git a/files/fr/mozilla/css/index.html b/files/fr/mozilla/css/index.html deleted file mode 100644 index a3f0d4cec1..0000000000 --- a/files/fr/mozilla/css/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Mozilla internal-only CSS -slug: Mozilla/CSS -tags: - - TopicStub -translation_of: Mozilla/Gecko/Chrome/CSS ---- -

Cet ensemble de pages détaille les fonctionnalités CSS qui ne sont disponibles qu'en interne dans le navigateur Firefox, c'est-à-dire uniquement dans la feuille de style américaine.

- -

{{SubpagesWithSummaries}}

diff --git a/files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html b/files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html deleted file mode 100644 index 879be80ff2..0000000000 --- a/files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Utilisation de Mozilla build VM -slug: Mozilla/Developer_guide/Utilisation_de_la_Machine_Virtuelle_VM -tags: - - Compilation firefox - - Firefox - - Guide - - Guide du Developpeur - - Machine Virtuelle Mozilla - - Mozilla - - VirtualBox -translation_of: Archive/Mozilla/Using_the_VM ---- -

Si vous vous êtes jamais demandés à quoi ressemble une contribution à Firefox mais vous n'aviez jamais le temps pour lire et poursuivre jusqu'au bout nos instructions pour configurer un environnement de devéloppement ou avez voulu éviter de faire des changements à vos outils standard et configuration, alors ceci pourrait être pour vous. Mozilla fournit une machine virtuelle (VM) qui est compatible avec le logiciel de virtualisation gratuit VirtualBox (aussi bien que d'autres, y compris VMWare/VMWare Fusion).

- -

Cet article fournit des instructions simples pour le téléchargement, l'installation et la configuration  de cet environnement de developpement; une fois que vous avez fini les étapes ci-dessous, vous aurez un VM prêt pour modifier et adapter Firefox.

- -

Esperant que ce VM aidera particulièrement des développeurs ou les développeurs potentiels qui n'ont pas un environnement de développement  C++ complet disponible pour eux

- -

Installation de VirtualBox

- -

Visitez la page de téléchargements de VirtualBox et télécharger la dernière version du logiciel pour votre système d'exploitation.

- -
-

Note: Si vous avez déjà un produit de virtualisation installé, comme VirtualBox, VMWare, ou VMWare Fusion, vous pouvez l'utiliser au lieu de télécharger une nouvelle copie de VirtualBox. Assurez-vous que vous avez la dernière version du logiciel. Notez que Parallels Desktop ne prend pas en charge le format OVF.

-
- -

Telechargement de la VM

- -

Ensuite, téléchargez l'environnement de développement de Firefox VM.

- -

TELECHARGER LA VM

- -

SHA-256: 1c84eaf97ea2a9a3c990051306a038da9541a450fd600878e7c1f984fa930f35

- -
-

Note: Ce fichier fait environ 4.4 Go, il peut prendre un certain temps à télécharger.

-
- -

Configuration de la VM

- -

Après avoir téléchargé le fichier .ova des machines virtuelles, double-cliquez sur le fichier; cela démarrera le processus d'importation de la machine virtuelle dans VirtualBox. Il est fortement recommandé de donner à la VM une mémoire vive minimum de 4096 Mo (8192 Mo ou plus si vous le pouvez), aussi configurer la afin d'avoir le même nombre de processeurs que votre ordinateur hôte. Le devéloppement de Firefox utilise beaucoup de ressources système, et que vous voulez construire le plus rapidement possible.

- -

Screen shot of the Import Virtual Appliance window

- -

Une fois que vous avez terminé d'importer la machine virtuelle, vous pouvez effectuer des personnalisations supplémentaires si vous le souhaitez, ou tout simplement démarrer la machine virtuelle et attendre que le bureau Ubuntu apparaisse. Une fenêtre du Terminal (l'equivalent de la l'invite de commande sur Windows) s'affichera automatiquement et effectuera certaines activités de configuration finale. Une fois celles-ci terminée, Sublime Text démarrera, et vous pourriez commencer à travailler !

- -

Screen shot of the Sublime Text editor running in the VM

- -
-

Note: Si jamais vous avez besoin d'informations d'identification root, utilisez "firefox-dev" comme mot de passe. Si vous souhaitez modifier vos paramètres de langue et de clavier, suivez les instructions Comment changer la langue de l'interface utilisateur dans Ubuntu.(page en Anglais)

-
- -

Compilation de Firefox

- -

Pour Compiler Firefox dans la machine virtuelle (VM), ouvrez le menu "Outils" et choisissez l'option "Compiler" . Le processus de Compilation commencera, et vous avez du temps pour boire un verre, un bon repas, ou peut-être une petite pause, tout depend de la puissance de votre ordinateur. Vous devez être patient.
-
- Une fois que la Compilation terminée (avec succès), choisissez l'option Exécuter dans le menu "Outils" pour démarrer votre version personnalisée de Firefox. Assurez-vous que tout ce que le pire comme prévu.
-
- Par défaut, la machine virtuelle est configuré pour compiler une compilation optimisée de Firefox. Vous pouvez facilement passer de la compilation au débogage. Il suffit d'ouvrir le menu "Outils", puis le sous-menu "Build System". Dans la dernière sous-menu de "Build System"
, choisissez «Firefox (Debug)". C'est tout ! Votre prochaine Compilation sera une accumulation de débogueur.

- -

Screen shot showing how to switch between debug; and optimized builds

- -

Travailler dans la VM

- -

De là, vous travaillez dans la machine virtuelle tout comme vous le feriez ailleurs. Pour recupérer le dernier code de mozilla-central, il suffit d'utiliser Mercurial comme d'habitude :

- -
hg pull
- -

Et soumettez vos patchs(page en Anglais) de la même manière que vous le feriez normalement.

- -

Et Maintenant ?

- -

Maintenant que vous avez construit avec succès Firefox dans votre VM flambant neuf, vous demandez peut-être ce qu'il faut faire ensuite. Une excellente façon de commencer est de choisir un petit bug facile à fixer et code qui applique ces patches. Imaginez comment il est génial d'avoir le code que vous avez écrit expédié à un demi-milliard d'utilisateurs partout dans le monde !

- -

Voici quelques liens pour vous aider à trouver quelque chose que vous pouvez faire pour améliorer Firefox:

- - - -

Vous pouvez également poser vos questions sur "ou commencer " {{IRCLink("introduction")}},  et des questions de développement de Firefox ici {{IRCLink("developers")}}.

diff --git a/files/fr/mozilla/enregistrement_chrome/index.html b/files/fr/mozilla/enregistrement_chrome/index.html deleted file mode 100644 index fdbe05fa9b..0000000000 --- a/files/fr/mozilla/enregistrement_chrome/index.html +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Enregistrement chrome -slug: Mozilla/Enregistrement_chrome -tags: - - API_du_toolkit -translation_of: Mozilla/Chrome_Registration ---- -

 

- -

Définition du chrome

- -

Le chrome est l'ensemble des éléments de l'interface utilisateur d'une application qui sont situés en dehors de la zone de contenu d'une fenêtre. Les barres d'outils, les barres de menus, les barres de progression, et les titres de fenêtres sont tous des exemples d'éléments qui font habituellement partie du chrome.

- -

Fournisseurs de chrome

- -

Ce qui fournit le chrome pour un type de fenêtre donnée (par exemple pour la fenêtre du navigateur) est appelé un fournisseur de chrome (Chrome Provider). Les fournisseurs collaborent pour fournir un jeu complet de chrome pour une fenêtre particulière, depuis les images des boutons de la barre d'outils jusqu'aux fichiers décrivant le texte, le contenu et l'apparence de la fenêtre elle-même.

- -

Il y trois types basiques de fournisseurs de chrome :

- -

content

- -

Le fichier principal pour la description d'une fenêtre provient du fournisseur « content », et il peut s'agir de n'importe quel type de fichier que Mozilla peut afficher. Il s'agit généralement de fichiers XUL, puisque XUL est conçu pour décrire le contenu de fenêtres et de boîtes de dialogue. Les fichiers JavaScript définissant l'interface utilisateur font également partie des paquetages content, ainsi que la plupart des fichiers de liaisons XBL.

- -

locale

- -

Les applications localisables (disponibles en plusieurs langues) ont leurs informations de localisation dans des fournisseurs « locale ». Cela permet aux traducteurs de fournir un paquetage différent pour traduire toute une application sans toucher au reste du code source. Les deux principaux types de fichiers de localisation sont les fichiers DTD et les fichiers properties de style Java.

- -

skin

- -

Un fournisseur « skin » est responsable de la fourniture complète des fichiers décrivant l'apparence visuelle du chrome. Typiquement, un thème graphique fournit des fichiers CSS et des images.

- -

Le registre chrome

- -

L'environnement d'exécution Gecko s'occupe d'un service appelé le registre chrome fournissant une cartographie complète permettant de lier les noms de paquetages chrome et leurs emplacements physiques sur le disque.

- -

Le registre chrome est configurable et persistant, un utilisateur peut donc installer des fournisseurs de chrome différents et sélectionner un thème ou une langue préférée. Tout ceci est accompli au travers d'xpinstall et du gestionnaire d'extensions.

- -

Afin d'informer le registre chrome de la présence d'un nouveau chrome, un texte de présentation appelé manifest est utilisé : il s'agit du fichier chrome.manifest à la racine d'une extension ou d'un thème, ou d'une application XULRunner.

- -

Ces fichiers sont de simples fichiers textes présentés ligne par ligne. Chaque ligne est interprétée individuellement. Si la ligne peut être interprétée, le registre chrome réalise l'action identifiée par cette ligne, autrement, le registre chrome ignorera cette ligne (et affichera un message d'alerte dans la console d'erreurs d'exécution).

- -
locale nomdupaquetage nomlocale chemin/vers/fichiers
-skin nomdupaquetage nomskin chemin/vers/fichiers
-
- -

Instructions du fichier manifest

- -

Commentaires

- -

Une ligne est un commentaire si elle commence par le caractère « #» ; tous les autres caractères sur la ligne seront ignorés.

- -
# cette ligne est un commentaire - vous pouvez mettre ce que vous voulez ici
-
- -

content

- -

Un paquetage de type content est enregistré par la ligne :

- -
content nomdupaquetage uri/vers/fichiers/ [drapeaux]
-
- -

Ceci va enregistrer un emplacement à utiliser lors de la résolution de l'URI chrome://nomdupaquetage/content/.... L'URI peut être absolue ou relative à l'emplacement du fichier manifeste. Notez qu'elle doit se terminer par une barre oblique « / ».

- -

locale

- -

Un paquetage de type locale est enregistré par la ligne :

- -
locale nomdupaquetage nomlocale uri/vers/fichiers/ [drapeaux]
-
- -

Ceci va enregistrer un paquetage locale lors de la résolution de l'URI chrome://nomdupaquetage/locale/... . La chaîne nomlocale est habituellement un identifiant de langue comme « en » ou de langue spécifique à un pays comme « en-US ». Si plus d'une localisation est enregistrée pour un paquetage, le registre chrome sélectionnera la plus appropriée en fonction des préférences de l'utilisateur.

- -

skin

- -

Un paquetage de thème est enregistré par la ligne :

- -
skin nomdupaquetage nomskin uri/vers/fichiers/ [drapeaux]
-
- -

Ceci va enregistrer un paquetage de thème lors de la résolution de l'URI chrome://nomdupaquetage/skin/... . La chaîne nomskin est une chaîne opaque identifiant le thème installé. Si plus d'un thème est enregistré pour un paquetage, le registre chrome sélectionnera le plus approprié en fonction des préférences de l'utilisateur.

- -

style

- -

Les overlays de style (CSS personnalisée qui sera appliquée à une page chrome) sont enregistrés avec la syntaxe suivante :

- -
style chrome://URI-vers-style chrome://stylesheet-URI [drapeaux]
-
- -

override

- -

Dans certains cas, une extension ou une application embarquant le moteur peut avoir envie de remplacer un fichier chrome fourni par l'application ou par XULRunner. Pour autoriser ce remplacement, le manifeste d'enregistrement chrome doit contenir des instructions « override » :

- -
override chrome://paquetage/type/uri-originelle.qqc nouvelle-URI-résolue [drapeaux]
-
- -

Note : les overrides ne sont pas récursifs (donc remplacer chrome://foo/content/bar/ par file:///home/john/blah/ ne fera généralement pas ce que vous désirez ou vous attendez à voir).

- -
-

Un bogue est actuellement présent dans les versions de Gecko antérieures à 1.8.0.13 et 1.8.1.5, ainsi que dans des compilations plus anciennes, où l'utilisation d'une URL relative pour le paramètre nouvelle-URI-résolue ne fonctionnera pas. Il est nécessaire de fournir une URL complètement qualifiée (c'est-à-dire qui peut être résolue n'importe où, pas uniquement dans le répertoire dans lequel le manifeste chrome se trouve). Étant donné que le développeur d'extension ou d'application est incapable de prédire ce que sera le chemin vers un tel fichier, il est actuellement uniquement possible d'utiliser cette directive avec une autre URL chrome:// comme paramètre nouvelle-URI-résolue. Voir le {{ Bug(323455) }}.

-
- -

Drapeaux de fichiers manifest

- -

Dans les fichiers manifest, plusieurs drapeaux séparés par des virgules peuvent être ajoutés à la fin des lignes d'enregistrement. Ces drapeaux indiquent des attributs spéciaux du chrome dans ce paquetage ou limite les conditions d'utilisation de la ligne.

- -

application

- -

Des extensions peuvent s'installer dans plusieurs applications différentes. Certaines lignes d'enregistrement chrome peuvent toutefois être réservées à une application particulière. Le drapeau

- -
application=app-ID
-
- -

indique que l'instruction ne doit être appliquée que si l'extension est installée dans une application ayant pour identifiant app-ID. Plusieurs drapeaux application peuvent être fournis sur une même ligne, auquel cas elle sera appliquée si n'importe lequel d'entre-eux correspond.

- -

appversion

- -

Des extensions peuvent s'installer dans plusieurs versions différentes d'une application. Il peut y avoir des lignes d'enregistrements chrome qui ne s'appliquent qu'à une version particulière de l'application. Le drapeau

- -
appversion=version
-appversion<version
-appversion<=version
-appversion>version
-appversion>=version
-
- -

indique que l'instruction ne doit s'appliquer que si l'extension est installée dans la version de l'application indiquée. Plusieurs drapeaux appversion peuvent figurer sur la même ligne, auquel cas la ligne sera appliquée si n'importe lequel d'entre-eux correspond. La chaîne de version doit se conformer au Format de version du toolkit.

- -

platform (paquetages propres à la plateforme)

- -

Certains paquetages sont marqués à l'aide d'un drapeau particulier indiquant qu'ils sont propres à une plateforme. Certaines parties de content, skin ou locale peuvent être différents selon la plateforme sur laquelle l'application est exécutée. Ces paquetages contiennent trois jeux de fichiers différents, pour Windows/OS2, Macintosh et les plateformes de type Unix. Par exemple, l'ordre des boutons « OK » et « Annuler » dans un dialogue n'est pas le même d'une plateforme à l'autre, de même que le nom de certains éléments.

- -

L'indicateur « platform » n'est pris en compte que dans le cas d'un enregistrement content, il n'est pas reconnu dans le cas d'un enregistrement locale ou string. Cependant, il s'applique aux parties content, locale et skin lorsque spécifié.

- -

Pour indiquer qu'un paquetage est propre à une plateforme, ajoutez l'indicateur « platform » après le chemin sur la ligne content, par exemple :

- -
content global-platform jar:toolkit.jar!/toolkit/content/global-platform/ platform
-
- -

Une fois ceci spécifié dans votre fichier manifest, assurez-vous ensuite que, sous le répertoire global-platform, les sous-répertoires win (Windows/OS2), mac (OS9/OSX), ou unix (tous les autres cas) sont présents. Tout ce qui se trouve en dehors de ces sous-répertoires sera ignoré.

- -

xpcnativewrappers

- -

Les paquetages chrome peuvent décider s'ils utilisent ou non le mécanisme de sécurité XPCNativeWrapper pour protéger leur code contre du contenu malveillant auquel ils pourraient eccéder. Consultez Accès sécurisé au contenu DOM depuis le chrome pour plus de détails.

- -

Dans les versions alpha de Firefox 1.5 alpha (les alphas Deer Park), ce drapeau est *désactivé* par défaut, et doit être activé explicitement en spécifiant xpcnativewrappers=yes.

- -

À partir de la première version beta de Firefox 1.5, ce drapeau est activé par défaut, et les extensions qui ont besoin d'accès non sécurisés aux objets du contenu devront spécifier explicitement xpcnativewrappers=no.

- -

Le drapeau xpcnativewrappers ne s'applique qu'au paquetages de type content : il n'est pas reconnu par les enregistrements locale ou skin.

- -

Exemple de fichier manifest chrome

- -
content       necko              jar:comm.jar!/content/necko/ xpcnativewrappers=yes
-locale        necko       fr     jar:fr.jar!/locale/fr/necko/
-content       xbl-marquee        jar:comm.jar!/content/xbl-marquee/
-content       pipnss             jar:pipnss.jar!/content/pipnss/
-locale        pipnss      fr     jar:fr.jar!/locale/fr/pipnss/
-content       pippki             jar:pippki.jar!/content/pippki/ xpcnativewrappers=yes
-locale        pippki      fr     jar:fr.jar!/locale/fr/pippki/
-content       global-platform    jar:toolkit.jar!/content/global-platform/ platform
-skin          global      classic/1.0 jar:classic.jar!/skin/classic/global/
-override chrome://global/content/netError.xhtml jar:embedder.jar!/global/content/netError.xhtml
-content       inspector          jar:inspector.jar!/content/inspector/ xpcnativewrappers=no
-
- -

Anciens fichiers manifest de type contents.rdf

- -

Avant que les fichiers texte de type manifest soient mis en place (avec Firefox 1.5 et la version 1.8 du toolkit), des fichiers RDF appelés « contents.rdf » étaient utilisés pour les enregistrements chrome. Ce format n'est plus recommandé, cependant la suite Mozilla (SeaMonkey) ne permet pas encore d'utiliser les fichiers texte au format manifest, et des fichiers contents.rdf sont toujours nécessaires pour les extensions qui désirent maintenir une rétrocompatibilité avec Firefox 1.0 ou la suite.

diff --git a/files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html b/files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html deleted file mode 100644 index b44152a57f..0000000000 --- a/files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Compiler Firefox avec Rust -slug: Mozilla/Firefox/Compiler_Firefox_avec_Rust -tags: - - Compilation - - Gecko - - rust -translation_of: Archive/Mozilla/Firefox/Building_Firefox_with_Rust_code ---- -
{{FirefoxSidebar}}

En mai 2015 le langage de programmation Rust a atteint sa version stable 1.0 et diverses expérimentations comme la rédaction de parties de Gecko en Rust ont commencé. Cette page est un guide sommaire destiné aux personnes travaillant sur ce projet.

- -

Ajouter le code Rust

- -

Le support de base pour la compilation avec le code Rust est disponible sur la page du  bogue 1161339. Si vous disposez de rustc dans votre variable path vous pouvez ajouter les fichiers .rs à la variable SOURCES dans moz.build, puis ajouter :

- -
ac_add_options --enable-rust
- -

à votre mozconfig et ça devrait fonctionner.

- -

La bibliothèque standard de rust utilise un thread local de stockage qui n'est pas supporté sur MacOS X 10.6. Ainsi, si vous compilez le projet depuis un Mac vous devez aussi ajouter :

- -
ac_add_options --enable-macos-target=10.7
- -

Vous pouvez aussi compiler une toolchain personnalisée de Rust sans la partie relative à std::thread. Pour plus de détails, regardez le bogue 1164109.

- -

Because of limitations of cargo and the Firefox build system, currently we build a stand-alone static lib from each rust file listed in SOURCES. You must therefore list just the top-level rust file. Everything must be a single crate, like a manual unified build. The rust compiler will search for interior modules by source file name, but extern crate references won't be resolved.

- -

Allez voir le bogue 1135640 ('oxidation') pour un suivi global.

- -

Tester le code Rust

- -

Il existe un test unitaire simple de disponible dans le répertoire du projet. Vous pouvez l'utiliser pour savoir si Rust est activé et fonctionne avec votre configuration.

- -
./mach gtest rust.*
- -

Regardez si le test rust.CallFromCpp réussi ainsi que tous les autres.

diff --git a/files/fr/mozilla/firefox/deploiement_entreprise/index.html b/files/fr/mozilla/firefox/deploiement_entreprise/index.html deleted file mode 100644 index 13913c8e06..0000000000 --- a/files/fr/mozilla/firefox/deploiement_entreprise/index.html +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Déploiement de Firefox dans un environnement d'entreprise -slug: Mozilla/Firefox/deploiement_Entreprise -tags: - - Déploiement - - Entreprise - - Firefox -translation_of: Mozilla/Firefox/Enterprise_deployment_before_60 ---- -
{{FirefoxSidebar}}
- -

Cette page documente de pied en cap le processus de gestion de Mozilla Firefox sur des ordinateurs fonctionnant sur Windows ou macOS dans le cadre d'une entreprise. Vous pouvez envoyer vos questions par courrier électronique à la liste de diffusion du groupe de travail pour les entreprises (Enterprise Working Group) via enterprise@mozilla.org (en anglais). Mieux encore, vous pouvez rejoindre les discussions en cours en vous inscrivant à la liste en anglais ou en français.

- -
-

Note : cet article couvre des versions de Firefox antérieures à Firefox 60 ESR. Pour un déploiement dans des environements d’enterprises dans Firefox 60 ou plus récent, consultez l’article Deploying Firefox in an enterprise environment.

-
- -

Choisissez une variante de Firefox

- -

RR (Version Rapide)

- -

Mozilla publie une nouvelle version majeure avec de nouvelles fonctionnalités et des corrections de bugs toutes les six semaines (et, si besoin, des mises à jour de sécurité durant cette période). Le jour où une version majeure est lancée, dans la plupart des cas (voir plus bas pour les exceptions), Mozilla arrête de fournir des correctifs de bugs pour les versions précédentes.

- -

Pour vous renseigner sur les dates de sortie des prochaines versions, vous pouvez regarder ce tableau sur le wiki Mozilla.

- -

ESR (version de support étendu)

- -

Chaque septième version majeure de Firefox est déclarée version de support étendu. Ces versions reçoivent les corrections des gros bugs issus des versions mineures pendant 54 semaines (neuf cycles de six semaines). De plus, un chevauchement de 12 semaines (deux cycles de six semaines) entre deux versions successives de type ESR est effectué, au cours de laquelle les deux versions ESR obtiennent des corrections de bugs.

- -

Les versions ESR sont les versions 10, 17, 24, 31 et 38.

- -

De nombreuses entreprises et organisations avec des environnements informatiques généralisés préfèrent utiliser des versions ESR que des versions RR car elles peuvent tester leur comptabilité sur une période de 42 semaines au lieu de la période de 6 semaines (entre chaque RR). De plus si elles ont un problème, elles disposent de 12 semaines de plus (chevauchement entre 2 versions ESR) pour trouver une solution (en plus des 6 semaines obtenues en testant la version beta).

- -

Notez que des effets indésirables peuvent se faire ressentir si vous passez d'une version RR à une version ESR antérieure. En effet, les versions RR voient parfois de nouvelles fonctionnalités non finies intégrées à leur code pour pouvoir les tester, mais désactivées par les préférences. Lors d'un retour à une version précédente, les utilisateurs gardent leurs derniers paramètres dans leur répertoire de profil. Une option peut alors être activée sans qu'elle ne soit totalement fonctionnelle sur la version ESR. Si vous souhaitez passer d'une version RR à une version ESR, vous devriez le faire lorsqu'une nouvelle version ESR voit le jour.

- -

Installation

- -
    -
  1. Téléchargez la dernière version de Firefox depuis https://www.mozilla.org/en-US/firefox/all/ (RR) ou https://www.mozilla.org/en-US/firefox/organizations/all/ (ESR).
  2. -
  3. Installez la version sur le système d'exploitation de votre choix (L'option pour une installation silencieuse est -ms).
  4. -
  5. Vous pouvez aussi créer un fichier d'initialisation. Pour plus d'informations, vous pouvez visiter cette page (en).
  6. -
- -

Configuration

- -
    -
  1. Trouvez le répertoire où l'exécutable est présent. Par exemple, sur Windows 7 (64 bits), le répertoire est souvent C:\Program Files (x86)\Mozilla Firefox; dans Mac OSX 10.8 il s'agit de /Applications/Firefox.app/Contents/MacOS. Les sous-répertoires mentionnés par la suite sont relatifs à ce dossier.
  2. -
  3. Créez un fichier javascript dans defaults/pref (généralement, autoconfig.js - d'autres noms fonctionnent, mais pour de meilleurs résultats, il faut que le nom commence par un 'a'). Le contenu de ce fichier indique à Firefox où trouver le fichier de configuration. (Pour plus d'informations : Customizing Firefox default preference files (en)).Les trois lignes dont vous avez besoin sont : -
    // Vous devez démarrer ce fichier avec un commentaire !
    -pref("general.config.filename", "mozilla.cfg");
    -pref("general.config.obscure_value", 0);
    -
  4. -
  5. Créez un fichier .cfg (généralement mozilla.cfg — le nom peut être différent, mais il faut que ça corresponde au nom entré dans les 2 lignes précédentes) dans le répertoire du programme. Passez ou commentez la première ligne, puis commencer à mettre vos préférences. Pour savoir quelles préférences mettre, rendez-vous sur la page about:config sur une copie de Firefox correctement configurée et regardez les préférences ayant pour statut "user set", ou regardez les exemples suivants. Toute préférence peut être réglée via une des fonctions suivantes : -
    -
    pref
    -
    Un utilisateur peut changer une valeur, mais elle sera effacée au prochain redémarrage. Si vous mettez une préférence de cette manière, elle sera montrée comme "user set" dans about:config
    -
    defaultPref
    -
    pour modifier la valeur par défaut. Si un utilisateur change cette valeur, il pourra la garder entre plusieurs sessions. Les préférences peuvent être réinitialisées via la GUI ou autre méthode. Elle sera montrée avec un statut "default" dans about:config
    -
    lockPref
    -
    pour bloquer les préférences. Elles ne pourront pas être changées par la GUI ou via about:config. Dans la majeure partie des cas, la GUI va enlever l'option ou la griser. Certains éléments de la configuration nécessitent un réglage via lockPref, tels que app.update.enabled (pref ne fonctionnera pas).
    -
    clearPref
    -
    pour rendre vierge certaines préférences. Peut s'avérer utile pour désactiver des fonctions se basant sur un numéro de version.
    -
    -
  6. -
- -

Vous pouvez visiter Customizing Firefox autoconfig files (en) ou Customizing Firefox autoconfig files continued (en) pour plus d'informations. Pour désactiver des éléments de l'interface utilisateur, vous pouvez utiliser l'extension CCK2.

- -

Exemple de fichier de configuration

- -

Dans l'exemple qui suit, vous pouvez voir des exemples de références nécessitant l'utilisation de lockPref.

- -
// Désactive la mise à jour automatique
-lockPref("app.update.enabled", false);
-// pour être sûr que la mise à jour automatique soit désactivée
-lockPref("app.update.auto", false);
-lockPref("app.update.mode", 0);
-lockPref("app.update.service.enabled", false);
-
-// Désactive la vérification de la comptabilité des extensions
-clearPref("extensions.lastAppVersion");
-
-// Désactive l'affichage de 'Connaître vos droits' au premier lancement
-pref("browser.rights.3.shown", true);
-
-// Ne montre pas les nouvelles fonctionnalités à chaque mise à jour
-pref("browser.startup.homepage_override.mstone","ignore");
-
-// Modifie la page d'accueil
-defaultPref("browser.startup.homepage", "http://home.example.com");
-
-// Désactive le lecteur de pdf interne
-pref("pdfjs.disabled", true);
-
-// Désactive le convertisseur flash vers javascript
-pref("shumway.disabled", true);
-
-// Ne demande pas d'installer le plugin flash
-pref("plugins.notifyMissingFlash", false);
-
-// Désactive la vérification des plugins
-lockPref("plugins.hide_infobar_for_outdated_plugin", true);
-clearPref("plugins.update.url");
-
-// Désactive le rapport de santé
-lockPref("datareporting.healthreport.service.enabled", false);
-
-// Disable all data upload (Telemetry and FHR)
-lockPref("datareporting.policy.dataSubmissionEnabled", false);
-
-// Désactive le rapport de crashs
-lockPref("toolkit.crashreporter.enabled", false);
-Components.classes["@mozilla.org/toolkit/crash-reporter;1"].getService(Components.interfaces.nsICrashReporter).submitReports = false; 
-
- -

Packaging d'extensions

- -
    -
  1. Installez l'extension sur une machine de test. Regardez la page about:support sous Extensions pour trouver le GUID
  2. -
  3. Regardez dans le répertoire des profils (ex: %APPDATA%\Mozilla\Firefox\Profiles pour Win7; pour le trouver, regardez Profile Directory sur la page about:support), puis sous "Extensions" pour l'extension souhaitée. Il s'agit soit d'un fichier .xpi (correspondant à un .zip) ou un dossier avec de multiples fichiers.
  4. -
  5. Décidez de la façon dont vous voulez la déployer. La méthode la plus simple est de copier le .xpi ou le dossier dans le dossier /distribution/extensions mais cette méthode ne fonctionne que pour les profils créés après l'ajout de l'extension. De plus, si vous réinstallez firefox, le dossier sera supprimé, assurez-vous de réinstaller les extensions par la suite. Vous pouvez vous rendre sur cette page Integrating add-ons into Firefox (en) pour trouver d'autres méthodes.
  6. -
- -

Changements au fil du temps

- -

Changement dans la structure des répertoires

- -

La structure des répertoires intégrée au programme a changé 2 fois. Si vous lisez des descriptions sorties avant la version 21, il faut probablement prendre en compte les points suivants :

- - - -

La configuration des préférences general.config.filename et general.config.obscure_value pour AutoConfiguration peut être réalisée dans le dossier defaults/pref, mais le fichier de configuration doit commencer par la lettre 'a', comme par exemple autoconfig.js.

- -

Si l'opération venait à échouer depuis defaults/pref dans une des versions suivantes de Firefox, essayez avec browser/defaults/preferences.

- -

Changement de répertoire sur Mac

- -

En raison de l'approche d'Apple plus stricte en matière de signature de logiciel, depuis environ la version 35 les fichiers de configuration doivent être placés sous /Applications/Firefox.app/Contents/Resources (c'est là que doit aller mozilla.cfg et autoconfig.js sous /Applications/Firefox.app/Contents/Resources/defaults/pref).

- -

Changements dans ESR 24.x avec les fichiers PDF Adobe

- -

Firefox RR 19.x modifie l'outil de visionnage d'Adobe pour les fichiers .pdf afin d'utiliser l'outil interne. Ce changement est présent dans la version ESR 24.x et la préférence se modifie automatiquement lors de la mise à jour depuis ESR 17.x même si un outil de visionnage externe a été configuré. Le nom du type de fichier a aussi été modifié passant de Adobe Acrobat Document à Portable Document Format (PDF), le rendant difficile à localier via les outils ou options. Pour désactiver cette fonctionnalité, modifiez pdfjs.disabled à true, comme dans le fichier d'exemple plus haut.

diff --git a/files/fr/mozilla/firefox/developer_edition/index.html b/files/fr/mozilla/firefox/developer_edition/index.html deleted file mode 100644 index 23cf232d3b..0000000000 --- a/files/fr/mozilla/firefox/developer_edition/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Édition pour les développeurs -slug: Mozilla/Firefox/Developer_Edition -tags: - - Developer Edition -translation_of: Mozilla/Firefox/Developer_Edition ---- -
{{FirefoxSidebar}}

- -

Une version de Firefox adaptée sur mesure pour les développpeurs web.

- -

Télécharger Firefox Developer Edition

- -
-
-
-

Les dernières fonctionnalités de Firefox

- -

L'édition de Firefox pour les développeurs remplace le canal de distribution Aurora dans le système de release de Firefox. De la même manière que pour Aurora, les nouvelles fonctionnalités seront intégrées à cette édition toutes les six semaines, une fois qu'elles auront été suffisamment stabilisées avec les versions Nightly.

- -

En utilisant l'édition développeur, vous pourrez avoir accès aux outils et aux fonctionnalités 12 semaines avant que ceux-ci ne soient disponibles sur le canal de release.

- -

Découvrez les nouveautés de l'édition de Firefox pour les développeurs.

-
- -
-

Des outils de développement expérimentaux

- -

Certains outils expérimentaux seront intégrés pour maturer avant d'atteindre le canal de distribution release.

- -

Ainsi, l'édition développeur intègre l'extension Valence, qui permet de connecter les outils de développement Firefox à d'autres navigateurs tels que Chrome pour Android ou Safari pour iOS.

-
-
- -
-
-

Un profil à part entière

- -

L'édition de Firefox pour les développeurs utilise un profil séparé de celui des autres versions de Firefox installées sur le même ordinateur. Cela signifie que vous pouvez facilement utiliser une version développeur en même temps qu'une version beta.

-
- -
-

Une version paramétrée pour les développeurs web

- -

Les préférences utiles au développement web sont activées et paramétrées. Le débogage du chrome et le débogage à distance sont par exemple activés par défaut.

-
-
- -
-
-

Un thème distinct

- -

Ce thème permet d'accéder plus rapidement aux outils de développement.

-
-
- -

 

diff --git a/files/fr/mozilla/firefox/developer_edition/reverting/index.html b/files/fr/mozilla/firefox/developer_edition/reverting/index.html deleted file mode 100644 index 231da0448a..0000000000 --- a/files/fr/mozilla/firefox/developer_edition/reverting/index.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Supprimer les fonctionnalités spéciales -slug: Mozilla/Firefox/Developer_Edition/Reverting -translation_of: Mozilla/Firefox/Developer_Edition/Reverting ---- -
{{FirefoxSidebar}}

Changer le thème de la Developer Edition

- -

Si vous souhaitez utiliser la Developer Edition, mais que vous préférez utiliser le thème Australis utilisé dans Firefox et Firefox Beta, vous pouvez utiliser le thème normal de Firefox. Ouvrez le panneau « Personnaliser » et cliquez sur le bouton « Utiliser le thème Firefox Developer Edition ».

- -

{{EmbedYouTube("oiHt8T1Liyk")}}

- -

Vous pouvez également tapper “about:addons” dans la barre d'URL, sélectionner « Apparence » et changer le thème depuis cet endroit.

- -

Revenir à Firefox Aurora

- -

Si vous souhaitez toutes les fonctionnalités pre-Beta dans Firefox Developer Edition, mais que vous ne souhaitez aucun autre changement, vous pouvez revenir à l'ancien Firefox Aurora. Cette opération restaurera votre profil et vos données de session d'avant la mise à jour. C'est un processus en deux étapes, qu'il faut suivre dans cet ordre :

- -
    -
  1. Ouvrez la page Préférences de la Developer Edition, et décochez la case "Autoriser Firefox Developer Edition et Firefox à s'exécuter en parallèle". Il vous sera demandé de redémarrer le navigateur.
  2. -
  3. Après avoir redémarré, vous pouvez restaurer le thème de la Developer Edition en suivant les instructions de la section « Changer le thème de la Developper Edition » ci-dessus.
  4. -
- -

{{EmbedYouTube("8rEJn_hATE8")}}

diff --git a/files/fr/mozilla/firefox/firefox_esr/index.html b/files/fr/mozilla/firefox/firefox_esr/index.html deleted file mode 100644 index 594d9bbaa4..0000000000 --- a/files/fr/mozilla/firefox/firefox_esr/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Firefox ESR -slug: Mozilla/Firefox/Firefox_ESR -tags: - - ESR - - Firefox pour Bureau - - LTS - - Stratégie de Groupe - - Version au Support Allongé - - gpo -translation_of: Mozilla/Firefox/Firefox_ESR ---- -
{{FirefoxSidebar}}

Firefox Extended Support Release (ESR) est basé sur une version officielle de Firefox pour ordinateur, le public visé étant les entreprises qui ont besoin d'un support étendu dans le cadre de déploiements d'envergure. Contrairement aux autres canaux de distribution, les versions ESR ne sont pas mises à jour toutes les six semaines avec de nouvelles fonctionnalités ;  par contre, elles sont supportées pendant environ un an et reçoivent des correctifs en cas de problème de stabilité ou de risque de sécurité majeur. La version ESR actuelle se base sur Firefox 60 paru le 9 mai 2018.

- -

Nous encourageons fortement les utilisateurs de Firefox ESR à s'inscrire sur la liste de diffusion Enterprise Working Group (EWG).

diff --git a/files/fr/mozilla/firefox/headless_mode/index.html b/files/fr/mozilla/firefox/headless_mode/index.html deleted file mode 100644 index e852a2c775..0000000000 --- a/files/fr/mozilla/firefox/headless_mode/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Le mode headless -slug: Mozilla/Firefox/Headless_mode -tags: - - Automatisation - - Firefox - - Mode Headless - - QA - - node.js - - test -translation_of: Mozilla/Firefox/Headless_mode ---- -
{{FirefoxSidebar}}

Le mode « headless » permet d'utiliser Firefox mais sans afficher les éléments d'interface. Ça ne présente pas d'intérêt pour surfer sur le Web, mais cela permet de réaliser des tests automatisés. Cet article fournit les informations pertinentes pour pouvoir utiliser le mode headless de Firefox.

- -

Utiliser le mode headless

- -

Vous pouvez démarrer Firefox dans son mode headless grâce à une ligne de commande incluant le drapeau (flaTg) -headless. Par exemple :

- -
/chemin/vers/firefox -headless
- -

Pour le moment, nous n'avons pas inclus davantage d'options, mais plus seront ajoutées plus tard.

- -

Par exemple, nous travaillons à implémenter une option --screenshot, qui permettra de faire des captures d'écran depuis le mode headless de Firefox. Voir {{bug(1378010)}} pour suivre l'avancée.

- -

Prise en charge

- -

Le mode headless de Firefox fonctionne à partir de la version 55 sur Linux et à partir de la version 56+ sur Windows et Mac.

- -

Tests industrialisés à l'aide du mode headless

- -

La façon la plus utile d'utiliser ce mode headless est de faire tourner des tests industrialisés dans Firefox. Cela signifie que vous pouvez rendre votre processus de test bien plus efficace grâce à ce mode.

- -

Selenium

- -

Pour fournir un exemple d'utilisation du mode headless pour test industrialisés, nous allons créer un test recourant à Selenium via Node.js et selenium-webdriver. Pour cela, nous supposons que vous êtes déjà à l'aise avec les bases de Selenium, Webdriver et Node, puis que vous avez préparé un environnement de test. Si vous ne l'avez pas fait, rendez-vous sur le guide développant la mise en place d'un environnement de test, puis revenez lire cette documentation.

- -

Tout d'abord, soyez sûr d'avoir installé Node ainsi que selenium-webdriver sur votre machine. Ensuite, créez un nouveau fichier nommé selenium-test.js.

- -
-

Note : Vous pouvez également cloner ce dépôt : headless-examples qui contient un fichier de package. Il suffit donc de lancer npm install afin d'installer les dépendances nécessaires.

-
- -
    -
  1. -

    Ajouter quelques lignes de code. À l'intérieur de ce fichier, commencez en important le module principal selenium-webdriver, ainsi que le sous-module firefox :

    - -
    var webdriver = require('selenium-webdriver'),
    -    By = webdriver.By,
    -    until = webdriver.until;
    -
    -var firefox = require('selenium-webdriver/firefox');
    -
  2. -
  3. -

    Puis, créez un objet binary qui représente Firefox Nightly et ajouter l'argument -headless afin qu'il puisse être lancé avec ce mode :

    - -
    var binary = new firefox.Binary(firefox.Channel.NIGHTLY);
    -binary.addArguments("-headless");
    -
  4. -
  5. -

    Maintenant, créez une nouvelle instance de driver utilisant Firefox et utilisez setFirefoxOptions() afin d'inclure une option qui spécifiera que le test devra tourner sur le Nightly channel de Firefox (cette étape n'est pas nécessaire sur Linux, mais reste utile pour utiliser les fonctions avancées de la version Nightly de Firefox sur Windows/Mac tant que celle-ci n'est pas disponible en release) :

    - -
    var driver = new webdriver.Builder()
    -    .forBrowser('firefox')
    -    .setFirefoxOptions(new firefox.Options().setBinary(binary))
    -    .build();
    -
  6. -
  7. -

    Il faut maintenant ajouter la ligne de code qui initiera la navigation sur la page de recherche Google :

    - -
    driver.get('https://www.google.com');
    -driver.findElement(By.name('q')).sendKeys('webdriver');
    -
    -driver.sleep(1000).then(function() {
    -  driver.findElement(By.name('q')).sendKeys(webdriver.Key.TAB);
    -});
    -
    -driver.findElement(By.name('btnK')).click();
    -
    -driver.sleep(2000).then(function() {
    -  driver.getTitle().then(function(title) {
    -    if(title === 'webdriver - Google Search') {
    -      console.log('Test passed');
    -    } else {
    -      console.log('Test failed');
    -    }
    -  });
    -});
    -
    -driver.quit();
    -
  8. -
  9. -

    Enfin, démarrez le test en utilisant la commande suivante :

    - -
    node selenium-test
    -
  10. -
- -

Et c'est tout ! Après quelques secondes, vous devriez voir apparaître le message "Test passed" sur la console

- -

L'article Headless Firefox in Node.js with selenium-webdriver de Myk Melez continent d'autres conseils utiles pour créer un test industrialisé via Node.js et Selenium dans le mode headless.

- -

D'autres solutions de test

- -

Slimerjs supporte Firefox sur Linux et bientôt sur Mac et Windows. Voir l'article Headless SlimerJS with Firefox de Brendan Dahl pour plus détails.

- -

De plus, vous pourrez utiliser le mode headless de Firefox pour faire tourner des tests industrialisés développés dans la plupart des autres applications de tests, pour autant qu'elles permettent de définir une variable d'environnement.

- -

Dépannage et aide supplémentaire

- -

Si vous avez le moindre problème en utilisant le mode headless, ne vous inquiétez pas, nous sommes ici pour vous aider. Cette section a pour but de référencer toutes vos questions et les réponses que nous leur apportons.

- - - -

Si vous souhaitez poser une question à nos ingénieurs, le meilleur moyen est de se rendre sur le canal IRC #headless de Mozilla. Si vous êtes certain d'avoir trouvé un bug, documentez le sur la plateforme Mozilla Bugzilla.

- -

Voir aussi

- - diff --git a/files/fr/mozilla/firefox/le_protocole_about/index.html b/files/fr/mozilla/firefox/le_protocole_about/index.html deleted file mode 100644 index 0e6912b8a7..0000000000 --- a/files/fr/mozilla/firefox/le_protocole_about/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Firefox et le protocole "about" -slug: Mozilla/Firefox/Le_protocole_about -tags: - - Firefox - - Guide - - Mozilla - - Protocoles -translation_of: Mozilla/Firefox/The_about_protocol ---- -
{{FirefoxSidebar}}
- -

Il existe un grand nombre d'informations utiles à propos de Firefox cachées derrière le protocole d'URL about:. La plus utile est l'URL about:config qui affiche les préférences et les paramètres qui peuvent être consultés et modifiés. Voici la liste complète des URL du pseudo-protocole about: :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Page about:Description
about:aboutFournit un aperçu de toutes les pages about:
about:addonsGestionnaire de modules complémentaires
about:buildconfigAffiche la plate-forme et la configuration utilisées pour construire Firefox
about:cacheAffiche les informations sur les caches mémoire, disque et appcache
about:checkerboardPermet de diagnostiquer les apparitions de damiers à l'affichage
about:configFournit un moyen d'inspecter et modifier les préférences et paramètres de Firefox
about:crashesListe tous les plantages qui se sont produits pendant le fonctionnement de Firefox (dans le cas où l'utilisateur a activé les rapports de plantage)
about:creditsListe tous les contributeurs du projet Firefox
about:debuggingAffiche la page de déboguage des modules complémentaires
about:devtoolsIntroduction aux outils de développement
about:downloadsAffiche tous les téléchargements faits dans Firefox
about:homePage de démarrage de Firefox lors de l'ouverture d'une nouvelle fenêtre
about:licenseAffiche les informations de licence
about:logoLogo de Firefox
about:memoryFournit un moyen d'afficher l'utilisation de la mémoire, de l'enregistrer dans un rapport et de lancer les GC et CC
about:mozillaPage spéciale affichant un message extrait de l'ouvrage "Le Livre de Mozilla"
about:networkingAffiche des informations sur le réseau
about:newtabPage de démarrage à l'ouverture d'un nouvel onglet
about:performanceAffiche une indication de l'utilisation du processeur et de la mémoire des onglets/modules/processus
about:pluginsAffiche les informations sur les plugins installés
about:policiesListe les stratégies d'entreprise
about:preferencesParamètres de Firefox (également accessibles à partir du menu Firefox > Préférences)
about:privatebrowsingPage de démarrage lors de l'ouverture d'une fenêtre de navigation privée
about:profilesAffichages et gestion des profils
about:restartrequiredPage informant l'utilisateur de la nécessité d'un redémarage après une mise à jour
about:readerIndique qu'une page utilise le mode lecture
about:rightsAffiche des informations sur les droits
about:robotsPage spéciale affichant des remarques concernant les robots
about:serviceworkersAffiche les ServiceWorkers inscrits
about:sessionrestoreRestauration de session (affichée après un plantage de Firefox)
about:supportInformations de dépannage (également accessible à partir du menu Firefox > ? (point d'interrogation) > Informations de dépannage)
about:sync-logAffiche un protocole de synchronisation relatif à la fonctionnalité Sync
about:telemetryAffiche les données de télémétrie collectées et envoyées à Mozilla lorsque Firefox est en cours d'exécution (dans le cas où l'utilisateur a activé la télémétrie)
about:url-classifierAffiche le statut de la classification d'URL (utilisée pour les protections contre l'hameçonnage et les logiciels malveillants)
about:webrtcInformations sur l'utilisation de WebRTC
about:welcomePage affiché après l'installation de Firefox
about:welcomebackPage d'information affichée après la réinitialisation de Firefox
- -

Ces URL sont définies dans {{source("docshell/base/nsAboutRedirector.cpp")}}, à l'intérieur du tableau kRedirMap. Celui-ci couvre la plupart des URL, de config jusqu'aux URL du pseudo-protocole chrome:, comme chrome://global/content/config.xul. Les informations sur les emplacements about sont dupliquées dans {{source("docshell/build/nsDocShellModule.cpp")}}.

diff --git a/files/fr/mozilla/firefox/multiprocessus_firefox/index.html b/files/fr/mozilla/firefox/multiprocessus_firefox/index.html deleted file mode 100644 index 9a09652da6..0000000000 --- a/files/fr/mozilla/firefox/multiprocessus_firefox/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Firefox multiprocessus -slug: Mozilla/Firefox/Multiprocessus_Firefox -tags: - - multiprocessus -translation_of: Mozilla/Firefox/Multiprocess_Firefox ---- -
{{FirefoxSidebar}}

Dans les anciennes versions de Firefox pour bureau, le navigateur ne s'exécutait que dans un seul processus du système d'exploitation. En particulier, le JavaScript qui exécutait l'interface du navigateur (également connu sous le nom « code chrome ») s'exécutait habituellement dans le même processus que celui présent dans les pages web (appelé aussi « contenu » ou « contenu web »).

- -

Les dernières versions de Firefox exécutent l'interface du navigateur dans un processus différent de celui des pages web. Dans la première itération de cette architecture, tous les onglets tournent dans le même processus et l'interface du navigateur dans un processus différent. Dans les itérations suivantes, nous espérons avoir plus d'un processus pour le contenu. Le projet qui consiste à apporter le multiprocessus dans Firefox est appelé Electrolysis, qui correspond à l'abréviation e10s.

- -

Les pages web classiques ne sont pas affectées par l'apparition du multiprocessus dans Firefox. Les développeurs travaillant sur Firefox lui-même ou les extensions du navigateur seront affectés si leur code repose sur la possibilité d'accéder directement à du contenu web.

- -

Au lieu d'accéder au contenu directement, le JavaScript présent dans le code chrome devra utiliser le gestionnaire de messages pour accéder au contenu. Pour faciliter la transition, nous avons mis en place des objets (les Cross Process Object Wrappers) et vous pouvez vous référer à cette page pour découvrir les limitations des scripts chrome. Si vous développez des extensions, vous pouvez lire le guide pour travailler avec Firefox multiprocessus.

- -
-
-
-
-
Présentation technique
-
Une vision très haut niveau de comment le multiprocessus pour Firefox est mis en œuvre.
-
Guide de compatibilité du contenu web
-
Conseils et détails sur de potentiels problèmes de compatibilité des sites web qui peuvent arriver à cause de la transition. Remarque : il n'y en a pas beaucoup !
-
Glossaire
-
La définition du jargon utilisé dans le projet Electrolysis.
-
Gestionnaire de messages
-
Guide complet sur les objets utilisés pour communiquer entre le code chrome et le contenu.
-
Extensions basées sur le SDK
-
Comment migrer vos extensions en utilisant le SDK d'extensions.
-
Quelle URI se charge où
-
Un guide rapide sur quelles URI - chrome:, about:, file:, resource: - sont chargés dans chaque processus.
-
-
- -
-
-
Motivation
-
Pourquoi nous implémentons le multiprocessus dans Firefox : performance, sécurité et stabilité.
-
Guide de migration des extensions
-
Si vous êtes un développeur d'extension, apprenez si votre extension est affectée et comment mettre à jour votre code.
-
Objets CPOW
-
Les objets appelés Cross Process Object Wrappers sont une aide à la migration, permettant au code chrome d'accéder de manière synchrone au contenu.
-
Deboggage des processus du contenu
-
Comment déboguer du code fonctionnant dans le processus contenu.
-
Sélection d'onglet dans Firefox multiprocessus
-
Comment le passage entre les onglets marche dans Firefox multiprocessus.
-
-
-
- -
-
-
-
-
Limitations des scripts chrome
-
Les pratiques ne fonctionnant plus dans le code chrome et comment y remédier.
-
-
- -
-
-
Limitations des scripts avec privilèges
-
Les pratiques ne fonctionnant plus dans le code des scripts de cadre et comment y remédier.
-
-
-
- -
-

Contactez-nous

- -

Pour plus d'informations sur le projet, vous impliquer ou poser des questions :

- - diff --git a/files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html b/files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html deleted file mode 100644 index ed2b4828b4..0000000000 --- a/files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Motivation -slug: Mozilla/Firefox/Multiprocessus_Firefox/Motivation -translation_of: Mozilla/Firefox/Multiprocess_Firefox/Motivation ---- -
{{FirefoxSidebar}}

Il y a trois raisons qui nous poussent à faire tourner le contenu de Firefox dans un processus séparé : performance, sécurité, stabilité.

- -

Performance

- -

La plupart des travaux de Mozilla ces deux dernières années ont mis l'accent sur la réactivité du navigateur. Le but est de réduire les lenteurs de l'interface (jank) - c'est-à-dire quand le navigateur a l'air de se figer lors du chargement d'une grosse page, au remplissage d'un formulaire ou lors du défilement de la page. La réactivité devient plus importante que le débit sur le web aujourd'hui. Un gros du travail a été réalisé comme une partie du projet Snappy. En voici les principaux axes :

- - - -

Une grande partie de ces travaux a déjà été réalisée. Les points restants sont difficiles à résoudre. Par exemple, l'exécution de JavaScript se déroule dans le thread principal ce qui bloque la boucle d'évènements. Exécuter ces composants dans un thread séparé est difficile parce qu'ils accèdent à des données comme le DOM qui ne sont pas sécurisées dans le cas d'accès par différents threads. Comme alternative, nous avons envisagé de pouvoir exécuter la boucle d'évènements au milieu de l'exécution de JavaScript, mais cela briserait beaucoup d'hypothèses de différentes parties de Firefox (comme les extensions).

- -

Exécuter le contenu web dans un processus séparé est une alternative viable. Comme l'approche avec différents threads, Firefox est capable d'exécuter la boucle d'évènements pendant que le JavaScript et l'agencement s'exécutent dans un processus contenu. Mais, le code d'Interface Utilisateur n'a pas accès au contenu du DOM ou d'autres structures de données du contenu, il y a donc un besoin de verrouillage et de protection d'accès sur cette partie. L'inconvénient est que tout code présent dans le processus interface utilisateur de Firefox qui a besoin d'accéder au contenu doit le faire explicitement via un passage de messages.

- -

Nous pensons que ce compromis est logique pour plusieurs raisons :

- - - -

Sécurité

- -

Aujourd'hui, si quelqu'un découvre un bug exploitable dans Firefox, il est capable de prendre le contrôle des ordinateurs des utilisateurs. Il existe des solutions pour parer ce problème, la plus connue est la technique du bac à sable. Cette méthode ne nécessite pas une architecture multi-processus. Cependant, un bac à sable fonctionnant avec Firefox en processus unique ne serait pas très efficace. Les bacs à sable permettent seulement d'empêcher à un processus d'effectuer des actions qu'il ne devrait pas réaliser. Malheureusement, Firefox nécessite l'accès à bien plus de choses que le réseau et le système de fichiers (surtout lorsque des extensions sont installées). Ainsi, un bac à sable pour Firefox en processus unique ne pourrait pas bloquer grand-chose.

- -

Avec Firefox multi-processus, les processus contenus seront mis dans un bac à sable. Ainsi, un processus ne pourra pas accéder directement au système de fichiers, mais devra demander au processus principal. À ce moment, le processus principal pourra vérifier que la requête est sécurisée et logique. Par conséquent, le bac à sable peut être très restrictif. On espère que cette méthode rende plus difficile l'exploitation de trous de sécurité dans Firefox.

- -

Stabilité

- -

Actuellement, un plantage dans un code s'exécutant dans une page va faire tomber le navigateur en entier. Avec Firefox multi-processus, seul le processus du contenu qui s'est planté sera détruit.

- -
-

Cette page contient pas mal de contenu provenant de l'article de blog de Bill McCloskey's sur Firefox multi-processus : http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/ (en)

-
- -

 

diff --git a/files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html b/files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html deleted file mode 100644 index 92839d64e2..0000000000 --- a/files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Vue d'ensemble technique -slug: Mozilla/Firefox/Multiprocessus_Firefox/Technical_overview -translation_of: Mozilla/Firefox/Multiprocess_Firefox/Technical_overview ---- -
{{FirefoxSidebar}}
-

Cette page est une traduction d'un extrait de l'article du blog Bill McCloskey sur Firefox et le multiprocessus: http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/

-
- -

À un haut niveau, le Firefox en multiprocessus fonctionne comme il suit. Le processus qui est démarré quand Firefox est lancé est appelé le processus parent. Initialement, ce processus fonctionne de la même manière que Firefox lorsqu'il fonctionne avec un seul processus: une fenêtre est ouverte affichant browser.xul, qui contient les éléments principaux de l'UI pour Firefox. Firefox a un toolkit pour les GUI appelé XUL qui permet aux éléments de l'interface d'être déclaré et posés de façon déclarative, de la même manière que pour du contenu web. Tout comme le contenu web, il y a un objet  window, qui a une propriété document, et celui-ci contient tout les éléments XML déclarés dans browser.xul. Tous les menus, barres d'outils, sidebars, et onglets dans Firefox sont des éléments XML dans ce document. Chaque onglet contient un élément <browser> pour afficher le contenu web.

- -

Le premier endroit où Firefox multiprocessus diverge de sa version en monoprocessus est que chaque élément <browser> a un attribut remote="true". Quand un tel élément est ajouté au document, un nouveau processus, appelé child process, pour le contenu est lancé. Un canal IPC est créé qui relie processus parent et enfant. Initialement l'enfant affiche about:blank, mais le parent peut envoyer des commandes à l'enfant pour naviguer autre part.

- -

Rendu

- -

D'une certaine manière, le contenu Web affiché doit passer du processus enfant au parent, puis à l'écran. Le multiprocessus de Firefox dépend d'une nouvelle fonctionnalité appelée off main thread compositing (OMTC). En bref chaque fenêtre de Firefox est divisée en séries de couches, en quelque sorte similaire au calque de Photoshop. Chaque fois que Firefox effectue un rendue de la page Web, ces couches sont soumises à un thread de composition qui traduit les couches et les associent en semble pour former la page qui est ensuite dessinée.

- -

Les calques sont structurés comme un arbre. La couche racine de l'arbre est responsable de l'ensemble de la fenêtre de Firefox. Cette couche contient d'autres couches, dont certaines sont responsables de l'élaboration des menus et des onglets. Une sous-couche affiche tout le contenu Web. Le contenu Web lui-même peut être divisé en plusieurs couches, mais ils sont tous enracinés dans une seule couche "content".

- -

Dans le multiprocessus de Firefox, la sous-couche de la couche de contenu est en fait une cale. La plupart du temps, il contient un noeud de substitution qui conserve simplement une référence à la liaison IPC avec le processus enfant. Le processus de contenu conserve l'arborescence de couches réelle pour le contenu Web. Il construit et dessine dans cet arbre de couche. Lorsqu'il a terminé, il envoie la structure de son arbre de couche au processus parent via IPC. Les tampons de sauvegarde sont partagés avec le parent soit par la mémoire partagée, soit par la mémoire GPU. Les références à cette mémoire sont envoyées dans une parti de l'arborescence de l'arbre. Lorsque le parent reçoit l'arborescence de la couche, il supprime son nœud de substitution et le remplace par l'arbre réel du contenu. Ensuite, il compose et dessine comme d'habitude. Lorsqu'il a terminé, il remet sont nœud de substitution.

- -

L'architecture de base de la façon dont OMTC fonctionne avec plusieurs processus existe depuis un certain temps, car il est nécessaire pour Firefox OS. Cependant, Matt Woodrow et David Anderson travail beaucoup pour que tout fonctionne correctement sur Windows, Mac et Linux. L'un des grands défis pour le multiprocessus de Firefox serait d'utiliser OMTC sur toutes les plates-formes. À l'heure actuelle, seuls la plate-forme Mac l'utilisent par défaut.

- -

User input

- -

Events in Firefox work the same way as they do on the web. Namely, there is a DOM tree for the entire window, and events are threaded through this tree in capture and bubbling phases. Imagine that the user clicks on a button on a web page. In single-process Firefox, the root DOM node of the Firefox window gets the first chance to process the event. Then, nodes lower down in the DOM tree get a chance. The event handling proceeds down through to the XUL <browser> element. At this point, nodes in the web page’s DOM tree are given a chance to handle the event, all the way down to the button. The bubble phase follows, running in the opposite order, all the way back up to the root node of the Firefox window.

- -

With multiple processes, event handling works the same way until the <browser> element is hit. At that point, if the event hasn’t been handled yet, it gets sent to the child process by IPC, where handling starts at the root of the content DOM tree. The parent process then waits to run its bubbling phase until the content process has finished handling the event.

- -

Inter-process communication

- -

All IPC happens using the Chromium IPC libraries. Each child process has its own separate IPC link with the parent. Children cannot communicate directly with each other. To prevent deadlocks and to ensure responsiveness, the parent process is not allowed to sit around waiting for messages from the child. However, the child is allowed to block on messages from the parent.

- -

Rather than directly sending packets of data over IPC as one might expect, we use code generation to make the process much nicer. The IPC protocol is defined in IPDL, which sort of stands for “inter-* protocol definition language”. A typical IPDL file is PNecko.ipdl. It defines a set messages and their parameters. Parameters are serialized and included in the message. To send a message M, C++ code just needs to call the method SendM. To receive the message, it implements the method RecvM.

- -

IPDL is used in all the low-level C++ parts of Gecko where IPC is required. In many cases, IPC is just used to forward actions from the child to the parent. This is a common pattern in Gecko:

- -
void AddHistoryEntry(param) {
-  if (XRE_GetProcessType() == GeckoProcessType_Content) {
-    // If we're in the child, ask the parent to do this for us.
-    SendAddHistoryEntry(param);
-    return;
-  }
-
-  // Actually add the history entry...
-}
-
-bool RecvAddHistoryEntry(param) {
-  // Got a message from the child. Do the work for it.
-  AddHistoryEntry(param);
-  return true;
-}
-
- -

When AddHistoryEntry is called in the child, we detect that we’re inside the child process and send an IPC message to the parent. When the parent receives that message, it calls AddHistoryEntry on its side.

- -

For a more realistic illustration, consider the Places database, which stores visited URLs for populating the awesome bar. Whenever the user visits a URL in the content process, we call this code. Notice the content process check followed by the SendVisitURI call and an immediate return. The message is received here; this code just calls VisitURI in the parent.

- -

The code for IndexedDB, the places database, and HTTP connections all runs in the parent process, and they all use roughly the same proxying mechanism in the child.

- -

Frame scripts

- -

IPDL takes care of passing messages in C++, but much of Firefox is actually written in JavaScript. Instead of using IPDL directly, JavaScript code relies on the message manager to communicate between processes. To use the message manager in JS, you need to get hold of a message manager object. There is a global message manager, message managers for each Firefox window, and message managers for each <browser> element. A message manager can be used to load JS code into the child process and to exchange messages with it.

- -

As a simple example, imagine that we want to be informed every time a load event triggers in web content. We’re not interested in any particular browser or window, so we use the global message manager. The basic process is as follows:

- -
// Get the global message manager.
-let mm = Cc["@mozilla.org/globalmessagemanager;1"].
-         getService(Ci.nsIMessageListenerManager);
-
-// Wait for load event.
-mm.addMessageListener("GotLoadEvent", function (msg) {
-  dump("Received load event: " + msg.data.url + "\n");
-});
-
-// Load code into the child process to listen for the event.
-mm.loadFrameScript("chrome://content/content-script.js", true);
-
- -

For this to work, we also need to have a file content-script.js:

- -
// Listen for the load event.
-addEventListener("load", function (e) {
-  // Inform the parent process.
-  let docURL = content.document.documentURI;
-  sendAsyncMessage("GotLoadEvent", {url: docURL});
-}, false);
-
- -

This file is called a frame script. When the loadFrameScript function call runs, the code for the script is run once for each <browser> element. This includes both remote browsers and regular ones. If we had used a per-window message manager, the code would only be run for the browser elements in that window. Any time a new browser element is added, the script is run automatically (this is the purpose of the true parameter to loadFrameScript). Since the script is run once per browser, it can access the browser’s window object and docshell via the content and docShell globals.

- -

The great thing about frame scripts is that they work in both single-process and multiprocess Firefox. To learn more about the message manager, see the message manager guide.

- -

Cross-process APIs

- -

There are a lot of APIs in Firefox that cross between the parent and child processes. An example is the webNavigation property of XUL <browser> elements. The webNavigation property is an object that provides methods like loadURI, goBack, and goForward. These methods are called in the parent process, but the actions need to happen in the child. First I’ll cover how these methods work in single-process Firefox, and then I’ll describe how we adapted them for multiple processes.

- -

The webNavigation property is defined using the XML Binding Language (XBL). XBL is a declarative language for customizing how XML elements work. Its syntax is a combination of XML and JavaScript. Firefox uses XBL extensively to customize XUL elements like <browser> and <tabbrowser>. The <browser> customizations reside in browser.xml. Here is how browser.webNavigation is defined:

- -
<field name="_webNavigation">null</field>
-
-<property name="webNavigation" readonly="true">
-   <getter>
-   <![CDATA[
-     if (!this._webNavigation)
-       this._webNavigation = this.docShell.QueryInterface(Components.interfaces.nsIWebNavigation);
-     return this._webNavigation;
-   ]]>
-   </getter>
-</property>
-
- -

This code is invoked whenever JavaScript code in Firefox accesses browser.webNavigation, where browser is some <browser> element. It checks if the result has already been cached in the browser._webNavigation field. If it hasn’t been cached, then it fetches the navigation object based off the browser’s docshell. The docshell is a Firefox-specific object that encapsulates a lot of functionality for loading new pages, navigating back and forth, and saving page history. In multiprocess Firefox, the docshell lives in the child process. Since the webNavigation accessor runs in the parent process, this.docShell above will just return null. As a consequence, this code will fail completely.

- -

One way to fix this problem would be to create a fake docshell in C++ that could be returned. It would operate by sending IPDL messages to the real docshell in the child to get work done. We may eventually take this route in the future. We decided to do the message passing in JavaScript instead, since it’s easier and faster to prototype things there. Rather than change every docshell-using accessor to test if we’re using multiprocess browsing, we decided to create a new XBL binding that applies only to remote <browser> elements. It is called remote-browser.xml, and it extends the existing browser.xml binding.

- -

The remote-browser.xml binding returns a JavaScript shim object whenever anyone uses browser.webNavigation or other similar objects. The shim object is implemented in its own JavaScript module. It uses the message manager to send messages like "WebNavigation:LoadURI" to a content script loaded by remote-browser.xml. The content script performs the actual action.

- -

The shims we provide emulate their real counterparts imperfectly. They offer enough functionality to make Firefox work, but add-ons that use them may find them insufficient. I’ll discuss strategies for making add-ons work in more detail later.

- -

Cross-process object wrappers

- -

The message manager API does not allow the parent process to call sendSyncMessage; that is, the parent is not allowed to wait for a response from the child. It’s detrimental for the parent to wait on the child, since we don’t want the browser UI to be unresponsive because of slow content. However, converting Firefox code to be asynchronous (i.e., to use sendAsyncMessage instead) can sometimes be onerous. As an expedient, we’ve introduced a new primitive that allows code in the parent process to access objects in the child process synchronously.

- -

These objects are called cross-process object wrappers, frequently abbreviated to CPOWs. They’re created using the message manager. Consider this example content script:

- -
addEventListener("load", function (e) {
-  let doc = content.document;
-  sendAsyncMessage("GotLoadEvent", {}, {document: doc});
-}, false);
-
- -

In this code, we want to be able to send a reference to the document to the parent process. We can’t use the second parameter to sendAsyncMessage to do this: that argument is converted to JSON before it is sent up. The optional third parameter allows us to send object references. Each property of this argument becomes accessible in the parent process as a CPOW. Here’s what the parent code might look like:

- -
let mm = Cc["@mozilla.org/globalmessagemanager;1"].
-         getService(Ci.nsIMessageListenerManager);
-
-mm.addMessageListener("GotLoadEvent", function (msg) {
-  let uri = msg.objects.document.documentURI;
-  dump("Received load event: " + uri + "\n");
-});
-mm.loadFrameScript("chrome://content/content-script.js", true);
-
- -

It’s important to realize that we’re send object references. The msg.objects.document object is only a wrapper. The access to its documentURI property sends a synchronous message down to the child asking for the value. The dump statement only happens after a reply has come back from the child.

- -

Because every property access sends a message, CPOWs can be slow to use. There is no caching, so 1,000 accesses to the same property will send 1,000 messages.

- -

Another problem with CPOWs is that they violate some assumptions people might have about message ordering. Consider this code:

- -
mm.addMessageListener("GotLoadEvent", function (msg) {
-  mm.sendAsyncMessage("ChangeDocumentURI", {newURI: "hello.com"});
-  let uri = msg.objects.document.documentURI;
-  dump("Received load event: " + uri + "\n");
-});
-
- -

This code sends a message asking the child to change the current document URI. Then it accesses the current document URI via a CPOW. You might expect the value of uri to come back as "hello.com". But it might not. In order to avoid deadlocks, CPOW messages can bypass normal messages and be processed first. It’s possible that the request for the documentURI property will be processed before the "ChangeDocumentURI" message, in which case uri will have some other value.

- -

For this reason, it’s best not to mix CPOWs with normal message manager messages. It’s also a bad idea to use CPOWs for anything security-related, since you may not get results that are consistent with surrounding code that might use the message manager.

- -

Despite these problems, we’ve found CPOWs to be useful for converting certain parts of Firefox to be multiprocess-compatible. It’s best to use them in cases where users are less likely to notice poor responsiveness. As an example, we use CPOWs to implement the context menu that pops up when users right-click on content elements. Whether this code is asynchronous or synchronous, the menu cannot be displayed until content has responded with data about the element that has been clicked. The user is unlikely to notice if, for example, tab animations don’t run while waiting for the menu to pop up. Their only concern is for the menu to come up as quickly as possible, which is entirely gated on the response time of the content process. For this reason, we chose to use CPOWs, since they’re easier than converting the code to be asynchronous.

- -

It’s possible that CPOWs will be phased out in the future. Asynchronous messaging using the message manager gives a user experience that is at least as good as, and often strictly better than, CPOWs. We strongly recommend that people use the message manager over CPOWs when possible. Nevertheless, CPOWs are sometimes useful.

diff --git a/files/fr/mozilla/firefox/privacy/index.html b/files/fr/mozilla/firefox/privacy/index.html deleted file mode 100644 index 3b51c404fe..0000000000 --- a/files/fr/mozilla/firefox/privacy/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Privacy -slug: Mozilla/Firefox/Privacy -tags: - - Privacy - - Security -translation_of: Mozilla/Firefox/Privacy ---- -
{{FirefoxSidebar}}
- -
Ce document liste la documentation relative à la confidentialité.
- -
 
- -

{{ ListSubpages () }}

diff --git a/files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html b/files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html deleted file mode 100644 index f466aef11f..0000000000 --- a/files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Protection contre le pistage -slug: Mozilla/Firefox/Privacy/protection_contre_le_pistage -tags: - - Bloquage - - Pistage - - Privé - - Vie privée -translation_of: Mozilla/Firefox/Privacy/Tracking_Protection ---- -
{{FirefoxSidebar}}

Qu'est-ce que la protection contre le pistage ?

- -

Depuis la version 42, Firefox pour bureau et Firefox pour Android incluent une protection contre le pistage. En navigation privée, Firefox bloque le contenu chargé depuis des domaines qui pistent les utilisateurs à travers les sites.

- -

Certains contenus bloqués font partie de la mise en page, et les utilisateurs pourraient constater des problèmes de mise en page lorsque Firefox bloque ces chargements. Parfois, lorsque la page fonctionne de telle manière que d'autres éléments remplissent les espaces laissés par les éléments bloqués, les utilisateurs ne remarqueront rien.

- -

Quand Firefox bloque un contenu, il écrit un message dans la console web comme ceci :

- -
The resource at "http://some/url" was blocked because tracking protection is enabled.
- -

Notez qu'avec Firefox pour Android, vous pouvez accéder à la sortie de la console en utilisant le debogueur distant.

- -

L'interface utilisateur de Firefox indiquera aux utilisateurs quand un contenu a été bloqué et leur permet de le débloquer pour la session en cours s'ils le souhaitent. Les utilisateurs pourront aussi  désactiver complêtement les protections contre le pistage s'ils le souhaitent.

- -

Comment Firefox choisit quoi bloquer ?

- -

Le contenu est bloqué selon le domaine à partir duquel il est chargé.

- -

Firefox contient une liste de sites qui ont été identifiés comme étant engagés dans une politique de suivi des utilisateurs au travers des différents sites visités. Quand la protection anti-tracking est activée, Firefox bloque le contenu provenant des sites de cette listes.

- -

Les sites surveillant les utilisateurs sont, le plus souvent, des sites tiers de publicité et d'analyse.

- -

Ce que cela signifie pour votre site

- -

Bien évidemment, cela signifie que quand la protection anti-pistage est activée:

- - - -

Plus subtilement, si d'autres parties de votre site dependent de pisteurs pour être chargés, alors ces parties ne seront pas fonctionnelles quand la protection anti-pistage est activées. Par exemple, si votre site inclus un rappel qui se lance quand le contenu d'un site de pistage est chargé, alors le rappel ne sera pas utilisé.

- -

Par exemple, vous ne devez pas utiliser Google Analytics de cette façon :

- -
<a href="http://www.example.com" onclick="trackLink('http://www.example.com', event);">Visit example.com</a>
-<script>
-function trackLink(url,event) {
-    event.preventDefault();
-    ga('send', 'event', 'outbound', 'click', url, {
-     'transport': 'beacon',
-     'hitCallback': function() {
-       document.location = url;
-     }
-   });
-}
-</script>
- -

A la place, vous devez prendre en compte le cas où Google Analytics est manquant vérifiant si l'objet `ga` est initialisé :

- -
<a href="http://www.example.com" onclick="trackLink('http://www.example.com', event);">Visit example.com</a>
-<script>
-function trackLink(url,event) {
-    event.preventDefault();
-    if (window.ga && ga.loaded) {
-         ga('send', 'event', 'outbound', 'click', url, {
-         'transport': 'beacon',
-         'hitCallback': function() { document.location = url; }
-       });
-    } else {
-        document.location = url;
-    }
-}
-</script>
-
- -

Pour plus d'information sur cette technique : Google Analytics, Privacy, and Event Tracking.

- -

A noter qu'être dependant de l'utilisation de l'outil tiers de cette manière n'est pas une bonne pratique, car cela veut dire que votre site peut être cassé si l'outil tiers est lent ou inaccessible, ou si le tracker est bloqué par un add-on.

diff --git a/files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html b/files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html deleted file mode 100644 index 1e93b3b26b..0000000000 --- a/files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Protection contre le pistage par redirection -slug: Mozilla/Firefox/Privacy/protection_du_pistage_par_rebond -tags: - - Firefox - - Mozilla - - Vie privée - - bounce tracking - - protection contre le pistage par redirection - - redirect tracking -translation_of: Mozilla/Firefox/Privacy/Redirect_tracking_protection ---- -
{{FirefoxSidebar}}
- -

Firefox 79 inclut une protection contre le pistage par redirection. Ce document décrit le fonctionnement de ces protections.

- -

Définition du pistage par redirection

- -

Le pistage par redirection est un abus de la navigation intersite dans lequel un traqueur redirige momentanément un utilisateur ou une utilisatrice vers son site web dans le but d’utiliser le stockage de première partie (first-party) pour suivre cet utilisateur ou cette utilisatrice à travers les sites web.

- -

Les navigations intersites sont une caractéristique essentielle du web. Une personne peut rechercher les « meilleures chaussures de course » sur un moteur de recherche, cliquer sur un résultat de recherche pour lire des critiques et enfin cliquer sur un lien pour acheter une paire de chaussures dans un magasin en ligne. Dans le passé, chacun de ces sites web pouvait intégrer des ressources provenant du même traqueur, et le traqueur pouvait utiliser ses cookies pour relier toutes ces visites de page à la même personne. Afin de protéger la vie privée des utilisateurs et utilisatrices de Firefox, la Protection renforcée contre le pistage (ETP pour Enhanced Tracking Protection) empêche déjà les traqueurs d’utiliser des cookies lorsqu’ils sont intégrés dans un contexte tiers, mais leur permet toujours d’utiliser des cookies en tant que première partie, car le blocage des cookies de première partie provoque le dysfonctionnement de sites web. Le pistage par redirection en profite pour contourner le blocage des cookies de tiers.

- -

Les traqueurs de redirection fonctionnent en vous obligeant à faire une escale imperceptible et momentanée sur leur site web dans le cadre de ce voyage. Ainsi, au lieu de naviguer directement du site web de comparaison au détaillant, vous finirez par naviguer d’abord vers le traqueur de redirection plutôt que vers le commerçant. Cela signifie que le traqueur est chargé en tant que première partie. Le traqueur de redirection associe les données de pistage aux identifiants qu’il a stockés dans ses cookies de première partie et vous achemine ensuite vers le commerçant.

- -

La protection contre le pistage par redirection expliquée

- -

Pour protéger contre le pistage par redirection, Firefox supprime périodiquement les cookies et données de site provenant des traqueurs. Nous effaçons uniquement ces données du stockage si l’utilisateur ou l’utilisatrice bloque les cookies traqueurs (c.-à-d. que la préférence network.cookie.cookieBehavior est réglée sur 4). La prise en charge d’autres politiques de cookies est suivie dans le bug 1643045.

- -

Quelles origines sont supprimées ?

- -

Une origine sera supprimée si elle remplit les conditions suivantes :

- -
    -
  1. Elle a stocké des cookies ou a accédé à un autre stockage de site (comme localStorage, IndexedDB ou Cache API) dans les dernières 72 heures. Comme les cookies sont assignés par hôte, nous supprimerons les variantes d’origine http et https d’un hôte de cookies.
  2. -
  3. L’origine est répertoriée en tant que traqueur dans la liste de notre protection contre le pistage.
  4. -
  5. Aucune origine disposant du même domaine de base (eTLD+1) n’a de permission d’interaction avec l’utilisateur ou l’utilisatrice. -
      -
    • Cette permission est accordée à une origine pour 45 jours dès qu’un utilisateur ou une utilisatrice interagit avec un document de premier niveau de cette origine. Une « interaction » peut être un défilement.
    • -
    • Bien que cette autorisation soit stockée à un niveau par origine, nous vérifierons si une origine ayant le même domaine de base l’a, pour éviter de casser les sites avec des sous-domaines et une configuration de cookies correspondante.
    • -
    -
  6. -
- -

Quelles données sont supprimées ?

- -

Firefox supprimera les données suivantes :

- - - -
-

Note : même si nous effaçons toutes ces données, nous ne marquons actuellement les origines pour suppression que lorsqu’elles utilisent des cookies ou d’autres moyens de stockage du site.

-
- -

La suppression du stockage ignore les attributs d’origine. Cela signifie que le stockage sera supprimé dans les containers et le stockage isolé (comme celui de lisolement de la première partie (First-Party)).

- -

À quelle fréquence les données sont-elles supprimées ?

- -

Firefox efface le stockage en fonction du déclenchement d’un événement interne appelé idle-daily, qui est défini par les conditions suivantes :

- - - -

Cela signifie qu’il y a au moins 24 heures entre chaque effacement de stockage et que le stockage sera uniquement effacé quand le navigateur est inactif. Lorsque nous supprimons des cookies, nous classons les cookies par date de création et nous les regroupons par lots de 100 (contrôlés par la préférence privacy.purge_trackers.max_purge_count) pour des raisons de performance.

- -

Débogage

- -

Le pistage par redirection peut être activé et désactivé en inversant la préférence privacy.purge_trackers.enabled dans about:config. En outre, il ne fonctionnera que si la préférence network.cookie.cookieBehavior est réglée sur 4 ou 5 dans Firefox 79+ (1, 3, 4, ou 5 à partir de Firefox 80).

- -

Différents niveaux de journalisation peuvent être déterminés grâce à la préférence privacy.purge_trackers.logging.level.

- -

Pour le débogage, il est plus facile de déclencher l’effacement du stockage en déclenchant le service directement par la ligne de commande de la console du navigateur. Remarquez que c’est différent de la console web que vous pouvez utiliser pour déboguer un site web et cela nécessite que la préférence devtools.chrome.enabled soit réglée sur true pour l’utiliser interactivement. Une que vous avez activé la console du navigateur, vous pouvez déclencher la suppression du stockage en exécutant la commande suivante :

- -
await Components.classes["@mozilla.org/purge-tracker-service;1"].getService(Components.interfaces.nsIPurgeTrackerService).purgeTrackingCookieJars()
- -

L’intervalle de temps jusqu’à ce que les permissions d’interaction avec l’utilisateur ou l’utilisatrice expirent peut être réglé à un niveau inférieur grâce à la préférence privacy.userInteraction.expiration. Notez que vous aurez à régler cette préférence avant de consulter les sites que vous désirez tester –  elle ne s’appliquera pas rétroactivement.

- -

Autres mises en œuvre

- -

WebKit a livré en premier la protection contre le pistage par redirection dans ITP 2.0 (ils se réfèrent à la même attaque en l’appelant pistage par rebond (bounce tracking)). À compter de juillet 2020, il y a plusieurs différences importantes entre la mise en œuvre dans WebKit et dans Firefox :

- - diff --git a/files/fr/mozilla/firefox/versions/14/index.html b/files/fr/mozilla/firefox/versions/14/index.html deleted file mode 100644 index 95e45a7a02..0000000000 --- a/files/fr/mozilla/firefox/versions/14/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Firefox 14 pour les développeurs -slug: Mozilla/Firefox/Versions/14 -tags: - - Firefox - - Firefox 14 -translation_of: Mozilla/Firefox/Releases/14 ---- -
{{FirefoxSidebar}}

Firefox 14, basé sur Gecko 14.0, est sorti le 17 juillet 2012. Cette page résume les principaux changements dans Firefox 14 qui sont utiles aux développeurs.

- -

Changements pour les développeurs Web

- -

HTML

- - - -

DOM

- - - -

CSS

- - - -

MathML

- - - -

HTTP

- - - -

Changements pour les développeurs de Mozilla et de modules complémentaires

- -

Modules de code JavaScript

- -

source-editor.jsm

- - - -

XUL

- - - -

Interfaces

- - - -

Vérification orthographique

- - - -

Voir également

- -

{{Firefox_for_developers('13')}}

diff --git a/files/fr/mozilla/firefox_pour_android/index.html b/files/fr/mozilla/firefox_pour_android/index.html deleted file mode 100644 index 089098ad99..0000000000 --- a/files/fr/mozilla/firefox_pour_android/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Firefox pour Android -slug: Mozilla/Firefox_pour_Android -tags: - - Firefox - - Mobile - - NeedsContent - - NeedsUpdate -translation_of: Mozilla/Firefox_for_Android ---- -

Pour de plus en plus de gens, les appareils mobiles sont le premier, voire le seul moyen d'accéder au Web. Firefox pour Android (nom de code Fennec) est un navigateur ouvert, modifiable, basé sur les standards, comme la version de Firefox pour les ordinateurs.

- -

Firefox pour Android construit son interface graphique avec des widgets Android natifs plutôt qu'avec XUL : cela améliore largement les performances, particulièrement le temps de démarrage et la consommation mémoire.

- -

Contribuer à Firefox pour Android

- -

Le point de départ pour obtenir des informations à propos du projet Firefox pour Android est la page Wiki du projet.

- -

Vous pouvez nous aider à créer et améliorer Firefox pour Android :

- - - -

Développer pour le web mobile

- -

Nous avons démarré un guide pour concevoir des sites web pour les appareils mobiles.

- -

Avec Firefox pour Android, vous avez accès à des APIs qui exploitent toutes les capacités de l'appareil, réduisant les différences entre les applications Web et natives :

- - - -

Pour tester votre site web sur Firefox pour Android, vous pouvez l'installer sur un appareil Android ou l'exécuter sur votre ordinateur en utilisant l'émulateur Android.

- -

Construire des add-ons pour mobile

- -

Firefox pour Android supporte les add-ons et utilise exactement le même système d'extension que celui utilisé par toutes les autres applications basées sur Gecko. Nous n'avons pas inventé un nouveau système d'add-on. Cela signifie que construire un add-on pour Firefox pour Android est le même procédé que celui qui serait utilisé sur ordinateur. Les add-ons qui fonctionnent sur Firefox pour ordinateur ne fonctionnent pas automatiquement sur Firefox pour Android. Les interfaces graphiques y sont vraiment trop différentes.

- -
Firefox pour Android a un identifiant unique d'application qui doit être utilisé dans install.rdf. L'identifiant est {aa3c5121-dab2-40e2-81ca-7ea25febc110}
- -

Les deux approches d'add-ons, avec redémarrage ou sans redémarrage requis sont supportés. Il est préférable d'utiliser l'approche sans redémarrage dès que possible, puisque l'expérience utilisateur est largement meilleure que de forcer le redémarrage de l'application lorsqu'on installe ou supprime un add-on.

- -

Aperçu rapide

- - - -

Obtenir de l'aide avec Firefox pour Android

- -

La documentation et les tutoriels pour utiliser Firefox pour Android et résoudre vos problèmes sont disponibles sur le site de support de Mozilla.

diff --git a/files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html b/files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html deleted file mode 100644 index 680e19bed5..0000000000 --- a/files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Tester la compatibilité des sites avec Firefox pour Android -slug: Mozilla/Firefox_pour_Android/Test_Compatibilite -tags: - - AQ - - Compatibilité - - Firefox - - Guide - - Mobile -translation_of: Mozilla/Firefox_for_Android/Compatibility_Testing ---- -

Résumé

-

Notre objectif est d'ouvrir le Web mobile à tous les navigateurs mobiles à travers la promotion des standards et des bonnes pratiques.

-

Cependant, de nombreux sites servent à Firefox pour Android un contenu qui ne fonctionne pas bien ou qui est différent de celui pour les autres navigateurs mobiles. Ce contenu peut être :

- -

Nous désignons cette catégorie de problèmes, comme des problèmes de compatibilité Web. Les problèmes de compatibilité Web sont principalement issus d'une ou plusieurs des causes suivantes :

-
-
- Détection de l'agent utilisateur (UA-sniffing)
-
- Identifier le navigateur par sa chaîne d'agent utilisateur (user-agent) et envoyer un contenu différent.
-
- Utiliser des propriétés CSS non standards (principalement Webkit)
-
- Utiliser des propriétés CSS non standard que le navigateur ne reconnaît pas, causant des problèmes de mise en page et de style
-
- Utiliser des propriétés DOM non standard (principalement Webkit)
-
- Utiliser des propriétés DOM non standards en JavaScript que le navigateur ne reconnaît pas, causant des problèmes fonctionnels
-
- Limitation navigateur
-
- Utiliser des propriétés standards CSS et DOM que le navigateur ne reconnaît pas actuellement, ou qui posent des problèmes fonctionnels ou de performance.
-
-

Pour Firefox en particulier, nous avons besoin de votre aide pour identifier les sites qui ne fonctionnent pas bien, en signalant les problèmes spécifiques que vous avez trouvés lors de votre enquête. D'autres fabricants de navigateurs ont leurs propres systèmes d'alertes, dans lesquels vous pouvez signaler tout problème survenant aussi avec leur navigateur.

-

Ci-dessous sont détaillées les étapes que vous pouvez suivre pour identifier et signaler les sites problématiques.

-

Préparation

-

Pour démarrer, préparons notre matériel et nos logiciels pour des tests de compatibilité.

-
    -
  1. Un téléphone Android est un pré-requis pour tester Firefox pour Android. Assurez-vous que votre téléphone est supporté en consultant la liste des appareils supportés par Firefox pour Android.
  2. -
  3. Installer Firefox pour Android depuis Google Play.
  4. -
  5. Installer l'add-on Phony pour Firefox pour Android. Cet add-on permet de faire passer Firefox pour Android pour un autre navigateur en remplaçant sa chaîne agent utilisateur par celle d'un autre navigateur pour chaque requête HTTP.
  6. -
  7. Créer un compte sur Bugzilla pour que vous puissiez signaler les problèmes rencontrés.
  8. -
-

Étapes facultatives :

- -
-

Note : Voir l'article Détection du navigateur par l'agent-utilisateur pour une explication détaillée sur les agents-utilisateurs des navigateurs.

-
-

Tester la compatibilité

-

Les étapes suivantes vous guideront selon la méthodologie utilisée par Mozilla AQ (Assurance Qualité) lors des tests de compatibilité :

-
    -
  1. Choisissez un site à tester. -
      -
    • Il peut s'agir d'un site que vous avez déjà visité et sur lequel vous avez constaté un problème lors de vos navigations quotidiennes.
    • -
    • Sinon, vous pouvez choisir un des principaux sites listés dans le rapport Are We Compatible Yet. Les sites qui n'ont pas été analysés sont affichés en blanc.
    • -
    -
  2. -
  3. Ouvrez le site que vous avez choisi avec Firefox pour Android. Testez son fonctionnement en explorant les différentes parties du site. Par exemple, si le site affiche des articles, des photos, et des vidéos, vous pouvez explorer ces trois parties du site. Cliquez sur les liens, utilisez les formulaires, créez des comptes, identifiez-vous, et posez les questions : -
      -
    1. Est-ce que ce site est pour ordinateur de bureau ? Si oui, sautez directement au point 3 ou 4 pour déterminer si Safari sur iPhone et le navigateur d'Android reçoivent le même contenu.
    2. -
    3. Est-ce que le site a de flagrants problèmes de mise en page ? Est-ce que les éléments sont positionnées les uns sur les autres ? Est-ce qu'il manque du contenu ? Est-ce que les menus sont correctement affichés ? Est-ce que les couleurs de fonds de l'en-tête sont correctes ? Est-ce que certaines zones de la page sont affichées correctement ? Est-ce que le site apparaît tout simplement cassé, ou mal ? 
    4. -
    -
  4. -
  5. Visitez le même site web en utilisant le navigateur de votre appareil Android, et en utilisant la même méthode d'exploration que pour le point 2, et posez les questions : -
      -
    1. Est ce que ce site est pour ordinateur de bureau ? Est-ce que le contenu change fortement avec ce que vous avez vu sur Firefox pour Android ? Si oui, comment était-ce différent ? S'agit'il d'un site optimisé pour mobile ?
    2. -
    3. Y-a t'il les mêmes problèmes de mise en page que ceux constatés sur Firefox pour Android ? Si oui, quels problèmes avez-vous vu sous Firefox pour Android qui ne sont plus là avec le navigateur d'Android ?
    4. -
    -
  6. -
  7. Faîtes apparaître Firefox pour Android aux yeux du site, comme s'il s'agissait de Safari sur iPhone, en cliquant sur Menu -> Phony et en choisissant iPhone. Après avoir sélectionné iPhone, cliquez sur Menu -> Recharger. Visitez le même site une nouvelle fois et continuez la même méthode d'exploration que pour le point 2, et posez les questions : -
      -
    1. Est ce que ce site est pour ordinateur de bureau ? Est-ce que le contenu change fortement avec ce que vous avez vu sur Firefox pour Android ? Si oui, s'agit'il d'un site optimisé pour mobile ?
    2. -
    3. Y a-t'il des problèmes de mise en page ? Si oui, quels sont ces problèmes ?
    4. -
    -
  8. -
-

Signaler les résultats

-

Pour tout site qui apparaît ou fonctionne différement dans Firefox pour Android, le navigateur d'Android, ou Safari sur iPhone, vous devez signaler le problème sur Bugzilla. Pour signaler un problème, soumettez un bug dans le module Firefox for Android Evangelism et fournissez autant d'informations sur le problème que vous pouvez. Voici certaines informations souvent utiles, à renseigner dans votre signalement :

-
-
- Résumé
-
- Résumez le problème que vous avez identifié avec le site. Il est utile d'inclure le nom de domaine, par exemple mozilla.org, dans le résumé.
-
- Description
-
- Décrivez le problème du mieux que vous pouvez. Mettez des détails sur la façon dont le contenu diffère entre Firefox pour Android, le navigateur Android et Safari sur iPhone, les endroits précis (titres, liste d'articles, menus) où le site ne s'affiche pas correctement, et quelles parties du site (articles illisibles, vidéos injouables, impossible de cliquer sur les liens) qui ne fonctionnent pas comme elles le devraient.
-
- Si vous avez quelques connaissances en HTML, CSS et JavaScript, il est très utile d'indiquer les lignes de code qui sont à l'origine du problème.
-
- Pièces jointes
-
- Il est aussi utile d'attacher une capture d'écran montrant le problème dans Firefox pour Android. La méthode pour prendre une capture d'écran sur Android diffère selon la version du système d'exploitation.
-
-

Information de contact

-

Si vous avez des questions sur les tests de compatibilité ou si vous voulez vous impliquer dans l'effort de compatibilité Web mobile de Mozilla, s'il vous plaît, inscrivez-vous sur la liste de diffusion compatibility@lists.mozilla.org.

diff --git a/files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html b/files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html deleted file mode 100644 index 55ddef129a..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: '-moz-window-dragging' -slug: Mozilla/Gecko/Chrome/CSS/-moz-window-dragging -tags: - - CSS - - Non-standard - - Propriété - - Reference - - XUL -translation_of: Mozilla/Gecko/Chrome/CSS/-moz-window-dragging ---- -
{{Non-standard_header}}{{CSSRef}}
- -

La propriété -moz-window-dragging indique si une fenêtre peut être déplacée. Elle ne peut être utilisée qu'à partir de code appelé pour l'interface utilisateur du navigateur et uniquement sur macOS X.

- -

Cette propriété a été ajoutée à Firefox 35 afin de résoudre certains problèmes liés à la fenêtre de Firefox qui ne pouvait pas être déplacé lorsque celui-ci était occupé ({{bug(944836)}}).

- -

{{cssinfo}}

- -

Syntaxe

- -

La propriété -moz-window-dragging s'utilise avec un des mots-clés parmi ceux de la liste suivante.

- -

Valeurs

- -
-
drag
-
La fenêtre peut être déplacée.
-
no-drag
-
La fenêtre ne peut pas être déplacée.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemple

- -
toolbarpaletteitem {
-  -moz-window-dragging: no-drag;
-}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Support simple{{CompatNo}}{{CompatNo}} -

{{CompatGeckoDesktop(35)}}

-
{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidWebview AndroidEdgeFirefox Mobile (Gecko)IE PhoneOpera MobileSafari MobileChrome pour Android
Support simple{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile(35)}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

 

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html deleted file mode 100644 index 37bcb675cd..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: ':-moz-tree-cell-text(hover)' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text(hover)' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text(hover)' ---- -
{{Non-standard_header}}{{CSSRef}}{{Fx_minversion_header(1.9)}}
- -

La pseudo-classe :-moz-tree-cell-text(hover) correspond à un élément si le curseur de la souris est en train de survoler une cellule d'un arbre.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html deleted file mode 100644 index c20c552b1f..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: ':-moz-tree-cell-text' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html deleted file mode 100644 index 5397076180..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: ':-moz-tree-cell' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html deleted file mode 100644 index 8e0bcb2932..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: ':-moz-tree-column' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-column' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-column' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html deleted file mode 100644 index 2b81402253..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: ':-moz-tree-drop-feedback' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-drop-feedback' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-drop-feedback' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html deleted file mode 100644 index 2305bb1423..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: ':-moz-tree-image' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-image' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/:-moz-tree-image' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Exemples

- -

Bookmark icons in the Places window - Mozillazine Forum (en anglais)

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html deleted file mode 100644 index 83d93fe084..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-tree-indentation' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-indentation' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-indentation' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html deleted file mode 100644 index b3306ea046..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: ':-moz-tree-line' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-line' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-line' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html deleted file mode 100644 index 09f8ce7451..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: ':-moz-tree-progressmeter' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-progressmeter' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-progressmeter' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée lorsque l'attribut type est défini sur progressmeter.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html deleted file mode 100644 index bfc3bed3de..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: ':-moz-tree-row(hover)' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row(hover)' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row(hover)' ---- -
{{Non-standard_header}}{{CSSRef}}{{Fx_minversion_header(3)}}
- -

La pseudo-classe :-moz-tree-row(hover) correspond à un élément si le curseur de la souris est en train de survoler une ligne d'un arbre.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html deleted file mode 100644 index 6fd4596d0b..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: ':-moz-tree-row' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La pseudo-classe -moz-tree-row est utilisée afin de sélectionner des lignes d'un arbre pour leur appliquer des styles

- -

Éléments XUL associés

- - - -

Syntaxe

- -
treechildren::-moz-tree-row { propriétés de style }
-
- -

Propriétés associées

- - - -

Exemples

- -

CSS

- -
treechildren::-moz-tree-row( toto bar )
-{
-  margin: 2%;
-}
-
- -

XUL

- -
<treerow properties="toto">…</treerow>
-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html deleted file mode 100644 index 2f0f6e1769..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: ':-moz-tree-separator' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-separator' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-separator' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Cette pseudo-classe est activée via l'attribut properties .

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html deleted file mode 100644 index b863bca3ff..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: ':-moz-tree-twisty' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-twisty' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-twisty' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Cette pseudo-classe est activée via l'attribut properties .

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/index.html b/files/fr/mozilla/gecko/chrome/css/index.html deleted file mode 100644 index 1edf837046..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Chrome-only CSS reference -slug: Mozilla/Gecko/Chrome/CSS -tags: - - Aperçu - - CSS - - Gecko - - Mozilla - - Non-standard - - Reference -translation_of: Mozilla/Gecko/Chrome/CSS ---- -
{{CSSRef}}
- -

Cette page liste les propriétés CSS uniquement accessible depuis le code du chrome de Gecko.

- -

{{SubpagesWithSummaries}}

- -

Voir aussi

- - diff --git a/files/fr/mozilla/gecko/chrome/index.html b/files/fr/mozilla/gecko/chrome/index.html deleted file mode 100644 index 6f5de4f5ea..0000000000 --- a/files/fr/mozilla/gecko/chrome/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Gecko Chrome -slug: Mozilla/Gecko/Chrome -tags: - - Aperçu - - Chrome - - Gecko - - Mozilla -translation_of: Mozilla/Gecko/Chrome ---- -
{{FirefoxSidebar}}
- -
Cette page contient des informations spécifiques au code de Gecko responsable du "chrome" (les éléments de l'interface utilisateur).
- -

{{SubpagesWithSummaries}}

diff --git a/files/fr/mozilla/gecko/faq/index.html b/files/fr/mozilla/gecko/faq/index.html deleted file mode 100644 index be9fbe5bd8..0000000000 --- a/files/fr/mozilla/gecko/faq/index.html +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: Gecko FAQ -slug: Mozilla/Gecko/FAQ -translation_of: Gecko/FAQ ---- -

Qu'est-ce que Gecko?

- -

Gecko est un moteur open source de rendu web supportant différents standards d'internet comme le HTML, le CSS, le DOM, XML, javascript et d'autres standards encore.

- -

Gecko est utilisé par de nombreux navigateurs internet, avec bien entendu Mozilla Firefox, mais aussi SeaMonkey, Camino. Gecko est en développement constant par les développeurs de Mozilla. Gecko est le nom final du moteur, il s'appelait aussi "Raptor" et "NGLayout"; mais le nom final du moteur a été choisi suite à un litige.

- -

Pour plus d'informations, visitez l'article Gecko (moteur de rendu) sur Wikipedia.

- -

Qu'est-ce qu'un moteur de rendu?

- -

Un moteur de rendu va aller traduire le contenu des fichiers (les fichiers pouvant être une page internet en HTML, XML, des images...) et s'occupe de formater les informations contenus dans les fichiers, généralement le HTML, qui décrivent l'emplacement des textes, des images etc... afin de faire affiché l'information comme le voulait le webmaster. Il dessine la page web dans la zone de rendu de la fenêtre du navigateur.

- -

Ainsi officiellement, un moteur de rendu définie la politique de placement pour un docuement et fait la mise en page. Gecko est un moteur de rendu trés rapide. Il offre la possibilité de parser de nombreux types de docuements (HTML, XML, SVG, etc...). Il est capable de donné un rendu avancé en incluant les compositions et les transformations. Il supporte aussi le javascript et les plugins.

- -

Gecko est si rapide et puissant qu'il peut être utiliser pour créer des interfaces utilisateurs pour certaines applications ("chrome").  En d'autres termes, Gecko ne fait pas seulement que affiché le contenu d'un document, il peut aussi être utiliser pour dessiner des barres de défilement, des menus à l'écran. Pour plus d'information, reportez-vous à la documentation sur XUL.

- -

How is a layout engine like Gecko different from a Web browser?

- -

Gecko fournit la base nécessaire pour afficher l'information à l'écran, en incluant un moteur de rendu ainsi qu'un ensemble complémentaire de composants du navigateur. Cependant, Gecko ne supporte pas tous les composants aux côtés d'autres modules d'interface dans une application cohérente (y compris les menus, les barres d'outils, etc...) tel que Firefox.

- -

La fondation Mozilla assemble les composants nécessaires dans ses logiciels, comme Firefox, Thunderbird, SeaMonkey, Camino, qui sont disponibles au téléchargement sur le site mozilla.org. Netscape a publié sa propre version du navigateur sous la marque Netscape Navigator. D'autres compagnies crée aussi leur propre logiciel et matériel qui utilisent Gecko. Voir la page recensant une liste de logiciel dans lequel Gecko est utilisé via XULRunner.

- -

Les éditeurs tiers comme les éditeurs de logiciels et fournisseurs de matériels vont choisir les composants qu'ils souhaitent utiliser dans leurs logiciels ou matériels. Certains composants du navigateur ne sont pas fournis dans les fonctionnalités de Gecko, comme les marque page, l'historique de navigation, les faboris.... Cependant, la source de tous ces composants sont disponibles au téléchargement sur le portail mozilla.org.

- -

Why was Gecko built?

- -

The original Mozilla browser, first released as Navigator 1.0, was developed rapidly by a small team that was passionate about creating the next killer app, and they succeeded. Now that the web has evolved, a new generation layout engine was needed upon which future products could be built. Gecko enables a pioneering new class of dynamic content that is more interactive and offers greater presentation control to Web developers, using open and recommended Internet standards instead of proprietary APIs. You are encouraged to join this team by getting involved.

- -

How is mozilla.org using Gecko?

- -

mozilla.org will assemble the Gecko layout engine and other browser components into the Mozilla browser application.

- -

How does Mozilla use Gecko?

- -

Gecko lies at the heart of Mozilla and Firefox browsers, as well as others, powering all of the individual components. Gecko technologies will also power the display of the mozilla.com portal site, speedily delivering more exciting content and services. Gecko's architecture will serve Mozilla well into the future, enabling faster time to market, more innovation, less costly development, easier distribution and updating, and better cross platform support.

- -

How can other companies and organizations use Gecko?

- -

Because Gecko is small, lightweight, and open source, other companies and organizations can easily reuse it. Many hardware vendors are creating devices with network access and wish to include web browsing functionality. Likewise, many software developers want to include Web browsing capability in their applications, but don't want to independently develop browser software. These developers can pick and choose the browser components they want from among those that Gecko offers, and package these components alongside their own within their finished products.

- -

Which open standards is the Gecko development project working to support, and to what extent does it support them?

- -

By the end of calendar year 2000, Gecko is expected to support the following recommended open Internet standards fully except for the areas noted below and open bugs documented in Bugzilla:

- - - -

Does "full support" mean that Gecko has zero bugs today or will have zero bugs at some point in the future?

- -

Of course not. As Robert O'Callahan notes in {{ Bug(25707) }}, "Full HTML4/CSS1 compliance can't mean '100% bug free'. If it does, no-one will ever ship a fully compliant browser."

- -

Because web pages can be arbitrarily long and complex and have arbitrarily deeply nested markup, it will always be possible to construct web pages that do not display in a given browser the way the specifications would recommend. So long as QA testing and test case development continues, there will always be known bugs at any given point in time in the open-source Gecko codebase, and it follows that every commercial product that has ever shipped and ever will ship based on Gecko will have known bugs at the time of its release. (The same principle of course applies to other browser engine development projects and products based upon them as well.)

- -

Known bugs in the open-source Gecko codebase are documented in Bugzilla. Here are some links to lists of reported bugs related to the standards mentioned above; be aware that these raw lists of open in-process bugs will inevitably include some duplicate, out of date, unreproducible, invalid, and incorrectly tagged reports:

- -
The links themselves are probably outdated too.
- - - -

For information about the known bugs of a specific commercial product based on Gecko, see that product's release notes.

- -

How does Gecko format XML documents?

- -

Gecko supports the use of CSS and XSLT to format XML documents.

- -

For XML documents without associated CSS or XSLT, Gecko displays the pretty-printed source of the document.

- -

How does Gecko help content developers?

- -

Content developers are sick and tired of developing and testing every single web page multiple times in order to support the different, incompatible, proprietary DOMs of browsers from different vendors. They have been demanding that all vendors fully support the open standards listed above so that they can

- -
    -
  1. have a rich, powerful formatting system and object model at their disposal, and
  2. -
  3. "write once, view anywhere."
  4. -
- -

Gecko's robust support for these standards makes Gecko the platform of choice for web content and web application developers worldwide.

- -

Are Gecko's APIs based on ActiveX? COM? JavaBeans?

- -

Gecko is reusable on all platforms thanks to XPCOM, a subset of COM that works across platforms. COM, developed by Digital and later adopted by Microsoft, is the de facto standard for modular interfaces on Windows platforms.

- -

Additionally, on the Windows platform, Gecko's XPCOM interfaces are wrapped in an ActiveX control that VB developers can utilize (ActiveX wrappers are not available on other platforms because ActiveX is a Windows-only technology).

- -

A JavaBean wrapper is not currently under development, but there is nothing in Gecko's architecture that precludes such development in the future. Source code and documentation for these interfaces are available through mozilla.org.

- -

For future embedding API plans, see {{ interwiki('wikimo', 'Mozilla_2:Embedding_APIs', 'wikimo:Mozilla 2:Embedding APIs') }}.

- -

Are Gecko's APIs compatible with Microsoft's Trident APIs?

- -

Gecko's XPCOM interfaces are different than Microsoft's. The most important differences between the two models involve reflection of the Document Object Model (DOM) in the interfaces.

- -

Microsoft's Trident interfaces reflect the DOM in a proprietary API, whereas Gecko exposes the DOM according to the W3C's recommended standard. Other incompatibilities exist. Adam Lock created a partial compatibility layer that may enable developers to more easily migrate from Microsoft's engine to the Gecko engine.

- -

Which platforms does Gecko run on?

- -

Gecko runs today on Win32 (Windows XP Service Pack 2, Windows Vista, Windows 7, Windows 8, Windows 8.1), Mac OS X 10.5 and later, and Linux. OEMs and contributors from the Net participating in mozilla.org are porting Gecko to other platforms. Such porting efforts are underway for Solaris, HP/UX, AIX, Irix, OS/2, OpenVMS, BeOS, and Amiga, among others.

- -

Older versions of Gecko supported earlier versions of Win32 and Mac OS X.

- -

What are the components of Gecko?

- -

Gecko includes the following components:

- - - -
-

Original Document Information

- - -
- -

{{ languages( { "ja": "ja/Gecko_FAQ", "zh-cn": "cn/Gecko_FAQ" } ) }}

diff --git a/files/fr/mozilla/gecko/gecko_embedding_basics/index.html b/files/fr/mozilla/gecko/gecko_embedding_basics/index.html deleted file mode 100644 index 2a116f5d88..0000000000 --- a/files/fr/mozilla/gecko/gecko_embedding_basics/index.html +++ /dev/null @@ -1,403 +0,0 @@ ---- -title: Les bases de Gecko embarqués -slug: Mozilla/Gecko/Gecko_Embedding_Basics -translation_of: Mozilla/Gecko/Gecko_Embedding_Basics ---- -

{{ Outdated("It was last updated a very long time ago.") }}

- -
-
Compte tenu de l'importance croissante du Web comme source d'information, de divertissement, et la connectivité individuelle, la possibilité d'accéder et d'afficher des données enregistrées au format HTML devient de plus en plus important pour une grande variété d'applications logicielles par ailleurs très diverses. Que ce soit pour un simple visualiseur HTML ou pour créer un navigateur web à part entière, la capacité d'analyser et d'afficher des documents de type HTML est une fonction de plus en plus importante dans de nombreuses situations. Pour le développeur d'applications, le problème est de savoir comment mettre en œuvre cette fonctionnalité cruciale d'une manière qui minimise encore le temps de développement qui va permettre de créer un produit agile et robuste. Intégrer Gecko, le moteur de rendu au cœur des navigateurs Netscape et Mozilla, est une solution pour ce problème.
- -
 
-
- -

Pourquoi Gecko

- -

Intégrer Gecko est un choix pertinent. Il est rapide, robuste, et respecte les standards du web. Chez Mozilla et Netscape, il a été largement diffusé et abondamment testé.

- -

Il est Open-Source. Contrairement à d'autres choix d'intégration, tout le code source de Gecko est librement disponible et personnalisable. Vous pouvez le bricoler autant que vous le voulez sans limite. Pourtant, selon la licence choisie, il est possible d'utiliser Gecko comme un composant dans un produit commercial et propriétaire.

- -

Comme Gecko est associé avec le projet Mozilla, il y a beaucoup de ressources disponibles pour aider à son intégration. Le site officiel de Mozilla a un espace dédié aux projets d'intégration. Il y a un groupe de discussion, mozilla.dev.embedding, qui met l'accent sur l'échange d'informations entre les intégrateurs, ainsi qu'à un certain nombre d'autres groupes de discussion connexes. On peut accéder à un index croisé complet de la base de code et il est simple d'ajouter du code, de suivre ses progrès ou d'aider à corriger des bogues via la base de données de bugs Bugzilla.

- -

De plus, Gecko a été architecturé dès le commencement pour être multi-plateforme. La version de mozilla.org, tourne aussi bien sur  Wintel, Mac OS 9.0, OS X et Linux et il existe des portages faits par des tiers sur nombre d'autres plateformes.

- -

Enfin, la license Gecko is gratuite, même si l'application finale est un produit commercial propriétaire. La plupart du temps, toute modification apportée au code originellement fourni par Mozilla (mais pas le code dans lequel il est intégré) doit revenir à la communauté, ce même code originel doit être rendu disponible aux utilisateurs de l'application (souvent via un lien sur le site web de mozilla.org), et l'application doit indiquer de manière évidente (Par exemple un logo sur la boîte ou sur la page APropos) que le produit intègre Gecko. La description exacte des licenses possibles est visible sur Mozilla & Netscape Public Licenses, qui est la seule source légale des information de license.

- -

Ce dont vous avez besoin pour embarquer

- -

Une fois que vous avez décidé d'intégrer, il y a trois étapes à suivre. Premierement, vous devez vous procurer le code. Ensuite, vous devez comprendre les quelques technologies spécifiques qui sont utilisées pour manipuler le code de base de Gecko. Enfin, vous devez décider quelles fonctionalités vous pouriez ajouter. Cette section vous guidera dans ces étapes.

- -

Vous procurer le code

- -

Actuellement, le meilleur moyen d'obtenir les fichiers dont vous avez besoin pour intégrer Gecko consiste à télécharcher et compiler les source de Mozilla dans leur totalité. C'est en fait un processu assez simple. Les liens vers les instructions completes sont disponibles dans la section Télécharger le Code source de Mozilla. Une seconde méthode, composant par composant, est en cours de développement, mais est encore au niveau béta. Vous pouvez trouver des informations sur ce projet dans la section Compilation. De plus, nous développons un Environnement d'exécution Gecko (Gecko Runtime Environment ou GRE), de maniere à supporter plusieurs outils batis sur des composants Mozilla tout en n'utilisant qu'un seul ensemble de bibliotheque. (Si vous avez l'intention de travailler composant par composant, soyez particulierement attentifs aux probleme de versions et de compatibilité des binaires. Pour vous aidez sur ce point, regardez la section Réutilisation des composants XPCOM.)

- -

Déjà, vous devz vous procurer quelques outils (en bref, un compilateur, une distribution Perl, et quelaues utilitaires génériques). Ensuite, vous devez les installer sur votre ordinateur. Apres quoi, vous devez télécharger la source. En supposant que vous allez télécharger l'ensemble de l'arborescence, il y a deux manieres de procéder: vous pouvez télécharger en FTP une archive contenant l'ensemble de l'arborescence (c'est la maniere la plus simple, et la plus sure de compiler, mais elle peut contenir une version dépourvue des modifications les plus récentes) ou vous pouvez utiliser CVS pour etre certain que vous téléchargezla version la plus récente. Une fois que vous avez l'arborescence et les outils, et que votre environement est corectement installé, il ne vous reste qu'à exécuter le makefile. Vous pouvew trouver des instructions détaillées pour chacune des plateformes supportées. 

- -

Une fois la source compilée, rendez-vous dans le dossier mozilla/embedding/config. Vous y trouverez des fichiers de démonstration (chacun d'entre eux porte un nom commencant par "basebrowser") intégrables sur chacune des plateformes. Ce sont uniquement des exemples, peut-etre inadaptés à votre besoin particulier, mais ce sont un bon moyen de débuter. Il y a aussi des exemples de projets d'intégration pour chacune des plateforme que vous pouvez utiliser en tant que modele. Voir Intégration : Exemples de Mozilla et projets externes. 

- -

Understanding the Coding Environment

- -

Mozilla was set up from the beginning to support design and development across multiple platforms and programming languages. To this end, a number of in-house programming technologies were developed, all based around an ideal of object encapsulation. Embedding Gecko necessarily implies acquiring a working knowledge of these technologies, including XPCOM, XPIDL, XPConnect, special string classes, and, optionally, XUL. The following provides a brief introduction to them. More information can be found at the mozilla.org site.

- -

XPCOM

- -

The most important of the Mozilla technologies is XPCOM, the Cross-Platform Component Object Model. XPCOM provides a framework which manages the creation, ownership, and deletion of objects and other data throughout Mozilla. If you have used MSCOM, you will recognize certain basic similarities. But there are also significant differences -- XPCOM is cross-platform and designed to run largely in a single thread -- and the two are not at this time compatible.

- -
The interface
- -

At the core of XPCOM is the concept of the interface. An interface is simply a description of a set of methods, attributes, and related constants all associated with a particular functionality: it is completely distinct from the class that implements those things. The interface serves as a kind of contract: any object that supports a particular interface guarantees that it will perform the services described in it. To keep the interface as language neutral as possible, it is written in a special language, the Interface Definition Language, or IDL. Interface files are often referred to as .idl files. In addition to specifying the functionality of the interface, these files also carry the interface's IID, its globally unique identifying number.

- -

Much of the communication within Gecko takes place in terms of these abstract structures (by convention, their names follow the form nsISomething).

- -
//this
-void ProcessSample(nsISample* aSample) {
-	aSample->Poke("Hello");
-//not this
-void ProcessSample(nsSampleImpl* aSample) {
-	aSample->Poke("hello");
-
- -
@status FROZEN
- -

XPCOM's level of abstraction produces great flexibility in the system. Implementations are free to change as needed. But, to work, the interfaces themselves must remain fixed. Throughout Mozilla's initial design and development period, interfaces have been somewhat fluid, but as the project has matured, more and more of the interfaces have been marked FROZEN. Any interface so marked is guaranteed not to change in the future.

- -

Most of the main interfaces key to the embedding effort are now frozen, but it's always a good idea to check before using any interface. An interface's status is listed in the .idl file's comments. A frozen interface is marked @status FROZEN. You can search for frozen interfaces by using the Mozilla cross referencing tool. Until it is frozen, an interface may change at any time. For more information on the freezing process, see the embedding project page.

- -

Once an interface has been frozen, it is added to the Gecko Embedding API Reference.

- -
nsISupports
- -

A single object can support more than one interface. In fact, essentially all objects support at least two interfaces -- a minimum of one that does something specifically useful and one, nsISupports, that serves a more general purpose. In a sense, nsISupports is the progenitor of all XPCOM interfaces. All interfaces inherit from it, most directly so. It serves two main functions: runtime type discovery and object lifetime management. It is functionally identical to IUnknown in MSCOM.

- -

Since an object can support multiple interfaces, it's possible to have a pointer to one interface and want to know whether that same object also supports a different interface whose functionality you might also need. The first nsISupports method, QueryInterface(), does exactly that: it asks, in effect, "I know that this object is of type A (supports interface A) but is it also of type B (supports interface B)?"

- -

If it is (or does), QueryInterface() returns to the caller a pointer bound to the newly requested interface.

- -
void ProcessSample(nsISample* aSample) {
-	nsIExample *example;
-	nsresult rv;
-	rv = aSample->QueryInterface(NS_GET_IID(nsIExample),(void **)&example);
-	if (NS_SUCCEEDED(rv)) {
-		example->DoSomeOperation();
-		NS_RELEASE(example); // using a macro to call Release
-	}
-}
-
- -

Because XPCOM uses an indirect method, the Component Manager, to actually instantiate objects, and because multiple pointers to the same object -- often bound to different interfaces -- can exist, it can quickly become very difficult for callers to keep accurate track of all of the objects to which those pointers point. Objects could be kept around in memory longer than they need to be, causing leaks, or objects could be deleted prematurely, causing dangling pointers. The other two methods in nsISupports, AddRef() and Release(), are designed to deal with this issue. Every time a pointer is given out AddRef() must be called on the object, incrementing an internal counter. Every time a pointer is released, Release() must be called, which decrements that same counter. When the counter reaches zero, there are no pointers to the object remaining and the object can safely delete itself. Control of the object's lifetime stays within the object itself. See below for information on XPCOM's "smart" pointer, nsCOMPtr, a utility which helps automate this process.

- -
Object creation
- -

The instantiation of objects is also an indirect process in XPCOM. Just as interfaces have a globally unique ID number (the IID), XPCOM classes are assigned their own GUIDs, the CID. In addition, they are also often given a text-based ID, called a contract ID. One or the other of these IDs is passed to a method on a persistent XPCOM component, the Component Manager, which actually creates the object. When a new library of classes (called a module in XPCOM) is first introduced into the system, it must register itself with the Component Manager, which maintains a registry that maps classes (with their IDs) to the libraries in which they reside.

- -

A limited number of persistent services, supplied by singleton objects, are created and controlled by a companion to the Component Manager, the Service Manager. The Component Manager itself is an example of such a persistent service.

- -
Summing up
- -

Functionality in XPCOM is described by abstract interfaces, and most communication among parts of the system takes place in terms of those interfaces. The underlying objects that implement the interfaces, on the other hand, are created indirectly by the Component Manager based on a cross-indexed registry that it maintains.

- -

One functionality shared by all interfaces is the ability to query the underlying object at runtime to see if also implements other interfaces. In theory an interface is fixed and unchangeable, but at this stage in the Mozilla codebase, only interfaces that have been declared FROZEN are guaranteed not to change significantly. Object lifetime management takes place inside the object itself through an internal counter that keeps track of the number of pointers to the object that have been added or released. The client's only responsibility is to increment and decrement the counter. When the internal counter reaches zero, the object deletes itself.

- -
nsCOMPtr
- -

Sometimes, however, even remembering to call AddRef() and Release() at the right times can be difficult. To make this process easier and more reliable, XPCOM has a built-in "smart" pointer, nsCOMPtr. This pointer takes care of calling AddRef() and Release() for you. Using nsCOMPtr whenever possible will make your code cleaner and more efficient. For more information on the smart pointer, see "The Complete nsCOMPtr User's Manual".

- -

Mozilla actually provides a large number of built-in macros (by convention, written in all caps in the code) and utilities like nsCOMPtr that can make the entire process of coding with XPCOM easier. Many of these can be found in the following files: nsCom.h, nsDebug.h, nsError.h, nsIServiceManager.h, and nsISupportsUtils.h. Mozilla also supplies other development tools for tracking memory usage and the like. More information on these can be found at http://www.mozilla.org/performance/

- -
For more information
- -

More information on XPCOM in general can be found at XPCOM. For an overview of creating XPCOM components, see Chapter 8 of O'Reilly's Creating Applications with Mozilla. There is also a new book completely devoted to this topic, Creating XPCOM Components. A fuller explanation of some of the underlying logic to COM systems can be found in the early chapters of Essential COM by Don Box. While it focuses on MSCOM in particular, the book does provide an excellent background on some of the core rationales for using such an object model.

- -

XPIDL

- -

Interfaces are abstract classes written in XPIDL, the Cross Platform Interface Definition Language. Yet to be useful the functionality promised in those interfaces must be implemented in some regular programming language. Facilitating this is the job of the XPIDL compiler. Once an interface is defined in an .idl file, it can be processed by the XPIDL compiler.

- -

The compiler can be set to output a number of things, but generally the output is two-fold: a C++ .h file that includes a commented out template for a full C++ implementation of the interface and an XPT file that contains type library information which works with XPConnect to make the interface available to JavaScript. More information on the syntax of XPIDL (a simple C-like language) and the use of the compiler is available.

- -

XPConnect and XPT files

- -

XPConnect is an XPCOM module that allows code written in JavaScript to access and manipulate XPCOM components written in C++ and vice versa. By means of XPConnect, components on either side of an XPCOM interface do not, in general, need to know or care about which of these languages the object on the other side is implemented in.

- -

When an interface is run through the XPIDL compiler, it produces an XPT or type library file. Because XPconnect uses the information in this file to implement transparent communication between C++ objects and JavaScript objects across XPCOM interfaces, it is important to make sure they are generated and included with your code even if you are developing exclusively in C++. Not only is a substantial part of the browser, in fact, implemented in JS, it is possible that in the future someone may wish to use JS-based code to interact with whatever components you create .

- -

As is from Mozilla, XPConnect currently facilitates interoperability between C++ and JS. Modules to extend it to allow access from other languages (including Python) are under independent development.

- -

String classes

- -

Web browsing typically involves a large amount of string manipulation. Mozilla has developed a hierarchy of C++ classes to facilitate such manipulation and to render it efficient and quick. To make communication among objects simpler and more error free, Mozilla uses interfaces, which are, in essence, abstract classes. The string hierarchy is also headed up by a set of abstract classes, nsAString, nsASingleFragmentString, and nsAFlatString, and for the same reasons. (These refer to double-byte strings. There is a parallel hierarchy topped with nsACString, etc., that refers to single-byte strings.) nsAString guarantees only a string of characters. nsASingleFragmentString guarantees that the characters will be stored in a single buffer. nsAFlatString guarantees that the characters will be stored in a single null-terminated buffer. While there are underlying concrete classes, in general it is best to use the most abstract type possible in a given situation. For example, concantenation can be done virtually, through the use of pointers, resulting in an nsAString that can be used like any other string. This saves the allocating and copying that would otherwise have to be done. For more information, see "XPCOM string guide".

- -

XUL/XBL

- -

Use of this final Mozilla technology is optional, depending on how you decide to create the user interface for your application. XUL is Mozilla's highly flexible XML UI Language. It provides a number of largely platform independent widgets from which to construct a UI. Netscape and Mozilla both use XUL for their interfaces, but not all embedders choose to use it. XBL or the eXtensible Binding Language allows you to attach behaviors to XUL's XML elements. More information on XUL can be found at XUL Programmer's Reference and on XBL at XBL:XBL_1.0_Reference. There is also a wealth of good information on XUL at XULPlanet.

- -

Choosing Additional Functionalities

- -

As of this writing (8/19/02), Gecko is a partially modularized rendering engine. Some functionalities beyond basic browsing are always embedded with Gecko, and, as a result of certain architectural decisions, always will be; some are at present always embedded with Gecko, but may, at some point in the future, be separable; and some are now available purely as options. The following table describes the present status of these additional functionalities:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FunctionsStatus NowStatus in Future
FTP supportOptional 
HTTPS supportOptional 
International character supportOptional 
XUL supportRequiredProbably optional
Network supportRequiredMaybe optional
JavaScript supportRequiredMaybe optional
CSS supportRequiredAlways required
DOM supportRequiredProbably always
XML supportRequiredProbably always
- -

At this time embedding Mozilla's editor along with the rendering engine Gecko is an uncertain proposion, although the situation continues to improve. For more information on the status of the embeddable editor, see http://www.mozilla.org/editor/Editor...ing_Guide.html.

- -

What Gecko Provides

- -

The following is a description of some of the interfaces most commonly used in embedding Gecko. It is by no means an exhaustive list of the available interfaces. The interfaces in this section are on classes provided by Mozilla. There is also a set of interfaces for which Gecko expects the embedder to provide the implementation. A sample of those are covered in the next section.

- -

Initialization and Teardown

- -

There are two C++ only functions which serve to initalize and terminate Gecko. The initialization function (NS_InitEmbedding) must be called before attempting to use Gecko. It ensures XPCOM is started, creates the component registry if necessary, and starts global services. The shutdown function (NS_TermEmbedding) terminates the Gecko embedding layer, ensuring that global services are unloaded, files are closed and XPCOM is shut down.

- -

nsIWebBrowser

- -

Use of this interface during initialization allows embedders to associate a new nsWebBrowser instance (an object representing the "client-area" of a typical browser window) with the embedder's chrome and to register any listeners. The interface may also be used at runtime to obtain the content DOM window and from that the rest of the DOM.

- -

The XULPlanet nsWebBrowser reference also has a lot of useful information on this class.

- -

nsIWebBrowserSetup

- -

This interface is used to set basic properties (like whether image loading will be allowed) before the browser window is open.

- -

nsIWebNavigation

- -

The nsIWebNavigation interface is used to load URIs into the web browser instance and provide access to session history capabilities - such as back and forward. As of June 6, 2006, this interface is not yet frozen.

- -

nsIWebBrowserPersist

- -

The nsIWebBrowserPersist interface allows a URI to be saved to file. As of June 6, 2006, this interface is not yet frozen.

- -

nsIBaseWindow

- -

The nsIBaseWindow interface describes a generic window and basic operations (size, position, window title retrieval, etc.) that can be performed on it. As of June 6, 2006, this interface is not yet frozen.

- -

nsISHistory

- -

The nsISHistory interface provides access to session history information and allows that information to be purged.

- -

nsIWebBrowserFind

- -

The nsIWebBrowserFind interface controls the setup and execution of text searches in the browser window.

- -

What You Provide

- -

The following is a description of some of the more common embedder-provided interfaces used in embedding Gecko. It is by no means an exhaustive list of the available interfaces.

- -

nsIWebBrowserChrome

- -

The nsIWebBrowserChrome interface corresponds to the top-level, outermost window containing an embedded Gecko web browser. You associate it with the WebBrowser through the nsIWebBrowser interface. It provides control over window setup and whether or not the window is modal. It must be implemented.

- -

nsIEmbeddingSiteWindow

- -

The nsIEmbeddingSiteWindow interface provides Gecko with the means to call up to the host to resize the window, hide or show it and set/get its title. It must be implemented.

- -

nsIWebProgressListener

- -

The nsIWebProgressListener interface provides information on the progress of loading documents. It is added to the WebBrowser through the nsIWebBrowser interface. It must be implemented. As of this writing (8/19/02), it is not frozen.

- -

nsISHistoryListener

- -

The nsISHistoryListener interface is implemented by embedders who wish to receive notifications about activities in session history. A history listener is notified when pages are added, removed and loaded from session history. It is associated with Gecko through the nsIWebBrowser interface. Implementation is optional.

- -

nsIContextMenuListener

- -

The nsIContextMenuListener interface is implemented by embedders who wish to receive notifications for context menu events, i.e. generated by a user right-mouse clicking on a link. It should be implemented on the web browser chrome object associated with the window for which notifications are required. When a context menu event occurs, the browser will call this interface if present. Implementation is optional.

- -

nsIPromptService

- -

The nsIPromptServices interface allows the embedder to override Mozilla's standard prompts: alerts, dialog boxes, and check boxes and so forth. The class that implements these embedder specific prompts must be registered with the Component Manager using the same CID and contract ID that the Mozilla standard prompt service normally uses. Implementation is optional. As of this writing (8/19/02), this interface is not frozen.

- -

Common Embedding Tasks

- -

The following is a series of code snippets (taken from MFCEmbed, the Windows based embedding Gecko sample) which demonstrate very briefly implementation associated with common embedding tasks. MFCEmbed code was deleted from the current repository as the code quality was not very high and it did not use good embedding APIs. If you need a MFC embedding example, maybe take a look at the K-Meleon source. There are also Linux- and Mac OS-based examples, see http://mxr.mozilla.org/mozilla-central/source/embedding/tests/ for a list of examples.

- -

Gecko setup

- -

The Gecko embedding layer must be initialized before you can use Gecko. This ensures XPCOM is started, creates the component registry if necessary, and starts global services. There is an equivalent shutdown procedure.

- -

Note that the embedding layer is started up by passing it two parameters. The first indicates where the executable is stored on the file system (nsnull indicates the working directory). The second indicates the file location object "provider" that specifies to Gecko where to find profiles, the component registry preferences, and so on.

- -
nsresult rv;
-rv = NS_InitEmbedding(nsnull, provider);
-if(NS_FAILED(rv))
-{
-ASSERT(FALSE);
-return FALSE;
-}
-
- -

Creating a browser instance

- -

The embedder-provided BrowserView object calls its method CreateBrowser(). Each browser object (a webbrowser) represents a single browser window. Notice the utility directive do_CreateInstance() and the use of macros.

- -
//Create an instance of the Mozilla embeddable browser
-
-HRESULT CBrowserView::CreateBrowser()
-{
-// Create a web shell
-nsresult rv;
-mWebBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
-if(NS_FAILED(rv))
-return rv;
-
- -

Once the nsWebBrowser object is created the application uses do_QueryInterface() to load a pointer to the nsIWebNavigation interface into the mWebNav member variable. This will be used later for web page navigation.

- -
rv = NS_OK;
-mWebNav = do_QueryInterface(mWebBrowser, &rv);
-if(NS_FAILED(rv))
-return rv;
-
- -

Next the embedder-provided CBrowserImpl object is created. Gecko requires that some interfaces be implemented by the embedder so that Gecko can communicate with the embedding application. See the What You Provide Section. In the sample, CBrowserImpl is the object that implements those required interfaces. It will be passed into the SetContainerWindow() call below.

- -
mpBrowserImpl = new CBrowserImpl();
-if(mpBrowserImpl == nsnull)
-return NS_ERROR_OUT_OF_MEMORY;
-
- -

The mWebBrowser interface pointer is then passed to the CBrowserImpl object via its Init() method. A second pointer to the platform specific BrowserFrameGlue interface is also passed in and saved. The BrowserFrameGlue pointer allows CBrowserImpl to call methods to update status bars, progress bars, and so forth.

- -
mpBrowserImpl->Init(mpBrowserFrameGlue, mWebBrowser);
-mpBrowserImpl->AddRef();
-
- -

Next the embedder-supplied chrome object is associated with the webbrowser. Note the use of an nsCOMPtr.

- -
mWebBrowser->SetContainerWindow
-	(NS_STATIC_CAST(nsIWebBrowserChrome*, mpBrowserImpl));
-nsCOMPtr<nsIWebBrowserSetup>setup(do_QueryInterface(mWebBrowser));
-if (setup)
-	setup->SetProperty(nsIWebBrowserSetup::SETUP_IS_CHROME_WRAPPER,PR_TRUE);
-
- -

Then, the real webbrowser window is created.

- -
rv = NS_OK;
-mBaseWindow = do_QueryInterface(mWebBrowser, &rv);
-if(NS_FAILED(rv))
-return rv;
-
- -

Binding a window

- -

Basic location information is passed in.

- -
RECT rcLocation;
-GetClientRect(&rcLocation);
-if(IsRectEmpty(&rcLocation))
-{
-	rcLocation.bottom++;
-	rcLocation.top++;
-}
-rv = mBaseWindow->InitWindow(nsNativeWidget(m_hWnd),
-		nsnull,0, 0, rcLocation.right - rcLocation.left,
-		rcLocation.bottom - rcLocation.top);
-rv = mBaseWindow->Create();
-
- -

Note the m_hWnd passed into the call above to InitWindow(). (CBrowserView inherits the m_hWnd from CWnd). This m_hWnd will be used as the parent window by the embeddable browser.

- -

Adding a listener

- -

The BrowserImpl object is added as an nsIWebProgressListener. It will now receive progress messages. These callbacks will be used to update the status/progress bars.

- -
nsWeakPtr weakling
-	(dont_AddRef(NS_GetWeakReference(NS_STATIC_CAST(nsIWebProgressListener*,
-			mpBrowserImpl))));
-void mWebBrowser->AddWebBrowserListener(weakling, NS_GET_IID(nsIWebProgressListener));
-
- -

Finally the webbrowser window is shown.

- -
mBaseWindow->SetVisibility(PR_TRUE);
-
- -

Using session history to navigate

- -

The pointer to nsIWebNavigation saved above is used to move back through session history.

- -
void CBrowserView::OnNavBack()
-{
-if(mWebNav)
-	mWebNav->GoBack();
-}
-
- -

Appendix: Data Flow Inside Gecko

- -

While it isn't strictly necessary for embedders to understand how Gecko does what it does, a brief overview of the main structures involved as Gecko puts bits on a display may be helpful.

- -

Image:EmbeddingBasicsa.gif

- -

HTML data comes into Gecko either from the network or a local source. The first thing that happens is that it is parsed, using Gecko's own HTML parser. Then the Content Model arranges this parsed data into a large tree. The tree is also known as the "Document" and its structure is based on the W3C Document Object Model. Any use of DOM APIs manipulates the data in the Content Model.

- -

Next the data is put into frames using CSS and the Frame Constructor. A frame in this sense (which is not the same thing as an HTML frame) is basically an abstract box within which a DOM element will be displayed. This process produces a Frame Tree, which, like the Content Model, is a tree of data, but this time focused not on the logical relationship among the elements but on the underlying calculations needed to display the data. In the beginning a frame has no size. Using CSS rules specifying how the elements of the DOM should look when they are displayed, including information like font type or image size, the eventual size of each frame is calculated. Because the same data may need to be displayed in different ways -- to a monitor and to a printer, for example -- a particular Content Model may have more than one Frame Tree associated with it. In such a case, each individual Frame Tree would belong to a different "presentation" mode.

- -

Calculations continue as new information flows into the system using a process called reflow. As information in the Frame Tree changes, the section of the Frame Tree involved is marked "dirty" by the Frame Constructor. Reflow repeatedly steps through the tree, processing every "dirty" item it encounters until all the items it encounters are "clean". Every item in the Frame Tree has a pointer back to its corresponding item in the Content Model. A change in the Content Model, say through using the DOM APIs to change an element from hidden to visible, produces an equivalent change in the Frame Tree. It's important to note that all of these operations are purely data manipulations. Painting to the display itself is not yet involved at this point.

- -

The next stage is the View Manager. With a few small exceptions that have to do with prompting the Frame Constructor to load graphics, the View Manager is the first place in the process that accesses the native OS. Delaying OS access until this point both helps Gecko to run more quickly and makes cross-platform issues easier to deal with. The View Manger is the place where Gecko figures out where on the display the data will need to be drawn. It then tells the system that that area is "invalid" and needs to be repainted. The actual painting is managed by the gfx submodule, while other low-level system operations are run through the widget submodule, which handles things like platform specific event (mouse clicks and so forth) processing loops and accessing system defaults (colors, fonts, etc.) Both gfx and widget are system specific.

- -

If you want to take a look at the code underlying these structures, the code for the Content Model can be found in /mozilla/content, for the Frame Constructor, CSS, and Reflow in /mozilla/layout, for the View Manager in /mozilla/view, and for the DOM APIs in /mozilla/dom.

- -
-

Original Document Information

- - -
- -

{{ languages( { "ja": "ja/Gecko_Embedding_Basics" } ) }}

diff --git a/files/fr/mozilla/gecko/index.html b/files/fr/mozilla/gecko/index.html deleted file mode 100644 index fcd4a8e202..0000000000 --- a/files/fr/mozilla/gecko/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Gecko -slug: Mozilla/Gecko -translation_of: Mozilla/Gecko ---- -

Gecko est le nom du moteur de rendu développé par la fondation Mozilla. Il s'appelait à l'origine NGLayout.

- -

La fonction de Gecko est de lire le contenu Web tel que HTML, CSS, XUL et JavaScript, puis de le représenter sur l'écran de l'utilisateur ou à l'impression. Dans les applications basées sur XUL, Gecko est également utilisé pour afficher l'interface utilisateur de l'application.

- -

Gecko est utilisé dans de nombreuses applications dont quelques navigateurs comme Firefox, la Suite Mozilla, Camino, etc. (Pour obtenir la liste complète, référez-vous à cet article de Wikipedia sur Gecko). Les produits utilisant la même version de Gecko ont un support identique des standards.

- -

Le nom et le logo Gecko sont des marques de Netscape Communications Corporation, utilisés sous licence.

- -

Les versions de Gecko

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Version de GeckoApplications basées sur cette version
Gecko 17.0 (en cours de développement)Firefox 17, SeaMonkey 2.14, Thunderbird 17
Gecko 16.0 (en cours de développement)Firefox 16, SeaMonkey 2.13, Thunderbird 16
Gecko 15.0 (en cours de développement)Firefox 15, SeaMonkey 2.12, Thunderbird 15
Gecko 14.0Firefox 14, SeaMonkey 2.11, Thunderbird 14
Gecko 13.0Firefox 13, SeaMonkey 2.10, Thunderbird 13
Gecko 12.0Firefox 12, SeaMonkey 2.9, Thunderbird 12
Gecko 11.0Firefox 11, SeaMonkey 2.8, Thunderbird 11
Gecko 10.0Firefox 10, SeaMonkey 2.7, Thunderbird 10
Gecko 9.0Firefox 9, SeaMonkey 2.6, Thunderbird 9
Gecko 8.0Firefox 8, SeaMonkey 2.5, Thunderbird 8
Gecko 7.0Firefox 7, SeaMonkey 2.4, Thunderbird 7
Gecko 6.0Firefox 6, SeaMonkey 2.3, Thunderbird 6
Gecko 5.0Firefox 5, SeaMonkey 2.2, Thunderbird 5
Gecko 2.0Firefox 4, SeaMonkey 2.1
Gecko 1.9.2Firefox 3.6, Thunderbird 3.1
Gecko 1.9.1Firefox 3.5, SeaMonkey 2.0, Thunderbird 3.0
Gecko 1.9.0Firefox 3
Gecko 1.8.1Firefox 2, SeaMonkey 1.1, Thunderbird 2.0
Gecko 1.8.0Firefox 1.5, SeaMonkey 1.0, Thunderbird 1.5
Gecko 1.7Firefox 1.0, Mozilla Suite 1.7, Nvu 1.0, Thunderbird 1.0
Les versions plus anciennes de Gecko correspondent aux versions de la Suite Mozilla
- -
-

Ressources

- - - -

{{ languages( { "de": "de/Gecko", "en": "en/Gecko", "es": "es/Gecko", "it": "it/Gecko", "ja": "ja/Gecko", "ko": "ko/Gecko", "pl": "pl/Gecko", "pt": "pt/Gecko", "zh-cn": "cn/Gecko" } ) }}

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" deleted file mode 100644 index bf0dbc85cf..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" +++ /dev/null @@ -1,422 +0,0 @@ ---- -title: Vue d'ensemble des APIS embarquées de Mozilla -slug: Mozilla/Gecko/Mozilla_embarqué/API_overview -translation_of: Mozilla/Gecko/Embedding_Mozilla/API_overview ---- -

Introduction

-

The Mozilla Public API consists of a collection of services and components which are accessed via XPCOM interfaces. Mozilla's XPCOM layer consists of a component model (called XPCOM) and the infrastructure necessary to support dynamic registration, instantiation and manipulation of XPCOM components.

-

At the heart of XPCOM's implementation is the Service Manager and the Component Manager. Together, these two services provide a centralized point for gaining access to all of the public Mozilla interfaces.

-

The Service Manager exposes all of the available XPCOM services - each service represents a global object which provides some piece of functionality. The Component Manager allows new instances of registered XPCOM components to be instantiated.

-

Image:public-apis-image2.gif

-

The embedding layer consists of several components built on top of XPCOM and its services. Much of the Gecko functionality is exposed through a component called the nsWebBrowser. Embedding applications can leverage this component to easily access many of Gecko's features. Each WebBrowser instance represents the "client-area" of a typical browser window. The WebBrowser exposes a set of interfaces which allow the embedding application to control activity and respond to changes within this client area. Using these interfaces an embedding application can build up its own user interface around a WebBrowser instance.

-

Image:public-apis-image1.gif

-

Public Classes

-

The following utility classes are available from the XPCOM DLL. They provide some basic functionality which should be leveraged when building new XPCOM components.

- -

These are templatized smart pointers which transparently deal with XPCOM reference counting issues. See the nsCOMPtr User's Manual for more information.

- -

There are a collection of string classes which support both unicode and ASCII strings. These classes provide a variety of string operations as well as dealing with the memory management issues of storing the underlying data. See the String Guide for more details.

- -

This is an nsCOMPtr which encapsulates XPCOM weak reference support. See the nsIWeakReference document for more information.

-

Public Return Codes

- -

Public Functions

-

The following functions are available from the XPCOM DLL.

- -

This function initializes the Gecko embedding support. This must be the first function call made into Gecko.

- -

This function shuts down Gecko and cleans up any remaining resources... Currently, once Gecko has been shutdown, it cannot be restarted in the same process space... This should change in the future.

- -

This helper class provides static accessors to the global nsMemory Service.

- -

This function returns an instance of the Component Manager service.

- -

This is a helper class which converts an ASCII string into a UCS2 string. Typically, instances of this class are stack allocated, and wrap ASCII arguments which must be converted into UCS2.

- -

This is a helper class which works in conjunction with nsCOMPtr to perform a simplified call to nsISupports::QueryInterface(...) with a typesafe assignment.

- -

This function simplfies retrieving interfaces via the nsIInterfaceRequestor::GetInterface(...) method. Using this function, one can use nsISupports instances and still easily access other interfaces via nsIInterfaceRequestor.

-

Internally, this function tries to convert the nsISupports argument into an nsIInterfaceRequestor and then calls GetInterface(...) to retrieve the requested interface.

- -

This function is the equivilent of do_QueryInterface except that it performs the QI through a weak reference.

- -

This function simplifies accessing services from the Service Manager.

- -

This function simplifies creating new component instances.

- -

This template helper class allows easy access to an interface's nsIID. Typically the NS_GET_IID(...) macro is used instead of using the nsCOMTypeInfo template directly.

- -

This function creates a weak reference to a component which implements the nsIWeakReference interface.

-

Global Services

-

nsServiceManager

-

The Service Manager is the central repository for accessing instances of the various XPCOM services. Each service is represented by a singleton object which is instantiated the first time it is requested and remains alive until the Service Manager is shut down, or the service is explicitly unloaded.

-

Through the Service Manager, individual services can be loaded, unloaded and accessed.

-

Implemented Interfaces:

- -

Related Interfaces:

- -

nsMemory

-

The nsMemory service provides the global memory manager implementation for XPCOM. In addition to memory allocation and release, this service provides low memory notifications, called a memory pressure observers, which are notified when memory is low - thus allowing cached resources to be freed.

-

All heap access should be done via the nsMemory service. To facilitate this, a set of global functions are available to access the nsMemory methods without requiring an instance of the nsMemory service (see nsMemory.h).

-

Contract-id: NS_MEMORY_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

nsComponentManager

-

The nsComponentManager service is responsible for creating new instances of XPCOM components. The Component Manager is also responsible for registering and managing the class factories used for component creation...

-

Contract-id: NS_COMPONENTMANAGER_CONTRACTID

-

Implemented Interfaces:

- -

Requestor Interfaces:

- -

Related Interfaces:

- -

nsURILoader

-

The nsURILoader service is responsible for targeting a URI at an appropriate content handler. A content handler may be an existing or new window, a helper application or the Unknown Content Handler - if no other handler can be found for the content-type.

-

Contract-id: NS_URI_LOADER_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

nsUnknownContentTypeHandler

-

The UnknownContentTypeHandler service is the last resort of the URILoader when no other content handler can be located. If no registered content handlers are available, the UnknownContentTypeHandler is notified.

-

The default implementation of this service displays a dialog box asking the user if the content should be saved to disk...

-

Contract-id: NS_IUNKNOWNCONTENTTYPEHANDLER_CONTRACTID

-

Implemented Interfaces:

- -

HelperApp Launch Dialog

-

Contract-id: NS_EXTERNALHELPERAPPSERVICE_CONTRACTID

-

Implemented Interfaces:

- -

Preferences Service

-

The Preferences service provides access to persistent data stored within a user's profile directory.

-

Contract-id: NS_PREF_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

Profile Manager Service

-

Contract-id:

-

Implemented Interfaces:

-

Document Loader Service (WebProgress)

-

Eventually, this service will be replaced by theWebProgress service...

-

Contract-id: NS_DOCUMENT_LOADER_SERVICE_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

Public Components

-

nsWebBrowser

-

The nsWebBrowser is the main embedding component which Gecko exposes. Conceptually, each nsWebBrowser instance represents a HTML content area.

-

Conceptually, for each document being rendered, Gecko creates a container called a DOMWindow. Each WebBrowser exposes a tree of DOMWindows - representing the frame hierarchy for the current document. As such, access to individual document frames is done via the DOMWindow interfaces. Manipulation of the entire document structure is done via the various WebBrowser interfaces.

-

Contract-id: NS_WEBBROWSER_CONTRACTID

-

Implemented Interfaces:

- -

Requestor Interfaces:

- -

Related Interfaces:

- -

Overview:

-

Most of Gecko's functionality is exposed through the nsWebBrowser component. The WebBrowser provides a simple mechanism for other applications to leverage Gecko functionality. Each instance of a WebBrowser encapsulates a full featured HTML content area.

-

The embedding application receives notifications from Gecko through a set of callback interfaces it may choose to implement.

-

Image:public-apis-image3.gif

-

Below is a code snippet which an embedding application can use to create and initialize a WebBrowser:

-
      nsresult rv;
-      nsCOMPtr<nsIBaseWindow> baseWindow;
-      nsCOMPtr<nsIWebBrowser> webBrowser;
-
-      // Create a nsWebBrowser instance...
-      webBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
-      if (NS_FAILED(rv)) return rv;
-
-      // Give the WebBrowser a pointer to the embedding component which
-      // implements the callback interfaces.  Replace 'this' with
-      // an appropriate object...
-      rv = webBrowser->SetContainerWindow((nsIWebBrowserChrome*)this);
-      if (NS_FAILED(rv)) return rv;
-
-      baseWindow = do_QueryInterface(webBrowser);
-
-      // Initialize the WebBrowser with a native parent window
-      // (ie. HWND on Win32).  Replace 'nativeWindow' with a
-      // reference to an appropriate native resource...
-      rv = baseWindow->InitWindow(nativeWindow,   // Native window
-                                  nsnull,         // Always nsnull.
-                                  x, y, cx, cy);  // Initial dimensions...
-      if (NS_FAILED(rv)) return rv;
-
-      // Create the child window for the WebBrowser.
-      rv = baseWindow->Create();
-      if (NS_FAILED(rv)) return rv;
-
-      // At this point webBrowser contains the new initialized instance
-      // of the nsWebBrowser component...
-      // Save webBrowser before it goes out of scope :-)
-
-
-

Web Navigation

-

The nsIWebNavigation interface is used to load URIs into the WebBrowser and provide access to session history capabilities - such as back and forward.

-

Clipboard

-

The WebBrowser exposes access to the system clipboard via the nsIClipboardCommands interface. This interface supports cut/copy/paste operations on the current selection within the WebBrowser window.

-

Printing (not yet implemented)

-

Printing the contents of a DOMWindow within a WebBrowser is a two step process. First, the printer and page options are collected via the nsIPrintOptions interface. On most platforms this involves displaying a native Print dialog box. Once all of the options have been set, the nsIWebBrowserPrint interface is used to print the contents of the desired DOMWindow.

-

Searching

-

Searching within a nsWebBrowser is controlled via the nsIWebBrowserFind interface. The search is always performed within the DOMWindow which currently has the focus.

-

Focus Management

-

Focus managment within the WebBrowser is accessed via the nsIWebBrowserFocus interface.

-

This interface serves two purposes. First, it provides methods for the embedding application to notify a WebBrowser of activation/deactivation and to control tabbing order... This interface also allows access to the currently focused DOMWindow and DOMElement.

-

Context Menu notifications

-

Right-click context menu notifications are passed up to the embedding application through the nsIContextMenuListener interface. These notifications allow the embedding application to display context menus based on user activity within the WebBrowser (such as a right-click on a hypertext link).

-

Saving Documents

-

Notification Interfaces which the embedding application should implement

-

nsFile

-

Public Interfaces

-

nsISupports

-

Base Component Object Model interface. This interface provides runtime interface discovery and a reference counted memory model fashioned after the Microsoft COM IUnknown interface.

-

Interface status... none

-

Interface definition: nsISupportsUtils.h

-


- nsIInterfaceRequestor

-

This Interface provides an interface discovery mechanism which does not imply aggregation. Interface status... none

-

Interface definition: nsIInterfaceRequestor.idl

-

nsIWeakReference

-

This interface is used to retern a proxy reference to a component.

-

Interface status... being reviewed

-

Interface definition: nsIWeakReference.idl

-

nsISimpleEmunerator

-

This interface provides a simple enumeration abstraction.

-

Interface status... being reviewed

-

Interface definition: nsISimpleEnumerator.idl

-

nsIServiceManager

-

This interface allows access to global services within mozilla.

-

Interface status... none

-

Interface definition: nsIServiceManager.h

-


- nsIShutdownListener

-

This interface is used to receive notifications when the Service Manager is being shutdown.

-

Interface status... none

-

Interface definition: nsIServiceManager.h

-


- nsIComponentManager

-

This interface allows new instances of registered XPCOM components to be instantiated.

-

Interface status... none

-

Interface definition: nsIComponentManager.idl

-


- nsIFactory

-

This interface is used by the Component Manager to create new instances of a particular XPCOM component. Each component must provide a factory implementation for creating new instances.

-

Interface status... none

-

Interface definition: nsIFactory.idl

-


- nsIMemory

-

This interface provides access to the global memory management functionality.

-

Interface status... being reviewed

-

Interface definition: nsIMemory.idl

-


- nsIDOMWindow

-

This interface is used to represent the window containing a specific document.

-

Interface status... being reviewed

-

Interface definition: nsIDOMWindow.idl

-


- nsIBaseWindow

-

This interface provides access to various window operations.

-

Interface status... being reviewed

-

Interface definition: nsIBaseWindow.idl

-


- nsIRequest

-

This interface provides a means to control various operations.

-

Interface status... being reviewed

-

Interface definition: nsIRequest.idl

-


- nsIWebBrowser

-

This is the primary interface to the WebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowser.idl

-


- nsIWebBrowserSetup

-

This interface is used to enable or disable various capabilities of a nsWebBrowser instance.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserSetup.idl

-


- nsIWebBrowserChrome

-

This interface provides access to the window containing an nsWebBrowser instance.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserChrome.idl

-


- nsIWebNavigation

-

This interface exposes the web navigation functionality of the nsWebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebNavigation.idl

-


- nsIWebBrowserPersist

-

This interface exposes the save-as functionality of the nsWebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserPersist.idl

-


- nsIWebBrowserPrint

-

This interface allows printing of individual (or a collection of) DOM Windows within a nsWebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserPrint.idl

-


- nsIWebBrowserFind

-

This interface exposes the searching capabilities of the nsWebBrowser component.

-

Interface status... none

-

Interface definition: nsIWebBrowserFind.idl

-


- nsIWebBrowserFocus

-

This interface provides access to the focus information of a nsWebBrowser instance.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserFocus.idl

-


- nsIWebProgress

-

Interface status...

-

Interface definition:

-


- nsIWebProgressListener

-

Interface status...

-

Interface definition:

-


- nsIPrompt

-

Interface status...

-

Interface definition:

-


- nsIPrefs

-

Interface status...

-

Interface definition:

-


- {{ interface("nsIProfile") }}

-

The Profile Manager creates and manages user profiles; each profile is essentially a complete configuration of the application, including preferences, installed extensions, and so forth.

-


- nsIDirectoryServiceProvider

-

Interface status...

-

Interface definition:

-


- nsILocalFile

-

Interface status...

-

Interface definition:

-


- nsIFile

-

Interface status...

-

Interface definition:

-


- nsIClipboardCommands

-

Interface status...

-

Interface definition:

-


- nsISelection

-

Interface status...

-

Interface definition:

-


- nsIURILoader

-

Interface status...

-

Interface definition:

-


- nsIURIContentListener

-

Interface status...

-

Interface definition:

-

 

-

Defining New XPCOM Components

-
-

Original Document Information

- -
-

 

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" deleted file mode 100644 index e35036fbf4..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Embarquer Gecko -slug: Mozilla/Gecko/Mozilla_embarqué/FAQ_de_Mozilla_embarqué/Embarquer_Gecko -tags: - - FAQ_de_Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla/FAQ/Embedding_Gecko ---- -

Obsolète
Cette fonctionnalité est obsolète. Bien qu'encore supportée par des navigateurs, son utilisation est découragée pour tout nouveau projet. Évitez de l'utiliser.

- -
Embedding of Gecko is no longer supported. If you currently embed Gecko, you should use an alternate solution, because you will not be able to pick up new security improvements. Do not use the techniques covered on this page; this material is retained for historical purposes only.
- -

Section 2 : Embarquer Gecko

- -

De quels fichiers ai-je besoin pour embarquer ?

- -

Actuellement, vous devez télécharger et compiler toute l'arborescence des sources du navigateur Mozilla puis choisir les fichiers binaires que vous souhaitez embarquer dans votre application.
- Lesnightly builds sont créées automatiquement depuis les manifests donc vous pouvez commencer à chercher de ce coté.

- -

Comment puis-je compiler les sources à embarquer ?

- -

Premièrement compilez Mozilla, puis saisissez :

- -
cd mozilla/embedding/config
-make
-
- -

Note : Si vous utilisez un objdir, placez-vous plutôt dans le répertoire mozilla/<objdir>/embedding/config puis lancez la compilation avec make.

- -

Un répertoire appelé mozilla/dist/Embed est créé, il contient les fichiers spécifiés par les manifests par défaut et chrome. Vous pouvez tester les compilations par défaut en exécutant les applications de test TestGtkEmbed sous Unix ou MFCEmbed sous Win32. Pour exécuter TestGtlEmbed sous Unix saisissez :

- -
cd mozilla/dist/Embed
-./run-mozilla.sh ./TestGtkEmbed
-
- -

Comment est faite la distribution embarquée ?

- -

Look in embedding/config/ to see a the embedding build process. The basebrowser-win (or basebrowser-unix etc.) file determines which files need to be copied. The embed-jar.mn specifies what chrome is required.

- -

Note that this sample only contains atypical subset of files. You may wish to add or remove files from basebrowser-foo (where foo is win, unix or mach as appropriate) depending on the capabilities you need in your product, or supplement these files by writing your own client-foo file which will be read in addition to basebrowser-foo.

- -

For instance, you can remove the "necko2" library if you do not need FTP, but you will need to add the "appcomps" and "mork" libraries in order to use the Mozilla browser's global history implementation.

- -

The embedding distribution readme file provides more information.

- -

Todo: provide a more complete map of features <-> files

- -

Pourquoi ai-je besoin de distribuer des fichiers XPT avec mon application ?

- -

XPT files are XPCOM type libraries and contain binary definitions of interfaces used by cross-thread marshalling routines and JavaScript to call objects. In other words they are as vital as DLLs to ensure Gecko functions properly.

- -

XPT files can be concatenated together using the xpt_link tool to reduce clutter and improve startup performance. There is a special perl script for this purpose, that you can see here.

- -

Comment me prémunir des changements de Gecko ?

- -

If you want to be protected against changes in the Gecko, you should only use interfaces and API that are clearly marked FROZEN in their idl description. This query will find most of the frozen interfaces: Frozen Interface and APIs. Interfaces are being reviewed and frozen all the time and cover most things embedders will want to do.

- -

You can still use unfrozen interfaces (hey it's open source and we can't stop you!) and even reach into the guts of the code but you do so at your own risk. Subsequent releases of Mozilla may well change these interfaces and your source and binary will break as a result.

- -

See the Embedding API Reference for more information

- -

Cela veut-il dire que mon application fonctionnera avec toutes les futures versions de GRE/Gecko/Mozilla ?

- -

As long as you use frozen interfaces, the answer is: "Almost." Unfortunately vtable layout can vary from compiler to compiler. This mostly affects Linux compilers such as gcc which have changed their vtable layout more than once in the past few years. See the document on binary compatibility. when ported too, this should be an internal link

- -

Quelles plate-formes sont supportées ?

- -

Short answer is anything Mozilla can run on, then Gecko can too. However, the embedding is concentrating on three primary platforms:

- - - -

L'embarquement supporte-t-il des protocoles sécurisés comme HTTPS ?

- -

Yes, psm is supported in embedding.

- -

Comment mes applications communiquent-elles avec Gecko ?

- -

The Embedding API provides a set of interfaces and to control the embedded application, and another set of interfaces that the containing application must implement in order to receive asynchronous notifications from the embedded browser.

- -

Todo: insert jud's picture here?

- -

Puis-je embarquer sans...

- -

(Some of the more common questions)

- - - -

Puis-je embarquer l'éditeur HTML de Mozilla ?

- -

Sort of. The latest word is that you can embed an editor in a native app, and do command handling and updating via the command handling APIs. There is some lacking functionality (e.g. controlling editor types, inserting and extracting HTML). In addition, the command handling APIs are soon going to change, when Mike Judge lands a long-standing patch (which missed the 1.0 change, and bas been delayed way too long).

- -

Documentation is lacking, mostly because of pending API changes. Check out the Embedding Editor page for more info.

- -

Quel toolkit de widget peut utiliser Mozilla ?

- -

Mozilla makes its own cross-platform widgets for HTML forms, and does not use a 3rd-party cross platform toolkit, nor the native widgets that a platform provides. The widgets are drawn using GFX, Mozilla's abstraction of a drawing toolkit. They are styled with CSS, including minor per-platform tweaks to allow them to look like the native platform's native widgets. This allows full CSS and DOM support of all HTML widgets across all platforms, without requiring each platform to separately support every part of CSS and DOM.

- -

There have been a number of requests for native widget support but at this time there are no plans to support a second widget set beyond the cross-platform widgets.

- -

In the future, widgets may be defined with XBL.

- -

Mozilla embarqué supporte-t-il Java ?

- -

We provide Java support through the OJI plugin API. The Java plugin from Sun takes ~7Mb of disk space (Linux). If you want Java support you should edit the basebrowser-win / basebrowser-unix etc. file and uncomment the OJI section or copy those files manually after an embedding dist has been created.

- -

Puis-je embarquer Mozilla dans n'importe quel autre cas ?

- -

Aside from programming direct to the embedding API you may also embed Mozilla:

- - - -

Interwiki Language Links

- -
 
diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" deleted file mode 100644 index 1836cab0bb..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Introduction à Gecko et à l'embarqué -slug: >- - Mozilla/Gecko/Mozilla_embarqué/FAQ_de_Mozilla_embarqué/Introduction_à_Gecko_et_à_l'embarqué -tags: - - FAQ_de_Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla/FAQ/How_do_I... ---- -

 

-

Introduction à Gecko et à l'embarquement

-

Qu'est-ce que Gecko ?

-

Gecko est le moteur interne du navigateur, ce qui inclut networking, un parser, un modèle de contenu, chrome et les autres technologies sur lesquelles Mozilla et les autres applications sont basées. En d'autres termes, tout ce qui n'est pas spécifique à une application.

-

La FAQ de Gecko est légèrement obsolète FAQ.

-

Qu'est-ce que Mozilla ?

-

Mozilla est un navigateur web open-source multi plates-formes, un éditeur et une application de messagerie / newsgroup créé sur Gecko.

-

Qu'est-ce que le GRE ?

-

Le GRE (formellement le MRE) qui est l'acronime de Gecko Runtime Environment, est un support d'exécution partagé que toutes les applications peuvent utiliser. Il est maintenant développé comme un projet indépendant connu sous le nom de XULRunner.

-

Qu'est-ce que XPCOM ?

-

XPCOM est un - - modèle objet de composants - (semblable à COM/DCOM de MS Windows mais conçut pour être portable sur plusieurs plates-formes) utilisé pour unifier la création, le contrôle, et la suppression d'objets et d'autres données à travers Mozilla. Le coeur de XPCOM est l'interface - - nsISupports - , qui offre des services de comptage des références et d'introspection (possibilité d'interroger les objets afin de se renseigner sur leurs capacités). Tout les objets XPCOM implémentent l'interface - - nsISupports - , en plus de toutes les interfaces spécifiques qui lui sont nécessaire. En fin de compte, XPCOM fournit une couche de services indépendante du language appelé - - XPConnect - qui permet l'implémentation d'objets dans tout language supporté. Grâce à - - XPConnect - , ces objets peuvent aussi être appelés à partir de n'importe lequel de ces languages.

-

On peut trouver plus d'informations ici.

-

Que signifie embarquer Gecko ?

-

Gecko autorise des developpeurs tiers à utiliser la même technologie que Mozilla. Cela signifie que vous pouvez tirer partie, dans une application tierce, des services d'un navigateur web, ouvrir des canaux de communications et faire transiter des flux de données à travers le service réseau, le - - Modèle Objet de Document - (NdT: en anglais DOM, - - Document Object Model - ) et plus encore. Vous pouvez même bâtir entièrement une nouvelle application en utilisant Gecko.

-

Quels sont les termes de licence pour embarquer Gecko ?

-

Les mêmes que pour le reste de Mozilla. Voir la page du MPL pour plus d'informations.

-

Existe-t'il un SDK ?

-

Nous travaillons lentement sur une SDK, gelant et documentant les interfaces et retouchant le processus de construction. Pour le moment nous vous recommandons de télécharger le code source puis de le compiler.

-

Des compilations nocturnes du SDK pour la plateforme Windows 32bits peuvent être disponibles ici.

-

Quelle est la dernière version ? Quelle version utiliser ?

-

Les compilations embarquées et les source tarballs sont produites la nuit et peuvent être obtenues ici. Si vous privilégiez la stabilité, les compilations de la branche 1.7.x de Mozilla sont vivement recommendées.

-

Qui utilise déjà gecko ?

-

Voir ici la liste des logiciels embarquant Gecko.

-

Interwiki Language Links

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" deleted file mode 100644 index b8a2b5bb4c..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Mozilla embarqué -slug: Mozilla/Gecko/Mozilla_embarqué -tags: - - Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla ---- -
-

Gecko permet aux développeurs d'applications tierces de pouvoir bénéficier de la même technologie que celle présente dans Mozilla. Il est possible d'intégrer un navigateur Web à l'intérieur d'une autre application, d'ouvrir des canaux et de parcourir des flux de données à travers le réseau, de manipuler le DOM et ainsi de suite. Des applications entières peuvent être crées en s'appuyant sur Gecko.

-
- - - - - - - - -
-

Documentation

- -
-
FAQ de Mozilla embarqué
-
Une Foire Aux Questions très complète concernant Mozilla embarqué.
-
- -
-
Les bases de Gecko embarqué
-
Une introduction à l'incorporation du moteur de rendu Gecko dans une application (à traduire de en:Gecko Embedding Basics).
-
- -
-
Intégration de l'éditeur
-
Ce document détaille la situation actuelle de l'éditeur dans ce domaine, les problèmes dans l'implémentation existante, certains scénarios possibles d'intégration de l'éditeur qui doivent être pris en compte, et une solution embarquée qui les intègrera.
-
- -
-
Construisez votre propre navigateur - Comment embarquer Mozilla
-
Une introduction rapide à Mozilla embarqué (à traduire de en:Roll your own browser - An embedding HowTo.
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

{{ DiscussionList("dev-embedding", "mozilla.dev.embedding") }}

- - - -
-
Gecko, XPCOM
-
-
- -

 

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" deleted file mode 100644 index 4e6e8c8281..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Intégration de l'éditeur -slug: Mozilla/Gecko/Mozilla_embarqué/Intégration_éditeur -tags: - - Midas - - Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla/Embedding_the_editor ---- -

Introduction

- -

Ce document présente les possibilités actuelles d'intégration d'un éditeur, les problèmes causés par l'intégration existante, quelques scénarios d'intégration possibles pour s'en sortir, et une solution d'intégration pour les réaliser. Pour finir, la solution retenue sera décrite étape par étape.

- -

Mises en œuvre possibles de l'intégration

- -

Ici sont décrits des scénarios d'intégration nécessaires pour faire fonctionner un éditeur. Notez que j'utilise le terme de « Compositeur » pour désigner une interface de composition au format HTML qui fait de l'édition de texte enrichi et « Éditeur » pour un éditeur en texte brut (aussi bien que pour la technologie sous-jacente du compositeur). <htmlarea> est vu comme une formule pour désigner un objet texte contenant du texte enrichi, cela ne veut pas dire pour autant que cette balise sera supportée dans les versions suivantes de Mozilla.

- -

Compositeur intégré dans une application XUL

- -

Les développeurs ont besoin d'intégrer des compositeurs dans leurs applications XUL en utilisant la balise <editor>, comme cela se fait aujourd'hui. Ils devraient avoir le moins possible de travail à faire pour obtenir les fonctions basiques d'édition, avoir autant d'<editor>s par fenêtre qu'ils le souhaitent et pouvoir contrôler si ces <editor>s sont en mode HTML ou en mode texte.

- -

Compositeur intégré dans une application native

- -

Dans ce cas de figure, l'<iframe> dans laquelle fonctionne l'éditeur est directement intégrée dans l'application native. Cela revient à intégrer un navigateur via nsIWebBrowser, mais en obtenant, à la place, un document éditable. L'interface du compositeur (barres d'outils, etc.) doit être implémentée à partir des éléments d'interface graphique présents dans le conteneur ou en utilisant du XUL. Cette interface doit être configurable, avec notamment des barres d'outils flottantes déplaçables (dockable ?), une même barre d'outils pour plusieurs objets compositeur, ou une pour chaque.

- -

Ce type d'intégration requiert que le code du compositeur fonctionne quelle que soit l'interface utilisateur (IU). La communication entre le noyau de l'éditeur et l'interface utilisateur doit pouvoir passer par une ou plusieurs interfaces qui isolent l'éditeur de l'application hôte. (L'nsEditorShell existant fait des suppositions sur l'hébergement de document XUL, qui doivent être contredites.)

- -

Compositeur intégré dans une page web (<htmlarea>)

- -

IE 5 supporte l'élément <HTMLArea> ; si Mozilla travaille à supporter quelque chose de similaire, l'éditeur devra être intégrable dans la mesure du possible. Il est probable qu'on utilise XBL pour implémenter ce type d'objet, comme c'est prévu pour d'autres types de contrôles.

- -

Dans le cas de l'intégration du compositeur dans une application native, il est donc ici nécessaire de rendre l'interface utilisateur configurable, de façon que l'on puisse aussi bien l'afficher comme une barre d'outils au dessus de <htmlarea>, comme une fenêtre flottante, ou comme une barre d'outil de haut-niveau (top-level).

- -

Problèmes connus

- -

L'architecture du compositeur existant a été créée alors que d'autres parties de Mozilla étaient encore en cours de développement. Il en résulte de nombreux points faibles et anachronismes. Cette section décrit ses défauts majeurs.

- -

Problème d'appartenance de l'éditeur

- -

L'éditeur d'une fenêtre compositrice appartient au nsEditorShell, qui à son tour est créé, dirigé et détruit par nsEditorBoxObject. L'objet box est une structure de présentation qui appartient aux noeuds de contenu et survit à la destruction/reconstitution de la frame. L'objet box a également une référence vers le docShell de la frame éditrice. XBL créé un nsEditorBoxObject pour chaque balise <editor>, et permet à Javascript d'accéder aux propriétés de cet objet box (tel que le nsIEditorShell). La balise <editor> est tout simplement une <iframe> dans laquelle l'éditeur est créé. Dans les autres aspects, il se comporte comme une <iframe> XUL.

- -

Le problème avec ce modèle d'appartenance est qu'il ne peut y avoir qu'un éditeur par balise <editor>, alors que le document chargé dans l'<iframe> peut très bien contenir de multiples <iframe>s (dans le cas d'un document frameset ou dans un document contenant lui-même un <html:iframe>). Aujourd'hui, le compositeur ne fonctionne pas très bien avec ce types de document.

- -

Limitation d'un éditeur par fenêtre

- -

Le compositeur construit sur une architecture XUL/C++ s'est développé sur le présupposé qu'une seule balise <editor> par fenêtre suffirait. Lors de la construction de la fenêtre, nous prenons l'editorShell de l'élément <editor> que l'on met dans window.editorShell. A partir de là, beaucoup de Javascript dans editor.js, ComposerCommands.js et les différents fichiés JS de dialogue s'assurent de pouvoir atteindre le seul bon éditeur via window.editorShell. Ce présupposé manquait de clairevoyance et doit être corrigé.

- -

L'éditeur suppose une structure de document XUL

- -

Du code C++ et JS présent dans l'éditeur suppose que celui-ci se trouve dans un document XUL et qu'il y ait des nœuds du document XUL en dehors, dont les attributs peuvent être récupérés pour changer l'état de l'interface utilisateur (par exemple le style des boutons). Cela doit être changé pour permettre aux conteneurs d'utiliser leurs propres apparences, probablement natives. L'éditeur doit pouvoir faire des appels à travers une ou plusieurs interfaces quand il communique avec l'interface utilisateur.

- -

Objectifs de l'intégration

- -

L'éditeur requiert des changements de conception de façon à ce que les applications intégrées soient fonctionnelles. Ces changements doivent nécessairement prendre en compte les problèmes existants. Brièvement, les objectifs de l'intégration sont :

- - - -

Atteindre ces objectifs doit également permettre de résoudre les problèmes suivants, liés au compositeur :

- - - -

Solutions proposées

- -

Régler les problèmes d'appartenance de l'éditeur

- -

Comme décrit plus haut, les liens d'appartenance (racines) de l'éditeur doivent être changés de façon à ce qu'un éditeur se trouve au plus haut niveau du nsDocShell, plutôt que d'être accroché à l'objet nsEditorBoxObject. Il doit y avoir un docShell par <iframe> éditable. Cela implique :

- - - - - -

Plus d'un éditeur par fenêtre

- -

Les clients compositeurs basés sur Mozilla supposent tous qu'il n'y a qu'une balise <editor> par fenêtre. Ils ont tous besoin de fonctionner avec plusieurs éditeurs. Corriger cela nécessite des modifications JS de cette ordre :

- - - -

Isoler l'éditeur de l'interface

- -

Le compositeur doit ne rien connaitre de l'IU qui le contrôle. Le plan est d'isoler le compositeur de l'IU via une nouvelle interface que le conteneur implémente. N'importe quel IU qui est aujourd'hui créée par le compositeur doit passer par cette interface.

- - - -

Les étapes de l'intégration

- -

Cette section tente de préparer un plan d'implémentation, dans le but de garder tout en état de marche étape après étape (? as the various steps are taken). Certaines de ces tâches peuvent être faite simultanément.

- -
    -
  1. Décider comment implémenter le support d'une session édition muti-éditeur
  2. -
  3. Éliminer les interdépendances spécifiques entre le compositeur et le document XUL, via nsIEditorUserInterface
  4. -
  5. Créer un goulet d'étranglement pour communiquer avec l'éditeur qui a le focus; s'assurer que les changements de focus mettent bien à jour l'état
  6. -
  7. Faire du docShell,le propriétaire de l'éditeur, créant nsIEditorFrame
  8. -
  9. Créer l'API de la session d'édition qui s'occupera des collections d'éditeurs (ou rendre l'éditeur refocusable)
  10. -
- -

Questions ouvertes

- -

Ou doit se trouver la logique d'ouverture et enregistrement de fichier ?

- -

Il semble que certains conteneurs voudront composer leur logique d'ouverture et enregistrement de fichier, d'autres non. Ou devrait se trouver cette logique ? Peut-elle être en JavaScript ? Bien sur, un conteneur doit pouvoir utiliser ses propres boîtes de dialogue Ouvrir et Enregistrer et communiquer avec le compositeur pour coordonner le processus d'ouverture et enregistrement.

- -
Réponse possible
- -

Le conteneur fournit les boîtes de dialogue Ouvrir et Enregistrer s'il le veut. Dans le compositeur, on peut adopter (? pose) ces boîtes de dialogue à partir de JS (? certains problèmes liés à nsIFile ont été résolu - once some nsIFile problems have been solved).

- -

Toute l'IU du compositeur doit-elle être remplaçable ?

- -

Une immense partie de l'IU du compositeur se trouve dans les différentes boîtes de dialogue pour l'édition des tableaux, liens, images etc. Doit-on donner la possibilité à un conteneur de remplacer tout cela par une IU native ?

- -
Réponse possible
- -

Les boîtes de dialogue utilisent les API de l'éditeur disponible pour obtenir et affecter les données, donc elles peuvent faire tout leur travail en passant par les API existantes. Si un intégrateur veut une IU entièrement native, il aura à coder ses propres boîtes de dialogue et logiques associées, mais les API devraient toujours leurs être accessibles. Il semble que ce ne soit pas une bonne solution.

diff --git a/files/fr/mozilla/gecko/sdk_gecko/index.html b/files/fr/mozilla/gecko/sdk_gecko/index.html deleted file mode 100644 index 306fb0590f..0000000000 --- a/files/fr/mozilla/gecko/sdk_gecko/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: SDK Gecko -slug: Mozilla/Gecko/SDK_Gecko -tags: - - Développement_de_Mozilla - - Extensions - - Gecko -translation_of: Mozilla/Gecko/Gecko_SDK ---- -

-

-

Aperçu

-

Le SDK Gecko est un ensemble de fichiers XPIDL, d'entêtes et d'outils pour développer des composants XPCOM pouvant à leur tour être accéder depuis XUL grâce à JavaScript. -

Notez que le développement de tels composants ne nécessite pas que vous possédiez la totalité des sources, par exemple de Firefox, puisque vous n'accédez pas à l'interface utilisateur depuis un composant. Comme le composant contient des fonctions basiques, il doit pouvoir fonctionner avec chaque application de la plateforme Mozilla. Il n'y a donc aucune raison de se baser sur une application particulière pour créer une fonctionnalité générique. C'est la raison pour laquelle a été conçu le SDK Gecko. -

Il ne faut pas confondre le SDK Gecko avec XULRunner. Le SDK Gecko est une collection de fichiers d'entêtes et d'outils utilisée pour développer des composants XPCOM généraux afin d'ajouter des fonctionnalités à une plateforme existante, alors que XULRunner peut servir de support à l'éxécution d'applications autonomes ou embarquées basées sur la technologie Mozilla. -

-

Obtenir le SDK

-

Notez qu'il n'est pas nécessaire de re-télécharger ou de re-compiler le SDK Gecko à chaque mise à jour de sécurité de Mozilla puisque le SDK Gecko ne subit pas de modifications lors de ces mises à jour. -

-

Téléchargement

-

Lorsque vous téléchargez le SDK Gecko, vous devez choisir la version correspondant à la plus ancienne version de Mozilla que vous ciblez. Autrement dit, vous ne devez pas télécharger le SDK Gecko 1.7 si vous souhaitez utiliser votre composant avec Mozilla 1.6. C'est un point important car la compatibilité binaire n'est assurée qu'avec les versions futures du moteur de rendu Gecko. Pour ce tutoriel, nous utiliserons la version 1.7 du SDK Gecko, ainsi notre composant sera compatible avec Mozilla 1.7 (et ses produits dérivés tels que Firefox 1.0 ou Netscape 7.2). -

- - - - - -
Lien de téléchargement -Gecko 1.7 (Firefox 1.0) -Gecko 1.8 (Firefox 1.5 et 2.0) -
Windows -Download -Download -
Mac -N/A -Download -
Linux i686 -Download -Download -
-

Le SDK n'est pas officiellement disponible pour d'autres plateformes ; si vous en avez besoin, vous devrez probablement le compiler vous même. -

Décompressez le fichier dans un répertoire de votre disque. -

-

Compiler le SDK

-

Pour compiler le SDK, vous devez compiler XULRunner (le SDK Gecko est compilé en même temps que XULRunner). Consultez la documentation sur la compilation pour plus de précisions. -

Le SDK Gecko est généré dans dist/sdk dans votre répertoire objet. Vous pouvez ensuite copier ce répertoire vers un autre emplacement et supprimer l'arborescence XULRunner. -

-

Contenu du SDK

-

Le SDK contient les éléments suivants : -

- -

Pour plus d'informations sur la manière de lier des composants XPCOM en utilisant la bibliothèque "glue" XPCOM, consultez XPCOM Glue. -

-
-
-{{ languages( { "en": "en/Gecko_SDK", "ja": "ja/Gecko_SDK", "zh-cn": "cn/Gecko_SDK" } ) }} diff --git a/files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html b/files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html deleted file mode 100644 index 8fd8b5daa7..0000000000 --- a/files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Implémenter Pontoon sur un projet Mozilla -slug: Mozilla/Implementer_Pontoon_sur_un_projet_Mozilla -tags: - - Localisation -translation_of: Mozilla/Implementing_Pontoon_in_a_Mozilla_website ---- -

Pontoon est un outil What-You-See-Is-What-You-Get (WYSIWYG) web pour la localisation (l10n). Chez Mozilla, nous utilisons actuellement Pontoon pour la localisation de plusieurs projets Mozilla et pour l'interface de l'app de Firefox OS app, connue comme Gaia. Pontoon est un outil simple et intuitif qui demande très peu de compétences techniques de la part des localisateurs, ce qui réduira le temps de publication des versions localisées de votre projet. Nous discutons ci-dessous de la manière d'ajouter Pontoon à votre projet Mozilla.

- -
-

Vous voulez participer à l'amélioration de Pontoon? Apprenez comment participer su GitHub.

-
- -
-

Vous venez de démarrer votre projet de localisation? Jetez un oeil sur la page Localisez votre projet de notre wiki.

-
- -

A. Rendre votre projet localisable

- -

Nous comprenons que les éléments suivants puissent être considérés des meilleures pratiques standards pour la localisation de projets chez Mozilla, mais nous ne perdons rien à faire un petit rappel:

- -
    -
  1. Assurez-vous que votre projet supporte l'un des frameworks l10n (gettext, XLIFF, L20n, lang, properties, etc.).
  2. -
  3. Extrayez les strings localisables dans des fichiers de ressources.
  4. -
  5. Envoyez (push) les ressources vers un repository (SVN, HG, Git). -
      -
    • Les répertoires locaux individuels doivent être situés au même niveau d'indentation de l'arbre des répertoires. La locale d'origine doit être nommée templates, en-US, en-us ou en. Si plusieurs répertoires avec de tels noms existent dans le repository et contiennent des fichiers dans un format de fichier supporté, le premier sera utilisé. Vous pourriez vouloir mettre tous les dossiers dans un répertoire locales dédié à cet objectif. Le code des locales ne doit pas faire partie du nom du fichier.
    • -
    • Forme correcte: -
      /locales/{locale_code}/path/to/file.extension
      -
    • -
    • Forme incorrecte: -
      /locales/{locale_code}/path/to/file.{locale_code}.extension
      -
    • -
    -
  6. -
  7. Assurez-vous que Pontoon a les droits en écriture sur votre repository. - -
  8. -
- -

B. (optionnel) Activer la localisation en-page de votre projet web

- -
    -
  1. Liez un script depuis l'élément <body> de votre code HTML, pour que Pontoon puisse parler à votre site, détecter le contenu et le rendre localisable en-place. Vous devez seulement faire ça sur l'environnement qui sera utilisé pour la localisation en-page. En gros, votre serveur de validation: - - -
  2. -
  3. Si votre site utilise CSP,  assurez-vous que les actions suivantes sont autorisées pour le domaine pontoon.mozilla.org: -
      -
    1. charger dans une iframe
    2. -
    3. charger des CSS distants
    4. -
    5. chargez des images distantes
    6. -
    -
  4. -
  5. Si votre site utilise le header X-Frame-Options, assurez-vous que le chargement dans des iframes est autorisé pour le domaine pontoon.mozilla.org.
  6. -
  7. Assurez-vous que votre site supporte HTTPS. C'est gratuit, automatisé et libre. Let's encrypt!
  8. -
- -

C. Ajoutez votre projet à Pontoon

- -

Votre projet est maintenant prêt à être configuré sur Pontoon. Enregistrez un bug sur Localization Infrastructure and Tools :: Administration / Setup et fournissez-nous l'information suivante:

- - - -

Pour plus de détails, contactez l'Équipe de gestion du projet.

diff --git a/files/fr/mozilla/instantbird/index.html b/files/fr/mozilla/instantbird/index.html deleted file mode 100644 index d73135fead..0000000000 --- a/files/fr/mozilla/instantbird/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Instantbird -slug: Mozilla/Instantbird -translation_of: Mozilla/Instantbird ---- -

Instantbird est une application de messagerie instantanée avec liens étroits à Mozilla. Ces pages documentent Instantbird et fournissent également des liens vers de la documentation sur le Chat Core backend, qui est également utilisée dans Thunderbird.

- -

Instantbird est construit sur le même plate-form technique que Firefox. Initialement proposé comme projet Google Summer of Code pour créer une interface d'XML autour libpurple (le backend de Pidgin). Instantbird n'a pas été accepté, mais a débuté en 2007, depuis il a grandis au-delà d'une frontend simple pour que libpurple à dispose de ses propres protocales.

- - - - - - - - -
-

Documentation

- -
-
Constuction d'Instantbird
-
Information sur la création d'Instantbird à partir du dépôt comm-central.
-
Chat Core
-
Le code backend, y compris documentation rugueux sur chat protocols ({{ Interface("prplIProtocol") }} and ami.e.s.).
-
Affichage des Messages
-
Information sur le thème de l'affichage des messages.
-
Raccourcis Clavier
-
Liste des raccourcis clavier.
-
-

Liens Utils

-
-
Dernier nightly builds
-
Ceux-ci sont généralement stables, mais attendent à des problèmes de temps à autreet déposer des bugs.
-
- -

Voir Tout...

-
-

Communauté

- -
    -
  • #instantbird sur irc.mozilla.org (pour des utilisateurs et développeurs)
  • -
  • Assistance est géré sur la liste de diffusion pour support-instantbird ou sur IRC: {{ DiscussionList("support-instantbird", "mozilla.support.instantbird") }}
  • -
  • Questions d'extensions peut-être discuté sur le dev-chat groupe ou sur IRC: {{ DiscussionList("dev-chat", "mozilla.dev.chat") }}
  • -
  • une liste de tout Instantbird canaux de communication
  • -
- -

Outils

- - - - - - -
diff --git a/files/fr/mozilla/internal_css_attributes/index.html b/files/fr/mozilla/internal_css_attributes/index.html deleted file mode 100644 index cd449f72a5..0000000000 --- a/files/fr/mozilla/internal_css_attributes/index.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Chrome-only CSS attributes -slug: Mozilla/Internal_CSS_attributes -tags: - - TopicStub -translation_of: Mozilla/Gecko/Chrome/CSS ---- -
{{CSSRef}}
- -

Les attributs CSS suivants ne sont disponibles qu'à partir du code privilégié (chrome) et sont spécifiques à Mozilla.

- -

{{LandingPageListSubpages}}

- -

Voir aussi

- - diff --git a/files/fr/mozilla/javascript_astuces/index.html b/files/fr/mozilla/javascript_astuces/index.html deleted file mode 100644 index f2bbb7b567..0000000000 --- a/files/fr/mozilla/javascript_astuces/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Astuces JavaScript -slug: Mozilla/JavaScript_Astuces -tags: - - Developper avec Mozilla - - JavaScript -translation_of: Mozilla/JavaScript_Tips ---- -

XUL Tips

- - - -
var UniqueName = {
-  _privateMember: 3,
-  publicMember: "A string",
-
-  init: function() {
-    this.doSomething(this.anotherMember);
-  },
-
-  doSomething: function(aParam) {
-    alert(aParam);
-  }
-};
-
- -

XPConnect

- - - -
if (target instanceof Components.interfaces.nsIRDFResource)
-  return target.Value;
-if (target instanceof Components.interfaces.nsIRDFLiteral)
-  return target.Value;
-return null;
-
- - - -
var weakObserver = {
-  QueryInterface: function QueryInterface(aIID) {
-    if (aIID.equals(Components.interfaces.nsIObserver) ||
-        aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
-        aIID.equals(Components.interfaces.nsISupports))
-       return this;
-    throw Components.results.NS_NOINTERFACE;
-  },
-  observe: function observe(aSubject, aTopic, aState) {
-  }
-}
-
- - - -

DOM elements

- - - -

References

- - - -

{{ languages( { "ja": "ja/JavaScript_style_guide" } ) }}

diff --git a/files/fr/mozilla/javascript_code_modules/index.html b/files/fr/mozilla/javascript_code_modules/index.html deleted file mode 100644 index b982031dd1..0000000000 --- a/files/fr/mozilla/javascript_code_modules/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: JavaScript code modules -slug: Mozilla/JavaScript_code_modules -tags: - - Add-ons - - Extensions - - JavaScript - - Modules - - TopicStub - - XPCOM -translation_of: Mozilla/JavaScript_code_modules ---- -
{{gecko_minversion_header("1.9")}}
- -

Modules de code javaScript permettent de multiples priviléges de code partagé étendues. Par exemple, un module peut être utilisé par Firefox, ainsi que par des extensions, afin d'éviter la duplication de code.

- - - - - - - - -
-

Sujets généraux

- -
-
Utilisation de modules de code JavaScript
-
Une introduction à la façon d'utiliser les modules de code JavaScript.
-
Component.utils.import
-
Comment importer un module de code JavaScript.
-
Component.utils.unload {{gecko_minversion_inline("7.0")}}
-
Comment décharger un module de code JavaScript.
-
Code snippets: Modules
-
Des exemples de la façon d'utiliser des modules de code.
-
Mozilla Labs JS Modules
-
Cette page propose une liste de modules JS, ainsi que des liens de téléchargement et de la documentation, que les développeurs d'extensions peuvent utiliser dans leur code.
-
- -
-
-
-

Modules de code standard

- -
-
AddonManager.jsm {{gecko_minversion_inline("2.0")}}
-
Interface pour installer, gérer et désinstaller des add-ons.
-
AddonRepository.jsm {{gecko_minversion_inline("2.0")}}
-
Permet de rechercher des addons référentiel.
-
ctypes.jsm {{fx_minversion_inline("3.6")}}
-
Fournit une interface qui permet au code JavaScript d'appeler les bibliothèques natives sans nécessiter le développement d'un composant XPCOM.
-
DeferredTask.jsm {{gecko_minversion_inline("18.0")}}
-
Exécuter une tâche après un délai.
-
Dict.jsm {{gecko_minversion_inline("5.0")}}
-
Fournit une API pour les dictionnaires de paires clé/valeur.
-
DownloadLastDir.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit le chemin d'accès au répertoire dans lequel le dernier téléchargement a eu lieu.
-
Downloads.jsm {{gecko_minversion_inline("23.0")}}
-
Fournit un point d'entrée unique pour interagir avec les capacités de téléchargement de la plate-forme.
-
FileUtils.jsm {{gecko_minversion_inline("1.9.2")}}
-
Fournit des aides pour le traitement des fichiers.
-
Geometry.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit des routines pour effectuer des opérations géométriques de base sur des points et des rectangles.
-
ISO8601DateUtils.jsm
-
Fournit des routines pour convertion entre des objets Date JavaScript et des chaînes de date ISO 8601.
-
NetUtil.jsm
-
Fournit des fonctions utilitaires de mise en réseau utiles, notamment la possibilité de copier facilement des données d'un flux d'entrée vers un flux de sortie de manière asynchrone.
-
openLocationLastURL.jsm {{gecko_minversion_inline("1.9.1.4")}}
-
Donne accès à la dernière URL ouverte à l'aide de l'option "Ouvrir l'emplacement" dans le menu Fichier.
-
osfile.jsm {{gecko_minversion_inline("16.0")}}
-
Le module JavaScript OS.File contient des primitives de manipulation de fichiers
-
PerfMeasurement.jsm {{fx_minversion_inline("4.0")}}
-
Permet d'accéder au hardware de bas niveau et aux outils OS de mesure de performance.
-
PluralForm.jsm
-
Fournit un moyen simple d'obtenir les formes plurielles correctes pour la locale actuelle, ainsi que des moyens de localiser vers une règle plurielle spécifique.
-
PopupNotifications.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit un moyen facile de présenter des notifications non-modales aux utilisateurs.
-
Promise.jsm {{gecko_minversion_inline("25.0")}}
-
Met en oeuvre la proposition Promises/A+ telle que connue en avril 2013
-
Services.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit getters pour obtenir facilement l'accès aux services couramment utilisés.
-
source-editor.jsm {{fx_minversion_inline("11.0")}}
-
Est utilisé par les outils de développement tels que l'éditeur de style; cette interface implémente l'éditeur et vous permet d'interagir avec lui.
-
Sqlite.jsm {{gecko_minversion_inline("20.0")}}
-
Une API basée sur promise de {{ interface("mozIStorage") }}/SQLite.
-
Task.jsm {{gecko_minversion_inline("17.0")}}
-
Met en œuvre un sous-ensemble d'opérations asynchrones séquentielles simple Task.js , en utilisant la puissance de l'opérateur JavaScript yield.
-
Timer.jsm {{gecko_minversion_inline("22.0")}}
-
Une mise en œuvre pur JS de window.setTimeout.
-
XPCOMUtils.jsm
-
Contient des utilitaires pour les composants JavaScript chargés par le chargeur composant JS.
-
-
diff --git a/files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html b/files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html deleted file mode 100644 index b2ed155f4f..0000000000 --- a/files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: OSFile.jsm -slug: Mozilla/JavaScript_code_modules/OSFile.jsm -tags: - - File - - IO - - JavaScript - - NeedsTranslation - - OS - - TopicStub - - Unix - - Windows - - add-on - - platform -translation_of: Mozilla/JavaScript_code_modules/OSFile.jsm ---- -

Le module JavaScript OS.File contient des primitives pour manipuler des fichiers hors du thread principal.

- -

F.A.Q.

- -
-
Qu'est-ce que OS.File?
-
OS.File est une nouvelle API conçue pour une manipulation efficace et hors-fil des fichiers par du code JavaScript privilégié. Cette API est destinée à remplacer, à terme, la plupart des manipulations de fichiers basées sur XPCOM (nsIFile, sous-ensembles de nsIIOService, etc.) par du code JavaScript.
-
Quelles sont les relations avec l'API de fichier HTML5?
-
Aucun, vraiment. L'API de fichier est conçue pour une manipulation de haut niveau et très restreinte de fichiers par des applications Web. OS.File est conçu pour une manipulation efficace et sans restriction des fichiers par Firefox lui-même et par des modules complémentaires.
-
Why is Off Main Thread File I/O important?
-
One thing that all developers need to remember is that the duration of a File I/O operation is unbounded. Depending on the current load of the kernel, the current disk activity, the current load of the bus, the current rotation speed of the disk, the amount of battery power, etc. operations can take an arbitrary amount of time. We are talking about several seconds to execute operations that look trivial, such as closing a file, or checking when it was last modified.
- If the operation is called on the main thread, this means that the whole user experience is stuck for several seconds, which is quite bad.
-
Why is I/O Efficiency important?
-
I/O efficiency is all about minimizing the number of actual I/O calls. This is critical because some platforms have extremely slow storage (e.g. smartphones, tablets) and because, regardless of the platforms, doing too much I/O penalizes not just your application but potentially all the applications running on the system, which is quite bad for the user experience. Finally, I/O is often expensive in terms of energy, so wasting I/O is wasting battery. -

Consequently, one of the key design choices of OS.File is to provide operations that are low-level enough that they do not hide any I/O from the developer (which could cause the developer to perform more I/O than they think) and, since not all platforms have the same features, offer system-specific information that the developer can use to optimize his algorithms for a platform.

-
-
- -

Using OS.File

- -

... from the main thread

- -

Most uses of OS.File are from the main thread. In this mode, main thread clients use the API to request off main thread file I/O.

- -
-
Calling OS.File from the main thread
-
Asynchronous, off-main thread file I/O, main thread API.
-
Calling OS.File.DirectoryIterator from the main thread
-
Asynchronous, off-main thread file directory access, main thread API.
-
- -

... from a worker thread

- -

In some cases, the main thread API for OS.File is not appropriate as it would require too much message passing, or because the code that requires file I/O is already executed on a worker thread. For this reason, API clients can also spawn their own worker threads and make use of OS.File directly from these threads.

- -
-
OS.File for workers
-
Synchronous file I/O for worker threads
-
OS.File.DirectoryIterator for workers
-
Visiting directories synchronously from a worker thread
-
- -

... composants partagés

- -
-
OS.Path et OS.Constants.Path
-
Manipulation des chemins
-
OS.File.Error
-
Représentation des erreurs liées aux fichiers
-
OS.File.Info
-
Représentation des informations du fichier (taille, date de création, etc.)
-
OS.File.DirectoryIterator.Entry
-
Informations sur les fichiers obtenues lors de la visite d'un répertoire
-
diff --git a/files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html b/files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html deleted file mode 100644 index e21a10ac20..0000000000 --- a/files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html +++ /dev/null @@ -1,1159 +0,0 @@ ---- -title: OS.File pour le thread principal -slug: Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread -translation_of: Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread ---- -

Cette page explique comment utiliser File I/O depuis le thread principal. Pour d'autres utilisations de OS.File, voir OS.File.

- -

Utilisation d'OS.File depuis le thread principal

- -

Pour importer OS.File dans votre code chrome, ajoutez les ligne suivante au début de votre script:

- -
Components.utils.import("resource://gre/modules/osfile.jsm");
- -

Pour importer OS.File dans votre code main.js, ajoutez les lignes suivantes au début de votre script:

- -
const {Cu} = require("chrome");
-
-// To read content from file
-const {TextDecoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
-
-// To read & write content to file
-const {TextDecoder, TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
- -

Promises

- -

Avant d'utiliser OS.File depuis le thread principal, vous avez besoin d'une certaine compréhension de la bibliothèque Promise.

- -

Voir la documentation object Promise pour plus de détails.

- -

OS.File fonctionne très bien avec Task.jsm.

- -

Exemple: Lire le contenu d'un fichier sous forme de texte

- -

L'extrait suivant ouvre un fichier "file.txt" et lit son contenu sous forme de chaîne, en utilisant l'encodage par défaut (utf-8).

- -

Le contenu est lu de manière asynchrone. Le résultat est une Promise.

- -
let decoder = new TextDecoder();        // This decoder can be reused for several reads
-let promise = OS.File.read("file.txt"); // Read the complete file as an array
-promise = promise.then(
-  function onSuccess(array) {
-    return decoder.decode(array);        // Convert this array to a text
-  }
-);
-
- -
Cet exemple nécessite Firefox 18 ou une version plus récente.
- -

Exemple: Ecrire une chaîne dans un fichier

- -

L'extrait suivant écrit le texte "Ceci est un texte" sous forme de chaîne dans "file.txt", en utilisant l'encodage par défaut (utf-8). Il utilise une écriture atomique pour veiller à ce que le fichier ne soit pas modifiée si, pour une raison quelconque, l'écriture ne peut pas se réaliser complètement (généralement parce que l'ordinateur est éteint, la batterie est épuisée, ou l'application est arrêtée.)

- -
let encoder = new TextEncoder();                                   // This encoder can be reused for several writes
-let array = encoder.encode("This is some text");                   // Convert the text to an array
-let promise = OS.File.writeAtomic("file.txt", array,               // Write the array atomically to "file.txt", using as temporary
-    {tmpPath: "file.txt.tmp"});                                    // buffer "file.txt.tmp".
-
-
- -

La variante suivante fait la même chose, mais échouera si "file.txt" existe déjà:

- -
let encoder = new TextEncoder();                                   // This encoder can be reused for several writes
-let array = encoder.encode("This is some text");                   // Convert the text to an array
-let promise = OS.File.writeAtomic("file.txt", array,               // Write the array atomically to "file.txt", using as temporary
-    {tmpPath: "file.txt.tmp", noOverwrite: true});                 // buffer "file.txt.tmp".
-
-
- -
Ces exemples nécessitent Firefox 19 ou une version plus récente.
- -

Exemple: Renommer un fichier

- -

Vous pouvez utiliser OS.File.move pour renommer un fichier:

- -
let promise = OS.File.move("oldname.txt", "newname.txt", {noOverwrite:true});
- -

Voici un exemple qui a rebaptise test.txt en testRenamed.txt si le fichier se trouve dans le répertoire C:\Jean\

- -
var promise = OS.File.move(OS.Path.join('C:', 'Jean', 'test.txt'), OS.Path.join('C:', 'Jean', 'testRenamed.txt'));
-promise.then(
-    function() {
-       console.log('rename successful')
-    },
-    function(aRejectReason) {
-       console.log('rename failed, aRejectReason = ', aRejectReason)
-    }
-)
- -

noOverwrite: true est important, (par défaut false) si un fichier avec le même nom existe déjà dans le répertoire, il ne sera plus là après cette opération "renommer", qui est un "mouvement".

- -

Exemple: Copier un fichier

- -

The following snippet copies file "oldname.txt" to "newname.txt". On most operating systems, this operation is handled directly by the operating system itself, which makes it as fast as possible.

- -
let promise = OS.File.copy("oldname.txt", "newname.txt");
- -
This example requires Firefox 16 or a more recent version.
- -

Exemple: Manipulation de chemin

- -

The following snippet obtains the path to file "sessionstore.js", contained in the user's profile directory.

- -
let sessionstore = OS.Path.join(OS.Constants.Path.profileDir, "sessionstore.js");
-   // Under Linux, this is generally "$HOME/.firefox/Profiles/$PROFILENAME/sessionstore.js"
-   // Under MacOS, this is generally "$HOME/Library/Application Support/Firefox/$PROFILENAME/sessionstore.js"
-   // Under Windows, this is generally "%APPDATA%\Local\temp\%PROFILENAME%"\sessionstore.js
-   // etc.
-
-
- -

Exemple: Déterminer si un fichier est un répertoire

- -

The following snippet determines if some path represents a file or a directory:

- -
let promise = OS.File.stat(somePath);
-promise = promise.then(
-  function onSuccess(stat) {
-    if (stat.isDir) {
-      // The path represents a directory
-    } else {
-      // The path represents a file, not a directory
-    }
-  },
-  function onFailure(reason) {
-    if (reason instanceof OS.File.Error && reason.becauseNoSuchFile) {
-      // The file does not exist
-    } else {
-      // Some other error
-      throw reason;
-    }
-  }
-);
-
- -

Exemple: copier un fichier par morceaux

- -

The following snippet writes a (presumably large) buffer by chunks. Note that this snippet is useful as a demonstration of complex asynchronous programming with OS.File – in most cases, function OS.File.writeAtomic is a better choice.

- -
let writeStream = function writeStream(data, outFile, chunkSize) {
-  let view = new Uint8Array(data);
-
-  let loop = function loop(pos) {                                         // Define a recursive asynchronous loop.
-    if (pos <= view.byteLength) {  // Note: Should this be pos >= view.byteLength ?
-      return Promise.resolve(true);                                       // Loop end.
-    }
-    let promise = file.write(view.subarray(pos, chunkSize));              // Write a subset of |data|
-    return promise.then(function onSuccess(bytes) {
-      return loop(pos + bytes);                                           // ... and loop.
-    });
-  };
-
-  let promise = loop(0);                                                  // Enter the loop.
-
-  promise = promise.then(function onSuccess() {                           // Once loop is complete, finalize.
-    file.close();
-  }, function onError(reason) {
-    file.close();
-    throw reason;
-  });
-  return promise;
-}
-
- -

Or a variant using Task.js (or at least the subset already present on mozilla-central):

- -
let writeStream = function writeStream(data, outFile, chunkSize) {
-  return Task.spawn(function() {
-    let view = new Uint8Array(data);
-    let pos = 0;
-    while (pos < view.byteLength) {
-      pos += yield outFile.write(view.subarray(pos, chunkSize));
-    }
-    outFile.close();
-  }).then(
-    null,
-    function onFailure(reason) {
-      outFile.close();
-      throw reason;
-    }
-  );
-}
-
- -

Exemple: Enregistrer un canvas sur le disque

- -

This exmaple uses Image to load an image from a path (note: if your path is a file on disk you must use local file; this is accomplished with OS.Path.toFileURI, which accepts a string). After image loads it then draws it to canvas, makes it a blob, and uses FileReader to turn it into ArrayBuffer(View), then uses OS.File.writeAtomic to save to disk.

- -
var img = new Image();
-img.onload = function() {
-    var canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
-    canvas.width = img.naturalWidth;
-    canvas.height = img.naturalHeight;
-    var ctx = canvas.getContext('2d');
-    ctx.drawImage(img, 0, 0);
-    (canvas.toBlobHD || canvas.toBlob).call(canvas, function(b) {
-        var r = Cc['@mozilla.org/files/filereader;1'].createInstance(Ci.nsIDOMFileReader); //new FileReader();
-        r.onloadend = function() {
-            // r.result contains the ArrayBuffer.
-            var writePath = OS.Path.join(OS.Constants.Path.desktopDir, 'savedImage.png');
-            var promise = OS.File.writeAtomic(writePath, new Uint8Array(r.result), { tmpPath: writePath + '.tmp' });
-            promise.then(
-                function(aVal) {
-                    console.log('successfully saved image to disk');
-                },
-                function(aReason) {
-                    console.log('writeAtomic failed for reason:', aReason);
-                }
-            );
-        };
-        r.readAsArrayBuffer(b);
-    }, 'image/png');
-};
-//var path = OS.Path.toFileURI(OS.Path.join(OS.Contants.Path.desktopDir, 'my.png')); //do it like this for images on disk
-var path = 'https://mozorg.cdn.mozilla.net/media/img/firefox/channel/toggler-beta.png?2013-06'; //do like this for images online
-img.src = path;
-
- -

Exemple: Ajouter au fichier

- -

This example shows how to use open, write, and close to append to a file. If the file does not exist, it is created. At the time of this writing, write does not support encoding option so the text to be written has to be encoded with TextEncoder. This example also shows the resolve value of open (an instance of OS.File, this is a file, so you can do any of the methods on it found here), write (a number indicating bytes written), and close (undefined, meaning there is no resolve value).

- -
var pth = OS.Path.join(OS.Constants.Path.desktopDir, 'app.txt');
-OS.File.open(pth, {write: true, append: true}).then(valOpen => {
-    console.log('valOpen:', valOpen);
-    var txtToAppend = 'append some text \n';
-    var txtEncoded = TextEncoder().encode(txtToAppend);
-    valOpen.write(txtEncoded).then(valWrite => {
-        console.log('valWrite:', valWrite);
-        valOpen.close().then(valClose => {
-            console.log('valClose:', valClose);
-            console.log('successfully appended');
-        });
-    });
-});
- -

Objet Global OS.File

- -

Aperçu des Méthodes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Promise<File> open(in string path, [optional] in object mode, [optional] in object options);
Promise<object> openUnique(in string path, [optional] in object options);
Promise<void> copy(in string sourcePath, in string destPath, [optional] in object options);
Promise<bool> exists(in string path);
Promise<string> getCurrentDirectory();
Promise<void> makeDir(in string path, [optional] in object options);
Promise<void> move(in string sourcePath, in string destPath);
Promise<Uint8Array> read(in string path, [optional] in object options);
Promise<void> remove(in string path, [optional] in object options);
Promise<void> removeEmptyDir(in string path, [optional] in object options);
Promise<void> removeDir(in string path, [optional] in object options);
Promise<void> setCurrentDirectory(in string path);
Promise<void> setDates(in string path, in Date|number accessDate, in Date|number modificationDate);
Promise<void> setPermissions(in string path, in object options );
Promise<File.Info> stat(in string path, [optional] in object options);
Promise<void> unixSymLink(in string targetPath, in string createPath);
Promise<void> writeAtomic(in string path, in ArrayView data, in object options);
- -

Methods

- -

OS.File.open()

- -

Use method OS.File.open() to open a file.

- -
Promise<File> open(
-  in string path,
-  [optional] in object mode,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
The full native name of the file to open.
-
mode {{optional_inline()}}
-
The opening mode for the file, as an object that may contain a subset of the following fields: -
-
read
-
If true, the file will be opened for reading. Depending on other fields, it may also be opened for writing.
-
write
-
If true, the file will be opened for writing. Depending on other fields, it may also be opened for reading.
-
-
Prior to Gecko 27, unless create or truncate are set or explicit unixFlags are given, the file will be opened for appending on Unix/Linux. However, the file is not opened for appending on Windows. See bug 924858. Starting with Gecko 27, you may use the append flag instead. For an example using append see here.
-
-
truncate | trunc
-
If true, the file will be opened for writing. If the file does not exist, it will be created. If the file exists, its contents will be removed. Cannot be used with create.
-
create
-
If true, file will be opened for writing. The file must not exist. If the file already exists, throw an error. Cannot be used with truncate or existing.
-
existing
-
If true, the file must already exist. If the file does not exist, throw an error. Cannot be used with create.
-
append
-
If true, the file will be opened for appending, meaning the equivalent of .setPosition(0, POS_END) is executed before each write. The default is true, i.e. opening a file for appending. Specify append: false to open the file in regular mode.
-
-
-
options {{optional_inline()}}
-
Platform-specific options for opening the file. For advanced users only. Most users will never have need of these options. To specify options, pass an object that may contain some of the following flags: -
-
unixFlags
-
(ignored under non-Unix platforms) If specified, file opening flags, as per libc function open. If unspecified, build these flags from the contents of mode. You can build these flags from values OS.Constants.libc.O_*.
-
unixMode
-
(ignored under non-Unix platforms) If specified, file creation mode, as per libc function open. If unspecified, files are created with a default mode of 0600 (file is private to the user, the user can read and write). You can build this mode from values OS.Constants.libc.S_I*.
-
winShare
-
(ignored under non-Windows platforms) If specified, a sharing policy, as per Windows function CreateFile. If unspecified, files are opened with a default sharing policy (file is not protected against being read/written/removed by another process or another use in the same process). You can build this policy from constants OS.Constants.Win.FILE_SHARE_*.
-
winSecurity
-
(ignored under non-Windows platforms) If specified, a security policy, as per Windows function CreateFile. If unspecified, no security attributes.
-
winAccess
-
(ignored under non-Windows platforms) If specified, access mode, as per Windows function CreateFile. This also requires option winDisposition and this replaces argument mode. If unspecified, value is built from mode.
-
winDisposition
-
(ignored under non-Windows platforms) If specified, disposition mode, as per Windows function CreateFile. This also requires option winAccess and this replaces argument mode. If unspecified, value is built from mode.
-
-
-
- -
Promise resolves to
- -

An instance of OS.File representing the expected file.

- -
Note that the operating system limits the number of files that can be opened simultaneously by one process, so do not forget to close that file once you have finished it, to ensure that you are not blocking the rest of the process.
- -

When opening files for writing, they will be opened for appending unless you specify append: false in Gecko 27 and later. In Gecko 26 and earlier, on platforms other than Windows, the files will be opened for appending unless you specify explicit unixFlags or open the file with either create or truncate flags. In Gecko 26 and earlier on Windows, files will never be opened for appending.

- -

To open an existing file for writing without appending in a compatible way on all platforms in both Gecko 27 and later and Gecko 26 and earlier, you should specify both the append flag and unixFlags.

- -
// Open a file for writing without appending to it.
-
-Task.spawn(function() {
-  // Under Unix, you'll have to specify your own unixFlags for Gecko < 27 to avoid append mode.
-  var options = {};
-  if (OS.Constants.libc) {
-    // Own flags omitting O_APPEND, e.g.
-    options.unixFlags = OS.Constants.libc.O_CREAT | OS.Constants.libc.O_WRONLY;
-  }
-  // For Gecko >= 27, it is enough, but crucial, to set the correct append flag.
-  var outfile = yield OS.File.open("file.tmp", {write: true, append: false}, options);
-  try {
-    // ... do something with that file
-  } finally {
-    yield outfile.close();
-  }
-});
- -
Example of opening file and keeping it locked
- -

This uses Tasks.jsm to open a file and keep it open. When you are done with it, like in shutdown of restartless add-on, you should close the file so it becomes editable again.

- -
let options = {
-  winShare: 0 // Exclusive lock on Windows
-};
-if (OS.Constants.libc.O_EXLOCK) {
-  // Exclusive lock on *nix
-  options.unixFlags = OS.Constants.libc.O_EXLOCK;
-}
-let file = yield OS.File.open(..., options);
- -

Then when you want to unlock the file so it can be edited from other places, close the file.

- -
file.close();
- -

This example is from Stackoverflow: OS.File check last modified date before OS.read

- -

OS.File.openUnique()

- -

Creates and opens a file with a unique name. By default, generate a random hex number and use it to create a unique new file name.

- -
Promise<object> openUnique(
-  in string path,
-  [optional] in object options
-) throws OS.File.Error
- -
Arguments
- -
-
path
-
The full native name of the file to open.
-
options {{optional_inline()}}
-
Additional options for file opening. This implementation interprets the following fields: -
-
humanReadable
-
If true, create a new filename appending a decimal number, e.g., filename-1.ext, filename-2.ext. If false use hex numbers, e.g., filename-A65BC0.ext.
-
maxAttempts
-
Used to limit the amount of tries after a failed file creation. Default is 99.
-
-
-
- -
Promise resolves to
- -

An object contains a file object{file} and the path{path}.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
If the file could not be opened.
-
- -

OS.File.copy()

- -

Copy a file.

- -
void copy(
-  in string sourcePath,
-  in string destPath
-  [optional] in object options)
-throws OS.File.Error
-
- -
Arguments
- -
-
sourcePath
-
The full path of the file to copy. At the time of this writing, this function does not copy directories.
-
destPath
-
The full path of the destination. Note that this is not a directory but a file.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields:
-
noOverwrite
-
If destPath already exists, do not overwrite it, but rather launch an exception.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -
Performance notes - - -
- -

OS.File.exists()

- -

Determine whether a file exists

- -
Promise<bool> exists(
-  in string path
-)
-
- -
Arguments
- -
-
path
-
The name of the file
-
- -
Promise resolves to
- -

true if the file exists, false otherwise

- -
Performance note: For the sake of performance, you should avoid this function whenever possible. For instance, rather than calling exists() to determine if a directory should be created with makeDir, you should rather create the directory with makeDir and catch the error if the directory exists. This will ensure that you only need to perform one I/O operation rather than two.
- -

OS.File.getCurrentDirectory()

- -

Return the current directory

- -
Promise<string> getCurrentDirectory()
- -
Promise resolves to
- -

The path to the current directory.

- -
-

Safety note: Recall that the current directory can change during the execution of the process. Therefore, the information returned by this function may be false by the time you receive it.

-
- -

OS.File.makeDir()

- -

Create a new directory

- -
Promise<void> makeDir(
-  in string path,
-  [optional] in object options
-) throws OS.File.Error
- -
Arguments
- -
-
path
-
The full name of the directory to create.
-
options {{optional_inline()}}
-
Options for creating the directory. To specify options, pass an object that may contain some of the following flags:
-
ignoreExisting
-
If true, succeed even if the directory already exists (default behavior). Otherwise, fail if the directory already exists. NOTE: If from is specified then even if ignoreExisting is specified as false, it will not fail due to pre-existence of directories, because the from option tells makeDir to make the folders if not found.
-
unixMode
-
(ignored under non-Unix platforms) If specified, file creation mode, as per libc function mkdir. If unspecified, directories are created with a default mode of 0600 (file is private to the user, the user can read and write). You can build this mode from values OS.Constants.libc.S_I*.
-
winSecurity
-
(ignored under non-Windows platforms) If specified, a security policy, as per Windows function CreateDirectory. If unspecified, no security attributes.
-
from
-
If specified, the call to makeDir creates all the ancestors of path that are descendents of from. Note that from and its existing descendents must be user-writeable and that path must be a descendent of from.
-
- -

OS.File.move()

- -

Move a file.

- -
Promise<void> move(
-  in string sourcePath,
-  in string destPath
-  [optional] in object options
-)
- -
Arguments
- -
-
sourcePath
-
The full path of the file to move. At the time of this writing, the behavior of this function is unspecified if sourcePath is a directory.
-
destPath
-
The full path of the destination. At the time of this writing, the behavior of this function is unspecified if destPath is a directory.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields: -
-
noOverwrite
-
If destPath already exists, do not overwrite it, but rather launch an exception.
-
noCopy
-
If moving the file would require a copy (i.e. if the destination path resides on another drive/device/file system as the source path), fail.
-
-
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -
Performance note: This operation is OS-optimized under OS X, Linux/Android, and Windows.
- -

OS.File.read()

- -

Read the contents of a file

- -
Promise<Uint8Array> read(
-  in string path,
-  [optional] in number bytes
-)
-
- -
Arguments
- -
-
path
-
The full path to the file to read.
-
bytes {{optional_inline()}}
-
The number of bytes to read. If unspecified, read the complete file.
-
- -
Promise resolves to
- -

An array holding bytes bytes (or less if the file did not contain as many bytes).

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist or if the process does not have the authorization to read it.
-
- -
-
-
As of Firefox 30, OS.File.read() takes an options object as second argument.
-
- -
Promise<Uint8Array> read(
-  in string path,
-  [optional] in object options
-)
- -
Arguments
- -
-
path
-
The full path to the file to read.
-
- -
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields: -
-
bytes
-
The number of bytes to read. If unspecified, read the complete file.
-
encoding
-
Instead of using TextDecoder, you can supply a string to this option. For example, instead of: -
let decoder = new TextDecoder();
-let promise = OS.File.read("file.txt");
-promise = promise.then(
-  function onSuccess(array) {
-    return decoder.decode(array);        // Convert this array to a text
-  }
-);
- You can simply do: - -
let promise = OS.File.read("file.txt", { encoding: "utf-8" });
-promise = promise.then(
-  function onSuccess(text) {
-    return text;        // text is a string
-  }
-);
-
-
-
-
-
- -

OS.File.remove()

- -

Remove an existing file.

- -
Promise<void> remove(
-  in string path,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
A string representing the path of the file to remove. At the time of this writing, this function does not remove directories.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields:
-
ignoreAbsent
-
Succeed if the file doesn't exist.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -

OS.File.removeEmptyDir()

- -

Remove an empty directory

- -
Promise<void> removeEmptyDir(
-  in string path,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
The complete path to the directory.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields:
-
ignoreAbsent
-
Succeed if the directory doesn't exist.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -

OS.File.removeDir()

- -

Remove an existing directory and its contents.

- -
Promise<void> removeDir(
-  in string path,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
A string representing the name of the file to remove.
-
options
-
An object that may contain the following fields
-
ignoreAbsent
-
If false, this function will throw an error if the directory doesn't exist.
-
ignorePermissions
-
If true, this function will remove the directory even when lacking write permissions.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if path isn't a directory.
-
- -

OS.File.setCurrentDirectory()

- -

Change the current directory of the process.

- -
Use with extreme caution: This API may be useful for application developers but must not be used by add-ons, as it changes the state of the complete application.
- -
Promise<void> setCurrentDirectory(
-  in string path
-)
- -
Arguments
- -
-
path
-
The complete path to use as current directory.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing directory.
-
- -

OS.File.setDates()

- -

Set the last access and modification date of the file.

- -

The time stamp resolution is one second at best, but might be worse depending on the platform, file system, etc.

- -
Promise<void> setDates(
-  in string path,
-  in Date|number accessDate,
-  in Date|number modificationDate
-)
- -
Arguments
- -
-
path
-
The complete path to the file.
-
accessDate
-
The last access date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
modificationDate
-
The last modification date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -
-
-

OS.File.setPermissions()

- -

Sets the file's access permission bits.

- -
Promise<void> setPermissions(
-  in string path,
-  in object options
-)
- -
Arguments
-
-
path
-
The complete path to the file.
-
options
-
The new attributes to set
-
winAttributes
-
This is an object with following optional keys. Ignored under non-Windows platforms.
-
hidden
-
Boolean. Set to true to make the target hidden, or false to make it visible.
-
readOnly
-
Boolean. Set to true to make the target "read only".
-
system
-
Boolean. Toggles the "system" attribute, this is equivalent .
-
unixMode
-
Number. This is an number can be created with the constants available in OS.Constants.libc.S_I* or OS.Constants.libc.S_O*. Ignored under non-Unix platforms. To make a file hidden on Unix based platforms, including Mac, simply rename the file with OS.File.move to have "." at the start of the file name.
-
unixHonorUmask
-
Toggles the OS.Constants.Sys.umask flag. Ignored under non-Unix platforms..
-
-
Promise can be rejected with
-
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -

OS.File.stat()

- -

Obtain information about a file, such as size, creation date, etc.

- -
Promise<File.Info> stat(
-  in string path
-)
- -
Arguments
- -
-
path
-
The complete path to the file.
-
- -
Promise resolves to
- -

An instance of File.Info holding information about a file.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -
Performance Note: If the file is already opened, calling method stat() is much faster than calling function OS.File.stat().
- -

OS.File.unixSymLink()

- -

Create a symoblic link file, also known as "Alias" files on Mac OS. This is similar to "Shortcut" files on Windows systems. This function is specific to UNIX baed systems such as Linux and Mac OS X.

- -
Promise<undefined> unixSymLink(
-  in string pathTarget,
-  in string pathCreate
-)
- -
Arguments
- -
-
pathTarget
-
The complete path to the file that should be launced by the symbolic link.
-
- -
-
pathCreate
-
The complete path to the file that should launch target. The file extension should be .link.
-
- -
Promise resolves to
- -

undefined

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error. If the file exists already, unixErrorco of 17 will be returned.
-
- -

OS.File.writeAtomic()

- -

Write data to a file, atomically.

- -

Unlike a regular write, this operation ensures that, until the contents are fully written, the destination file is not modified.

- -
Promise<void> writeAtomic(
-  in string path,
-  in ArrayBufferView data,
-  in object options
-)
- -
Arguments
- -
-
path
-
The full path to the destination file.
-
data
-
An ArrayBufferView holding the data to write.
-
{{ Fx_minversion_note("37.0", "As of Firefox 37, this method will neuter the array buffer.") }}
-
 
-
options
-
An object that may contain the following fields
-
tmpPath
-
If null or unspecified, write the data directly to path. If specified, write the data to a temporary file called tmpPath and, once the write is complete, rename the file to replace path. Performing this operation is a little slower but also a little safer. {{ Fx_minversion_note("25.0", "tmpPath is required in Firefox 24 or lower version, but optional in Firefox 25 or higher version") }}
-
noOverwrite
-
If specified and true, and if path already exists, this function will throw an error without overwriting path.
-
flush
-
If false or unspecified, return immediately once the write is complete. If true, before writing, force the operating system to write its internal disk buffers to the disk. This is considerably slower (not just for the application but for the whole system) and more battery expensive but also safer: if the system shuts down improperly (typically due to a kernel freeze or a power failure) or if the device is disconnected before the buffer is flushed, the file has more chances of not being corrupted.
-
backupTo
-
Available since Firefox 30. If specified, backup the destination file as backupTo. Note that this function renames the destination file before overwriting it. If the process or the operating system freezes or crashes during the short window between these operations, the destination file will have been moved to its backup.
-
encoding
-
Available since Firefox 22. Instead of using TextEncoder, you can supply a string to this option. For example, instead of: -
let encoder = new TextEncoder();
-let array = encoder.encode("This is some text");
-let promise = OS.File.writeAtomic("file.txt", array, {tmpPath: "file.txt.tmp"});
- You can simply do: - -
let promise = OS.File.writeAtomic("file.txt", "This is some text", { encoding: "utf-8", tmpPath: "file.txt.tmp" })
-
-
- -
Limitations
-In a few extreme cases (hardware failure during the write, user unplugging disk during the write, etc.), data may be corrupted. If your data is user-critical (e.g., preferences, application data), you may wish to consider adding options tmpPath and/or flush to reduce the likelihood of corruption, as detailed above. Note that no combination of options can be guaranteed to totally eliminate the risk of corruption.
- -
Use with caution: Modifying the contents of data before the operation is complete is a very bad idea.
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the destination file cannot be overwritten, or if tmpPath is not on the same device as path.
-
- -

Instances of OS.File

- -

To obtain an instance of OS.File, use function OS.File.open.

- -

Methods overview

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Promise<void> close()
Promise<void> flush()
Promise<number> getPosition()
Promise<number> read([optional] in number bytes)
Promise<void> setDates(in Date|number accessDate, in Date|number modificationDate);
Promise<void> setPosition(in number bytes)
Promise<File.Info> stat()
Promise<number> write(in ArrayBufferView source, [optional] in object options)
- -

Methods

- -

close()

- -

Close a file and release any associated resource.

- -

Once the file is closed, any attempt to call methods of the file object will raise an error.

- -

An example is seen here. In this example the contents is not written to file until .close is called.

- -
Note that the operating system limits the number of files that can be opened simultaneously by one process, so do not forget to close that file once you have finished it to make sure that you are not blocking the rest of the process.
- -
Promise<void> close()
- -

flush()

- -

Flushes the file's internal buffers, ensuring that all data still in these buffers is now written to disk.

- -

Disk flushes are very expensive and therefore should be used carefully, sparingly, and only in scenarios where it is vital that data survives system crashes. Even though the function will be executed off the main-thread, it might still affect the overall performance of any running application.

- -
Promise<void> flush()
- -

getPosition()

- -

Return the current position in the file.

- -
Promise<number> getPosition()
-
- -
Promise resolves to
- -

The current position in the file, as a number of bytes from the start.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
If the file is closed.
-
- -

read()

- -

Read bytes from this file to a new buffer. Bytes are read from the current position in the file and the position is advanced accordingly.

- -
Promise<Uint8Array> read(
-  [optional] in number bytes
-)
- -
Arguments
- -
-
bytes
-
If specified, read bytes bytes, or less if the file does not contain that many bytes. If unspecified, read all the remaining bytes from this file.
-
- -
Promise resolves to
- -

An array containing the bytes read.

- -
If you need to convert the result of this function to a string, you may do so by using the StringEncoding API.
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of I/O error.
-
- -

setDates()

- -

Set the last access and modification date of the file.

- -

The time stamp resolution is one second at best, but might be worse depending on the platform, file system, etc.

- -
Promise<void> setDates(
-  in Date|number accessDate,
-  in Date|number modificationDate
-)
- -
Arguments
- -
-
accessDate
-
The last access date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
modificationDate
-
The last modification date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -

setPosition()

- -

Change the current position in the file.

- -
Promise<void> setPosition(
-  in number offset,
-  in object origin
-)
-
- -
Arguments
- -
-
offset
-
- -
-
The new position, as a number of bytes from the origin.
-
origin
-
One of the following: -
    -
  • OS.File.POS_START (bytes are counted from the start of the file)
  • -
  • OS.File.POS_CUR (bytes are counted from the current position in the file)
  • -
  • OS.File.POS_END (bytes are counted from the end of the file)
  • -
-
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the new position is before the start of the file, or if the file is closed.
-
- -

stat()

- -

Obtain information about the file, such as size, creation date, etc.

- -
Promise<File.Info> stat()
- -
Promise resolves to
- -

An instance of File.Info holding information about the file.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file is closed.
-
- -

write()

- -

Write bytes from a buffer to this file.

- -

Note that, by default, this function may perform several I/O operations to ensure that the buffer is fully written.

- -

An example is seen here.

- -
Promise<number> write(
-  in ArrayBufferView source
-  [optional] in object options
-)
- -
Arguments
- -
-
source
-
The array in which the the bytes are stored.
-
{{ Fx_minversion_note("37.0", "As of Firefox 37, this method will neuter the array buffer.") }}
-
options {{optional_inline()}}
-
An object that may contain some of the following fields:
-
bytes
-
An upper bound to the number of bytes to write to the file. If unspecified, write up to source.byteLength bytes. If specified, this must be less than source.byteLength.
-
- -
Promise resolves to
- -

The number of bytes effectively written to the file.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any I/O error.
-
TypeError
-
If options.bytes is specified and is larger than source.byteLength.
-
diff --git a/files/fr/mozilla/javascript_code_modules/services.jsm/index.html b/files/fr/mozilla/javascript_code_modules/services.jsm/index.html deleted file mode 100644 index 5db295d311..0000000000 --- a/files/fr/mozilla/javascript_code_modules/services.jsm/index.html +++ /dev/null @@ -1,283 +0,0 @@ ---- -title: Services.jsm -slug: Mozilla/JavaScript_code_modules/Services.jsm -tags: - - Add-ons - - Extensions - - Interface - - JavaScript - - Modules - - Services - - XPCOM -translation_of: Mozilla/JavaScript_code_modules/Services.jsm ---- -

{{ gecko_minversion_header("2") }}

- -

Le service Sercices.jsm Javascript module code offre un large assortiment de getters paresseux qui simplifient les processus d'obtention la reference des services communement utilisé.

- -

Pour l'utiliser, vous devez en premier importer le code module dans l'environement Javascript: 

- -
Components.utils.import("resource://gre/modules/Services.jsm");
-
- -

Then you can obtain references to services by simply accessing them from the Services object exported by the code module. For example, to obtain a reference to the preferences service:

- -
var prefsService = Services.prefs;
-
- -

Provided service getters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Service accessorService interfaceService name
androidBridge{{ interface("nsIAndroidBridge") }}1
appinfo{{ interface("nsIXULAppInfo") }}
- {{ interface("nsIXULRuntime") }}
Application information service
appShell{{ interface("nsIAppShellService") }}Application shell service
blocklist{{ interface("nsIBlocklistService") }}Blocklist service
cache{{ interface("nsICacheService") }}Cache service
cache2{{ interface("nsICacheStorageService") }}Cache storage service
clipboard{{ interface("nsIClipboard") }}Clipboard
console{{ interface("nsIConsoleService") }}Error console service
contentPrefs{{ interface("nsIContentPrefService") }}Content Preferences service
cookies{{ interface("nsICookieManager2") }}Cookie Manager 2 service
cpmm{{ interface("nsIMessageSender") }}Child process message manager4
crashmanagerCrashManager.jsm 
dirsvc{{ interface("nsIDirectoryService") }}
- {{ interface("nsIProperties") }}
Directory service
domStorageManager{{ interface("nsIDOMStorageManager") }}DOM Storage Manager
DOMRequest{{ interface("nsIDOMRequestService") }}DOMRequest service
downloads{{ interface("nsIDownloadManager") }}Download manager
droppedLinkHandler{{ interface("nsIDroppedLinkHandler") }}Dropped link handler service
els{{ interface("nsIEventListenerService") }}Event listener service
eTLD{{ interface("nsIEffectiveTLDService") }}EffectiveTLD service
focus{{ interface("nsIFocusManager") }}Focus manager
io{{ interface("nsIIOService") }}
- {{ interface("nsIIOService2") }}
I/O Service
locale{{ interface("nsILocaleService") }}Locale service
logins{{ interface("nsILoginManager") }}Password Manager service
metro{{ interface("nsIWinMetroUtils") }}2
mm{{ interface("nsIMessageBroadcaster") }}
- {{ interface("nsIFrameScriptLoader") }}
Global frame message manager3
obs{{ interface("nsIObserverService") }}Observer service
perms{{ interface("nsIPermissionManager") }}Permission manager service
ppmm{{ interface("nsIMessageBroadcaster") }}
- {{ interface("nsIProcessScriptLoader") }}
Global parent process message manager3
prefs{{ interface("nsIPrefBranch") }}
- {{ interface("nsIPrefBranch2") }}
- {{ interface("nsIPrefService") }}
Preferences service
prompt{{ interface("nsIPromptService") }}Prompt service
scriptloader{{ interface("mozIJSSubScriptLoader") }}JavaScript subscript loader service
scriptSecurityManager{{ interface("nsIScriptSecurityManager") }}Script security manager
search{{ interface("nsIBrowserSearchService") }}Browser search service
startup{{ interface("nsIAppStartup") }}Application startup service
storage{{ interface("mozIStorageService") }}Storage API service
strings{{ interface("nsIStringBundleService") }}String bundle service
sysinfo{{ interface("nsIPropertyBag2") }}System info service
telemetry{{ interface("nsITelemetry") }}Telemetry service
tm{{ interface("nsIThreadManager") }}Thread Manager service
uriFixup{{ interface("nsIURIFixup") }}URI Fixup service
urlFormatter{{ interface("nsIURLFormatter") }}URL Formatter service
vc{{ interface("nsIVersionComparator") }}Version comparator service
wm{{ interface("nsIWindowMediator") }}Window mediator service
ww{{ interface("nsIWindowWatcher") }}Window watcher service
- -

1 Mobile only
- 2 Windows only
- 3 Main process only
- 4 Child process only

- -

See also

- - diff --git a/files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html b/files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html deleted file mode 100644 index bf799c2781..0000000000 --- a/files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html +++ /dev/null @@ -1,360 +0,0 @@ ---- -title: Sqlite.jsm -slug: Mozilla/JavaScript_code_modules/Sqlite.jsm -translation_of: Mozilla/JavaScript_code_modules/Sqlite.jsm ---- -

{{ gecko_minversion_header("20.0") }}

- -

Le module de code JavaScript Sqlite.jsm offre une interface de stockage/SQLite. Sqlite.jsm fonctionne avec des interfaces XPCOM de stockage de bas niveau:

- - - -

{{ note("Le module de code de Javascript Sqlite.jsm peut seulement être utilisé du chrome.") }}

- -

Avant de pouvoir utiliser ce module, vous devez l'importer dans votre champ d'application:

- -
let { Cu } = require('chrome')
-Cu.import("resource://gre/modules/Sqlite.jsm")
- -

Obtention d'une connexion

- -

Sqlite.jsm exporte le symbole Sqlite. Ce symbole est un objet avec une seule fonction: openConnection. Cette fonction prend un objet dictionnaire définissant les options de connexion:

- -
-
path
-
(Obligatoire) Le fichier de base de données à ouvrir. Cela peut être un chemin absolu ou relatif. Si un chemin relatif est donné, il est interprété comme relatif au répertoire du profil actuel. Si le chemin n'existe pas, une nouvelle base de données SQLite sera créé. La nom se termine généralement par .sqlite.
-
sharedMemoryCache
-
(En option) booléenne indiquant si plusieurs connexions à la base de données partagent la même mémoire cache. Toutefois, le partage nécessite également des connexions pour obtenir un verrou, rendant éventuellement l'accès de base de données plus lente. Par défaut, true.
-
shrinkMemoryOnConnectionIdleMS
-
(En option) Si défini, le de connexion va tenter de minimiser son utilisation de la mémoire après un grand nombre millisecondes de connexion inactive. La connexion est inactive lorsque aucun états n'est exécuter. Noter que ceci n'est pas une minuterie qui pourrait se déclencher pendant que l'Application est active.
-
- -

openConnection(options) retourne une promise d'une instance de connexion ouverte ou est rejetée si une erreur survient lors de l'ouverture de la base de données.

- -

Voici un exemple:

- -
let { Cu } = require('chrome')
-Cu.import("resource://gre/modules/Sqlite.jsm");
-
-Sqlite.openConnection({ path: "myDatabase.sqlite", sharedMemoryCache: false }).then(
-  function onConnection(connection) {
-    // connection is the opened SQLite connection (see below for API).
-  },
-  function onError(error) {
-    // The connection could not be opened. error is an Error describing what went wrong.
-  }
-);
-
- -

Utilisation des connexions ouvertes

- -

Les connexions ouvertes sont ce que vous interfacer avec Sqlite.jsm. Les sections suivantes détaillent l'API d'une instance de connexion ouverte.

- -

Gestion des connexions

- -

Ces API sont utilisées pour gérer et vérifier l'état de la connexion.

- -

close()

- -

Ferme la connexion de base de données. Doit être appelé pour chaque connexion ouverte.

- -

Cette fonction retourne une promise qui sera résolu lorsque la base de données sera fermée.

- -

Si une transaction est en cours d'execution au moment où cette fonction est appelée, la transaction sera annulée.

- -

Si des déclarations sont en cours au moment où cette fonction est appelée, elles seront annulées.

- -

Les utilisateurs ne doivent pas tenter d'utiliser la connexion après avoir appelé cette méthode que la connexion sera inutilisable.

- -

clone (readOnly)

- -

Cette fonction retourne un clone de la connexion-promise actuelle.

- -

Ces fonctions reçoivent l' argument:

- -
-
readOnly
-
(En option) Si true le clone sera en lecture seule, false par défaut. Si la connexion d'origine est déjà en lecture seule, le clone le sera, indépendamment de cette option. Si la connexion d'origine utilise le cache partagé, ce paramètre sera ignoré et le clone sera aussi privilégié que la connexion d'origine.
-
- -

transactionInProgress

- -

Cette propriété booléenne indique si une opération est en cours. Cela est rarement nécessaire par les appelants externes.

- -

shrinkMemory()

- -

Cette fonction peut être appelée pour diminuer l'utilisation de la mémoire de la connexion. Ceci est un wrapper utilisé dans le PRAGMA shrink_memory, qui impose à SQLite la réduiction d'utilisation de la mémoire (par les caches de compensation, etc.).

- -

Elle peut rendre votre base de données plus lent. Par conséquent, il faut être prudent avant d'appeler cette fonction.

- -

Cela renvoie une promise qui est résolu lorsque l'opération est terminée.

- -

discardCachedStatements()

- -

Cette fonction est utilisée pour éliminer les instances d'instructions mises en cache, ce qui libère la mémoire dans le processus. Les déclarations de cache actifs ne seront pas effacées. Peut être appeler à tout moment.

- -

Cela renvoie le nombre de déclarations mises en cache qui ont été rejetés.

- -

Table et gestion du schéma

- -

Ces API traitent de la gestion des tables et le schéma de base de données.

- -

getSchemaVersion()

- -

La version définie par l'utilisateur associé au schéma de la base de données actuelle. Retourne 0 si aucune version de schéma a été défini.

- -

setSchemaVersion(value)

- -

Definie la valeur value de la nouvelle version associée au schéma de la base de données actuelle. Ceci est un wrapper autour de PRAGMA user_version.

- -

tableExists(name)

- -

Cette fonction détermine si une table existe dans la base de données actuelle. Elle renvoie une promise qui est résolu avec une valeur booléenne indiquant si la table existe.

- -

indexExists(name)

- -

Cette fonction détermine si un index nommé existe dans la base de données actuelle. Elle renvoie une promesse qui est résolu avec une valeur booléenne indiquant si l'index existe.

- -

Déclaration d'exécution

- -

Ces API facilitent l'exécution des instructions de connexion.

- -

executeCached(sql, params, onRow)

- -

execute(sql, params, onRow)

- -

Ces fonctions similaires sont utilisés pour exécuter une instruction SQL unique sur la connexion. Comme vous l'avez deviné par le nom, il y a 2 options: mises en cache et non mis en cache. En dehors de cela, ils se comportent de manière identique.

- -

Ces fonctions reçoivent les arguments suivants:

- -
-
sql
-
(Obligatoire) chaîne SQL à exécuter. Le point-virgule final n'est pas nécessaire.
-
params
-
(En option) Paramètres liés à cette déclaration. Cela peut être un tableau ou un objet. Voir les notes ci-dessous.
-
onRow
-
(En option) Fonction qui est appelée lorsqu'une ligne a été reçue.
-
- -

La valeur de retour est une promise qui est résolu lorsque l'instruction a terminé l'exécution.

- -

Quand une instruction est exécutée via executeCached(), l'objet instruction préparée est mis en cache à l'intérieur de la connexion ouverte. La prochaine fois que cette même instruction SQL est exécutée (sql argument est identique à celui passé avant), l'ancien objet de la déclaration est réutilisée. Cela permet d'économiser du temps associé à l'analyse de l'instruction SQL et la création d'un nouvel objet de déclaration. Inconvénient: l'objet de la déclaration en cache persiste dans la connexion ouverte, en prenant de la mémoire.

- -

Quand une instruction est exécutée via execute(), l'objet de la déclaration sous-jacente est jeté au terme de l'exécution.

- -

executeCached() est recommandé pour les déclarations qui seront exécutées plusieurs fois. execute() est recommandé pour les déclarations qui seront exécutées rarement ou une fois.

- -

Noter que les utilisateurs ne doivent pas préparer les états manuellement avant l'exécution. Il suffit d'appeler executeCached() et la déclaration sera préparée pour vous automatiquement.

- -

Les paramètres peuvent être liés à la déclaration faite par la définition de l'argument params . Cet argument peut être un tableau de paramètres ordonnées ou un objet de type dicionnaire. Si la déclaration ne contient pas de paramètres liés, cet argument peut être omis ou spécifié comme nulle.

- -

{{ note("Les utilisateurs sont fortement encouragés à utiliser des paramètres liés au lieu de créer dynamiquement des instructions SQL pour des raisons de sécurité.") }}

- -
{{ note("Les utilisateurs sont encouragés à passer des objets type dictionnaire plutôt que des tableaux pour les paramètres liés car ils empêchent de s'emeler les pinceaux.") }}
- -
 
- -
Lorsque onRow n'est pas défini, les résultats complets de l'opération sont tamponnés avant que l'appelant soit informé de la déclaration d'achèvement. Pour INSERT, UPDATE et DELETE, ce n'est pas pertinentes. Cependant, il peut y avoir des conséquences importante pour SELECT . Si votre déclaration SELECT retourne beaucoup de données, cette mise en mémoire tampon peut entraîner une utilisation excessive de la mémoire. Par conséquent, il est recommandé d'utiliser onRow avec SELECT.
- -
-
 
- -
Si StopIteration est emis lors de l'exécution d'un gestionnaire onRow, l'exécution de l'instruction est immédiatement annulée. Les lignes suivantes ne seront pas traitées. La promise est résolu immédiatement.
- -
 
- -
Si une exception StopIteration est levée par le gestionnaire onRow , l'exception est enregistré et le traitement des lignes suivantes se poursuit normalement. La promise est toujours résolue (pas rejetée).
- -

La promise sera rejeté avec une Error , si la déclaration n'a pas terminé l'exécution complète. L'Error peut avoir une propriété errors. Si elle est définie, ce sera un tableau d'objets décrivant les erreurs. Chaque objet possède les propriétés result et message. result est un code d'erreur numérique et message est une chaîne décrivant le problème.

- -

Si onRow est spécifié, la promise sera résolu avec un booléen indiquant si le gestionnaire onRow a été appelé. Sinon, la valeur réglée sera un tableau de mozIStorageRow .

- -

executeTransaction(func, type)

- -

Cette fonction est utilisée pour exécuter une transaction de base de données. Une transaction est une série de déclarations connexes traités comme une seule unité fonctionnelle. Si la transaction réussit, toutes les déclarations contenues dedans sont engagés comme une seule unité. Si la transaction échoue, la base de données revient à son état avant le début de la transaction.

- -

Cette fonction reçoit les arguments suivants:

- -
-
func
-
La fonction définissant le corps de la transaction.
-
type
-
Le type de transaction à effectuer. Ce doit être l'une des constantes de TRANSACTION_* sur l'instance de connexion ouverte. Les valeurs valides sont TRANSACTION_DEFERRED , TRANSACTION_IMMEDIATE , TRANSACTION_EXCLUSIVE . Consultez la documentation SQLite pour leur signification. La valeur par défaut est TRANSACTION_DEFERRED.
-
- -

La fonction passée est une fonction de générateur compatible Task.jsm. Lorsqu'elle est appelée, la fonction reçoit comme argument l'instance de connexion actuelle. Cette fonction de générateur devrait produire des promises, probablement ceux qui sont renvoyés en appelant executeCached() et execute().

- -

Si nous arrivons à la fin de la fonction de générateur sans erreur, la transaction est validée. Si une erreur se produit, la transaction est abandonnée.

- -

La valeur retournée par cette fonction est une promise qui est résolu lorsque la transaction a été exécutée ou rejetée si la transaction a été annulée.

- -

Exemples

- -

Open, Execute, Close

- -

Dans cet exemple, nous ouvrons une connexion, exécutons une instruction simple, puis fermons la connexion.

- -
Sqlite.openConnection({path: "MyDB.sqlite"}).then(
-  function onOpen(conn) {
-    conn.execute("SELECT 1").then(
-      function onStatementComplete(result) {
-        conn.close().then(
-          function onClose() {
-            alert("We are done!");
-          }
-        )
-      }
-    )
-  }
-)
-
- -

Ce n'est pas un excellent exemple parce qu'il ne comprend pas la gestion des erreurs et est un peu difficile à lire.

- -

Voici la même chose mais avec Task.jsm:

- -
Task.spawn(function* demoDatabase() {
-  let conn = yield Sqlite.openConnection({path: "MyDB.sqlite"});
-
-  try {
-    let result = yield conn.execute("SELECT 1");
-  } finally {
-    yield conn.close();
-  }
-});
- -

Bound Parameters

- -

Voici quelques exemples montrant des paramètres liés. Supposons que nous ouvrons une connexion avec la variable conn.

- -
let dataToInsert = [
-  ["foo", "bar"],
-  ["biz", "baz"],
-  ["yo", "ho"],
-];
-
-Task.spawn(function* doInsert() {
-  for (let data of dataToInsert) {
-    yield conn.executeCached("INSERT INTO myTable VALUES (?, ?)", data);
-  }
-});
-
- -

Et la même chose avec des paramètres nommés.

- -
let dataToInsert = [
-  {paramA: "foo", paramB: "bar"},
-  {paramA: "biz", paramB: "baz"},
-  {paramA: "yo", paramB: "ho"},
-];
-
-Task.spawn(function* doInsert() {
-  for (let data of dataToInsert) {
-    yield conn.executeCached("INSERT INTO myTable VALUES (:paramA, :paramB)", data);
-  }
-});
- -

Transactions

- -

Ces exemples montrent comment fonctionnent les transactions.

- -
conn.executeTransaction(function* simpleTransaction() {
-  yield conn.execute("INSERT INTO myTable VALUES (?, ?)", ["foo", "bar"]);
-  yield conn.execute("INSERT INTO myTable VALUES (?, ?)", ["biz", "baz"]);
-});
- -

L'exemple ci-dessus se traduira par 2 instructions INSERT dans une transaction différée (en supposant que les inserts procèdent sans erreur, bien sûr).

- -

Voici un exemple où nous voulons forcer une annulation de la transaction.

- -
conn.executeTransaction(function* complexTransaction() {
-  yield conn.execute("INSERT INTO myTable VALUES (?, ?)", ["foo", "bar"]);
-  let data = yield conn.execute("SELECT * FROM myTable");
-  if (data.length < 5) {
-    throw new Error("We don't have the expected 5 rows to perform the next operation!");
-  }
-
-  // ...
-});
- -

Sélection et retour des données

- -

Ces exemples montrent comment accéder aux données qui sont retournées.

- -

Cet exemple montre plusieurs lignes d'une table retournées en utilisant le paramètre onRow.

- -
let accounts = [];
-let accountId, userName;
-
-let statement = "SELECT account_id, username FROM accounts ORDER BY username ASC";
-
-conn.executeCached(statement, null, function(row) {
-  accountId = row.getResultByName("account_id");
-  userName = row.getResultByName("username");
-  accounts.push({ accountId: accountId, userName: userName });
-}).then(function onStatementComplete(result) {
-  // All accounts returned successfully, so do something with them.
-  console.log(result); // It worked!
-  if (callback) {
-    callback(null, accounts);
-  }
-},
-function onError(err) {
-  // An error occurred.
-  console.log(err); // Error, Oh noes!
-  if (callback) {
-    callback(err);
-  }
-});
- -
-

Remarque: les> paramètres then peuvent être des fonctions anonymes (i.e. function() ) , les seulements nomées sont onStatementComplete et onError pour la lisibilité.

-
- -

Cet exemple démontre la récupération d'une ligne sans utiliser le paramètre onRow, en utilisant le résultat de conn.execute. Cet exemple montre également la récupération de la clé primaire de la dernière ligne insérée.

- -
Task.spawn(function* () {
-  try {
-    conn = yield Sqlite.openConnection({ path: dbFile.path });
-
-    let statement = "INSERT INTO accounts (username, details) VALUES (:username, :details)"
-    let params = { username:"LordBusiness", details: "All I'm asking for is total perfection." };
-
-    yield conn.execute(statement,params);
-
-    // Get accountId of the INSERT.
-    statement = "SELECT last_insert_rowid() AS lastInsertRowID";
-    result = yield conn.execute(statement);
-
-    // Only one row is returned.
-    let row = result[0];
-    let accountId = row.getResultByName("lastInsertRowID");
-
-    if (callback) {
-      callback(null, accountId);
-    }
-  } catch (err) {
-    if (callback) {
-      callback(err);
-    }
-  } finally {
-    conn.close();
-  }
-});
- -
-

Remarque: La valeur retournée par last_insert_rowid() l'est par connexion, de sorte que vous devrez peut-être ouvrir des connexions séparées lorsque vous faites plusieurs INSERT à différents endroits, pour être sûr que l'identifiant de ligne qui est retourné corresponde.

-
- -

Voir aussi

- - diff --git a/files/fr/mozilla/localization/index.html b/files/fr/mozilla/localization/index.html deleted file mode 100644 index 28764f5298..0000000000 --- a/files/fr/mozilla/localization/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Localisation -slug: Mozilla/Localization -tags: - - Localisation - - Mozilla - - Paramètres régionaux - - Traduction - - l10n -translation_of: Mozilla/Localization ---- -

La localisation (L10n) est le processus de traduction de l’interface utilisateur d’un logiciel d’une langue à une autre, en l’adaptant à la culture étrangère. Ces ressources sont destinées à tous ceux intéressés par les aspects techniques de la localisation. Elles concernent aussi bien les développeurs que les autres contributeurs.

- - - -

Voir aussi

- -
-
Localisation de MDN
-
Cette ressource couvre la localisation de la documentation ici, sur MDN
-
Localization des applications
-
Cet ensemble de documents s'applique plus spécifiquement à la localisation d'applications, y compris les applications Firefox OS.
-
L10n
-
Documentation de référence pour l'API L10n utilisée par Mozilla pour localiser Firefox OS.
-
diff --git a/files/fr/mozilla/localization/index/index.html b/files/fr/mozilla/localization/index/index.html deleted file mode 100644 index 5176c7de8f..0000000000 --- a/files/fr/mozilla/localization/index/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Index -slug: Mozilla/Localization/Index -tags: - - Localisation -translation_of: Mozilla/Localization/Index ---- -

{{Index("/fr/docs/Mozilla/Localization")}}

diff --git a/files/fr/mozilla/localization/l10n_style_guide/index.html b/files/fr/mozilla/localization/l10n_style_guide/index.html deleted file mode 100644 index 8313c380b9..0000000000 --- a/files/fr/mozilla/localization/l10n_style_guide/index.html +++ /dev/null @@ -1,357 +0,0 @@ ---- -title: Guide stylistique de localisation de Mozilla -slug: Mozilla/Localization/L10n_Style_Guide -translation_of: Mozilla/Localization/L10n_Style_Guide ---- -

Introduction

- -
Les guides stylistiques définissent la norme selon laquelle peut être mesurée la qualité d'une traduction. Ils contiennent des règles qui sont établies à la fois par Mozilla et par les communautés de localisation de Mozilla sur la meilleure manière de traduire les textes dans les produits, sites et autre projets de Mozilla. Les guides stylistiques sont utilisés à la fois pour traduire et pour évaluer la qualité d'une traduction. En suivant ces règles, un traducteur a plus de chances de produire une traduction de qualité qui représente les valeurs et la culture de Mozilla. Voici quelques exemples de guides stylistiques créés par d'autres organisations :
- - - -
Ce guide stylistique est composé de deux parties : la première contient les règles qui sont spécifiques à la langue et sont définies par chacune des communautés de localisation de Mozilla (entre autres concernant le niveau de langue, la terminologie et les unités de mesure) ; la seconde contient des règles générales que Mozilla a déterminées pour les traducteurs dans toutes les langues qui peuvent vous aider à traduire correctement. La première partie de ce guide stylistique est à adapter pour les règles de votre communauté. Là où c'est possible, faites-y référence à des normes nationales ou internationales pour les unités, règles orthographiques et grammaticales.
- -

 

- -

Style propre à la langue de localisation de Mozilla

- -
    -
- -

Style

- -

Il revient principalement à votre communauté de localisation de définir son propre style. Celui-ci fait partie des instructions et recommandations pour la traduction de texte au sein des différents types de projets. Cela concerne différents éléments comme le ton et le niveau de langage, le traitement des références culturelles, d'expressions idiomatiques, et le maintien d'une certaine cohérence au sein de Mozilla et des guides et conventions stylistiques de produits tiers. Voici les différents aspects à aborder concernant le style.

- -
 
- -
Ton et formalisme
- -
Pour déterminer le ton ou le formalisme d'un projet de localisation de Mozilla dans votre langue, posez-vous ces questions :
- - - -
En définitive, votre localisation ne devrait pas utiliser un niveau de langue ou de formalisme différent de celui défini dans votre guide stylistique. Par exemple, vous pourriez vouloir utiliser « cliquez sur le lien » (pas très formel) plutôt que « veuillez cliquer sur le lien » (un peu plus formel). De même, le ton employé au sein d'un même projet de localisation devrait toujours rester cohérent. 
- -
 
- -
Expression naturelle
- -

L'utilisation d'expressions courantes peut faire en sorte de donner à votre localisation un air plus naturel pour vos utilisateurs. Si votre traduction ne suit pas les recommandations communautaires pour la traduction d'expressions locales ou naturelles, cela peut donner des résultats médiocres ou boiteux. Il est important pour vos équipes de garder ces règles en tête et de les traiter au cours du processus de traduction. Un exemple d'expression naturelle dans une traduction serait la phrase espagnole « En ocho días ». En français, on pourrait la traduire littéralement par « dans huit jours » mais aussi par « dans une semaine ». La seconde traduction est plus naturelle bien que les deux puissent être considérées comme correctes.

- -
Dans cette section de votre guide, établissez des recommandations sur la manière de produire une localisation plus naturelle. Cela peut prendre du temps et nécessiter pas mal d'expérience pour trouver les bons exemples dans votre langue.
- -
 
- -
Traiter les références culturelles, les expressions idiomatiques et l'argot
- -

L'utilisation de référenes culturelles, d'expressions idiomatiques et d'argot nécessite une très bonne compréhension de ces références tant dans la culture de votre langue source que dans votre langue de destination. Un exemple de référence culturelle en anglais serait la phrase « kick-off meeting ». Celle-ci est une référence à un terme de football américain et signifie une réunion pour lancer un nouveau projet. Pour la traduire, deux approches sont possibles :

- -
    -
  1. Trouver une phrase avec une référence équivalente dans votre langue.
  2. -
  3. Retirer la référence culturelle et traduire uniquement le sens concret (par exemple, « une réunion de lancement »
  4. -
- -

Définissez une politique pour traiter ces références que vous pouvez appliquer au sain de tous vos projets. Évaluez différentes ressources complémentaires pour trouver des équivalents culturels et donnez-en une liste dans cette section de vore guide stylistique (par exemple, un guide des expressions argotiques dans votre langue).  

- -
Cohérence du style
- -
N'oubliez pas que d'autres recommandations et guides stylistiques ou des règles d'utilisation de marques, spécifiques à Mozilla ou externes, doivent également être respectés. Vous trouverez plus d'informations à propos de l'utilisation des marques de Mozilla ici : https://www.mozilla.org/en-US/styleguide/identity/firefox/branding/. Par exemple, certains noms de marque comme « Firefox » ne devraient jamais être traduits. Pour d'autres marques qui n'ont pas de politique explicitement définie, c'est à votre communauté de définir s'il est approprié de les traduire. Faites particulierèment attention aux règles et recommandations des marques avant de décider de traduire un nom (qu'il s'agisse de Mozilla d'un autre organisme) et listez les dans cette section de votre guide stylistique.
- -
 
- -
-

Terminologie

- -
Voici une série de bases terminologiques existantes que vous pouvez utiliser notamment pour les termes et définitions liés aux logiciels et à Internet :
- - - -
L'utilisation de bases terminologiques appropriées dans votre langue devrait être systématique. Celles-ci peuvent être développées et approuvées par la communauté elle-même, ou provenir d'autres organismes qui adhèrent à certaines normes nationales, internationales ou locales pour la terminologie informatique.  Évitez en particulier d'utiliser :
- - - -
Astuces sur la traductiond de concepts difficiles
- -
Translating terms representing difficult concepts is a tricky task. Here are some ideas to help you translate terms that do not have equivalents in your language:
- - - -
Developing new term bases
- -
What is your community's process for identifying and creating a new termbase? Here are a few things to keep in mind:
- - - -

Unités et grammaire

- -
Many elements of unit or grammar do not exist or apply to all languages. If you find one of these elements that does not apply to your language, please remove it from your style guide. For those definitions of units and grammar that apply document the reference used or how it will be applied to the translation.
- -
 
- -
The translation should strive to achieve proper unit conversions for currency, measurements, etc. for the target audience.
- -
 
- -

Units and Unit Conversion

- -
Date Format
- -
How are the date formats for weeks and months expressed in the following forms:
- - - -
Reference material can be find here: https://en.wikipedia.org/wiki/Date_format_by_country
- -
 
- -
Calendar view: 
- - - -
Time Format
- -
How is time expressed in your language? Including 0-24 hr expression, hour, minute and second.
- -
 
- -
Numerals 
- -
How are numerals and percentages expressed in your language? 
- -
    Example: 1.23 (decimal separator) or 1,000 (thousand separator) using comma or period. 
- -
 
- -
Currency 
- -
What are other widely used currency and symbols used in your country/language for paid apps. 
- -
 
- -
Units
- -
Do you use the imperial, metric or nautical system for measuring weight, distance, etc.? Source strings will use the imperial system (e.g., miles, pounds, feet, gallons, etc.). Target translations should convert imperial metrics to their measurement system.
- -
 
- -
Names  
- -
-

What are the order of family name and given name in your language?  Here is the guideline on the naming convention from w3c.org:

-
- -
Address and Postal Code Format 
- -
What is the format in your language?  
- -
    Example: most Asian countries start from big to small: [Country] [postal code][state/province][city][district][street number and name][building and suite numbers][addressee]
- -
    Countries of European languages start from small to big: [addressee][street number and name][building and suite numbers][district][city][state/province][postal code][Country]
- -
   
- -
Telephone Number format
- -
Space separators between digits can be different for area codes such as State (Province) and City,
- -
 
- -

Spelling And Grammar Checks

- -
Many languages have national or international standards that define spelling and grammar rules. When defining these rules for your community, make reference to those standards wherever possible. Do you have automated tests for spell checking and grammar? List those tools and dictionaries here and how regularly they should be used.
- -
 
- -
Tense
- -
Do you have standards for verb forms that indicate or express the time, such as past, present, or future, of the action or state? What is your policy on tense consistency for certain use cases? For example, for phrases that ask a user to make an action (like "Download Firefox"), do you use a future tense, a command tense, or a neutral tense?  (See: https://en.wikipedia.org/wiki/Grammatical_tense )
- -
 
- -

Word Forms

- -
Pluralization  
- -
What is the appropriate form of expressing pluralization in your language?  List all forms of plural forms and examples if there is more than one.  Additional discussions can be found Here. https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals and here:  http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html
- -
 
- -
Abbreviations  
- -

How are abbreviations expressed in your language?
-     Example, in English, abbreviations are made by removing most vowels and only using the first 3-5 consonants followed by a period (e.g., abbreviation = abbr.).  (see: https://en.wikipedia.org/wiki/Abbreviation)    

- -

If your language does not have a standard way of expressing abbreviations, do you simply leave them in English?

- -
Acronyms 
- -
-

Are there standard translations of widely accepted acronyms such as CD, DVD, MB in your language? If not, do they remain in English? (see: https://en.wikipedia.org/wiki/Acronym )

-
- -
Punctuation
- -
Do you use different punctuation rules in your Firefox localization than what your language standard defines?
- -
    Example: do you use a period at the end of every user interface element translation or only some? What is the international/national standard for punctuation in your language?
- -
 
- -
Emphasis
- -

Is there an international/national standard for capitalization in your language?

- - - -
Hyphens and compounds 
- -
What is the appropriate way of using hyphens and compounds in your language?  ( https://en.wikipedia.org/wiki/Compound_%28linguistics%29
- -
 
- -
Prepositions and articles 
- -
What is the appropriate form of expressing prepositions and articles in your language?
- -
 
- -
Diacritics and Special characters  
- -
Does your language use any special or accented characters and will they be applied and preserved in sort orders, and other aspects of the translation?  (see: https://en.wikipedia.org/wiki/Diacritic )
- -
 
- -
Quotes  
- -
-

Does your language have a standard use for quotation marks, parenthesis, or brackets?

-
- -
Whitespace 
- -
-

Does your language require the use of white space around words, sentences, paragraphs, etc.? If so, in what ways?  (see: https://en.wikipedia.org/wiki/Sentence_spacing_in_language_and_style_guides )

-
- -
User Interface Elements        
- -
 
- - -
- -

General Mozilla l10n style

- -

Accuracy

- -

Meaning-based translation

- -
When it comes to translation, meaning is everything. A translator needs to understand the source text's meaning exactly. You then find its most closely linked equivalent in your own language, without adding or subtracting meaning in your translation. Finding meaning-based equivalents between languages can be difficult. To help concentrate your thoughts, ask yourself questions like:
- - - -

Sometimes translation memory and machine translation tools can offer bad suggestions for a translation. If you use either as part of your translation workflow, make sure to correct the suggestions before submitting them. Avoid literal translation at all costs. Watch out for words that might sound or look the same between English and your language, but have a different meaning.

- -

Should not be translated

- -
Shortcuts and accesskeys
- -

In Firefox and other software it's possible to use keyboard shortcuts to invoke a specific command. For example, to open a file in Firefox you can press the combination of keys CTRL+O (Cmd+O on Mac). The accelerator key depends on the operative system, but the letter itself is normally localizable. This is what is called a shortcut, or commandkey. For example, the Open File… menu item is stored as

- -
<!ENTITY openFileCmd.label "Open File…">
-<!ENTITY openFileCmd.accesskey "O">
-<!ENTITY openFileCmd.commandkey "o">
- -

The commandkey is stored in openFileCmd.commandkey (sometimes the string has .key in the identifier). Normally you should not localize this key, since shortcuts are often common across the entire operative system (e.g. CTRL+S to Save) or similar products (CTRL+T to open a new tab in most browsers). But it needs to be localized if the letter is not available in your keyboard layout. For example, in Italian the character [ can be accessed through ALT+è, a command key [ would not work.

- -

In the code fragment above you see also an accesskey defined for Open File…. Accesskeys are used to access a UI element from the keyboard. Example: if File menu has an accesskey F, and the Open file… menu has O, you can press ALT+F to access the menu, and then O to open a file.

- -

If the label is File, and the accesskey is F, it will be displayed as "File" on Windows and Linux, with an underscored F. If the accesskey was "O", so a character not available in the original label, it will be displayed underlined between parenthesis: "File (O)".

- -

One important thing to determine is if, for your locale, it makes sense to have localized accesskeys: for example, if most users will use a keyboard with a different layout (English), it might make sense to keep the English original accesskey instead of using a letter available in your localization.

- -

Accesskeys, like commandkeys, have their own lines within .dtd and .properties files and are usually identified by .accesskey in the string ID.

- -
Variables
- -

Variables should never be translated. You can recognize a variable within a string by its beginning with a specific character (e.g., $, #, %, etc.) followed by a combination of words without spacing. For example, $BrandShortName and %S are variables.  You can move a variable around within a string, if the translation of the string requires it.

- - - -

Brand names, as well as copyright and trademarks should never be translated, nor transliterated into a non-Latin based script. See the Mozilla branding guide for more details.

- -

Translating culture-specific references

- -

At times there will be English content included in Mozilla products or web projects (e.g., marketing campaigns) that makes references to American culture and concepts. When translating these, it is best to find an equivalent cultural reference within your own culture that accurately conveys the meaning of the English reference. For example, an American might say, "Good job, home run!" A home run is a baseball reference for a successful outcome. An appropriate translation would be an equivalent metaphor within your culture. Using soccer as an example, you might translate "Good job, home run!" into "Good job, nice goal!" in your language.

- -

[Add a note about Mozilla culture.]

- - - -

Mozilla projects will often contain legal content in the form of user agreements, privacy statements, etc. When reviewing the translation of legal content, Mozilla localizers should do so according to the criteria concerning accuracy, fluency, style, and terminology found within this style guide and according to Mozilla culture and values.

- -

Fluency

- -
 
- -
To produce a fluent translation, not only should the translation follow the language's standard grammar, punctuation, and spelling rules, but it should avoid being ambiguous, incoherent, or inconsistent, and unintelligible.
- -
 
- -
To avoid ambiguity, the translator must thoroughly understand the meaning behind the source text, including any references that text might include. For example, if the English source text uses the word, "it", the translator must know what "it" is to avoid an ambiguous translation. Clearly understanding the source text will also allow a translator to make the source text's logical connections in their own translation. This helps to keep the translation coherent.
- -
 
- -
Inconsistency can pop up in many forms. A translator must be consistent in their use of abbreviations, references, and links within each localization project. They must also be consistent with Mozilla and the localization communities' style guides and approved terminology. Abbreviations, like terminology, should come from either a standard reference (like a dictionary of abbreviations) or should follow your language's rules for creating abbreviations. Once used, the abbreviation must remain consistent every place that it is used in the translation. Cross-references (or links) must also be consistently used within a translation. If a text contains a hyperlink URL to a support article in English, the translation should also contain a hyperlink to a translation of that support article (if available) or the English version. Links should not redirect to other pages nor should they be broken and unusable.
- -
 
- -
Finally, there are times that a translation simply doesn't make sense. It's hard to put your finger on what exactly is wrong with it, but you know it is unintelligible and not fluent. While this is uncommon, it's important to report these unintelligible translations and offer suggestions to correct them.
diff --git a/files/fr/mozilla/localization/localiser_avec_pontoon/index.html b/files/fr/mozilla/localization/localiser_avec_pontoon/index.html deleted file mode 100644 index c030325093..0000000000 --- a/files/fr/mozilla/localization/localiser_avec_pontoon/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Localiser avec Pontoon -slug: Mozilla/Localization/Localiser_avec_Pontoon -translation_of: Mozilla/Localization/Localizing_with_Pontoon ---- -

Pontoon est un outil de localisation (l10n) sur le Web qui est en WYSIWYG, c'est-à-dire vous permet de voir directement ce que sera le résultat de votre travail. Chez Mozilla, nous utilisons Pontoon pour localiser tous les produits Mozilla ainsi que les sites web, depuis Firefox jusqu'à Mozilla.org. Pontoon est d'un accès facile et d'un maniement intuitif : il n'est pas nécessaire de disposer de grandes compétences techniques pour l'utiliser dans un processus de l10n. Nous allons aborder la façon d'utiliser Pontoon pour localiser des projets, depuis la manière de s'inscrire sur le site jusqu'à la phase finale de vos contributions. Chemin faisant, nous verrons quelques fonctionnalités sympathiques qui vous rendront plus efficace et faciliteront vos contributions de traduction et localisation.

- -
-

Vous êtes développeur ? Parcourez l'article implementing Pontoon in your project ou apprenez comment vous impliquer sur le GitHub.

-
- -

Premiers pas

- -

La page d'accueil de Pontoon est d'un usage très simple. Pour commencer, cliquez sur le lien « Sign in » et validez votre inscription avec votre compte Firefox (Firefox account). Ensuite, il vous suffit de sélectionner le projet sur lequel vous voulez travailler et la locale (votre langue) en la sélectionnant dans les menus déroulants. Pontoon ouvre alors automatiquement le projet désiré dans votre langue et vous allez pouvoir commencer. Notez que pour les besoins de cet article, nous utiliserons le site web Firefox Affiliates pour explorer les fonctionnalités de Pontoon et son processus. Et voici Pontoon qui s'ouvre :

- -

Browser app and workspace

- -

Barre d'outils principale

- -

Comme vous pouvez le voir, la majeure partie de l'interface est occupée par le site web qui est en cours de traduction. Seule la barre d'outils dans la partie supérieure appartient à Pontoon et comprend les éléments suivants (de gauche à droite) :

- -

Main toolbar

- -

Liste des chaînes

- -

Ouvre un panneau latéral qui contient la liste de toutes les chaînes à traduire.

- -

Sélecteur de projets

- -

Permet de passer d'un projet de traduction à l'autre.

- -

Sélecteur de ressources

- -

Permet de passer d'une ressource à l'autre pour un projet à traduire, par exemple des pages secondaires ou des fichiers. Cette entrée est masquée s'il n'existe aucune ressource pour le projet.

- -

- -
-
- -

Sélecteur de locale

- -

Permet de changer la langue-cible de traduction.

- -

Go

- -

Ouvre la sélection qui combine projet-ressource-langue

- -

Indicateur de progression

- -

Affiche l'avancement de votre travail de traduction pour la ressource. La fenêtre popup vous donne davantage de détails.

- -
-
- - - -

Permet d'exécuter des tâches spécifiques, telles que commiter sur un dépôt, télécharger des fichiers et se déconnecter.

- - - -

Fournit des informations importantes, telles que la chronologie du projet et une liste des raccourcis clavier.

- -
-
- -

Bon, et si on traduisait un peu maintenant ?

- -
-
- -

Traduction des chaînes

- -

Quand vous utilisez Pontoon pour la localisation, vous disposez de plusieurs options pour traduire vos chaînes. Vous pouvez en effet traduire en contexte, hors-contexte, ou les deux à la fois. Commençons par la traduction en contexte.

- -

En contexte

- -

Le mode de traduction en contexte de Pontoon's est un atout qui le distingue d'autres plateformes de traduction. Pontoon ouvre une page web (ou une application web) et permet de la modifier en temps réel. Voici comment vous pouvez traduire votre première chaîne :

- -

In-context localization

- -
    -
  1. Survolez au pointeur de votre souris le texte que vous souhaitez traduire.
  2. -
  3. Une icône de modification (un crayon) apparaît sur la zone de texte. Cliquez et vous activez le mode traduction.
  4. -
  5. Remplacez le texte original par sa traduction dans votre langue.
  6. -
  7. Cliquez sur l'icône d'enregistrement (une disquette) pour sauvegarder votre traduction.
  8. -
- -
-

Hors-contexte

- -

Certaines chaînes ne sont pas traduisibles en contexte, telles que les balises <title> des pages web et les chaînes ayant différents accords. En cliquant sur l'icône hamburger de la principale barre d'outils, la liste des chaînes et traductions disponibles apparaît en barre latérale. Utilisez alors la barre latérale pour inscrire une localisation hors-contexte:

- -

Out-of-context localization: list Out-of-context localization: translate

- -
    -
  1. Cliquez sur la chaîne à traduire.
  2. -
  3. Apparaît alors, dans le panneau de traduction, la chaîne originale et ses détails (tels que des commentaires).
  4. -
  5. Traduisez la chaîne dans l'espace de traduction situé en dessous.
  6. -
  7. Cliquez sur enregistrer pour enregistrer votre traduction.
  8. -
- -

En traduisant des chaînes hors contexte, les traductions apparaîssent sur la page web si elles sont également traduisibles en contexte.

- -

Outils d'aide à la traduction

-
- -

Comme vous le voyez, vous pouvez profiter des suggestions de l'historique et de la mémoire de traduction, de la traduction automatique et des autres locales également disponibles dans le panneau hors-contexte. Nous appelons ces outils des aides la traduction. Voici dans le détail ce que chacun d'eux peut vous apporter dans votre processus de traduction :

- -

Translation helpers: History Translation helpers: Machinery Translation helpers: Other locales Translation helpers: Search

- -

Historique

- -

Affiche les traductions suggérées pécédemment, y compris celles d'autres utilisateurs.

- -

Machinery

- -

Displays matches from various services: internal translation memory, Mozilla Transvision, open source translation memory, Microsoft terminology and machine translation.

- -

Autres locales

- -

Affiche les traductions correspondantes dans d'autres langues.

- -

Recherche

- -

Fonctionne presque comme Machinery, mais utilise le mot-clé fourni comme paramètre au lieu de la chaîne de caractères originale.

- -

En cliquant sur une suggestion, vous la copiez dans la zone de traduction.

- -
-
- -

Publier sa localisation

- -

Pour publier votre travail de localisation (l10n), vous voudrez normalement l'inscrire dans un dépôt. Et Pontoon s'en charge! En réalité, il synchronise vos changements avec le dépôt toutes les heures. Félicitez-vous donc avec une tape dans le dos, une petite danse, une sieste ou autre chose pour célébrer votre travail!

diff --git a/files/fr/mozilla/localization/localization_notes/index.html b/files/fr/mozilla/localization/localization_notes/index.html deleted file mode 100644 index e391ccb006..0000000000 --- a/files/fr/mozilla/localization/localization_notes/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Notes de traduction -slug: Mozilla/Localization/Localization_notes -tags: - - Guide - - Internationalisation - - Mozilla - - Traduction -translation_of: Mozilla/Localization/Localization_notes ---- -

Les traducteurs travaillent la plupart du temps sur les fichiers à traduire sans le contexte des fichiers sources, y compris les chaînes traduites ; il est donc important d'ajouter des commentaires dans ces mêmes fichiers à traduire. Ces commentaires sont généralement appelés notes de traduction. Il existe un format établi pour ces documents, qui est détaillé dans le document actuel.

- -

Il est important de suivre le format au plus possible. De nombreux outils analysent automatiquement les commentaires afin d'en simplifier la lecture et de faciliter le travail des traducteurs.

- -

Fichiers DTD

- -
<!-- NOTE DE TRADUCTION (nom de l'entité): commentaire -->
-
- -

Fichiers de propriétés

- -
# NOTE DE TRADUCTION (clé): commentaire
-
- -

Les commentaires pour l'ensemble du fichier doivent utiliser le même format, être en haut du fichier (après l'en-tête de la licence, évidemment) et simplement indiquer la référence (nom de l'entité/clé).

diff --git a/files/fr/mozilla/localization/localizing_with_verbatim/index.html b/files/fr/mozilla/localization/localizing_with_verbatim/index.html deleted file mode 100644 index 32d877555a..0000000000 --- a/files/fr/mozilla/localization/localizing_with_verbatim/index.html +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: Localiser avec Verbatim -slug: Mozilla/Localization/Localizing_with_Verbatim -tags: - - Comment - - Démarrer - - Guide - - Localisation - - MDN - - Mozilla - - Participer - - Traduction - - Traduire - - Verbatim -translation_of: Mozilla/Localization/Localizing_with_Pontoon ---- -

Verbatim est un outil en ligne (plus précisément, il s'agit d'une instance Pootle hébergée par Mozilla) conçu pour localiser le contenu des pages Web de Mozilla. Tous les projets Mozilla peuvent en profiter, quelle que soit la langue utilisée. Ce guide vous aidera à localiser votre premier projet Mozilla. Il vous expliquera les bases de Verbatim pour traduire tous les projets Mozilla que vous voudriez voir apparaître dans votre langue au sein de la communauté Mozilla. Plusieurs points seront abordés, notamment les types de projet utilisés avec Verbatim, comment démarrer avec Verbatim ainsi que les différentes tâches accomplies grâce à Verbatim.

- -

Démarrer avec Verbatim

- -

Puisque Verbatim est un outil en ligne, le traducteur doit être connecté à Internet pour l'utiliser. Vous pouvez l'utiliser de deux manières différentes : démarrez une nouvelle localisation ou rejoignez une communauté de localisation déjà existante. Quelque soit votre choix, suivez les étapes ci-dessous pour commencer à travailler sur un projet Verbatim.

- - - - - - - - - - - - - - - - - - - - - - -
Démarrer une nouvelle localisationRejoindre une communauté existante
-
    -
  1. Rendez-vous à l'adresse https://localize.mozilla.org, la page d'accueil de Verbatim.
  2. -
-
-
    -
  1. Rendez-vous à l'adresse https://localize.mozilla.org, la page d'accueil de Verbatim.
  2. -
-
-
    -
  1. Si vous avez un compte Mozilla LDAP (Lightweight Directory Access Protocol), connectez-vous simplement avec les identifiants de ce compte. Sinon, créez un compte, et connectez-vous avec les identifiants de ce compte. Vous trouverez les liens pour vous enregistrer ou vous identifier dans le coin en haut à droite de cette page.
  2. -
-
-
    -
  1. Si vous avez un compte Mozilla LDAP (Lightweight Directory Access Protocol), connectez-vous simplement avec les identifiants de ce compte. Sinon, créez un compte, et connectez-vous avec les identifiants de ce compte. Vous trouverez les liens pour vous enregistrer ou vous identifier dans le coin en haut à droite de cette page.
  2. -
-
-
    -
  1. Rapportez un bogue en utilisant  ce modèle bugzilla pré-rempli. Ajoutez vos paramètres régionaux et votre langue dans le champ "Description", ainsi que toute information que vous jugez utile. Voir l'exemple ci-dessous.
  2. -
- -
Exemple : J'aimerais vous demander d'ajouter fr-FR comme nouveau code de localisation dans Verbatim. La langue est le français. J'aime aussi les cookies. J'adore les cookies. Toutes les pâtisseries me motivent en fait.
-
-
    -
  1. Contactez la communauté pour connaître les projets qui ont le plus besoin d'attention en ce moment. Lisez l'exemple ci-dessous pour vous faire une idée du message que vous pourriez envoyer aux responsables de la communauté.
  2. -
- -
Exemple : J'aimerais vous rejoindre pour vous aider à traduire dans cette langue. Par où puis-je commencer ? J'aimerais aussi vous offrir un verre pour vous motiver à me laisser rejoindre votre communauté !
-
- -

Vous voilà enregistré(e) et identifié(e). Nous allons maintenant décrire le processus général de traduction en nous servant de la page des projets MDN comme exemple.

- -

Traduire

- -

Tout d'abord, il faut trouver des sources qui ne sont pas encore traduites.

- -
    -
  1. Rendez-vous sur la page des projects MDN.
  2. -
  3. Sélectionnez votre langue dans l'onglet Overview.
  4. -
  5. Cliquez sur le répertoire LC Messages pour voir apparaître les fichiers .po qui contiennent les chaînes à traduire.
  6. -
  7. Choisissez un fichier .po dont certaines sources sont encore à traduire.
  8. -
  9. Une page s'affiche avec le résumé de ce fichier. Cliquez sur Continue translation et vous êtes redirigé vers l'onglet Translate pour commencer directement à traduire.
  10. -
- -

Vous êtes maintenant prêt à nous aider, vous allez voir, c'est très facile. Vous pouvez le faire de deux manières :

- -
    -
  1. Insérez votre traduction en dessous de la chaîne en anglais.
  2. -
  3. Cliquez sur Suggest. Si vous avez les autorités pour approuver une traduction, cliquez sur Submit. la chaîne suivante apparaît.
  4. -
  5. Hourra ! Vous traduisez ! Répétez les étapes 1 et 2 pour toutes les chaînes à traduire.
  6. -
- -
Remarque : Si une suggestion a déjà été faite pour l'une des chaînes à traduire, vous pouvez toujours proposer la vôtre, si vous la trouvez plus correcte.
- -

Verbatim offre des options très sympas

- -

Verbatim offre des fonctionnalités intéressantes que vous pouvez voir dans la capture d'écran ci-dessous.

- -

Translate Tab.png

- - - -

Possibilités supplémentaires

- -

Si vous avez l'autorité d'approuver les traductions, vous pourrez également accéder aux fonctionnalités suivantes.

- -

Relire les traductions suggérées

- -
    -
  1. Cliquez sur l'onglet Review. Vous verrez alors apparaître le nombre de chaînes en attente de révision pour chaque fichier .po.Review Tab1.png
  2. -
  3. Sélectionnez Review suggestions pour commencer à approuver les suggestions.
  4. -
  5. Vous pouvez soit accepter la suggestion en cliquant sur le "V" vert ou la rejeter en cliquant sur le "X" rouge (voir capture d'écran de la section précédente).
  6. -
- -

il est important de noter que seules les chaînes soumises apparaîtront dans vos pages localisées, pas les suggestions, ni les traductions fuzzy. Avant de valider votre projet localisé, vérifiez que toutes les chaînes aient bien été soumises.

- -

Utiliser VCS avec Verbatim

- -

VCS (Version Control System) est le système de dépôt utilisé pour mettre à jour les chaînes des projets ou pour mettre en ligne le contenu traduit, selon le lien utilisé.

- -

VCS.pngPour publier vos traductions et voir vos modifications, cliquez sur le lien Commit to VCS en dessous de chaque nom de fichier. Comptez environ une heure avant de voir apparaître vos changements sur le site du projet.

- -

Pour mettre à jour vos fichiers .po avec de nouvelles traductions, cliquez sur le lien Update from VCS en dessous de chaque nom de fichier.

- -

 

- -

-Remarque : Certains projets sont mis à jour automatiquement durant la nuit, alors que d'autres nécessitent une mise à jour manuelle pour recevoir du nouveau contenu. Faites-y très attention car cela peut influencer votre travail.
- -

Traduire les fichiers de Verbatim avec une application externe

- -

Dans l'onglet Translate, vous avez la possibilité d'exporter les fichiers .po et .xliff et de les traduire avec une application externe (p.ex. un éditeur de texte ou une mémoire de traduction).

- -
    -
  1. Pour télécharger le fichier .po, cliquez sur le lien Download sous chaque nom de fichier, pour le fichier .xliff, cliquez sur le lien Download XLIFF.
  2. -
  3. Traduisez les chaînes avec l'outil de votre choix.
  4. -
- -

Lorsque le fichier est traduit, vous devez le renvoyer sur le serveur de Verbatim, vous pouvez le faire à partir de l'onglet Translate.

- -
    -
  1. Naviguez jusqu'à la partie Upload File à la fin de la liste de fichiers.
  2. -
  3. Cliquez sur le bouton Browse et sélectionnez le fichier que vous souhaitez envoyer.
  4. -
  5. Sélectionnez un mode d'envoi selon les options disponibles.
  6. -
  7. Cliquez sur Upload.
  8. -
- -
-

Important : Dans le passé, il y a eu quelques problèmes lorsque certains membres de la communauté mettaient à jour leurs sources alors que d'autres traduisaient en même temps l'ancienne version de ces mêmes sources. Ce faisant, certaines chaînes peuvent échapper au processus de traduction et apparaître en langue source dans un projet localisé. Coordonnez ces mises à jour manuelle entre les membres de votre communauté pour éviter ce problème.

-
- -

Voilà, on y est !

- -

Waouw ! Nous y sommes ! Il est temps d'appliquer ce que vous avez appris et d'aider les gens de votre région à comprendre et connaître Mozilla. Faites-vous plaisir et n'hésitez pas à nous signaler le moindre problème, nous serons ravis de vous aider.

- -

 

- -

Retour : Traduire les pages MDN

diff --git a/files/fr/mozilla/marketplace/index.html b/files/fr/mozilla/marketplace/index.html deleted file mode 100644 index cbe5fffb5e..0000000000 --- a/files/fr/mozilla/marketplace/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Firefox Marketplace -slug: Mozilla/Marketplace -tags: - - Applications - - Débutant - - Firefox OS - - Introduction - - Landing - - Marketplace -translation_of: Archive/Mozilla/Marketplace ---- -
Le Marketplace Firefox est un marché en ligne pour les applications web. Dans cette section de MDN, vous trouverez les informations relatives à la préparation et à la publication d'applications sur le Marketplace Firefox. Vous pourrez en savoir plus sur la bonne construction d'une application, les façons de la diffuser et de la mettre à jour et vous trouverez également des informations à propos des API permettant d'exploiter les fonctionnalités du Marketplace.
- -
-

Grâce aux technologies web standards et à certains outils, le Marketplace Firefox vous permet de publier des applications open web. Ces applications peuvent être empaquetées pour être utilisées au sein de Firefox OS ou bien être hébergées sur votre propre serveur web. Les applications publiées sont disponibles pour l'ensemble des utilisateurs de Firefox OS. Le Marketplace permet de découvrir les différentes applications par catégories, via un outil de recherche ou via les applications du moment. Les utilisateurs peuvent ainsi installer des applications gratuites immédiatement ou des applications payantes avec le paiement via l'opérateur téléphonique.

-
- -
-
-

Les clés du succès

- -
-
Que ce soit pour le plaisir ou dans un cadre plus professionnel, les utilisateurs doivent pouvoir découvrir votre application, l'utiliser et en profiter. Dans cette section, nous voyons comment construire une communauté d'utilisateurs satisfaits.
-
- -

Les options de publication

- -
-
Empaquetées ou hébergées ? Telle est la question. On voit ici comment rendre l'application disponible et les différentes options envisageables afin qu'elle soit également utilisable sur Android et les ordinateurs de bureau (en plus de Firefox OS).
-
- -

Publier des applications

- -
-
Ici, on voit comment publier une application sur le Marketplace Firefox (l'envoi initial, le processus de revue, la mise à jour, le suivi des performances et la gestion des retours utilisateur).
-
-
- -
-
-
- -

Outils de développement

- -
-
Les bibliothèques et API du Firefox Marketplace
-
Un aperçu et des liens à propos des API et bibliothèques disponibles pour ajouter aux applications des fonctionnalités relatives au Marketplace.
-
Les outils destinés aux développeurs d'application
-
Une liste exhaustive d'outils qui peuvent être utilisés pour développer des applications web efficacement.
-
WebIDE
-
L'outil principal pour tester, déployer et déboguer des applications Firefox OS grâce au simulateur Firefox OS ou sur un appareil Firefox OS.
-
-
-
- - - -
    -
  1. Les clés du succès - -
      -
    1. Introduction
    2. -
    3. Quoi construire ?
    4. -
    5. Apprendre à connaître les utilisateurs
    6. -
    7. Choisir le modèle économique
    8. -
    9. Traduire son application
    10. -
    11. Promouvoir son application
    12. -
    13. Créer une communauté
    14. -
    -
  2. -
  3. Les options de publication -
      -
    1. Introduction
    2. -
    3. Les applications empaquetées
    4. -
    5. Les applications hébergées
    6. -
    7. Empaquetée ou hébergée ?
    8. -
    9. Les sites web optimisés pour le mobilewebsites
    10. -
    11. Publier soi-même son application
    12. -
    -
  4. -
  5. Le processus de publication -
      -
    1. Introduction
    2. -
    3. Le checklist pour l'envoi
    4. -
    5. Les critères de revue du Marketplace
    6. -
    7. Un exemple d'illustration
    8. -
    9. Ajouter un sous-domaine pour une application
    10. -
    11. Règles et lignes directrices -
        -
      1. Introduction
      2. -
      3. Capture d'écran pour les critères
      4. -
      5. Politique de confidentialité
      6. -
      7. Test et débogage des applications
      8. -
      -
    12. -
    -
  6. -
  7. Soumettre son application -
      -
    1. Aperçu
    2. -
    3. Première étape : s'inscrire
    4. -
    5. Deuxième étape : charger l'application
    6. -
    7. Troisième étape : lister les détails
    8. -
    9. Quatrième étape : les prochaines étapes
    10. -
    11. Cinquième étape : le système de notation des applications
    12. -
    13. Sixième étape : définir les membres d'une équipe
    14. -
    15. Septième étape : éditer les localisations
    16. -
    -
  8. -
  9. Gérer et mettre à jour une application publiée -
      -
    1. Introduction
    2. -
    3. L'état de l'application
    4. -
    5. Mettre à jour une application
    6. -
    7. Les statistiques d'une application
    8. -
    -
  10. -
  11. Soumettre un module complémentaire -
      -
    1. Un aperçu de l'envoi
    2. -
    3. Les critères de revue pour un module complémentaire
    4. -
    -
  12. -
  13. API et bibliothèques
  14. -
  15. FàQ sur le Marketplace Firefox
  16. -
diff --git a/files/fr/mozilla/marketplace/index/index.html b/files/fr/mozilla/marketplace/index/index.html deleted file mode 100644 index 84ea48e865..0000000000 --- a/files/fr/mozilla/marketplace/index/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Index -slug: Mozilla/Marketplace/Index -tags: - - Index -translation_of: Archive/Mozilla/Marketplace/Index ---- -

{{Index("/fr/Marketplace")}}

diff --git a/files/fr/mozilla/marketplace/monetisation/index.html b/files/fr/mozilla/marketplace/monetisation/index.html deleted file mode 100644 index 64edbd3706..0000000000 --- a/files/fr/mozilla/marketplace/monetisation/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Monétisation -slug: Mozilla/Marketplace/Monetisation -tags: - - Applications - - Firefox OS - - moentization - - paiement -translation_of: Archive/Marketplace/Monetization ---- -
-

Vous avez travaillé dur pour coder votre dernière application, mais comment pouvez-vous obtenir quelque chose en retour lors de la publication ? Cette section présente tous les informations dont vous aurez besoin pour implémenter le paiement d'application, que ce soit les paiements depuis le marketplace ou des paiements dans l'application.

-
- -
-
-
-
Tirer profit de votre application
-
Ce guide détaillé contient des discussions préliminaires sur la façon de monétiser vos applications, y compris les applications payantes, les prix et la gestion des paiements.
-
Guide du paiement d'application
-
Cet article couvre les aspects techniques des applications payées.
-
Paiements dans les application
-
Un guide détaillé pour la mise en œuvre des paiements dans les applications dans votre application Web.
-
Valider un reçu
-
Un guide pour savoir quand et comment faire valider le reçu de paiement de votre application, que vous vouliez mettre en œuvre la validation vous-même ou utiliser une bibliothèque préexistante.
-
Guide des prix
-
Un tour d'horizon des points de fixation du prix que vous pouvez choisir pour vos applications payantes, et comment ceux-ci varient selon les différentes devises, ainsi que des informations utiles sur la gestion des paiements.
-
Statuts de paiements
-
Un résumé des pays qui bénéficient de nos services de paiement — essentiellement, peuvent être distribuées les applications payantes?
-
-
- -
-
Tools for app developers
- -
Technology reference documentation
- -
Getting help from the community
-

If you still aren't sure how to do what you're trying to get done, feel free to join the conversation!

- -

Don't forget about the netiquette...

-
-
- -

 

diff --git a/files/fr/mozilla/marketplace/options/creating_a_store/index.html b/files/fr/mozilla/marketplace/options/creating_a_store/index.html deleted file mode 100644 index 0543168c72..0000000000 --- a/files/fr/mozilla/marketplace/options/creating_a_store/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Creating your own store -slug: Mozilla/Marketplace/Options/Creating_a_store -translation_of: Archive/Marketplace/Options/Creating_a_store ---- -
-

La méthode d'installation et de gestion des applications dans Firefox OS, Firefox pour Android et Firefox pour PC de bureau est indépendant de Firefox Marketplace. Cela ouvre la possibilité pour vous de non seulement auto-publier des applications, mais aussi pour créer et héberger votre propre marché. En fin de compte, vous pouvez aussi mettre en place un marché indépendant en utilisant le logiciel open source. Cette page décrit les options et donne un aperçu de la mise en œuvre de chaque.

-
- -

vos options
-
- Les trois principales options que vous pouvez utiliser pour créer votre propre boutique sont:
-
-      Procédé d'annuaire
-      méthode de magasin
-      remplir la mise en œuvre du marché
-
- Ces options sont décrites plus en détail ci-dessous.
-
- Remarque: les applications peuvent être limités à l'installation à partir d'une liste des origines autorisés avec la installs_allowed_from bien manifeste. Vous aurez besoin de confirmer que cette propriété n'est pas définie pour exclure l'origine de votre magasin lors de l'inscription applications.

- -

Directory method

- -

Here you create a directory of apps served by the Firefox Marketplace, making use of the Firefox Marketplace API to retrieve information on the apps. You would then need to implement your own Web pages to display details of the apps and trigger their installation. With this method you can serve any app that is available on Firefox Marketplace, but you won't generate a revenue stream for paid apps.
- You can find an example of this method of store creation in TheCount. At the time of writing, to see the example in action click apps with at least 30 ratings and open any of the listed apps. In the app's details page you'll see an install button directly below the title, as shown below.

- -

The installation button for an app with at least 30 ratings in TheCount, a stats and reporting website.

- -

You can find the code used to implement the button in the project's Github repository.

- -

Store method

- -

Here you work independently of the Firefox Marketplace providing a list of self-published apps that are installed using {{ domxref("Apps.install") }} or {{ domxref("Apps.installPackage") }}. The self-published apps can either be hosted by you or another developer. This method limits you to apps that can be self-published, that is, you cannot serve Packaged Apps using Privileged and Certified APIs.

- -

Full Marketplace implementation

- -

Here you implement the various components of Marketplace (zamboni plus other components such as Solitude and WebPay, if you want to implement payments). For more information, please see the zamboni documentation.

- -

Useful APIs

- -

When implementing the directory or store methods, you'll find the following APIs of use.

- -

Interacting with Marketplace

- -

When using the directory method you'll need to access and use details of the apps available in Marketplace. The key APIs for these tasks are:

- - - -

To find more information on these APIs and others that might be useful, please see the Firefox Marketplace API documentation.

- -

Managing apps on a device

- -

You'll probably be familiar with {{ domxref("Apps.install") }} or {{ domxref("Apps.installPackage") }} already, the APIs used to install Packaged  Apps and Hosted Apps. These APIs are part of the {{ domxref("navigator.mozApps") }} JavaScript object, which includes several other APIs that can communicate with a Firefox OS device or browser to gather information on installed apps.

- -

For example, the navigator.mozApps.getInstalled() method enables you to get a list of the apps that were installed in the current user agent by your domain. You'll not see apps installed by other domains, only the ones that you put there. You can use this method to determine whether the user's installed apps match your expectations, or to implement a "resync" feature if the user signs into your site from a new profile.

- -

For more details, please see App Installation and Management APIs.

- -

Other information

- -

If you're delivering Hosted Apps, you can easily maintain a session with the user to track preferences, proof-of-purchase, or other additional services. If you're providing services to a remotely Hosted App, you'll need to do some additional work to support a distributed authentication system.

- - diff --git a/files/fr/mozilla/marketplace/options/index.html b/files/fr/mozilla/marketplace/options/index.html deleted file mode 100644 index 43e9966338..0000000000 --- a/files/fr/mozilla/marketplace/options/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Your publication options -slug: Mozilla/Marketplace/Options -tags: - - Structure only - - TopicStub -translation_of: Archive/Mozilla/Marketplace/Options/Introduction ---- -

Dans cette section, vous découvrirez :

- - - -
-

Le contenu de cette section est toujours en cours de développement.

-
diff --git a/files/fr/mozilla/marketplace/options/introduction/index.html b/files/fr/mozilla/marketplace/options/introduction/index.html deleted file mode 100644 index 51cee4b8c5..0000000000 --- a/files/fr/mozilla/marketplace/options/introduction/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Introduction — vos options de publications -slug: Mozilla/Marketplace/Options/Introduction -translation_of: Archive/Mozilla/Marketplace/Options/Introduction ---- -
-

Le Marketplace de Firefox fournit un canal à travers lequel vous pouvez publier vos applications et les rendre facilement détectables par les utilisateurs de Firefox OS. Cependant, ce n'est pas votre seule option pour rendre disponibles vos applications. Cette section vous aidera à comprendre les idées de base sur les formats utilisables pour les applications et les diverses options pour leur publication.

-
- -

Vos options de publications

- -
-
Application packagée
-
Choisissez votre méthode préférée de livraison pour vos applications - une option qui vous offre l'accès à des API privilégiées et sécurisées
-
Hosted apps
-
Découvrez comment rendre vos applications disponibles à partir d'un serveur, tout en donnant aux utilisateurs les avantages d'une application installée.
-
Packaged or hosted?
-
Utilisez cette liste de contrôle pour déterminer le format qui convient le mieux à votre application.
-
Auto-publication d'application
-
Dans certains cas, vous voudrez peut-être publier vos applications en dehors de Firefox Marketplace, peut-être pour les rendre disponibles aux tests ou les distribuer dans votre entreprise. Découvrez les options que vous avez et comment les mettre en œuvre.
-
Mobile-optimized websites
-
Le Marketplace Firefox a la possibilité de répertorier les sites web optimisés pour mobile (MOW) - simplement des sites web qui fonctionnent bien dans les appareils et plates-formes mobiles - juste à côté des applications. Cet article explique ce que cette nouvelle fonctionnalité implique, comment vous pouvez l'utiliser et ce que les différentes phases de publication future mettront à disposition.
-
- -

 

diff --git a/files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html b/files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html deleted file mode 100644 index 3a37fc5c26..0000000000 --- a/files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Open Web Apps for Android -slug: Mozilla/Marketplace/Options/Open_web_apps_for_android -translation_of: Archive/Marketplace/Options/Open_web_apps_for_android ---- -
-

Users of Firefox for Android install Marketplace apps as 'normal' Android apps, gaining the benefit of powerful open web features. This ability is enabled by the creation of APKs by the APK Factory. Installed apps are run by the Web Runtime for Android, which is included in Firefox for Android. By making your apps accessible to Firefox for Android users, you gain an additional distribution opportunity, expanding the potential audience for your work.

-
- -

What is Open Web Apps for Android?

- -

Open Web Apps for Android enables free Marketplace apps to be packaged into an APK (Android installation package), which is then installed and run in the same way as any other Android app. The APK package consists of web content (in the case of packaged apps) or a pointer to web content (in the case of hosted apps). This content is then enclosed in a thin Java/Android wrapper, which provides the integration with the Android OS. Once installed on an Android device the app is executed by Web Runtime for Android, a component of Firefox for Android.

- -

These packages are created by the APK Factory Service, which is run as a web service by Marketplace. The APK Factory Service makes use of the APK Factory Library to create the actual package and the APK Signer to digitally sign the APK. This service is available to your own Marketplace, should you choose to create one.

- -

You don't need any knowledge of Android development, or to take any extra development steps, to use Open Web Apps for Android: you simply select the option for distribution to Firefox Mobile or Firefox Tablet when submitting your apps to the Firefox Marketplace.

- -
-

Note: Open Web Apps for Android provides support for hosted apps in Firefox for Android xx or later, packaged apps are supported in Firefox for Android 29 or later. Only free apps are available for Android from the Firefox Marketplace at this time.

-
- -

Web Runtime for Android supports 12 APIs to access device capabilities, such as vibration, geolocation, and battery status. You can see a complete list of supported APIs here: APIs showing "A" under "Availability" are those APIs available on Android, with green cells indicating that the API is available in full. You can also mouseover individual cells to get tooltips containing more information.

- -

Web Runtime for Android will continue to add support for other APIs in future releases. Some of the APIs planned are:

- - - -
-

Note: Android users may be using devices with higher resolutions, greater pixel densities (DPI), and larger screen sizes than those found on Firefox OS devices. Apps that haven't used responsive design may therefore provide a poor experience, and you may want to design your apps with this in mind. For more information on responsive design see the Design section of the App Center.

-
- -

Using Open Web Apps for Android from Firefox Marketplace

- -

This section provides details on how you make use of Open Web Apps for Android from Firefox Marketplace, how they affect the Marketplace experience, and information on app updates.

- -

Submitting an app

- -

When you submit an app to the Firefox Marketplace, you choose the option of making your app available for Firefox Mobile or Firefox Tablet. Choosing either or both of these options will automatically deliver your app as an APK on Android devices.

- -

Approving an app

- -

When your app is reviewed, the reviewer installs your app from the reviewer section in Firefox Marketplace. When they do this from an Android device, the "review" instance of the APK Factory service is invoked to create an APK signed in Android debug mode. This version of the APK is then installed on the app reviewer's device and they complete the review process.

- -

If the app is approved, the "release" instance of the APK Factory service is invoked to generate and sign the APK with a unique APK Signing Key. The resulting signed APK is then cached for delivery when a user chooses to install the app.

- -

Installing an app

- -

When a user selects your app in the Marketplace on their Android device, installation works as follows:

- -
    -
  1. Firefox Marketplace displays the app's details and Free install button as normal.
  2. -
  3. When the user taps Free, {{ domxref("Apps.install") }} or {{ domxref("Apps.installPackage") }} is invoked as usual (depending on whether it's a hosted or packaged app) and a call is made to the APK Factory service to request the APK.
  4. -
  5. The APK is downloaded to the Android device and the standard Android app installation process invoked.
  6. -
  7. If the user hasn't enabled the Security setting Unknown sources, Android will alert the user and give them the option to cancel the installation or open Settings.
  8. -
  9. Once Unknown sources is enabled, the user is shown an install confirmation dialog. The dialog lists the permissions requested by privileged apps.
  10. -
  11. If the user taps Install the app is installed.
  12. -
  13. Once the app has been installed, the user is given the option to Open the app and in Firefox Marketplace the Free button is replaced with a Launch button.
  14. -
- -

Subsequently the user will find the application in their Apps screen. In addition, the process to use and remove the app is the same as they'd expect for other Android apps. Firefox for Android provides a list of installed apps under Apps on the Tools menu as well.

- -

Keeping apps up to date

- -

Firefox for Android provides a mechanism installing update apps.

- -

If your app is hosted, whenever you make a change on its server, users will pick up changes the next time they run your app.

- -

For all other changes, you need to add a new version to the Firefox Marketplace:

- - - -

Firefox for Android makes a daily check on the version number in the app’s manifest and if it has changed silently applies the update.

- -

Using Open Web Apps for Android from your own Marketplace

- -

You're able to create your own Marketplace. Such a Marketplace consists of either a directory of apps in Firefox Marketplace or your own hosted content (app descriptions with the main manifest of hosted apps or the mini manifest with app zip archive in the case of packaged apps).

- -

Your Marketplace will pass the URL of the manifest to be installed to {{ domxref("Apps.install") }} / {{ domxref("Apps.installPackage") }} that then invokes APK Factory, meaning you don't have to do anything to enable Open Web Apps for Android in your Marketplace. You do, however, need to ensure that your Marketplace only serves apps that include APIs supported by the Web Runtime for Android.

- -

How the APK Factory works

- -

This section describes how the APK Factory works.

- - - -

The following diagrams offer an alternative representation of the workflow of the APK Factory:

- -

Web Sequence diagram showing the operation of the APK factory

- -

Package naming and APK signing keys

- -

On installation of an APK the Android device checks the Java package name and signature. It verifies the signature the first time an app is installed (there is no central authority it checks with). Future updates must then have the same package name and signature. If the package name and signature aren't the same, the Android device won't update the installation.

- -

Package naming

- -

The package name for an APK consists of the hosting site and a unique serial number, for example:

- - - -

APK signing keys

- -

Each APK needs to be identified by an APK signing key before it can be installed on an Android device. APK signing keys are created and owned by the APK Signer service. These signing keys are sensitive, and stored securely in the APK Signer.

- -

This service creates a unique key for each app, applying it to the original release and subsequent updates. The reuse of the key on updated app APKs is important, as without a match in the package name and key Android won't install an update over an earlier version of the app. If you create your own Marketplace, the APK will retain the same name and keys, so that either version will be able to update the other.

- -
-

Note: Mozilla assumes no responsibility for the credibility of the APK signing keys. That is, the keys provide no information about the authenticity of the app or developer beyond the fact that they have been approved for release in Marketplace, if the app is hosted there. The service is not tied to Google or any other central authority.

-
- -

FAQ

- -

Here are answers to some frequently asked questions about APKs for Open Web Apps for Android.

- -

What about re-installation of apps installed as bookmarks?

- -

When a user updates to Firefox for Android version 29 or later, their bookmark-style apps will continue to work, and Firefox will prompt users to update apps to their Open Web Apps for Android version.

- -

How will in-app purchases work?

- -

The APK is given access to the trusted UI, mozPay, and all payment processes for in-app purchases, so in-app payments will function as normal.

- -

How do I download a copy of my app's APK?

- -

You can download a copy of your app from the APK Factory service by retrieving a URL in the format:

- -

https://controller.apk.firefox.com/application.apk?manifestUrl=ESCAPED_URL_TO_MANIFEST

- -

where ESCAPED_URL_TO_MANIFEST is an escaped URL to the app's manifest or mini-manifest. That URL causes the APK Factory to return the cached copy of the APK, or create a new one if the app hasn't been submitted to Marketplace.

- -

Examples

- -

For a hosted app:

- -

> wget https://controller.apk.firefox.com/application.apk?manifestUrl=http%3A%2F%2Fmykzilla.org%2Fapp%2Fmanifest.webapp -O mykzilla.apk

- -

For a packaged app:

- -

> wget https://controller.apk.firefox.com/application.apk?manifestUrl=https%3A%2F%2Fmarketplace.firefox.com%2Fapp%2Fa22e0277-35bc-434d-9371-1568c75fc726%2Fmanifest.webapp -O cuttherope.apk
-  

- -

Can I generate an APK manually from a different URL?

- -

Yes, by providing the URL to any location for your manifest or mini-manifest files. However, be aware that because the APK is generated from a different URL, the package name will differ from that created when you submit the app to Firefox Marketplace, so the Firefox Marketplace version will be installed as a separate app.

- -

If I setup my own copy of the APK Factory can I use the APKs it generates?

- -

You can, but be aware that the signing keys will differ from those assigned to the APKs generated by Firefox Marketplace. As a result Android will refuse to install whichever version the user tries to install second. (See If I also have an Android native version of my app, can both be installed on an Android device? for more information.)

- -

Can I submit an APK created by the APK Factory to Google Play or other Android store?

- -

You can submit an APK generated by APK Factory to Google Play or an alternative Android store. However, it's your responsibility to:

- - - -

Can I use my Android signing keys to sign the APK and choose the package name?

- -

At present you cannot use your own signing keys to sign an APK generated by APK Factory or choose the package name. This is an option being considered. If this is of interest to you, join the discussion on the dev-marketplace mailing list, or the Marketplace IRC channel.

- -

If I also have an Android native version of my app, can both be installed on an Android device?

- -

Unless you choose to use the APK package name created by APK Factory for your native Android app, both can be installed on an Android device. If you choose to use the same package name for your native Android app (which you'll sign with your own key) Android will refuse to install whichever version the user tries to install second. This is because the package names are the same but the signing keys are different, so Android considers the apps to be the same, but from different sources. Therefore Android will refuse to update one app with the other, since that would allow one developer to override another's app. The user will end up with the first version installed on their device.

- -
-

Because of the issues it may cause for users, it's highly recommended that you don't reuse the package name the APK Factory assigns to your app for a native Android version of your app.

-
- -

How can I test/debug APKs?

- -

We're working on a toolchain for testing and debugging an app on an Android device. The initial version will include a Node-based command-line tool for generating an APK you can install on the device and debug using Firefox's Remote Developer Tools.

- -

Also see

- - diff --git a/files/fr/mozilla/marketplace/options/packaged_apps/index.html b/files/fr/mozilla/marketplace/options/packaged_apps/index.html deleted file mode 100644 index 465763857c..0000000000 --- a/files/fr/mozilla/marketplace/options/packaged_apps/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Application packagée -slug: Mozilla/Marketplace/Options/Packaged_apps -translation_of: Archive/Mozilla/Marketplace/Options/Packaged_apps ---- -
-

Une application packagée est un .zip contenant toutes les ressources nécessaires (HMTL, CSS, JavaScript, manifest, etc.) au format Open Web APP plutôt que laisser les ressources sur un serveur web. Cet article contient une introduction aux applications packagée et des liens vers tout ce dont vous avez besoin de connaitre en tant que developpeur.

-
- -

Une application packagée est un fichier .zip qui contient tous les fichiers nécessaires au bon fonctionnement des Open Web App ainsi que le manifeste au dossier racine du zip. Le manifeste fournis les détails de l'application tels que la description, l'icône qui identifie l'application,... Le package est alors utilisé pour installer l'application dans Firefox OS, Firefox pour android et Firefox pour ordinateur. Une fois installée, l'app fonctionne sur l'appareil de l'utilisateur, mais est toujours capable d'accéder a des ressources externes, comme une base de données externe.

- -

Il y a trois types d'application packagée : les applications web, les applications privilégiées et les applications certifiées. Alors que les applications web sont distribuables sans contraintes, les applications privilégiées et certifiées sont numériquement signées pour permettre l'utilisation de privilèges et d'API certifiées. Les applications privilégiées sont signées durant le processus de revue des applications Marketplace, ce qui certifie qu'elles sont signées par des constructeurs d'appareils ou des opérateurs.

- -

En plus de ces possibilitées, les applications packagées permettent un temps de démarrage plus court car toutes les ressources sont déjà téléchargées car installées. Cette fonctionalité fait des applications packagées l'approche recomandée pour fournir des Open Web App aux téléphones Firefox OS et Android et pour Firefox pour ordinateur.

- -
-

Note : Actuellement, Firefox Marketplace supporte les applications web et privilégiées. De plus, Firefox Marketplace supporte les applications payantes pour Firefox OS seulement et les applications gratuites pour Firefox pour Android et Firefox pour ordinateur. Le support des applications payantes pour toutes le plateformes est en développement.

-
- -

Type d'applications packagées

- -

Il y a trois types d'application packagée : les applications web, les applications privilégiées et les applications certifiées. Chaque type d'application packagée correspond a un niveau du modèle de sécurité des applications implémenté dans Firefox OS. Cette section fourni des informations sur chaque type d'application packagée.

- -

Application Web

- -

Une application web est celle qui n'utilise pas de privilège ou de certification. Quand elle est soumise au Marketplace, elle est signée, mais cela ne permet pas d'utiliser les privilèges ou les certifications. Ces applications ne sont pas sujettes aux  politiques de sécurité des contenus nécessaires aux applications certifiées et privilégiées.

- -

Ce type d'application packagée ne requière pas le champ field dans son fichier manifest.webapp car la valeur par défaut (web) est correcte.

- -

Les applications web peuvent être auto-publiées ou distribuées via le Firefox Marketplace. Elles peuvent aussi être fournies aux utilisateurs via le mécanisme d'application hébergée.

- -

Application privilégiée

- -

Une application privilégiée peut-être considérée comme l'équivalent des applications natives sur des plateformes comme iOS et Android. Durant sa soumission au Firefox Marketplace, ce type d'application passe par un processus spécial. En effet, cela donne au utilisateurs de ces applications l'assurance qu'elles ont été soigneusement revues pour de potentiels problèmes de sécurité, de vie privée ou de fonctionnement.

- -

Pour spécifier qu'une application est privilégiée, ajoutez le type field dans le manifest.webapp et passez-le à privileged. Chaque API privilégiée que votre application nécessite doit être spécifiée dans le champ permissions du manifeste.

- -

Vous devez mettre les CSP suivantes dans le manifeste d'une application privilégiée :

- -
"default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"
- -

Ces applications ne peuvent être distribuées que via le Firefox Marketplace.

- -

Application certifiée

- -
-

Les applications certifiées ne sont généralement pas disponibles pour les développeurs tiers et ne sont pas distribuées via le Firefox Marketplace. Le but sur le long terme est que toutes les API nécessitant le niveau certifié ne nécessitent plus que le niveau privilégié. Si vous voulez voir une API particulière devenir disponible, venez nous en parler sur la mailling list dev-webapps.

-
- -

Une application certifiée permet l'utilisation d'API certifiées, qui permettent d'accéder aux fonctions critiques du système. Contrairement aux applications privilégiées, les permissions d'API pour les applications certifiées sont implicites et donc toutes activées par défaut sans l'approbation explicite de l'utilisateur. Une application certifiée doit être approuvée pour un constructeur ou un opérateur.

- -

Pour spécifiée qu'elle est certifiée, l'application doit contenir le champ field avec la valeur certified dans le manifest.webapp. Chaque API privilégiée que votre application nécessite doit être spécifiée dans le champs permissions du manifeste.

- -

Vous devez mettre les CSP suivantes dans le manifeste d'une application privilégiées :

- -
"default-src *; script-src 'self'; object-src 'none'; style-src 'self'"
- -

Ceci a pour effet d'implémenter des règles plus strictes pour les CSP par rapport aux applications certifiées. Si vous voulez comprendre les raisons derrières ces motivations, lisez la politique des CSP par défaut et le bug 768029.

- -

Les applications certifiées sont pré-chargées dans les appareils par les constructeurs et les opérateurs.

- -

Tester des applications packagées

- -

Pour installer des applications dans le simulateur Firefox OS ou directement dans un téléphone, voyez le guide d'utilisation du manager d'application. Vous pouvez aussi installer sur un appareil via un serveur web en suivant le guide pour publier des applications par vous-mêmes.  N'oubliez pas que si vous déployez par vous-même, seules les applications web pourront être installées.

- -

Publiez votre application packagée

- -

Vous avez deux options pour publier vos applications : le Firefox Marketplace ou par vous-même.

- -

Publier sur le Firefox Marketplace

- -

Le processus pour publier une application packagée est décrit dans la section parlant de la publication d'application.

- -

Quand vous soumettez votre application, le fichier zip est stockée sur le Firefox Marketplace et celui-ci génère un nouveau manifest appellé mini-manifeste, basé sur votre manifeste. Quand un utilisateur installe votre application, le mini-manifeste est passé à la fonction Apps.installPackage() qui va l'installer. Ce mini-manifeste est utilisé seulement pour des questions d'installation et de mise à jour et n'est pas utilisé par votre application pour fonctionner.

- -

La publier vous-même

- -

Il est possible de publier vous-même votre application en dehors du Firefox Marketplace via votre propre serveur web. Vous trouverez des détails sur la page dédiée à ce sujet.

- -

Mettre a jour votre application

- -

Pour des informations sur la mise à jour d'application, voyez la page dédiée à ce sujet.

- -

Plus d'information

- - - -

 

diff --git a/files/fr/mozilla/marketplace/options/self_publishing/index.html b/files/fr/mozilla/marketplace/options/self_publishing/index.html deleted file mode 100644 index cc1b852940..0000000000 --- a/files/fr/mozilla/marketplace/options/self_publishing/index.html +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: Auto-publication d'application -slug: Mozilla/Marketplace/Options/Self_publishing -translation_of: Archive/Mozilla/Marketplace/Options/Self_publishing ---- -
-

Il y a des circonstances où il n'est pas souhaitable de rendre une application disponible sur le Firefox Marketplace. C'est le cas, lorsque l'on veut distribuer l'application uniquement au membre d'une organisation ou bien lorsque l'application est encore en phase de test privé. Cette page explique comment publier sa propre application en dehors du Marketplace.

-
-

Les Open Web Apps sont installables sous Firefox OS, Firefox pour android et Firefox pour desktop en utilisant {{ domxref("Apps.install") }} ou {{ domxref("Apps.installPackage") }}. Dans les deux cas, ces APIs envoient l'URL du manifeste décrivant l'application à installer. Ainsi afin de publier soi-même son application, les pré-requis minimaux sont:

-
    -
  1. Un serveur où le manifest de l'application est accessible.
  2. -
  3. Un serveur où l'application est accessible pour les applications hébergées et pour les applications empaquetées le fichier ZIP contenant l'application.
  4. -
  5. Un code sur un site web appelant {{ domxref("Apps.install") }} ou {{ domxref("Apps.installPackage") }} selon la situation.
  6. -
-

Limitations

-

Avant de publier vous-même votre Open Web Apps, vous devriez garder en mémoires les limitations suivantes:

- -

Auto-publication d'applications empaquetées

-

Vous pouvez auto-publier votre application empaquetée en hébergeant son fichier ZIP ainsi qu'un mini-manifeste associé sur un serveur. Le mini-manifeste doit être dans le même dossier que le fichier ZIP car il permet d'identifier l'application lors de l'installation. Une fois le mini-manifeste créé, il ne reste plus qu'à créer un script invoquant {{ domxref("Apps.installPackage") }} avec l'url du mini-manifeste pour installer l'application. Voyons maintenant en détails les différentes étapes:

-
    -
  1. -

    Empaquetez le contenu de votre application dans une archive ZIP et donnez lui le nom package.zip.  L'archive doit contenir toutes les ressources de l'application ainsi que que le manifeste principal.

    -
    -

    Attention: Le manifeste doit être à la racine de l'archive.

    -
    -
  2. -
  3. Créez un fichier appelé manifest.webapp et ajoutez le contenu ci-dessous. Ce fichier est connu sous le nom de mini-manifeste, car il s'agit d'une version simplifiée du fichier manifeste contenu dans l'archive de l'application. Il est utilisé par {{ domxref("Apps.installPackage") }} pour entreprendre l'installation de l'application. Pour plus de détails, référez-vous à la documentation sur les champs du mini-manifeste ci-dessous. -
    {
    -    "name": "Le nom de mon application",
    -    "package_path" : "<a class="LinkyMobile-ext" href="http://my-server.com/my-app-directory/my-app.zip" title="Linkification: http://my-server.com/my-app-directory/my-app.zip">http://my-server.com/my-app-directory/package.zip</a>",
    -    "version": "1",
    -    "developer": {
    -        "name": "A. Developpeur",
    -        "url": "<a class="LinkyMobile-ext" href="http://my-server.com" title="Linkification: http://my-server.com">http://my-server.com</a>"
    -    }
    -}
    -
  4. -
  5. Créez le script qui installera l'application. Pour cela, l'exemple ci-dessous utilise une simple page HTML nommée index.html ,  mais vous pouvez invoquer le script dans n'importe qu'elle méthode de votre site web. Le javaScript de cette page appelle l'API d'installation d'application empaquetée ({{ domxref("Apps.installPackage") }}) et inclut des notifications indiquant si l'installation a réussi ou non. -
    <html>
    -  <body>
    -    <p>Page d'installation de l'application empaquetée</p>
    -    <script>
    -      // Cette URL doit être une URL compléte
    -      var manifestUrl = '<a class="LinkyMobile-ext" href="http://my-server.com/my-app-directory/package.manifest" title="Linkification: http://my-server.com/my-app-directory/package.manifest">http://my-server.com/my-app-directory/manifest.webapp</a>';
    -      var req = navigator.mozApps.installPackage(manifestUrl);
    -      req.onsuccess = function() {
    -        alert(this.result.origin);
    -      };
    -      req.onerror = function() {
    -        alert(this.error.name);
    -      };
    -    </script>
    -  </body>
    -</html>
    -
  6. -
  7. Copiez les fichiers package.zip, package.manifest, et index.html sur votre serveur dans le dossier choisi (my-app-directory dans cet exemple).
  8. -
  9. Maintenant vous pouvez installer l'application sur un appareil compatible. Ouvrez le fichier index.html (dans cet exemple le chemin de ce fichier est http://mon-serveur.com/App-directory/index.html)  et vous aurez une fenêtre demandant une confirmation avant d'installer l'application. Une fois l'installation terminée, vous aurez une indication sur le résultat de l'installation.
  10. -
-
-

Astuce: Vous pouvez héberger localement une application empaquetée et le tester sur un appareil. Le serveur et l'appareil doivent pouvoir communiquer sur le réseau local. N'oubliez pas d'indiquer le numéro port si vous n'utilisez pas le port standard, par exemple: http://10.10.12.1:8080/package.zip.

-
-

Champs du mini-manifeste

-

Dans le cas d'auto-publication, il est nécessaire de créer un mini-manifeste. Si l'application est est publiée sur le Firefox Marketplace, le mini-manifeste est généré automatiquement à partir du manifeste de l'application.

-

Le meilleur moyen de créer le mini-manifeste est de copier le manifeste de l'application et de le modifer de maniére apropriée. Ainsi les champs name, version, developer et locales fields seront exactement les mêmes dans les deux manifestes. Il ne vous reste plus qu'à ajouter les champs package_path, release_notes et size:

-
-
- package_path (requis)
-
- Le chemin absolu (URL compléte:  http://mon-serveur.com/App-directory/manifest.webapp) vers l'archive de l'application.
-
- release_notes (optionel)
-
- Notes de version de l'application. Sur le Firefox Marketplace cette information est fournie lors du processus de soumission.
-
-
-
- size (optionel)
-
- La taille de l'archive en octets. Cette information est utilisée par {{ domxref("Apps.installPackage") }} pour fournir une barre de progression lors de l'installation.
-
-

Voici un exemple d'un mini-manifeste:

-
{
-  "name": "My app",
-  "package_path": "<a class="LinkyMobile-ext" href="http://thisdomaindoesnotexist.org/myapp.zip" title="Linkification: http://thisdomaindoesnotexist.org/myapp.zip">http://thisdomaindoesnotexist.org/myapp.zip</a>",
-  "version": "1.0",
-  "size": 172496,
-  "release_notes": "Première publication",
-  "developer": {
-    "name": "Dupont Michel",
-    "url": "<a class="LinkyMobile-ext" href="http://thisdomaindoesnotexist.org/" title="Linkification: http://thisdomaindoesnotexist.org/">http://thisdomaindoesnotexist.org/</a>"
-  },
-  "locales": {
-    "fr-FR": {
-      "name": "Mon application"
-    },
-    "se-SE": {
-      "name": "Min balla app"
-    }
-  },
-  "icons": {
-    "16": "/icons/16.png",
-    "32": "/icons/32.png",
-    "256": "/icons/256.png"
-  }
-}
-
-

Les autres champs de cet exemple sont:

-
-
- name (requis)
-
- Le nom de l'application. La longueur maximale est de 128 caractères.
-
- version (optionel)
-
- Le numéro de version de cette application.
-
- developer  (optionel)
-
- Information sur le développeur, contenant les champs name (nom) et url (adresse). Les informations saisies doivent correspondre avec celles du fichier manifest dans l'archive ZIP.
-
- locales (optionel)
-
- Information sur le langage, au format xx-YY.
-
- icons (optionel)
-
- Les icones utilisés par cette application.
-
-

Les autres champs de l'exemple proviennent du manifeste de l'application voir la page associée pour plus d'information.

-

Auto-publication d'application hébergée

-

L'auto-publication d'applications hébergé est similaire à celle des applications empaquetées. Il faut toujours créer un manifeste pour l'application voir la page associée. Le code pour installer l'application hébergé est le même que les applications hébergées. La seule différence est que le manifeste peut utiliser des URLs relatives

-

Voir aussi

- diff --git a/files/fr/mozilla/marketplace/publication/index.html b/files/fr/mozilla/marketplace/publication/index.html deleted file mode 100644 index f9e798d4d7..0000000000 --- a/files/fr/mozilla/marketplace/publication/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Publication -slug: Mozilla/Marketplace/Publication -tags: - - Structure seule - - 'l10n:priority' -translation_of: Archive/Mozilla/Marketplace/Publishing/Introduction ---- -

REDIRECTION Introduction — App Publishing [en-US] (Introduction - publication d'applications)

diff --git a/files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html b/files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html deleted file mode 100644 index ff2a0a5e2c..0000000000 --- a/files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Critères d'évaluation du Marketplace -slug: Mozilla/Marketplace/Publication/Marketplace_critere_revue -translation_of: Archive/Mozilla/Marketplace/Publishing/Marketplace_review_criteria ---- -
-

Cet article décrit les différents prérequis qu'une application doit satisfaire avant de pouvoir être publiée par le Firefox Marketplace. Ces critères sont pensés pour répondre aux besoins des développeurs d'applications du Firefox Marketplace autant qu'à ceux de leurs utilisateurs. Les développeurs attendent des critères équitables, universels et réalistes auxquels ils peuvent se fier pour concrétiser leurs idées. D'un autre côté, les utilisateurs veulent être assurés que les applications soient sûres, fonctionnelles et fassent bien ce qu'elles sont censées faire. Les prérequis listés ci-dessous servent à trouver un équilibre délicat entre ces différents besoins.

-
- -

D'après Mozilla, les modalités d'une évaluation d'application sont :

- - - -

Sécurité

- -

Tous les détails de l'architecture de sécurité des applications sont disponibles ici : https://wiki.mozilla.org/Apps/Security

- - - -

Confidentialité

- -

Le développeur devra fournir un lien vers la politique de confidentialité utilisée pour son application lors de sa soumission. Il n'y a, en revanche, pas de restriction concernant le format ou le contenu de cette politique de confidentialité. N'hésitez-pas à utiliser notre modèle de politique de confidentialité. Regardez également nos directives sur la politique de confidentialité.

- -

Contenu

- - - -

Règles de contenu

- -

Cette liste décrit les types de contenu qui ne sont pas appropriés sur le Firefox Marketplace. Cette liste est indicative, non définitive, et peut donc être mise à jour. Si une application est jugée contraire à ces règles de contenu, Mozilla a le droit de retirer immédiatement l'application du Marketplace Firefox.

- - - -

Fonctionnalité

- - - -

Ergonomie

- - - -

Politique de blocage

- -

Nous espérons que nous ne devrons jamais l'utiliser, mais nous nous réservons le droit de supprimer ("blocklist" (en) "liste noire" ou "liste de blocage" (fr)) toute application publiée qui est plus tard considérée comme contraire aux exigences de sécurité, de confidentialité ou de contenu ; ou des applications qui dégradent sérieusement les performances du système ou du réseau. Les développeurs seront informés de la situation avant qu'une application soit bloquée ; ils seront présupposés être de bons citoyens, à moins que nous ayons des preuves précises. Nous recevrons une assistance complète de l'équipe d'évaluation des applications pour communiquer sur ce qui se passe et résoudre le problème. Des exemples spécifiques, de situations où la liste de blocage est justifiée, comprennent :

- - - -

Plus d'informations

- -

Les ressources suivantes fournissent plus d'informations sur le processus d'évaluation des applications et les commentaires :

- - - -

 

diff --git a/files/fr/mozilla/marketplace/publication/updating_apps/index.html b/files/fr/mozilla/marketplace/publication/updating_apps/index.html deleted file mode 100644 index 861bd4447f..0000000000 --- a/files/fr/mozilla/marketplace/publication/updating_apps/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Mises à jour des applications -slug: Mozilla/Marketplace/Publication/Updating_apps -translation_of: Archive/Mozilla/Marketplace/Publishing/Updating_apps ---- -
-

Cet article explique le processus par lequel vous mettez à jour des applications publiées, auto-éditées ou publiées sur le Firefox Marketplace.

-
- -
-

Une fois qu'une application a été installée par un utilisateur, il n'est plus possible de changer son nom par une mise à jour. De nouvelles installations cependant, prendront le nouveau nom de l'application. Ceci est une mesure de sécurité pour éviter les changements de nom sans scrupules.

-
- -

Mise à jour des applications hébergées

- -

Hosted Apps respectent les règles normales de mise en cache Web, et peuvent utiliser des mécanismes avancés pour améliorer le démarrage ou pour permettre une utilisation hors ligne, tels que AppCache. Par conséquent, il n'y a normalement pas de règles spéciales pour la mise à jour des applications - il vous suffit de mettre à jour l'application sur votre site.

- -

Cependant, quelques changements sur vos applications peuvent impliquer des mises à jour du manifeste.

- -

Changer le contenu d'un manifeste

- -

Pour mettre à jour les caractéristiques d'une application publiée - comme le nom d'application, le nom du développeur, les langues, les icônes - vous appliquez simplement ces changements au manifeste que vous hébergez. Si vous avez soumis l'application au Marketplace de Firefox et qu'un de ces changements est considéré comme significatif, l'application est marquée pour évaluation.

- -

Les moments d'exécution sur le Web et l'OS de Firefox devraient automatiquement détecter ces changements et déclencher une mise à jour chez l'utilisateur. Cependant, vous pouvez manuellement déclencher des mises à jour en inscrivant un champ de version dans le manifeste d'application. Votre application peut alors vérifier la version en inspectant la valeur retournée {{ domxref ("Apps.getInstalled") }} . Si la version installée de l'utilisateur n'est pas à jour, votre application peut déclencher une mise à jour utilisant {{ domxref ("Apps.install") }}. Notez que quelques changements à un manifeste, et en conséquence une installation, peuvent exiger l'approbation de l'utilisateur avant l'exécution de la mise à jour.

- -

La valeur de version n'est pas utilisée par l'OS de Firefox ni pendant les temps d'exécution sur le Web, donc vous pouvez utiliser n'importe quel schéma de version vous convenant.

- -

Changement de l'emplacement d'un manifeste

- -

Vous pouvez vouloir changer l'emplacement du fichier du manifeste de votre application. Typiquement, vous ferez cela pour déplacer l'application vers un nouveau domaine ou vers un sous-domaine qui vous permettront de livrer plusieurs applications hébergées.

- -

Si vous voulez  faire ceci pour des applications soumises au Marketplace de Firefox, retournez à la soumission d'application et dans la page " Edit Details " changez la valeur de l'URL du manifeste. La suite dépendra du statut de votre application :

- - - -

Avis sur les applications mises à jour

- -

Lorsqu'une applicationi hébergée est signalée pour évaluation à la suite d'une mise à jour, ce qui suit se produit :

- - - -
-

Dans la mesure du possible, vous devez éviter de changer l'emplacement de l'application / manifeste après la publication dans le Marketplace de Firefox, en raison de l'impact sur l'utilisateur. Un changement de l'emplacement du manifeste se traduira par une nouvelle instance installée de l'application lorsque {{ domxref("Apps.install") }} est invoquée . De nombreux utilisateurs trouveront cela perturbant.

-
- -

Mise à jour des applications empaquetées

- -

Les Packaged Apps ont un processus de mise à jour différent de celui des applications hébergées. Pour mettre à jour une application empaquetée, vous téléchargez une nouvelle version du fichier zip sur le Marketplace de Firefox. L'application mise à jour est ensuite évaluée et, lorsqu'elle est approuvée, publiée sur le Marketplace.  Cela déclenche une mise à jour de toutes les versions installées. Les utilisateurs de l'OS Firefox peuvent également demander une mise à jour en utilisant l'application Paramètres. Pour télécharger une nouvelle version de votre application, connectez-vous au Marketplace avec le même compte que pour la présentation précédente, puis cliquez sur l'icône d'engrenage en haut à droite et cliquez sur « My Submissions » (mes soumissions).   Sous l'en-tête « Manage My Submissions » (gérer mes soumissions) et pour l'application en question, cliquez sur "Status & Versions." De là, faites défiler vers le bas et cliquez sur " Select a File " (Sélectionner un fichier) sous "Upload New Version" (Télécharger la nouvelle version).  À partir de là, vous pouvez choisir de ne pas avoir une  publication automatique de votre application après son évaluation en décochant la case  "Publish my app in the Firefox Marketplace as soon as it's reviewed". Les appareils des utilisateurs vérifieront chaque jour l'existence de mises à jour d'applications, et verront une notification d'une mise à jour disponible pour son téléchargement à leur discrétion.

- -

Would you like to publish to marketplace upon review?

- - diff --git a/files/fr/mozilla/marketplace/publish/index.html b/files/fr/mozilla/marketplace/publish/index.html deleted file mode 100644 index 387fc894de..0000000000 --- a/files/fr/mozilla/marketplace/publish/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Publier sur le Firefox Marketplace -slug: Mozilla/Marketplace/Publish -translation_of: Archive/Mozilla/Marketplace/Publish ---- -
-

Documentation pour la publication d'une application sur Firefox Marketplace.

-
- -
-
-
-
App testing and troubleshooting
-
Un petit guide pour tester et dépanner, à suivre avant de soumettre votre application sur Firefox Marketplace.
-
Proposer une application sur le Firefox Market
-
Ce guide étape par étape vous aidera à soumettre votre application avec succès à Firefox Marketplace.
-
Critères d'évaluation du Marketplace
-
Une explication des critères qu'une application doit respecter pour être publiée sur Firefox Marketplace; en suivant les règles énoncées dans cet article, vous pouvez faciliter le processus de publication de votre application.
-
Marketplace screenshot criteria
-
Règles pour les captures d'écran à soumettre avec votre application afin de maximiser son impact et sa qualité sur le marché.
-
-
-
- -

 

diff --git a/files/fr/mozilla/marketplace/publishing/submit/index.html b/files/fr/mozilla/marketplace/publishing/submit/index.html deleted file mode 100644 index 265a1ad776..0000000000 --- a/files/fr/mozilla/marketplace/publishing/submit/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Submit -slug: Mozilla/Marketplace/Publishing/Submit -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Mozilla/Marketplace/Publishing/Submit ---- -

This section describes the process for submitting an app to Firefox Marketplace

-

Residual details: https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Submitting_an_app

diff --git a/files/fr/mozilla/mathml_project/index.html b/files/fr/mozilla/mathml_project/index.html deleted file mode 100644 index c5286ce4ab..0000000000 --- a/files/fr/mozilla/mathml_project/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Mozilla MathML Project -slug: Mozilla/MathML_Project -tags: - - MathML - - MathML Project - - NeedsTranslation - - TopicStub -translation_of: Mozilla/MathML_Project ---- -

The Mozilla MathML project is Mozilla's project to build and enhance MathML support within Firefox and other Mozilla-based applications. For a quick overview, see the slides for the innovation fairs at Mozilla Summit 2013.

- -

Updates

- -

Mathzilla

- - - -

August 11, 2013

- -

Math(ML) in Education Digital Content

- -

August 6, 2013

- -

Math in the browser

- -

May 3, 2013

- -

Firefox Nightly passes the MathML Acid2 test ; Slashdot article ; ghacks article.

- -

January 10, 2013

- -

Chrome 24 has been released with basic MathML support!

- -

update: MathML disabled again in Chrome 25 :-(

- -

December 1, 2012

- -

All the pages of the Mozilla MathML Project have now been migrated to MDN!

- -

November 26, 2012

- -

Math typesetting - Why are we leaving such an important issue to under-resourced volunteers and small organisations?

- -

Community

- - - - - - - -

Sample MathML Documents

- - - -

Create MathML Documents

- - - -
-

Original Document Information

- - -
diff --git a/files/fr/mozilla/mathml_project/mathml_torture_test/index.html b/files/fr/mozilla/mathml_project/mathml_torture_test/index.html deleted file mode 100644 index 10e11ba7ce..0000000000 --- a/files/fr/mozilla/mathml_project/mathml_torture_test/index.html +++ /dev/null @@ -1,1445 +0,0 @@ ---- -title: Test de torture MathML -slug: Mozilla/MathML_Project/MathML_Torture_Test -tags: - - MathML -translation_of: Mozilla/MathML_Project/MathML_Torture_Test ---- -

Test de torture de MathML

-
-

HTML Content

-
<p>
-  Render mathematics with:
-  <select name="MathFont" id="MathFont">
-    <option value="Default" selected="selected">Default fonts</option>
-    <option value="Asana">Asana</option>
-    <option value="MathJax">MathJax</option>
-    <option value="STIX">STIX General</option>
-    <option value="AsanaExp">Asana (experimental)</option>
-    <option value="Cambria">Cambria (experimental)</option>
-    <option value="TeXGyreBonum">TeX Gyre Bonum (experimental) </option>
-    <option value="TeXGyrePagella">TeX Gyre Pagella (experimental) </option>
-    <option value="TeXGyreTermes">TeX Gyre Termes (experimental) </option>
-    <option value="LatinModern">Latin Modern (experimental) </option>
-    <option value="Lucida">Lucida (experimental) </option>
-    <option value="NeoEuler">Neo Euler (experimental) </option>
-    <option value="STIXWord">STIX Word (experimental) </option>
-    <option value="XITS">XITS (experimental) </option>
-    <option value="XITSRTL">XITS RTL (experimental) </option>
-  </select> <br/>
-</p>
-
-<table>
-
-<tr>
-<td></td>
-<th scope="col">As rendered by TeX</th>
-<th scope="col">As rendered by your browser</th></tr>
-
-<tr>
-<td>1</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4578/=ex1.png" width="38" height="22"
-alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msup>
-    <mi>x</mi>
-    <mn>2</mn>
-  </msup>
-  <msup>
-    <mi>y</mi>
-
-    <mn>2</mn>
-  </msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>2</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4579/=ex2.png" width="30" height="17" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<!--
-<mrow>
-  <msub><mi></mi><mn>2</mn></msub>
-  <msub><mi>F</mi><mn>3</mn></msub>
-</mrow>
--->
-<mrow>
-
-  <mmultiscripts>
-    <mi>F</mi>
-    <mn>3</mn><none/>
-    <mprescripts/>
-    <mn>2</mn><none/>
-  </mmultiscripts>
-</mrow>
-</math>
-
-</td></tr>
-
-<tr>
-<td>3</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4586/=ex21.png" width="58" height="47" alt="TeXbook, 17-17.1" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mfrac>
-    <mrow>
-      <mi>x</mi>
-      <mo>+</mo>
-
-      <msup>
-        <mi>y</mi>
-        <mn>2</mn>
-      </msup>
-    </mrow>
-    <mrow>
-      <mi>k</mi>
-
-      <mo>+</mo>
-      <mn>1</mn>
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>4</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4587/=ex22.png" width="76" height="25" alt="TeXbook, 17-17.1" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mi>x</mi>
-  <mo>+</mo>
-  <msup>
-    <mi>y</mi>
-    <mfrac>
-
-      <mn>2</mn>
-      <mrow>
-        <mi>k</mi>
-        <mo>+</mo>
-        <mn>1</mn>
-      </mrow>
-    </mfrac>
-
-  </msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>5</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4588/=ex23.png" width="30" height="42" alt="TeXbook, 17-17.1" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mfrac>
-    <mi>a</mi>
-
-    <mrow>
-      <mi>b</mi>
-      <mo>/</mo>
-      <mn>2</mn>
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-
-</td></tr>
-
-<tr>
-<td>6</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4589/=ex24.png" width="220" height="138" alt="TeXbook, 17.5-17.6" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msub>
-    <mi>a</mi>
-    <mn>0</mn>
-
-  </msub>
-  <mo>+</mo>
-  <mfrac>
-    <mn>1</mn>
-    <mstyle displaystyle="true" scriptlevel="0">
-      <msub>
-        <mi>a</mi>
-
-        <mn>1</mn>
-      </msub>
-      <mo>+</mo>
-      <mfrac>
-        <mn>1</mn>
-        <mstyle displaystyle="true" scriptlevel="0">
-          <msub>
-
-            <mi>a</mi>
-            <mn>2</mn>
-          </msub>
-          <mo>+</mo>
-          <mfrac>
-            <mn>1</mn>
-            <mstyle displaystyle="true" scriptlevel="0">
-
-              <msub>
-                <mi>a</mi>
-                <mn>3</mn>
-              </msub>
-              <mo>+</mo>
-              <mfrac>
-                <mn>1</mn>
-
-                <mstyle displaystyle="true" scriptlevel="0">
-                  <msub>
-                    <mi>a</mi>
-                    <mn>4</mn>
-                  </msub>
-                </mstyle>
-              </mfrac>
-            </mstyle>
-          </mfrac>
-
-        </mstyle>
-      </mfrac>
-    </mstyle>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>7</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4590/=ex25.png" width="200" height="85" alt="TeXbook, 17.5-17.6" /></td>
-<td>
-
-<math>
-<mrow>
-  <msub>
-    <mi>a</mi>
-    <mn>0</mn>
-  </msub>
-  <mo>+</mo>
-  <mfrac>
-
-    <mn>1</mn>
-    <mrow>
-      <msub>
-        <mi>a</mi>
-        <mn>1</mn>
-      </msub>
-      <mo>+</mo>
-
-      <mfrac>
-        <mn>1</mn>
-        <mrow>
-          <msub>
-            <mi>a</mi>
-            <mn>2</mn>
-          </msub>
-
-          <mo>+</mo>
-          <mfrac>
-            <mn>1</mn>
-            <mrow>
-              <msub>
-                <mi>a</mi>
-                <mn>3</mn>
-
-              </msub>
-              <mo>+</mo>
-              <mfrac>
-                <mn>1</mn>
-                <mrow>
-                  <msub>
-                    <mi>a</mi>
-
-                    <mn>4</mn>
-                  </msub>
-                </mrow>
-              </mfrac>
-            </mrow>
-          </mfrac>
-        </mrow>
-      </mfrac>
-
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>8</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4591/=ex26.png" width="54" height="50" alt="TeXbook, 17.5-17.6" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mo>(</mo>
-
-  <mfrac linethickness="0">
-    <mi>n</mi>
-    <mrow>
-      <mi>k</mi>
-      <mo>/</mo>
-      <mn>2</mn>
-    </mrow>
-
-  </mfrac>
-  <mo>)</mo>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>9</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4592/=ex27.png" width="237" height="50" alt="TeXbook, 17.7" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mrow>
-
-
-    <mo>(</mo>
-    <mfrac linethickness="0">
-      <mi>p</mi>
-      <mn>2</mn>
-    </mfrac>
-    <mo>)</mo>
-  </mrow>
-
-  <msup>
-    <mi>x</mi>
-    <mn>2</mn>
-  </msup>
-  <msup>
-    <mi>y</mi>
-    <mrow>
-
-      <mi>p</mi>
-      <mo>-</mo>
-      <mn>2</mn>
-    </mrow>
-  </msup>
-  <mo>-</mo>
-  <mfrac>
-
-    <mn>1</mn>
-    <mrow>
-      <mn>1</mn>
-      <mo>-</mo>
-      <mi>x</mi>
-    </mrow>
-  </mfrac>
-
-  <mfrac>
-    <mn>1</mn>
-    <mrow>
-      <mn>1</mn>
-      <mo>-</mo>
-      <msup>
-        <mi>x</mi>
-
-        <mn>2</mn>
-      </msup>
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>10</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4593/=ex29.png" width="116" height="63" alt="TeXbook, 17.7-17.8" /></td>
-
-<td>
-<math display="block">
-<mrow>
-  <munder>
-    <mo>&sum;</mo>
-    <mrow>
-      <mfrac linethickness="0">
-        <mrow>
-          <mn>0</mn>
-          <mo>&leq;</mo>
-
-          <mi>i</mi>
-          <mo>&leq;</mo>
-          <mi>m</mi>
-        </mrow>
-        <mrow>
-          <mn>0</mn>
-          <mo>&lt;</mo>
-
-          <mi>j</mi>
-          <mo>&lt;</mo>
-          <mi>n</mi>
-        </mrow>
-      </mfrac>
-    </mrow>
-  </munder>
-  <mi>P</mi>
-
-  <mo stretchy="false">(</mo>
-  <mi>i</mi>
-  <mo>,</mo>
-  <mi>j</mi>
-  <mo stretchy="false">)</mo>
-</mrow>
-</math>
-
-</td></tr>
-
-<tr>
-<td>11</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4580/=ex3.png" width="27" height="18" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<mrow>
-<msup>
-  <mi>x</mi>
-  <mrow>
-    <mn>2</mn>
-
-    <mi>y</mi>
-  </mrow>
-</msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>12</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4594/=ex30.png" width="175" height="61" alt="TeXbook, 17.8" /></td>
-<td>
-<math display="block">
-<mrow>
-
-  <munderover>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>i</mi>
-      <mo>=</mo>
-      <mn>1</mn>
-    </mrow>
-
-    <mi>p</mi>
-  </munderover>
-  <munderover>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>j</mi>
-      <mo>=</mo>
-
-      <mn>1</mn>
-    </mrow>
-    <mi>q</mi>
-  </munderover>
-  <munderover>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>k</mi>
-
-      <mo>=</mo>
-      <mn>1</mn>
-    </mrow>
-    <mi>r</mi>
-  </munderover>
-  <msub>
-    <mi>a</mi>
-
-    <mrow>
-      <mi>i</mi>
-      <mi>j</mi>
-    </mrow>
-  </msub>
-  <msub>
-    <mi>b</mi>
-
-    <mrow>
-      <mi>j</mi>
-      <mi>k</mi>
-    </mrow>
-  </msub>
-  <msub>
-    <mi>c</mi>
-
-    <mrow>
-      <mi>k</mi>
-      <mi>i</mi>
-    </mrow>
-  </msub>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-
-<td>13</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4595/=ex31.png" width="405" height="100" alt="TeXbook, 17.9-17.10" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msqrt>
-    <mn>1</mn>
-    <mo>+</mo>
-    <msqrt>
-      <mn>1</mn>
-
-      <mo>+</mo>
-      <msqrt>
-        <mn>1</mn>
-        <mo>+</mo>
-        <msqrt>
-          <mn>1</mn>
-          <mo>+</mo>
-
-          <msqrt>
-            <mn>1</mn>
-            <mo>+</mo>
-            <msqrt>
-              <mn>1</mn>
-              <mo>+</mo>
-              <msqrt>
-
-                <mn>1</mn>
-                <mo>+</mo>
-                <mi>x</mi>
-              </msqrt>
-            </msqrt>
-          </msqrt>
-        </msqrt>
-
-      </msqrt>
-    </msqrt>
-  </msqrt>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>14</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4596/=ex34.png" width="272" height="50" alt="TeXbook, 17.10" /></td>
-<td>
-<math display="block">
-<mrow>
-
-  <mrow>
-    <mo>(</mo>
-    <mfrac>
-      <msup>
-        <mo>&part;</mo>
-        <mn>2</mn>
-      </msup>
-      <mrow>
-
-        <mo>&part;</mo>
-        <msup>
-          <mi>x</mi>
-          <mn>2</mn>
-        </msup>
-      </mrow>
-    </mfrac>
-    <mo>+</mo>
-
-    <mfrac>
-      <msup>
-        <mo>&part;</mo>
-        <mn>2</mn>
-      </msup>
-      <mrow>
-        <mo>&part;</mo>
-        <msup>
-
-          <mi>y</mi>
-          <mn>2</mn>
-        </msup>
-      </mrow>
-    </mfrac>
-    <mo>)</mo>
-  </mrow>
-
-  <msup>
-    <mrow>
-      <mo minsize="1.5">|</mo>
-      <mi>&#x3C6; <!-- \varphi --></mi>
-      <mo stretchy="false">(</mo>
-      <mi>x</mi>
-      <mo>+</mo>
-
-      <mi mathvariant="normal">i</mi>
-      <mi>y</mi>
-      <mo stretchy="false">)</mo>
-      <mo minsize="1.5">|</mo>
-    </mrow>
-    <mn>2</mn>
-
-  </msup>
-  <mo>=</mo>
-  <mn>0</mn>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>15</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4581/=ex4.png" width="31" height="22" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-
-<math display="block">
-<mrow>
-  <msup>
-    <mn>2</mn>
-    <msup>
-      <mn>2</mn>
-      <msup>
-        <mn>2</mn>
-
-        <mi>x</mi>
-      </msup>
-    </msup>
-  </msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>16</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4597/=ex40.png" width="55" height="49" alt="TeXbook, 18.10-18.11" /></td>
-
-<td>
-<math display="block">
-<mrow>
-  <msubsup>
-    <mo stretchy="false">&int;</mo>
-    <mn>1</mn>
-    <mi>x</mi>
- </msubsup>
- <mfrac>
-
-   <mrow><mi>d</mi><mi>t</mi></mrow>
-   <mi>t</mi>
- </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>17</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4599/=ex41.png" width="91" height="47" alt="TeXbook, 18.12-18.13" /></td>
-<td>
-
-<math display="block">
-<mrow>
-  <msub>
-    <mo>&#x222C; <!-- \iint --></mo>
-    <mi>D</mi>
-  </msub>
-  <mi>d</mi><mi>x</mi>
-  <space width="thinmathspace"/>
-
-  <mi>d</mi><mi>y</mi>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>18</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4600/=ex43.png" width="250" height="66" alt="TeXbook, 18.23" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mi>f</mi>
-
-  <mo stretchy="false">(</mo>
-  <mi>x</mi>
-  <mo stretchy="false">)</mo>
-  <mo>=</mo>
-  <mrow>
-    <mo>{</mo>
-
-    <mtable>
-      <mtr>
-        <mtd columnalign="center">
-          <mrow>
-            <mn>1</mn>
-            <mo>/</mo>
-            <mn>3</mn>
-
-          </mrow>
-        </mtd>
-        <mtd columnalign="left">
-          <mrow>
-            <mtext>if&nbsp;</mtext>
-            <mn>0</mn>
-            <mo>&leq;</mo>
-            <mi>x</mi>
-
-            <mo>&leq;</mo>
-            <mn>1</mn>
-            <mo>;</mo>
-          </mrow>
-        </mtd>
-      </mtr>
-      <mtr>
-        <mtd columnalign="center">
-
-          <mrow>
-            <mn>2</mn>
-            <mo>/</mo>
-            <mn>3</mn>
-          </mrow>
-        </mtd>
-        <mtd columnalign="center">
-
-          <mrow>
-            <mtext>if&nbsp;</mtext>
-            <mn>3</mn>
-            <mo>&leq;</mo>
-            <mi>x</mi>
-            <mo>&leq;</mo>
-            <mn>4</mn>
-
-            <mo>;</mo>
-          </mrow>
-        </mtd>
-      </mtr>
-      <mtr>
-        <mtd columnalign="center">
-          <mn>0</mn>
-        </mtd>
-
-        <mtd columnalign="left">
-          <mtext>elsewhere.</mtext>
-        </mtd>
-      </mtr>
-    </mtable>
-  </mrow>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>19</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4601/=ex44.png" width="101" height="44" alt="TeXbook, 18.23-18.24" /></td>
-<td>
-<math display="block">
-<mover>
-  <mrow>
-    <mi>x</mi>
-    <mo>+</mo>
-    <mo>...</mo>
-
-    <mo>+</mo>
-    <mi>x</mi>
-  </mrow>
-  <mover>
-    <mo>&OverBrace;</mo>
-    <mrow><mi>k</mi> <mspace width="thinmathspace"/> <mtext>times</mtext></mrow>
-  </mover>
-
-</mover>
-</math>
-</td></tr>
-
-<tr>
-<td>20</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4582/=ex5.png" width="25" height="13" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msub>
-    <mi>y</mi>
-    <msup>
-
-      <mi>x</mi>
-      <mn>2</mn>
-    </msup>
-  </msub>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>21</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4602/=ex51.png" width="253" height="56" alt="TeXbook, 18.40" /></td>
-<td>
-<math display="block">
-<mrow>
-  <munder>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>p</mi>
-      <mtext>&nbsp;prime</mtext>
-    </mrow>
-
-  </munder>
-  <mi>f</mi>
-  <mo stretchy="false">(</mo>
-  <mi>p</mi>
-  <mo stretchy="false">)</mo>
-  <mo>=</mo>
-
-  <msub>
-    <mo stretchy="false">&int;</mo>
-    <mrow>
-      <mi>t</mi>
-      <mo>&gt;</mo>
-      <mn>1</mn>
-    </mrow>
-  </msub>
-
-  <mi>f</mi>
-  <mo stretchy="false">(</mo>
-  <mi>t</mi>
-  <mo stretchy="false">)</mo>
-  <mspace width="thinmathspace"/>
-  <mi>d</mi>
-  <mi>&pi;</mi>
-  <mo stretchy="false">(</mo>
-  <mi>t</mi>
-  <mo stretchy="false">)</mo>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>22</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4603/=ex52.png" width="159" height="81" alt="TeXbook, 18.41" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mo stretchy="false">{</mo>
-  <munder>
-    <mrow>
-      <mover>
-        <mrow>
-          <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded>
-          <mi>a</mi>
-          <mo>,</mo>
-          <mo>...</mo>
-          <mo>,</mo>
-          <mi>a</mi>
-        </mrow>
-
-        <mover>
-          <mo>&OverBrace;</mo>
-          <mrow>
-            <mi>k</mi>
-            <mtext>&nbsp;</mtext>
-            <mi>a</mi>
-            <mtext>'s</mtext>
-
-          </mrow>
-        </mover>
-      </mover>
-      <mo>,</mo>
-      <mover>
-        <mrow>
-          <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded>
-          <mi>b</mi>
-          <mo>,</mo>
-          <mo>...</mo>
-          <mo>,</mo>
-          <mi>b</mi>
-        </mrow>
-
-        <mover>
-          <mo>&OverBrace;</mo>
-          <mrow>
-            <mi>&ell;</mi>
-            <mtext>&nbsp;</mtext>
-            <mi>b</mi>
-            <mtext>'s</mtext>
-          </mrow>
-
-        </mover>
-      </mover>
-    </mrow>
-    <munder>
-      <mo>&UnderBrace;</mo>
-      <mrow>
-        <mi>k</mi>
-        <mo>+</mo>
-
-        <mi>&ell;</mi>
-        <mtext>&nbsp;elements</mtext>
-      </mrow>
-    </munder>
-  </munder>
-  <mo stretchy="false">}</mo>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>23</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4604/=ex53.png" width="213" height="108" alt="TeXbook, 18.42" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mo>(</mo>
-  <mtable>
-    <mtr>
-      <mtd columnalign="center">
-
-        <mrow>
-          <mo>(</mo>
-          <mtable>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>a</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>b</mi>
-              </mtd>
-            </mtr>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>c</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>d</mi>
-              </mtd>
-            </mtr>
-          </mtable>
-          <mo>)</mo>
-        </mrow>
-      </mtd>
-      <mtd columnalign="center">
-
-        <mrow>
-          <mo>(</mo>
-          <mtable>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>e</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>f</mi>
-              </mtd>
-            </mtr>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>g</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>h</mi>
-              </mtd>
-            </mtr>
-          </mtable>
-          <mo>)</mo>
-        </mrow>
-      </mtd>
-    </mtr>
-
-    <mtr>
-      <mtd columnalign="center">
-        <mn>0</mn>
-      </mtd>
-      <mtd columnalign="center">
-        <mrow>
-          <mo>(</mo>
-          <mtable>
-
-            <mtr>
-              <mtd columnalign="center">
-                <mi>i</mi>
-              </mtd>
-              <mtd columnalign="center">
-                <mi>j</mi>
-              </mtd>
-            </mtr>
-
-            <mtr>
-              <mtd columnalign="center">
-                <mi>k</mi>
-              </mtd>
-              <mtd columnalign="center">
-                <mi>l</mi>
-              </mtd>
-            </mtr>
-
-          </mtable>
-          <mo>)</mo>
-        </mrow>
-      </mtd>
-    </mtr>
-  </mtable>
-  <mo>)</mo>
-</mrow>
-
-</math>
-</td></tr>
-
-<tr>
-<td>24</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4605/=ex54.png" width="344" height="130" alt="TeXbook, 18.43" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mi>det</mi>
-  <mo>|</mo>
-  <mtable>
-
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>0</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-
-        <msub>
-          <mi>c</mi>
-          <mn>1</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-
-          <mn>2</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-
-          <mi>c</mi>
-          <mi>n</mi>
-        </msub>
-      </mtd>
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-
-          <mi>c</mi>
-          <mn>1</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-
-          <mn>2</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>3</mn>
-
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-
-          <mrow>
-            <mi>n</mi>
-            <mo>+</mo>
-            <mn>1</mn>
-          </mrow>
-        </msub>
-      </mtd>
-
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>2</mn>
-        </msub>
-      </mtd>
-
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>3</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-
-          <mi>c</mi>
-          <mn>4</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-      <mtd columnalign="center">
-
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mi>n</mi>
-            <mo>+</mo>
-            <mn>2</mn>
-          </mrow>
-
-        </msub>
-      </mtd>
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-      </mtd>
-      <mtd columnalign="center">
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-      </mtd>
-
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mi>n</mi>
-        </msub>
-      </mtd>
-
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mi>n</mi>
-            <mo>+</mo>
-            <mn>1</mn>
-
-          </mrow>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mi>n</mi>
-
-            <mo>+</mo>
-            <mn>2</mn>
-          </mrow>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mn>2</mn>
-            <mi>n</mi>
-          </mrow>
-
-        </msub>
-      </mtd>
-    </mtr>
-  </mtable>
-  <mo>|</mo>
-  <mo>&gt;</mo>
-  <mn>0</mn>
-</mrow>
-
-</math>
-</td></tr>
-
-<tr>
-<td>25</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4598/=ex6.png" width="25" height="14" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<msub>
-  <mi>y</mi>
-  <msub>
-    <mi>x</mi>
-
-    <mn>2</mn>
-  </msub>
-</msub>
-</math>
-</td></tr>
-
-<tr>
-<td>26</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4583/=ex7.png" width="90" height="23" alt="TeXbook, 16.4-16.5" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msubsup>
-
-    <mi>x</mi>
-    <mn>92</mn>
-    <mn>31415</mn>
-  </msubsup>
-  <mo>+</mo>
-  <mi>&pi;</mi>
-</mrow>
-
-</math>
-</td></tr>
-
-<tr>
-<td>27</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4584/=ex8.png" width="27" height="36" alt="TeXbook, 16.4-16.5" /></td>
-<td>
-<math display="block">
-<msubsup>
-  <mi>x</mi>
-  <msubsup>
-    <mi>y</mi>
-
-    <mi>b</mi>
-    <mi>a</mi>
-  </msubsup>
-  <msubsup>
-    <mi>z</mi>
-    <mi>c</mi>
-    <mi>d</mi>
-
-  </msubsup>
-</msubsup>
-</math>
-</td></tr>
-
-<tr>
-<td>28</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4585/=ex9.png" width="24" height="22" alt="TeXbook, 16.4-16.5" /></td>
-<td>
-<math display="block">
-<msubsup>
-  <mi>y</mi>
-  <mn>3</mn>
-
-  <mrow>
-    <mo>&prime;</mo>
-    <mo>&prime;</mo>
-    <mo>&prime;</mo>
-  </mrow>
-</msubsup>
-</math>
-
-</td></tr>
-</table>
-

CSS Content

-
  /* Table style */
-
-  body {
-   text-align: center;
-  }
-
-  table
-  {
-  border: solid thin;
-  border-collapse: collapse;
-  margin-left: auto;
-  margin-right: auto;
-  }
-
-  th
-  {
-  background-color: #ddf;
-  border: solid thin;
-  color: black;
-  padding: 5px;
-  }
-
-  td
-  {
-  border: solid thin;
-  padding: 5px;
-  text-align: center;
-  }
-
-  /* Asana */
-
-  .Asana ::-moz-math-stretchy {
-    font-family: Asana Math;
-  }
-
-  .Asana math, .Asana [mathvariant] {
-    font-family: Asana Math;
-    }
-
-  .Asana [mathvariant="sans-serif"],
-  .Asana [mathvariant="bold-sans-serif"],
-  .Asana [mathvariant="sans-serif-italic"],
-  .Asana [mathvariant="sans-serif-bold-italic"] {
-    font-family: sans-serif;
-  }
-
-  .Asana [mathvariant="monospace"] {
-    font-family: monospace;
-  }
-
-  /* MathJax */
-
-  .MathJax ::-moz-math-stretchy {
-    font-family: MathJax_Main;
-  }
-
-  .MathJax math, .MathJax [mathvariant] {
-    font-family: MathJax_Main;
-  }
-
-  .MathJax [mathvariant="sans-serif"],
-  .MathJax [mathvariant="bold-sans-serif"],
-  .MathJax [mathvariant="sans-serif-italic"]
-  .MathJax [mathvariant="sans-serif-bold-italic"] {
-    font-family: MathJax_SansSerif;
-  }
-
-  .MathJax [mathvariant="monospace"] {
-    font-family: MathJax_Typewriter;
-  }
-
-  .MathJax [mathvariant="fraktur"],
-  .MathJax [mathvariant="bold-fraktur"] {
-    font-family: MathJax_Fraktur;
-  }
-
-  .MathJax [mathvariant="script"],
-  .MathJax [mathvariant="bold-script"] {
-    font-family: MathJax_Script;
-  }
-
-  .MathJax [mathvariant="double-struck"] {
-    font-family: MathJax_AMS;
-  }
-
-  /* STIX */
-
-  .STIX ::-moz-math-stretchy {
-    font-family: STIXNonUnicode, STIXSizeOneSym, STIXSize1, STIXGeneral;
-  }
-
-  .STIX math, .STIX [mathvariant] {
-    font-family: STIXGeneral;
-  }
-
-  .STIX [mathvariant="sans-serif"],
-  .STIX [mathvariant="bold-sans-serif"],
-  .STIX [mathvariant="sans-serif-italic"],
-  .STIX [mathvariant="sans-serif-bold-italic"] {
-    font-family: sans-serif;
-  }
-
-  .STIX [mathvariant="monospace"] {
-    font-family: monospace;
-  }
-
-  /**** Experimental Open Type MATH fonts ****/
-
-  /* AsanaExp */
-  .AsanaExp math {
-    font-family: Asana Math;
-  }
-
-  /* Cambria */
-  .Cambria math {
-    font-family: Cambria Math;
-  }
-
-  /* TeXGyreBonum */
-  .TeXGyreBonum math {
-    font-family: TeX Gyre Bonum Math;
-  }
-
-  /* TeXGyrePagella */
-  .TeXGyrePagella math {
-    font-family: TeX Gyre Pagella Math;
-  }
-
-  /* TeXGyreTermes */
-  .TeXGyreTermes math {
-    font-family: TeX Gyre Termes Math;
-  }
-
-  /* LatinModern */
-  .LatinModern math {
-    font-family: Latin Modern Math;
-  }
-
-  /* Lucida */
-  .Lucida math {
-    font-family: Lucida Bright Math;
-  }
-
-  /* NeoEuler */
-  .NeoEuler math {
-    font-family: Neo Euler;
-  }
-
-  /* STIXWord */
-  .STIXWord math {
-    font-family: STIX Math;
-  }
-
-  /* XITS */
-  .XITS math {
-    font-family: XITS Math;
-  }
-
-  /* XITS RTL */
-  .XITSRTL math {
-    font-family: XITS Math;
-    direction: rtl;
-  }
-
-
-

JavaScript Content

-
  function updateMathFont()
-  {
-  var mathFont = document.getElementById("MathFont").value;
-  if (mathFont == "Default") {
-    document.body.removeAttribute("class");
-  } else {
-    document.body.setAttribute("class", mathFont);
-  }
-  }
-
-  function load()
-  {
-  document.getElementById("MathFont").
-  addEventListener("change", updateMathFont, false)
-  }
-
-  window.addEventListener("load", load, false);
-
-
-
-

Note: Afin d'obtenir le meilleur rendu pour les équations ci-dessous, assurez-vous d'avoir les polices mathématiques installées. Cette page contient également plus d'informations sur les polices expérimentales avec une table MATH, qui ne sont pas encore supportées ( voir aussi cette version utilisant les Web fonts).

-

 

-

{{ EmbedLiveSample('MathML_Torture_Test', '100%', '2500px') }}

-
-
-  
diff --git a/files/fr/mozilla/mobile/balise_meta_viewport/index.html b/files/fr/mozilla/mobile/balise_meta_viewport/index.html deleted file mode 100644 index d1914b3c92..0000000000 --- a/files/fr/mozilla/mobile/balise_meta_viewport/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: >- - Utiliser la balise meta viewport pour contrôler la mise en page sur les - navigateurs mobiles -slug: Mozilla/Mobile/Balise_meta_viewport -translation_of: Mozilla/Mobile/Viewport_meta_tag ---- -

Les nouvelles fonctionnalités de la version à venir de Firefox Mobile (Fennec), 1.1, ont amélioré le support pour la balise <meta name="viewport">. Les versions précédentes supportaient les propriétés width, height, et initial-scale de la balise viewport, mais étaient problématiques avec certains sites prévus pour les navigateurs iPhone et Android. Nous supportons désormais les mêmes propriétés que Safari Mobile, et nous avons également amélioré Fennec pour permettre au rendu d'être plus cohérent entre les différentes tailles et résolutions d'écrans.

- -

touch.facebook.com avant :

- -

05-11-fennec-meta-viewport-2.png

- -

touch.facebook.com après :

- -

05-11-fennec-meta-viewport-1.png

- -

Vous pouvez tester les changements par vous-même dans la dernière version de Fennec (1.1) et les dernières principales nightly builds pour Maemo, Windows, Mac, et Linux.

- -

Trame

- -

Les navigateurs mobiles tels que Fennec affichent les pages dans une « fenêtre » virtuelle (le viewport), souvent plus large que l'écran, afin d'éviter de devoir rétrécir chaque configuration de page dans une petite fenêtre (ce qui provoquerait un mauvais affichage de beaucoup de sites non-optimisés pour les mobiles). Les utilisateurs peuvent ensuite se déplacer et zoomer pour visualiser les différentes parties de la page.

- -

Safari Mobile a créé la « balise meta viewport » pour permettre aux développeurs web de contrôler la taille et l'échelle du viewport. Beaucoup d'autres navigateurs mobiles supportent désormais cette balise, bien qu'elle ne soit pas standardisée. La documentation de Apple explique plutôt bien comment les développeurs peuvent utiliser ce tag, mais nous avons du effectuer des recherches plus approfondies pour trouver la bonne implémentation pour Fennec. Par exemple, la documentation de Safari dit que le contenu de la balise est une « liste de valeurs séparées par des virgules », mais les navigateurs existants utilisent en fait n'importe quel mélange de virgules, points-virgules et d'espaces en tant que séparateurs.

- -

Apprenez-en plus sur les viewports dans les différents navigateurs mobiles dans l'article A Tale of Two Viewports (en) sur quirksmode.org.

- -

Les bases du viewport

- -

La plupart des sites optimisés pour les mobiles utilisent une balise comme la suivante :

- -
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- -

La propriété width contrôle la taille du viewport. Elle peut être réglée à une valeur précise de pixels, comme width=600, ou bien à la valeur spéciale device-width qui correspond à la largeur de l'écran en pixels CSS à l'échelle 100%. (Il existe les propriétés et valeurs height et device-height correspondantes, qui peuvent être utiles pour les pages contenant des éléments qui changent de taille ou de position en fonction de la hauteur du viewport.)

- -

La propriété initial-scale contrôle le niveau de zoom lorsque la page est chargée pour la première fois. Les propriétés maximum-scale, minimum-scale, et user-scalable contrôlent la manière dont les utilisateurs sont autorisés à zoomer ou dézoomer une page.

- -
-

Empêcher le zoom peut poser des problèmes d'accessibilité aux usagers avec une déficience visuelle.

-
- -

Un pixel n'est pas un pixel

- -

L'iPhone et beaucoup de téléphones Android possèdent des écrans 3 à 4 pouces (7 à 10 cm) avec 320 à 480 pixels (environ 160 dpi). Firefox pour Maemo s'exécute sur le Nokia N900, qui a la même taille mais entre 480 et 800 pixels (environ 240 dpi). À cause de cela, la précédente version de Fennec affichait beaucoup de pages un tiers plus petit (en taille réelle) que l'iPhone ou les systèmes Android. Cela causait des problèmes de lecture et d'utilisation sur beaucoup de sites optimisés pour le tactile. Peter-Paul Koch a écrit sur ce sujet dans son article A pixel is not a pixel is not a pixel (en).

- -

Fennec 1.1 pour Maemo utilisera 1,5 pixels matériels pour chaque « pixel » CSS, suivant ainsi le comportement des navigateurs pour Android basés sur WebKit. Cela signifie qu'une page à initial-scale=1 sera affichée pratiquement à la même taille réelle sur Fennec pour Maemo, Safari Mobile pour iPhone et le navigateur Android sur les téléphones HDPI et MDPI (en), ce qui coïncide avec la spécification CSS 2.1, qui dit :

- -
-

Si la résolution du périphérique d'affichage est vraiment différente de celle moyenne des ordinateurs, le navigateur doit remettre à l'échelle les valeurs des pixels. Il est recommandé que l'unité des pixels renvoie à l'unité la plus proche du celle référence correspondant au nombre total des pixels de l'appareil. Il est également recommandé que l'unité de référence soit de l'envergure visuelle d'un pixel sur un périphérique avec une résolution de 96 dpi à une distance d'un bras du lecteur.

-
- -

Pour les développeurs, cela signifie que 320 pixels doivent être en pleine largeur en mode portrait à une échelle 1 sur tous les périphériques de poche mentionnés ci-dessus, et qu'ils peuvent, en sachant cela, redimensionner leurs mises en page et images. Mais rappelez-vous que tous les périphériques mobiles ne sont pas de la même largeur ; vous devriez également vous assurer que vos pages fonctionnent correctement en mode paysage, et sur tous les appareils plus larges tels que l'iPad et les tablettes Android.

- -

Sur des écrans à 240 dpi, les pages à initial-scale=1 seront mis à échelle 1,5 par Fennec et Android WebKit. Leur texte sera lissé et mis à l'échelle en conséquence, mais leurs images pourraient ne pas tirer profit de la résolution plein-écran. Pour obtenir des images plus nettes sur ces écrans, les développeurs web peuvent prévoir les images - ou les mises en pages complètes - à une échelle 150% (ou 200% pour supporter les périphériques à 320 dpi comme les iPhone à écrans retina) puis réduire leur échelle par la suite à l'aide de propriétés du viewport ou de CSS.

- -

Le ratio par défaut dépend de la résolution. Lorsqu'elle est inférieure à 200 dpi, le ratio sera de 1,0. Entre 200 et 300 dpi, il s'élèvera à 1,5. Au delà, il vaut floor(densité / 150 dpi). Notez que le ratio par défaut est avéré uniquement lorsque l'échelle du viewport vaut 1. Sinon, la relation entre pixels CSS et pixels matériels dépend du niveau de zoom actuel.

- -

Largeur du viewport et largeur de l'écran

- -

Beaucoup de sites configurent leur viewport à "width=320, initial-scale=1" pour correspondre précisément à la configuration d'un iPhone en mode portrait. Comme mentionné ci-dessus, cela a provoqué des problèmes lors du rendu de ces sites sous Fennec 1.0, tout particulièrement en mode paysage. Pour empêcher cela, Fennec 1.1 étendra la largeur du viewport si nécessaire pour remplir l'écran à l'échelle définie. Cela suit le comportement d'Android et de Safari Mobile, et est surtout utile sur les périphériques à écrans larges comme l'iPad. (Allen Pike en fournit une bonne éxplication pour les développeurs dans son article Choosing a viewport for iPad sites.)

- -

Pour les pages qui définissent une largeur initiale ou maximale, cela signifie que la propriété width est en réalité interprétée en tant qu'une largeur minimale du viewport. Par exemple, si votre mise en page nécessite au moins 500 pixels de largeur, vous pouvez utiliser le code suivant. Lorsque l'écran est plus grand que 500 pixels, le navigateur étendra le viewport (au lieu de zoomer) jusqu'à la largeur de l'écran :

- -
<meta name="viewport" content="width=500, initial-scale=1">
- -

Fennec 1.1 supporte également minimum-scale, maximum-scale, and user-scalable, avec les défauts et les limites de Safari. Ces propriétés affectent l'échelle et la largeur initiales, en plus de limiter les changements dans le niveau de zoom.

- -

Les navigateurs mobiles gèrent les changements d'orientation différemment. Par exemple, Safari Mobile zoome souvent simplement sur la page lors du changement portrait vers paysage, au lieu d'afficher la page telle qu'elle aurait du l'être si elle avait été chargée à la base en paysage. Si les développeurs web souhaitent garder une certaine logique dans leurs paramètres de mise à l'échelle lors du changement d'orientation sur iPhone, ils doivent ajouter une valeur maximum-scale pour empêcher ce zoom, ce qui empêche parfois les utilisateurs de zoomer :

- -
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
- -

Cela n'est pas nécessaire sur Fennec : lorsque le périphérique change d'orientation, Fennec rafraîchit la taille du viewport, la mise en page, et les propriétés JavaScript/CSS telles que device-width, en fonction des nouvelles dimensions de la fenêtre.

- -

Tailles communes de viewport pour les périphériques mobiles et tablettes

- -

Si vous souhaitez connaître les largeurs de viewport des périphériques mobiles et tablettes les plus communs, il existe une liste complète des tailles de viewport sur mobiles et tablettes ici. Elle vous donnera des informations telles que la largeur du viewport en orientation portrait et paysage, ainsi que la taille physique de l'écran, le système d'exploitation et la résolution du périphérique.

- -

Standardisation

- -

Il y a une claire demande à propos de la balise meta viewport, puisqu'elle est supportée par la plupart des navigateurs mobiles populaires et utilisée par des milliers de sites web. Il serait bien d'avoir un standard réel pour le contrôle des propriétés du viewport sur les pages. D'après la spécification HTML5, les extensions à la balise meta doivent d'abord être enregistrées sur le wiki WHATWG avant d'entrer dans le processus de standardisation W3C. Si cela arrive, Mozilla s'assurera d'implémenter tout changement fait pendant la standardisation.

diff --git a/files/fr/mozilla/mobile/index.html b/files/fr/mozilla/mobile/index.html deleted file mode 100644 index 7a31704260..0000000000 --- a/files/fr/mozilla/mobile/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Mobile -slug: Mozilla/Mobile -translation_of: Mozilla/Mobile ---- -

Firefox OS

- -

Firefox OS est un système d'exploitation pour mobile Open Source qui utilise Linux et le moteur de rendu de Mozilla, Gecko pour fournir une interface utilisateur et un ensemble d'applications entièrement écrites en HTML, CSS et JavaScript.
-
- Apprenez à installer Firefox OS et à développer des applications pour ce dernier.

- -

Firefox pour Android

- -

Firefox pour Android est le navigateur web de Mozilla. Il a été récemment réécrit pour utiliser l'interface utilisateur native d'Android, le rendant ainsi plus rapide, plus léger et plus réactif. Il offre le support de puissantes APIs pour accéder aux capacités de l'appareil telles que l'appareil photo ou la pile de téléphonie.
-
- Découvrez comment aider à développer Firefox pour Android, comment utiliser ses APIs et comment créer des modules complémentaires pour mobile.

- -

Développement Web pour mobiles

- -

Les appareils mobiles ont des caractéristiques physiques très différentes de celles d'un ordinateur de bureau ou d'un ordinateur portable et nombre d'APIs utilisées pour interragir avec eux sont toujours en cours de standardisation.

- -

Apprenez à développer des sites web avec un bon rendu sur appareils mobiles et profitez des nouvelles possibilités qu'ils vous offrent. Apprenez à rendre vos sites web compatibles avec différents navigateurs web.

diff --git a/files/fr/mozilla/mode_presque_standard_de_gecko/index.html b/files/fr/mozilla/mode_presque_standard_de_gecko/index.html deleted file mode 100644 index 98b15c4dca..0000000000 --- a/files/fr/mozilla/mode_presque_standard_de_gecko/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Mode presque standard de Gecko -slug: Mozilla/Mode_presque_standard_de_Gecko -tags: - - Développement_Web - - Gecko - - Standards_du_Web -translation_of: Mozilla/Gecko_Almost_Standards_Mode ---- -


- Depuis Mozilla 1.0.1 et 1.1 beta, un nouveau mode de rendu appelé « presque standard » existe. Celui-ci s'ajoute aux modes « quirks » et « standard » qui existaient depuis un bout de temps.

- -

Le mode de rendu « presque standard » est exactement le même que le mode « standard » en tous points sauf un : le calcul de la hauteur pour les boites de ligne et certains des éléments en ligne dans celles-ci. Un cas courant de l’impact de cela est le placement des images à l'intérieur des cellules de tableaux. Cela signifie que les mises en page avec des découpages d'images dans des tableaux seront moins probablement mis en pièces dans les navigateurs basés sur Gecko à partir du moteur de rendu de Mozilla 1.0.1 ou supérieur, que ce soit en mode « quirks » ou « presque standard ». (Consultez l'article "Images, tableaux et décalages mystérieux" pour une explication détaillée du traitement de ces mises en pages particulières en mode « standard ».)

- -

En détaillant légèrement plus, voici grossièrement ce qui diffère dans le mode presque standard : les boites en ligne qui n’ont pas de texte hors espaces blancs comme enfant et qui n’ont pas de bordure, padding ou marges :

- - - -

À part cette différence, les mode « presque standard » et « standard » sont exactement pareils en termes de mise en page et autres comportements.

- -

Déclenchement du mode « presque standard »

- -

Les déclarations DOCTYPE qui déclencheront le mode « presque standard » sont celles qui contiennent :

- - - -

Un DOCTYPE complet contient un identificateur public et un identificateur système. En parlant de DOCTYPE, beaucoup se réfèreront à un DOCTYPE comme étant « avec URI » ou « sans URI ». L'URI est l'identificateur système. Par exemple, examinons le DOCTYPE qui suit :

- -
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-			"http://www.w3.org/TR/html4/loose.dtd">
- -

Les parties sont les suivantes :

- - - -

Par conséquent, tout DOCTYPE HTML 4.01 Transitional ou Frameset avec une URI (identificateur système) déclenchera le mode « presque standard », tout comme tout DOCTYPE XHTML 1.0 Transitional ou Frameset, avec ou sans URI. Les auteurs ne faisant pas partie d'IBM n'ont aucune raison de se préoccuper du DOCTYPE personnalisé qui déclenchera aussi le mode « presque standard ».

- -

Recommandations

- - - -

Aussi sur MDC

- - - - - -
-

Informations sur le document origninal

- - -
diff --git a/files/fr/mozilla/participer_au_projet_mozilla/index.html b/files/fr/mozilla/participer_au_projet_mozilla/index.html deleted file mode 100644 index 168b8847f6..0000000000 --- a/files/fr/mozilla/participer_au_projet_mozilla/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Participer au projet Mozilla -slug: Mozilla/Participer_au_projet_Mozilla -translation_of: Mozilla/Participating_in_the_Mozilla_project ---- -

Si vous avez envie d'aider à corriger des bugs et en général de travailler sur le code sur lequel repose la plateforme Mozilla, c'est ici que vous trouverez la documentation qui vous pointera dans la bonne direction.

- -

Documentation

Guide de développement de Mozilla
Astuces et guides de développement pour contribuer au code de Mozilla.
Code source de Mozilla
Informations sur l'obtention du code de Mozilla, par téléchargement ou contrôle de version, et sur la manière d'y faire incorporer votre code.
Documentation sur la compilation
Informations sur la compilation des différents projets Mozilla, dont Firefox et Thunderbird.
La plateforme Mozilla
Informations sur la plateforme Mozilla, toutes ses technologies et API, ainsi que la manière de les utiliser dans vos propres projets.
Documentation de Mozilla
Aidez-nous à créer et améliorer notre documentation pour Mozilla et le web ouvert.
Débogage
Astuces et recommandations à suivre lors du débogage du code de Mozilla.
Assurance qualité
Informations sur les tests et le suivi des bugs.
Localisation
Documentation sur la traduction des projets Mozilla, de la documentation, et d'autres informations dans de nombreuses langues.

Outils

Bugzilla
La base de données Bugzilla utilisée pour suivre les problèmes dans les projets Mozilla.
MXR
Parcourir et effectuer des recherches dans le référentiel du code source de Mozilla sur le web.
Bonsai
L'outil Bonsai permet de savoir qui a changé quel fichier du référentiel, et dans quel but.
Tinderbox
Tinderbox affiche l'état de l'arbre afin de savoir s'il est actuellement en état de compiler. À vérifier avant d'intégrer ou de récupérer du code, pour s'assurer de travailler avec un arbre fonctionnel.
Rapports de plantage
Informations sur les systèmes de rapports de plantages Socorro et Talkback.
Suivi des performances
Consultez des informations de performances à propos des projets Mozilla.
Forums de développement
Une liste de forums de discussion classés par sujet où vous pouvez parler de vos problèmes de développement liés à Mozilla.
-

  {{ languages( { "en": "en/Participating_in_the_Mozilla_project", "ja": "ja/Participating_in_the_Mozilla_project"} ) }}

diff --git a/files/fr/mozilla/preferences/index.html b/files/fr/mozilla/preferences/index.html deleted file mode 100644 index fe792aff80..0000000000 --- a/files/fr/mozilla/preferences/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Preferences -slug: Mozilla/Preferences -tags: - - TopicStub -translation_of: Mozilla/Preferences ---- -

Le système de préférences permet de stocker des données pour les applications Mozilla à l'aide d'un système d'appariement clé / valeur. Ces articles fournissent des informations sur l'utilisation du système de préférences.

- - - - - - - - -
-

Documentation

- -
-
Système de préférences
-
Une introduction à l'utilisation du système de préférences dans Mozilla.
-
XUL School: gestion des préférences
-
Le chapitre du tutoriel XUL School sur les préférences.
-
Référence de préférence Mozilla
-
Un guide de référence pour toutes les préférences de Mozilla; actuellement un travail en cours.
-
Un bref guide des préférences de Mozilla
-
Un guide d'introduction sur l'emplacement de stockage des préférences et d'autres informations utiles sur le système de préférences de base.
-
Utilisation des préférences du code d'application {{gecko_minversion_inline("6.0")}}
-
Firefox 6 Firefox 6 a introduit des fonctions statiques pour accéder efficacement aux préférences à partir du code d'application. Cette API n'est pas disponible pour les modules complémentaires, mais si vous travaillez sur une application Gecko, cette API est le moyen préféré d'accéder aux préférences.
-
Préférences de mise en réseau de Mozilla
-
Un guide des principales préférences liées au réseautage.
-
Préférences de Mozilla pour les super-geeks
-
Un guide des préférences avec lesquelles seuls les geeks d'élite devraient jouer.
-
- -

Afficher toutes les pages marquées avec "Préférences"...

-
-

Exemples

- -
-
Extraits de code
-
Extraits de code liés aux préférences.
-
Ajout de préférences à une extension
-
Comment ajouter des préférences à une extension existante.
-
- - - - -
diff --git a/files/fr/mozilla/projects/emscripten/index.html b/files/fr/mozilla/projects/emscripten/index.html deleted file mode 100644 index 842caea844..0000000000 --- a/files/fr/mozilla/projects/emscripten/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Emscripten -slug: Mozilla/Projects/Emscripten -translation_of: Mozilla/Projects/Emscripten ---- -

Emscripten est un compilateur depuis LLVM vers le JavaScript. Il prend du bytecode LLVM (p. ex. généré depuis le C/C++ en utilisant Clang, ou depuis un autre langage) et le compile en JavaScript, qui peut être exécuté sur le Web.

- -
-

Important : Cette page fournit une brève introduction à ce qu'est Emscripten. Pour démarrer avec Emscripten, allez sur le Wiki officiel d'Emscripten.

-
- -

Avec Emscripten, vous pouvez

- - - -

Emscripten rend le code natif disponible immédiatement sur le Web : qui est une plateforme basée sur les standards, a de nombreuses implémentations indépendentes mais compatibles et qui s'exécute partout, depuis les PCs jusqu'aux iPads.

- -

Avec Emscripten, les développeurs C/C++ n'ont pas à supporter le coût élevé d'un portage manuel vers le JavaScript — il n'ont même pas à l'apprendre. Les développeurs Web en bénéficient également, puisqu'ils peuvent utilser dans leurs sites Web, les quelques milliers d'utilitaires et bibliothèques nativent qui existent déjà.

- -

À peu près n'importe quelle base de code portable, en C ou C++, peut être compilée en JavaScript à l'aide d'Emscripten, depuis les jeux haute performance qui doivent faire du rendu graphique, jouer du son et charger et traiter des fichiers, jusqu'aux cadriciels d'applications tels que Qt.

- -

Emscripten génère du code rapide — sa sortie par défaut est asm.js, un sous-ensemble hautement optimizable du JavaScript qui s'exécute à une vitesse proche de celle du code natif, dans beaucoup de cas.

- -
-

Note: Intéressant n'est-ce pas ? Lisez-en plus à propos d'Emscripten et essayez quelques démos, puis commencez à l'utiliser.

-
- -

Autres articles intéressants sur MDN

- - diff --git a/files/fr/mozilla/projects/index.html b/files/fr/mozilla/projects/index.html deleted file mode 100644 index 408359ca13..0000000000 --- a/files/fr/mozilla/projects/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Projects -slug: Mozilla/Projects -tags: - - Mozilla - - NeedsContent - - Projects - - TopicStub -translation_of: Mozilla/Projects ---- -

{{ draft() }}

- -

Mozilla a un certain nombre de projets autres que Firefox lui-même. Beaucoup d'entre eux sont des composants de Firefox ou sont des outils utilisés pour créer Firefox, mais peuvent également être utilisés par d'autres projets. Vous trouverez ici des liens vers de la documentation sur ces projets.

- -

{{ LandingPageListSubpages() }}

diff --git a/files/fr/mozilla/projects/rhino/examples/index.html b/files/fr/mozilla/projects/rhino/examples/index.html deleted file mode 100644 index 2347013026..0000000000 --- a/files/fr/mozilla/projects/rhino/examples/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Rhino Examples -slug: Mozilla/Projects/Rhino/Examples -translation_of: Mozilla/Projects/Rhino/Examples ---- -

Examples have been provided that show how to control the JavaScript engine and to implement scriptable host objects. All the examples are in the git tree at mozilla/js/rhino/examples.

-

Scripts Simple

-

Le script unique.js permet d'écrirer une seul ligne depuis un fichier.

-

Le script liveConnect.js montre un usage simple de LiveConnect (connectivité Java-vers-JavaScript).

-

Le script jsdoc.js est un analogue en JavaScript de la javadoc. Il permet un usage régulier des "regular expressions".

-

Le script checkParam.js est un outil utile pour vérifier les tags @param dans les commentaires documentation Java qui corresponde au paramètres dans la méthode  Java correspondante.

-

The enum.js script is a good example of using a JavaAdapter to implement a Java interface using a JavaScript object.

-

The NervousText.js script is a JavaScript implementation of the famous NervousText applet using JavaScript compiled to Java classes using jsc. It can be run in the HTML page NervousText.html.

-

Controlling the JavaScript Engine

-

The RunScript class

-

RunScript.java is a simple program that executes a script from the command line.

-

The Control class

-

Control.java is a program that executes a simple script and then manipulates the result.

-

JavaScript Shell

-

Shell.java is a program that executes JavaScript programs; it is a simplified version of the shell in the tools package. The programs may be specified as files on the command line or by typing interactively while the shell is running.

-

PrimitiveWrapFactory

-

PrimitiveWrapFactory.java is an example of a WrapFactory that can be used to control the wrapping behavior of the Rhino engine on calls to Java methods.

-

Multithreaded Script Execution

-

DynamicScopes.java is a program that creates a single global scope object and then shares it across multiple threads. Sharing the global scope allows both information to be shared across threads, and amortizes the cost of Context.initStandardObjects by only performing that expensive operation once.

-

Implementing Host Objects

-

First check out the tutorial if you haven't already.

-

The Foo class - Extending ScriptableObject

-

Foo.java is a simple JavaScript host object that includes a property with an associated action and a variable argument method.

-

The Matrix class - Implementing Scriptable

-

Matrix.java provides a simple multidimensional array by implementing the Scriptable interface.

-

The File class - An advanced example

-

File.java extends ScriptableObject to provide a means of reading and writing files from JavaScript. A more involved example of host object definition.

diff --git a/files/fr/mozilla/projects/rhino/index.html b/files/fr/mozilla/projects/rhino/index.html deleted file mode 100644 index 1618f7abb1..0000000000 --- a/files/fr/mozilla/projects/rhino/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Rhino -slug: Mozilla/Projects/Rhino -tags: - - JavaScript - - Mozilla - - NeedsUpdate - - Rhino -translation_of: Mozilla/Projects/Rhino ---- -

Image:rhino.jpg

- -

Rhino est un moteur JavaScript open-source entièrement écrit en  Java. Il est généralement intégré dans des applications Java afin de permettre l'utilisation de scripts aux utilisateurs finaux. Il est intégré dans J2SE 6 en tant que moteur JavaScript par défaut.

- -

Télécharger Rhino

- -

Comment obtenir les sources et exécutables

- -

La documentation de Rhino

- -

Des informations relatives à Rhino pour écrire des scripts ou embarquer le moteur dans des applications Java.

- -

L'aide de Rhino

- -

Différentes ressources utiles si vous êtes bloqué.

diff --git a/files/fr/mozilla/projects/talos/index.html b/files/fr/mozilla/projects/talos/index.html deleted file mode 100644 index f42f2c3303..0000000000 --- a/files/fr/mozilla/projects/talos/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Talos -slug: Mozilla/Projects/Talos -translation_of: Mozilla/Projects/Talos ---- -

Talos est un framework de test de performance python qui est inusable sur Windows, Mac et Linux. Talos est notre framework de test de performance polyvalente que nous utilisons à Mozilla. Il a été créé pour servir comme coureur de test pour le test de performance existant que Mozilla courait en 2007 en plus de fournir un framework extensible pour des nouveaux tests comme ils étaient en cours de création.

- -

S'il te plait regarde Talos's home page pour plus de détails.

diff --git a/files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html b/files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html deleted file mode 100644 index a97de22c9b..0000000000 --- a/files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Localisation Thunderbird -slug: Mozilla/Projects/Thunderbird/Thunderbird_Localisation -translation_of: Mozilla/Projects/Thunderbird/Thunderbird_Localization ---- -

Cette page est destinée aux localisateurs actuels et futurs de Thunderbird, le client de messagerie électronique et usenet de Mozilla Messaging. Il couvre de nombreux aspects qu'un localisateur de Thunderbird doit connaître comme les outils nécessaires, comment obtenir des informations sur les événements pertinents pour la localisation et divers autres sujets d'intérêt.

- -

Création d'une localisation Thunderbird

- -

Création d'une nouvelle localisation (Mercurial) - Cet article décrit comment créer une nouvelle localisation pour Thunderbird.

- -

À propos des répertoires et des branches

- -

Il y a 3 référentiels actifs pour le développement de Thunderbird. Le travail de développement de Thunderbird est fusionné d'une branche à l'autre toutes les six semaines.

- - - -

La plupart des localisations travailleront sur comm-aurora. Ce référentiel ou branche est stable en ce qui concerne les chaînes pour chaque période de six semaines. Terminer le travail ici signifie qu'il est prêt pour la première version bêta, et vous n'aurez pas besoin d'accéder à la branche bêta. Votre travail sera également reporté automatiquement.

- -

Exigences en matière de localisation

- -

Il n'y a pas de restrictions significatives pour l'évolution des localisations. Cependant, nous devons œuvrer de concert pour fournir aux utilisateurs de Thunderbird des moteurs de recherche qu'ils pourront utiliser pour trouver le bon équilibre avec le jeu d'options appropriées. Pour de plus amples informations consultez cette page .

- -

Tableau de bord de localisation

- -

Le tableau de bord de localisation pour Thunderbird donne aux localisateurs un aperçu précis de l'état actuel de leur tâche. Des renseignements détaillés sont disponibles sur la page du tableau de bord l10n .

- -

Une localisation sera ajoutée au tableau de bord l10n sur demande, lorsqu'elle aura atteint un niveau d'achèvement minimal de 80% - comme le montre la sortie de comparer-langues. Pour demander l'ajout de votre langue au tableau de bord, déposez un bogue dans le produit Thunderbird ou le composant Build Config.

- -

Obtenir des informations pertinentes pour l10n

- -

Groupes de discussion & listes de diffusion

- -

Les localisateurs de Thunderbird devraient lire les groupes de discussion sur la localisation (mozilla.dev.l10n.announce mozilla.dev.l10n) pour se tenir au courant des articles spécifiques à Thunderbird et ceux d'ordre général relatifs à l10n qui les intéressent. Ils sont également encouragés à s'intéresser au groupe de discussion sur le développement de Thunderbird. (mozilla.dev.apps.thunderbird) pour être informés des dernières nouveautés.

- -

Ces groupes de discussion sont également accessibles via les listes de diffusion dev-l10n-announce@lists.mozilla.org, dev-l10n@lists.mozilla.org (liste de diffusion de localisation) ou dev-apps-thunderbird@lists.mozilla.org (liste de diffusion du développement de Thunderbird), qui reflètent les groupes de discussion mentionnés ci-dessus. Vous pouvez vous abonner ou vous désabonner à ces listes de diffusion via l'interface web à l'adresse suivante lists.mozilla.org.

- -

Bugzilla

- -

Les localisateurs devraient surveiller l'adresse électronique thunderbird@localization.bugs (ou de son alias :tb-l10n) pour se tenir au courant des bugs qui pourraient les affecter sur Thunderbird. Ceci peut être réalisé en ajoutant cette adresse à la "Surveillance des utilisateurs". de vos préférences e-mail dans bugzilla.

- -

Quelques liens utiles

- - - -

Niveaux des langues

- -

Les niveaux des langues restituent les langues pour lesquelles nous avons besoin d'avoir un bon développement pour la version. Il y a 10 langues dans le niveau 1, qui sont les plus importantes pour Thunderbird, en raison de leur nombre d'utilisateurs ou de leur potentiel de croissance.

- -

Ces langues sont traitées comme des entités de première classe, aussi importantes que en-US, c'est-à-dire que toute langue de niveau 1 qui ne répond pas aux critères peut bloquer une version finale de Thunderbird.

- -

Niveau 1

- -

Les langues suivantes sont en P1 (priorité 1) par prépondérence :

- -
* de             -  allemand
-* fr             -  français
-* ja, ja-JP-mac  -  japonais
-* en-GB          -  anglais britannique
-* es-ES          -  espagnol (continent européen)
-* it             -  italien
-* pl             -  polonais
-* ru             -  russe
-* nl             -  hollandais
-* pt-BR          -  portugais brésilien
-
- -

Niveau 2

- -

Toutes les autres langues supportées sont dans la catégorie de niveau 2.

diff --git a/files/fr/mozilla/rejoindre/index.html b/files/fr/mozilla/rejoindre/index.html deleted file mode 100644 index ab23ca6481..0000000000 --- a/files/fr/mozilla/rejoindre/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: '{Re}Joindre Mozilla' -slug: Mozilla/Rejoindre -tags: - - Mozilla -translation_of: Mozilla/Connect ---- -
-

Inspirez, collaborez, mettez en œuvre vos compétences afin de faire du Web « la » plateforme des appareils connectés.

-
- - -
-
-
- -
- -
- -
- -
- -
-
- -
-

Entrer en contact avec Mozilla

- -

Chez Mozilla, nous croyons que les développeurs contribuent au futur en créant des services de qualité et des applications destinées au grand public. Notre but est de les aider en proposant des technologies standardisées et ouvertes. Afin d'aider les développeurs et leur permettre de former des relations sur le long terme, nous avons créé le Mozilla Developer Program (MDP) en plus de la documentation présente sur MDN.
-
- Nous offrons de l'aide à travers les questions-réponses (Q&R) sur Stack Overflow, pour aider à résoudre des problèmes technique spécifiques ou des défis que vous pouvez rencontrer. Nous avons également une newsletter pour vous tenir informé des derniers événements autour du Web et des applications web.
-
- Nos idées sont nombreuses pour agrandir le Mozilla Developer Program et vous impliquer autant que nous le sommes ! Pour participer : suivez les tags sur Stack Overflow, abonnez vous au blog Hacks, et créez un compte MDN !

-
- -
-
-

Q&R sur Stack OverflowVoir toutes les Q&R...

- -

Nous avons des Q&R pour discuter des défis et problèmes liés au développement, plus particulièrement autour de Firefox OS et du Web sur mobile. Elles sont actuellement disponibles sur Stack Overflow à cette adresse http://stackoverflow.com/r/mozilla.

- - -
Stack form
- -

Dernières Questions-Réponses

-
- -
 
-
- -

Développeurs lors d'un événement Firefox OS à Madrid

- - -
- -

 

diff --git a/files/fr/mozilla/rust/index.html b/files/fr/mozilla/rust/index.html deleted file mode 100644 index 7ec000ae43..0000000000 --- a/files/fr/mozilla/rust/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Le langage de programmation Rust -slug: Mozilla/Rust -tags: - - Développement Web - - Langages - - Mozilla - - Parallélisme - - rust - - systèmes -translation_of: Mozilla/Rust ---- -

Rust logoRust est un nouveau langage de programmation open source créé par Mozilla et une communauté de volontaires, conçu pour aider les développeurs à concevoir des applications ultra-rapides et sécurisées qui utilisent avantageusement les puissantes fonctionnalités offertes par les processeurs multi-cœurs modernes. Il permet d'éviter les erreurs de segmentation et assure la sécurité des threads, le tout avec une syntaxe facile à assimiler.

- -

En outre, Rust offre des abstractions à coût zéro, déplacement des sémantiques, garanti la sécurité de la mémoire, des threads sans concurence des données, trait-based generics, pattern matching, inférence de type et des liaisons C efficace, avec un minimum de taille d'exécution.

- -

Pour en apprendre plus sur Rust, vous pouvez :

- - - -

Rust et le futur de la programmation des systèmes

- -

{{EmbedYouTube("8EPsnf_ZYU0")}}

- -

Débloquez le pouvoir du parallélisme avec Rust

- -

{{EmbedYouTube("cNeIOt8ZdAY")}}

- -

Rust pour les développeurs web

- -

{{EmbedYouTube("FfoXFnzZbBM")}}

- -

Programmation des systèmes sécurisée avec Rust

- -

{{EmbedYouTube("P3sfNGtpuxc")}}

- -

Agrandir la communauté Rust

- -

{{EmbedYouTube("duv0tuPAnO0")}}

- -

Mettre Rust en production chez Mozilla

- -

{{EmbedYouTube("2RhbYpgVpg0")}}

diff --git a/files/fr/mozilla/security/index.html b/files/fr/mozilla/security/index.html deleted file mode 100644 index 99a342c74c..0000000000 --- a/files/fr/mozilla/security/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Browser security -slug: Mozilla/Security -tags: - - Accueil - - Firefox - - Mozilla - - Sécurité -translation_of: Mozilla/Security ---- -

Un aspect important du développement de code pour n'importe quel navigateur, y compris Firefox, ainsi que n'importe quel projet orienté Web, est sa sécurité. Ces articles offrent d'importants guides et références pour asurer que le code que vous écrivez est sécurisé, y compris aussi bien les recommandations en matière de design que de guides de testing.

- -

{{LandingPageListSubpages}}

- - diff --git a/files/fr/mozilla/tech/index.html b/files/fr/mozilla/tech/index.html deleted file mode 100644 index c624ad5a70..0000000000 --- a/files/fr/mozilla/tech/index.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Technologies de Mozilla -slug: Mozilla/Tech -tags: - - Mozilla - - Reference - - Régionalisation - - XUL -translation_of: Mozilla/Tech ---- -

Mozilla a plusieurs technologies utilisées en composantes de ses projets. Celles-ci sont documentées ici.

- -

{{LandingPageListSubpages}}

diff --git a/files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html b/files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html deleted file mode 100644 index bdbde7f35c..0000000000 --- a/files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Visualisation et recherche du code source Mozilla en ligne -slug: Mozilla/Tech/Visualisation_et_recherche_du_code_source_Mozilla_en_ligne -tags: - - Developper avec Mozilla - - Mozilla Code source -translation_of: Mozilla/Tech/Viewing_and_searching_Mozilla_source_code_online ---- -

Le code source pour tous les projets de Mozilla hébergés dans le dépôt Mercurial et CVS peut être recherché et consulté en ligne à l'aide de DXR. C'est une variante renforcée et améliorée de l'outil original Linux Cross Reference.

- -

Ne téléchargez pas le code source en parcourant toutes les pages du site DXR ; téléchargez plutôt une archive ou utilisez Mercurial ou CVS à la place.
-
- DXR indexe plusieurs branches CVS et modules; la racine MXR la plus intéressant pour un contributeur Mozilla est
comm-central, qui contient le dernier code source pour la plupart des produits Mozilla (y compris Firefox, Thunderbird, SeaMonkey, Sunbird / Lightning Chatzilla, DOM Inspector et Venkman JavaScript debugger) et est fréquemment mise à jour.

- -

Certaines autres racines d'intérêt MXR sont:

- - - -

Mozilla Source Code Directory Structure (page en Anglais) contient une courte description du code dans chaque répertoire source de l'arbre.

- -

Ressources

- -

CVS Tags

diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html deleted file mode 100644 index 35e8dd51a0..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html +++ /dev/null @@ -1,504 +0,0 @@ ---- -title: Un aperçu de XPCOM -slug: Mozilla/Tech/XPCOM/Guide/Creating_components/An_Overview_of_XPCOM -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components/An_Overview_of_XPCOM ---- -

-

« PrécédentSuivant »

-

- -

Cette section est présentée comme un tutoriel sur la création de composants XPCOM, mais elle couvre tous les principaux aspects, les concepts et la terminologie du modèle de composant XPCOM tout au long de sa conception.

- -

Ce chapitre fournit un rapide tour d'horizons sur XPCOM - une introduction aux concepts de base, des technologies XPCOM et du développement de composants. Les paragraphes de ce chapitre présentent des concepts de haut niveaux, de sorte que nous puissions les approfondir et de les utiliser avec plus de familiarité dans le tutoriel lui-même, qui décrit la création d'un composant Mozilla appelé WebLock .

- -

La solution XPCOM

- -

Le Cross Platform Component Object Module (XPCOM) est un cadre qui permet aux développeurs de fractionner un projets monolithiques en morceaux modulaires. Ces morceaux, appelés composants , sont ensuite assemblés de nouveau ensemble à l'exécution.

- -

Le but de XPCOM est de mettre au point les différentes parties de logiciel en les construisant indépendamment les uns des autres. Afin de permettre l'interopérabilité entre les composants d'une application, XPCOM sépare la mise en œuvre d'un composant de l'Interface . Mais XPCOM fournit également plusieurs outils et bibliothèques qui permettent le chargement et la manipulation de ces composants, des services qui aident le développeur à écrire du code modulaire multi-plateforme, et le soutien des versions, de sorte que les composants peuvent être remplacés ou mis à niveau sans casser ou avoir à recréer l'application . En utilisant XPCOM, les développeurs créent des composants qui peuvent être réutilisés dans différentes applications ou qui peut être remplacé pour changer la fonctionnalité des applications existantes.

- -

XPCOM soutient non seulement le développement de composant logiciels, il fournit également une grande partie des fonctionnalité de la plate-forme de développement fournit, tels que:

- - - -

Nous allons décrire les éléments ci-dessus en détail dans les chapitres à venir, mais pour l'instant, il peut être utile de penser à XPCOM en tant que plate-forme pour le développement de composants , dans lequel des caractéristiques telles que celles énumérées ci-dessus sont fournis.

- -

Gecko

- -

Bien qu'il soit à certains égards structurellement similaires à Microsoft COM, XPCOM est conçu pour être utilisé principalement au niveau de l'application. L'utilisation la plus importante de XPCOM est dans Gecko , open source, conforme aux standards, navigateur Web intégrable et boîte à outils pour la création de navigateurs Web et autres applications.

- -

XPCOM est le moyen d'accéder aux fonctionnalités de la bibliothèque Gecko pour l'utilisation ou l'extension de Gecko. Ce livre met l'accent sur l'extension mais les explications de ce livre seront important pour le développeurs d'application Gecko embarquées.

- -

Gecko est utilisé dans de nombreuses applications internet, la plupart des navigateurs et notamment Mozilla Firefox.

- -

Composants

- -

XPCOM vous permet de briser les gros projets logiciels en petits morceaux connus en tant que composants. Ils sont généralement contenus dans des bibliothèques binaires réutilisables (DLL sur Windows, DSO sur Unix), qui peuvent comprendre un ou plusieurs composants. Lorsque deux ou plusieurs composants connexes sont regroupées dans une bibliothèque binaire, la bibliothèque est appelée module.

- -

Modulaire, la programmation à base de composants logiciels rend plus facile le développement et la maintenance:

- - - - - - - - - - - - - - - - - - - - - - - - -
AvantageDescription
RéutilisationCode modulaire peut être réutilisé dans d'autres applications et d'autres contextes.
Mises à jourVous pouvez mettre à jour les composants sans avoir à recompiler l'application entière.
PerformanceLorsque le code est modulaire, les modules qui ne sont pas nécessaires immédiatement peuvent être chargées partiellement, ou pas chargés du tout, ce qui peut améliorer les performances de votre application.
MaintenanceMême lorsque un composant est obsolète, la conception de votre application modulaire vous permet  plus facilement de maintenir les parties de l'application que vous intéressent.
- -

Mozilla a plus de quatre millions de lignes de code, et pas une seule personne ne comprend l'ensemble du code source. La meilleure façon d'aborder un projet de cette taille est de le diviser en modules. La bibliothèque de réseau, par exemple, est constitué de composants pour chacun des protocoles, HTTP, FTP, et d'autres, qui sont groupés et liés dans une seule bibliothèque. Cette bibliothèque est le module de gestion de réseau, également appelé "necko."

- -

Mais il n'est pas toujours souhaitable de diviser les choses. Le composant HTTP de Gecko n'expose pas les classes privés qu'elle utilise comme des composants séparés. Les objets interne au composante reste interne, et ne soit pas manipulables par XPCOM.

- -

Interfaces

- -

Comment segmenter du code? L'idée de base est d'identifier les segments fonctionnellement liés et comprendre comment ils communiquent entre eux. Les canaux de communication entre les différentes composants forment ces limites, et lorsque ces limites sont formalisées on parle d'interfaces .

- -

Les interfaces ne sont pas une idée nouvelle en programmation. Nous avons tous l'habitude interfacer depuis notre premier programme "HelloWorld", où est l'interface entre le code que nous avons écrit - le code d'application - et le code d'impression. Le code d'application utilisé une interface à partir d'une bibliothèque, stdio , et imprime la texte "hello world" sur l'écran. La différence ici est que l'application "HelloWorld" dans XPCOM trouve cette fonctionnalité d'affichage à l'exécution et n'a pas à connaître stdio quand il est compilé.

- -

Interfaces permettent aux développeurs d' encapsuler la mise en œuvre et de fonctionnement interne de leur logiciel, et permettent aux clients d'ignorer la façon dont les choses sont faites, il suffit d'utiliser ce logiciel.

- -
-

Interfaces et programmation par contrat

- -

Une interface forme un accord contractuel entre les composants et les clients. Il n'y a pas de code qui oblige ces accords, mais les ignorer peut être fatal. Dans la programmation à base de composants, un composant garantit que les interfaces qu'il fournit seront immuable - qu'ils vont offrir le même accès aux mêmes méthodes à travers différentes versions du composante - l'établissement d'un contrat avec les logiciels clients qui l'utilisent. À cet égard, la programmation basé sur l'interface est souvent désigné comme la programmation par contrat .

-
- -

Interfaces et Encapsulation

- -

Aux limites des composants, l'abstraction est crucial pour la maintenabilité du logiciel et la réutilisabilité. Considérons, par exemple, une classe mal encapsulé. L'utilisation d'une méthode d'initialisation publique librement disponibles, comme l'exemple ci-dessous, peut causer des problèmes.

- -

SomeClass Class Initialization

- -
class SomeClass{
-  public:
-    // Constructeur
-    SomeClass();
-    // Destructeur virtuel
-    virtual ~SomeClass();
-    // method init
-    void Init();
-    void DoSomethingUseful();
-};
-
- -

Pour que ce système fonctionne correctement, l'utilisateur de cette classe doit porter une attention particulière à tout ce que le créateur de cette classe a établi. C'est l'accord contractuel avec cette classe non encapsulé: un ensemble de règles qui définissent quand chaque méthode peut être appelée et ce qu'elle est censé faire. Une règle peut spécifier que DoSomethingUseful ne peut être appelé après un appel à init () . La méthode DoSomethingUseful peut veiller à ce que la condition soit satisfaite.

- -

En plus du code correctement commenté pour les règles d'utilisation de Init() , le développeur peut prendre quelques mesures pour que ce contrat soit plus clair. Tout d'abord, le constructeur d'un objet peut être encapsulé, et une classe virtuelle DoSomethingUseful peut être mis à disposition. De cette façon, le constructeur et l'initialisation peuvent être complètement cachés des utilisateurs de la classe. Dans cette situation, "semi-encapsulé", la seule partie de la classe qui est exposé est une liste bien définie des méthodes appelables (i.e, l'interface). Une fois que la classe est encapsulé, la seule interface que le client verra est la suivante:

- -

Encapsulation de SomeInterface

- -
class SomeInterface{
-  public:
-    virtual void DoSomethingUseful() = 0;
-};
-
- -

La mise en œuvre peut alors dériver de cette classe par l'utilisation de la méthode virtuelle. Les utilisateurs de ce code peuvent ensuite créer l'objet (voir utilisation ) et encapsuler aussi la mise en œuvre. Avec XPCOM, les usagers sont ignorant du fonctionnement du composants et comptent sur ​​l'interface pour donner accès aux fonctionnalités nécessaires.

- -

L'interface de base nsISupports

- -

Les deux fondamentaux de la programmation composant sont basé sur component lifetime(durée de vie), appelé aussi object ownership, et interface querying, sois l'identification des interfaces d'un composant prises en charge lors de l'exécution. Ce chapitre présente la mère de toutes les interfaces XPCOM - nsISupports , qui fournit les solutions à ces deux problèmes pour les développeurs XPCOM.

- -

Object Ownership

- -

Avec XPCOM, parce que les composants peuvent mettre en œuvre un certain nombre d'interfaces, ils doivent être référencés . Quand un composant est créé, un entier interne au composant est incrémenté - connu comme compteur de référence. Au cours de la vie du composant, le compteur de référence augmente et diminue. Lorsque le composant n'a plus d'utilité, le compteur de références atteint zéro, et le composant est détruit.

- -

Lorsque les clients utilisent des interfaces de façon responsable, cela peut être un processus très simple. XPCOM dispose d'outils pour rendre encore cela plus facile. Il peut soulever des problèmes réels de maintenance lorsque, par exemple, un client utilise une interface et oublie de decrémenter le nombre de références. Lorsque cela se produit, les interfaces ne peuvent jamais être libérés et provoqueront des fuites de mémoire. Le système de comptage de référence est, comme beaucoup de choses dans XPCOM, un contrat entre les clients et les implémentations. Il fonctionne quand les utilisateur le respecte, mais quand ils ne le font pas, les choses peuvent aller mal. C'est le rôle de la fonction qui crée le pointeur d'interface pour ajouter la référence initiale, ou owning reference, d'éviter ces problemes.

- -
-

Pointeurs avec XPCOM

- -

Dans XPCOM, les pointeurs se réfèrent à l'interface pointeurs. La différence est subtile, puisque les pointeurs d'interface et les pointeurs réguliers sont tout simplement deux adresses dans la mémoire. Mais un pointeur d'interface est connu pour mettre en œuvre l'interface de base nsISupports, et peut donc être utilisé pour appeler des méthodes telles que AddRef, Release, ou QueryInterface.

-
- -

nsISupports, illustré ci-dessous, fournit les fonctionnalités de base pour faire face à la création d'interface et de comptage de référence. Les membres de cette interface, QueryInterface, AddRef et Release , fournissent les moyens de base pour obtenir la bonne interface d'un objet, incrémenter le compteur de référence, et de libérer les objets une fois qu'ils ne sont plus utilisés.

- -

L'interface nsISupports

- -
class Sample: public nsISupports{
-  private:
-    nsrefcnt mRefCnt;
-  public:
-    Sample();
-    virtual ~Sample();
-    NS_IMETHOD QueryInterface(const nsIID &aIID, void **aResult);
-    NS_IMETHOD_(nsrefcnt) AddRef(void);
-    NS_IMETHOD_(nsrefcnt) Release(void);
-};
-
- -

Les différents types utilisés de l'l'interface sont décrites dans la section Types XPCOM. La mise en œuvre complète de nsISupports est indiquée ci-dessous. Voir Une implémentation de référence de QueryInterface pour des informations détaillées.

- -

Mise en œuvre de l'interface nsISupports

- -
// Initialiser le compteur de référence à 0
-Sample::Sample() : mRefCnt(0){
-}
-Sample::~Sample(){
-}
-// la mise en œuvre générique de QI
-NS_IMETHODIMP Sample::QueryInterface(const nsIID &aIID,
-                                  void **aResult){
-  if (!aResult) {
-    return NS_ERROR_NULL_POINTER;
-  }
-  *aResult = NULL;
-  if (aIID.Equals(kISupportsIID)) {
-    *aResult = (void *) this;
-  }
-  if (!*aResult) {
-    return NS_ERROR_NO_INTERFACE;
-  }
-  // ajoute une reference
-  AddRef();
-  return NS_OK;
-}
-NS_IMETHODIMP_(nsrefcnt) Sample::AddRef(){
-  return ++mRefCnt;
-}
-NS_IMETHODIMP_(nsrefcnt) Sample::Release(){
-  if (--mRefCnt == 0) {
-    delete this;
-    return 0;
-  }
-  // optional: retourn le nombre de reference
-  return mRefCnt;
-}
-
- -

Object Interface Discovery

- -

Héritage est un autre sujet très important dans la programmation orientée objet. L'héritage est le moyen par lequel une classe est dérivée d'une autre. Quand une classe hérite d'une autre classe, la classe hérite peut remplacer les comportements par défaut de la classe de base sans avoir à copier tout le code de cette classe et créer ainsi une classe plus spécifique, comme dans l'exemple suivant:

- -

Héritage de classe simple

- -
class Shape{
-  private:
-    int m_x;
-    int m_y;
-  public:
-    virtual void Draw() = 0;
-    Shape();
-    virtual ~Shape();
-};
-class Circle : public Shape{
-  private:
-    int m_radius;
-  public:
-    virtual Draw();
-    Circle(int x, int y, int radius);
-    virtual ~Circle();
-};
-
- -

Circle(cercle) est une classe dérivée de Shape(forme) . Un cercle est une forme , en d'autres termes, mais une forme n'est pas nécessairement un cercle . Dans ce cas, forme est la classe de base et cercle est une sous-classe de forme .

- -

Avec XPCOM, toutes les classes dérivent de l'interface nsISupports, de sorte que tous les objets héritent de nsISupports. Avec Héritage Class simple , par exemple, vous êtes en mesure de savoir si la forme est un cercle et dans ce cas de l'utiliser comme un cercle. Ces à quoi la caractéristique QueryInterface de nsISupports est destinée: elle permet aux utilisateurs de trouver et d'accéder aux différentes interfaces en fonction de leurs besoins.

- -

En C++, vous pouvez utiliser une fonctionnalité assez avancé connu sous le nom de dynamic_cast<> , qui lève une exception si l'objet forme n'est un cercle . Mais les exceptions levants RTTI(Run-time type information) ne sont pas une option en raison de la lourdeur et de la compatibilité sur de nombreuses plates-formes, XPCOM fait les choses différemment.

- -
-

Exceptions avec XPCOM

- -

Les exceptions C++ ne sont pas pris en charge directement par XPCOM. Les exceptions doivent être manipulés dans le composant XPCOM, avant de franchir les frontières de l'interface. Toutes les méthodes de l'interface doivent retourner une valeur d'erreur nsresult (voir référence de l'API XPCOM pour une liste de ces codes d'erreur). Ces résultats de code d'erreur deviennent les «exceptions» que gère XPCOM.

-
- -

Au lieu de tirer parti de RTTI du C++, XPCOM utilise la méthode QueryInterface qui passe l'objet à la bonne interface, si cette interface est pris en charge.

- -

Chaque interface est pourvu d'un identifiant qui est généré à partir d'un outil nommée "uuidgen". Cet identifiant universel unique (UUID) est un numéro unique de 128 bits appelé IID. Ce n'est pas la même chose que l'ID d'un composant.

- -

Quand un client veut découvrir si un objet prend en charge une interface donnée, le client passe l'IID assignée à cette interface dans la méthode QueryInterface de cet objet. Si l'objet prend en charge l'interface demandée, il ajoute une référence à lui-même et repasse un pointeur sur cette interface. Si l'objet ne prend pas en charge l'interface une erreur est renvoyée.

- -
class nsISupports {
-  public:
-    long QueryInterface(const nsIID & uuid,
-                        void **result) = 0;
-    long AddRef(void) = 0;
-    long Release(void) = 0;
-};
-
- -

Le premier paramètre de QueryInterface est une référence à une classe nommée nsIID , qui est une encapsulation de base de l'IID. Parmi les trois méthodes sur de la classe nsIID, Equals ,Parse et ToString , Equal est de loin le plus important, car elle est utilisé pour comparer deux nsIID dans le processus d'interrogation d'interface.

- -

Lorsque vous implémentez la classe nsISupports (et vous le verrez dans le chapitre Utilitaires XPCOM pour faciliter les choses comment les macros peuvent rendre ce processus beaucoup plus facile), vous devez vous assurer que les méthodes de la classe renvoient un résultat valable lorsque le client appelle QueryInterface avec le nsISupports IID. QueryInterface devrait soutenir toutes les interfaces que le composant soutient.

- -

Dans les implémentations de QueryInterface, l'argument IID est comparer à la classe nsIID. Si il y a une corespondence, l'objet this pointeur est converti en void, le compteur de référence est incrémenté, et l'interface renvoyée à l'appelant. Si il n'y a pas de correspondance, la classe retourne une erreur et la valeur de sortie est null .

- -

Dans l'exemple ci-dessus, il est assez facile d'utiliser un C-style cast. Mais le casting peut devenir plus compliqué et vous devez d'abord passer void avec le type demandé, parce que vous devez retourner le pointeur d'interface dans la table virtuelle(vtable) correspondant à l'interface demandée. Castings peut devenir un problème quand il y a une hiérarchie d'héritage ambigu.

- -

Identifiants XPCOM

- -

En plus de l'identifiant d'interface IID discuté dans la section précédente, XPCOM utilise deux autres identificateurs très important pour distinguer les classes et les composants.

- -
-

Classes XPCOM Identifier

- -

La classe nsIID est en fait un typedef de la classe nsID. Les autres typedefs de nsID , CID et IID, se réfèrent respectivement à des implémentations spécifiques d'une classe concrète et d'une interface spécifique.

- -

La classe nsID fournit des méthodes comme Equals pour comparer les identificateurs dans le code. Voir identificateurs XPCOM pour plus d'information sur nsID.

-
- -

CID

- -

Un CID est un nombre de 128 bits qui identifie de manière unique une classe ou un composant de la même manière qu'un IID identifie de manière unique une interface. Le CID pour nsISupports ressemble à ceci:

- -

00000000-0000-0000-C000-000000000046

- -

La longueur d'un CID  peut être lourd à traiter dans le code, de sorte que très souvent, vous verrez #defines pour les CID et les autres identifiants utilisés, comme dans cet exemple:

- -
#define SAMPLE_CID \
-{ 0x777f7150, 0x4a2b, 0x4301, \
-{ 0xad, 0x10, 0x5e, 0xab, 0x25, 0xb3, 0x22, 0xaa}}
-
- -

Vous verrez utilisé aussi NS_DEFINE_CID. Cette macro déclare une constante avec la valeur du CID:

- -
static NS_DEFINE_CID(kWebShellCID, NS_WEB_SHELL_CID);
-
- -

Un CID est parfois aussi désigné comme un identificateur de classe . Si la classe à laquelle un CID se réfère a plus d'une interface, il garanties que la classe implémente cette ensemble d'interfaces quand elle est publiée ou fixée.

- -

Contrat ID

- -

Un contract ID est une chaîne lisible utilisé pour accéder à un composant. Un CID ou un contract ID peuvent être utilisés pour accéder à un composant dans gestionnaire de composant. Le contract ID est utilisé pour le composant LDAP Opération :

- -
"@mozilla.org/network/ldap-operation;1"
-
- -

Le format du contract ID est formé du domaine, du module, du nom du composant séparés par des barres obliques et du numéro de version.

- -

Comme un CID, un contract ID se réfère à une mise en œuvre plutôt qu'à une interface à l'instar IID. Mais un contract ID n'est pas liée à une mise en œuvre spécifique, contrairement au CID, il est donc plus général. Au lieu de cela, un contract ID spécifie seulement un ensemble donné d'interfaces qu'il met en œuvre, et un certain nombre de CID diffèrent peuvent intervenir en complément. Cette différence entre un contract ID et un CID est ce qui rend possible de remplacer des composants.

- -

Utilisation

- -

Une fois que le code est divisé en composants, le code client utilise habituellement l'opérateur new pour instancier des objets:

- -
SomeClass* component = new SomeClass();
-
- -

Ce modèle exige que le client connaisse le composant. Le factory design pattern peut être utilisé pour encapsuler la construction de l'objet. L'objectif du procédé est de créer un objet sans exposer les clients à la mise en œuvre et l'initialisation de cet objet. Dans l'exemple SomeClass, la construction et l'initialisation de SomeClass , qui implémente la classe abstraite SomeInterface, est contenu par la fonction New_SomeInterface:

- -

Encapsuler le constructeur

- -
int New_SomeInterface(SomeInterface** ret){
-  // Créer l'objet
-  SomeClass* out = new SomeClass();
-  if (!out) return -1;
-  // Initialisation de l'objet
-  if (out->Init() == FALSE){
-    delete out;
-    return -1;
-  }
-  // conversion de types de l'interface
-  *ret = static_cast<SomeInterface*>(out);
-  return 0;
-}
-
- -

Factory est la classe qui gère effectivement la création des instances distinctes d'un composant. Dans XPCOM, les factories sont mises en œuvre par l'interface nsIFactory. Le modèle de conception utilise l'abstraction et encapsulalion de la construction et de l'initialisation de l'objet.

- -

L'exemple de l'encapsulation du constructeur est une version simple et sans état ​​de factories, mais la programmation réel est généralement plus compliquée, ou les factories ont besoin de stocker l'état. Au minimum, la factory a besoin de préserver l'information des objets qu'elle a créée. Quand une factory gère les instances d'une classe construite dans une bibliothèque dynamique partagée, par exemple, elle doit savoir quand elle peut décharger la bibliothèque. Quand la factory conserve l'état, vous pouvez demander si il y a des références et savoir si la factory a créé des objets.

- -

Un autre état ​​utile est de savoir si oui ou non un objet est un singleton . Par exemple, si la factory crée un objet qui est censé être un singleton, les appels suivants doivent retourner le même objet. Bien qu'il existe des outils et de meilleures façons de gérer les singletons (dont nous parlerons lorsque nous parlons de l'nsIServiceManager), un développeur peut vouloir utiliser cette information pour s'assurer que seul un objet singleton peut exister quelque soit l'usage.

- -

Les exigences d'une classe factory peuvent être traitées de manière strictement fonctionnel, l'état étant détenu par des variables globales, mais il y a des avantages à utiliser des classes pour les factory. Lorsque vous utilisez une classe pour implémenter la fonctionnalité d'une factory, par exemple, vous utilisez nsISupports, qui vous permet de gérer la durée de vie de l'objets lui-mêmes. Ceci est important quand vous voulez regrouper des ensembles de factories et déterminer si elles peuvent être déchargées. Un autre avantage de l'utilisation de nsISupports est que vous pouvez supporter d'autres interfaces comme ils sont introduits. Comme nous allons le montrer lorsque nous aborderons nsIClassInfo, certaines factories soutiennent l'interrogation des informations sur la mise en œuvre sous-jacente, comme le langage d'écriture de l'objet dans les interfaces que l'objet prend en charge, etc. Ce genre d' "évolutivité" est un avantage clé qui est dérivé de nsISupports.

- -

XPIDL et bibliothèques de types

- -

Un moyen facile et puissant pour définir une interface - les interfaces dans un environnement de développement multi-plateforme, doit être indépendant du langage - est d'utiliser une interface définition langage(IDL). XPCOM utilise sa propre variante de la définition CORBA OMG Interface Langage (IDL) appelé XPIDL, qui vous permet de spécifier les méthodes, les attributs et les constantes d'une interface donnée, et aussi d'en définir héritage.

- -

Il y a quelques inconvénients à la définition de votre interface à l'aide XPIDL. Il n'y a pas d'héritage multiple possible. Si vous définissez une nouvelle interface, il ne peut pas provenir de plus d'une interface. Une autre limitation des interfaces dans XPIDL est que les noms de méthode doivent être uniques. Vous ne pouvez pas avoir deux méthodes avec le même nom qui prennent des paramètres différents, et la solution de contournement - avec plusieurs noms de fonction - n'est pas joli:

- -
void FooWithInt(in int x);
-void FooWithString(in string x);
-void FooWithURI(in nsIURI x);
-
- -

Cependant, ces lacunes sont peu de chose en comparaison des fonctionnalités acquises en utilisant XPIDL. XPIDL vous permet de générer des bibliothèques de types , ou typelibs, qui sont des fichiers avec l'extension .xpt. La bibliothèque de types est une représentation binaire d'une ou plusieurs interfaces. Elle fournit un contrôle programmatique et l'accès à l'interface, ce qui est crucial pour les interfaces utilisées d'autre langages que C++. Lorsque les composants sont accessibles à partir d'autres langages, car ils peuvent être en XPCOM, ils utilisent la bibliothèque de type binaire pour accéder à l'interface, trouver les méthodes supportées, et les appeler. Cet aspect de XPCOM est appelé XPConnect . XPConnect est la couche de XPCOM qui donne accès à des composants XPCOM à partir des langages tels que JavaScript. Voir connexion à des composants de l'interface pour plus d'informations à propos de XPConnect.

- -

Quand un composant est accessible à partir d'une langage autre que C ++, tels que JavaScript, son interface est dit "réfléchi" dans cette langage. Chaque interface réfléchie doit avoir une bibliothèque de type correspondant. Actuellement, vous pouvez écrire des composants en C, C++ ou JavaScript (et parfois Python ou Java, en fonction de l'état des liaisons respectives), et il y a des efforts en cours pour renforcer les liaisons XPCOM pour Ruby et Perl.

- -
-

Écriture dans d'autres langages

- -
-

Bien que vous ne disposez pas de l'accès à certains des outils que XPCOM prévoit pour C++ (comme les macros, les modèles, des pointeurs intelligents, et autres) lorsque vous créez des composants dans d'autres langages, vous pouvez être tellement à l'aise avec, que vous pouvez éviter complètement le C++ et construire, par exemple, les composants XPCOM en Python qui peuvent être utilisés à partir de JavaScript, ou vice versa.

- -

Voir les Ressources pour plus d'informations à propos de Python et d'autres langages utilisables avec XPCOM.

-
- -

Toutes les interfaces publiques en XPCOM sont définies en utilisant la syntaxe de XPIDL. Les bibliothèques de types et les fichiers d'en-tête de C++ sont générés à partir de ces fichiers IDL, et l'outil qui génére ces fichiers est appelé le compilateur xpidl . La section Définir l'interface de WEBLOCK dans XPIDL décrit la syntaxe de XPIDL en détail.

- -

Services de XPCOM

- -

Lorsque les clients utilisent des composants, ils instancient généralement un nouvel objet à chaque fois qu'ils ont besoin de la fonctionnalité du composant fournit. Tel est le cas lorsque, par exemple, les clients travaillent avec des fichiers: chaque fichier séparé est représenté par un objet différent, et plusieurs objets de fichier peut être utilisé à tout moment.

- -

Mais il y a aussi une sorte d'objet connu comme le service , dont il n'y a toujours qu'une seule copie (même si il peut y avoir de nombreux services en cours d'exécution à un moment donné).Chaque fois qu'un client veut accéder à la fonctionnalité fournie par un service, ils parlent à la même instance de ce service. Quand un utilisateur recherche un numéro de téléphone dans une base de données de l'entreprise, par exemple, probablement cette base de données est représentée par un «objet» qui est le même pour tous les collaborateurs. Si ce n'etait pas le cas, l'application aurait besoin de garder deux copies d'une grande base de données en mémoire, pour la même chose, et il pourrait aussi y avoir des incohérences entre les documents si les copies ont divergé.

- -

La fourniture de ce point d'accès unique à la fonctionnalité est mis en oeuvre par le singleton design pattern.

- -

Dans XPCOM, en plus de l'appui et de la gestion des composants, il y a un certain nombre de services qui aident les développeurs à l'écriture de composants. Ces services incluent un fichier abstrait multiplateforme qui offre un accès uniforme et puissant pour les fichiers, les services d'annuaire qui maintiennent l'emplacement application, gestion de la mémoire pour s'assurer que tout le monde utilise le même allocateur de mémoire, et un système de notification d'événement qui permet de passer des messages simples. Le tutoriel va vous montrer l'utilisation de chacun de ces composants et services, et de la Référence de l'API XPCOM avec une liste d'interface complète.

- -

Types XPCOM

- -

Il existe de nombreux types déclarés et de simples macros que nous allons utiliser dans les exemples suivants. La plupart de ces types sont des applications simples. Les types les plus courants sont décrits dans les sections suivantes.

- -

les types de méthode

- -

Ce qui suit est un ensemble de types qui veillent à la convention d'appel correcte et de type de méthodes XPCOM de retour.

-
- - - - - - - - - - - - - - - - - - - - - - - - -
NS_IMETHODType de retour de déclaration de méthode.
NS_IMETHODIMPType de retour de mise en œuvre de méthode. 
NS_IMETHODIMP_(type)Cas particulier de type de retour de mise en œuvre. Certaines méthodes telles que AddRef et Release ne renvoient pas le type de retour par défaut.
NS_IMPORTForce la résolution de la méthode en interne par la bibliothèque partagée.
NS_EXPORTForce l'exportation de la méthode par la bibliothèque partagée.
- -

Référence Comptage

- -

Ces macros gérer comptage de référence.

- - - - - - - - - - - - - - - - - - - - -
NS_ADDREFAppelle AddRef de nsISupports.
NS_IF_ADDREFVérifie l'etat null avant d'appeler AddRef.
NS_RELEASEAppelle Release de nsISupports.
NS_IF_RELEASEVérifie l'etat null avant d'appeler Release.
- -

Codes d'état

- -

Ces macros testent les codes d'état.

- - - - - - - - - - - - -
NS_FAILEDRetourne vrai si le code d'état passé est un échec
NS_SUCCEEDEDRetourne vrai est le code d'état passé est un succès.
- -

Variable Mappings

- - - - - - - - - - - - - - - - -
nsrefcntType de comptage de référence(entier de 32 bits).
nsresultType d'erreur par défaut(entier de 32 bits).
nsnullValeur null par défaut.
- -

Codes d'erreur XPCOM communes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NS_ERROR_NOT_INITIALIZEDInstance non initialisée.
NS_ERROR_ALREADY_INITIALIZEDInstance déjà initialisée.
NS_ERROR_NOT_IMPLEMENTEDMéthode non implémentée
NS_ERROR_NO_INTERFACEInterface non pris en charge.
NS_ERROR_NULL_POINTERPointeur valide nsnull.
NS_ERROR_FAILURELa méthode a échoué. Erreur générique.
NS_ERROR_UNEXPECTEDErreur inattendue.
NS_ERROR_OUT_OF_MEMORYAllocation de mémoire échouée.
NS_ERROR_FACTORY_NOT_REGISTEREDClasse inconnue du registre.
- -

-

« PrécédentSuivant »

-

diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/index.html deleted file mode 100644 index dbffe93c6e..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/index.html +++ /dev/null @@ -1,281 +0,0 @@ ---- -title: Créer des composants XPCOM -slug: Mozilla/Tech/XPCOM/Guide/Creating_components -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components ---- -

-

Suivant »

-

- -

Ce guide a pour but de vous initier à Gecko, et de vous permettre de créer des composants XPCOM pour les applications Gecko. Bien que le principal objectif soit de vous permettre d'inclure du code C++ dans des composants utilisables dans Gecko, nous espérons pouvoir vous présenter tous les outils, techniques, et technologies qui constituent XPCOM. En conséquence, ce livre est agencé de telle sorte que vous puissiez suivre et créer vos propres composants ou en apprendre davantage sur les différents sujets XPCOM individuellement, comme un ouvrage de référence. Par exemple, l'introduction inclue une analyse des composants, et le premier chapitre - dans lequel vous compilerez le code de base et vous l'enregistrerez avec Mozilla - explique la relation entre les composants et les modules, les interfaces XPCOM, et le processus d'enregistrement de manière générale.

- -
-

Remarque: De manière générale, essayez d'éviter de créer des composants XPCOM. Les add-ons devraient utiliser le nouveau Add-on SDK autant que possible ; cependant, il est probable que dans certains cas cela soit inévitable.

-
- -
-

Remarque : Cet article décrit une méthode qui utilise xpidl mais vous devriez plutôt utiliser webidl.

-
- -

Preface

- -
-
Pour qui est ce tutoriel
-
Organisation du tutoriel
-
En Pratique
-
Conventions
-
Remerciements
-
- -

Un aperçu de XPCOM

- -
-
Solutions XPCOM
-
Gecko
-
Composants
-
Interfaces -
-
Interfaces et Encapsulation
-
L'interface de base nsISupports
-
-
-
XPCOM Identifiers -
-
CID
-
Contract ID
-
-
-
Factories -
-
XPIDL et bibliothèques de types
-
-
-
XPCOM Services
-
XPCOM Types -
-
Method Types
-
Reference Counting
-
Status Codes
-
Variable Mappings
-
Codes d'erreur XPCOM
-
-
-
- -

Utilisation des composants XPCOM

- -
-
Exemples de composants - -
-
gestionnaire de cookies
-
WebBrowserFind
-
WebLock
-
-
-
Utilisation de composant dans Mozilla -
-
Trouver des composants Mozilla
-
Utilisation de composants XPCOM dans votre Cpp
-
XPConnect: Utilisation de XPCOM avec un Script
-
-
-
- -

Composants Internes

- -
-
Creation de composants dans  Cpp
-
XPCOM Initialization -
-
XPCOM Registry Manifests
-
Registration Methods in XPCOM
-
Autoregistration
-
The Shutdown Process
-
Three Parts of a XPCOM Component Library
-
-
-
XPCOM Glue -
-
The Glue Library
-
XPCOM String Classes
-
-
-
- -

Creating the Component Code

- -
-
What We'll Be Working On
-
Component Registration -
-
The regxpcom Program
-
Registration Alternatives
-
-
-
Overview of the WebLock Module Source
-
Digging In: Required Includes and Constants -
-
Identifiers in XPCOM
-
Coding for the Registration Process
-
The Registration Methods
-
Creating an Instance of Your Component
-
-
-
webLock1.cpp
-
- -

Using XPCOM Utilities to Make Things Easier

- -
-
XPCOM Macros - -
-
Generic XPCOM Module Macros
-
Common Implementation Macros
-
Declaration Macros
-
-
-
webLock2.cpp
-
String Classes in XPCOM -
-
Using Strings
-
nsEmbedString and nsEmbedCString
-
-
-
Smart Pointers
-
- -

Starting WebLock

- -
-
Getting Called at Startup - -
-
Registering for Notifications
-
Getting Access to the Category Manager
-
-
-
Providing Access to WebLock
-
Creating the WebLock Programming Interface
-
Defining the WebLock Interface in XPIDL -
-
The XPIDL Syntax
-
Scriptable Interfaces
-
Subclassing nsISupports
-
The Web Locking Interface
-
-
-
Implementing WebLock -
-
Declaration Macros
-
Representing Return Values in XPCOM
-
XPIDL Code Generation
-
Getting the WebLock Service from a Client
-
Implementing the iWebLock Interface
-
The Directory Service
-
Modifying Paths with nsIFile
-
Manipulating Files with nsIFile
-
Using nsILocalFile for Reading Data
-
Processing the White List Data
-
-
-
iWebLock Method By Method -
-
Lock and Unlock
-
AddSite
-
RemoveSite
-
SetSites
-
GetNext
-
GetSites
-
HasMoreElements
-
-
-
- -

Finishing the Component

- -
-
Using Frozen Interfaces - -
-
Copying Interfaces Into Your Build Environment
-
Implementing the nsIContentPolicy Interface
-
Receiving Notifications
-
-
-
Implementing the nsIContentPolicy -
-
Uniform Resource Locators
-
Checking the White List
-
Creating nsIURI Objects
-
-
-
- -

Building the WebLock UI

- -
-
User Interface Package List
-
Client Code Overview
-
XUL -
-
The XUL Document
-
The Locking UI
-
Site Adding UI
-
weblock.xul
-
-
-
Overlaying New User Interface Into Mozilla -
-
webLockOverlay.xul
-
-
-
Other Resources -
-
weblock.css
-
Image Resources
-
-
-
- -

Packaging WebLock

- -
-
Component Installation Overview
-
Archiving Resources
-
The WebLock Installation Script
-
The WebLock Trigger Script
-
Distributing Your Component
-
- -

Appendix A - Setting up the Gecko SDK

- -
-
Downloading and Setting the SDK
-
Building a Microsoft Visual Cpp Project -
-
Creating a New Project
-
Adding the Gecko SDK to the Project Settings
-
-
-
Building a Windows Project
-
A Makefile for Unix
-
- -

Appendix B - Resources

- -
-
WebLock Resources
-
Gecko Resources
-
XPCOM Resources
-
General Development Resources
-
- -

-

Suivant »

-

-

Copyright (c) 2003 by Doug Turner and Ian Oeschger. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.02 or later. Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.

-

- -

diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html deleted file mode 100644 index 478a139e2f..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Préface -slug: Mozilla/Tech/XPCOM/Guide/Creating_components/Preface -tags: - - Guide - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components/Preface ---- -

-

Suivant »

-

- -

Cette section concerne Gecko et la création de composants XPCOM pour des applications basées sur Gecko. Bien que l'accent soit mis sur les mesures concrètes que vous prenez pour créer un code C ++ valide dans un composant qui peut être utilisé dans Gecko, nous espérons que ces mesures nous donneront également l'occasion de discuter de tous les outils, les techniques et les technologies qui composent XPCOM. En conséquence, le livre est agencé de telle sorte que vous puissiez suivre et créer vos propres composants et en apprendre davantage sur XPCOM, comme dans un ouvrage de référence. Par exemple, l'introduction comprend une discussion sur les composants, et le premier chapitre - dans laquelle vous compilez le code de base et l'enregistrer avec Mozilla - éclair sur la relation entre les composants et les modules, les interfaces XPCOM et le processus d'enregistrement en général.

- -

Le début de chaque chapitre fournit une liste des principaux sujets abordés. Des barres latérales sont incluses pour mettre en évidence les détails techniques. À la fin du livre, vous aurez appris comment construire un composant XPCOM et vous comprendrez sont fonctionnement dans Gecko.

- -

Pour qui est ce tutoriel ?

- -

La Création de composants XPCOM est destinée aux développeurs C ++. Bien que vous pouvez créer des composants XPCOM en JavaScript ou d'autres langages, le code de mise en œuvre des composants est écrit en C ++, et une grande partie de la discussion sur la façon de programmer un composant XPCOM utilise le C ++. Vous ne devez pas non plus être un expert C ++. Bien que les idées de base telles que l'héritage et l'encapsulation devraient vous être familiers. Leur utilisation est expliquée à chaque fois dans le tutoriel. En outre, beaucoup d'exemples sont en JavaScript,  utilisé dans Mozilla pour accéder aux composants XPCOM comme des objets scriptable, votre familiarité avec ce langage est également utile.

- -

XPCOM pour Cross Platform Component Object Model est similaire à Microsoft COM. Si vous avez une expérience avec ces technologies, beaucoup d'entre elles peuvent être appliquées à XPCOM. Cependant, ce tutoriel ne suppose aucune connaissance préalable du COM - toutes les idées de base seront présentés.

- -

Ce livre fournit un tutoriel sur la construction d'un composant XPCOM contrôlant le comportement d'un navigateur. Bien que XPCOM peux être utilisé dans de nombreux environnements qui sont sans rapport avec la navigation web, le principal client de XPCOM est Gecko. Il est open source, conforme aux standards, possède un navigateur Web embarquable, où il est plus facile et plus pratique d'illustrer les fonctionnalités d'XPCOM. Une description complète de ce composant peut être trouvé dans le chapitre ce que nous allons faire du didacticiel.

- -
-

Malgré ce que dit le vieux document, XPCOM ne devrait pas être utilisé pour faire des plugins NPAPI scriptable. A partir de Gecko 1.7.5 (Firefox 1.0) une extension spéciale NPAPI pour scriptabilité est prise en charge, voir plugins Scripting.

-
- -

Organisation du Tutoriel

- -

La liste suivante donne un aperçu des étapes que nous allons suivre pour construire un composant XPCOM appelé WebLock, qui prévoit une fonctionnalité de blocage de sites pour les navigateurs basés sur Gecko. Chacune de ces étapes a son propre chapitre, dans lequel un certain nombre de sujets liés à l'étape sont abordés.

- - - -

Continuons avec des exemples

- -

Il y a deux façons d'installer XPCOM sur votre machine pour que vous puissiez commencer à créer des composants. Si vous avez déjà Mozilla build ou le code source de Mozilla 1.2 ou ultérieure, vous pouvez utiliser le framework XPCOM disponible. Si non, la façon la plus simple d'obtenir et d'utiliser XPCOM est de télécharger le SDK Gecko, qui est un ensemble de bibliothèques et d'outils qui comporte le framework XPCOM.

- -

Que vous compiliez le code source ou utilisiez le SDK Gecko, vous pouvez construire vos propres composants en utilisant les composants existant dans Gecko. Le composant WebLock que nous décrirons dans ce tutoriel met ceci en pratique (et, nous l'espérons, de façon utile) en plus de la manipulation du navigateur. Pour que cela fonctionne, votre code source SDK Gecko ou Mozilla doit être de version 1.2 ou ultérieure (l'interface XPCOM n'a pas été entièrement fixée dans les versions antérieures).

- -

Ce livre suppose que vous utilisez SDK plutôt que de compiler le code source de Mozilla, bien que la différence entre ces deux approches soit minime. La construction, et l'obtention de l'accès à la programmation de composants Gecko est fournies en annexe à ce livre, Configuration du SDK Gecko .

- -

Conventions

- -

Les conventions de formats ci-dessous sont utilisées pour désigner des types d'informations spécifiques dans le livre et rendre les choses plus faciles à analyser. Le but est d'utiliser aussi peu de formats que possible, mais de distinguer clairement les différents types d'informations.

- - - - - - - - - - - - - - - - - - - - - - - - -
FormatDescription
grasnoms des composants apparaissent en gras dans le texte
monospacelignes de code , noms d'interface et membres d'interfaces (par exemple, createInstance()) apparaissent avec cette police. Les lignes de code sont placées dans des encarts séparés. En outre, les noms de fichiers et de répertoires possèdent également cette police.
italiqueles variables apparaissent en italique. Les termes importants et les nouveaux concepts sont également en italique la première fois qu'ils apparaissent dans le texte. Ces termes sont expliqués soit immédiatement après leur citation, ou bien le lecteur est renvoyé à une section dans le livre où ils sont décrits en détail.
lienRéférences à d'autres sections, figures ou tableaux et leur liens vers ces articles.
diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html deleted file mode 100644 index 3a6b536ee6..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: Utilisation des composants XPCOM -slug: Mozilla/Tech/XPCOM/Guide/Creating_components/Using_XPCOM_Components -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components/Using_XPCOM_Components ---- -

-

« PrécédentSuivant »

-
Une des meilleures façons de commencer à travailler avec XPCOM - surtout quand vous concevez l'interface d'un composant qui sera utilisé par d'autres(WebLock) - est de regarder comment les clients utilisent déjà des composants XPCOM.

- -

Les applications sophistiqués comme le navigateur Mozilla sont des utilisateurs de modules XPCOM. En fait, la quasi-totalité des fonctionnalités associees au navigateur - la navigation, la gestion des fenêtres, la gestion des cookies, les signets, la sécurité, la recherche, de rendu et d'autres caractéristiques - sont définies par des composants XPCOM et consultée par le biais de leurs interfaces. Mozilla est fait de composants XPCOM.

- -

Ce chapitre montre comment Mozilla utilise certains de ces objets XPCOM, tels que le CookieManager, et explique comment l'accès au composant de Weblock sera défini.

- -

Exemples de composants

- -

Pour en savoir plus sur l'utilisation de composant particulier référez vous à API XPCOM référence . Pour l'instant, ili est important de comprendre comment un composant est  utilisé par le navigateur Mozilla.

- -

Gestionnaire de Cookies

- -

Gestion des cookies est l'une des nombreux fonctionnalités qui est mise disposition du navigateur sous la forme de composant XPCOM et qui peut être réutilisé par les développeurs qui veulent des fonctionnalités similaires dans leurs applications. Chaque fois qu'un utilisateur accède à la boîte de dialogue de Cookie Manager pour afficher, organiser, ou supprimer les cookies qui ont été stockées sur le système, ils utilisent le composant CookieManager en coulisses. La boite de dialogue du gestionnaire de cookies montre interface utilisateur qui est présenté à l'utilisateur dans Mozilla pour l'utilisation du composant CookieManager.

- -

Boite de dialogue du gestionnaire de cookies

- -

Image:cookie_mgr_dlog.png

- -

Cette boite de dialogue est écrit en XUL et en JavaScript, et utilise une partie de XPCOM appelé XPConnect pour se connecter de manière transparente au composant CookieManager (voir Connexion à des interfaces de composants ci-dessous). XUL expose les fonctionnalités du composant CookieManager, il est tres utilisé dans l'environement Mozilla.

- -

La fonctionnalité du composant CookieManager est disponible à travers l'interface nsICookieManager, ses méthodes publiques sont exposées dans le tableau ci-dessous.

- -

Interface nsICookieManager

- - - - - - - - - - - - - - - - -
removeAllRetirez tous les cookies de la liste des cookies.
enumeratorÉnumérer la liste des cookies.
removeRetirer un cookie particulier de la liste.
- -

Linterface XPCOM garanti la stabilitée, même si il y a des changements sous-jacentes. Les interfaces sont publics et les implémentations sont privés. Lorsque l'utilisateur sélectionne l'un des cookies affichés dans la liste, puis clique sur le bouton Supprimer, la méthode Remove de nsICookieManager est appelée. La fonction est réalisée par le composant CookieManager, et le cookie sélectionné est supprimé du disque et retiré de la liste affichée.

- -

L'extrait Utiliser le composant CookieManager en JavaScript montre comment Remove() peut être appelé à partir de JavaScript:

- -

Utiliser le composant CookieManager en JavaScript

- -
// xpconnect to cookiemanager
-// get the cookie manager component in JavaScript
-var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                     .getService();
-cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
-
-// called as part of a largerDeleteAllCookies() function
-function FinalizeCookieDeletions() {
-  for (var c=0; c<deletedCookies.length; c++) {
-    cmgr.remove(deletedCookies[c].host,
-                deletedCookies[c].name,
-                deletedCookies[c].path);
-  }
-  deletedCookies.length = 0;
-}
-
- -
-

Connexion à l'interface d'un composant

- -
-

L'interface Mozilla utilise JavaScript pour accèder aux composants XPCOM par l'intermediaire de XPConnect.

- -

XPConnect via XPIDL est appeler à partir d'objets JavaScript, qui représentent des instances de composants comme CookieManager.

- -

XPConnect lie le code d'application de l'interface utilisateur du navigateur Mozilla(XUL basé sur Gecko), à l'environnement JavaScript(comme xpcshell)..

-
- -

Les arrangements contractuels que permet XPCOM ouvre la voie à l'interopérabilité binaire, pour l'accès, l'utilisation et la réutilisation des composants XPCOM. Ils permettent d'utiliser des composants écrits dans d'autres langages tels que JavaScript, Python et autres.

- -

Dans le navigateur Mozilla, les composants sont souvant utilisés à partir de JavaScript. En fait, une recherche du code source Mozilla révèle que le composant CookieManager est appelée seulement à partir de JavaScript. C'est ce que nous allons faire dans ce tutoriel.

-
- -
-

JavaScript et Mozilla

- -
-

JavaScript est la lingua franca du navigateur Mozilla, et les liaisons entre elle et XPCOM sont forts et bien définie. scriptabilité , cette capacité à obtenir et utiliser des composants XPCOM à partir de JavaScript et d'autres langages pour lesquels fixations XPConnect ont été créés, est une caractéristique essentielle de XPCOM.

-
- -

Le composant WebBrowserFind

- -

Les composants sont utilisés partout - dans les fonctionnalités du navigateur de haut niveau tels que nsWebBrowserFind , qui fournit les méthodes find() et findNext() pour trouver du contenu dans les pages Web, et dans les tâches de bas niveau tels que la manipulation des données.

- -

En plus du composant CookieManager, le composant WebBrowserFind est une autre partie d'un grand ensemble d'interfaces du navigation Web que vous pouvez utiliser. Son interface nsIWebBrowserFind est présentée dans L'interface nsIWebBrowserFind .

-
- -

Les méthodes de nsIWebBrowserFind

- - - - - - - - - - - - - - - - - - - - - - - - -
findNextTrouver la prochaine occurrence de la chaîne recherchée.
findBackwardsAttribut booléen qui ajuste findNext() pour rechercher vers le début du document.
searchFramesAttribut booléen qui indique si la recherche s'efectue dans les sous-fenêtres du document actuel.
matchCaseAttribut booléen qui indique la sensibilité à la casse.
entireWordAttribut booléen qui indique si le mot entier doit correspondre.
- -

Quand vous utilisez l'interface d'un composant, vous pouvez demander si il suportr d'autres interfaces. Ce service, qui est défini dans nsISupports est mis en œuvre par tous les composants XPCOM, vous permet d'interroger et de passer d'une interface à un composant dans le cadre des runtime object typing. Il est géré par QueryInterface, qui a été introduit dans le chapitre Vue d'ensemble du XPCOM . L'API de référence XPCOM fournit une référence complète des composants XPCOM disponibles dans Mozilla.

- -

The WebLock Component

- -

Now it's time to look at the WebLock component as another example of XPCOM components (since you'll be creating it shortly). In object-oriented programming, it's typical to design the interface first-to define the functionality that's going to be provided in the abstract, without worrying about how this functionality will be achieved. So we'll put aside the details of the implementation until the next chapter and look at the component from the outside-at the interface to the WebLock component.

- -

The IWebLock Interface

- - - - - - - - - - - - - - - - - - - - - - - - -
lockLock the browser to the current site (or to the whitelist of approved sites read from disk).
unlockUnlock the browser for unrestricted use.
addSiteAdd a new site to the whitelist.
removeSiteRemove a given site from the whitelist.
sitesEnumerator for the list of approved sites read in from the whitelist.
- -

The WebLock component is software that implements all of these methods in the way described by the interface definition. It registers itself for use when the browser starts up, and provides a factory that creates an instance of it for use when the user or administrator clicks the weblock icon in the browser's user interface.

- -

Component Use in Mozilla

- -

So how are components obtained and used in Mozilla? You've seen some enticing snippets of JavaScript in earlier sections of this chapter, but we haven't explained how XPCOM makes components available in general.

- -

This section discusses practical component use in Mozilla. It's divided into three subsections: one about actually finding all these binary components in Mozilla and two others corresponding to the two main ways that clients typically access XPCOM components:

- -

Finding Mozilla Components

- -

This book attempts to provide reference information for XPCOM components and their interfaces that are frozen as of the time of this writing. The Mozilla embedding project tracks the currently frozen interfaces.

- -

Mozilla also has some tools that can find and display information about the interfaces available in Gecko such as the XPCOM Component Viewer, described below, and MXR, which is a web-based source code viewing tool.

- -

The challenge to making good information about XPCOM components available to prospective clients, however, is that the process of freezing the interfaces that are implemented by these components is still ongoing. The Component Viewer does not distinguish between components that are frozen and those that are not. In the source code you view in MXR, interfaces that have been frozen are marked at the top with @status frozen.

- -
The XPCOM Component Viewer
- -

The XPCOM Component Viewer is an add-on you can install in your browser (in sandbox, not available for now).
- Alternatively, you can try XPCOMViewer, a similar add-on.

- -

XPCOM Component Viewer

- -

Image:using-component-viewer.png

- -

The left column shows the components - in this case a subset returned from a search on "gfx" as part of the contract ID and the right column a list of the interfaces. When you open a component on the left, you can see the interfaces it implements along with a list of the methods provided by each interface.

- -

The XPCOM Component Viewer can be extremely useful for this sort of gross interrogation, but again: it displays all of the components and interfaces in your build, many of which are not practical for actual reuse or stable enough to be used reliably in your own application development. Use comprehensive lists like this with caution.

- -

 

- -

Using XPCOM Components in Your Cpp

- -

XPConnect makes it easy to acecss XPCOM components as JavaScript objects, but using XPCOM components in C++ is not much more difficult.

- -

Managing Cookies from Cpp duplicates code from Getting the CookieManager Component in JavaScript, but in C++ instead of JavaScript.

- -

Managing Cookies from Cpp

- -
nsCOMPtr<nsIServiceManager> servMan;
-nsresult rv = NS_GetServiceManager(getter_AddRefs(servMan));
-if (NS_FAILED(rv))
-  return -1;
-
-nsCOMPtr<nsICookieManager> cookieManager;
-rv = servMan->GetServiceByContractID("@mozilla.org/cookiemanager",
-                                     NS_GET_IID(nsICookieManager),
-                                     getter_AddRefs(cookieManager));
-
-if (NS_FAILED(rv))
-  return -1;
-
-PRUint32 len;
-deletedCookies->GetLength(&len);
-
-for (int c=0; c<len; c++)
-    cookieManager->Remove(deletedCookies[c].host,
-                          deletedCookies[c].name,
-                          deletedCookies[c].path,
-                          PR_FALSE);
-
- -

XXX: In the original document, there were only the first three parameters to the |Remove| call. I added |PR_FALSE| as a fourth parameter because the interface seems to require it: http://lxr.mozilla.org/mozilla/source/netwerk/cookie/public/nsICookieManager.idl#64 This problem also appears in the JavaScript version below, and I've added |false| as a fourth parameter there as well.

- -

If your application is written in C++, then Managing Cookies from Cpp shows the steps you take to get an XPCOM component, specify the interface on that component you want to use, and call methods on that interface.

- -

XPConnect: Using XPCOM Components From Script

- -

The CookieManager component we discussed at the beginning of this chapter provides a good opportunity to talk further about using components from JavaScript. In the following code fragment from the Cookie Manager dialog in Mozilla, you can see a singleton of the CookieManager component being created with the getService() method and used to provide the functionality that lets users load and remove cookies from the user interface.

- -

Managing Cookies from JavaScript

- -
var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                     .getService();
-cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
-
-function loadCookies() {
-  // load cookies into a table
-  var enumerator = cmgr.enumerator;
-  var count = 0;
-  var showPolicyField = false;
-  while (enumerator.hasMoreElements()) {
-    var nextCookie = enumerator.getNext();
-    nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
-    /* .... */
-}
-function FinalizeCookieDeletions() {
-  for (var c=0; c<deletedCookies.length; c++) {
-    cmgr.remove(deletedCookies[c].host,
-                deletedCookies[c].name,
-                deletedCookies[c].path,
-                false);
-  }
-  deletedCookies.length = 0;
-}
-
- -

XXX: In the original document, there were only the first three parameters to the |remove| call. I added |false| as a fourth parameter because the interface seems to require it: http://lxr.mozilla.org/mozilla/source/netwerk/cookie/public/nsICookieManager.idl#64 This problem also appears in the C++ version above, and I've added |PR_FALSE| as a fourth parameter there as well.

- -

Beyond the methods that are being called on the CookieManager itself (e.g., cookiemanager.remove, which maps to the remove() function in The nsICookieManager Interface), note the special XPConnect objects and methods that reflect the XPCOM component into JavaScript.

- -

Components is the JavaScript object that controls the connection to components, and classes is an array of all of the classes you can ask for by contract ID. To instantiate an XPCOM component in JavaScript, you create a new Component object and pass in the contract ID for the component you want and ask for either a singleton or an instance of that component to be returned:

- -
var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                     .getService();
-
- -

The resulting cookiemanager object then provides access to all of the methods for that component that have been defined in IDL and compiled into the type library. Using the CookieManager component, you could write code like this to delete all cookies from the system:

- -
cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                 .getService();
-cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
-
-// delete all cookies
-function trashEm() {
-   cmgr.removeAll();
-}
-
- -

Another vital feature of the XPConnect glue this example shows is the availability of the QueryInterface method on all objects that are reflected into JavaScript from XPCOM. As in C++, you can use this method to ask for other interfaces that are available on the given object.

- -
-

Services Versus Regular Instances

- -

Whether to have clients use your component as an instance or a service is a design question, really, and something you should be clear about in the documentation for your component. Actually, the getService() method in the example here calls through to the createInstance() method that is also available from the Component object and caches the result, making it a singleton rather than a normal instance.

- -

The singleton design pattern that is used to create services is described in XPCOM Services.

-
- -

Remember, QueryInterface allows you to query an object for the interfaces it supports. In the case of the snippet in The nsICookieManager Interface, the QueryInterface method is being used to get the nsICookie interface from the enumerator so that, for instance, the JavaScript code can access the value and name attributes for each cookie.

- -
    -
  1. Note : cookie-manager-ui
    Note that the interface is not part of the component itself. XPCOM makes it easy to use components like CookieManager from Mozilla's Cross Platform Front End (XPFE) and other user interfaces, but the component itself doesn't provide its own UI.
  2. -
  3. Note : private-xpcom-interfaces
    There are exceptions to this. Some XPCOM interfaces are also private and not made for general use. Private interfaces do not have the same requirements as the ones that are made available publicly in IDL.
  4. -
  5. Note : cookie-manager-in-tutorial
    The CookieManager component is used to persist for the web locking functionality described in this tutorial.
  6. -
- -

-

« PrécédentSuivant »

-

-

Copyright (c) 2003 by Doug Turner and Ian Oeschger. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.02 or later. Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.

-

diff --git a/files/fr/mozilla/tech/xpcom/guide/index.html b/files/fr/mozilla/tech/xpcom/guide/index.html deleted file mode 100644 index 748a2784b5..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/index.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: XPCOM guide -slug: Mozilla/Tech/XPCOM/Guide -tags: - - Landing - - Mozilla - - NeedsTranslation - - TopicStub - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Guide ---- -

These articles provide tutorials and usage documentation for XPCOM, including how to use it in your own projects and how to build XPCOM components for your Firefox add-ons and the like.

-

-
Compiler un composant XPCOM javascript
Créer des composants XPCOM
Ce guide a pour but de vous initier à Gecko, et de vous permettre de créer des composants XPCOM pour les applications Gecko.
-
-

diff --git a/files/fr/mozilla/tech/xpidl/index.html b/files/fr/mozilla/tech/xpidl/index.html deleted file mode 100644 index 6f7e3d2425..0000000000 --- a/files/fr/mozilla/tech/xpidl/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: XPIDL -slug: Mozilla/Tech/XPIDL -tags: - - XPCOM -translation_of: Mozilla/Tech/XPIDL ---- -

XPIDL est un langage de description d'interfaces utilisé pour spécifier les classes de l'interface XPCOM.

-

Les langages de description d'interfaces (IDL) sont utilisés pour décrire des interfaces d'une manière indépendante d'un langage et d'une machine. Les IDL permettent de définir des interfaces qui peuvent alors être employées par des outils pour générer automatiquement des spécifications d'interfaces propres à un langage donné.

-

Un de ces outils est xpidl, utilisé pour générer des fichiers d'en-têtes C++, des informations typelib et plusieurs autres choses.

-

Écriture de fichiers interface XPIDL

-

XPIDL ressemble fortement à OMG IDL avec une syntaxe étendue pour traiter les IID et des types supplémentaires. Quelques exemples sont disponibles dans les répertoires xpcom/base et xpcom/ds des sources de Mozilla.

- -

Ressources

- diff --git a/files/fr/mozilla/testing/asan_nightly_project/index.html b/files/fr/mozilla/testing/asan_nightly_project/index.html deleted file mode 100644 index c7937ca41b..0000000000 --- a/files/fr/mozilla/testing/asan_nightly_project/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Projet Nightly ASan -slug: Mozilla/Testing/ASan_Nightly_Project -tags: - - Bug - - Firefox - - Testing - - asan - - bogue - - nightly - - test -translation_of: Mozilla/Testing/ASan_Nightly_Project ---- -

{{ApiRef}}

- -
-

Documentation déplacée dans la documentation de Firefox:
- https://firefox-source-docs.mozilla.org/tools/sanitizer/asan_nightly.html

-
- -

Le Projet Nightly ASan consiste à créer un navigateur Firefox Nightly incluant l'outil populaire AddressSanitizer et à l'améliorer avec des capacités de génération de rapports de plantage à distance pour toutes erreurs détectées.

- -

Le but du projet est de trouver de subtiles altérations de la mémoire survenant lors d'une navigation normale qui ne feraient pas planter du tout le navigateur ou qui feraient planter de telle sorte que nous ne puissions pas déterminer quel est le problème exact à partir du vidage de la mémoire sur incident. Nous disposons de beaucoup de rapports de plantage inopérants et les traces AddressSanitizer sont généralement beaucoup plus exploitables par elles-mêmes (en particulier les traces d'utilisation après libération). Une partie de ce projet consiste à déterminer si des rapports de plantage d'ASan sont exploitables et combien uniquement en surfant. Le succès du projet dépend bien entendu aussi du nombre de participants.

- -

Vous pouvez télécharger la dernière version en utilisant l'un des liens ci-dessous. Les builds sont mises à jour quotidiennement comme les builds nocturnes régulières (comme pour les builds régulières, vous pouvez aller sur "Help" → "About Nightly" pour forcer une vérification de mise à jour ou confirmer que vous utilisez la dernière version).

- -
-

Si vous êtes venu ici à la recherche de versions ASan standard (par exemple pour le fuzzing ou comme développeur voulant reproduire un plantage), vous devriez probablement aller ici à la place.

-
- -

Exigences

- -

Les exigences actuelles sont :

- - - -

Si vous utilisez déjà Nightly, il devrait être possible de partager le profil avec l'instance Nightly ordinaire. Si vous utilisez normalement une version bêta ou version finale (et que vous souhaitez pouvoir y revenir), vous devriez envisager d'utiliser un second profil.

- -
-

Utilisateurs Windows : Veuillez noter que les versions de Windows affichent actuellement une erreur lors de l'installation (voir la section "Problèmes connus" ci-dessous), mais l'installation fonctionne néanmoins. Nous travaillons sur la problème.

-
- -
-

Si vous exécutez dans un environnement avec toutes sortes de restrictions de sécurité supplémentaires (par exemple le sandboxing de processus personnalisé), assurez-vous que votre répertoire /tmp est accessible en écriture et que le binaire  llvm-symbolizer livré est exécutable depuis le processus de Firefox.

-
- -

Préférences

- -

Si vous souhaitez que votre rapport d'accident soit identifiable, vous pouvez aller dans about:config et définir asanreporter.clientid avec votre adresse e-mail valide. Ce n'est pas obligatoire, vous pouvez bien sûr signaler des traces de pantage de manière anonyme. Si vous décidez d'envoyer des rapports avec votre adresse e-mail et que vous avez un compte Bugzilla, pensez à utiliser la même adresse e-mail que celle utilisée pour votre compte Bugzilla. Nous vous mettrons en CC sur les bogues déposés à partir de vos rapports de plantage Si votre adresse e-mail n'appartient pas à un compte Bugzilla, nous ne la publierons pas mais nous l'utiliserons uniquement pour trouver des réponses aux questions soulevées par vos rapports de plantage.

- -
-

La définition de cette préférence nous permet de vous contacter au cas où nous aurions des questions sur votre configuration/système d'exploitation. Veuillez envisager de l'utiliser afin que nous puissions revenir vers vous si nécessaire.

-
- -

Programme de Bug Bounty

- -

Comme récompense spéciale pour participer au programme, nous avons décidé de traiter tous les rapports soumis comme s'ils étaient enregistrés directement dans Bugzilla. Cela signifie que les rapports :

- - - -

sont éligibles pour une prime de bogue selon les règles de notre programme de Bug Bounty. Comme le rapport n'inclura généralement aucune étape de reproduction ou de test, il recevra très probablement une prime inférieure. Comme avec les rapports de bogue habituels, nous récompensons généralement le premier signalement (identifiable) d'un problème.

- -
-

Si vous souhaitez participer au programme de récompense, assurez-vous de régler votre préférence asanreporter.clientid comme indiqué ci-dessus. Nous ne pouvons pas récompenser les rapports soumis sans adresse e-mail.

-
- -

Problèmes connus

- -

Cette section répertorie toutes les limitations actuellement connues des versions Nightly ASan considérées comme des bogues.

- - - -

Notez que ces bogues sont specifiques à ASan Nightly comme indiqué dans la liste des dépendances de suivi de bogues. Pour la liste complète des bogues trouvés par ce projet, voir plutôt cette liste et notez que certains bogues peuvent ne pas être affichés parce qu'ils sont des bogues de sécurité.

- -

Si vous rencontrez un bogue qui ne figure pas dans cette liste, veuillez déposer un bogue sur bugzilla.mozilla.org ou envoyer un courriel à choller@mozilla.com. Lorsque vous déposez un rapport de bogue, cela aide grandement, si vous mettez en CC cette adresse e-mail et marquez le bogue comme bloquant le bug 1386297.

- -

FAQ

- -

Quelles sont les données supplémentaires collectées ?

- -

Le projet ne collecte que les traces ASan et (si vous le définissez dans les préférences) votre adresse e-mail. Nous ne collectons aucune autre donnée de navigateur, en particulier ni les sites que vous consultez ni le contenu de la page. Il s'agit vraiment de traces de plantage soumises à un emplacement distant.

- -
-

Le navigateur Nightly ASan possède également toutes les capacités de collecte de données d'un navigateur Nightly normal. La réponse ci-dessus se réfère uniquement à ce que ce projet recueille en plus de ce que le navigateur Nightly normal peut collecter.

-
- -

Quel est l'impact sur les performances ?

- -

La version Nightly ASan ne s'accompagne que d'un léger ralentissement au démarrage et à la navigation, parfois même pas perceptible. La consommation de RAM est cependant beaucoup plus élevée qu'avec une version normale. Soyez prêt à redémarrer parfois votre navigateur, surtout si vous utilisez beaucoup d'onglets à la fois. En outre, les mises à jour sont plus volumineuses que les mises à jour ordinaires, ce qui signifie que les temps de téléchargement des mises à jour seront plus longs, en particulier si votre connexion Internet est plus lente.

- -
-

Si vous rencontrez des problèmes de performance, voir aussi la section "Problèmes connus" ci-dessus, en particulier le problème du ralentissement de la vitesse de rafraîchissement de l'écran de Firefox.

-
- -

Et la stabilité ?

- -

Le navigateur est aussi stable qu'une version Nightly standard. Différentes personnes ont surfé avec pour leur travail au quotidien depuis des semaines maintenant et nous avons à peine reçu que quelques rapports de plantage.

- -

Comment puis-je confirmer que j'utilise la bonne version ?

- -

Si vous ouvrez about:support et tapez "asanreporter" dans le champ de recherche, vous devriez voir une entrée appelée asanreporter.apiurl associée à une URL. Ne modifiez pas cette valeur.

- -
-

Depuis Firefox 64, la fonctionnalité "ASan Crash Reporter"  n'est plus listée dans le répertoire about:support

-
- -

Y aura-t-il prise en charge de macOS ?

- -

Nous travaillons sur le support pour Mac, mais cela pourrait prendre plus de temps parce que nous n'avons pas de couverture ASan CI sur Mac en raison de contraintes matérielles. Si vous travaillez sur l'ingénierie de publication et que vous souhaitez contribuer à ce que Mac, par exemple, arrive plus tôt, n'hésitez pas à me contacter.

diff --git a/files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html b/files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html deleted file mode 100644 index 77db938413..0000000000 --- a/files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Firefox et Address Sanitizer -slug: Mozilla/Testing/Firefox_and_Address_Sanitizer -tags: - - Debugging - - Developing Mozilla - - Guide - - Testing -translation_of: Mozilla/Testing/Firefox_and_Address_Sanitizer ---- -

Déplacé dans la documentation de Firefox: https://firefox-source-docs.mozilla.org/tools/sanitizer/asan.html

diff --git a/files/fr/mozilla/testing/index.html b/files/fr/mozilla/testing/index.html deleted file mode 100644 index eaf633a72e..0000000000 --- a/files/fr/mozilla/testing/index.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Testing Mozilla code -slug: Mozilla/Testing -tags: - - Landing - - Mozilla - - Testing -translation_of: Mozilla/Testing ---- -

Tester votre code est important ! Avant même de pouvoir intégrer votre code dans l'arborescence des sources, vous devez le tester, et les correctifs de plus grande taille doivent avoir des tests automatisés. Ces articles vous aideront à maîtriser (et à continuer à exceller) le test du code Mozilla.

- -

{{LandingPageListSubpages}}

diff --git a/files/fr/mozilla/thunderbird/account_examples/index.html b/files/fr/mozilla/thunderbird/account_examples/index.html deleted file mode 100644 index 5b0af43c05..0000000000 --- a/files/fr/mozilla/thunderbird/account_examples/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Account examples -slug: Mozilla/Thunderbird/Account_examples -tags: - - Extensions - - thunderbird -translation_of: Mozilla/Thunderbird/Account_examples ---- -
-

Brouillon
- Cette page n'est pas complète

-
- -
-

Ce contenu couvre les fonctionnalités introduites dans Thunderbird 3

-
- -

Cet article fournit des exemples d'accès et de manipulation des comptes Thunderbird. Les interfaces de compte fournissent une vue d'ensemble des interfaces associées. Voir Présention des composants Thunderbird pour une description générale de l'interface utilisateur de Thunderbird et des interfaces de programmation associées.

- -

Itérer sur tous les comptes connus

- -
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"]
-                        .getService(Components.interfaces.nsIMsgAccountManager);
-var accounts = acctMgr.accounts;
-if (accounts.queryElementAt) {
-  // Gecko 17+
-  for (var i = 0; i < accounts.length; i++) {
-    var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
-    // Faire quelque chose avec le compte
-  }
-} else {
-  // Gecko < 17
-  for (var i = 0; i < accounts.Count(); i++) {
-    var account = accounts.QueryElementAt(i, Components.interfaces.nsIMsgAccount);
-    // Faire quelque chose avec le compte
-  }
-}
-
- -

Introspectez les détails de certains comptes (noms, paramètres, etc.)

- -
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"]
-                        .getService(Components.interfaces.nsIMsgAccountManager);
-var accounts = acctMgr.accounts;
-for (var i = 0; i < accounts.length; i++) {
-  var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
-  Application.console.log(account.key);
-  // account.incomingServer est un nsIMsgIncomingServer
-  // account.identities est un nsISupportsArray de nsIMsgIdentity objects
-  //                    vous pouvez le parcourir comme acctMgr.accounts ci-dessus
-  // account.defaultIdentity est un nsIMsgIdentity
-}
-
- -

Parcourir les dossiers d'un compte

- -
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"]
-                        .getService(Components.interfaces.nsIMsgAccountManager);
-var accounts = acctMgr.accounts;
-for (var i = 0; i < accounts.length; i++) {
-  var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
-  var rootFolder = account.incomingServer.rootFolder; // nsIMsgFolder
-  Application.console.log(rootFolder.prettiestName);
-  if (rootFolder.hasSubFolders) {
-    var subFolders = rootFolder.subFolders; // nsIMsgFolder
-    while(subFolders.hasMoreElements()) {
-      var folder = subFolders.getNext().QueryInterface(Components.interfaces.nsIMsgFolder);
-      Application.console.log(folder.prettiestName);
-    }
-  }
-}
diff --git a/files/fr/mozilla/thunderbird/autoconfiguration/index.html b/files/fr/mozilla/thunderbird/autoconfiguration/index.html deleted file mode 100644 index 3deb8fa43d..0000000000 --- a/files/fr/mozilla/thunderbird/autoconfiguration/index.html +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: Autoconfiguration dans Thunderbird -slug: Mozilla/Thunderbird/Autoconfiguration -translation_of: Mozilla/Thunderbird/Autoconfiguration ---- -

Autheur: Ben Bucksch
- Veuillez ne pas modifier ce document sans consulter l'auteur

- -

Traduction Française par Kimpe Andy association heberge-kimpe

- -

l'association heberge-kimpe et une association qui s'engage dans l'open source.

- -

C'est la raison de le traduction de ce document très pratique pour les webmaster

- -

Si vous utilisez zpanel sur votre serveur voici comment mettre en place automatiquement l'autoconfiguration de thunderbrid

- -

 

- -

attention le lien ci dessous ne fonctionne plus.

- -

car le site de la comunauté française de zpanel a fermer c'est porte (merci yousse)

- -

je ferais a nouveau ce tutoriel (avec une mise à jours a sentora) des que j'aurais plus de temp libre.

- -

merci de votre compréhention

- -

cordialement andy

- -

http://www.zpanel-fr.com/forum/10-infos-importantes-mise-a-jour/115-tuto-perssonalisez-les-dns-par-defaut

- -

 

- -

A partir de la version Thunderbird 3.1 et versions ultérieures (et 3,0 dans une certaine mesure) inclut la fonctionnalité de configuration automatique de compte de courriel. Le but de l'autoconfiguration est de le rendre très facile pour les utilisateurs la configuration et la connexion de Thunderbird à leurs serveurs de messagerie. Dans de nombreux cas, les gens devraient être en mesure de télécharger et d'installer Thunderbird, d'entrer leur vrai nom, adresse e-mail et mot de passe dans l'Assistant Configuration du compte et d' avoir un client de messagerie qui fonctionne pleinement et d'envoyer et recevoir leur courrier de manière aussi sécurisée que possible.

- -

voir aussi:

- - - -

Ce document décrit comment la configuration automatique dans Thunderbird fonctionne et ce qu'il faut faire pour permettre aux serveurs de messagerie d'être configurées automatiquement.

- -

Mécanismes

- -

Thunderbird obtient les paramètres de serveur par l'intermédiaire de divers moyens, dont chacun est prévu pour un cas de figure particulier :

- - - -

Tous les mécanismes lookup utilisent le domaine de l'adresse e-mail en tant que base pour la recherche. Par exemple, pour l'adresse email fred@example.com, la recherche est effectuée comme (dans cet ordre):

- -
    -
  1. tb-install-dir/isp/example.com.xml sur le disque dur
  2. -
  3. vérifier autoconfig.example.com
  4. -
  5. rechercher des "example.com" dans le ISPDB
  6. -
  7. rechercher "MX example.com" dans le DNS, et pour mx1.mail.hoster.com, consultez la rubrique "hoster.com" dans le ISPDB
  8. -
  9. essayer de deviner (imap.example.com, smtp.example.com etc)
  10. -
- -

Nous pouvons à l'avenir ajouter des enregistrements DNS SRV en tant que mécanisme pris en charge à l'avenir, mais nous n'avons actuellement pas.

- -

Comment ajouter le support pour votre nom de domaine

- -

Classification

- -

Si vous êtes un grand fournisseur de services Internet (> 100.000 utilisateurs) fournir des adresses email uniquement sous quelques domaines tels que "example.com" et "example.de", vous pouvez soit envoyer la configuration à la ISPDB ou mettre en place un serveur de configuration.
-
- Si vous soutenez alias de messagerie et le nom de connexion de l'utilisateur ne fait pas partie de l'adresse de courrier électronique (par exemple, les utilisateurs peuvent avoir "hero@example.com" comme adresse e-mail, mais le nom de connexion IMAP / POP / SMTP n'est ni «héros» ni "hero@example.com", mais "u67578"), vous devez configurer un serveur de configuration, qui fait l'adresse mail -> nom de connexion lookup.
-
- Si vous hébergez domaines clients, c'est à dire que vous êtes "hoster.com», mais vos clients ont "fred@flintstone.com" et "louis@kent.com" comme des domaines, avec seulement quelques utilisateurs par domaine, vous devez configurer un serveur de configuration (ou s'appuyer sur DNS MX).
-
- Si vous êtes une petite entreprise d'installer Thunderbird sur les postes de travail de vos employés, vous pouvez placer un fichier de configuration dans le dossier d'installation de Thunderbird.

- -

ISPDB

- -

L'URL de base de données est <https://live.mozillamessaging.com/autoconfig/v1.1/>, append nom de domaine, par exemple. <https://live.mozillamessaging.com/autoconfig/v1.1/freenet.de>.
-
- Le processus actuel: Remplissez un bug dans Bugzilla, Produit "Outils web", "composants ISPDB Base de données d'entrées», avec un fichier de configuration qui correspond aux exigences décrites ci-dessous. Demander une révision de bwinton, gozer ou ben.bucksch.
-
- Future: ajouter la configuration à l' ISPDB server app.

- -

 

- -

je finirait la traduction demain merci de votre compréhention

- -

Configuration du serveur avec ISP

- -

Given the email address "fred@example.com", Thunderbird first checks <http://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=fred@example.com> and then <http://example.com/.well-known/autoconfig/mail/config-v1.1.xml>.

- -

Small company

- -

If you are a small company, you can put the XML configuration file on your web server, at URL <http://example.com/.well-known/autoconfig/mail/config-v1.1.xml>. (This is not yet finalized and subject to change.)

- -

Domain hoster

- -

If you are an ISP that hosts domains for your customers - for example, you are hoster.com and your customer registers fancy.com or example.com, and your servers accept and serve the mail for example.com -, you should set up an autoconfig server.

- -

DNS

- -

For each customer domain, you add a DNS record (in addition to the existing MX, A www etc. DNS records):
- autoconfig IN A 10.2.3.4
- or
- autoconfig IN CNAME autoconfig.hoster.com.
- ... where 10.2.3.4 and autoconfig.hoster.com are IP addresses / hostnames you own.
- This allows Thunderbird to find you as hoster.

- -

To make the Version without an autoconfig DNS Entry work you have to make sure that example.com points to the Webserver you will place the config-v1.1.xml on.

- -

Example: example.com A 10.2.3.4

- -

Web server

- -

You set up a web server bound to a physical IP address. This may be on the same machine as other web servers, but the web server must be configured to the content to any requested domain.
-
- You must use an virtual host that match all autoconfig.* domains of your customers. In Apache terms, you can use a "ip-based virtual host". In the Apache configuration files, that means something like: Listen 10.2.3.4:80 (of course, you use a public IP address that you own)

- -
<VirtualHost 10.2.3.4:80> #Must be the first and only virtual host with this ip!
-    DocumentRoot /var/www/autoconfig/
-    ServerName autoconfig.hoster.com
-    <Directory /var/www/autoconfig>
-	Order allow,deny
-	allow from all
-    </Directory>
-</VirtualHost>
- -

Place the configuration file at the URL /mail/config-v1.1.xml on that host.

- -

All config files must be served as Content-Type: text/xml (or application/xml), otherwise the file will be ignored. Also, they must use charset UTF-8 (esp. if there are any non-ASCII-characters).

- -

If you like to use name-based virtual hosts. You probably don't want to setup the autoconfig subdomain for every domain of your customers.
- You can add a Rewriterule in the default virtual host (on debian /etc/apache2/sites-enabled/000-default)  to match all autoconfig.* subdomains:

- -
<VirtualHost *:80> #Must be the first Virtual host
-	ServerAdmin webmaster@hoster.com
-	ServerName www
-	DocumentRoot /var/www
-	RewriteEngine On
-	RewriteCond %{HTTP_HOST} ^autoconfig\. [NC]
-	RewriteRule ^/(.*)	http://autoconfig.hoster.com/$1 [L,R=301,NE]
-        #...
-</VirtualHost>
-<VirtualHost *:80>
-    DocumentRoot /var/www/autoconfig/
-    ServerName autoconfig.hoster.com
-    <Directory /var/www/autoconfig>
- 	Order allow,deny
-	allow from all
-    </Directory>
-</VirtualHost>
-
- -

 

- -

 

- -

Configuration file

- -

This is described at How to create a configuration file and defined on the sub-pages.

- -

{{ languages( { "ja": "ja/Thunderbird/Autoconfiguration" } ) }}

diff --git a/files/fr/mozilla/thunderbird/index.html b/files/fr/mozilla/thunderbird/index.html deleted file mode 100644 index f05663cdbd..0000000000 --- a/files/fr/mozilla/thunderbird/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Thunderbird -slug: Mozilla/Thunderbird -tags: - - TopicStub - - thunderbird -translation_of: Mozilla/Thunderbird ---- -

Thunderbird est l'application de mail/messagerie de Mozilla. Ces pages documentent Thunderbird et fournissent également des liens vers la documentation sur le backend MailNews qui est également utilisé dans d'autres projets tels que Eudora/Penelope, Seamonkey, Correo, etc.

- -

Thunderbird est le petit frère de Firefox et est construit sur la même plate-forme technique que le navigateur Web. En développement depuis de nombreuses années, et actuellement l'un des clients de messagerie open source les plus populaires, il est utilisé par des millions de personnes à travers le monde pour rassembler tous leurs comptes de messagerie, groupes de discussion et lecture de flux dans un environnement familier à haute productivité.  (Du début 2007 au début 2011, Thunderbird a été développé par Mozilla Messaging, une filiale appartenant à Mozilla.)

- - - - - - - - -
-

Documentation

- -
-
Construire Thunderbird
-
Informations sur la construction de Thunderbird avec le référentiel comm-central. Il y a aussi des informations sur le fonctionnement de comm-central, comment le processus de révision fonctionne et comment utiliser le serveur de symboles Mozilla pour aider au débogage.
-
Protocoles MailNews
-
Documentation approximative sur les protocoles de messagerie..
-
Vues de la base de données
-
Information de backend sur {{ Interface("nsIMsgDBView") }} et les interfaces associées..
-
Documentation de l'API Thunderbird
-
Documentation de l'API Thunderbird
-
Documentation d'extension
-
Tutoriels et astuces pour créer des extensions Thunderbird
-
Test automatisé
-
Détails des installations de test automatisées de Thunderbird
-
Thunderbird dans l'entreprise
-
Aide au déploiement de Thunderbird dans les grandes organisations
-
- -

Voir tout...

-
-

Communauté

- - - -

Outils

- - - - - - -
diff --git a/files/fr/mozilla/thunderbird/index/index.html b/files/fr/mozilla/thunderbird/index/index.html deleted file mode 100644 index e8d18b61a8..0000000000 --- a/files/fr/mozilla/thunderbird/index/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Index -slug: Mozilla/Thunderbird/Index -tags: - - Index -translation_of: Mozilla/Thunderbird/Index ---- -

{{Index("/fr/docs/Mozilla/Thunderbird")}}

diff --git a/files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html b/files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html deleted file mode 100644 index 98b0d6c0e1..0000000000 --- a/files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Comment trouver la trace d'appels pour envoyer un rapport de bug -slug: Mozilla/Trouver_trace_appels_pour_rapport_bug -tags: - - Bugzilla -translation_of: Mozilla/How_to_get_a_stacktrace_for_a_bug_report ---- -

Si vous envoyez un rapport de plantage sur le Bugzilla vous devriez joindre la trace d'appels (en anglais stacktrace). C'est grâce à elle que les développeurs de Mozilla sauront ce qui s'est mal passé et auront un point de départ pour mener leurs investigations. Cet article vous explique comment utiliser le rapporteur de plantage de Mozilla (le Breakpad, un bloc-notes des incidents) pour obtenir un identifiant de plantage que nos ingénieurs peuvent utiliser pour obtenir la trace d'appels. Vous apprendre également de quels autres moyens vous disposez pour obtenir une trace d'appels si vous ne connaissez pas l'identifiant de plantage.

- -

Conditions nécessaires

- -

Vous avez besoin d'une version de Firefox téléchargée sur Mozilla.org. SeaMonkey et Thunderbird comportent également une assistance au rapport de plantage.

- -

Le serveur du rapporteur de bug de Mozilla ne dispose d'informations de débogage que pour les versions produites par Mozilla. Par conséquent le rapporteur de bug ne peut pas fonctionner si vous utilisez votre propre compilation du code source ou une version issue de certaines distributions Linux. Auquel cas vous devrez utiliser une des méthodes alternatives exposées ci-dessous.

- -
Remarque : lorsqu'on traite un rapport de plantage, il est important se savoir si le plantage s'est produit avec Firefox en mode sans échec. C'est ce qui aide les ingénieurs à déterminer si une extension quelconque ou un plugin particulier est à l'origine du problème.
- -

Trouver l'identifiant de plantage avec le rapporteur de plantage de Mozilla

- - - - - - - - -
-

1. Le plantage et l'envoi d'un rapport au système.

- -

La fenêtre du rapporteur de plantage de Mozilla devrait apparaître automatiquement après un plantage de Firefox. Si vous disposez d'autres informations complémentaires sur le plantage, comme des détails sur ce que vous étiez en train de faire au moment critique et qui peut avoir déclenché le plantage, n'hésitez pas à l'écrire dans la zone de saisie des commentaires. Vérifiez que vous avez bien coché la case « Informer Firefox de ce problème pour qu’il puisse être corrigé » et cliquez sur le bouton de redémarrage. Le rapporteur de plantage devrait alors soumettre le rapport de plantage, puis Firefox va s'ouvrir à nouveau.

- -
Le bouton "Détails" permet d'accéder à des données supplémentaires sur l'incident, cependant elles ne sont pas très utiles dans un rapport de bug.
-
-

reporter.jpg

-
- - - - - - - - -
-

2. Communiquez-nous l'identifiant du rapport que vous avez soumis.

- -

Pour accéder à tous vos rapports de bug, saisissez "about:crashes" dans la barre d'adresse de Firefox et appuyez sur Entrée. Firefox should open a list of IDs for your submitted crash reports. Copy two or three of the IDs for the appropriate crashes and paste them into your Bugzilla report. Please check the listed times to avoid copying the ID of an unrelated crash report.

- -
You can prefix a "bp-" to the beginning of an ID to make Bugzilla turn it into a link: bp-a70759c6-1295-4160-aa30-bc4772090918
-
-

crashlist.jpg

-
- -

Trouver l'identifiant d'un plantage au démarrage

- -

Si Firefox tombe en panne au démarrage, vous pouvez toujours accéder à vos rapports d'incident soumis. Les rapports Crash sont accessibles depuis tous les profils de Firefox, new profile ne se bloque pas, vous pouvez l'utiliser pour y accéder par "about: crashes" as above.

- -

Accès aux ID de rapport d'incident en dehors de Firefox

- -

Si vous ne pouvez pas charger Firefox du tout, vous pouvez trouver les fichiers de rapport d'incident à cet emplacement en fonction de votre système d'exploitation:

- -

Windows : %APPDATA%\Mozilla\Firefox\Crash Reports\submitted\
- OS X : ~/Library/Application Support/Firefox/Crash Reports/submitted/
- Linux : ~/.mozilla/firefox/Crash Reports/submitted/

- -

Chaque fichier de ce dossier contient un ID de rapport d'incident envoyé. Vous pouvez vérifier l'heure modifiée ou la création pour chaque fichier afin de déterminer quels rapports d'incident sont pertinents pour votre rapport de bogue.

- -

D'autres moyens de trouver la trace d'appels

- -

Si le journal de crash Mozilla ne s'affiche pas ou n'est pas disponible, vous devrez obtenir manuellement une trace de pile:

- -

Windows

- -

Voir l'article Create a stacktrace with Windbg pour plus d'information à ce propos.

- -

For a full process dump, see How to get a process dump with Windows Task Manager [en-US]

- -

OS X

- -

Exécuter /Applications/Utilities/Console.app.  Ouvrir "~/Library/Logs" et "CrashReporter", et rechercher les logs pour "firefox-bin".

- -

Linux

- -

Note that for most distros the package you need to get symbols for will be something like "xulrunner", not "firefox".

- -

Les fichiers de rapports de plantage dans votre ordinateur

- -

Lorsque Breakpad initialement attrape un plantage, il écrit d'abord les fichiers de rapport d'incident (par exemple les fichiers .dump et .extra) dans le sous-répertoire «pending» de son annuaire «Crash Reports».
-
- Si Breakpad envoie avec succès le rapport d'incident au serveur de rapports, par défaut, les fichiers ajoutés au sous-répertoire «en attente» de la panne sont supprimés et un fichier .txt est placé dans le répertoire «soumis» contenant l'ID d'incident Serveur de rapports a enregistré le crash sous. Si vous voulez que Breakpad quitte les fichiers .dump et .extra sur votre ordinateur pour pouvoir les examiner localement,
MOZ_CRASHREPORTER_NO_DELETE_DUMP variable d'environnement à 1.

- - diff --git a/files/fr/mozilla/working_with_windows_in_chrome_code/index.html b/files/fr/mozilla/working_with_windows_in_chrome_code/index.html deleted file mode 100644 index 7f4c49a097..0000000000 --- a/files/fr/mozilla/working_with_windows_in_chrome_code/index.html +++ /dev/null @@ -1,250 +0,0 @@ ---- -title: Travailler avec des fenêtres dans le chrome -slug: Mozilla/Working_with_windows_in_chrome_code -tags: - - Extensions -translation_of: Mozilla/Working_with_windows_in_chrome_code ---- -

-Cet article décrit la manière de travailler avec des fenêtres multiples dans le code chrome de Mozilla (applications XUL et extensions). Il donne des astuces et des exemples de code sur l'ouverture de nouvelles fenêtres, la recherche de fenêtres déjà ouvertes, et la transmission de données entre différentes fenêtres. -

-

Ouverture de fenêtres

-

Pour ouvrir une nouvelle fenêtre, on utilise habituellement un appel DOM window.open ou window.openDialog, comme ceci : -

-
var win = window.open("chrome://myextension/content/about.xul",
-                      "aproposDeMonExtension", "chrome,centerscreen");
-
-

Le premier paramètre de window.open est l'URI du fichier XUL décrivant la fenêtre et son contenu. -

Le second paramètre est le nom de la fenêtre ; il peut être utilisé par des liens ou formulaires dans leur attribut target. Il est différent du titre de la fenêtre tel que vu par l'utilisateur, qui est spécifié en XUL. -

Le troisième paramètre, facultatif, est une liste de fonctionnalités spéciales que la fenêtre doit avoir. -

La fonction window.openDialog fonctionne de manière similaire, mais permet de spécifier des paramètres optionnels qui peuvent être référencés depuis le code JavaScript. Elle gère également les fonctionnalités de la fenêtre légèrement différemment, supposant notamment toujours que la fonctionnalité dialog est spécifiée. -

Si l'objet window est indisponible (par exemple, lors de l'ouverture d'une fenêtre depuis le code d'un composant XPCOM), vous pouvez avoir besoin de l'interface nsIWindowWatcher. Ses paramètres sont similaires à ceux de window.open, en fait l'implémentation de window.open appelle les méthodes de nsIWindowWatcher. -

-
var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
-                   .getService(Components.interfaces.nsIWindowWatcher);
-var win = ww.openWindow(null, "chrome://myextension/content/about.xul",
-                        "aboutMyExtension", "chrome,centerscreen", null);
-
-

L'objet window

-

Notez la variable win dans la section ci-dessus, à laquelle est assignée la valeur de retour de window.open. Elle peut être utilisée pour accéder à la fenêtre ouverte. La valeur renvoyée par window.open (et les méthodes similaires) est un objet Window (habituellement ChromeWindow), du même type que la variable window. -

Du point de vue technique, elle implémente un certain nombre d'interfaces, dont nsIDOMJSWindow et nsIDOMWindowInternal, mais elle contient également les propriétés définies par l'utilisateur pour les variables globales et fonctions de la fenêtre. Donc, par exemple, pour accéder au document DOM correspondant à la fenêtre, vous pouvez utiliser win.document. -

Notez cependant que le retour de l'appel à open() se fait avant que la fenêtre ne soit totalement chargée, donc certains appels comme win.document.getElementById() ne fonctionneront pas. Pour contourner cette difficulté, vous pouvez déplacer le code d'initialisation vers un gestionnaire load de la fenêtre ouverte, ou passer une fonction de callback comme décrit ci-dessous. -

Vous pouvez obtenir un objet Window depuis un document à l'aide de document.defaultView. -

-

Fenêtres de contenu

-

Lorsqu'une fenêtre XUL contient un élément d'interface capable d'afficher une page, comme <browser> ou <iframe>, le document à l'intérieur de celui-ci est, naturellement, séparé du document de la fenêtre chrome elle-même. Il y a également un objet Window pour chaque sous-document, bien qu'il n'y ait pas de fenêtre dans le sens commun pour le sous-document. -

C'est également valable pour les fenêtres chrome ouvertes dans un onglet ou <tt><tabbrowser></tt>. Les éléments au dessus du document chrome ouvert dans l'onglet sont séparés de votre document chrome. -

Les deux sous-sections qui suivent décrivent la manière de passer les frontières du contenu chrome dans les deux sens, c'est-à-dire d'accéder à des éléments qui sont les ancêtres de votre document chrome, ou des éléments qui sont descendants de votre document chrome, mais néanmoins dans un contexte différent. -

-

Accès aux documents contenus

-

Supposons que vous avez un document chargé dans un élément <tt><tabbrowser></tt>, <tt><browser></tt> ou <tt><iframe></tt> dans votre document. -Vous pouvez utiliser browser.contentDocument pour accéder à ce document et browser.contentWindow pour accéder à l'objet Window de ce document.

Il est nécessaire de prendre en compte la fonctionnalité XPCNativeWrapper si l'on n'opère pas dans du contenu de confiance. -

Dans le cas de <browser type="content-primary"/>, vous pouvez utiliser la propriété raccourcie content pour accéder à l'objet Window du document contenu. Par exemple : -

-
// affiche le titre du document affiché dans l'élément de contenu principal
-alert(content.document.title);
-
-

Par exemple, vous pouvez utiliser content.document dans un overlay à browser.xul pour accéder à la page Web dans l'onglet sélectionné. -

-
Certains exemples utilisent _content au lieu de content. La première forme est déconseillée depuis longtemps, et vous devriez utiliser content dans tout nouveau code.
-

Accès à un document dans un panneau latéral

-

Firefox permet d'accéder à un panneau latéral, qui est implémenté comme un élément <browser> avec id="sidebar". Pour accéder aux éléments et variables à l'intérieur du panneau, il est nécessaire d'utilier document.getElementById("sidebar").contentDocument ou .contentWindow, comme pour l'{{ Anch("Accès aux documents contenus") }}. -

-

Accès aux éléments du document de la fenêtre principale depuis une fenêtre fille

-

Le cas opposé est l'accès au document chrome depuis un script privilégié chargé dans un <tt><browser></tt> ou un <tt><iframe></tt>. -

Un cas typique où cela peut s'avérer utile est lorsque du code exécuté dans un panneau latéral de la fenêtre principale de Firefox doit pouvoir accéder aux éléments de cette fenêtre. -

L'arbre DOM, tel qu'il apparaît dans l'Inspecteur DOM, peut ressembler à ceci : -

-
#document
-  window                 main-window
-    ...
-      browser
-        #document
-          window         myExtensionWindow
-
-

où la fenêtre fille est celle où se trouve votre code. -

Le but est d'accéder aux éléments situés au dessus du document chrome, c'est-à-dire de sortir de la fenêtre chrome et d'accéder à ses ancêtres. Cela peut se faire à l'aide de l'instruction suivante : -

-
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
-                   .getInterface(Components.interfaces.nsIWebNavigation)
-                   .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
-                   .rootTreeItem
-                   .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
-                   .getInterface(Components.interfaces.nsIDOMWindow)
-
-

Ceci permet de passer les limites du contenu chrome, et renvoie l'objet de la fenêtre principale. -

-

Recherche de fenêtres déjà ouvertes

-

Le composant XPCOM window mediator (interface nsIWindowMediator) fournit des informations à propos des fenêtres existantes. Deux de ses méthodes sont souvent utilisées pour obtenir des informations à propos des fenêtres actuellement ouvertes : getMostRecentWindow et getEnumerator. Consultez la page nsIWindowMediator pour plus d'informations sur nsIWindowMediator. -=== Example: Opening a window only if it's not opened already === XXX TBD -

-

Transfert de données entre fenêtres

-

Lorsque l'on travaille avec plusieurs fenêtres, il est souvent nécessaire de faire passer des informations d'une fenêtre à une autre. Comme des fenêtres séparées ont des documents DOM et objets globaux différents pour les scripts, il n'est pas possible d'utiliser une seule variable globale JavaScript dans des scripts de fenêtres différentes.

Plusieurs techniques existent, de puissance et de simplicité variables, pour partager des données. Nous les présenterons de la plus simple à la plus complexe dans les quelques sections suivantes. -

-

Exemple 1 : Passage de données à une fenêtre à son ouverture avec openDialog

-

Lorsque vous ouvrez une fenêtre à l'aide de window.openDialog ou nsIWindowWatcher.openWindow, vous pouvez fournir un nombre d'arguments arbitraires à cette fenêtre. Les arguments sont des objets JavaScript simples, accessibles au travers de la propriété window.arguments dans la fenêtre ouverte. -

Dans cet exemple, on utilise window.openDialog pour ouvrir un dialogue de progression. On lui passe le texte d'état ainsi que les valeurs maximale et courante de la barre de progression. (Notez qu'utiliser nsIWindowWatcher.openWindow est un peu moins trivial .) -

Code d'ouverture : -

-
window.openDialog("chrome://test/content/progress.xul",
-                  "myProgress", "chrome,centerscreen",
-                  {status: "Lecture des données distantes", maxProgress: 50, progress: 10} );
-
-

progress.xul: -

-
<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window onload="onLoad();" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-<script><![CDATA[
-  var gStatus, gProgressMeter;
-  var maxProgress = 100;
-  function onLoad() {
-    gStatus = document.getElementById("status");
-    gProgressMeter = document.getElementById("progressmeter");
-
-    if("arguments" in window && window.arguments.length > 0) {
-      maxProgress = window.arguments[0].maxProgress;
-      setProgress(window.arguments[0].progress);
-      setStatus(window.arguments[0].status);
-    }
-  }
-
-  function setProgress(value) {
-    gProgressMeter.value = 100 * value / maxProgress;
-  }
-
-  function setStatus(text) {
-    gStatus.value = "Status: " + text + "...";
-  }
-]]></script>
-
-<label id="status" value="(Aucun état)"/>
-<hbox>
-  <progressmeter id="progressmeter" mode="determined"/>
-  <button label="Annuler" oncommand="close();"/>
-</hbox>
-
-</window>
-
-

Exemple 2 : Interaction avec la fenêtre ouvrante

-

Il arrive qu'une fenêtre ouverte doive interagir avec celle qui a déclenché son ouverture (opener). Par exemple, cela peut avoir pour but de lui indiquer que l'utilisateur a effectué des changements dans la fenêtre. On peut trouver la fenêtre qui en a ouvert une autre à l'aide de sa propriété window.opener ou via une fonction de callback passée à la fenêtre, de la façon décrite dans la section précédente. -

Ajoutons un peu de code à l'exemple précédent pour avertir la fenêtre ouvrante lorsque l'utilisateur appuie sur Annuler dans la fenêtre de progression. -

- -
<button label="Annuler" oncommand="opener.cancelOperation(); close();"/>
-
- -
function onCancel() {
-  alert("Opération annulée.");
-}
-
-...
-
-window.openDialog("chrome://test/content/progress.xul",
-                  "myProgress", "chrome,centerscreen",
-                  {status: "Lecture des données distantes", maxProgress: 50, progress: 10},
-                  onCancel);
-
-

Le dialogue de progression peut alors exécuter le callback de cette façon : -

-
<button label="Cancel" oncommand="window.arguments[1](); close();"/>
-
-

Exemple 3 : Utilisation de nsIWindowMediator lorsque opener ne suffit pas

-

La propriété window.opener est très facile à utiliser, mais elle n'est utile que lorsque vous pouvez vous assurer que la fenêtre a été ouverte depuis un endroit connu. Dans des cas plus compliqués, vous devez utiliser l'interface nsIWindowMediator dont il est fait état plus haut. -

Une situation dans laquelle nsIWindowMediator peut être utilisé est dans la fenêtre d'options d'une extension. Supposons que vous développez une extension au navigateur qui consiste en un overlay sur browser.xul et une fenêtre d'options. Supposons que l'overlay contient un bouton pour ouvrir la fenêtre d'options de l'extension, qui doit lire certaines données depuis la fenêtre de navigation. Comme vous vous en souvenez peut-être, le gestionnaire d'extensions de Firefox peut également être utilisé pour ouvrir votre fenêtre d'options. -

Cela signifie que la valeur de window.opener dans votre dialogue d'options n'est pas forcément la fenêtre de navigation, il peut s'agir à la place de la fenêtre du gestionnaire d'extensions. Vous pourriez vérifier la propriété location de l'opener et utiliser opener.opener dans le cas de la fenêtre du gestionnaire d'extensions, mais une meilleure manière de faire est d'utiliser nsIWindowMediator : -

-
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
-                   .getService(Components.interfaces.nsIWindowMediator);
-var browserWindow = wm.getMostRecentWindow("navigator:browser");
-// lecture de valeurs depuis |browserWindow|
-
-

Il peut être tentant d'utiliser une technique similaire pour appliquer les changements effectués par l'utilisateur dans la fenêtre d'options, mais une meilleur manière de le faire est d'utiliser les observateurs de préférences. -

-

Partage de données avancé

-

Le code ci-dessus est utile lorsque vous avez besoin de passer des données d'une fenêtre à une autre ou vers un ensemble de fenêtres, mais dans certains cas vous voulez simplement partager une variable JavaScript commune à différentes fenêtres. Vous pourriez déclarer une variable locale dans chaque fenêtre ainsi que les fonctions nécessaires pour garder les « instances » de la variable synchronisées entre les différentes fenêtres, mais par chance il existe une meilleure solution. -

Pour déclarer une variable partagé, il est nécessaire de trouver un endroit qui existe tout au long de l'exécution de l'application et qui est facilement accessible depuis le code dans différentes fenêtres du chrome. En fait, quelques endroits comme celui-ci existent. -

-

Utilisation d'un composant singleton XPCOM

-

La manière la plus propre et la plus puissante est de définir votre propre composant XPCOM (vous pouvez en écrire un en JavaScript) et y accéder depuis n'importe quel endroit à l'aide d'un appel à getService : -

-
Components.classes["@domain.org/mycomponent;1"].getService();
-
- -

Plusieurs articles et livres sur la création de composants XPCOM existent en ligne. -

-

Stockage de données partagées dans les préférences

-

Si vous avez simplement besoin de stocker une chaîne ou un nombre, l'écriture d'un composant XPCOM complet peut être une complication inutile. Vous pouvez utiliser le service de préférences dans de tels cas. -

- -

Consultez Extraits de code:Préférences pour une description détaillée du système de préférences et des exemples de code. -

Exemple : -

-
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
-                      .getService(Components.interfaces.nsIPrefService);
-var branch = prefs.getBranch("extensions.myext.");
-var var1 = branch.getBoolPref("var1"); // obtient une préférence
-
-

L'astuce de la fenêtre cachée

-

Certains auteurs d'extensions utilisent la fenêtre cachée spéciale (hidden window) pour stocker leurs données et leur code. La fenêtre cachée est similaire à une fenêtre normale, mais contrairement à celles-ci elle est disponible à tout moment de la vie de l'application et n'est pas visible pour l'utilisateur. Le document chargé dans cette fenêtre est chrome://browser/content/hiddenWindow.xul sous Mac OS X où il est utilisé pour implémenter les menus et resource://gre/res/hiddenWindow.html pour les autres systèmes d'exploitation. À terme, cette fenêtre sera retirée des systèmes d'exploitation où elle n'est pas nécessaire ({{ Bug(71895) }}). -

Une référence à la fenêtre cachée peut être obtenue depuis l'interface nsIAppShellService. Comme tout objet DOM, elle vous permet de définir des propriétés personnalisées : -

-
var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"]
-         .getService(Components.interfaces.nsIAppShellService)
-         .hiddenDOMWindow;
-hiddenWindow.myExtensionStatus = "ready";
-
-

Cependant, les objets placés dans la fenêtre cachée appartiendront toujours à la fenêtre qui les a créés. Si une méthode d'un tel objet accède à des propriétés de l'objet window comme XMLHttpRequest, vous pouvez être confronté à un message d'erreur parce que la fenêtre originale a été fermée. Pour éviter cela, vous pouvez charger les objets avec un fichier script dans la fenêtre cachée: -

-
var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"]
-         .getService(Components.interfaces.nsIAppShellService)
-         .hiddenDOMWindow;
-hiddenWnd.Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
-         .getService(Components.interfaces.mozIJSSubScriptLoader)
-         .loadSubScript("chrome://my-extension/content/globalObject.js");
-hiddenWnd.myExtensionObject.doSomething();
-
-

globalObject.js contient quelque chose comme : -

-
var myExtensionObject = {
-  doSomething: function() {
-    return new XMLHttpRequest();
-  }
-}
-
- -

Voir aussi

-

Extraits de code:Dialogues et invites -


-

-
-
-{{ languages( { "en": "en/Working_with_windows_in_chrome_code", "es": "es/Trabajar_con_ventanas_desde_c\u00f3digo_chrome", "ja": "ja/Working_with_windows_in_chrome_code" } ) }}
diff --git a/files/fr/new_compatibility_tables_beta/index.html b/files/fr/new_compatibility_tables_beta/index.html deleted file mode 100644 index 002e1bf8f1..0000000000 --- a/files/fr/new_compatibility_tables_beta/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Nouveaux tableaux de compatibilité (Bêta) -slug: New_Compatibility_Tables_Beta -translation_of: Archive/MDN/New_Compatibility_Tables_Beta ---- -

Vous êtes probablement ici parce que vous avez suivi le lien de notification bêta de l'un de nos nouveaux tableaux de compatibilité. (Non ? Voulez-vous voir les nouveaux tableaux?  Devenez un beta testeur.)

- -

Merci de nous aider à les tester. Ils font partie d'un projet bien plus grand. Nous convertissons toutes nos données de compatibilité entre les navigateurs en JSON.

- -

Les nouveaux tableaux vont apparaître au fur et à mesure que ces données seront converties dans ce nouveau format.

- -

Édition

- -

Nos données de compatibilité ont été déplacées dans des fichiers JSON, disponibles dans le dépôt GitHub browser-compat-data.

- -

Pour apporter votre contribution à ces données, vous pouvez soumettre un pull request ou publier une issue dans le repository.

- -

Comment aider

- -

Si vous repérez un problem dans ces données, merci de remplir un ticket sur le dépôt github.

- -

Si vous observez un problème avec l'apparence d'un tableau ou ses fonctionnalités, merci de clicker sur le bouton « Rapporter une erreur » dans le menu déroulant au dessus du tableau.

- -

Si vous avez un moment, nous vous invitons à répondre à notre sondage.

diff --git a/files/fr/np_initialize/index.html b/files/fr/np_initialize/index.html deleted file mode 100644 index 82163ee5cf..0000000000 --- a/files/fr/np_initialize/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: NP Initialize -slug: NP_Initialize -translation_of: Archive/Plugins/Reference/NP_Initialize ---- -

« Gecko Plugin API Reference « Plug-in Side Plug-in API

- -

Résumé

- -

Permet l'initialisation globale d'un greffon.

- -

Syntaxe

- -

Windows

- -
#include <npapi.h>
-
-NPError WINAPI NP_Initialize(NPNetscapeFuncs *aNPNFuncs)
-
- -

Unix

- -
#include <npapi.h>
-
-NPError NP_Initialize(NPNetscapeFuncs *aNPNFuncs, NPPluginFuncs *aNPPFuncs)
-
- -

Retour

- - - -

Description

- -

Le navigateur appelle cette fonction une seule fois : Lorsqu'un greffon est chargé, avant la création de la première instance. C'est la première fonction qu'il appelle. NP_Initialize indique au greffon que le navigateur l'a chargé et assure son initialisation globale. NP_Initialize alloue toute mémoire ou ressource partagée par l'ensemble des instances du greffon à ce moment.

- -

Après la suppression de la dernière instance d'un greffon , le navigateur appelle NP_Shutdown [en-ja] où l'on peut libérer la mémoire et les resources.

- -

Voir aussi

- -

NPP [en-ja] -> NPP_New [en-ja], NPP_Destroy [en-ja], NPP_HandleEvent [en-ja], NPP_SetWindow [en-ja]
- NP_Shutdown [en-ja], NP_Initialize [en-ja]
- NPWindow [en-ja]
- NPSavedData [en-ja]
- NP_Port [en-ja]
- Codes Erreurs [en-ja]

- -

{{ languages( { "en": "en/NP_Initialize", "ja": "ja/NP_Initialize" } ) }}

diff --git a/files/fr/np_shutdown/index.html b/files/fr/np_shutdown/index.html deleted file mode 100644 index 0d0a6f3d3f..0000000000 --- a/files/fr/np_shutdown/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: NP Shutdown -slug: NP_Shutdown -translation_of: Archive/Plugins/Reference/NP_Shutdown ---- -

« Gecko Plugin API Reference « Plug-in Side Plug-in API

- -

Résumé

- -

Permet la désactivation (trad à vérifier : deinitialization) globale d'un greffon.

- -

Syntaxe

- -
#include <npapi.h>
-
-void NP_Shutdown(void);
-
- -

Windows

- -
#include <npapi.h>
-
-void WINAPI NP_Shutdown(void);
-
- -

Description

- -

Le navigateur appelle cette fonction une fois seulement après la destruction de la dernière instance de votre greffon, avant le déchargement de votre librairie elle-même. Utilisez NP_Shutdown pour supprimer toute donnée alloué lors dans NP_Initialize [en-ja] dans le but d'être partagée entre toutes les instances.
-
- Si vous avez défini une classe Java pour votre greffon, assurez-vous de l'avoir libérée de telle manière que Java puisse la décharger et libérer la mémoire.

- -
-

NOTE: S'il y a assez de mémoire, le navigateur peut garder la librairie du greffon chargée s'il attend de créer plus d'instances rapidement. Dans ce cas, le navigateur n'appelle NP_Shutdown que lorsque le librairie est complètement déchargée. (Vérifier la traduction de cette phrase)

-
- -

Voir aussi

- -

NPP [en-ja] -> NPP_New [en-ja], NPP_Destroy [en-ja], NPP_HandleEvent [en-ja], NPP_SetWindow [en-ja]
- NP_Shutdown [en-ja], NP_Initialize [en-ja]
- NPWindow [en-ja]
- NPSavedData [en-ja]
- NP_Port [en-ja]
- Codes Erreurs [en-ja]

- -

{{ languages( { "ja": "ja/NP_Shutdown", "fr": "fr/NP_Shutdown" } ) }}

diff --git a/files/fr/npp/index.html b/files/fr/npp/index.html deleted file mode 100644 index 4131e445ba..0000000000 --- a/files/fr/npp/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: NPP -slug: NPP -translation_of: Archive/Plugins/Reference/NPP ---- -

« Gecko Plugin API Reference « Plug-in Side Plug-in API

- -

Résumé

- -

Représente une instance d'un greffon (plugin).

- -

Syntaxe

- -
typedef struct _NPP
-{
-    void* pdata; /* plug-in private data */
-    void* ndata; /* Mozilla private data */
-} NPP_t;
-
-typedef NPP_t*  NPP;
-
- -

Champs

- -

La structure de données dispose des champs suivants :

- -
-
pdata
-
Une valeur dont la définition dépend du greffon et qu'il peut utiliser comme pointeur vers une structure de données interne associée à l'instance. Ce champs n'est pas modifié par le navigateur.
-
- -
-
ndata
-
Une valeur privée, contrôlée par le navigateur et utilisée pour stocker des données associées à l'instance. Cette valeur ne doit pas être modifiée par le greffon.
-
- -

Description

- -

Gecko crées une structure NPP pour chaque instance de greffon puis transmet un pointeur la ciblant à NPP_New [en-ja]. Ce pointeur - manipulateur opaque d'instance de greffon - identifie l'instance sur laquelle les appels à l'API doivent opérer.

- -

La fonction NPP_Destroy [en-ja] informe le greffon de la suppression imminente de l'instance NPP. À la fin de cet appel, le pointeur NPP n'est plus valide.

- -

Voir aussi

- -

NPP  [en-ja] -> NPP_New [en-ja], NPP_Destroy [en-ja], NPP_HandleEvent [en-ja], NPP_SetWindow [en-ja]
- NP_Shutdown [en-ja], NP_Initialize [en-ja]
- NPWindow [en-ja]
- NPSavedData [en-ja]
- NP_Port [en-ja]
- Codes Erreurs [en-ja]

- -

 

- -

{{ languages( { "en": "en/NPP", "ja": "ja/NPP" } ) }}

diff --git a/files/fr/npp_new/index.html b/files/fr/npp_new/index.html deleted file mode 100644 index e35f819726..0000000000 --- a/files/fr/npp_new/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: NPP New -slug: NPP_New -translation_of: Archive/Plugins/Reference/NPP_New ---- -

« Gecko Plugin API Reference « Plug-in Side Plug-in API

- -

Résumé

- -

Crées une nouvelle instance de greffon (plugin).

- -

Syntaxe

- -
#include <npapi.h>
-
-NPError NPP_New(NPMIMEType    pluginType,
-                NPP instance, uint16 mode,
-                int16 argc,   char *argn[],
-                char *argv[], NPSavedData *saved);
-
- -

Paramètres

- -

La fonction dispose des paramètres suivants :

- -
-
pluginType
-
Pointeur sur le type MIME de la nouvelle instance du greffon.
-
- -
-
instance
-
Données privées spécifiques à l'instance accessibles au greffon et au navigateur (Le navigateur ne les modifie pas). Elles sont stockées dans instance->pdata.
-
- -
-
mode
-
Mode d'affichage du greffon. Valeurs: -
    -
  • NP_EMBED: (1) L'instance a été créée via un tag EMBED et partage la fenêtre du navigateur avec d'autres contenus.
  • -
  • NP_FULL: (2) L'instance a été créée par un fichier séparé et est le contenu premier de la fenêtre
  • -
-
-
- -
-
argc
-
Nombre d'arguments HTML dans le tag EMBED pour un greffon embarqué (détermine le nombre d'attributs dans les vecteurs argn et rgv).
-
- -
-
argn[]
-
Vecteur des noms des attributs transmis au greffon depuis le tag EMBED.
-
- -
-
argv[]
-
Vecteur des valeurs des attributs transmis au greffon depuis le tag EMBED.
-
- -
-
saved
-
Pointer to data saved by NPP_Destroy [en-ja] for a previous instance of this plug-in at the same URL. If non-null, the browser passes ownership of the NPSavedData [en-ja] object back to the plug-in. The plug-in is responsible for freeing the memory for the NPSavedData [en-ja] and the buffer it contains.
-
- -

Valeurs retournées

- - - -

Description

- -

NPP_New crée une nouvelle instance de greffon. Elle est appelée après NP_Initialize [en-ja] et transmet le type MIME, le mode d'affichage et, pour les greffons embarqués, des informations concernant arguments du tag EMBED.

- -

Un nouveau pointeur d'instance de NPP  [en-ja] est crée par le greffon. Il reste valide jusqu'à la destruction de l'instance par NPP_Destroy [en-ja].

- -

Si les données d'une ancienne instance ont été sauvées lors de l'appel de NPP_Destroy [en-ja], l'instance crée redémarre selon les paramètres en question.

- -

Tous les attributs du tag EMBED (privés comme standards) sont transmis à NPP_New dans les vecteurs argn et argv. Le navigateur ignore tous les attributs non-standards issus du tag EMBED. Cela permet aux développeurs d'utiliser des attributs privés pour définir des options spécifiques à l'instance (ou de nouvelles informations pour le greffon). Placez les options privées à la fin de la liste des attributs standards dans le tag EMBED.

- -

Voir aussi

- -

NPP [en-ja] -> NPP_New [en-ja], NPP_Destroy [en-ja], NPP_HandleEvent [en-ja], NPP_SetWindow [en-ja]
- NP_Shutdown [en-ja], NP_Initialize [en-ja]
- NPWindow [en-ja]
- NPSavedData [en-ja]
- NP_Port [en-ja]
- Codes Erreurs [en-ja]

- -

{{ languages( { "ja": "ja/NPP_New", "en": "en/NPP_New" } ) }}

diff --git a/files/fr/npp_setwindow/index.html b/files/fr/npp_setwindow/index.html deleted file mode 100644 index f684350f91..0000000000 --- a/files/fr/npp_setwindow/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: NPP SetWindow -slug: NPP_SetWindow -tags: - - Fenêtre - - Plugin - - Plugins - - Window -translation_of: Archive/Plugins/Reference/NPP_SetWindow ---- -

« Gecko Plugin API Reference « Plug-in Side Plug-in API

- -

Résumé

- -

Indique au greffon (plugin) qu'une fenêtre est créée, déplacée, redimensionnée ou détruite.

- -

Syntaxe

- -
#include <npapi.h>
-
-NPError NPP_SetWindow(NPP instance, NPWindow *window);
-
- -

Paramètres

- -

La fonction a les paramètres suivants :

- -
-
instance
-
Pointeur vers l'instance du greffon courant (Doit être embarqué ou en plein-écran).
-
- -
-
window
-
Pointeur vers la fenêtre où l'instance s'affiche. La structure de la fenêtre contient un "gestionnaire de fenêtre"  (trad incertaine de "a window handle") et les valeurs suivantes :
- Coordonnées (coin haut-gauche), largeur, hauteur et "rectangle de coupure" (trad incertaine de "clipping rectangle") (voir les notes concernant Unix ci-dessous).
-
- -

Valeurs retournées

- - - -

Description

- -

Le navigateur appelle NPP_SetWindow après avoir créé l'instance pour permettre le début de l'affichage. Les appels suivants à NPP_SetWindow indiquent des changements de taille ou de position. Ces appels transmettent le même objet NPWindow [en-ja]  à chaque fois mais avec des valeurs différentes. Si les gestionnaire de fenêtre est défini à null, la fenêtre est supprimée. Dans ce cas le greffon ne doit provoquer aucune opération graphique supplémentaire sur la fenêtre et doit libérer toute ressource associée.

- -

La structure de données fournie à NPP_SetWindowest un objet NPWindow [en-ja] contenant les coordonnées de la zone de l'instance (et différentes données spécifiques à la plateforme). Cette fenêtre est valide tant que l'instance existe ou jusqu'à ce que NPP_SetWindow soit de nouveau appelé avec d'autres valeurs.

- -

Pour des greffons fenêtrés sous Unix et Windows, le paramètre window contient un gestionnaire de sous-fenêtre de la hiérarchie des fenêtres du navigateur. Sur Mac OS, ce champs pointe sur une structure NP_Port [en-ja]. Pour des greffons sans fenêtre, c'est un gestionnaire d'affichage (handle to drawable) spécifique à la plateforme.

- -

Avant de faire pointer le paramètre window sur une nouvelle fenêtre, il est conseillé de comparer les informations cette dernière et l'ancienne (si elle existe) pour relever tout changement.

- -
NOTE: NPP_SetWindow est utile uniquement pour les greffons embarqués (NP_EMBED) ou plein-écran (NP_FULL), qui sont affichés dans une fenêtre. NPP_SetWindow est hors de propos pour les greffons cachés.
- -

Voir aussi

- -

NPP [en-ja] -> NPP_New [en-ja], NPP_Destroy [en-ja], NPP_HandleEvent [en-ja], NPP_SetWindow [en-ja]
- NP_Shutdown [en-ja], NP_Initialize [en-ja]
- NPWindow [en-ja]
- NPSavedData [en-ja]
- NP_Port [en-ja]
- Codes Erreurs [en-ja]

- -

Notes de traduction

- - diff --git a/files/fr/nsiconsoleservice/index.html b/files/fr/nsiconsoleservice/index.html deleted file mode 100644 index d60e9d22b3..0000000000 --- a/files/fr/nsiconsoleservice/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: nsIConsoleService -slug: nsIConsoleService -tags: - - Interfaces - - 'Interfaces:Scriptable' - - Référence_de_l'API_XPCOM - - XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIConsoleService ---- -

-

-

Résumé

-

Le service de console est la partie principale de la Console JavaScript, fournie avec toutes les applications Mozilla. Il est utilisé pour journaliser divers messages, avertissements, et erreurs, et récupérer les messages enregistrés. -

Définition de l'interface : xpcom/base/nsIConsoleService.idl -

ID du contrat : @mozilla.org/consoleservice;1 -

Cette interface est encore en cours de développement et elle est susceptible d'être modifiée dans le futur (bug 228205). -

-

Exemples

-

Journaliser un simple message

-

Une utilisation courante est d'enregistrer un message dans la console : -

-
function LOG(msg) {
-  var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
-                                 .getService(Components.interfaces.nsIConsoleService);
-  consoleService.logStringMessage(msg);
-}
-
-

Les méthodes de journalisation alternatives incluent Components.utils.reportError et dump(). -

-

Journaliser un message et des informations additionnelles

-

Pour inclure d'autres informations dans la journalisation, telles que le fichier source ou un numéro de ligne, vous devez utiliser un code plus complexe. -

-
function myLogToConsole(aMessage, aSourceName, aSourceLine, aLineNumber,
-                        aColumnNumber, aFlags, aCategory)
-{
-  var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
-                                 .getService(Components.interfaces.nsIConsoleService);
-  var scriptError = Components.classes["@mozilla.org/scripterror;1"]
-                              .createInstance(Components.interfaces.nsIScriptError);
-  scriptError.init(aMessage, aSourceName, aSourceLine, aLineNumber,
-                   aColumnNumber, aFlags, aCategory);
-  consoleService.logMessage(scriptError);
-}
-
- -

Interwiki Languages Links -

diff --git a/files/fr/nsifeed/index.html b/files/fr/nsifeed/index.html deleted file mode 100644 index bbc5625129..0000000000 --- a/files/fr/nsifeed/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: nsIFeed -slug: nsIFeed -tags: - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeed ---- -

-

L'interface nsIFeed représente un unique flux de news Atom ou RSS (Really Simple Syndication). Elle comporte des attributs qui fournissent des informations sur le flux, de même que l'accès aux éléments ou données du flux. -


-

-
toolkit/components/feeds/public/nsIFeed.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsIFeedContainer -

-

Attributs

- - - - - - - - - - - - - - - - - - - - - -
Attribut -Type -Description -
cloud - nsIWritablePropertyBag2 -Personne ne sait vraiment à quoi correspond l'attribut cloud. On le soupçonne d'être lié aux services XML-RPC ou SOAP. -
enclosureCount -long -Indique le nombre d'éléments inclus dans le flux. -
generator -nsIFeedGenerator -Décrit le logiciel qui a généré le flux. -
image -nsIWritablePropertyBag2 -Fournit une URL image et des métadonnées, tel que définit par RSS 2. -
items -nsIArray -Spécifie une liste des éléments ou des entrées du flux comme une liste d'objets nsIFeedEntry. -
skipDays -nsIArray -Une liste des jours de la semaine où le flux ne doit pas être extrait. Chaque entrée de la liste est le nom d'un jour de la semaine à omettre. Par exemple, pour omettre l'extraction les lundis, un flux devra spécifier "Lundi" dans cette liste. -
Note : Cet attribut est très peu implémenté par les aggrégateurs.
-
skipHours -nsIArray -Une liste des heures pendant lesquelles le flux ne doit pas être extrait. Les heures sont représentées par des valeurs réelles allant de 0 (minuit) à 23 (23 heures), et sont toujours indiquées en temps UTC. -
Note : Cet attribut est très peu implémenté.
-
subtitle -nsIFeedTextConstruct -Retourne un sous-titre pour le flux, basé sur sa description, son sous-titre et les extensions appropriées. -
textInput -nsIWritablePropertyBag2 -Information sur la boîte texte qui peut être affichée avec le flux par les aggrégateurs supportant cette fonction, pour permettre au lecteur d'envoyer une réponse à la source du flux. -
Note : Cet attribut est très peu utilisé, et il est incompatible avec nombre d'aggrégateurs.
-
type -long -Indique le type de contenu délivré par un flux. -

Les valeurs possibles sont: -

-
TYPE_FEED -
Un flux texte standard. -
-
TYPE_AUDIO -
Un flux audio, tel qu'un podcast. -
-
TYPE_IMAGE -
Un flux image, tel qu'un photocast. -
-
TYPE_VIDEO -
Un flux vidéo, tel qu'un videocast. -
-

Cet attribut est en lecture seule. -

-
Note : Vous devriez considérer ceci comme un masque de valeurs ; à terme, l'attribut "type" pourrait inclure simultanément plusieurs de ces valeurs. Il n'est pas certain que cela se produise avant la sortie de Firefox 2.
-
-

Voir également

-

nsIFeedContainer -

diff --git a/files/fr/nsifeedcontainer/index.html b/files/fr/nsifeedcontainer/index.html deleted file mode 100644 index 7fda65e345..0000000000 --- a/files/fr/nsifeedcontainer/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: nsIFeedContainer -slug: nsIFeedContainer -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedContainer ---- -

L'interface nsIFeedContainer fournit des champs standards utilisés à la fois par les flux (nsIFeed) et les entrées de flux (nsIFeedEntry).

-


-

-
toolkit/components/feeds/public/nsIFeedContainer.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-

-

Hérité de : nsIFeedElementBase Implémenté par : nsIFeed

-

Synoptique

- - - - - - -
normalize();
-

Attributs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributTypeDescription
authorsnsIArray Une liste d'objets nsIFeedPerson qui décrit l'auteur du flux ou de l'entrée de flux.
<code>categoriesnsIArrayUne liste de catégories présentes dans un flux ou une entrée de flux. -
- Note : La liste retournée contiendra des objets nsIFeedCategory, cependant cette interface n'est pas encore implémentée.
-
contributorsnsIArrayUne liste d'objets nsIFeedPerson qui décrit les contributeurs au flux ou aux entrées de flux.
fieldsnsIWritablePropertyBag2Fournit un accès à l'ensemble des champs présents dans le document. Les champs Atom et RSS courants sont normalisés, et comprennent certaines extensions d'espace de nommage telle que "dc:subject" et "content:encoded". Les clients peuvent éviter la normalisation en vérifiant le type du flux et en accédant à des champs spécifiques. -

On accède aux espaces de nommages courants en utilisant des préfixes, tel que get("dc:subject");. Pour plus d'informations à propos des préfixes, voir nsIFeedResult.registerExtensionPrefix()().

-
idAStringUne chaîne qui identifie le flux ou l'entrée de flux. Tout les flux ne la contiennent pas, mais les formats de flux les plus importants possèdent des ID pour chaque entrée.
linknsIURIUne URI contenant le lien original du flux ou de l'entrée.
rightsnsIFeedTextConstructLes droits ou la licence d'utilisation du flux ou de l'entrée de flux.
titlensIFeedTextConstructLe titre du flux ou de l'entrée de flux. Souvenez-vous que certains flux n'ont pas de titre, et que certains titres contiennent des balises, aussi soyez prudent en utilisant cet attribut.
updatedAStringUne chaîne contenant la date de la dernière mise à jour du flux ou de l'entrée de flux, au format RFC822. Cette chaîne peut être analysée par du code JavaScript et du code mail.
-

Méthodes

-

normalize()

-

Synchronise les champs d'un conteneur avec ses attributs propres.

-
 void normalize();
-
-

Voir également

- diff --git a/files/fr/nsifeedelementbase/index.html b/files/fr/nsifeedelementbase/index.html deleted file mode 100644 index 358b20561a..0000000000 --- a/files/fr/nsifeedelementbase/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: nsIFeedElementBase -slug: nsIFeedElementBase -tags: - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedElementBase ---- -

-

L'interface nsIFeedElementBase est une interface de base de laquelle dérivent plusieurs autres interfaces d'accès au flux. -


-

-
toolkit/components/feeds/public/nsIFeedElementBase.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsISupports -

-

Attributs

- - - - - -
Attribut -Type -Description -
attributes -nsISAXAttributes -Tous les attributs trouvés de cet élément. La plupart des interfaces dérivées fournissent des contrôleurs propres pour accéder aux champs standards. Cet attribut n'est donc utile que pour les champs non standards. -
baseURI -nsIURI -L'URI originale du flux ou de l'entrée. -
-


-Lien interwiki -

diff --git a/files/fr/nsifeedentry/index.html b/files/fr/nsifeedentry/index.html deleted file mode 100644 index b6d2bc9474..0000000000 --- a/files/fr/nsifeedentry/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: nsIFeedEntry -slug: nsIFeedEntry -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedEntry ---- -

-

L'interface nsIFeedEntry décrit une unique entrée dans un flux RSS ou Atom, et fournit les attributs permettant d'accéder aux données de l'entrée. -


-

-
toolkit/components/feeds/public/nsIFeedEntry.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsIFeedContainer -

-

Attributs

- - - - - - - - - - - - - -
Attribut -Type -Description -
content -nsIFeedTextConstruct -Le texte entier du contenu de l'entrée. Il provient des champs <tt>atom:content</tt> et/ou <tt>content:encoded</tt>. -
enclosures -nsIArray -Une liste de tous les éléments inclus dans l'entrée de flux. Ces éléments sont utilisés par les podcats, les photocasts, etc. -
mediaContent -nsIArray -Une liste de tous les éléments inclus et éventuellement d'autres média qui peuvent être employés pour composer l'entrée de flux. -
parent -nsIFeedContainer -Une référence à l'élément parent de l'entrée de flux, qui peut être le flux (nsIFeed) ou une autre entrée. -
published -AString -Une chaîne indiquant la date de publication de l'entrée de flux, au format RFC822. Cette date peut être analysée par du code JavaScript et du code mail. -
summary -nsIFeedTextConstruct -Un résumé du contenu de l'entrée de flux. Il est généré automatiquement en utilisant la description de l'entrée, son sous-titre, son résumé, son contenu et les extensions appropriées. -
-

Voir également

-

nsIFeedContainer -


-Lien interwiki -

diff --git a/files/fr/nsifeedgenerator/index.html b/files/fr/nsifeedgenerator/index.html deleted file mode 100644 index dc27f2f650..0000000000 --- a/files/fr/nsifeedgenerator/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: nsIFeedGenerator -slug: nsIFeedGenerator -tags: - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedGenerator ---- -

-

L'interface nsIFeedGenerator décrit le logiciel qui a généré le flux de news RSS ou Atom. -


-

-
toolkit/components/feeds/public/nsIFeedGenerator.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsIFeedElementBase -

-

Attributs

- - - - - - - -
Attribut -Type -Description -
agent - AString - Le nom du logiciel générateur du flux. -
uri - nsIURI - Une URI associée au logiciel générateur du flux. -
version - AString - Une chaîne indiquant la version du logiciel générateur du flux. -
diff --git a/files/fr/nsifeedperson/index.html b/files/fr/nsifeedperson/index.html deleted file mode 100644 index 3f6e439cb7..0000000000 --- a/files/fr/nsifeedperson/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: nsIFeedPerson -slug: nsIFeedPerson -tags: - - Interfaces - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedPerson ---- -

-

L'interface nsIFeedPerson décrit l'auteur ou le contributeur d'un flux RSS ou Atom. -


-

-
toolkit/components/feeds/public/nsIFeedPerson.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsIFeedElementBase -

-

Attributs

- - - - - - - -
Attribut -Type -Description -
email -AString -L'adresse de courrier électronique de la personne. -
name -AString -Le nom de la personne. -
uri -nsIURI -Une URI associée à la personne ; il s'agît, dans la majorité des cas, de l'adresse de son site personnel. -
-

Voir également

-

nsIFeedElementBase -


-Lien interwiki -

diff --git a/files/fr/nsifeedprocessor/index.html b/files/fr/nsifeedprocessor/index.html deleted file mode 100644 index 46b87ca682..0000000000 --- a/files/fr/nsifeedprocessor/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: nsIFeedProcessor -slug: nsIFeedProcessor -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedProcessor ---- -

-

L'interface nsIFeedProcessor analyse les flux RSS ou Atom, déclenchant des rappels suivant leur contenu, pendant et après leur analyse. -


-

-
toolkit/components/feeds/public/nsIFeedProcessor.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsIStreamListener -

Implémentée par : @mozilla.org/feed-processor;1. Pour créer une instance, utilisez : -

-
var fp = Components.classes["@mozilla.org/feed-processor;1"]
-                   .createInstance(Components.interfaces.nsIFeedProcessor);
-
-

Synoptique

- - - - - - -
void parseAsync(in nsIRequestObserver requestObserver, in nsIURI uri); -
void parseFromStream(in nsIInputStream stream, in nsIURI uri); -
void parseFromString(in AString str, in nsIURI uri); -
-

Attributs

- - - -
Attribut -Type -Description -
listener -nsIFeedResultListener - Le destinataire des évènements fournis par l'analyseur de flux. -
-

Méthodes

-

parseAsync()

-

Analyse un flux de façon asynchrone. L'appelant doit ensuite appeler la méthode nsIStreamListener du processeur pour piloter le processus d'analyse. Vous ne devez appeler aucune autre méthode d'analyse sur l'interface nsIFeedProcessor pendant une analyse asynchrone. -

-
 void parseAsync(
-   in nsIRequestObserver requestObserver,
-   in nsIURI uri
- );
-
-
Paramètres
-
<tt>requestObserver</tt> -
L'observateur à prévenir lorsque l'analyse commence et s'arrête. null est une valeur acceptée. -
<tt>uri</tt> -
L'URI de base par rapport à laquelle toutes les autres URI du flux seront résolues. -
-

parseFromStream()

-

Analyse un flux depuis une nsInputStream. -

-
 void parseFromStream(
-   in nsIInputStream stream,
-   in nsIURI uri
- );
-
-
Paramètres
-
<tt>stream</tt> -
Un pointeur vers le nsInputStream depuis lequel lire et analyser le flux. -
<tt>uri</tt> -
L'URI de base par rapport à laquelle toutes les autres URI du flux seront résolues. -
-

parseFromString()

-

Analyse un flux depuis une AString. -

-
 void parseFromString(
-   in AString str,
-   in nsIURI uri
- );
-
-
Paramètres
-
<tt>str</tt> -
La chaîne à analyser comme un flux. -
<tt>uri</tt> -
L'URI de base par rapport à laquelle toutes les autres URI du flux seront résolues. -
-

Voir également

-

nsIStreamListener, nsIFeedResultListener -


-Liens Interwikis -

diff --git a/files/fr/nsifeedprogresslistener/index.html b/files/fr/nsifeedprogresslistener/index.html deleted file mode 100644 index f6b4b032fa..0000000000 --- a/files/fr/nsifeedprogresslistener/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: nsIFeedProgressListener -slug: nsIFeedProgressListener -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedProgressListener ---- -

-L'interface nsIFeedProgressListener définit les fonctions de rappel utilisées pendant l'analyse d'un flux RSS ou Atom. Les programmes utilisant l'API d'accés au contenu de flux ne sont pas obligés d'implémenter ces fonctions ; elles sont optionnelles, mais vous permettent de fournir des informations en retour pendant le processus d'analyse. -


-

-
toolkit/components/feeds/public/nsiFeedListener.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsIFeedResultListener -

-

Synoptique

- - - - - - - - -
void handleEntry(in nsIFeedEntry entry, in nsIFeedResult result); -
void handleFeedAtFirstEntry(in nsIFeedResult result); -
void handleStartFeed(in nsIFeedResult result); -
void reportError(in AString errorText, in long lineNumber, in boolean bozo); -
-

Méthodes

-

handleEntry()

-

Appelée après l'analyse de chaque entrée ou élément. Si le document est une entrée ou un élément unique, la méthode handleFeedAtFirstEntry() n'aura pas encore été appelée, et la nsIFeedEntry reçue aura la valeur null parent. -

-
 void handleEntry(
-   in nsIFeedEntry entry,
-   in nsIFeedResult result
- );
-
-
Paramètres
-
<tt>entry</tt> -
Pointeur vers une nsIFeedEntry contenant des informations sur l'entrée qui vient d'être analysée. -
<tt>result</tt> -
Pointeur vers une nsIFeedResult contenant des informations sur l'entrée en cours d'analyse. -
-

handleFeedAtFirstEntry()

-

Appelée lorsque la première entrée ou le premier élément du flux est rencontré. Dans les flux Atom, toutes les données du flux doivent précéder les entrées ; dans les flux RSS ce n'est pas une obligation, mais c'est généralement respecté. En d'autres termes, lorsque cette méthode est appelée, il est très probable que toutes ou la plupart des métadonnées du flux ont été analysées et sont disponibles dans l'objet nsIFeedResult reçu. -

-
 void handleFeedAtFirstEntry(
-   in nsIFeedResult result
- );
-
-
Paramètres
-
<tt>result</tt> -
Une nsIFeedResult décrivant le flux lorsque la première entrée est trouvée, mais avant son traitement. -
-
Note : Si le type de flux est une entrée ou un élément unique, cet événement n'est jamais appelé.
-

handleStartFeed()

-

Appelée dès qu'un début acceptable d'un flux est détecté ; ceci informe votre code que le flux semble bien être un flux de news et non un autre type document. -

-
 void handleStartFeed(
-   in nsIFeedResult result
- );
-
-
Paramètres
-
<tt>result</tt> -
Un nsIFeedResult décrivant l'état du flux au début de son analyse. -
-

reportError()

-

Appelée par le processeur de flux lorsque se produit une erreur d'analyse XML fatale, ou si le document n'est pas un flux. -

-
 void reportError(
-   in AString errorText,
-   in long lineNumber,
-   in boolean bozo
- );
-
-

Chaque méthode reçoit comme entrée au moins un nsIFeedResult qui décrit l'état actuel du traitement. -

-

Voir également

-

nsIFeedResultListener -


-Liens Interwiki -

diff --git a/files/fr/nsifeedresult/index.html b/files/fr/nsifeedresult/index.html deleted file mode 100644 index ee3186b6c9..0000000000 --- a/files/fr/nsifeedresult/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: nsIFeedResult -slug: nsIFeedResult -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedResult ---- -

-

L'interface nsIFeedResult fournit un accès aux métadonnées d'analyse et HTTP d'un flux ou d'une entrée de flux. -


-

-
toolkit/components/feeds/public/nsIFeedResult.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsISupports -

-

Synoptique

- - -
void registerExtensionPrefix(in AString namespace, in AString prefix); -
-

Attributs

- - - - - - - - - - - - - -
Attribut -Type -Description -
bozo - boolean - L'analyseur de flux positionne le bit bozo lorsqu'un flux cause une erreur fatale pendant l'analyse XML. Il peut toujours y avoir des métadonnées ou des entrées analysées avant que l'erreur ne se produise. -
doc - nsIFeedContainer - Le flux ou l'entrée qui a été analysé. null si l'objet analysé n'est pas un flux. -
headers - nsIProperties - Les en-têtes de réponse HTTP qui accompagnent le flux. -
stylesheet - nsIURI - Une feuille de style XSLT disponible pour transformer la source en flux. Certains flux peuvent glisser cette information dans une instruction d'analyse. Il est généralement destiné à être utilisé par des clients conçus pour lire des flux spécifiques. -
uri - nsIURI - L'adresse depuis laquelle le flux a été extrait. -
version - AString - La version du flux ; null si l'objet analysé n'est pas un flux. Cette valeur peut être l'une des suivantes : -
atom, rss2, rss09, rss091, rss091userland, rss092, rss1, atom03, atomEntry, rssItem
-
-

Méthodes

-

registerExtensionPrefix()

-

Déclare un préfixe pour un espace de nommage utilisé pour accéder à une extension dans le flux ou l'entrée de flux. -

-
Attention: Cette méthode n'est pas implémentée à ce jour.
-
 void registerExtensionPrefix(
-   in AString namespace,
-   in AString prefix
- );
-
-
Paramètres
-
<tt>namespace</tt> -
L'espace de nommage pour l'extension. -
<tt>prefix</tt> -
Le préfixe utilisé pour accèder à l'extension. -
-

Voir également

-

nsISupports, nsIFeedContainer, nsIURI, nsIProperties -


-Lien interwiki -

diff --git a/files/fr/nsifeedresultlistener/index.html b/files/fr/nsifeedresultlistener/index.html deleted file mode 100644 index c7fbdc672c..0000000000 --- a/files/fr/nsifeedresultlistener/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: nsIFeedResultListener -slug: nsIFeedResultListener -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedResultListener ---- -

-

L'interface nsIFeedResultListener devrait être implémentée par les programmes pour recevoir des événements de l'analyseur de flux au fur et à mesure de l'analyse. -


-

-
toolkit/components/feeds/public/nsIFeedListener.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsISupports -

-

Synoptique

- - -
void handleResult(in nsIFeedResult result); -
-

Méthodes

-

handleResult()

-

Appelée quand l'analyse du flux est terminée. Même si une erreur se produit pendant le traitement, il peut y avoir des données du flux, ou même des entrées analysées avant l'apparition de l'erreur, disponibles et valides. Si vous ne désirez pas afficher la progression de l'analyse, c'est la seule méthode que vous avez besoin d'implémenter pour recevoir le flux analysé. -

-
 void handleResult(
-   in nsIFeedResult result
- );
-
-
Paramètres
-
<tt>result</tt> -
Un nsIFeedResult décrivant le flux analysé. -
-

Voir également

-

nsIFeedProgressListener, nsISupports -


-Lien Interwikis -

diff --git a/files/fr/nsifeedtextconstruct/index.html b/files/fr/nsifeedtextconstruct/index.html deleted file mode 100644 index d288fa34c4..0000000000 --- a/files/fr/nsifeedtextconstruct/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: nsIFeedTextConstruct -slug: nsIFeedTextConstruct -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIFeedTextConstruct ---- -

-

L'interface nsIFeedTextConstruct représente les champs texte d'un flux RSS ou Atom qui peuvent contenir du texte, du HTML ou du XHTML. Certains éléments d'extensions incluent également des paramètres "type", et cette interface peut être utilisée pour les représenter. -


-

-
toolkit/components/feeds/public/nsIFeedTextConstruct.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsISupports -

Implémentée par : @mozilla.org/feed-textconstruct;1, mais les utilisateurs n'ont généralement pas besoin de créer des instances directement. D'autres interfaces relatives aux flux, telles que nsIFeed, nsIFeedEntry et nsIFeedContainer ont des attributs qui retournent des objets implémentant nsIFeedTextConstruct -

-

Synoptique

- - - - -
nsIDOMDocumentFragment createDocumentFragment(in nsIDOMElement element); -
AString plainText(); -
-

Attributs

- - - - - - - - - -
Attribut -Type -Description -
base - nsIURI - Si l'attribut text contient du HTML ou du XHTML, les références relatives dans le contenu doivent être résolues par rapport à cette URI. -
lang - AString - La locale du texte (telle que « fr-FR » pour le français parlé en France). -
text - AString - Le contenu effectif. Cette chaîne peut contenir des balises si le type est « html » ou « xhtml ». -
type - AString - Le type du contenu décrit : « text », « html », ou « xhtml ». -
-

Méthodes

-

createDocumentFragment()

-

Crée un nouveau fragment de document sur un élément DOM donné, contenant le texte et, si l'attribut text contient du HTML ou du XHTML, son balisage. -

-
 nsIDOMDocumentFragment createDocumentFragment(
-   in nsIDOMElement element
- );
-
-
Paramètres
-
<tt>element</tt> -
L'élément dans lequel créer le nouveau fragment de document. -
-
Valeur retournée
-

Un nsIDocumentFragment contenant le texte et le marquage. -

-

plainText()

-

Retourne la partie uniquement texte du contenu, avec les balises supprimées et les entités décodées. -

-
 AString plainText();
-
-
Valeur retournée
-

La version « texte uniquement » du contenu de l'attribut text. Si l'attribut type est « text », cette méthode retourne la valeur de l'attribut text sans la modifier. -

-

Remarques

-

Si le type du document est « html » ou « xhtml », un caractère « < » représente le balisage. Pour afficher ce caractère, il faut utiliser une séquence d'échappement telle que « &lt; ». Si le type est « text », le caractère « < » se représente lui-même. -

-

Voir également

-

nsISupports, nsIDOMElement, nsIDocumentFragment -

diff --git a/files/fr/nsipromptservice/index.html b/files/fr/nsipromptservice/index.html deleted file mode 100644 index 7e0bc5406d..0000000000 --- a/files/fr/nsipromptservice/index.html +++ /dev/null @@ -1,701 +0,0 @@ ---- -title: nsIPromptService -slug: nsIPromptService -tags: - - Traduction_à_relire -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIPromptService ---- -
Cette page vient d'être traduite, mais elle a besoin d'un relecteur différent du traducteur. Pensez également à toujours vérifier le contenu avec sa toute dernière version en anglais.
- - - -

Résumé

- -

nsIPromptService peut être utilisé pour afficher de simples boîtes de dialogue. Ses méthodes devrait être utilisées de préférence à la place de window.alert(), window.confirm(), et des autres fonctions similaires du DOM.

- -

Il est possible de définir les touches de raccourcis pour les boutons en insérant une esperluette ("&") devant le caractère correspondant. Si vous souhaitez insérer cette esperluette directement dans le texte du bouton (c'est-à-dire dans la valeur de l'attribut label, sans utiliser de déclaration d'entité XML), utilisez-en deux ("&&").

- -
Certaines des méthodes de cette interface utilisent des paramètres en entrée/sortie. En C++, les paramètres en sortie sont représentés par des pointeurs de pointeurs (void**). En JavaScript, ce type de paramètre nécessite plus de travail car vous ne pouvez directement récupérer des paramètres en sortie. Vous devez les englober dans un objet. Cet objet peut être vide ou bien comporter un attribut value dont la valeur correspond au type du paramètre en sortie.
-Pour de plus amples informations sur les paramètres en sortie en JavaScript, voir Working with out parameters.
- - - -
-
embedding/components/windowwatcher/public/nsIPromptService.idlScriptable
-Please add a summary to this article. - -
  Last changed in Gecko 1.7.5
-
- - - -

Hérite de : nsISupports

- -

Implémenté par : @mozilla.org/embedcomp/prompt-service;1. Pour créer une instance, faire comme suit :

- -
var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
-              .getService(Components.interfaces.nsIPromptService);
- -

Aperçu des méthodes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void alert(in nsIDOMWindow aParent, in wstring aDialogTitle, in wstring aText);
void alertCheck(in nsIDOMWindow aParent, in wstring aDialogTitle,
-                 in wstring aText, in wstring aCheckMsg, inout boolean aCheckState);
boolean confirm(in nsIDOMWindow aParent, in wstring aDialogTitle, in wstring aText);
boolean confirmCheck(in nsIDOMWindow aParent, in wstring aDialogTitle, in wstring aText,
-                      in wstring aCheckMsg, inout boolean aCheckState);
PRInt32 confirmEx(in nsIDOMWindow aParent,in wstring aDialogTitle,in wstring aText,
-                   in unsigned long aButtonFlags,in wstring aButton0Title,
-                   in wstring aButton1Title,in wstring aButton2Title,in wstring aCheckMsg,
-                   inout boolean aCheckState);
boolean prompt(in nsIDOMWindow aParent, in wstring aDialogTitle, in wstring aText,
-                inout wstring aValue, in wstring aCheckMsg, inout boolean aCheckState);
boolean promptUsernameAndPassword(in nsIDOMWindow aParent, in wstring aDialogTitle,
-                                   in wstring aText, inout wstring aUsername,
-                                   inout wstring aPassword, in wstring aCheckMsg,
-                                   inout boolean aCheckState);
boolean promptPassword(in nsIDOMWindow aParent, in wstring aDialogTitle, in wstring aText,
-                        inout wstring aPassword, in wstring aCheckMsg, inout boolean aCheckState);
boolean select(in nsIDOMWindow aParent, in wstring aDialogTitle, in wstring aText,
-                in  PRUint32 aCount, [array, size_is(aCount)] in wstring aSelectList,
-                out long aOutSelection);
- -

Constantes

- -

Les drapeaux décris ci-dessous sont combinés pour former le paramètre aButtonFlags passé à la méthode confirmEx(). Tous les drapeaux sont des constantes de type unsigned long et sont accessibles via Components.interfaces.nsIPromptService.flagname en JavaScript et nsIPromptService::flagname en C++.

- -

Drapeaux de position de bouton

- - - - - - - - - - - - - - - - - - - - - - - - -
ConstanteValeurDescription
BUTTON_POS_01
BUTTON_POS_1256
BUTTON_POS_265536
- -

Drapeaux de titre de bouton 

- -

Ces drapeaux sont utilisés conjointement avec les drapeaux de position pour modifier les textes des boutons de l'invite de commande.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstanteValeurDescription
BUTTON_TITLE_OK1
BUTTON_TITLE_CANCEL2
BUTTON_TITLE_YES3
BUTTON_TITLE_NO4
BUTTON_TITLE_SAVE5
BUTTON_TITLE_DONT_SAVE6
BUTTON_TITLE_REVERT7
BUTTON_TITLE_IS_STRING127
- -

Drapeaux de bouton par défaut

- -

Ces drapeaux sont utilisés pour spécifier le bouton par défaut.

- - - - - - - - - - - - - - - - - - - - - - - - -
ConstanteValeurDescription
BUTTON_POS_0_DEFAULT0
BUTTON_POS_1_DEFAULT16777216
BUTTON_POS_2_DEFAULT33554432
- -

BUTTON_DELAY_ENABLE

- - - - - - - - - - - -
-

Le drapeau BUTTON_DELAY_ENABLE désactive les boutons. Ils sont activés après un certaine durée. Son interprétation peut varier, puisque son seul intérêt est de s'assurer que l'utilisateur ne ferme pas trop rapidement une boîte de dialogue renseignant sur des informations sensibles (avertissement concernant la sécurité etc.). À proprement parlé, il peut être ignoré.

- -

Un délai peut être utile non seulement pour donner plus de temps de réflexion à l'utilisateur avant d'agir, mais également comme mesure de sécurité contre les sites internet qui créent intentionnellement une situation de compétition. Par exemple, un invite de commande affichant un message d'avertissement concernant la sécurité est affiché de manière inattendue et le bouton de validation est actionné involontairement.

- - - - - - - - - - - - -
ConstanteValeur
BUTTON_DELAY_ENABLE67108864
-
-

Situation de compétition dans un circuit logique. t1 and t2 représentent les délais de propagation des éléments logiques. Lorsque la valeur en entrée (A) est modifiée, le circuit produit en sortie in pic d'une durée t1.

-
- -

Drapeaux de boutons standards

- - - - - - - - - - - - - - - - - - - -
ConstanteValeurDescription
STD_OK_CANCEL_BUTTONS513 -

 boutons OK/Annuler.

- -

(BUTTON_TITLE_OK *BUTTON_POS_0) +(BUTTON_TITLE_CANCEL * BUTTON_POS_1)

-
STD_YES_NO_BUTTONS1027 -

 Boutons Oui/Non.

- -

(BUTTON_TITLE_YES *BUTTON_POS_0) +(BUTTON_TITLE_NO * BUTTON_POS_1)

-
- -

Méthodes

- -

alert()

- -

Affiche une boîte de dialogue avec un bouton de confirmation. Cette méthode est similaire window.alert(), excepté qu'elle permet de spécifier le titre de la boîte de dialogue. Vous devriez utiliser cette méthode à la place de window.alert.

- -
void alert(
-  in nsIDOMWindow aParent,
-  in wstring      aDialogTitle,
-  in wstring      aText
-);
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue, ou null, dans le cas ou le parent est nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-                        .getService(Components.interfaces.nsIPromptService);
-
-prompts.alert(null, \"Title of this Dialog\", \"Hello! You have now been alerted.\");
- -

AlertExample.png

- -

alertCheck()

- -

Affiche une boîte de dialogue avec un bouton de confirmation et une case à cocher accompagnée de son libellé.

- -
void alertCheck(
-  in    nsIDOMWindow aParent,
-  in    wstring      aDialogTitle,
-  in    wstring      aText,
-  in    wstring      aCheckMsg,
-  inout boolean      aCheckState
-);
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
aCheckMsg
-
Le libellé de la case à cocher.
-
aCheckState
-
Contient l'état initial de la case à cocher, puis son état final une fois la boîte de dialogue fermée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-
-var check = {value: false}; // case à cocher décochée par défaut
-
-prompts.alertCheck(null, \"Title of this Dialog\", \"Hello! You have now been alerted.\",
-\"And this is a checkbox\", check);
-
-// check.value vaut true si la case est cochée, false sinon
- -

- -

confirm()

- -

Affiche une boîte de dialogue avec un bouton OK et un bouton Annuler.

- -
boolean confirm(
-  in nsIDOMWindow aParent,
-  in wstring       aDialogTitle,
-  in wstring       aText
-);
-
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
- -

Valeur retournée

- -

true si le bouton OK est actionné, false si le bouton Annuler est actionné.

- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-
-var result = prompts.confirm(null, \"Title of this Dialog\", \"Are you sure?\");
-
-// result vaut true si le bouton OK est actionné, false si c'est le bouton Annuler
- -

confirmCheck()

- -

Affiche une boîte de dialogue avec un bouton OK et un bouton Annuler ainsi qu'une case à coché accompagnée de son libellé.

- -
boolean confirmCheck(
-  in nsIDOMWindow aParent,
-  in wstring aDialogTitle,
-  in wstring aText,
-  in wstring aCheckMsg,
-  inout boolean aCheckState
-);
-
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
aCheckMsg
-
Le libellé de la case à cocher. Si null, la case à cocher ne sera pas affichée.
-
aCheckState
-
Contient l'état initial de la case à cocher, puis son état final une fois la boîte de dialogue fermée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
- -

Valeur retournée

- -

true si le bouton OK est actionné, false si le bouton Annuler est actionné.

- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-
-var check = {value: true}; // case à cocher cochée par défaut
-
-var result = prompts.confirmCheck(null, \"Title of this Dialog\", \"Are you sure?\",
-\"Don't ask again\", check);
-
-// check.value vaut true si la case à cocher est cochée ET que le bouton OK est actionné,
-// false si le bouton Annuler est actionné.
- -

confirmEx()

- -

Ouvre une boîte de dialogue comprenant 3 boutons et éventuellement une case à cocher accompagnée de son libellé.

- -

Les boutons sont numérotés de 0 à 2. L'application peut décider d'afficher ces boutons de gauche à droite  ou de droite à gauche. Le bouton 0 est activé par défaut à moins qu'un drapeau de bouton par défaut ne soit spécifié.

- -

Un bouton peut utiliser un libellé prédéfini, spécifié par l'un des drapeaux de libellé de bouton. Chaque libellé peut être multiplié par un drapeau de position de bouton pour assigner le libellé à un bouton particulié. Lorsque le drapeau BUTTON_TITLE_IS_STRING est utilisé pour un bouton, le paramètre de libellé de ce bouton est utilisé. Si la valeur de la position d'un bouton est à 0, le bouton ne sera pas affiché.

- -

L'exemple suivant créé une boîte de dialogue avec un bouton OK et un bouton avec un libellé personnalisé :

- -

aButtonFlags = (BUTTON_POS_0) * (BUTTON_TITLE_OK) +

- -

               (BUTTON_POS_1) * (BUTTON_TITLE_IS_STRING) +

- -

                BUTTON_POS_1_DEFAULT;

- -
confirmEx retourne toujours 1 lorsque l'utilisateur ferme la boîte de dialogue en utilisant le bouton de fermeture de la barre de titre ! bug 345067
- -
PRInt32 confirmEx(
-  in nsIDOMWindow  aParent,
-  in wstring aDialogTitle,
-  in wstring aText,
-  in unsigned long aButtonFlags,
-  in wstring aButton0Title,
-  in wstring aButton1Title,
-  in wstring aButton2Title,
-  in wstring aCheckMsg,
-  inout boolean aCheckState
-);
-
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
aButtonFlags
-
aButtonFlags est une combinaison de drapeaux de boutons.
-
aButton0Title
-
Libellé du bouton 0 si la valeur (BUTTON_TITLE_IS_STRING*BUTTON_TITLE_POS_0) est utilisé pour le paramètre aButtonFlags.
-
aButton1Title
-
Libellé du bouton 1 si la valeur (BUTTON_TITLE_IS_STRING*BUTTON_TITLE_POS_1) est utilisé pour le paramètre aButtonFlags.
-
aButton2Title
-
Libellé du bouton 2 si la valeur (BUTTON_TITLE_IS_STRING*BUTTON_TITLE_POS_2) est utilisé pour le paramètre aButtonFlags.
-
aCheckMsg
-
Le libellé de la case à cocher.
-
aCheckState
-
Contient l'état initial de la case à cocher, puis son état final une fois la boîte de dialogue fermée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
- -

Valeur retournée

- -

L'index du bouton actionné.

- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-
-var check = {value: false}; // case à cocher décochée par défaut
-var flags = prompts.BUTTON_POS_0 * prompts.BUTTON_TITLE_SAVE +
-prompts.BUTTON_POS_1 * prompts.BUTTON_TITLE_IS_STRING +
-prompts.BUTTON_POS_2 * prompts.BUTTON_TITLE_CANCEL;
-// Ces drapeaux créent 3 boutons. Le premier est un bouton \"Save\", le
-// second la valeur de aButtonTitle1, et le troisième un bouton \"Cancel\"
-
-var button = prompts.confirmEx(null, \"Title of this Dialog\", \"What do you want to do?\",
-flags, \"\", \"Button 1\", \"\", null, check);
-
-// La case à cocher est cachée et button contient l'index du bouton acctionné,
-// 0, 1, ou 2.
- -

- -

prompt()

- -

Ouvre une boîte de dialogue contenant un champ texte et éventuellement une case à cocher accompagnée de son libellé.

- -
boolean prompt(
-  in nsIDOMWindow aParent,
-  in wstring aDialogTitle,
-  in wstring aText,
-  inout wstring aValue,
-  in wstring aCheckMsg,
-  inout boolean aCheckState
-);
-
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
aValue
-
Contient la valeur par défaut du champ texte lors de l'appel de la méthode (la valeur null peut être utilisée pour un champ vide). Lorsque la méthode retourne le résultat, si l'utilisateur a actionné le bouton OK, ce paramètre contient la nouvelle valeur. Sinon, la valeur n'est pas modifiée. Si vous appelez cette méthode en JavaScript, vous devez englober cet argument dans un objet dont l'attribut value est une chaîne de caractère (ou utiliser un objet vide).
-
aCheckMsg
-
Le libellé de la case à cocher. Si null, la case à cocher ne sera pas affichée.
-
aCheckState
-
Contient l'état initial de la case à cocher, puis son état final une fois la boîte de dialogue fermée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
- -

Valeur retournée

- -

true si le bouton OK est actionné, false si le bouton Annuler est actionné.

- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-
-var check = {value: false}; // case à cocher décochée par défaut
-var input = {value: \"Bob\"}; // valeur par défaut du champ texte à \"Bob\"
-var result = prompts.prompt(null, \"Title\", \"What is your name?\", input, null, check);
-
-// result vaut true si le bouton OK est actionné, false si c'est le bouton Cancel.
-// input.value content la valeur du champ texte si le bouton OKest actionné.
- -

promptUsernameAndPassword()

- -

Ouvre une boîte dialogue contenant un champ texte, un champ de mot de passe et éventuellement une case à cocher accompagnée de son libellé.

- -
boolean promptUsernameAndPassword(
-  in nsIDOMWindow aParent,
-  in wstring aDialogTitle,
-  in wstring aText,
-  inout wstring aUsername,
-  inout wstring aPassword,
-  in wstring aCheckMsg,
-  inout boolean aCheckState
-);
-
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
aUsername
-
Nom d'utilisateur par défaut (valeur nulle acceptée). Si l'utilisateur a fermé la fenêtre en actionnant le bouton OK, ce paramètre contient la nouvelle valeur saisie. Sinon, la valeur n'est pas modifiée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
aPassword
-
Mot de passe par défaut (valeur nulle acceptée). Si l'utilisateur a fermé la fenêtre en actionnant le bouton OK, ce paramètre contient la nouvelle valeur saisie. Sinon, la valeur n'est pas modifiée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
-
aCheckMsg
-
Le libellé de la case à cocher. Si null, la case à cocher ne sera pas affichée.
-
aCheckState
-
Contient l'état initial de la case à cocher, puis son état final une fois la boîte de dialogue fermée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
-
- -

Valeur retournée

- -

true si le bouton OK est actionné, false si le bouton Annuler est actionné.

- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-
-var username = {value: \"user\"}; // nom d'utilisateur par défaut
-var password = {value: \"pass\"}; // mot de passe par défaut
-var check = {value: true}; // case à cocher cochée par défaut
-var result = prompts.promptUsernameAndPassword(null, \"Title\", \"Enter username and password:\",\nusername, password, \"Save\", check);
-
-// result vaut true si le bouton OK est actionné, false si c'est le bouton Cancel.
-// username.value, password.value, et check.value contiennent les nouvelles valeurs saisies si le bouton OK est actionné.
- -

- -

promptPassword()

- -

Ouvre une boîte de dialogue contenant un champ mot de passe et éventuellement une case à cocher accompagnée de son libellé.

- -
boolean promptPassword(
-  in nsIDOMWindow aParent,
-  in wstring aDialogTitle,
-  in wstring aText,
-  inout wstring aPassword,
-  in wstring aCheckMsg,
-  inout boolean aCheckState
-);
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
aPassword
-
Mot de passe par défaut (valeur nulle acceptée). Si l'utilisateur a fermé la fenêtre en actionnant le bouton OK, ce paramètre contient la nouvelle valeur saisie. Sinon, la valeur n'est pas modifiée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
aCheckMsg
-
Le libellé de la case à cocher. Si null, la case à cocher ne sera pas affichée.
-
aCheckState
-
Contient l'état initial de la case à cocher, puis son état final une fois la boîte de dialogue fermée. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
- -

Valeur retournée

- -

true si le bouton OK est actionné, false si le bouton Annuler est actionné.

- -
Exemple
- -
-
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-var password = {value: \"pass\"}; // mot de passe par défaut
-var check = {value: true}; // case à cocher cochée par défaut
-var result = prompts.promptPassword(null, \"Title\", \"Enter password:\", password, null, check);
-
-// result vaut true si le bouton OK est actionné, false si c'est le bouton Cancel.
-// password.value contient la nouvelle valeur saisie si le bouton OK est actionné. }} La case à cocher n'est pas affichée.
- - -
- -

select()

- -

Ouvre une boîte de dialogue contenant une liste de chaîne de caractères. L'utilisateur ne peut en sélectionner qu'une seule.

- -
boolean select(
-  in  nsIDOMWindow aParent,
-  in  wstring       aDialogTitle,
-  in  wstring       aText,
-  in  PRUint32     aCount,
-  [array, size_is(aCount)] in wstring aSelectList,
-  out long         aOutSelection
-);
-
- -

Paramètres

- -
-
aParent
-
La fenêtre parente de la boîte de dialogue. Si null, la fenêtre parente sera nsIWindowWatcher.activeWindow.
-
aDialogTitle
-
Le titre de la boîte de dialogue.
-
aText
-
Le texte de la boîte de dialogue.
-
aCount
-
Taille du tableau aSelectList.
-
aSelectList
-
Liste de chaînes de caractères.
-
aOutSelection
-
Contient l'index de l'élément sélectionné dans la liste lorsque le bouton OK est actionné. Si vous utilisez cette méthode en Javascript, vous devez englober cet argument dans un objet dont la propriété value est un booléen spécifiant l'état initial (ou utiliser un objet vide).
-
- -

Valeur retournée

- -

true si le bouton OK est actionné, false si le bouton Annuler est actionné.

- -

Exemple

- -
var prompts = Components.classes[\"@mozilla.org/embedcomp/prompt-service;1\"]
-.getService(Components.interfaces.nsIPromptService);
-
-var items = [\"Hello\", \"Welcome\", \"Howdy\", \"Hi\", \":)\"]; // liste d'éléments
-
-var selected = {};
-
-var result = prompts.select(null, \"Title\", \"What greeting do you want?\", items.length, items, selected);
-
-// result vaut true si le bouton OK est actionné, false si c'est le bouton Cancel.
-// selected contient l'index de l'élément sélectionné. Accédez à cet élément avec selected items[selected.value].
- -

selectExample.png

- -

Voir également

- - diff --git a/files/fr/nsiscriptableunescapehtml/index.html b/files/fr/nsiscriptableunescapehtml/index.html deleted file mode 100644 index 6680ad6454..0000000000 --- a/files/fr/nsiscriptableunescapehtml/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: nsIScriptableUnescapeHTML -slug: nsIScriptableUnescapeHTML -tags: - - Interfaces - - Référence_de_l'API_XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIScriptableUnescapeHTML ---- -

-

L'interface nsIScriptableUnescapeHTML est une interface utilitaire qui décode les chaînes HTML. -


-

-
toolkit/components/feeds/public/nsIScriptableUnescapeHTML.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsISupports -

Implémenté par @mozilla.org/feed-unescapehtml;1 comme un service : -

-
var gUnescapeHTML = Components.classes["@mozilla.org/feed-unescapehtml;1"]
-                              .getService(Components.interfaces.nsIScriptableUnescapeHTML);
-
-


-

-

Synoptique

- - - - -
AString [[#unescape()|unescape}}(in AString src); -
nsIDOMDocumentFragment parseFragment(in AString fragment, in PRBool isXML, in nsIURI baseURI, in nsIDOMElement element); -
-

Méthodes

-

unescape()

-

Convertit toutes les entités d'une chaîne en caractères unicode. -

-
 AString unescape(
-   in AString src
- );
-
-
Paramètres
-
<tt>src</tt> -
Pointeur vers la chaîne HTML à décoder. -
-
Valeur retournée
-

La version décodée de la chaîne. -

-
Exceptions possibles
-
NS_ERROR_FAILURE -
Impossible de décoder la chaîne. -
-

parseFragment()

-

Ajoute une chaîne spécifiée à un élément DOM existant. C'est la version spécifique aux flux de nsContentUtils::CreateContextualFragment. -

-
 nsIDOMDocumentFragment parseFragment(
-   in AString fragment,
-   in PRBool isXML,
-   in nsIURI baseURI,
-   in nsIDOMElement element
- );
-
-
Paramètres
-
<tt>fragment</tt> -
Pointeur vers la chaîne à ajouter à l'élément <tt>element</tt>. -
<tt>isXML</tt> -
Mettre la valeur à true si <tt>fragment</tt> est une chaîne XML ; autrement, la mettre à false. -
<tt>baseURI</tt> -
Pointeur vers l'URI de base, à partir de laquelle sont résolues toutes les URI présentes dans le fragment. Ce paramètre est ignoré si isXML vaut false. -
<tt>element</tt> -
Pointeur vers le [[nsIDOMElement}} auquel ajouter le fragment. -
-
Valeur retournée
-

Un nsIDOMDocumentFragment de l'élément auquel le texte à suivre sera ajouté. -

-
Exceptions possibles
-
<code>NS_ERROR_FAILURE -
Impossible d'ajouter le texte à l'élément. -
-

Voir également

-

nsISupports, nsIDOMDocumentFragment, nsIURI, nsIDOMElement -


-Lien interwiki -

diff --git a/files/fr/nsisessionstore/index.html b/files/fr/nsisessionstore/index.html deleted file mode 100644 index c51a3a7779..0000000000 --- a/files/fr/nsisessionstore/index.html +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: nsISessionStore -slug: nsISessionStore -tags: - - Interfaces - - 'Interfaces:Scriptable' - - Référence_de_l'API_XPCOM - - XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsISessionStore ---- -

-

L'interface nsISessionStore fournit un moyen aux extensions ou a tout autre morceau de code, de stocker des données en association avec les sessions du navigateur, les onglets et les fenêtres. Voir également l'article Session store API. -


-

-
browser/components/sessionstore/nsISessionStore.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8.1 (Firefox 2 / Thunderbird 2 / SeaMonkey 1.1)
-
-

Hérité de : nsISupports -

-

Synoptique

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void deleteTabValue(in nsIDOMNode aTab, in AString aKey); -
void deleteWindowValue(in nsIDOMWindow aWindow, in AString aKey); -
AString getBrowserState(); -
unsigned long getClosedTabCount(in nsIDOMWindow aWindow); -
AString getClosedTabData(in nsIDOMWindow aWindow); -
AString getTabValue(in nsIDOMNode aTab, in AString aKey); -
AString getWindowState(in nsIDOMWindow aWindow); -
AString getWindowValue(in nsIDOMWindow aWindow, in AString aKey); -
void init(in nsIDOMWindow aWindow); -
void persistTabAttribute(in AString aName); -
void setBrowserState(in AString aState); -
void setTabValue(in nsIDOMNode aTab, in AString aKey, in AString aStringValue); -
void setWindowState(in nsIDOMWindow aWindow, in AString aState, in boolean aOverwrite); -
void setWindowValue(in nsIDOMWindow aWindow, in AString aKey, in AString aStringValue); -
void undoCloseTab(in nsIDOMWindow aWindow, in unsigned long aIndex); -
-

Méthodes

-

deleteTabValue()

-

Efface une valeur de la fenêtre spécifiée. -

-
 void deleteTabValue(
-   in nsIDOMNode aTab,
-   in AString aKey
- );
-
-
Paramètres
-
<tt>aTab</tt> -
L'onglet pour lequel effacer la valeur. -
<tt>aKey</tt> -
La clef dont la valeur doit être effacée. -
-

deleteWindowValue()

-

Efface une valeur de la fenêtre spécifiée. -

-
 void deleteWindowValue(
-   in nsIDOMWindow aWindow,
-   in AString aKey
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre dans laquelle effacer la valeur. -
<tt>aKey</tt> -
La clef dont la valeur doit être effacée. -
-

getBrowserState()

-

Retourne l'état actuel du navigateur, comprenant tous les onglets ouverts dans toutes les fenêtres. -

-
 AString getBrowserState();
-
-
Valeur retournée
-

Une chaîne JSON représentant l'état actuel de la session. -

-

getClosedTabCount()

-

Retourne le nombre total d'onglets pouvant être restauré pour une fenêtre donnée. -

-
 unsigned long getClosedTabCount(
-   in nsIDOMWindow aWindow
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre pour laquelle le nombre d'onglets pouvant être restaurés doit être retourné. -
-
Valeur retournée
-

Le nombre d'onglets de la fenêtre pouvant être restaurés. -

-

getClosedTabData()

-

Retourne la liste des onglets fermés pour une fenêtre spécifiée. -

-
 AString getClosedTabData(
-   in nsIDOMWindow aWindow
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre pour laquelle la liste des onglets fermés doit être retournée. -
-
Valeur retournée
-

Une chaîne JSON représentant la liste des onglets fermés dans la fenêtre spécifiée dans <tt>aWindow</tt>. La liste est classée dans l'ordre dernier ouvert/Premier fermé (LIFO), ainsi le premier élément de la liste est le dernier onglet qui a été fermé. -

-

getTabValue()

-

Retourne la valeur correspondante à une clef d'une fenêtre donnée. -

-
 AString getTabValue(
-   in nsIDOMNode aTab,
-   in AString aKey
- );
-
-
Paramètres
-
<tt>aTab</tt> -
L'onglet pour lequel récupérer la valeur. -
<tt>aKey</tt> -
La clef dont la valeur correspondante doit être retournée. -
-
Valuer retournée
-

La valeur de la chaîne précédemment assignée à <tt>aKey</tt> par setTabValue(). -

-

getWindowState()

-

Retourne l'état actuel de la fenêtre de navigateur spécifiée. -

-
 AString getWindowState(
-   in nsIDOMWindow aWindow
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre du navigateur pour laquelle l'état doit être retourné. -
-
Valeur retournée
-

Une chaîne JSON représentant l'état de la session qui contient uniquement la fenêtre spécifiée dans <tt>aWindow</tt>. -

-

getWindowValue()

-

Retourner la valeur de la chaîne associée à une clef donnée pour une fenêtre. -

-
 AString getWindowValue(
-   in nsIDOMWindow aWindow,
-   in AString aKey
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre pour laquelle la valeur doit être récupérée. -
<tt>aKey</tt> -
La clef dont la valeur correspondante doit être récupérée. -
-
Valeur retournée
-

La valeur de la chaîne précédemment sauvegardée pour la clef spécifiée, ou une chaîne vide si aucune valeur n'a été définie pour cette clef. -

-

init()

-

Initialise le service de gestion de sessions. -

-
Note : Cette fonction est uniquement destinée à être utilisée par le navigateur ; les extensions ne devraient pas l'utiliser.
-
 void init(
-   in nsIDOMWindow aWindow
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre pour laquelle initialiser le service. -
-

setBrowserState()

-

Définit l'état actuel du navigateur. -

-
 void setBrowserState(
-   in AString aState
- );
-
-
Paramètres
-
<tt>aState</tt> -
Une chaîne JSON représentant l'état de session à utiliser. -
-
Note : Appeler setBrowserState() remplace immédiatement la session courante, en restaurant l'état complet de l'application dans l'état indiqué par le paramètre <tt>aState</tt>.
-

persistTabAttribute()

-

Définit le nom d'un attribut d'onglet à sauvegarder et à restaurer pour tous les onglets XUL. -

-
 void persistTabAttribute(
-   in AString aName
- );
-
-
Note : Actuellement, il n'y a aucun moyen de récupérer et de choisir les onglets pour lesquels appliquer des attributs persistants. Cette méthode affecte tous les onglets sans discrimination.
-
Paramètres
-
<tt>aName</tt> -
Le nom de l'attribut à sauvegarder et à restaurer pour tous les onglets. -
-

setTabValue()

-

Applique la valeur de la clef spécifiée à un onglet. -

-
 void setTabValue(
-   in nsIDOMNode aTab,
-   in AString aKey,
-   in AString aStringValue
- );
-
-
Paramètres
-
<tt>aTab</tt> -
L'onglet pour lequel appliquer la valeur. -
<tt>aKey</tt> -
La clef dont la valeur doit être appliquée. -
<tt>aStringValue</tt> -
Une chaîne à définir comme étant la valeur de la clef <tt>aKey</tt>. Vous pouvez utiliser la méthode toSource() sur des objets JavaScript, ou la fonction eval(), pour assigner comme valeur des données plus complexes (voire des objets entiers). -
-

setWindowState()

-

Applique la valeur enregistrée donnée à l'état de la fenêtre spécifiée. -

-
 void setWindowState(
-   in nsIDOMWindow aWindow,
-   in AString aState,
-   in boolean aOverwrite
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre du navigateur dont l'état doit être défini par celui indiqué dans <tt>aState</tt>. -
<tt>aState</tt> -
L'état de sauvegarde à appliquer à la fenêtre spécifiée. -
<tt>aOverwrite</tt> -
Si le paramètre est égal à true, tous les onglets existants sont fermés et remplacés par ceux contenus dans le paramètre <tt>aState</tt>. S'il est égal à false, les onglets contenus dans <tt>aState</tt> sont ajoutés à la suite de ceux déjà ouverts dans la fenêtre. -
-

setWindowValue()

-

Applique la valeur correspondante à une clef donnée pour la fenêtre spécifiée. -

-
 void setWindowValue(
-   in nsIDOMWindow aWindow,
-   in AString aKey,
-   in AString aStringValue
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre pour laquelle la valeur doit être appliquée. -
<tt>aKey</tt> -
La clef dont la valeur doit être appliquée. -
<tt>aStringValue</tt> -
Une chaîne à appliquer telle que la valeur de la clef <tt>aKey</tt>. Vous pouvez utiliser la méthode toSource() sur des objets JavaScript, ou la fonction eval(), pour assigner comme valeur des données plus complexes (voire même des objets entiers). -
-

undoCloseTab()

-

Rouvre un onglet fermé dans la fenêtre spécifée. -

-
 void undoCloseTab(
-   in nsIDOMWindow aWindow,
-   in unsigned long aIndex
- );
-
-
Paramètres
-
<tt>aWindow</tt> -
La fenêtre dans laquelle rouvrir un onglet précédemment fermé. -
<tt>aIndex</tt> -
Le numéro d'index de l'onglet à restaurer. Cette valeur doit être comprise entre 0 et la valeur retournée par getClosedTabCount() diminuée de 1. La liste des onglets fermés est stockée dans l'ordre dernier ouvert/premier fermé (LIFO), ainsi l'onglet d'index 0 est le dernier à avoir été fermé. -
-

Voir également

-

nsISupports -

Interwikis Languages Links -

diff --git a/files/fr/nspr/about_nspr/index.html b/files/fr/nspr/about_nspr/index.html deleted file mode 100644 index bf01c71bf1..0000000000 --- a/files/fr/nspr/about_nspr/index.html +++ /dev/null @@ -1,449 +0,0 @@ ---- -title: About NSPR -slug: NSPR/About_NSPR -tags: - - NeedsTranslation -translation_of: Mozilla/Projects/NSPR/About_NSPR ---- - - - - -

NetScape Portable Runtime (NSPR) assure l'indépendance de la plate-forme pour les installations de système d'exploitation non-GUI. Ces fonctionnalités comprennent les threads, la synchronisation des threads, les E / S normales sur les fichiers et le réseau, la synchronisation des intervalles et l'heure du calendrier, la gestion de la mémoire de base (malloc et gratuite) et la liaison de bibliothèques partagées.

- -

Histoire

- -

A good portion of the library's purpose, and perhaps the primary purpose in the Gromit environment, was to provide the underpinnings of the Java VM, more or less mapping the sys layer that Sun defined for the porting of the Java VM to various platforms. NSPR went beyond that requirement in some areas and since it was also the platform independent layer for most of the servers produced by Netscape. It was expected and preferred that existing code be restructured and perhaps even rewritten in order to use the NSPR API. It is not a goal to provide a platform for the porting into Netscape of externally developed code.

- -

At the time of writing the current generation of NSPR was known as NSPR20. The first generation of NSPR was originally conceived just to satisfy the requirements of porting Java to various host environments. NSPR20, an effort started in 1996, built on that original idea, though very little is left of the original code. (The "20" in "NSPR20" does not mean "version 2.0" but rather "second generation".) Many of the concepts have been reformed, expanded, and matured. Today NSPR may still be appropriate as the platform dependent layer under Java, but its primary application is supporting clients written entirely in C or C++.

- -

How It Works

- -

NSPR's goal is to provide uniform service over a wide range of operating system environments. It strives to not export the lowest common denominator, but to exploit the best features of each operating system on which it runs, and still provide a uniform service across a wide range of host offerings.

- -

Threads

- -

Threads are the major feature of NSPR. The industry's offering of threads is quite sundry. NSPR, while far from perfect, does provide a single API to which clients may program and expect reasonably consistent behavior. The operating systems provide everything from no concept of threading at all up to and including sophisticated, scalable and efficient implementations. NSPR makes as much use of what the systems offer as it can. It is a goal of NSPR that NSPR impose as little overhead as possible in accessing those appropriate system features.

- -

Thread synchronization

- -

Thread synchronization is loosely based on Monitors as described by C.A.R. Hoare in Monitors: An operating system structuring concept , Communications of the ACM, 17(10), October 1974 and then formalized by Xerox' Mesa programming language ("Mesa Language Manual", J.G. Mitchell et al, Xerox PARC, CSL-79-3 (Apr 1979)). This mechanism provides the basic mutual exclusion (mutex) and thread notification facilities (condition variables) implemented by NSPR. Additionally, NSPR provides synchronization methods more suited for use by Java. The Java-like facilities include monitor reentrancy, implicit and tightly bound notification capabilities with the ability to associate the synchronization objects dynamically.

- -

I/O

- -

NSPR's I/O is a slightly augmented BSD sockets model that allows arbitrary layering. It was originally intended to export synchronous I/O methods only, relying on threads to provide the concurrency needed for complex applications. That method of operation is preferred though it is possible to configure the network I/O channels as non-blocking in the traditional sense.

- -

Network addresses

- -

Part of NSPR deals with manipulation of network addresses. NSPR defines a network address object that is Internet Protocol (IP) centric. While the object is not declared as opaque, the API provides methods that allow and encourage clients to treat the addresses as polymorphic items. The goal in this area is to provide a migration path between IPv4 and IPv6. To that end it is possible to perform translations of ASCII strings (DNS names) into NSPR's network address structures, with no regard to whether the addressing technology is IPv4 or IPv6.

- -

Time

- -

Timing facilities are available in two forms: interval timing and calendar functions.

- -

Interval timers are based on a free running, 32-bit, platform dependent resolution timer. Such timers are normally used to specify timeouts on I/O, waiting on condition variables and other rudimentary thread scheduling. Since these timers have finite namespace and are free running, they can wrap at any time. NSPR does not provide an epoch , but expects clients to deal with that issue. The granularity of the timers is guaranteed to be between 10 microseconds and 1 millisecond. This allows a minimal timer period in of approximately 12 hours. But in order to deal with the wrap-around issue, only half that namespace may be utilized. Therefore, the minimal usable interval available from the timers is slightly less than six hours.

- -

Calendar times are 64-bit signed numbers with units of microseconds. The epoch for calendar times is midnight, January 1, 1970, Greenwich Mean Time. Negative times extend to times before 1970, and positive numbers forward. Use of 64 bits allows a representation of times approximately in the range of -30000 to the year 30000. There is a structural representation (i.e., exploded view), routines to acquire the current time from the host system, and convert them to and from the 64-bit and structural representation. Additionally there are routines to convert to and from most well-known forms of ASCII into the 64-bit NSPR representation.

- -

Memory management

- -

NSPR provides API to perform the basic malloc, calloc, realloc and free functions. Depending on the platform, the functions may be implemented almost entirely in the NSPR runtime or simply shims that call immediately into the host operating system's offerings.

- -

Linking

- -

Support for linking (shared library loading and unloading) is part of NSPR's feature set. In most cases this is simply a smoothing over of the facilities offered by the various platform providers.

- -

Where It's Headed

- -

NSPR is applicable as a platform on which to write threaded applications that need to be ported to multiple platforms. The current implementation supports Macintosh (PPC), WIN-32 (WinNT, Win9x) and 20 versions of UNIX and is still expanding. The basic API is stable and expected to remain that way.

- -

NSPR is functionally complete and has entered a mode of sustaining engineering. As operating system vendors issue new releases of their operating systems, NSPR will be moved forward to these new releases by interested players.

- -

Information sur le document original

- -
- -
diff --git a/files/fr/nspr/index.html b/files/fr/nspr/index.html deleted file mode 100644 index b9a9cb0477..0000000000 --- a/files/fr/nspr/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: NSPR -slug: NSPR -translation_of: Mozilla/Projects/NSPR ---- -

Netscape Portable Runtime (NSPR) fourni une API indépendante des plateformes pour les fonctions au niveau du système et relatives à la libc. L'API est utilisée par les logiciels Mozilla, plusieurs applications serveurs de Red Hat et Oracle, et d'autres éditeurs de logiciels.

- -

Obtenir NSPR

- -

NSPR est disponible depuis des sources variées et des paquets binaires, selon votre plateforme :

- - - - - - - - - - -
-

Documentation

- -
-
À propos du NSPR
-
Ce sujet décrit, en termes généraux, les buts du NSPR et traite un peu de comment il les remplit.
-
Référence de l'API NSPR
-
La référence décrit chaque macro, fonction et structrure de l'API publique de l'API NSPR.
-
Instructions de constructions NSPR
-
Comment récupérer les sources et construire.
-
Procédure de parution du NSPR
-
Comment préparer une parution du NSPR.
-
Anciennes versions du NSPR
-
Le contenu plus vieux du NSPR est disponible pour consultation et/ou migration vers ce site
-
- -

View All...

-
-

Community

- -
    -
  • View Mozilla forums...
  • -
- -

{{DiscussionList("dev-tech-nspr", "mozilla.dev.tech.nspr")}}

- - - - -
- -

 

diff --git a/files/fr/outils/ardoise/index.html b/files/fr/outils/ardoise/index.html deleted file mode 100644 index 2f635d3b5a..0000000000 --- a/files/fr/outils/ardoise/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Ardoise JavaScript -slug: Outils/Ardoise -tags: - - Firefox - - Tools - - Web Development - - 'Web Development:Tools' -translation_of: Archive/Tools/Scratchpad ---- -
{{ToolsSidebar}}
- -
-

L'ardoise est dépréciée depuis Firefox 70 (bug 1565380), et a été supprimée dans Firefox 72 (bug 1519103). Comme alternative, depuis Firefox 71, vous pouvez utiliser le mode éditeur multiligne de la console JavaScript, ce mode posséde des fonctionnalités d'ouverture et de sauvegarde dans un fichier.

-
- -

L'ardoise JavaScript propose un environnement pour expérimenter avec du code JavaScript. Vous pouvez écrire du code qui interagit directement avec le contenu d'une page web.

- -

Contrairement à la Console Web qui ne peut interpréter qu'une ligne de code à la fois, l'ardoise JavaScript permet d'éditer des extraits de code plus importants et de les exécuter de manières diverses, en fonction de l'utilisation désirée.

- -

{{EmbedYouTube("Pt7DZACyClM")}}

- -
-

Le tutoriel vidéo ci-dessus montre un cas d'utilisation de l'Ardoise JavaScript avec une page tournant sur un serveur web local. Il est également possible d'utiliser l'Ardoise JavaScript sur des pages ouvertes depuis le système de fichier local, si les permissions courantes le permettent. Mais même avec des restrictions en place, le code HTML peut être soit édité manuellement soit copiés de la source et collés dans la page "about:blank" (nouvel onglet) avec l'usage du menu contextuel "Éditer en tant qu'HTML" de L'Inspecteur.

-
- -

Utilisation

- -

Ouvrir l'ardoise JavaScript

- -

Il y a différentes façons d'ouvrir l'ardoise JavaScript dans une fenêtre dédiée :

- - - -

Cela ouvrira l'ardoise JavaScript dans une nouvelle fenêtre.

- -

Ouvrir l'ardoise JavaScript dans la boite à outils

- -
Nouveau dans Firefox 47.
- -

Depuis Firefox 47, il est possible d'ouvrir l'ardoise dans les outils de développement. Il faut pour avant tout cocher la case "Ardoise" dans la section "Outils de développement par défaut" des options des outils page.

- -

L'ardoise est maintenant disponible dans la boite à outils aux cotés des autres outils tels que l'Inspecteur et la Console. Ce mode est particulièrement utile combiné avec la console scindée : Il est alors possible d'utiliser l'ardoise pour avoir un éditeur multiligne persistant, et la Console pour interagir avec la page.

- -

Édition

- -

La fenêtre de l'ardoise ressemble à ceci (sur macOS la barre de menu est en haut de l'écran) :

- -

A screenshot of the Scratchpad

- -

Le menu « Fichier » propose des options pour charger et sauvegarder les extraits de code JavaScript, permettant leur réutilisation ultérieure.

- -

Complétion de code

- -

L'ardoise JavaScript intègre le moteur d'analyse de code tern. Il est utilisé pour fournir des suggestions d'autocomplétion et des popups d'information sur le symbole courant. Pour lister les suggestions d'autocomplétion, appuyez sur Ctrl + Espace.

- -

Par exemple, essayez de taper "d", puis d'appuyer sur Ctrl + Espace. Vous devriez voir :

- -

- -

L'icône à côté de chaque suggestion indique le type, et la suggestion mise en évidence affiche la popup avec plus d'information. Les touches et    permettent de défiler parmi les suggestions et la touche Entrée ou Tab sélectionne la suggestion en surbrillance.

- -

documentation popup

- -

Pour afficher la popup de documentation; il faut appuyer sur Ctrl + Maj + Espace  lorsque le curseur est sur un identifieur. Par exemple si vous tapez document.addEventListener, puis appuyer sur Ctrl + Maj + Espace, affichera une popup contenant le résumé de la syntaxe de la fonction ainsi qu'un court résumé :

- -

- -

Le lien "[docs]" pointe sur la documentation MDN pour le symbole.

- -

Exécution

- -

Une fois que vous avez écrit votre code, sélectionnez le code à exécuter. Si vous ne sélectionnez rien, tout le code de la fenêtre sera exécuté. Puis choisissez comment vous voulez que le code soit exécuté : en utilisant les boutons en haut de la fenêtre ou par le menu contextuel (accessible avec le clic droit de la souris). Le code est exécuté dans le contexte de l'onglet actuellement sélectionné. Toutes les variables que vous déclarez en dehors d'une fonction seront ajoutées à l'objet global de cet onglet.

- -

Exécuter

- -

Lorsque vous choisissez l'option "Exécuter", le code sélectionné s'exécute. C'est ce que vous utilisez si vous voulez exécuter une fonction ou du code qui manipule le contenu de la page sans avoir besoin de voir le résultat.

- -

Examiner

- -

L'option "Examiner" exécute le code comme l'option précédente ; cependant, après l'exécution, un inspecteur d'objet s'ouvre pour vous permettre d'examiner la valeur retournée.

- -

Par exemple, si vous entrez le code :

- -
window
-
- -

Et que vous choisissez « Examiner », vous obtenez une fenêtre d'inspecteur qui ressemblera à ceci :

- -

Inspecting an object in the Scratchpad

- -

Afficher

- -

L'option « Afficher » exécute le code sélectionné, puis insère le résultat directement dans la fenêtre de l'ardoise, dans un commentaire. Ainsi, il est possible de l'utilisé en tant que REPL.

- -

Recharger et exécuter

- -

L'option "Recharger et exécuter" est seulement disponible dans le menu contextuel (clic droit). Il recharge tout d'abord la page, puis exécute le code lorsque la page déclenche l'évènement "load". C'est utile lorsque vous vous voulez exécuter dans un environnement sans modification.

- -

Exécuter l'Ardoise JavaScript dans le contexte du navigateur

- -

Il est possible d'exécuter l'ardoise dans le contexte du navigateur lui-même. Pour cela, il est nécessaire de cocher l'option «Activer le débogage du chrome et des modules » dans les options des outils de développement . Une fois cela fait, le menu « Environnement » a une option « Navigateur » . Lorsqu'elle est sélectionnée, le contexte est le navigateur entier et non plus uniquement le contenu de la page courante. Il est  facile de le constater en examinant ces globales :

- -
window
-/*
-[object ChromeWindow]
-*/
-
-gBrowser
-/*
-[object XULElement]
-*/
- -

Le contexte d'exécution de l'Ardoise JavaScript est sur le navigateur lorsqu'un fichier a le commentaire
- // -sp-context: browser
- sur sa première ligne.

- -

Raccourcis clavier

- -

{{ Page ("fr/docs/tools/Keyboard_shortcuts", "scratchpad") }}

- -

Éditeur de source

- -

{{ Page ("fr/docs/tools/Keyboard_shortcuts", "source-editor") }}

diff --git "a/files/fr/outils/d\303\251bogueur/param\303\250tres/index.html" "b/files/fr/outils/d\303\251bogueur/param\303\250tres/index.html" deleted file mode 100644 index 7cad89e8d5..0000000000 --- "a/files/fr/outils/d\303\251bogueur/param\303\250tres/index.html" +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Paramètres -slug: Outils/Débogueur/Paramètres -translation_of: Archive/Tools/Debugger_settings ---- -
{{ToolsSidebar}}

Le Débogueur a son propre menu de paramètres. Il est accessible depuis l’icône en forme d'engrenage dans la barre d'outils :

- -

- -

Chaque paramètre est une simple case à cocher :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Formater et indenter automatiquement les sources compactéesLorsque cette option est activée, le Débogueur affichera joliment les fichiers JavaScript minifiés.
Pause sur les exceptionsLorsque cette option est activée, l’exécution du script s’arrêtera automatiquement lorsqu'une exception JavaScript est levée.
Ignorer les exceptions interceptées -

Lorsque cette option est activée, l’exécution ne s’arrêtera pas lorsqu'une exception levée est interceptée

- -

Si cette option est activée (elle l'est par défaut), et que "Pause sur les exceptions" est activé, alors l'exécution s’arrêtera uniquement si l'exception levée n'est pas attrapée. Ce qui est généralement le comportement désiré : les expressions interceptées indiquent généralement que votre programme les gère correctement.

-
Panneaux développés au démarrageLorsque cette option est activée, le panneau des variables du Débogueur est visible dès l'ouverture de celui-ci.
Afficher uniquement les propriétés énumérablesLes propriétés JavaScript non-énumérables ne sont pas affichées
Afficher la boîte de filtrage des variablesLorsque cette option est activée, une boîte de recherche est ajoutée au panneau des variables, elle permet de filtrer la liste des variables affichée
Afficher les sources originalesLorsque cette option est activée, le Débogueur utilisera des source maps, s'il y en a, afin d'afficher le code source original qui a été minifié, combiné ou même compilé depuis un langage comme CoffeeScript. Cette option est activée par défaut
Mettre automatiquement dans une boîte noire les sources compactées -
-

Nouveauté de Firefox 33

-
- -

Met automatiquement les sources dont l'URL finit par ".min.js" dans une boîte noire

-
diff --git a/files/fr/outils/webide/diagnostic/index.html b/files/fr/outils/webide/diagnostic/index.html deleted file mode 100644 index cb21658ec2..0000000000 --- a/files/fr/outils/webide/diagnostic/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: WebIDE diagnostic de connexion -slug: Outils/WebIDE/Diagnostic -translation_of: Archive/WebIDE/Troubleshooting ---- -

{{ToolsSidebar}}

- -

Se connecter à Firefox pour Android via USB

- -

Si vous essayez de vous connecter à une instance de Firefox tournant sous Android que l'instance ne s'affiche pas, voici quelques manipulations que vous pouvez essayer :

- - - -

Connecter Firefox pour Android via Wi-Fi

- - - -

Impossible de charger la liste des projets

- -

Si vous ouvrez WebIDE dans une version de Firefox puis passez à une version antérieure de Firefox avec le même profil, il est possible que vous ayez l'erreur  "Unable to load project list" en ouvrant WebIDE dans la version antérieure de Firefox.

- -

Cela peut se produire quand le système de stockage que WebIDE utilise (IndexedDB) a besoin de déplacer ou restructurer ses fichiers internes pour une version de Firefox plus récente. La liste du projet devient alors inaccessible à la version antérieure de Firefox.

- -

Aucune donnée n'a été perdue, mais vous devez cependant continuez d'utiliser la version récente de Firefox qui a été utilisée avec votre profil pour avoir la liste.

- -

Si vous voulez vraiment utiliser la version antérieure de Firefox, vous pouvez essayez de supprimer uniquement la liste de la façon décrite ci-dessous mais cette façon n'est pas recommandée et il peut en résulter des problèmes additionnels de pertes de données :

- -
    -
  1. -

    Fermer Firefox

    -
  2. -
  3. -

    Trouver le dossier contenant votre profil Firefox

    -
  4. -
  5. -

    Trouver le dossier storage à l'intérieur du dossier du profil.

    -
  6. -
  7. -

    Dans une partie de cet arbre de fichiers, il devrait y avoir des fichiers et/ou des dossiers qui commencent par 4268914080AsptpcPerjo (un nom haché de la base de données)

    -
  8. -
  9. -

    Supprimer les fichiers/dossiers sus-mentionnés

    -
  10. -
  11. -

    Relancer Firefox et WebIDE

    -
  12. -
- -

Activer le logging

- -

Vous pouvez activer les messages verbeux (verbose logging) pour obtenir des diagnostiques :

- -
    -
  1. -

    Ourvrez about:config, et ajoutez une nouvelle préférence nommée extensions.adbhelper@mozilla.org.sdk.console.logLevel, avec pour valeur de chaine de caractères all, et passez  extensions.adbhelper@mozilla.org.debug à true.

    -
  2. -
  3. -

    Dans le Manageur des modules complémentaires, désactivez pour réactivez le module complémentaire ADB Helper.

    -
  4. -
  5. -

    Ouvrez la Console du navigateur et vous verrez que les messages de la console sont préfixés par adb.Si les messages sont du chinois pour vous, demandez de l'aide.

    -
  6. -
- -

Obtenir de l'aide

- -

Allez dans la salle #devtools sur IRC  et nous essayerons de vous aider.

diff --git a/files/fr/outils/webide/index.html b/files/fr/outils/webide/index.html deleted file mode 100644 index e16ada5740..0000000000 --- a/files/fr/outils/webide/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: WebIDE -slug: Outils/WebIDE -tags: - - Apps - - Debugging - - Firefox OS - - Tools - - WebIDE -translation_of: Archive/WebIDE ---- -
{{ToolsSidebar}}
- -
-

WebIDE permet de connecter les outils de développement de Firefox à certains navigateurs, par exemple Firefox pour Android. Voir la page sur le Débogage distant pour obtenir les instructions sur comment se connecter à un navigateur spécifique.

-
- -

Avec WebIDE, il est possible de configurer un ou plusieurs environnements. Un environnement sert à lancer et déboguer une application. Un environnement peut être un appareil Firefox OS connecté à un ordinateur par USB (ou par Wi-Fi depuis Firefox 39), ou bien un Simulateur Firefox OS installé sur l'ordinateur même.

- -

Il est également possible de créer une application, ou d'ouvrir une application existante. Lors de la création d'une nouvelle application, il est possible de partir d'un modèle basique qui inclut la structure des dossiers et un minimum de code pour commencer dans de bonnes conditions. Il existe également des modèles plus complexes qui montrent le fonctionnement des API privilégiés. WebIDE affiche les fichiers d'une application sous forme d'arbre et, vous pouvez éditer et sauvegarder ces fichiers en utilisant l'éditeur de texte inclut (CodeMiror). Bien entendu, vous n'êtes pas obligé d'utiliser l'éditeur fournit, vous pouvez très bien développer votre application dans votre éditeur préféré en dehors de WebIDE, et utiliser celui-ci uniquement pour le débug.

- -

Enfin, il est possible d'installer une application dans un des environnements et de la lancer. Il est alors possible d'utiliser les outils de développement classiques (l'Inspecteur, la Console Web, le Débogueur etc...) pour examiner et modifier l'application lancée.

- -
-
-
Ouvrir WebIDE
-
Comment ouvrir WebIDE depuis Firefox.
-
Créer et configurer des environnements
-
Comment se connecter à un environnement dans lequel il est possible d'installer des applications. Dans les environnements on trouve : les appareils Firefox OS, Le Simulateur Firefox OS et Firefox pour Android.
-
Créer et éditer des applications
-
Comment créer, ouvrir et développer des applications en utilisant WebIDE.
-
Le menu environement
-
Une fois qu'un environement, il est possible d'utiliser ces informations pour obtenir des informations sur sur l'envrionement et ses applications, modifier des paramètres, et prendre une capture d'écran.
-
Lancer et déboguer des applications
-
Comment installer des applications dans un environnement et les déboguer en utilisant les outils de développement de Firefox.
-
Travailler avec des applications Cordova dans WebIDE
-
Depuis Firefox 39, il est possible d'éditer et de déboguer des applications Cordova en utilisant WebIDE.
-
Dépannage
-
Aide pour les problèmes avec WebIDE, notamment les problèmes de connection aux environnements.
-
diff --git a/files/fr/outils/webide/mise_en_place_des_environnements/index.html b/files/fr/outils/webide/mise_en_place_des_environnements/index.html deleted file mode 100644 index 1777202efb..0000000000 --- a/files/fr/outils/webide/mise_en_place_des_environnements/index.html +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Mise en place des environnements -slug: Outils/WebIDE/Mise_en_place_des_environnements -translation_of: Archive/WebIDE/Setting_up_runtimes ---- -
{{ToolsSidebar}}

Un environnement vous permet d'exécuter et de déboguer des applications. Un environnement peut être :

- - - -

Dans WebIDE, le panneau latéral permet de gérer les environnements :

- -

- -

Dans ce panneau, les environnements sont groupés en quatre types :

- -
-
PÉRIPHÉRIQUES USB
-
Les périphériques Firefox OS connectés via USB. À partir de Firefox 36, cela permet aussi de se connecter à Firefox pour Android via USB.
-
PÉRIPHÉRIQUES WI-FI
-
Les périphériques Firefox OS connectés en Wi-Fi. À partir de Firefox 39.
-
SIMULATEURS
-
Les instances de simulateur Firefox OS que vous avez installé.
-
AUTRES
-
Des environnements distants qui peuvent se connecter à WebIDE à partir d'un hôte et port arbitraire. Si vous avez l'extension Valence installée, cette section listera aussi les environnements additionnels activés.
-
- -

Le reste de cette section décrit comment ajouter des environnements.

- -

Connecter un périphérique Firefox OS

- -

Si vous possédez une version assez récente de Firefox et de Firefox OS, vous pouvez connecter le périphérique Firefox OS en Wi-Fi. Sinon, vous pouvez vous connecter en USB.

- - - -

Se connecter à Firefox pour Android

- -

Les appareils Android, connectés par USB et qui utilisent Firefox pour Android apparaissent comme environnements sous « Périphériques USB ».  Depuis Firefox 42, il est possible de connecter Firefox Android via WiFi.

- - - -

Ajouter un simulateur

- -

Le simulateur Firefox OS est une version des couches supérieures de Firefox OS qui simule un appareil Firefox OS mais qui fonctionne sur un ordinateur de bureau. Il est lancé dans une fenêtre de la même taille qu'un appareil Firefox OS et contient les éléments d'interface utilisateur et les applications natives. Il permet également de simuler certaines API utilisées par les appareils Firefox OS.

- -

Cela signifie que, dans la plupart des cas, il n'est pas nécessaire d'avoir un appareil physique pour déboguer une application.

- -

Le simulateur ne fait pas partie intégrante de Firefox mais peut être téléchargé comme module complémentaire. Si vous cliquez sur « Installer le simulateur » dans la liste déroulante pour les environnements, vous serez envoyés vers une page qui vous permet d'installer les simulateurs correspondants aux différentes versions de Firefox OS.

- -

- -

Vous pouvez installer autant de simulateurs que vous le souhaitez. Cependant, il faudra parfois être armé de patience car le téléchargement peut durer quelques minutes.

- -
-

Attention, pour lancer un simulateur Firefox OS 2.6 ou plus, il faut avoir Firefox 45 ou plus.

-
- -

Une fois que le(s) simulateur(s) est installé, vous pouvez fermer cette fenêtre et les simulateurs apparaîtront dans la liste des environnements disponibles :

- -

- -

 

- -

Pour plus d'informations sur le simulateur, voir l'article détaillé sur cet outil.

- -

Configurer les simulateurs

- -
-

Nouveau dans Firefox 42

-
- -

Depuis Firefox 42, à côté de chaque simulateur listé dans el panneau latéral, il y a une icône en forme d'engrenage :

- -

- -

Cliquer dessus ouvrir un écran permettant de configurer le simulateur :

- -

Il est possible de :

- - - -

Autres environnements

- -

Environnement distant

- -

Avec un environnement distant, il est possible d'utiliser un nom d'hôte et un port arbitraires pour se connecter à l'appareil.

- -

En réalité, les appareils Firefox OS et Android se connectent à l'ordinateur grâce à un programme appelé Android Debug Bridge (ADB). Par défaut, WebIDE utilise un module complémentaire appelé ADB Helper, cela simplifie le processus d'installation et de redirection des ports pour que l'appareil puisse dialoguer avec l'ordinateur..

- -

Dans la plupart des cas, cette solution est la plus pratique. Cependant, on peut parfois vouloir utiliser ADB en dehors de WebIDE. Par exemple, on peut vouloir utiliser ADB directement depuis la ligne de commandes. Dans ce cas, on connectera l'appareil en définissant un nom et un port et en utilisant la commande adb forward (par exemple adb forward tcp:6000 localfilesystem:/data/local/debugger-socket).
-
- Si, ensuite, vous souhaitez connecter WebIDE avec cet appareil, il faut : désactiver le module complémentaire ADB Helper et effectuer la connexion WebIDE en utilisant l'option « Environnement distant » puis en saisissant l'hôte et le port utilisés avant avec adb forward (par exemple : localhost:6000).

- -

Avant Firefox 36, ADB Helper ne permettait pas de connecter Firefox pour Android, aussi, si vous souhaitez utiliser WebIDE pour vous connecter à Firefox pour Android, vous aurez besoin de paramétrer une redirection de port et d'utiliser un environnement sur mesure. En savoir plus sur la connexion de Firefox pour Android via ADB avec une version antérieure à Firefox 36.

- -

Environnements disponibles avec Valence

- -

Si vous avez installé le module complémentaire Valence, vous verrez trois environnements supplémentaires :

- - - -

Pour les instructions relatives à ses environnements, voir les éléments respectifs sur la page sur le débogage à distance.

- -

Sélectionner un environnement

- -

Une fois que vous avez paramétré un environnement, vous pouvez le sélectionner grâce au menu « Sélectionner l'environnement ».

- - - -

Cliquez sur le bouton « Lancer » au milieu de la barre d'outils de WebIDE, cela permettra d'installer de lancer l'application dans l'environnement sélectionné.

diff --git a/files/fr/outils/webide/monitor/index.html b/files/fr/outils/webide/monitor/index.html deleted file mode 100644 index 0059e01205..0000000000 --- a/files/fr/outils/webide/monitor/index.html +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Monitor -slug: Outils/WebIDE/Monitor -translation_of: Archive/WebIDE/Monitor ---- -
{{ToolsSidebar}}
-

Le Moniteur WebIDE a été supprimé dans panel Firefox 60+. Ce panneau n'était utilisé que pour feu Firefox OS (puisses-tu reposer en paix).

-
- -
-

Le Moniteur WebIDE est un outil de visualisation de données génériques fait pour aider à vérifier les performances des applications et appareils Firefox OS.

-
- -

The WebIDE Monitor

- -

Le Moniteur peut afficher des graphiques interactifs en temps réel.

- -

Graphiques disponibles

- -

Le Moniteur dispose de plusieurs types de graphiques différents, ceux-ci s'affichent dès que le WebIDE est connecté à un runtime Firefox OS.

- -

Unique Set Size

- -

Unique Set Size

- -

Ce graphique affiche l'impact de l'utilisation mémoire de tous les processus Firefox OS. Si vous êtes intéressés par la consommation mémoire d'une application Firefox OS, lancez celle-ci et la mémoire privée utilisée par ses processus sera affiché ici.

- -

Afficher vos propres données

- -

Il est relativement simple d'afficher n'importe quel type de données dans le Moniteur, car il accepte des mises à jour peu structurées depuis un grand nombre de sources différentes.

- -

Depuis un appareil Firefox OS

- -

Il est possible d'envoyer des données depuis un appareil connecté en envoyant des notifications d'observation (observer notifications).

- -

Note: Si vous voulez faire ceci sur une application certifiée, suivez ces instructions.

- -
Services.obs.notifyObservers(null, 'devtools-monitor-update', data);
- -

Il est passible d'envoyer des données depuis n'importe quel code JS ayant les privilèges chrome. Voici un exemple concret qui mesure le temps d'exécution de code JavaScript :

- -

JavaScript

- -
const Services = require('Services');
-
-var start = Date.now();
-// code to benchmark
-var stop = Date.now();
-
-var data = { graph: 'Performance', myFeature: stop-start, time: stop };
-Services.obs.notifyObservers(null, 'devtools-monitor-update', JSON.stringify(data));
- -

C++

- -
observerService->NotifyObservers(nullptr, "devtools-monitor-update", data);
- -

Il est possible d'envoyer des données depuis n'importe ou dans Gecko. Voici un exemple concret mesurant le temps d'exécution d'un code :

- -
#include <time.h>
-#include "nsPrintfCString.h"
-#include "nsIObserverService.h"
-
-clock_t start = clock();
-// code to benchmark
-clock_t stop = clock();
-double time = (double)(stop - start) / (CLOCKS_PER_SEC / 1000);
-
-nsCOMPtr<nsIObserverService> observerService = services::GetObserverService();
-if (observerService) {
-  nsPrintfCString str("{\"graph\":\"Performance\",\"myFeature\":%f}", time);
-  nsAutoString data = NS_ConvertUTF8toUTF16(str);
-  observerService->NotifyObservers(nullptr, "devtools-monitor-update", data.get());
-}
- -

Depuis votre ordinateur

- -

Il est facile d'envoyer des données au Moniteur en passant par un serveur WebSockets. Cela peut être utile si vous concevez une extension de Firefox, comme un outil de ligne de commande ou un service web.

- -

Par défaut, le Moniteur écoute les serveurs tournant sur le port 9000 de votre ordinateur. Il est possible de changer ce port en mettant à jour la préférence devtools.webide.monitorWebSocketURL.

- -

Il est même possible de lui faire accepter des données depuis votre réseau local ou depuis n'importe ou sur internet.

- -

Node.js

- -
TODO
- -

Python

- -
TODO
- -

Formats supportés

- -

Le Moniteur accepte des données sous la forme d'objets JSON qui ressemblent généralement à ceci :

- -
{
-  "graph": "myGraph",
-  "curve": "myCurve",
-  "value": 42,
-  "time": 1234567890
-}
- -

Ce format est fait pour être très flexible. Si un graphique ou une courbe n'est pas défini, elle sera créée automatiquement.

- -

Noms arbitraires

- -

Les données non reconnues seront considérées comme un nom de courbe et sa valeur.

- -

Le plus petit paquet de données que vous pouvez envoyer ressemble à ceci :

- -
{ "myCurve": 42 }
- -

Cela ajoutera un point de donnée à "myCurve" dans le graph sans nom. Le paramètre time manquant sera automatiquement celui du moment ou le paquet est reçu.

- -

Pour plus de précession, il est recommandé de toujours spécifier un a timestamp pour vos données :

- -
{
-  "current": 60,
-  "voltage": 500,
-  "time": 1234567890
-}
- -

Valeurs Multiples

- -

Dans une seule mise à jour, il est possible d'envoyer des données pour plusieurs courbes :

- -
{
-  "graph": "myGraph",
-  "myCurve1": 50,
-  "myCurve2": 300,
-  "myCurve3": 9000,
-  "time": 1234567890
-}
- -

Ou plusieurs points pour une même courbe :

- -
{
-  "graph": "myGraph",
-  "curve": "myCurve",
-  "values": [
-    { "time": 1234567890, "value": 42 },
-    { "time": 1234567981, "value": 51 }
-  ]
-}
- -

Mises à jour multiples

- -

Il est également possible d'envoyer plusieurs mises a jour de données dans un tableau :

- -
[
-  { "graph": "Memory", "time": 1234567890, "System": 2600, "My App": 1000 },
-  { "graph": "Power", "time": 1234567890, "current": 60, "voltage": 500 }
-]
- -

Évènements ponctuels

- -

Pour marquer des évènements spéciaux dans un graph avec une barre verticale, il faut ajouter une clé event dans la mise à jour :

- -
{
-  "graph": "myGraph",
-  "event": "myEvent",
-  "time": 1234567980
-}
diff --git a/files/fr/outils/webide/opening_webide/index.html b/files/fr/outils/webide/opening_webide/index.html deleted file mode 100644 index c73e890c30..0000000000 --- a/files/fr/outils/webide/opening_webide/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Ouvrir WebIDE -slug: Outils/WebIDE/Opening_WebIDE -tags: - - WebIDE - - opening -translation_of: Archive/WebIDE/Opening_WebIDE ---- -
{{ToolsSidebar}}

Il y a trois moyens d'ouvrir WebIDE :

- - - -

- -

Voici à quoi ressemble WebIDE :

- -

La liste déroulante à gauche nommée "Ouvrir une application" permet d'ouvrir des applications existantes ou d'en créer des nouvelles.
- La liste déroulante sur la droite nommée "Sélectionner l’environnement" permet de sélectionner un environnement ou d'un ajouter un nouveau.

- -

Les boutons au milieu servent (de gauche à droite) à : lancer, arrêter et déboguer l'application. Ils sont activés uniquement lorsqu'une application est ouvert et qu'un environnement est sélectionné.

- -

Il est possible de changer la taille de la police dans WebIDE avec les raccourcis claviers standard (sous OS X, remplacez ctrl par cmd):

- - diff --git a/files/fr/outils/webide/the_runtime_menu/index.html b/files/fr/outils/webide/the_runtime_menu/index.html deleted file mode 100644 index 5f6067761e..0000000000 --- a/files/fr/outils/webide/the_runtime_menu/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Le menu environements -slug: Outils/WebIDE/The_runtime_menu -translation_of: Archive/WebIDE/The_runtime_menu ---- -
{{ToolsSidebar}}

Une fois qu'un environnement est sélectionné, il est possible d'accéder aux options de l'environnement :

- -

Cela sert à :

- - - -

Informations de l'environnement

- -

- -

Tableau des permissions

- -

Un tableau résumant les permissions de l'application pour l'environnement sélectionné, indiquant pour chaque API et chaque type d'application laquelle est autorisée (✓), refusée (✗) ou bien si l'avis de l'utilisateur est demandé (!).

- -

- -

Preferences de l'appareil

- -

Un tableau listant les préférences qui peuvent être éditées et sont disponibles dans dans l'environnement via le service Preferences. Il s'agit de valeurs de configurations de plateforme qui exposent le même jeu de donée que la page about:config de Firefox, mais pour l'appareil.

- -

Parce que ces préférences sont très sensibles en terme de sécurité, il est nécessaire de désactiver l'option de restrictions des privilèges des outils de développements avant de pouvoir les modifier.

- -

- -

Paramètres de l'appareil

- -
-

Nouveau dans Firefox OS 2.5.

-
- -

Un tableau listant et permettant l'édition des paramètres qui peuvent être contrôlés dans l'application de paramétrage de Firefox OS. La plupart des choses sur l'appareil ont une interface pour changer le paramètre, telles que le volume et l'alarme qui se trouvent dans les paramètres de l'appareil.

- -

Ces paramètres sont moins sensibles et peuvent être modifiés sans avoir besoin de privilèges spéciaux.

- -

Pour pouvoir utiliser cette fonctionnalité, vous devez avoir Firefox 38 ou plus récent, et vous connecter à un Firefox OS 2.5 ou plus récent.

- -

- -

Screenshot

- -

Une commande pour prendre une capture d'écran de l'environnement.

diff --git a/files/fr/outils/webide/working_with_cordova_apps_in_webide/index.html b/files/fr/outils/webide/working_with_cordova_apps_in_webide/index.html deleted file mode 100644 index bd444b8959..0000000000 --- a/files/fr/outils/webide/working_with_cordova_apps_in_webide/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Travailler avec des applications Cordova dans WebIDE -slug: Outils/WebIDE/Working_with_Cordova_apps_in_WebIDE -translation_of: Archive/WebIDE/Working_with_Cordova_apps_in_WebIDE ---- -
{{ToolsSidebar}}
-

Nouveau dans Firefox 39.

-
- -

Apache Cordova permet d'écrire des application en utilisant HTML, JavaScript, et CSS, et ensuite de générer des applications natives pour les plate-formes mobiles tels que iOS ou Android. Avec Cordova, vous pouvez également générer une version de votre application pour Firefox OS.

- -

Depuis Firefox 39, WebIDE supporte directement les applications Cordova : Cela signifie que vous pouvez éditer des applications Cordova dans WebIDE, et WebIDE s'occupe de générer la version Firefox OS tout seul.

- -

Pour commencer, il faut créer une application Cordova de façon classique :

- - - - - - - -
-

Sur Windows, il est possible d'ouvrir une invite de commande directement dans un dossier en faisant Maj + clic droit sur le dossier voulu puis sélectionner "Ouvrir une fenêtre commandes ici"

-
- -

Il faut ensuite :

- - - -

Il est maintenant possible d'éditer l'application en tant qu'application Cordova, et lorsque l'application est lancée, WebIDE se charge tout seul de générer la version Firefox OS. WebIDE régénère également l’application lorsque des changements qui affectent le manifeste de l'application, afin de pouvoir effecteur la validation de manifeste.

diff --git "a/files/fr/outils_d'\303\251dition_respectueux_des_standards/index.html" "b/files/fr/outils_d'\303\251dition_respectueux_des_standards/index.html" deleted file mode 100644 index f58d91bea1..0000000000 --- "a/files/fr/outils_d'\303\251dition_respectueux_des_standards/index.html" +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Outils d'édition respectueux des standards -slug: Outils_d'édition_respectueux_des_standards -tags: - - HTML - - Tools - - XHTML -translation_of: Archive/Web/Standards-Compliant_Authoring_Tools ---- -

 

-

Créer dès le début du code inter-navigateurs vous économisera beaucoup de temps durant les tests qualité de votre contenu Web. Les quelques éditeurs ci dessous respectent les standards du W3C. Si vous utilisez une ancienne version d'un de ces outils qui se base sur les bogues d'anciennes générations de navigateur ou génère du code spécifique à un navigateur, l'heure de la mise à jour a peut être sonné :

- -

Mise à jour d'anciennes versions pour les rendre compatibles avec les standards :

- -

Quelques avertissements : Il se peut que les outils édités par Namo génèrent du code spécifique à IE ou à Netscape 4, ce qui peut vous obliger à déboguer votre code avant qu'il soit compatible avec les navigateurs respectant les standards. Les versions récentes de Microsoft FrontPage™ ont été améliorées, cependant, faites attention de ne pas utiliser d'extensions spécifiques à FrontPage pour le contenu important de votre site Web ou pour une fonctionnalité cruciale. Certaines versions de Microsoft Word créent du code HTML imparfait qui ne fonctionne qu'avec Internet Explorer. Validez toujours vos pages Web.

-

Autres liens

- -
-

Informations sur le document original

- -
-

 

diff --git a/files/fr/performance/about_colon_memory/index.html b/files/fr/performance/about_colon_memory/index.html deleted file mode 100644 index 814b9bd611..0000000000 --- a/files/fr/performance/about_colon_memory/index.html +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: 'about:memory' -slug: 'Performance/about:memory' -translation_of: 'Mozilla/Performance/about:memory' ---- -

about:memory est une page spécifique de Firefox qui vous permet de visualiser, sauvegarder, charger et suivre l'évolution de l'usage de la mémoire par Firefox. Elle offre aussi d'autres opérations concernant la mémoire, comme le démarrage et l'effacement des traces du Gabarge Collector (GC) et du Cycle Collector (CC) ou encore les rapports DMD ("Dark Matter Detector"). about:memory est disponible dans toutes les versions et ne requiert aucune préparation pour être utilisé.

- -

Comment générer des rapports sur la mémoire

- -

Nous supposons ici que vous souhaitez étudier l'utilisation de la mémoire par Firefox, peut-être pour vos besoins personnels, ou peut-être parce que quelqu'un vous a demandé de générer des "rapports mémoire" afin d'investiguer un de vos problèmes. Suivez alors les étapes suivantes :

- - - -

Il est important de noter que les deux formes d'information générée (fichier ou texte) peivent contenir des données relevant de votre vie privée, comme la liste complète des pages Internet ouvertes dans vos différents onglets. Si vous ne souhaitez pas partager de telles informations, vous pouvez cocher la case "anonymize" (anonymiser) avant de cliquer sur "Measure and save..." ou "Measure...". Ceci entraînera la suppression des données sensibles, mais cela rendra aussi l'investigation de la mémoire plus difficile.

- -

Charger des rapport sur la mémoire à partir d'un fichier

- -

Le plus simple pour charger (et afficher) un rapport à partir d'un fichier est d'utiliser le bouton "Load..." (charger). Vous pouvez aussi utiliser le bouton "Load and diff..." (charger et comparer) pour afficher un comparatif entre deux rapports sur la mémoire.

- -

Lorsque vous souhaitez visualiser un unique fichier, il est aussi possible de le charger automatiquement lors de l'affichage de la page about:memory, en ajoutant une référence au fichier dans le nom de la page, sous la forme :

- -
about:memory?file=/home/username/reports.json.gz
-
- -

Cette possibilité trouve sa pleine utilité lors de l'affichage d'un rapport sur la mémoire obtenu sur un dispositif fonctionnant avec Firefox OS.

- -

Les rapport contiennent des données au format JSON et sont compressés comme des archives gz. Ces fichiers peuvent être chargés tels quels, mais peuvent aussi être décompressés avant chargement.

- -

Interpréter les rapport sur la mémoire

- -

Pratiquement tout ce que vous pouvez consulter dans about:memory dispose d'un tool-tip explicatif. Le survol de n'importe quel bouton permet de voir une description de son effet. Le survol d'une mesure affichée permet de voir une explication sur son sens.

- -

Quelques bases sur les mesures

- -

La pluspart des mesures sont exprimées en octets, mais certaines sont exprimées en pourcentages ou en nombres.

- -

La plupart des mesures sont présentées comme des arborescence, comme :

- -
 585 (100.0%) -- preference-service
- └──585 (100.0%) -- referent
-    ├──493 (84.27%) ── strong
-    └───92 (15.73%) -- weak
-        ├──92 (15.73%) ── alive
-        └───0 (00.00%) ── dead
-
- -

Les feuilles de l'arbre représentent les mesures réelles, tandis que les branches (qui regroupent des sous-branches et/ou des feuilles) présentent la somme des valeurs des feuilles ou des sous-branches qu'elle contiennent.

- -

Cette structure arborescente permet de décomposer une mesure en catégories, sous-catégories, sous-sous-catégories etc. avec autant de niveaux que nécessaire. Aucune mesure d'un arbre ne recoupe d'autres mesures du même arbre (autrement dit, aucune valeur n'est utilisée dans deux branches d'un même arbre).

- -

Les chemins au sein d'un arbre peuvent être décrits en séparants les différents niveaux par un '/'. Ainsi, preference-service/referent/weak/dead représente le chein jusqu'à la feuille 'dead' dans la figure ci-dessus.

- -

Les sous-arbres peuvent être déployés ou repliés en cliquant dessus. Si vous êtes confronté à un arbre présentant une très grande consommation de mémoire, il peut être intéressant de replier tous les sous-arbres immédiatement en dessous de la racine, puis de déployer uniquement les sous-arbres intéressants.

- -

Sections

- -

Les rapports sur la mémoire sont structurés par processus, avec un processus par section. Chaque section concernant un processus comporte les sous-sections décrites ci-dessous.

- -

Section Allocations explicites

- -

Cette sous-section contient un seul arbre, nommé "explicit", qui présente les volumes de mémoire alloués par des appels explicites aux fonctions d'allocation de blocs (comme malloc ou new) ou non-blocs (comme mmap ou VirtualAlloc).

- -

L'exemple ci-dessous présente un rapport pour session dans laquelle des onglets ont été ouverts sur cnn.com, techcrunch.com, and arstechnica.com. Différents sous-arbres ont été déployés, d'autres repliés, pour améliorer la présentation.

- -
191.89 MB (100.0%) -- explicit
-├───63.15 MB (32.91%) -- window-objects
-│   ├──24.57 MB (12.80%) -- top(http://edition.cnn.com/, id=8)
-│   │  ├──20.18 MB (10.52%) -- active
-│   │  │  ├──10.57 MB (05.51%) -- window(http://edition.cnn.com/)
-│   │  │  │  ├───4.55 MB (02.37%) ++ js-compartment(http://edition.cnn.com/)
-│   │  │  │  ├───2.60 MB (01.36%) ++ layout
-│   │  │  │  ├───1.94 MB (01.01%) ── style-sheets
-│   │  │  │  └───1.48 MB (00.77%) -- (2 tiny)
-│   │  │  │      ├──1.43 MB (00.75%) ++ dom
-│   │  │  │      └──0.05 MB (00.02%) ── property-tables
-│   │  │  └───9.61 MB (05.01%) ++ (18 tiny)
-│   │  └───4.39 MB (02.29%) -- js-zone(0x7f69425b5800)
-│   ├──15.75 MB (08.21%) ++ top(http://techcrunch.com/, id=20)
-│   ├──12.85 MB (06.69%) ++ top(http://arstechnica.com/, id=14)
-│   ├───6.40 MB (03.33%) ++ top(chrome://browser/content/browser.xul, id=3)
-│   └───3.59 MB (01.87%) ++ (4 tiny)
-├───45.74 MB (23.84%) ++ js-non-window
-├───33.73 MB (17.58%) ── heap-unclassified
-├───22.51 MB (11.73%) ++ heap-overhead
-├────6.62 MB (03.45%) ++ images
-├────5.82 MB (03.03%) ++ workers/workers(chrome)
-├────5.36 MB (02.80%) ++ (16 tiny)
-├────4.07 MB (02.12%) ++ storage
-├────2.74 MB (01.43%) ++ startup-cache
-└────2.16 MB (01.12%) ++ xpconnect
- -

Un certain niveau d'expertise est nécessaire pour comprendre tous les détails. Cependant, quelques éléments méritent d'être soulignés :

- - - -

La consommation de mémoire par les modules complémentaires ajoutés à Firefox est aussi déterminée, comme le montre l'exemple ci-dessous.

- -
├───40,214,384 B (04.17%) -- add-ons
-│   ├──21,184,320 B (02.20%) ++ {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}/js-non-window/zones/zone(0x100496800)/compartment([System Principal], jar:file:///Users/njn/Library/Application%20Support/Firefox/Profiles/puna0zr8.new/extensions/%7Bd10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d%7D.xpi!/bootstrap.js (from: resource://gre/modules/addons/XPIProvider.jsm:4307))
-│   ├──11,583,312 B (01.20%) ++ jid1-xUfzOsOFlzSOXg@jetpack/js-non-window/zones/zone(0x100496800)
-│   ├───5,574,608 B (00.58%) -- {59c81df5-4b7a-477b-912d-4e0fdf64e5f2}
-│   │   ├──5,529,280 B (00.57%) -- window-objects
-│   │   │  ├──4,175,584 B (00.43%) ++ top(chrome://chatzilla/content/chatzilla.xul, id=4293)
-│   │   │  └──1,353,696 B (00.14%) ++ top(chrome://chatzilla/content/output-window.html, id=4298)
-│   │   └─────45,328 B (00.00%) ++ js-non-window/zones/zone(0x100496800)/compartment([System Principal], file:///Users/njn/Library/Application%20Support/Firefox/Profiles/puna0zr8.new/extensions/%7B59c81df5-4b7a-477b-912d-4e0fdf64e5f2%7D/components/chatzilla-service.js)
-│   └───1,872,144 B (00.19%) ++ treestyletab@piro.sakura.ne.jp/js-non-window/zones/zone(0x100496800)
- -

Plusieurs élément de cet exemple méritent d'être expliqués :

- - - -

Section des Autrres Mesures

- -

Cette section comporte de nombreuses arborescences, dont certaines reprennent  les mesures indiquées dans l'arbre "explicit" sous une autre forme. Par exemple, dans l'arbre "explicit", toutes les mesures concernant le DOM et les agencements (layouts) sont agrégées fenêtre par fenêtre, tandis que dans l'arbre "Other Measurements", ces mêmes mesures sont agrégées pour l'ensemble du navigateur, comme dans les exemples ci-dessous.

- -
26.77 MB (100.0%) -- window-objects
-├──14.59 MB (54.52%) -- layout
-│  ├───6.22 MB (23.24%) ── style-sets
-│  ├───4.00 MB (14.95%) ── pres-shell
-│  ├───1.79 MB (06.68%) ── frames
-│  ├───0.89 MB (03.33%) ── style-contexts
-│  ├───0.62 MB (02.33%) ── rule-nodes
-│  ├───0.56 MB (02.10%) ── pres-contexts
-│  ├───0.47 MB (01.75%) ── line-boxes
-│  └───0.04 MB (00.14%) ── text-runs
-├───6.53 MB (24.39%) ── style-sheets
-├───5.59 MB (20.89%) -- dom
-│   ├──3.39 MB (12.66%) ── element-nodes
-│   ├──1.56 MB (05.84%) ── text-nodes
-│   ├──0.54 MB (02.03%) ── other
-│   └──0.10 MB (00.36%) ++ (4 tiny)
-└───0.06 MB (00.21%) ── property-tables
- -

Tous les arbres de la section "Other Measurements" ne reprennent cependant pas des mesures déjà indiquées dans l'arbre "explicit" : les mesures d'utilisation de mémoire par le services de gestion des préférences ("preference-service") n'existe pas dans l'arbre "explicit".

- -

Certaines mesures sont aussi présentées sans structure arborescente dans le bas de la section des autres mesures, comme sur l'exemple ci-dessous.

- -
    0.00 MB ── canvas-2d-pixels
-    5.38 MB ── gfx-surface-xlib
-    0.00 MB ── gfx-textures
-    0.00 MB ── gfx-tiles-waste
-          0 ── ghost-windows
-  109.22 MB ── heap-allocated
-        164 ── heap-chunks
-    1.00 MB ── heap-chunksize
-  114.51 MB ── heap-committed
-  164.00 MB ── heap-mapped
-      4.84% ── heap-overhead-ratio
-          1 ── host-object-urls
-    0.00 MB ── imagelib-surface-cache
-    5.27 MB ── js-main-runtime-temporary-peak
-          0 ── page-faults-hard
-    203,349 ── page-faults-soft
-  274.99 MB ── resident
-  251.47 MB ── resident-unique
-1,103.64 MB ── vsize
- -

Quelques détails sur certaines mesures :

- - - -

Section sur le Système

- -

Cette section n'apparait que sur les dispositifs équipés de Firefox OS. Elle contient des mesures sur l'ensemble du dispositif obtenues auprès du système d'exploitation. Entre autres, cette section aide à comprendre précisément l'utilisation de mémoire sur l'ensemble du dispositif.

diff --git a/files/fr/performance/index.html b/files/fr/performance/index.html deleted file mode 100644 index 12ed2145eb..0000000000 --- a/files/fr/performance/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Performance -slug: Performance -tags: - - Add-ons - - Mozilla - - Performance - - TopicStub -translation_of: Mozilla/Performance ---- -

Les articles liés à partir d'ici vous aideront à améliorer les performances, que vous développiez du code Mozilla principal ou un add-on.

- - - - - - - - -
-

Documentation

- -
-
Signaler un problème de performance
-
Un guide convivial pour signaler un problème de performance. Un environnement de développement n'est pas requis.
-
Meilleures pratiques en matière de performances dans les extensions
-
Un guide des "meilleurs pratiques" de performance pour les développeurs d'extensions.
-
Mesurer les performances de démarrage des Add-ons
-
Un guide pour les développeurs d'add-ons sur la configuration d'un environnement de test de performances.
-
XUL School: Add-ons Performances
-
Conseils aux développeurs d'add-ons pour les aider à éviter de nuire aux performances des applications.
-
Performances GPU
-
Conseils pour le profilage et l'amélioration des performances lors de l'utilisation d'un GPU
-
- -

Afficher toutes les pages marquées avec "Performance"...

-
-

Outils de profilage et de performance

- -
-
Profilage de JavaScript avec Shark {{ gecko_minversion_inline("1.9") }}
-
Comment utiliser le profileur Mac OS X Shark pour profiler le code JavaScript dans Firefox 3.5 ou version ultérieure.
-
Profilage avc Shark
-
Comment utiliser l'outil Shark d'Apple pour profiler le code Mozilla.
-
Profilage avec Instruments
-
Comment utiliser l'outil Instruments d'Apple pour profiler le code Mozilla.
-
Profilage avec Xperf
-
Comment utiliser l'outil Xperf de Mcrosoft pour profiler le code Mozilla.
-
Profilage avec Zoom
-
Zoom est un profileur pour Linux réalisé par les personnes qui ont créé Shark
-
Profilage avec le profileur intégré {{ gecko_minversion_inline("16.0") }}
-
-
Mesure des performances à l'aide du module de code PerfMeasurement.jsm {{ gecko_minversion_inline("2.0") }}
-
Utilisation de PerfMeasurement.jsm pour mesurer les données de performances dans votre code JavaScript.
-
Ajout d'une nouvelle sonde de télémétrie
-
Information sur la façon d'ajouter une nouvelle mesure au système de rapport de performance de télémétrie.
-
-
-
- -
-
- -

Rubriques connexes

- -
-
JavaScript, XPCOM, Développement de Mozilla, Extensions, Add-ons
-
-
diff --git a/files/fr/performance/profiling_with_the_built-in_profiler/index.html b/files/fr/performance/profiling_with_the_built-in_profiler/index.html deleted file mode 100644 index 2336813699..0000000000 --- a/files/fr/performance/profiling_with_the_built-in_profiler/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Mesurer les performances avec le profileur intégré -slug: Performance/Profiling_with_the_Built-in_Profiler -translation_of: Mozilla/Performance/Profiling_with_the_Built-in_Profiler ---- -

{{ gecko_minversion_header("16.0") }}

-

Firefox a maintenant un profileur intégré (nom de code SPS). Ce profileur permet, entres autres, de mieux mesurer la réactivité, de déterminer plus précisément à quoi est dû un changement dans les performances, et s'exécute dans des environnements et des plate formes pour lesquelles les profileurs externes ne sont généralement pas disponibles, telles que l'ordinateur d'un utilisateur standard, ou un appareil Android fermé par son constructeur.

-
- Note: La plate forme technique du profileur est terminée, mais nous travaillons encore sur l'ajout de fonctionnalités. Surveillez le composant "Gecko Profiler" dans Bugzilla pour plus d'informations.
-

"Stackwalking" contre "pseudostack"

-

Le profileur est conçu pour opérer dans deux modes différents : "Pseudostack" (par défaut) ou "stackwalking".

-

Pseudostack

-

Pseudostack (le défaut) requiert une version de Firefox qui a été intrumentée au niveau du code source avec SAMPLE_LABEL("NAMESPACE", "NAME");'. Ceci ajoute un élément dans la pile d'appel qui est utilisé par le profileur pour déterminer par échantillonnage quel code est en train de s'exécuter. Ce mode est compatible avec toutes les architectures et environnements techniques.

-

For this to be effective, you do need to liberally use SAMPLE_LABEL throughout the code, and unfortunately it won't be able to dig into system library and drivers.

-

Because of the small overhead of the instrumentation, the sample label shouldn't be placed inside hot loops. A profile reporting that a large portion is spent in "Unknown" code indicates that the area being executed doesn't have sample label. As we focus on using this tool and add additional sample labels this will improve.

-

"Stackwalking"

-

"Stackwalking" est une fonctionnalité dépendant de l'architecture de la plate forme d'exécution dont la prise en charge est encore incomplète. L'objectif est de déterminer quel code s'exécute en parcourant la pile des appels sans instrumentation, sur les architectures où cela est possible. Ceci permet d'avoir plus de détails sur les appels, et aide à analyser les problèmes dans lesquels du temps est passé dans les librairies systèmes ou les pilotes. Nous travaillons sur les fonctions nécessaires pour ce parcours de pile et l'identification des symboles, et toute aide est la bienvenue.

-

Disponibilité

-

Le profileur fonctionne en mode soit "Pseudostack" soit "stackwalking" en fonction de votre environment. Voir la description au-dessus pour les différences entre ces 2 modes.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Compilé en localVersion "Nightly"Version officielle (Gecko 15.0+)
WindowsStackwalking (étapes de configuration à suivre)StackwalkingPseudostack
MacStackwalkingStackwalkingPseudostack
LinuxPseudo stack (Bug concernant l'activation du stackwalking)Pseudo stack (Bug concernant l'activation du stackwalking)Pseudostack
FennecPseudostackNon supporté (Bug)Non supporté(Bug)
B2GPseudostack (patchs à appliquer au source)???Non supporté(Bug)
-

Exécuter le profileur

-
    -
  1. Utiliser une version "nightly" ou compiler avec ac_add_options --enable-profiling (activez aussi les optimizations afin que que le profilage soit significatif).
  2. -
  3. Installer la dernière version de l'extension Profileur. Si le module n'est pas visible, activer 'Affichage ->Barre d'outils->Barre des modules'. Laissez l'extension se mettre à jour.
  4. -
  5. Contrôler l'exécution du profileur depuis le menu qui s'ouvre en cliquant sur la partie Profileur de la barre des module en bas à droite.
  6. -
  7. Démarrer le profiler avant d'exécuter l'action anormalement lente ou le laisser simplement tourner
  8. -
  9. Utilisez le bouton "Analyse" ou le raccourci Ctrl-Shift-O (Cmd-Shift-O sur Mac OS X) pour visualiser le résultat en cours sur le site du Profileur
  10. -
  11. Sauvegarder le profil en local, ou utiliser l'option Upload et mémoriser l'URL associée.
  12. -
  13. Ouvrir un bug sur bugzilla concernant le problème de performance avec le fichier ou l'URL joint, ou les transmettre à une personne capable de s'en occuper
  14. -
-

Profiler une compilation en local sous Windows

-

If you built Firefox for Windows locally and you would like to use the local symbols with the profiler, you will need to run an additional tool; see Profiling with the Built-in Profiler and Local Symbols on Windows.

-

Profiler Firefox mobile

-
    -
  1. You'll need a custom build, this build should be built with optimization, STRIP_FLAGS="--strip-debug" and ac_add_options --disable-elf-hack (until we fix {{bug(747033)}}) but should NOT be built with --enable-profiling.
  2. -
  3. You'll need to have adb and arm-eabi-addr2line in your bash PATH, so use locate arm-eabi-addr2line (on linux) or mdfind name:arm-eabi-addr2line (on OS X) and stick an export to its location in ~/.bash_profile. The extension will invoke bash to use adb and addr2line.
  4. -
  5. Install the latest version of the extension in your host machine's Firefox browser that has your phone reachable via ADB.
  6. -
  7. On your first run use "Get Libs". You'll need to repeat this step when switching phones.
  8. -
  9. Start Firefox mobile normally and hit "Pull". This will recognize the instance of Firefox mobile and restart it with profiling enabled. Run your benchmark and hit "Pull" again.
  10. -
-

Profiler "Boot to Gecko"

-
-

Note: Pour l'instant une carte SD est requise, jusqu'à ce que le  {{bug(758697)}} soit fermé.

-
-
    -
  1. You'll need a local build of Boot to Gecko; the default build configuration is fine.
  2. -
  3. You'll need to have adb and arm-eabi-addr2line in your bash PATH, so use locate arm-eabi-addr2line (on linux) or mdfind name:arm-eabi-addr2line (on OS X) and stick an export to its location in ~/.bash_profile. The extension will invoke bash to use adb and arm-eabi-addr2line. If they are not there the process will fail or you'll only see raw addresses
  4. -
  5. In order to get symbols to work you may need to avoid stripping them. I'm not sure the best way to do this. Some candidates are adding STRIP_FLAGS="--strip-debug"  to gonk-misc/default-gecko-config (this is copied to objdir-gecko/.mozconfig by some part of the build system)
  6. -
  7. Install the latest version of the extension in your host (Desktop) machine's Firefox browser that has your phone reachable via ADB.
  8. -
  9. On your first run use "Get Libs". You'll need to repeat this step when switching reflashing/switching phone (this step needs to be done every time you update gecko). "Get Libs" will skip any existing files, so you'll need to delete them so that the new ones get pulled. They are stored in /tmp/[device id]/
  10. -
  11. Make sure B2G is running and hit "Pull". This will recognize the instance of B2G and restart it with profiling enabled. Run your benchmark and hit "Pull" again.
  12. -
-

Profiling content processes. Apply this patch to the profiler add-on.

-
-

Warning: When you're done profiling restart Boot to Gecko using adb shell stop b2g && adb shell start b2g.

-
-

Contribuer

-

Le bug listant les problèmes ouverts est le {{ bug("713227") }}. Le source se situe dans {{ Source("tools/profiler") }}.

-

Le source de l'extension Profileur se trouve sur : https://github.com/bgirard/Gecko-Profiler-Addon.

-

Le dépôt de source Cleopatra se trouve sur : https://github.com/bgirard/cleopatra.

-

Fonctionnalités prévues

-

Here's a list of feature ideas that we haven't committed to yet; feel free to add your ideas:

- -

Capture d'écran

-

3b.png

diff --git a/files/fr/performance/scroll-linked_effects/index.html b/files/fr/performance/scroll-linked_effects/index.html deleted file mode 100644 index 9540c172cf..0000000000 --- a/files/fr/performance/scroll-linked_effects/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Effets liés au défilement -slug: Performance/Scroll-linked_effects -translation_of: Mozilla/Performance/Scroll-linked_effects ---- -

La définition d’un effet lié au défilement est un effet mis en œuvre dans une page web où quelque chose change en fonction de la position de défilement, par exemple une propriété de positionnement, dans le but de créer un effet de parallaxe. Cet article aborde les effets liés au défilement, leur impact sur les perfomances, les outils associés, et les techniques possibles d’atténuation.

- -

Les effets de défilement expliqués

- -

Souvent, les effets de défilement sont mis en œuvre en écoutant l’événement {{event("scroll")}} puis en mettant à jour des éléments de la page d’une certaine façon (généralement les propriétés CSS {{cssxref("position")}} ou {{cssxref("transform")}}). Vous pouvez trouver un exemple de ces effets ici : CSS Scroll API: Use Cases.

- -

Ces effets fonctionnent très bien avec les navigateurs où le défilement se fait de manière synchrone sur le thread (fil d’exécution) principal du navigateur. Toutefois, la plupart des navigateurs supportent aujourd’hui une sorte de défilement asynchrone afin de proposer aux utilisatrices et utilisateurs une expérience stable à 60 images par seconde. Dans le modèle de défilement asynchrone, la position visuelle du défilement est mise à jour dans le thread de composition, et est visible à l’utilisatrice et l’utilisateur avant que l’évènement {{event("scroll")}} soit mis à jour dans le DOM et émis sur le thread principal. Cela signifie que les effets mis en œuvre seront légèrement en retard par rapport à la position du défilement telle que l’utilisatrice ou l’utilisateur la voit à l’écran. Cela peut rendre l’effet décalé ou saccadé, ce que nous voulons éviter.

- -

Les exemples suivants présentent des effets qui fonctionneraient mal avec le scroll asynchrone, accompagnés de versions équivalentes qui fonctionnent correctement.

- -

Exemple 1 : positionnement sticky

- -

Voici une mise en œuvre d’un effet de positionnement sticky (adhérent), où la div "toolbar" va adhérer au haut de l’écran à mesure que vous défilez vers le bas.

- -
<body style="height: 5000px" onscroll="document.getElementById('toolbar').style.top = Math.max(100, window.scrollY) + 'px'">
- <div id="toolbar" style="position: absolute; top: 100px; width: 100px; height: 20px; background-color: green"></div>
-</body>
- -

Cette mise en œuvre de positionnement sticky s’appuie sur un gestionnaire d’évènement scroll pour repositionner la div "toolbar". Comme le gestionnaire d’évènement scroll est exécuté dans le JavaScript sur le thread principal du navigateur, il sera asynchrone par rapport au défilement vu par l’utilisatrice ou l’utilisateur. Par conséquent, avec le défilement asynchrone, le gestionnaire d’évènement sera retardé par rapport au défilement visible, et ainsi la div ne restera pas visuellement fixe comme prévu. Au lieu de cela, elle va se déplacer avec le défilement de l’utilisatrice ou utilisateur, puis « sauter » vers sa position attendue quand le gestionnaire d’évènement scroll est exécuté. Ces déplacements et sauts constants produisent un effet visuel saccadé. Une manière de mettre cela en œuvre sans le gestionnaire d’évènement scroll est d’utiliser la propriété CSS conçue dans ce but :

- -
<body style="height: 5000px">
- <div id="toolbar" style="position: sticky; top: 0px; margin-top: 100px; width: 100px; height: 20px; background-color: green"></div>
-</body>
- -

Cette version fonctionne bien avec le défilement asynchrone car la position de la div "toolbar" est mise à jour par le navigateur à mesure que l’utilisatrice ou l’utilisateur fait défiler la page.

- -

Exemple 2 : défilement magnétique

- -

{{deprecated_header}}

- -

Voici une mise en œuvre de défilement magnétique, où la position du défilement est ramenée vers une destination particulière quand le défilement de l’utilisatrice ou utilisateur s’arrête près de cette destination.

- -
<body style="height: 5000px">
- <script>
-    function snap(destination) {
-        if (Math.abs(destination - window.scrollY) < 3) {
-            scrollTo(window.scrollX, destination);
-        } else if (Math.abs(destination - window.scrollY) < 200) {
-            scrollTo(window.scrollX, window.scrollY + ((destination - window.scrollY) / 2));
-            setTimeout(snap, 20, destination);
-        }
-    }
-    var timeoutId = null;
-    addEventListener("scroll", function() {
-        if (timeoutId) clearTimeout(timeoutId);
-        timeoutId = setTimeout(snap, 200, parseInt(document.getElementById('snaptarget').style.top));
-    }, true);
- </script>
- <div id="snaptarget" style="position: relative; top: 200px; width: 100%; height: 200px; background-color: green"></div>
-</body>
- -

Dans cet exemple, un gestionnaire d’évènement scroll détecte si la position du défilement est à moins de 200 pixels du haut de la div "snaptarget". Le cas échéant, il déclenche une animation pour ramener la position du défilement sur le haut de la div. Comme cette animation est gérée par JavaScript sur le thread principal du navigateur, elle peut être interrompue par d’autres codes JavaScript s’exécutant dans d’autres onglets ou d’autres fenêtres. Par conséquent, il peut arriver que l’animation apparaisse saccadée et pas aussi fluide qu’attendu. À la place, utiliser la propriété CSS {{cssxref("CSS_Scroll_Snap_Points", "snap points")}} permettra au navigateur de gérer l’animation de manière asynchrone, produisant un effet visuel fluide.

- -
<body style="height: 5000px">
- <style>
-    body {
-        scroll-snap-type: proximity;
-        scroll-snap-destination: 0 0;
-    }
-    #snaptarget {
-        scroll-snap-coordinate: 0 -8px;
-    }
- </style>
- <div id="snaptarget" style="position: relative; top: 200px; width: 100%; height: 200px; background-color: green"></div>
-</body>
- -

Cette version fonctionne de manière fluide dans le navigateur même si le thread principal du navigateur est occupé par de longs scripts.

- -

Autres effets

- -

Dans de nombreux cas, les effets liés au défilement peuvent être réécris en utilisant le CSS et en faisant en sorte qu’ils soient calculés sur le thread de composition. Toutefois, dans certains cas, les API actuelles proposées par les navigateurs ne permettent pas cela. Dans tous les cas, cependant, Firefox affichera un avertissement dans la console de développement (à partir de la version 46) s’il détecte la présence d’un effet lié au défilement sur une page. Les pages qui utilisent des effets de défilement sans écouter les évènements scroll en JavaScript n’auront pas cet avertissement. Voir l’article de blog Asynchronous scrolling in Firefox pour des exemples supplémentaires d’effets qui peuvent être implementés en utilisant CSS pour éviter les saccades.

- -

Améliorations futures

- -

À l’avenir, nous aimerions supporter davantage d’effets dans le compositeur. Dans ce but, nous avons besoin de vous (oui, vous !) pour nous en dire plus sur le genre d’effets liés au défilement que vous essayez de mettre en œuvre, afin que nous puissions trouver de bons moyens de les supporter dans le compositeur. Actuellement, il y a quelques propositions d’API qui permettraient de tels effets, et elles ont chacune leurs avantages et leurs inconvénients. Les propositions actuellement à l’étude sont :

- - - -

Appel à l’action

- -

Si vous avez des pensées et des opinions sur :

- - - -

Contactez-nous ! Vous pouvez vous joindre à la discussion sur la liste de diffusion public-houdini.

diff --git a/files/fr/performance/signaler_un_probleme_de_performances/index.html b/files/fr/performance/signaler_un_probleme_de_performances/index.html deleted file mode 100644 index a01158b775..0000000000 --- a/files/fr/performance/signaler_un_probleme_de_performances/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Signaler un problème de performances -slug: Performance/Signaler_un_probleme_de_performances -tags: - - Performances - - Profilage - - QA - - tests -translation_of: Mozilla/Performance/Reporting_a_Performance_Problem ---- -

Cet article va vous expliquer comment signaler un problème de performances au moyen de l'extension Gecko Profiler.

- -

Installation de l'extension Gecko Profiler

- -
    -
  1. Téléchargez et lancez une version nightly de Firefox pour votre plateforme. Avant de la lancer, assurez-vous de fermer toutes les autres instances de Firefox ;
  2. -
  3. Assurez-vous que cette version fonctionne correctement. Pour cela, allez dans « À propos de Nightly » et vérifiez qu'à la troisième ligne, « nightly » est bien le canal de mise à jour. L'icône devrait être un globe bleu ;
  4. -
  5. Téléchargez la dernière version de l'extension Gecko Profiler et installez-la en faisant glisser le .xpi au dessus de la fenêtre de Firefox ;
  6. -
  7. L'extension apparaitra sous la forme d'une icône de globe à droite de la barre d'URL ;
  8. -
  9. N'oubliez pas de désactiver ou de désinstaller l'extension si vous ne l'utilisez plus.
  10. -
- -

Utilisation du profileur

- -
    -
  1. Essayez de reproduire le problème de performances. Si possible, laissez-le se manifester pendant 5 à 10 secondes ;
  2. -
  3. Cliquez sur l'icône de l'extension et sélectionnez « Analyse ». Essayez de le faire dans les secondes qui suivent l'apparition du souci de performances. L'extension n'enregistre que quelques secondes. Si vous voyez apparaitre un gros bloc rouge sur la ligne du temps, c'est bon signe ;
    -
  4. -
  5. Les données vont s'ouvrir dans un nouvel onglet. Un bouton « Share » en bas à gauche va envoyer les données collectées vers un serveur de Mozilla et fournir un lien pour y accéder. Copiez l'adresse de ce lien via un clic droit. Créez un ticket dans Bugzilla pour décrire le problème et collez-y ce lien, ou envoyez-le directement à la bonne personne. Essayez de décrire précisément le contexte afin de permettre de reproduire le problème. Indiquez l'URL et ce qu'il faut faire pour que survienne le souci (par exemple faire défiler la page sur gmail.com).
    -  
  6. -
diff --git "a/files/fr/places/acc\303\250s_aux_marque-pages/index.html" "b/files/fr/places/acc\303\250s_aux_marque-pages/index.html" deleted file mode 100644 index dc9f5267a8..0000000000 --- "a/files/fr/places/acc\303\250s_aux_marque-pages/index.html" +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Accès aux marque-pages -slug: Places/Accès_aux_marque-pages -tags: - - Développement_de_Mozilla - - Extensions - - Firefox 3 - - Places -translation_of: Mozilla/Tech/Places/Retrieving_part_of_the_bookmarks_tree ---- -

- -

Ce document permet de démarrer rapidement pour ceux qui désirent retrouver rapidement une portion de l'arbre des marque-pages. Ceux-ci sont accessibles via le Système de requêtes de Places, qui contient des informations plus générales. Pour en savoir plus sur l'API du service de marque-pages, consultez Service de marque-pages.

- -

Obtention des objets de requête et d'options

- -

Toutes les interrogations se font au travers du service d'historique. Tout d'abord, il faut obtenir une requête vide et des objets d'options depuis celui-ci :

- -
var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
-                               .getService(Components.interfaces.nsINavHistoryService);
-var options = historyService.getNewQueryOptions();
-var query = historyService.getNewQuery();
-
- -

Recherche du dossier désiré

- -

Les ID de dossiers connus sont obtenus depuis le service de marque-pages. Les attributs définis dans /toolkit/components/places/public/nsINavBookmarksService.idl sont : placesRoot, bookmarksRoot, tagRoot et toolbarFolder. Il est également possible d'obtenir des ID de dossiers depuis une requête antérieure.

- -

Cet exemple récupèrera le contenu de la barre personnelle :

- -
var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
-                                 .getService(Components.interfaces.nsINavBookmarksService);
-var toolbarFolder = bookmarksService.toolbarFolder;
-
- -

Remplissage des objets de requête et d'options

- -

Si vous désirez un arbre complet des marque-pages, il sera nécessaire d'utiliser l'option de groupement GROUP_BY_FOLDER. Actuellement, le système de requêtes n'a pas besoin de cette option, et renverra toujours une hiérarchie lorsque le contenu d'exactement un dossier est demandé, il s'agit du bug 331487. Une fois qu'il sera corrigé, une requête de marque-pages sans GROUP_BY_FOLDER renverra une liste plate de tous les marque-pages dans tous les dossierset sous-dossiers correspondant à la requête.

- -

Pour une requête « normale » de marque-pages, vous aurez un dossier racine. Ce dossier sera donné à setFolders dans votre objet de requête :

- -
options.setGroupingMode(options.GROUP_BY_FOLDER);
-query.setFolders([toolbarFolder], 1);
-
- -

Exécution de la requête

- -

Les fonctions executeQuery et executeQueries renverront un objet nsINavHistoryResult contenant les résultats de la requête :

- -
var result = historyService.executeQuery(query, options);
-
- -

Lecture des résultats

- -

Lorsque la requête se fait sur exactement un dossier groupé par dossier et sans paramètres compliqués comme des mots-clés ou des intervalles de date (comme dans cet exemple), la racine root de ce résultat sera un nsINavHistoryContainerResultNode correspondant à votre dossier. Si la requête est complexe ou que vous n'avez pas utilisé GROUP_BY_FOLDER, la racine sera un nsINavHistoryQueryResultNode.

- -

Avant d'accéder aux enfants d'un conteneur de résultats, il faut d'abord l'ouvrir, et il est ensuite possible de parcourir ses enfants. Tant que le conteneur est ouvert, il écoutera les notifications du système de marque-pages pour rester à jour. Lorsque vous en avez terminé, assurez-vous de fermer le conteneur pour libérer les ressources. Dans le cas contraire, il continuera à recevoir des notifications et à se mettre à jour, ce qui ralentira tout le navigateur.

- -
var rootNode = result.root;
-rootNode.containerOpen = true;
-
-// parcourt les enfants directs de ce dossier et les affiche en console
-for (var i = 0; i < rootNode.childCount; i ++) {
-  var node = rootNode.getChild(i);
-  dump("Enfant : " + node.title + "\n");
-}
-
-// toujours fermer un conteneur après utilisation !
-rootNode.containerOpen = false;
-
- -

Si vous rencontrez un nœud dont le type est RESULT_TYPE_FOLDER ou un autre type de conteneur, il peut être ouvert pour parcourir sa hiérarchie. La section « Utilisation des résultats » dans Places:Système de requêtes vous intéressera sûrement pour comprendre quels sont les différents types de résultats.

- -

Listing du code complet

- -
var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
-                               .getService(Components.interfaces.nsINavHistoryService);
-var options = historyService.getNewQueryOptions();
-var query = historyService.getNewQuery();
-
-var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
-                                 .getService(Components.interfaces.nsINavBookmarksService);
-var toolbarFolder = bookmarksService.toolbarFolder;
-
-// la ligne suivante peut être commentée pour l'instant tant que le bug n'a pas été corrigé ; la version finale en aura besoin
-options.setGroupingMode(options.GROUP_BY_FOLDER);
-query.setFolders([toolbarFolder], 1);
-
-var result = historyService.executeQuery(query, options);
-var rootNode = result.root;
-rootNode.containerOpen = true;
-
-// parcourt les enfants directs de ce dossier et les affiche en console
-for (var i = 0; i < rootNode.childCount; i ++) {
-  var node = rootNode.getChild(i);
-  dump("Enfant : " + node.title + "\n");
-}
-
-// toujours fermer un conteneur après utilisation !
-rootNode.containerOpen = false;
-
diff --git a/files/fr/places/index.html b/files/fr/places/index.html deleted file mode 100644 index 3ffe3a891d..0000000000 --- a/files/fr/places/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Places -slug: Places -tags: - - Développement_de_Mozilla - - Extensions - - Firefox 3 - - Places -translation_of: Mozilla/Tech/Places ---- -

- -

Places est une réécriture des systèmes de marque-pages et d'historique de Firefox. Le but est d'obtenir sensiblement plus de flexibilité et d'avoir la possibilité de faire des requêtes complexes. En font également partie de nouvelles fonctionnalités comme le stockage des favicons et la possibilité d'annoter des pages avec des informations arbitraires. Places fournit également une nouvelle interface utilisateur, qui n'est pas abordée dans cette documentation pour les développeurs (consultez le wiki de Mozilla au sujet de Places).

- -

Places stocke ses données dans une base de données sqlite à l'aide des interfaces mozStorage.

- -

Sujets principaux

- -
-
Système de requêtes
-
Comment interroger le système de marque-pages et d'historique avec des paramètres particuliers.
-
- -
-
Accès aux marque-pages
-
Comment accéder aux marque-pages.
-
- -
-
Conteneurs personnalisés
-
Comment créer un conteneur personnalisé pour afficher des liens d'une tierce partie dans l'affichage des Places.
-
- -
-
Vues
-
Comment instancier et configurer des vues sur les Places dans vos propres applications ou extensions.
-
- -
-
Instanciation de vues
-
Comment instancier un contrôle avec une vue sur les Places intégrée pour votre extension ou application.
-
- -

Documentation sur les API de services

- -
-
Service d'historique
-
Service de marque-pages
-
Service d'annotations
-
Service de marque-pages dynamiques
-
Service de favicons
-
Service d'étiquetage
-
- -

Documents de conception

- -
-
Conception de la base de données de Places
-
Aperçu de haut niveau du schéma de la base de données.
-
Conception du service d'historique
-
Conception du service d'historique.
-
Conception du service de marque-pages
-
Conception du service de marque-pages.
-
Conception du service d'annotations
-
Conception du service d'annotations.
-
diff --git "a/files/fr/places/syst\303\250me_de_requ\303\252tes/index.html" "b/files/fr/places/syst\303\250me_de_requ\303\252tes/index.html" deleted file mode 100644 index 79deeddd25..0000000000 --- "a/files/fr/places/syst\303\250me_de_requ\303\252tes/index.html" +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Système de requêtes -slug: Places/Système_de_requêtes -tags: - - Développement_de_Mozilla - - Extensions - - Firefox 3 - - Places -translation_of: Mozilla/Tech/Places/Querying ---- -

- -

L'historique et les marque-pages de Firefox sont accessibles à l'aide des API de requêtes « Places ». Ces API permettent d'exécuter des requêtes complexes sur l'historique, les marque pages ou les deux à la fois (à partir de Firefox 3 Alpha 6). Le résultat d'une requête est un objet qui contiendra une liste à plat ou une structure arborescente des données correspondantes. Les définitions de l'API de requête et des structures de données résultantes sont accessibles dans toolkit/components/places/public/nsINavHistoryService.idl. Cette page fournit une introduction à certaines opérations courantes, et des exemples d'utilisation des API principales.

- -

Exécution d'une requête

- -

Les requêtes Places sont formées de plusieurs parties basiques :

- - - -

La première étape est de créer la requête et ses options, et de les remplir avec les paramètres désirés. Utilisez nsINavHistoryService.getNewQuery() et nsINavHistoryService.getNewQueryOptions() pour obtenir des objets vides. Les valeurs par défaut pour ces objets résulteront en une requête renvoyant tout l'historique de votre navigateur dans une liste à plat :

- -
var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
-                               .getService(Components.interfaces.nsINavHistoryService);
-
-// en l'absence de paramètres de requête, on obtiendra tout l'historique
-// XXX l'ordre de tri par défaut est... ?
-var options = historyService.getNewQueryOptions();
-
-// en l'absence de paramètres de requête, on obtiendra tout
-var query = historyService.getNewQuery();
-
-// exécution de la requête
-var result = historyService.executeQuery(query, options);
-
-
- -

Types de résultats

- -

nsINavHistoryQueryOptions dispose d'une propriété resultType permettant de configurer le groupement et niveau de détail à renvoyer dans les résultats. Les différentes valeurs pour cette propriété sont listées ci-dessous. Ces valeurs sont également des propriétés de nsINavHistoryQueryOptions, et l'on y accède de la manière suivante : Components.interfaces.nsINavHistoryQueryOptions.RESULTS_AS_VISIT.

- - - -

Paramètres de recherche basiques d'une requête

- -

const unsigned long TIME_RELATIVE_EPOCH = 0 const unsigned long TIME_RELATIVE_TODAY = 1 const unsigned long TIME_RELATIVE_NOW = 2 attribute PRTime beginTime attribute unsigned long beginTimeReference readonly attribute boolean hasBeginTime readonly attribute PRTime absoluteBeginTime attribute PRTime endTime attribute unsigned long endTimeReference readonly attribute boolean hasEndTime readonly attribute PRTime absoluteEndTime attribute AString searchTerms readonly attribute boolean hasSearchTerms attribute long minVisits attribute long maxVisits attribute boolean onlyBookmarked attribute boolean domainIsHost attribute AUTF8String domain readonly attribute boolean hasDomain attribute boolean uriIsPrefix attribute nsIURI uri readonly attribute boolean hasUri attribute boolean annotationIsNot attribute AUTF8String annotation readonly attribute boolean hasAnnotation readonly attribute unsigned long folderCount

- -

Options de configuration basiques d'une requête

- -

const unsigned short GROUP_BY_DAY = 0 const unsigned short GROUP_BY_HOST = 1 const unsigned short GROUP_BY_DOMAIN = 2 const unsigned short GROUP_BY_FOLDER = 3 const unsigned short SORT_BY_NONE = 0 const unsigned short SORT_BY_TITLE_ASCENDING = 1 const unsigned short SORT_BY_TITLE_DESCENDING = 2 const unsigned short SORT_BY_DATE_ASCENDING = 3 const unsigned short SORT_BY_DATE_DESCENDING = 4 const unsigned short SORT_BY_URI_ASCENDING = 5 const unsigned short SORT_BY_URI_DESCENDING = 6 const unsigned short SORT_BY_VISITCOUNT_ASCENDING = 7 const unsigned short SORT_BY_VISITCOUNT_DESCENDING = 8 const unsigned short SORT_BY_KEYWORD_ASCENDING = 9 const unsigned short SORT_BY_KEYWORD_DESCENDING = 10 const unsigned short SORT_BY_DATEADDED_ASCENDING = 11 const unsigned short SORT_BY_DATEADDED_DESCENDING = 12 const unsigned short SORT_BY_LASTMODIFIED_ASCENDING = 13 const unsigned short SORT_BY_LASTMODIFIED_DESCENDING = 14 const unsigned short SORT_BY_ANNOTATION_ASCENDING = 15 const unsigned short SORT_BY_ANNOTATION_DESCENDING = 16 const unsigned short RESULTS_AS_URI = 0 const unsigned short RESULTS_AS_VISIT = 1 const unsigned short RESULTS_AS_FULL_VISIT = 2 attribute unsigned short sortingMode attribute AUTF8String sortingAnnotation attribute unsigned short resultType attribute boolean excludeItems attribute boolean excludeQueries attribute boolean excludeReadOnlyFolders attribute boolean expandQueries attribute boolean includeHidden attribute boolean showSessions attribute unsigned long maxResults const unsigned short QUERY_TYPE_HISTORY = 0 const unsigned short QUERY_TYPE_BOOKMARKS = 1 const unsigned short QUERY_TYPE_UNIFIED = 2 attribute unsigned short queryType

- -

Requêtes complexes

- -

Il est possible de passer un ou plusieurs objets nsINavHistoryQuery à executeQueries(). Au sein d'un objet de requête, tous les paramètres sont combinés ensemble avec l'opérateurET. Les conditions pour différents objets de requête sont ensuite combinées avec l'opérateurOU. Ceci permet une implémentation et une interface plus simples qu'une opération logique complète avec des clauses imbriquées tout en restant expressif.

- -

Voici un exemple de requête pour toutes les pages visitées qui contiennent le mot « firefox » dans le titre/l'URL ou qui ont été visitées aujourd'hui sur le site mozilla.org.

- -
// le premier objet de requête cherche « firefox » dans le titre/l'URL
-var query1 = historyService.getNewQuery();
-query1.searchTerms = "firefox";
-
-// le second objet de requête cherche des pages visitées dans les dernières 24 heures ET provenant de mozilla.org
-var query2 = historyService.getNewQuery();
-query2.beginTimeReference = query2.TIME_RELATIVE_NOW;
-query2.beginTime = -24 * 60 * 60 * 1000000; // 24 heures en microsecondes
-query2.endTimeReference = query2.TIME_RELATIVE_NOW;
-query2.endTime = 0; // maintenant
-query2.domain = "mozilla.org";
-
-var result = historyService.executeQueries([query1, query2], 2, options);
-
- -
Note : La recherche par mots-clés ne fonctionne pas correctement au travers des requêtesOU. Le comportement actuel effectue la requête normale et sélectionne ensuite les mots-clés de la première requête et filtre tous les résultats. (En d'autres termes, les mots-clés de la première requête sont combinés avecET pour toutes les requêtes.) Les mots-clés des requêtes qui suivent sont ignorés. Il s'agit du bug 320332.
- -

Requêtes de marque-pages

- -

Un guide expliquant comment effectuer rapidement des requêtes simples sur les marque-pages se trouve dans Accès aux marque-pages.

- -

Le contenu des dossiers de marque-pages peut être obtenu en définissant le membre « folders » dans l'objet de requête. Cet élément est un tableau d'ID de dossiers venant du service de marque-pages. Typiquement, vous ne donnerez qu'un ID de dossier dans cette liste, ce qui vous fournira le contenu de ce dossier. Vous pouvez cependant définir plusieurs dossiers et le résultat sera l'union de tous ces dossiers.

- -
Attention : Il existe une option GROUP_BY_FOLDER qui est censée affecter les requêtes de marque-pages. Celle-ci n'est pas implémentée, comme l'indique le bug 331487. Vous devriez toujours utiliser cette option si vous voulez une hiérarchie de marque-pages. L'absence de cette option signifiera que la valeur de retour doit être une liste à plat de tous les éléments de marque-pages dans tous les dossiers renvoyés par la requête.
- -

Pour le tri, vous utiliserez généralement SORT_BY_NONE (la valeur par défaut), puisque celle-ci renverra les éléments dans leur ordre « naturel » tel que spécifié par l'utilisateur dans le gestionnaire de marque-pages. D'autres tris fonctionneront cependant.

- -

Pour les requêtes de marque-pages, vous ne voudrez généralement pas de paramètres de requête pour obtenir tous les éléments des dossiers demandés. C'est lorsque vous spécifiez exactement un dossier, GROUP_BY_FOLDER et aucun paramètre de requête que le système sera le plus efficient dans la recherche et la maintenance à jour des résultats, puisque cela correspond exactement à un dossier de marque-pages.

- -
var bookmarkService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
-                                .getService(Components.interfaces.nsINavBookmarksService);
-// |query| et |options| sont des objets créés dans la section précédente
-query.setFolders([bookmarkService.toolbarRoot], 1);
-options.setGroupingMode([options.GROUP_BY_FOLDER], 1);
-var result = historyService.executeQuery(query, options);
-
- -

Sérialisation des requêtes

- -

Les requêtes et objets d'options peuvent être sérialisées en une chaîne commençant par « place: » à l'aide de queriesToQueryString. La chaîne résultante peut être enregistrée ou ajoutée aux marque-pages. Lorsqu'une URI « place: » est ajoutée aux marque-pages, elle permettra l'affichage des résultats de la requête lorsqu'elle sera ouverte par l'utilisateur. Les objets originaux peuvent être retirés de la chaîne avec queryStringToQueries.

- -

Faites attention, queryStringToQueries peut ne renvoyer aucun objet de requête si la chaîne est vide. Votre code doit gérer ce cas. Il y aura par contre toujours une structure d'options renvoyée. Si aucune option n'a été spécifiée, elle aura les valeurs par défaut. S'il aucun paramètre de requête n'avait été spécifié mais que la chaîne n'était pas vide (il y avait des options), il est possible que vous obteniez un objet de requête contenant les valeurs de requête par défaut.

- -

Voici un exemple de sérialisation et désérialisation de deux requêtes et d'un objet d'options :

- -
var queryString = historyService.queriesToQueryStrings([query1, query2], 2, options);
-
-var queriesRef = { };
-var queryCountRef = { };
-var optionsRef = { };
-historyService.queryStringToQueries(queryString, queriesRef, queryCountRef, optionsRef);
-// utilisez maintenant queriesRef.value, optionsRef.value
-
- -

Une référence des termes disponibles pour les URI « place: » est disponible dans PlaceURI.

- -

Utilisation des résultats

- -

La manière la plus courante d'utiliser les résultats et d'implémenter une vie. Une vue intégrée mettant les résultats dans des contrôles d'arbres existent, mais vous pouvez également implémenter la vôtre. Consultez Places:Vues pour plus de détails. Cette section explique comment accéder aux résultats directement, par exemple si vous créez votre propre vue ou désirez simplement y accéder sans les afficher.

- -

Note : faites attention lorsque vous accédez à des nœuds sans conserver de références à ceux-ci. Les notifications envoyées à l'historique et au système de marque-pages, ainsi que les commandes exécutées par le programmeur comme un tri peuvent provoquer un changement dans la structure et des nœuds peuvent être insérés, retirés ou remplacés.

- -

L'objet nsINavHistoryResult renvoyé par executeQuery()/executeQueries() contient la liste des correspondances de la requête de marque-pages ou d'historique donnée. Ces résultats sont conservés dans une structure arborescente de nœuds. Le type d'un nœud peut être obtenu à l'aide de son attribut type. Celui-ci indique l'interface à utiliser avec QueryInterface sur le nœud afin d'en obtenir des informations plus détaillées :

- - - -

Exemple de détection du type d'un nœud

- -
var Ci = Components.interfaces;
-switch(node.type)
-  case node.RESULT_TYPE_URI:
-    dump("Résultat URI " + node.uri + "\n");
-    break;
-  case node.RESULT_TYPE_VISIT:
-    var visit = node.QueryInterface(Ci.nsINavHistoryVisitResultNode);
-    dump("Résultat de visite " + node.uri + " session = " + visit.sessionId + "\n");
-    break;
-  case node.RESULT_TYPE_FULL_VISIT:
-    var fullVisit = node.QueryInterface(Ci.nsINavHistoryFullVisitResultNode);
-    dump("Résultat complet de visite " + node.uri + " session = " + fullVisit.sessionId + " transitionType = " +
-         fullVisit.transitionType + "\n");
-    break;
-  case node.RESULT_TYPE_HOST:
-    var container = node.QueryInterface(Ci.nsINavHistoryContainerResultNode);
-    dump("Hôte " + container.title + "\n");
-    break;
-  case node.RESULT_TYPE_REMOTE_CONTAINER:
-    var container = node.QueryInterface(Ci.nsINavHistoryContainerResultNode);
-    dump("Conteneur distant " + container.title + " type = " + container.remoteContainerType + "\n");
-    break;
-  case node.RESULT_TYPE_QUERY:
-    var query = node.QueryInterface(Ci.nsINavHistoryQueryResultNode);
-    dump("Requête, URI place = " + query.uri + "\n");
-    break;
-  case node.RESULT_TYPE_FOLDER:
-    // Notez que le dossier est également de type type nsINavHistoryContainerResultNode par défaut,
-    // mais qu'il n'est pas possible de faire un QI sur nsINavHistoryQueryResultNode pour accéder
-    // à la requête et aux options qui l'ont créé.
-    dump("Dossier " + node.title + " id = " + node.itemId + "\n");
-    break;
-  case node.RESULT_TYPE_SEPARATOR:
-    dump("-----------\n");
-    break;
-}
-
- -

Conteneurs

- -

Les conteneurs conservent des listes d'autres conteneurs et de nœuds de résultats. Chaque résultat a un conteneur représentant la racine de la requête. Il peut être obtenu à l'aide de l'attribut root du résultat. Pour les requêtes générales, ce conteneur racine est un nsINavHistoryQueryResultNode avec les paramètres de requête et options fournis dans la requête d'origine. Pour les requêtes correspondant à un dossier de marque-pages, il s'agira d'un nsINavHistoryContainerResultNode.

- -

Les conteneurs peuvent être ouverts ou fermés. Ceci correspond aux états open et closed dans une vue arborescente, et peut également correspondre à l'affichage et le masquage de menus. Pour obtenir le contenu d'un conteneur, il faut d'abord l'ouvrir. La plupart des conteneurs se remplissent d'eux-mêmes paresseusement, ouvrir un conteneur correspond donc à exécuter la requête donnée. Tant qu'un conteneur est ouvert, il écoutera les nofifications du système d'historique et de marque-pages et modifiera son contenu pour rester à jour. Pour cette raison, il vaut mieux fermer un conteneur dès que vous en avez terminé avec lui, car cela amènera de meilleures performances. Si vous fermez un conteneur et le rouvrez avant qu'aucune notification de changement d'historique ou de marque-pages se fasse, les résultats seront généralement encore là et l'opération sera rapide.

- -

Exemple d'examen d'un conteneur :

- -
var cont = result.root;
-cont.containerOpen = true;
-for (var i = 0; i < cont.childCount; i ++) {
-  var node = cont.getChild(i);
-  dump(node.title + "\n");
-}
-cont.containerOpen = false;
-
- -

L'interface de visualisation des résultats

- -

Si vous faites correspondre un résultat à une interface utilisateur, vous pouvez implémenter l'interface nsINavHistoryResultViewer et l'attacher au résultat avec l'attribut nsINavHistoryResult.viewer. Cet afficheur sera appelé lorsque l'arbre des résultats change, que ce soit le résultat d'une action de l'utilisateur ou de notifications des systèmes de marque-pages et d'historique. Votre implémentation pourra alors refléter ces changement dans l'interface utilisateur.

- -

Une interface de visualisation toute faite pour un nsITreeBoxObject est fournie, elle gère les nécessités d'affichage complexes d'un arbre. Cette interface d'objet est nsINavHistoryResultTreeViewer (un descendant de nsINavHistoryResultViewer) et peut être créée à l'aide du contrat @mozilla.org/browser/nav-history/result-tree-viewer;1.

- -
var treeviewer =
-  Components.classes["@mozilla.org/browser/nav-history/result-tree-viewer;1"]
-            .createInstance(Components.interfaces.nsINavHistoryResultTreeViewer);
-result.viewer = treeviewer;
-mytree.view = treeviewer.QueryInterface(Components.interfaces.nsITreeView);
-
- -

Tant le résultat que l'arbre s'enregistreront automatiquement auprès de l'objet de visualisation, respectivement à l'aide de l'attribut result et de la méthode setTree. Ne le faites pas explicitement.

diff --git a/files/fr/plug-n-hack/index.html b/files/fr/plug-n-hack/index.html deleted file mode 100644 index 9c97e7efb6..0000000000 --- a/files/fr/plug-n-hack/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Plug-n-Hack -slug: Plug-n-Hack -translation_of: Archive/Mozilla/Plug-n-Hack ---- -

Vue d'ensemble

- -

Plug-n-Hack (PnH) est un standard proposé par l'équipe de sécurité de Mozilla pour définir comment les outils de sécurité peuvent interagir avec les navigateurs de manière plus utile et utilisable.

- -

Les chercheurs en sécurité utilisent couramment les outils de sécurité en collaboration avec les navigateurs, mais jusqu'à maintenant l'intégration direct était requi d'écrire sur la plateforme et des extensions spécifiques du navigateur.

- -

La configuration d'un navigateur de travail avec un outil de sécurité peut être un processus pas évident, et cela peut décourager les gens ayant moins d'expériences dans l'utilisation de ces outils. Cela peut inclure les développeurs d'applications et les testeurs, exactement le genre de personnes que nous aimerions voir utiliser plus ces outils !

- -

Par exemple, pour configurer un navigateur pour utiliser un proxy d'interception qui peut gérer le trafic HTTPS, l'utilisateur doit généralement :

- - - -

Si l'une de ces étapes est effectuée de façon incorrecte, généralement le navigateur ne parvient pas à se connecter au site Web - déboguer ces problèmes peut être frustrant et chronophage.

- -

Sans intégration entre les outils de sécurité et les navigateurs, un utilisateur doit souvent basculer entre l'outil et leur navigateur à plusieurs reprises pour effectuer une simple tâche, comme l'interception d'une requête HTTP(S).

- -

Les outils de sécurité PnH permet de déclarer les fonctionnalités qu'ils prennent en charge ce qui est approprié pour invoquer directement depuis le navigateur.

- -

Un navigateur qui supporte PnH peut alors permettre à l'utilisateur d'invoquer une telle fonctionnalité sans avoir à basculer et de revenir à l'outil.

- -

Bien que certaines des capacités de PnH ont un sens fixe, en particulier autour de la configuration du proxy, la plupart des capacités sont complètement générique, permettant aux outils d'exposer toutes les fonctionnalités qu'ils veulent.

- -

Mettre en œuvre les caractéristiques ci-dessus dans Firefox et les outils sur lesquels nous travaillons et le soutien donne à nos équipes à un avantage, mais nous croyons que l'ouverture de telles capacités à tous les navigateurs et à tous les outils de sécurité sont beaucoup plus utile pour les chercheurs en sécurité et les développeurs d'applications et les testeurs.

- -

En conséquence, nous avons conçu et développé le protocole PnH à la fois pour le  navigateur et les outils indépendant. Le protocole actuel et l'implémentation dans Firefox sont réalisés sous la licence Mozilla Public License 2.0 ce qui signifie qu'il peut être incorporée dans des outils commerciaux sans frais.

- -


- Sujet Plug-n-Hack

- -

Phase 1

- -

Une offre simplifiée d'intégration et permet aux outils pd'avertir leurs capacités aux navigateurs

- -

Phase 2

- -

Cela permettra aux navigateurs d'avertir leurs capacités à des outils de sécurité

- -

Outils supportés PnH

- -

Les navigateurs et les outils peuvent soutenir ou travailler sur le support de PnH

- -

Impliquez-vous

- -

Comment mettre en œuvre PnH dans votre outil ou participer au développement de PnH

- -

 

diff --git a/files/fr/plug-n-hack/plug-n-hack_phase1/index.html b/files/fr/plug-n-hack/plug-n-hack_phase1/index.html deleted file mode 100644 index fd8ee8c5ca..0000000000 --- a/files/fr/plug-n-hack/plug-n-hack_phase1/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Plug-n-Hack Etape1 -slug: Plug-n-Hack/Plug-n-Hack_Phase1 -translation_of: Archive/Mozilla/Plug-n-Hack/Plug-n-Hack_Phase1 ---- -

L'étape 1 de Plug-n-Hack (PnH) permet une intégration facile et définit comment les outils de sécurité peuvent avertir leurs capacités pour les navigateurs.

- -

Outil de sécurité manifest

- -

Pour supporter PnH-1 les outils de sécurité fournissent un manifeste sur HTTP (S), qui définit les capacités que le navigateur peut utiliser.
- Il appartient aux auteurs de l'outil de décider comment l'URL du manifeste est publié.

- -

L'outil de configuration servant un document HTML (que nous appellerons dans la configuration du document de configuration) dans le navigateur. Cela peut entraîner le navigateur d'inspecter le manifeste et d'enregistrer l'outil par un tir de CustomEvent avec le type de ConfigureSecTool et une des propriété d'objet qui spécifie l'URL du manifeste de l'outil. Par exemple:

- -
var manifest = {"detail":{"url":"http://localhost:8080/manifest"}};
-var evt = new CustomEvent('ConfigureSecTool', manifest);
- -

Il est suggéré que les navigateurs souhaitant soutenir PnH limiter la manipulation des CustomEvents tels qu'ils sont ignorés lorsque l'événement se produit en dehors des actions initiées par l'utilisateur.
-
- Le document de configuration doit alors écouter un certain nombre d'autres événements:

- - - -

Vous pouvez voir un exemple d'un document de configuration dans le ZAP PnH addon. Il y a un autre (peut-être à jour) par exemple ici.

- -

Un exemple de manifest (pour OWASP ZAP) est :

- -
{
-  "toolName":"OWASP ZAP",
-  "protocolVersion":"0.2",
-  "features":{
-    "proxy":{
-      "PAC":"http://localhost:8080/proxy.pac",
-      "CACert":"http://localhost:8080/OTHER/core/other/rootcert/"
-    },
-    "commands":{
-      "prefix":"zap",
-      "manifest":"http://localhost:8080/OTHER/mitm/other/service/"
-    }
-  }
-}
- -

Le top du niveau du manifeste comprend des liens facultatifs à une PAC proxy et un certificat de CA racine.

- -

Seul l'option lié à un autre manifest qui décrit les commandes du navigateur peut invoquer.

- -

Le service des manifestes pour vos outils externes

- -

Vous voudrez peut-être utiliser le manifeste à partir d'un serveur web distant (exemple pour tester);

- -

Plug-n-hack nécessite des outils et des services du manifeste soient servis à partir de la même source que les points d'extrémité de l'API mais, à des fins de test, Ringleader (l'implémentation de l'addon Firefox du composant navigateur) vous permet de définir une préférence pour relâcher ou désactiver les contrôles d'origine. La préférence est

- -
ringleader.check.origin
- -

Ceci peut être réglé sur 'off' pour désactiver complètement les vérifications d'origine, ou 'noport' pour désactiver uniquement les vérifications de port.

- -

L'outil de sécurité des commandes du manifest

- -

Un exemple des commandes du manifest (de OWASP ZAP) est: https://code.google.com/p/zap-extensions/source/browse/branches/beta/src/org/zaproxy/zap/extension/plugnhack/resource/service.json

- -

Firefox UI

- -

Dans Firefox, les outils des commandes seront disponibles via la barre d'outils de développement (GCLI) https://developer.mozilla.org/en-US/docs/Tools/GCLI

- -

Un exemple de comment les commandes ZAP sont actuellement affichées sont :

- -

- -

Notez que les paramètres spécifiés par l'utilisateur peuvent être spécifiés pour les commandes, qui peuvent être du texte libre, une liste déroulante statique d'options ou une liste dynamique d'options obtenues à partir de l'outil sur demande.

- -

Donc, si vous sélectionnez la commande "zap scan", vous serez invité à sélectionner un site dans la liste des sites connus par ZAP.

- -

PnH ne spécifie pas comment les commandes d'outils doivent être affichées, afin que les autres navigateurs puissent les afficher de différentes façons.

- -
-
Liens
-
Plug-n-Hack Overview
-
diff --git a/files/fr/plug-n-hack/plug-n-hack_phase2/index.html b/files/fr/plug-n-hack/plug-n-hack_phase2/index.html deleted file mode 100644 index 256d7aab75..0000000000 --- a/files/fr/plug-n-hack/plug-n-hack_phase2/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Plug-n-Hack Etape2 -slug: Plug-n-Hack/Plug-n-Hack_Phase2 -translation_of: Archive/Mozilla/Plug-n-Hack/Plug-n-Hack_Phase2 ---- -

La prochaine étape de Plug-n-Hack (PnH) est toujours prévue, mais est destiné à permettre aux navigateurs d'avertir leurs capacités à des outils de sécurité.

- -

Cela permettra aux outils d'obtenir des informations directement à partir du navigateur, et même d'utiliser le navigateur comme une extension de l'outil.

- -

Si vous êtes intéressé à travailler sur cet aspect alors s'il vous plaît contactez-nous.

- -
-
Liens disponible
-
Présentation Plug-n-Hack
-
diff --git a/files/fr/plug-n-hack/plug-n-hack_tools_supported/index.html b/files/fr/plug-n-hack/plug-n-hack_tools_supported/index.html deleted file mode 100644 index 80fbb77fbf..0000000000 --- a/files/fr/plug-n-hack/plug-n-hack_tools_supported/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Plug-n-Hack Tools Supported -slug: Plug-n-Hack/Plug-n-Hack_Tools_Supported -translation_of: Archive/Mozilla/Plug-n-Hack/Plug-n-Hack_Tools_Supported ---- -

Les outils suivants ont confirmé qu'ils supporteront Plug-n-Hack:

- - - - - - - -
-
Liens complémentaires
-
Plug-n-Hack Overview
-
 
-
diff --git a/files/fr/prism/index.html b/files/fr/prism/index.html deleted file mode 100644 index 3d9c9fdf1a..0000000000 --- a/files/fr/prism/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Prism -slug: Prism -tags: - - prism -translation_of: Archive/Mozilla/Prism ---- -

Prism est un navigateur simplifié basé sur XULRunner servant d'hôte à des applications web sans l'interface habituelle d'un navigateur web. Prism est basé sur un concept appeléSite-Specific Browsers (SSB). Un SSB est conçu pour fonctionner exclusivement avec une seule application web. Il n'a pas les menus, barres d'outils et autres accoutrements d'un navigateur traditionnel. Un SSB offre également une meilleure intégration dans le système d'exploitation et le bureau qu'une application web typique fonctionnant dans un navigateur. Les applications tournant dans un SSB peuvent par conséquent bénéficier des beaucoup des avantages des applications natives et des applications web en même temps.

- -

Avantages

- - - -

Aperçu de l'architecture

- -

Prism est une application XULRunner. En plus du moteur de navigation inclus dans XULRunner, elle est constituée de :

- - - - - - - - - - -
-

Documentation

- -
-
Foire aux questions
-
 
-
Bundles
-
A web application bundle is a zip archive that holds a configuration file, icons and an optional webapp JS script.
-
Configuration
-
A webapp bundle should contain a webapp.ini configuration file. The configuration file is a simple, INI-style text file that specifies some parameters about a web application.
-
Styling
-
One of Prism's goals is to make web applications feel more like desktop applications. One way to make the illusion seem more real is to use styling (or theming). Prism supports a simple styling system that allows the user to add CSS files to the webapp bundle.
-
Scripting
-
Prism allows for some client-side web application customization. Some simple objects and utilities are exposed to webapp scripts.
-
Host Window
-
Prism provides a simple, scaled down browser window for running web applications. Using configuration files and webapp scripting, the host window can be modified.
-
Installation
-
Installation de Prism.
-
- -

Afficher tout…

-
-

Communauté

- - - -

Goodies

- - - -

Contribuer

- - - -

Sujets liés

- -
-
XULRunner
-
-
diff --git a/files/fr/profile_manager/index.html b/files/fr/profile_manager/index.html deleted file mode 100644 index 54d57936f2..0000000000 --- a/files/fr/profile_manager/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Profile Manager -slug: Profile_Manager -translation_of: Mozilla/Profile_Manager ---- -

Firefox les autres applications XULRunner stockent les paramétrages des utilisateurs et leurs données dans des dossiers spéciaux, appelés profils.  Firefox fournit un applet natif pour gérer ces profils, mais il finira par être retiré (voir le bug 214675). Une application de Gestionnaire de Profils indépendante a donc été crée. Elle fonctionne avec n'importe quelle application XULRunner et a de nombreuses fonctionnalités que l'on ne trouve pas dans la version native de Firefox.

-

Téléchargement

-

Binaires

-

Vous pouvez télécharger des exécutables du Gestionnaire de Profils sur ftp://ftp.mozilla.org/pub/mozilla.org/utilities/profilemanager/1.0/.  Il n'y a pas d'installeur, il suffit d'extraire les fichiers de l'archive. 

-

Caractéristiques techniques requises :

- -

Code source

-

Vous pouvez également télécharger les sources :

-

hg clone http://hg.mozilla.org/automation/profilemanager/

-

Les instructions pour compiler peuvent être trouvées dans BUILD.txt.

-

Rapporter des bugs

-

Les bugs du Gestionnaire de Profils devraient être rapportées dans Bugzilla, sous Testing -> ProfileManager.

-

Démarrer le Gestionnaire de Profils

-

Pour démarrer le Gestionnaire de Profils, lancez simplement profilemanager.exe (sur Windows) ou profilemanager-bin (sur Linux et Mac).  Par défaut, le Gestionnaire de Profils gérera les profils de Firefox, mais vous pouvez aussi l'utiliser pour fonctionner avec les profils d'autres apps xulrunner, comme Thunderbird ou SeaMonkey.  Pour utiliser le Gestionnaire de Profils avec une autre application que Firefox, vous devez le lancer en utilisant le nom de l'application comme un, par exemple :

-

-

profilemanager-bin seamonkey

-

Profils et versions des applications

-

Le Gestionnaire de Profils gère deux listes différentes : une liste d'utilisateurs, et un autre des versions d'applications qui peuvent être utilisées avec les profils.  Par défaut, cela signifie qu'il maintient une liste des applications Firefox installées sur votre système, et une liste des profils utilisables par Firefox.

-

-

Un profil individuel peut être relié à une installation spécifique de Firefox. Ainsi, cette version de Firefox sera lancée lorsque ce profil sera sélectionné. Par exemple, ProfilA peut être lié à une copie de Firefox 3.6.10, tandis que ProfilB peut être lié à une copie de Firefox 3.5.3.

-

Une fois lancé, le Gestionnaire de Profils cherchera dans certains emplacements par défaut les versions de Firefox installées (ou d'une autre application que vous êtes en train d'utiliser avec le Gestionnaire de Profils). De plus, vous pouvez ajouter manuellement des versions de Firefox en cliquant sur le bouton "Gérer les versions de Firefox..." :

-

 

-

Chaque version de Firefox de la liste possède les propriétés suivantes : chemin, version, et défaut. La propriété défaut indique si cette version de Firefox sera utilisée avec des profils qui n'ont pas de version d'application spécifique associée avec elle.

-

 

-

Créer un profil

-

Pour créer un nouveau profil, cliquez simplement sur le bouton Nouveau de la barre d'outils du Gestionnaire de Profils.  Un dialogue va apparaître et vous permettre de spécifier le nom du profil et facultativement le chemin du profil et la version de Firefox (ou d'une autre application) qui sera utilisée avec ce profil :

-

-

-

 

-

Lancer Firefox avec un profil

-

Pour lancer Firefox avec un profil spécifique, sélectionnez le profil dans ma fenêtre principale et cliquez sur le bouton "Démarrer Firefox" :  Firefox sera lancé avec ce profil et le Gestionnaire de Profils s'arrêtera.  La version de Firefox qui va être lancée est indiquée dans le menu déroulant "Version de Firefox" de la boîte des options de lancement :

-

-

-

Il y a plusieurs options de lancement supplémentaires disponibles pour Firefox.  Celles-ci provoquent le lancement de Firefox avec divers arguments en ligne de commande. Regardez les Options en ligne de Commande pour une description de celles-ci.

- - - - - - - - - - - - - - - - - - - - - - - - - -
Options de lancementArgument en ligne de commande
Lancer Firefox en mode hors-ligne-offline
Lancer Firefox en safe mode-safe-mode
Démarrer Firefox avec une console-console
Démarrer une nouvelle instance-no-remote
-

Note: Il n'est pas possible de démarrer une deuxième instance de Firefox sans lui passer dans la ligne de commande l'argument -no-remote. Pour cette raison, si vous essayez de lancer Firefox en utilisant le Gestionnaire de Profils et qu'il détecte qu'une autre instance de Firefox est déjà lancée, il ajoutera automatiquement l'argument -no-remote pour vous, que l'option ait été cochée ou non.

-

 

-

Profils verrouillés

-

Certains profils peuvent apparaître comme verrouillés dans la fenêtre principale. De tels profils sont en train d'être utilisés par une instance de Firefox. Si vous essayez d'effectuer une opération sur un profil verrouillé, vous obtiendrez un avertissement. Si vous choisissez de continuer malgré l'avertissement, vous pourriez faire face à des erreurs ou corrompre un profil.

-

-

Il est fortement recommandé d'éviter d'effectuer des opérations sur les profils verrouillés. Si vous avez besoin de faire quelque chose avec un profil verrouillé, fermez d'abord l'instance de Firefox qui utilise ce profil.

-

 

-

Sauvegarder et restaurer des profils

-

Le Gestionnaire de Profils offre deux mécanismes différents pour sauvegarder et restaurer des profils.

-

-

Sauvegarde des répertoires

-

Le Gestionnaire de Profils a un répertoire de sauvegardes locales dans lequel il peut gérer les sauvegardes de profils. C'est le moyen le plus facile de sauvegarder et restaurer des profils. 

-

Pour sauvegarder un profil : sélectionnez le profil que vous voulez sauvegarder et choisissez "sauvegarder vers->dossier de sauvegardes" depuis la barre d'outils du menu Sauvegarde. Le profil sera sauvegardé et la sauvegarde apparaîtra dans la colonne sauvegarde de l'affichage principale :

-

-

Pour restaurer un profil :  sélectionnez la sauvegarde dans l'affichage principale, ouvrez le menu contextuel et choisissez "restaurer".  Quand vous restaurez un profil, la sauvegarde est conservée, ainsi vous pouvez restaurer depuis la même sauvegarde à une date ultérieure.

-

Pour supprimer une sauvegarde :  sélectionnez la sauvegarde dans l'affichage principale, ouvrez le menu contextuel et choisissez "supprimer".

-

Archivage de profils

-

Le Gestionnaire de Profils peut également sauvegarder vers et restaurer depuis des archives .zip. Le Gestionnaire de Profils ne conserve pas ces sauvegardes dans l'interface utilisateur mais utiliser des archives de profils est un moyen pratique pour déplacer des profils entre plusieurs machines.

-

Pour sauvegarder un profil dans une archive : sélectionnez le profil que vous voulez sauvegarder et choisissez "sauvegarder vers->archive" depuis la barre d'outils du menu Sauvegarde. Il vous sera demandé un nom et un emplacement pour l'archive.

-

Pour créer un profil depuis une archive de profil : Sélectionnez "restaurer depuis->archive" depuis la barre d'outils du menu Sauvegarde.  Il vous sera demandé  l'emplacement de l'archive, puis le nom du profil que vous souhaitez créer à partir de l'archive.

-

 

-

Autres opérations

-

Un clic contextuel sur un des profils de la liste des profils provoquera l'apparition d'un menu avec les commandes suivantes :

- -

 

-

Améliorations futures

- diff --git "a/files/fr/pr\303\251alables_\303\240_la_localisation/index.html" "b/files/fr/pr\303\251alables_\303\240_la_localisation/index.html" deleted file mode 100644 index 913f9b84d8..0000000000 --- "a/files/fr/pr\303\251alables_\303\240_la_localisation/index.html" +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Préalables à la localisation -slug: Préalables_à_la_localisation -tags: - - Internationalisation - - Localisation -translation_of: Mozilla/Localization/Prerequisites ---- -

Pour travailler sur une localisation, vous n'aurez besoin que d'une partie de l'installation de compilation de Mozilla. Sous Mac et Linux, il ne devrait rien y avoir à faire, et sous Windows, {{ interwiki('wikimo', 'MozillaBuild', 'MozillaBuild') }} contient tout ce que vous devriez savoir.

- -

Outils

- - - -

Pour vérifier que ceux-ci fonctionnent, ouvrez une ligne de commande. Les utilisateurs de Linux devraient savoir comment, sous Mac, utilisez le Terminal dans Applications/Utilitaires. Sous Windows, MozillaBuild fournit un script start-l10n.bat dans c:\mozilla-build. Voici les points d'entrée à essayer :

- -
$  hg --version
-Mercurial Distributed SCM (version 1.3.1)
-
-Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> and others
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
- -

Voilà, hg fonctionne.

- -
$ make –version
-GNU Make 3.81.90
-…
-
- -

make fonctionne également. Ne faites pas attention à la chaîne de version ici, du moment que c'est la version 3.79.1 ou supérieure. Maintenant, continuez les mêmes vérifications pour python et perl, et essayez également zip -h.

- -

{{ languages( { "en": "en/L10n_Prerequisites" } ) }}

diff --git a/files/fr/pyxpcom/index.html b/files/fr/pyxpcom/index.html deleted file mode 100644 index 1efa6066d6..0000000000 --- a/files/fr/pyxpcom/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: PyXPCOM -slug: PyXPCOM -tags: - - XPCOM - - 'XPCOM:Liaisons_de_langage' -translation_of: Mozilla/Tech/XPCOM/Language_bindings/PyXPCOM ---- -

 

- -
-

PyXPCOM permet la communication entre Python et XPCOM de telle façon qu'une application Python puisse accéder à des objets XPCOM, et que XPCOM puisse accéder à des classes Python qui implémentent une interface XPCOM. PyXPCOM est utilisé dans ActiveState Komodo, par exemple.

-Avec PyXPCOM, une application Python peut dialoguer avec XPCOM ou Gecko embarqué. PyXPCOM est similaire à JavaXPCOM (passerelle Java-XPCOM) ou XPConnect (passerelle JavaScript-XPCOM). - -

 

-Classes et interfaces Python : Mozilla définit plusieurs interfaces externes disponibles pour les paquetageurs et développeurs de composants. PyXPCOM offre des accès à ces interfaces comme aux interfaces Python. PyXPCOM contient également plusieurs classes qui fournissent des accès aux fonctions d'initialisation et de destructions XPCOM et Gecko depuis Python, comme pour les fonctions helper XPCOM.
- - - - - - - - -
-

Documentation

- -
-
Compilation de PyXPCOM
-
Les instructions pour compiler PyXPCOM.
-
- -
-
Création d'un composant XPCOM Python
-
Un exemple expliquant comment créer un composant XPCOM avec Python.
-
- -
-
Découvrir PyXPCOM (en)
-
PyXPCOM est une technologie reliant XPCOM et Python. Cet article vous donne un aperçu de PyXPCOM.
-
- -

NOTE: The links to Part II and III of this series are broken and I cannot find them on the IBM site. Please update this page if/when the links can be found.

- -

Tous les articles...

- -

Historique

- -

PyXPCOM a été à l'origine développé par ActiveState Tool Corporation, et a été extrait de leur projet Komodo. Leur version courante est maintenant intégrée avec le système Mozilla.

-
-

Communauté

- -
    -
  • forums Mozilla XPCOM...
  • -
- -

- - - -

Code source

- - - -

Sujets liés

- -
-
XPCOM
-
PyDOM : remplacer JavaScript par Python
-
-
- -

Categories

- -

Interwiki Language Links

diff --git a/files/fr/qa/index.html b/files/fr/qa/index.html deleted file mode 100644 index a84aeb8874..0000000000 --- a/files/fr/qa/index.html +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Assurance qualité -slug: QA -translation_of: Mozilla/QA ---- -
-

Il y de nombreuses choses que vous pouvez faire pour aider le projet Mozilla dans le département d'Assurance Qualité, sans être un expert en programmation. Certaines ne nécessitent pas non plus de connaissances en HTML ou autres technologies Web. Si nous aider à tester ou pour d'autres activités d'Assurance Qualité vous intéresse, consultez avant tout les pages Mozilla Quality Assurance et Helping with Quality Assurance.

-
- - - - - - - - -
-

Documentation

- -
-
Recommandations pour l'écriture d'un bug
-
Plus un bogue signalé sera précis, plus il y aura des chances qu'un développeur le corrige. En suivant ces recommandations, vous serez assuré que votre bogue reste au-dessus de la pile des ingénieurs de Mozilla et soit corrigé. (à traduire de en:Bug writing guidelines)
-
Comment identifier les rapports de bugs dupliqués
-
Ce guide vous aidera à identifier un maximum de rapports de nouveaux bugs de manière la plus efficace. Cela suppose que vous soyez habitué à la recherche des doublons dans Bugzilla.
-
Comment détecter si un bug a déjà été rapporté
-
Vous pouvez faire en sorte que plus de bogues soient corrigés rapidement en vérifiant la base de données Bugzilla avant de poster votre bug, et ne pas en créer un nouveau si celui que vous avez trouvé existe déjà.
-
Utilisation des expressions rationnelles avec le moteur de recherche de Bugzilla
-
Ce guide fournit suffisamment de connaissances de base et des exemples concrets pour utiliser les autres types de recherche (particulièrement les expressions rationnelles) — et c'est ainsi que vous ferez votre expérience.
-
- -

Tous les articles…

-
-

Communauté

- - - -

Outils

- - - -

Tous les outils…

- - - - - - -
diff --git a/files/fr/qa/triaging_bugs_for_firefox/index.html b/files/fr/qa/triaging_bugs_for_firefox/index.html deleted file mode 100644 index 31510b18c0..0000000000 --- a/files/fr/qa/triaging_bugs_for_firefox/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Triaging Bugs for Firefox -slug: QA/Triaging_Bugs_for_Firefox -translation_of: Mozilla/QA/Triaging_Bugs_for_Firefox ---- -

Ce document aidera toute personne intéressée par la QA chez Mozilla d'apprendre les techniques pour aider avec les bugs tout le long de leur évolution. Il permettra de fixer plus rapidement les bugs importants et d'optimiser l'efficacité de notre communauté Bugzilla. Avant d'entrer dans les détails, il est important de savoir que le Triage  fait ainsi est la raison pour laquelle il est important.

- -

Qu'est ce que le Triage?

- -

 Le triage de Bugs est le  processus de déplacement logiques des bugs d'un état à un autre, de sorte qu'ils puissent être résolus d'une manière efficace et facile à comprendre. Chez Mozilla, la QA ne doit pas seulement tester et ensuite déposer leurs propres bugs, mais elle doit aussi aider à exploiter le flux entrant des bugs de la communautés pour trouver des problèmes valides.

- -

Pourquoi voudriez vous aider?

- -

Bugzilla est le coeur du projet Mozilla, comme tous les produits, Mozilla suit ses défauts logiciels et les améliorations dans BMO. Il n'y a rien dans le projet tout aussi central ou aussi important que BMO. Le triage est nécessaire pour veiller à ce que tous les défauts signalés sur Bugzilla soient répondu. Un arriéré de bugs dans un Etat quelconque, en particulier l'état UNCONFIRMED, affecte notre capacité à réagir à vos questions importantes rapidement et efficacement. Ainsi, nos déclencheurs de bugs sont incroyablement vitales pour notre développement de produits.

- -

Préréquis

- -

Equipez vous

- - - -

Autorisations Bugzilla

- - - -

Création de requêtes de recherche sur Bugzilla

- -

Bugzilla offre deux façons àun utilisateur de trouver des bugs dans sa base de données. Il y a une option de recherche simple et une option de recherche avancée. Chacune offre un moyen unique de recherche qui permet à l'utilisateur une certaine souplesse dans la façon dont ils veulent effectuer leur recherche. A simple search will only restrict search parameters to any currently not-fixed bug that match the string input by the user. Meanwhile, the advanced search form allows the user the ability to really cut down on any glut found through a simple search. But it can be a bit confusing. So, Bugzilla offers a "Give me Some Help" hyperlink located in the top left portion of the form that reloads the page with hover-enabled tool-tips to guide you through each module. This link also give you more information about searching in Bugzilla.

- -

Persistent Queries and how to Manage them

- - - -

Tracking Components

- -

If you want something more immediate, you can choose to track a component, such as Disability Access. This is possible via your Bugzilla preferences using the "Component Watching" option. Make sure to track the relevant component in both Core->Disability Access APIs and in the products you care about, such as Firefox (Firefox->Disability Access) or Thunderbird.

- -

Clean incoming Bugs

- -

Why is it Important?

- -

Ensuring bugs are properly marked helps make sure they don't get ignored. For example, if a bug that really affects all platforms is marked "Solaris" because the original bug author was on a Solaris machine, most developers will ignore it. Other common issues include major bugs that are marked normal, bugs with a confusing summary, etc. So, ensuring that the bug is properly marked is very helpful in getting the attention it deserves.

- -

What would Speed Up the Process?

- -

Each time you submit changes to the bug it creates extra Bugmail, so it's better to do the following steps in batches, if possible.

- - - -
-

Steps to Reproduce

- -

Sometimes, a bug report contains no steps to reproduce or steps that only work for very few people. In that case, it is extremely difficult for a developer to debug and fix the reported issue. Most of the time, these bug reports (and crash reports, where applicable) will contain multiple clues or variations of steps and it is needed for someone to work through them and narrow down reliable steps to reproduce. Here are a few guidelines for narrowing down those steps:

- - - -

Minimal Test Cases

- -

Reporters usually add to their bug reports the links for the web pages they saw issues on. Some of these pages are very complex, making it quite difficult to realize where or why the bug happens. To help investigate and debug a issue with a complex web page, you first need to reduce it to a minimal test case (i.e. a test case that contains the minimum set of elements that reproduces the issue). Here are some steps for using the process of elimination to create a minimal test case:

- - - -

Hopefully you'll be left with a file that has only 1-5 HTML elements in it, but still reproduces the bug. At this point you can actually try to start stripping out irrelevant attributes as well You may end up with something like: <label for="myfile">Enter file name:</label><input id="myfile" disabled="disabled" type="file"> ...instead of 50k worth of HTML. When finished, attach the minimal testcase, mark the bug with keyword testcase, and change the bug summary if necessary. For example, "No borders in tables at http://www.sillystatsandstuff.com" can become something much more precise such as "tables with rowspans do not get borders". If it doesn't affect the test - add a title so it can be referred to, e.g <title>Testcase #1 for bug 123456. Also, add the bug number in the filename of the testcase. You have to understand that people from different parts of the world will be reading this, so making concise and direct sentences are much appreciated. For example, if the bug involves line wrapping, then the width of the window and the font size may impact the results. In this case, you can ensure that your reduced testcase will work for everyone by using "font-family: monospace;" and a width specified in "ch" units.

- -

What do I take away from this?

- -

This can all be rather intimidating for people who haven't been playing around with different web technologies such as AJAX, JS, or XML for a long time, but the most important thing to take away from this page is that there's a backend to the bugs you find when interacting with any software, hardware, or general product. Make sure to take that into account when writing your next bug or triaging a host of incoming bugs on Bugzilla! Continue reading all about Finding a Regression Window.

- -
-
-

Original document information

- - -
- -

 

diff --git a/files/fr/rapports_de_plantage/index.html b/files/fr/rapports_de_plantage/index.html deleted file mode 100644 index eb2c01b1d1..0000000000 --- a/files/fr/rapports_de_plantage/index.html +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Rapports de plantage -slug: Rapports_de_plantage -translation_of: Mozilla/Projects/Crash_reporting ---- -

Après que Firefox a "planté" une boite de dialogue s'ouvre , vous permettant d'envoyer aux développeurs du projet Mozilla la page où vous étiez, les manipulations que vous avez faites,etc... afin de de trouver le "bug" et d'y remédier.

diff --git a/files/fr/rdf/index.html b/files/fr/rdf/index.html deleted file mode 100644 index e27e80012c..0000000000 --- a/files/fr/rdf/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: RDF -slug: RDF -tags: - - RDF -translation_of: Archive/Web/RDF ---- -

 

- -
-

Resource Description Framework (RDF) est un modèle de graphes pour décrire les (méta-)données et permettre un certain traitement automatique des métadonnées. Une des syntaxes (sérialisation) de ce langage est RDF/XML. Il s'agit d'un dialecte XML développée par le consortium W3C.

- -

En annotant des documents non structurés et en servant d'interface pour des applications et des documents structurés (par ex. bases de données, GED, etc.) RDF permet une certaine interopérabilité entre des applications échangeant de l'information non formalisée et non structurée sur le Web.

- -

Un document structuré en RDF est un ensemble de triplets. Un triplet RDF est une association {sujet, objet, prédicat}.

-
- - - - - - - - -
-

Documentation

- -
-
Orientations du moteur RDF de Mozilla
-
Cette présentation montre les nouveaux développements du moteur RDF de Mozilla (à traduire de Directions of the Mozilla RDF engine).
-
- -
-
Qu'est ce que le RDF
-
Une introduction présentée par Tim Bray sur le Resource Description Framework (XML.com).
-
- -
-
FAQ sur RDF dans Mozilla
-
La foire aux questions concernant le Resource Description Framework sous Mozilla (à traduire de en:RDF in Mozilla FAQ).
-
- -
-
RDF en cinquante mots
-
Une courte introduction au Resource Description Framework (à traduire de en:RDF in Fifty Words or Less).
-
- -
-
Utilisation de sources de données RDF
-
Ce document explique comment créer une source de données native, côté client, qui fonctionne avec l'implémentation RDF de Mozilla (à traduire de en:RDF Datasource How-To).
-
- -
-
Agrégation des sources de données en mémoire
-
Utilisation de l'agrégation XPCOM avec les sources de données en mémoire (à traduire de en:Aggregating the In-Memory Datasource).
-
- -

Toutes les articles…

-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

{{ DiscussionList("dev-tech-rdf", "mozilla.dev.tech.rdf") }}

- - - -

Outils

- - - -

Sujets liés

- -
-
XML
-
-
- -
diff --git "a/files/fr/recommandations_pour_l'\303\251criture_d'un_bug/index.html" "b/files/fr/recommandations_pour_l'\303\251criture_d'un_bug/index.html" deleted file mode 100644 index 499587b4a9..0000000000 --- "a/files/fr/recommandations_pour_l'\303\251criture_d'un_bug/index.html" +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Recommandations pour l'écriture d'un bug -slug: Recommandations_pour_l'écriture_d'un_bug -tags: - - QA -translation_of: Mozilla/QA/Bug_writing_guidelines ---- -
-

Si vous avez besoin d'aide concernant les logiciels Mozilla (par exemple avec Firefox ou Thunderbird), utilisez l'une des options d’assistance disponibles. Ne modifiez pas cette page.

- -

Si vous débutez dans l'assurance qualité de Mozilla, vous pouvez essayer d'obtenir de l'aide de contributeurs et contributrices plus expérimentés. Consultez la section Communauté de la page Assurance qualité pour des indications. Si vous désirez rapporter un bug dans Firefox, vous pourrez également obtenir de l'assistance en anglais dans le salon #fx-desktop-community sur le serveur Matrix de Mozilla. Pour une liste des autres projets (comme Thunderbird et SeaMonkey),  rendez-vous sur le wiki de Mozilla à la page Matrix.

-
- -

Principes de base

- -

Un rapport de bug rédigé de manière efficace est plus susceptible d'être corrigé. Ce guide explique comment procéder.

- - - -

Introduction

- -
    -
  1. Reproduisez votre bug en utilisant un build récent de l'application, afin de vous assurer qu'il n'a pas déjà été corrigé.
  2. -
- -

Ajouter un lien vers FAQ sur "recent build"

- -
    -
  1. Faites une recherche dans Bugzilla pour vérifier que votre bug n'a pas déjà été rapporté.
  2. -
- -

(Tutoriel en anglais : tutoriel).

- -

Rapporter un nouveau bug

- -

ATTENTION ! La langue utilisée dans Bugzilla est uniquement l'anglais. Les exemples sont donnés en français à titre indicatif pour une meilleure clarté des instructions.

- -

Si vous avez reproduit l'anomalie sur un build récent et que personne ne semble l'avoir déjà rapportée, alors :

- -
    -
  1. Choisissez « Enter a new bug » (le formulaire est en anglais).
  2. -
  3. Sélectionnez le produit dans lequel vous avez trouvé le bug.
  4. -
  5. Remplissez le formulaire. Voici quelques éléments d'aide :
  6. -
- -

Component : (composant) La partie du logiciel dans laquelle apparaît le bug.

- -

Ce champ est obligatoire. Cliquez sur le mot « Component » pour obtenir une description de chaque composant. Si aucun ne vous semble approprié, choisissez un composant général (« General »).

- -

OS : sur quel système d'exploitation l'avez-vous trouvé ? (par exemple Linux, Windows, Mac OS X).

- -

Si le bug se produit sur plusieurs systèmes d'exploitation, sélectionnez « All » (Tous). Si votre système d'exploitation n'apparaît pas dans la liste, choisissez « Other » (Autre).

- -

Summary : (Résumé) Comment décririez-vous le bug, en 60 caractères maximum ?

- -

Un bon résumé doit permettre une identification rapide et exhaustive du rapport d'anomalie. Il doit décrire le problème rencontré et non la solution que vous préconiseriez.

- - - -

Description : Les détails de votre rapport de bug, qui incluent :

- -
-

Overview : (vue d'ensemble) Une version plus détaillée de votre résumé.

- -
Drag-selecting any page crashes Mac builds in the NSGetFactory function. (La sélection à l'intérieur d'une page plante les builds MAC dans la fonction NSGetFactory)
-
- -

Steps to Reproduce : (Etapes permettant la reproduction) Les actions réduites à leur plus simple expression permettant de reproduire le bug. Préciser les éléments de configuration si nécessaire.

- -
1) Ouvrir une page Web (J'ai utilisé la page d'exemple : resource:/res/samples/test0.html)
-
-2) Faire une sélection dans la page (Placer le pointeur de la souris n'importe où dans la page, appuyer sur le bouton droit et le maintenir appuyé, puis déplacer le pointeur vers le bas de la page).
-
- -

Actual Results : (Résultats actuels) Ce qui est arrivé après les étapes décrites ci-dessus.

- -
L'application a planté.
-
- -

Expected Results : (Résultat attendu) Ce qui aurait dû arriver en l'absence de . bug.

- -
La fenêtre devrait défiler vers le bas. Le texte devrait être sélectionné.
-(Ou, au moins, l'application ne devrait pas planter)
-
- -

Build Date & Platform : (Date du build et plateforme) La date et la plateforme du build dans lequel le bug a été rencontré pour la première fois.

- -
Build 2006-08-10 sur Mac OS 10.4.3
-
- -

Additional Builds and Platforms : (Builds et plateformes additionnels) Indiquer ici si le bug apparaît sur d'autres plateformes (ou navigateurs, si applicables).

- -
N'apparaît pas sur Build 2006-08-10 sur Windows XP Home (Service Pack 2)
-
- -

Additional Information : (Information complémentaire) Toute autre information utile.

- -

Pour les bugs engendrant un crash:

- - - -
Date/Time:      2006-12-26 12:15:20.089 -0500
-OS Version:     10.4.8 (Build 8L2127)
-Report Version: 4
-
-Command: firefox-bin
-Path:    /Applications/Firefox.app/Contents/MacOS/firefox-bin
-Parent:  WindowServer [71]
-
-Version: 2.0.0.1 (2.0.0.1)
-
-PID:    114
-Thread: 0
-
-Exception:  EXC_BAD_ACCESS (0x0001)
-Codes:      KERN_PROTECTION_FAILURE (0x0002) at 0x000000ca
-
-Thread 0 Crashed:
-0   libxpcom_core.dylib 	0x0186329b AppendUTF8toUTF16(char const*, nsAString_internal&) + 31
-1   libxpcom_core.dylib 	0x01822916 nsTextFormatter::smprintf_free(unsigned short*) + 3248
-... (many many more lines like this) ...
-
- -

Add an attachment : (Attacher un fichier) Vous pouvez attacher des fichiers utiles à votre rapport de bug. Les informations de plus de 20 lignes doivent être fournies par ce biais. De même, si vous possédez un fichier HTML démontrant le bug, vous devriez l'attacher. Il n'est possible d'attacher qu'un seul fichier lors de la soumission du rapport d'anomalie, donc si votre démonstration en nécessite plusieurs, ouvrez à nouveau le rapport que vous venez de créer pour y ajouter des fichiers joints supplémentaires. Dans ce cas attachez tout fichier complémentaire (par exemple des images ou copies d'écran) en premier, puis, avant de le télécharger, modifiez dans le fichier HTML les adresses URL des fichiers précédemment attachés afin que votre démonstration fonctionne de manière automatique. Il est nécessaire de demander une autorisation si vous souhaitez attacher plus de 5 fichiers.

- -

Relisez minutieusement votre rapport d'anomalie pour en exclure toute erreur ou omission, puis cliquer sur le bouton « Commit » (valider). Votre rapport d'anomalie figurera désormais dans la base de données Bugzilla.

- -
- -
- -

{{ languages( { "en": "en/Bug_writing_guidelines", "ja": "ja/Bug_writing_guidelines" } ) }}

diff --git "a/files/fr/r\303\251f\303\251rence_de_jsapi/index.html" "b/files/fr/r\303\251f\303\251rence_de_jsapi/index.html" deleted file mode 100644 index 2ba7133bb8..0000000000 --- "a/files/fr/r\303\251f\303\251rence_de_jsapi/index.html" +++ /dev/null @@ -1,843 +0,0 @@ ---- -title: Référence de JSAPI -slug: Référence_de_JSAPI -translation_of: Mozilla/Projects/SpiderMonkey/JSAPI_reference ---- -

JSAPI est l'implémentation en C du moteur JavaScript SpiderMonkey. Pour apprendre à utiliser JSAPI, lisez le Guide utilisateur JSAPI [en] et le JSAPI Cookbook [en].

- -
Note : La page wiki consacrée à FOSS [en] présente plusieurs liens vers différents outils et librarires pour faciliter l'utilisation quotidienne de SpiderMonkey et JSAPI.
- -
Note de traduction : l'essentiel des liens présentées ici ciblent des ressources en anglais. Le livre de référence de JSAPI étant en cours de traduction, les liens menant vers des ressources traduites en français seront suffixées du symbole [fr].
- -

Runtimes et contextes

- - - - - - - - - - - - - -

Compartiments :

- - - -

Méthodes de locales :

- - - -

Types de méthodes de locales :

- - - -

Scripts

- -

Exécution simple de code JavaScript :

- - - -

Exécution compilée de code JavaScript dans un objet JSScript exécutable à la volée :

- - - -

Compilation de code JavaScript dans une fonction :

- - - -

Gestion des erreurs

- - - -

Méthodes C/C++ de levée et de capture d'exceptions JavaScript :

- - - - - -

Fonctions de conversion d'erreur JavaScript en exceptions (et inversement) :

- - - -

Types et valeurs

- - - -

Constantes jsval :

- - - -

Fonctions et macros de détermination de types jsval:

- - - -

Méthodes haut-niveau de conversion de types pour l'encapsulation/désencapsulation d'arguments de fonctions.

- - - - - -

Conversions de types JavaScript. Ces méthodes peuvent être appliquées à n'importe-quel type de variable jsvals. Elles peuvent potentiellement retourner des objets. Par exemple, JS_ValueToObject(cx, s)s est une chaîne de caractères renvoie un nouvel objet de type String. Ces fonctions peuvent appeler des méthodes JavaScript. Par exemple, JS_ValueToString(cx, obj) peut appeler obj.toString().

- - - -

Macros à éxecution rapide sans contrôle de type. Ces macros ne doivent pas être appliquées à des valeurs dont le type n'est pas précisément connu au départ. Comme les 'casts' C, elles peuvent planter l'éxecution si elles sont appliquées à des types/valeurs incorrectes. Elles ne renvoient jamais d'objet et n'appellent jamais de code JavaScript directement.

- - - -

Function de retour de type (équivalent à typeof) :

- - - -

Functions de comparaison :

- - - -

Gestion de la mémoire

- -

Ces fonctions se comportent comme les méthodes C Standard de type malloc, à l'exception des erreurs qui sont rapportées via les APIs de gestion d'erreur de SPiderMonkey plutôt que via errno. Ces fonctions autorisent également SpiderMonkey à contrôler la quantité de bits alloués en mémoire :

- - - -

Objets JavaScripts, chaînes de caractères, et nombres à virgule flottante sont gérés par le ramasse-miette. Ces fonctions permettent d'accéder à la gestion du ramasse-miette :

- - - -

Le reste de ces APIs permet de protéger les objets en mémoire de leur destruction par le ramasse-miette avant que l'application n'ai cessé de les utiliser.

- -

Si une variable est racine (root), tout élément pointé en référence par cette variable ne sera pas collectée par le ramasse-miette. Des erreurs dans la gestion des variables racines sont une cause fréquente de plantages inexpliqués difficiles à détecter.

- - - -

L'utilisation de portées locales des variables racines sont une autre méthode de prévenir les objets du passage du ramasse-miette.

- - - -

{{ Jsapi_minversion_inline("1.8") }} Si un objet contient des références vers d'autres éléments dans le ramasse-miette qui ne sont pas stockés bia le moteur de structure de données (slots) de SpiderMonkey, il doit implémenter la méthode JSTraceOp pour permettre au ramasse-miette de traverser ses objets référencés. Autrement, le ramasse-miette ne pourra pas détecter et collecter les objets potentiellement éligibles, provoquant un plantage. (Dans SpiderMonkey 1.7 et antérieur, la méthode JSMarkOp est utilisée. Cette méthode est notée deprecated dans la version 1.8 de SpiderMonkey à venir.)

- -

Les APIs de traçage sont utilisées par le ramasse-miette et la méthode JSMarkOp. Les applications JSAPI peuvent également les utiliser pour examiner le contenu des objets. (Par exemple, ces APIs procurent une interaction fine entre le ramasse-miette JavaScript et les autres types de ramasse-miette.)

- - - -

APIs du ramasse-miette diverses :

- - - -

Numbers

- - - -

Strings

- - - - - -

Interning strings tells the SpiderMonkey engine to reuse existing string objects when possible.

- - - -

The character data for external strings is stored in memory provided by the application. Applications can use this to avoid copying data back and forth between SpiderMonkey's heap and application memory.

- - - -

Objects

- - - - - -

Date

- - - -

Properties

- -

These functions correspond directly to the ways scripts access object properties:

- - - -

The following functions are lower-level, allowing the JSAPI application more access to details of how properties are implemented. "Define" is a lower-level version of "set" that provides access to extra settings and does not call setters. Similarly, "lookup" is a lower-level version of "get" that offers extra options and does not call getters.

- - - -

The following functions behave like JS_GetProperty and JS_GetPropertyById except when operating on E4X XML objects.

- - - -

A SpiderMonkey extension allows a native function to return an lvalue—that is, a reference to a property of an object:

- - - -

A jsid is kind of like a jsval, only different. A handful of APIs use jsids instead of jsvals for property names: JS_CheckAccess, JS_Enumerate, JS_GetMethodById, and JS_NextProperty.

- - - -

jsid constants:

- - - -

Function and macros for checking the type of a jsid:

- - - -

Classes

- -

These API features are used to define custom classes—object types that are implemented in C/C++ code but accessible from JavaScript.

- - - -

Adding native properties and methods to classes:

- - - -

JSFastNative methods use these macros: {{ jsapi_minversion_inline("1.8") }}

- - - -

The behavior of a JSClass and its instances can be customized in many ways using callback functions.

- -

JSClass method types:

- - - -

JSExtendedClass method types:

- - - -

JSObjectOps method types:

- - - -

JSXMLObjectOps method types:

- - - -

These stub functions can be used when creating a custom JSClass:

- - - -

The behavior of a JSClass can be customized using these flags:

- - - -

Arrays

- - - - - - - -

Functions

- -

Calling a function or a method of an object:

- - - -

Function accessors:

- - - -

Creating functions:

- - - -

RegExps

- - - -

Serialization

- - - -

Security

- - - - - -

{{ jsapi_minversion_inline("1.8.1") }} Security callbacks can be set per-runtime or per-context.

- - - -

Threading

- -

The following functions support the SpiderMonkey threading model.

- -

Note: JS_THREADSAFE is now permanently on.

- -

JSAPI 1.7 and earlier They are only available in JS_THREADSAFE builds.

- -

{{ jsapi_minversion_inline("1.8") }} These functions are always available, but in non-JS_THREADSAFE builds, they do nothing.

- - - -

The following functions are always available, but in non-JS_THREADSAFE builds, they do nothing:

- - - -

Time

- - - -

Callback Types

- -

Native function types:

- - - -

Other callback types:

- - - -

See also Classes, above.

- -

Macros

- - - -

C++ features

- - - -

Tracing and debugging

- - diff --git "a/files/fr/r\303\251f\303\251rence_de_jsapi/js_callfunction/index.html" "b/files/fr/r\303\251f\303\251rence_de_jsapi/js_callfunction/index.html" deleted file mode 100644 index d39247ec78..0000000000 --- "a/files/fr/r\303\251f\303\251rence_de_jsapi/js_callfunction/index.html" +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: JS_CallFunction -slug: Référence_de_JSAPI/JS_CallFunction -tags: - - JSAPI Reference - - SpiderMonkey -translation_of: Mozilla/Projects/SpiderMonkey/JSAPI_reference/JS_CallFunction ---- -
{{SpiderMonkeySidebar("JSAPI")}}
- -

Appelle une fonction JS spécifié.

- -

Syntax

- -
/* Ajouté dans SpiderMonkey 31 */
-bool
-JS_CallFunction(JSContext *cx, JS::HandleObject obj, JS::HandleFunction fun,
-                const JS::HandleValueArray& args,
-                JS::MutableHandleValue rval);
-
-bool
-JS_CallFunctionName(JSContext *cx, JS::HandleObject obj, const char *name,
-                    const JS::HandleValueArray& args, JS::MutableHandleValue rval);
-
-bool
-JS_CallFunctionValue(JSContext *cx, JS::HandleObject obj, JS::HandleValue fval,
-                     const JS::HandleValueArray& args, JS::MutableHandleValue rval);
-
-/* Obsolète depuis JSAPI 30 */
-
-bool
-JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, unsigned argc,
-                jsval *argv, jsval *rval);
-
-bool
-JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, unsigned argc,
-                    jsval *argv, jsval *rval);
-
-bool
-JS_CallFunctionValue(JSContext *cx, JSObject *obj, jsval fval, unsigned argc,
-                     jsval *argv, jsval *rval);
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NomTypeDescription
cx{{jsapixref("JSRuntime", "JSContext *")}}Pointeur à un contexte JS à partir duquel obtenir des informations d'exécution. {{ Jsapi-requires-request() }}
obj{{jsapixref("JSObject", "JS::HandleObject")}}L'objet «courant» sur lequel la fonction opère; l'objet spécifié ici est "this" lorsque la fonction est exécutée.
fun{{jsapixref("JSFunction", "JS::HandleFunction")}} -

Pointeur vers la fonction à appeler. fun devrait être une fonction native ou la fonction JSAPI-compilé. Voir ci-dessous.

-
nameconst char *Pointeur sur le nom de la fonction à appeler.
fval{{jsapixref("JS::Value", "JS::HandleValue")}}Pointeur à la valeur de la fonction à appeler.
args{{jsapixref("JS::HandleValueArray", "const JS::HandleValueArray &")}}Référence à tableaul de valeurs d'arguments à passer à la fonction. {{ Jsapi_minversion_inline("31") }}
argcunsignedNombre d'arguments que vous passez à la fonction. {{ obsolete_inline("jsapi30") }}
argv{{jsapixref("Jsval", "jsval *")}}Pointeur vers le tableau de valeurs d'arguments à passer à la fonction. {{ obsolete_inline("jsapi30") }}
rval{{jsapixref("JS::Value", "JS::MutableHandleValue")}} -

Out parameter. En cas de succès, *rval reçoit la valeur de retour de l'appel de la fonction.

-
- -

Description

- -

JS_CallFunction appelle une fonction spécifiée, fun, sur un objet, obj. En termes d'exécution de la fonction, l'objet est traité comme tel.

- -

JS_CallFunctionName appelle une fonction avec un nom spécifique, le nom sur un objet obj. Si le moteur JS parvient pas à obtenir la fonction, il retourne false.

- -

JS_CallFunctionValue appelle une fonction spécifiée, fval sur un objet obj. JS_CallFunctionValue(cx, obj, fval, args, rval) est analogue à la déclaration JavaScript rval = fval.apply(obj, args);.

- -

Dans args, passer une référence aux valeurs des arguments réels à utiliser. Il devrait y avoir une valeur pour chaque argument que vous passez à la fonction; le nombre d'arguments que vous passez peut être différent du nombre d'arguments définis pour la fonction.

- -
-

Obsolète depuis JSAPI 30.

- -

Dans argc, indiquer le nombre d'arguments passés à la fonction. Dans argv, passer un pointeur vers les valeurs d'arguments réels à utiliser.

-
- -

rval est un pointeur vers une variable qui contiendra la valeur de retour de la fonction, le cas échéant, sur l'exécution de la fonction réussie.

- -

Si la fonction appelée s'exécute avec succès, JS_CallFunction retourne true. Sinon il retourne false, et rval est indéfinit.

- -

L' appel de JS_CallFunction est sûr que si l'argument fun pourrait être passée à JS_GetFunctionObject sans encombre: autrement dit, il est une fonction mise en oeuvre par un JSNative ou JSFastNative ou le résultat d'un appel à JS_CompileFunction, JS_CompileUCFunction, JS_CompileFunctionForPrincipals, ou JS_CompileUCFunctionForPrincipals. Passant toute autre fonction pointeur JS peut conduire à un crash ou pour pire.

- -

Voir aussi

- - diff --git a/files/fr/sandbox/index.html b/files/fr/sandbox/index.html deleted file mode 100644 index 419af83f9a..0000000000 --- a/files/fr/sandbox/index.html +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: Bac à sable -slug: Sandbox -tags: - - Entraînement - - Pratique -translation_of: Sandbox ---- -

Ceci est ma première modification!! Ceci est un test. 

- -
-
<p id="demo">The Date is: </p>
- -

- -
document.getElementById("demo").innerHTML = Date();
-
- -

-
- -

{{EmbedLiveSample('jsdatesample')}}

- -
Échantillon de contenu HTML
- -

{{EmbedLiveSample('file')}}

- -

exemple de code

- -

HTML

- -
<div id="kiki"></div>
- -

CSS

- -
#kiki { background-color: #FD0; }
- -

JavaScript

- -
let madiv= document.getElementById("kiki"); madiv.appendChild(document.createTextNode("Salut"));
-
- -

Résultat

- -

{{EmbedLiveSample('exemple_de_code')}}

- -

Mettre en gras un élément

- -

Mettre en gras un élément avec HTML

- -
<p>Je suis en <strong>gras</strong></p>
- -

{{ EmbedLiveSample("Mettre_en_gras_un_élément_avec_HTML") }}

- -

Contenu CSS

- -
@ Compteur de style fisheye {
-  système: cyclique;
-  symboles: ◉;
-
- -
-
<h1>CSS font-family</h1>
-<p class="serif">Ceci est un paragraphe, affiché dans la fonte Times New Roman.</p>
-<p class="sansserif">Ceci est un paragraphe, affiché dans la fonte Arial.</p>
-
- -
.liste {
-    list-style: fisheye, cercle;
-}
- -

Bonjour le monde

- -

HTML

- -
<p>Bonjour <strong>le monde</strong></p>
- -

{{EmbedLiveSample ( 'Linux is life')}}

- -

Linux logo

- -

logo couleur MDN (bleu)

- -

Des trucs

- -
-

Une note 

- -
-

Un avertissement dans une note

- -
-

Une note dans un avertissement dans une note

- -
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-

Ceci est un example de comment utiliser le MDN!

-
- -

π×1=1×π=2π÷π=π\ Pi \ times 1 = 1 \ times \ pi = 2 \ pi \ div \ pi = \ pi

- -

ππππππ\ Pi \ frac {\ pi} {\ pi} \ frac {\ frac {\ pi} {\ pi}} {\ pi}

- -

ππππππ\ Pi \ frac {\ pi} {\ pi} \ frac {\ frac {\ pi} {\ pi}} {\ pi}

- -

limjets13e3/XX2X\ Int \ limits_ {1} ^ {3} \ frac {e ^ 3 / x} {x ^ 2} \, dx

- -

ln(x) dx = x[ln(x) - 1]l\ Int \ limits_ {1} ^ {3} \ frac {e ^ 3 / x} {x ^ 2} \, d+x

- -

abcdefghijklmnopqrstuvwxyz\alphabet

- -

πest un nombre irrationnel, et cela est le rapport entre la circonférence d'un cercle à son diamètre. Il est communément approchée comme 3,14159.\ pifacts {3}

- -

contenu

- -

Tester un échantillon en direct

- -

Contenu HTML

- -
<p>Bonjour le monde coochie</p>
- -

Resultat

- -

{{ EmbedLiveSample('Test live sample') }}

- -

Orienter le curseur dans le champ de texte

- -

Contenu HTML

- -
<input type="text" id="monChampDeTexte" value="Champ de texte.">
-<p></p>
-<button type="button" onclick="focusMethod()">Clique moi pour orienter le curseur sur le champ de texte!</button> 
- -

Contenu CSS

- -
Échantillon de Contenu CSS
- -

Contenu JavaScript

- -
focusMethod = function getFocus() {
-  document.getElementById("monChampDeTexte").focus();
-} 
- -

Result

- -

{{ EmbedLiveSample('Focus_on_a_text_field') }}

- -

Cliquer un  bouton

- -

Contenu HTML

- -
<button type="button" id="monBouton">Clique Moi!</button>
-<p></p>
-<button type="button" onclick="focusMethod()">Clique moi pour orienter le curseur vers !</button> 
- -

Contenu CSS

- -
Échantillon de contenu CSS
-
- -

Contenu JavaScript

- -
focusMethod = function getFocus() {
-  document.getElementById("monBouton").focus();
-} 
- -

Resultat

- -

{{ EmbedLiveSample('Focus_on_a_button') }}

diff --git a/files/fr/sax/index.html b/files/fr/sax/index.html deleted file mode 100644 index d498358acc..0000000000 --- a/files/fr/sax/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: SAX -slug: SAX -tags: - - Extensions -translation_of: Archive/SAX ---- -

-

SAX, qui signifie Simple API for XML, est une API d'analyse XML. SAX a été la première API pour XML à connaître le succès en Java, et a ensuite été adaptée dans plusieurs autres environnements de programmation. À partir de Firefox 2, un analyseur SAX est accessible aux applications XUL et aux extensions. Pour plus d'informations, consultez la page d'accueil de SAX. -

-

Pour commencer

-

Les fonctionnalités d'analyse SAX sont disponibles au travers du composant XML reader. Pour en créer un, utilisez le code suivant : -

-
var xmlReader = Components.classes["@mozilla.org/saxparser/xmlreader;1"]
-                          .createInstance(Components.interfaces.nsISAXXMLReader);
-
-

Après avoir créé l'analyseur SAX, il est nécessaire de définir des gestionnaires pour les évènements qui vous intéressent, et de déclencher le processus d'analyse. Toutes ces fonctionnalités sont disponibles au travers de l'interface nsISAXXMLReader. -

-

Définition des gestionnaires

-

Les gestionnaires sont des objets créés par l'utilisateur, implémentant les interfaces de gestion de SAX selon le type d'informations qu'on désire obtenir de l'analyseur. Lorsque le processus d'analyse est lancé, les gestionnaire reçoivent une série d'appels pour le contenu du XML analysé. Les gestionnaires disponibles sont les suivants : -

- - - - - - - - - - - -
Interface Objectif
nsISAXContentHandler Reçoit des notifications concernant le contenu logique d'un document (par exemple des éléments, attributs, blancs et instructions de traitement).
nsISAXDTDHandler Reçoit des notifications concernant les évènements basiques liés aux DTD.
nsISAXErrorHandler Reçoit des notifications concernant les erreurs dans le flux d'entrée.
nsISAXLexicalHandler Gestionnaire d'extension de SAX2 pour les évènement lexicaux (par exemple les commentaires et nœuds CDATA, les déclarations DTD et les entités).
-

Un exemple d'implémentation des gestionnaires de contenu les plus courants : -

-
function print(s) {
-  dump(s + "\n");
-}
-
-xmlReader.contentHandler = {
-  // nsISAXContentHandler
-  startDocument: function() {
-    print("startDocument");
-  },
-
-  endDocument: function() {
-    print("endDocument");
-  },
-
-  startElement: function(uri, localName, qName, /*nsISAXAttributes*/ attributes) {
-    var attrs = [];
-    for(var i=0; i<attributes.length; i++) {
-      attrs.push(attributes.getQName(i) + "='" +
-                 attributes.getValue(i) + "'");
-    }
-
-    print("startElement: namespace='" + uri + "', localName='" +
-          localName + "', qName='" + qName + "', attributes={" +
-          attrs.join(",") + "}");
-  },
-
-  endElement: function(uri, localName, qName) {
-    print("endElement: namespace='" + uri + "', localName='" +
-          localName + "', qName='" + qName + "'");
-  },
-
-  characters: function(value) {
-    print("characters: " + value);
-  },
-
-  processingInstruction: function(target, data) {
-    print("processingInstruction: target='" + target + "', data='" +
-          data + "'");
-  },
-
-  ignorableWhitespace: function(whitespace) {
-    // ne pas traiter
-  },
-
-  startPrefixMapping: function(prefix, uri) {
-    // ne pas traiter
-  },
-
-  endPrefixMapping: function(prefix) {
-    // ne pas traiter
-  },
-
-  // nsISupports
-  QueryInterface: function(iid) {
-    if(!iid.equals(Components.interfaces.nsISupports) &&
-       !iid.equals(Components.interfaces.nsISAXContentHandler))
-      throw Components.results.NS_ERROR_NO_INTERFACE;
-    return this;
-  }
-};
-
-

Début de l'analyse

-

Le composant XML Reader peut analyser du XML contenu dans une chaîne, un flux nsIInputStream, ou de manière asynchrone via l'interface nsIStreamListener. Ci-dessous, un exemple d'analyse depuis une chaîne : -

-
xmlReader.parseFromString("<f:a xmlns:f='g' d='1'><BBQ/></f:a>", "text/xml");
-
-

Cet appel conduit à la sortie suivante (en supposant qu'on utilise le gestionnaire de contenu de l'exemple ci-dessus) : -

-
startDocument
-startElement: namespace='g', localName='a', qName='f:a', attributes={d='1'}
-startElement: namespace='', localName='BBQ', qName='BBQ', attributes={}
-endElement: namespace='', localName='BBQ', qName='BBQ'
-endElement: namespace='g', localName='a', qName='f:a'
-endDocument
-
diff --git "a/files/fr/services_web_xml/acc\303\251der_\303\240_des_services_web_avec_mozilla_en_utilisant_un_proxy_wsdl/index.html" "b/files/fr/services_web_xml/acc\303\251der_\303\240_des_services_web_avec_mozilla_en_utilisant_un_proxy_wsdl/index.html" deleted file mode 100644 index 47a62f39e3..0000000000 --- "a/files/fr/services_web_xml/acc\303\251der_\303\240_des_services_web_avec_mozilla_en_utilisant_un_proxy_wsdl/index.html" +++ /dev/null @@ -1,227 +0,0 @@ ---- -title: Accéder à des services web avec Mozilla en utilisant un proxy WSDL -slug: >- - Services_Web_XML/Accéder_à_des_services_web_avec_Mozilla_en_utilisant_un_proxy_WSDL -tags: - - Services_Web_XML -translation_of: XML_Web_Services/Accessing_Web_Services_in_Mozilla_Using_WSDL_Proxying ---- -

{{ Obsolete_header() }} {{ Fx_minversion_note(3, "Le support natif de WSDL et de SOAP a été enlevé de Mozilla 1.9/Firefox 3.") }}

- -

L'article sur le support de SOAP (Simple Object Access Protocol) dans les navigateurs basés sur Gecko expliquait comment accéder à des services Web en utilisant l'API de bas niveau SOAP de Mozilla. SOAP est un protocole de communication entre des objets distants, basé sur XML et souvent utilisé pour communiquer avec des services Web. SOAP nécessite de construire un message et son enveloppe au format attendu par le service, et de gérer la réponse pour en extraire les informations souhaitées.

- -

Mozilla offre une interface JavaScript pour faciliter les communications via SOAP. Depuis Netscape 7.1/Mozilla 1.4, cette interface permet également l'utilisation de WSDL 1.1 (Web Services Description Language), une norme de description de services Web. Un fichier WSDL décrit les fonctionnalités d'un service et son interface, comme les fichiers d'en-tête en C ou IDL. Par ce biais, Gecko permet aux développeurs et aux développeuses d'appeler un service Web comme si c'était un objet JavaScript natif, en masquant complètement SOAP et XML. Par exemple, après avoir créé une instance "proxy" d'un service Web exposant son interface via WSDL, on peut appeler les méthodes du services comme des méthodes de l'objet JavaScript : proxy.getTranslation("en_fr", "Hello World") .

- -

Cet article traite du support de WSDL dans les navigateurs basés sur Mozilla 1.7, des problèmes d'appels inter-domaines et du nouveau modèle de sécurité proposé par Netscape pour permettre aux services Web de déterminer si un client peut accéder au service depuis n'importe quel domaine ou uniquement depuis certains.

- -

Il se base sur le service Web Babelfish fournis par XMethods, qui a été le premier site à implémenter le nouveau modèle de sécurité des services Web de Gecko, modèle qui permet aux navigateurs basés sur Gecko d'accéder à des services d'autres domaines.

- -

 

- -

Créer un proxy WSDL

- -

Un proxy de service Web peut être créé en JavaScript en instanciant un objet de la classe WebServiceProxyFactory. Le fichier WSDL est chargé via l'appel de la méthode createProxyAsync de la classe WebServiceProxyFactory.

- -

Le prototype de la méthode createProxyAsync est :

- -
void createProxyAsync (String wsdlURL, String portname, String qualifier, boolean isAsync, WebServiceProxyCreationListener listener)
-
- -

Elle attend 5 paramètres :

- -
    -
  1. L'emplacement du fichier WSDL. Par exemple pour Babelfish : http://www.xmethods.net/sd/2001/BabelFishService.wsdl .
  2. -
  3. Le nom du port (en WSDL, un port correspond à une méthode du service). Ce nom fait parti de la description du service dans le fichier WSDL (cf la Figure 1).
  4. -
  5. Le troisième paramètre est optionnel, il n'est utilisé que lors de l'appel de la méthode via XPCOM. On l'ignorera ici.
  6. -
  7. Un booléen indiquant si l'appel est synchrone ou asynchrone. Netscape 7.1/Mozilla 1.4 ne permet pas de créer des proxies synchrones. Il faudra donc toujours positionner ce paramètre à true et fournir une procédure de rappel.
  8. -
  9. Le dernier paramètre est la procédure de rappel qui sera appelée quand le proxy sera complètement initialisé. Pour plus de détails, lire la section suivante.
  10. -
- -

JavaScript :

- -
var factory = new WebServiceProxyFactory();
-factory.createProxyAsync("http://www.xmethods.net/sd/2001/BabelFishService.wsdl", "BabelFishPort", "", true, aCreationListener);
-
- -


- WSDL :

- -
<?xml version="1.0"?>
-<definitions name="BabelFishService" ...>
-  ...
-  <service name="BabelFishService">
-    <documentation>Traduit des textes jusqu'à 5 Ko entre plusieurs langages.</documentation>
-
-    <port name="BabelFishPort" binding="tns:BabelFishBinding">
-      <soap:address location="http://services.xmethods.net:80/perl/soaplite.cgi"/>
-    <port>
-  </service>
-</definitions>
-
- -

Figure 1. Instancier et initialiser un proxy de service Web.

- -

edited by sebastian gurin where the argument's semantics are:

- -
-
wsdlURL
-
The URL of the WSDL service description. This description will be loaded and used as the basis for the service proxy.
-
portname
-
The name of the port of the service that this service proxy represents. Currently the port must represent a SOAP binding.
-
qualifier
-
The user-specified qualifier is incorporated into the names of XPCOM interfaces created for the service proxy. For C++ callers, this qualifier should be the same one used in creating the IDL used at compile time. Script callers need not specify a qualifier.
-
isAsync
-
If PR_TRUE, the method signatures of the service proxy represent an asynchronous calling convention. A callback instance must be registered with the proxy. A method call to a web service is only completed when the corresponding callback method is invoked. If PR_FALSE, the method signatures of the service proxy represent a synchronous callling convention. A method call to a web service is completed when the method call to the proxy returns.
-
listener
-
The callback instance which will be invoked when the proxy is completely initialized.
-
- -

You can also use the simpler WebServiceProxyFactory::createProxy(wsdlURL, portname, qualifier,isAsync) method for create a web service proxy. The API description of WebServiceProxyFactory can be found here here

- -

La procédure de rappel

- -

Le dernier paramètre de createProxyAsync est un « listener » de création (une procédure qui « écoute » et attend des évènements). Il est appelé quand le proxy a été créé avec succès, en cas d'erreur lors de cette création et à chaque appel d'une méthode du proxy.

- -

Le listener de création est un objet de classe nsIWebServiceProxyCreationListener implémentant plusieurs méthodes :

- - - -


- L'appel des méthodes du proxy est asynchrone. Le listener de création gère les retours (« callback ») à chaque appel de méthode. Ces retours utilisent un shéma de nommage spécifique : {nom_de_la_méthode}Callback. Le service Web de BabelFish ne fournit qu'une seule méthode : BabelFish (repérée par la balise operation dans le WSDL), la fonction de rappel sera donc nommée BabelFishCallback. La méthode BabelFish attend en entrée une BabelFishRequest composée de deux paramètres et renvoie la valeur traduite sous forme de chaîne de caractère. La figure 2 contient la partie du fichier WSDL décrivant cette méthode :

- -
<message name="BabelFishRequest">
-  <part name="translationmode" type="xsd:string"/>
-  <part name="sourcedata" type="xsd:string"/>
-</message>
-<message name="BabelFishResponse">
-  <part name="return" type="xsd:string"/>
-</message>
-<portType name="BabelFishPortType">
-  <operation <span class="color1">name="BabelFish"<span>>
-    <input message="tns:BabelFishRequest"/>
-    <output message="tns:BabelFishResponse"/>
-  </operation>
-</portType>
-
- -

Figure 2. Description de la méthode dans le fichier WSDL.

- -

JavaScript :

- -
var listener = {
-  // appelée une fois le proxy instancié
-  onLoad: function (aProxy)
-  {
-    gProxy = aProxy;
-    gProxy.setListener(listener);
-    requestTranslation(aValue);
-  },
-  // appelée en cas d'erreur
-  onError: function (aError)
-  {
-    alert("Une erreur est survenue lors du traitement du fichier WSDL : " + aError);
-  },
-  // dans Mozilla 1.4, le nom de la procédure de retour est codé en dur à {nom_de_la_méthode}Callback in 1.4beta
-  BabelFishCallback  : function (aResult)
-  {
-    alert(aResult)
-  }
-};
-function requestTranslation(aValue){
-  if (gProxy) {
-    gProxy.BabelFish("en_fr", aValue);
-  } else {
-    alert("Erreur à l'initialisation du proxy");
-  }
-}
-
- -

Figure 3. Gestion de la fonction de retour.

- -

Exemple

- -

On utilise ci-dessous utilise le code précédent pour créer un exemple entièrement fonctionnel d'appel du service Web BabelFish pour traduire une chaîne saisie par l'utilisateur.

- -

L'interface utilisateur est un formulaire avec deux listes déroulantes et un champ pour saisir le texte à traduire. La première liste déroulante (id="lang_from") permet de choisir la langue du mot à traduire, la seconde (id="lang_to") la langue dans laquelle le traduire. Un bouton appelle la fonction initTranslation. Celle-ci vérifie que les langues d'origine et de destination sont différentes et, si c'est le cas, appelle la fonction Translate. Le service Web Babel Fish attend deux arguments : une chaîne au format langueSource_langueDestination et la chaîne à traduire.

- -
function initTranslation(){
-  var fromLang = document.getElementById('lang_from').value;
-  var toLang = document.getElementById('lang_to').value;
-
-  if (fromLang != toLang)
-    Translate(fromLang+'_'+toLang, document.getElementById('inputValue').value);
-  else
-    alert("Traduire d'une langue vers elle-même est de peu d'utilité :-) ");
-}
-
- -

Figure 4. Initier la traduction

- -

C'est la fonction Translate qui effectue l'appel du service Web. Elle teste si un objet « proxy » a déjà été créé en regardant si la variable globale gProxy est à null ou non. Si l'objet n'existe pas encore, la fonction crée un listener et l'affecte à une variable nommée listener. Elle appelle ensuite la fonction createProxy avec ce listener. Si le proxy avait déjà été créé, elle appelle la fonction requestTranslation.

- -
var gProxy = null;
-
-
-function Translate(aLangToFrom, aString){
-  if (!gProxy) {
-    var listener = {
-      // gets called once the proxy has been instantiated
-      onLoad: function (aProxy)
-      {
-        gProxy = aProxy;
-        gProxy.setListener(listener);
-        requestTranslation(aLangToFrom, aString);
-      },
-      // gets called if an error occurs
-      onError: function (aError)
-      {
-        alert("An error has occured: " + aError);
-      },
-      // callback function is hardcoded to {methodname}Callback
-      BabelFishCallback  : function (aResult)
-      {
-        document.getElementById("results").innerHTML = aResult;
-      }
-    };
-    <span class="color1">createProxy(listener)<span>;
-  } else {
-    <span class="color2">requestTranslation(aLangToFrom, aString)<span>;
-  }
-}
-
-
-function <span class="color1">createProxy<span>(aCreationListener){
-  try {
-    var factory = new WebServiceProxyFactory();
-    factory.createProxyAsync("http://www.xmethods.net/sd/2001/BabelFishService.wsdl", "BabelFishPort", "", true, aCreationListener);
-  } catch (ex) {
-    alert("Failed creating the proxy: "+ ex);
-  }
-}
-
-
-function <span class="color2">requestTranslation<span>(aLangToFrom, aString){
-  if (gProxy) {
-    gProxy.BabelFish(aLangToFrom, aString);
-  } else {
-    alert("Error: Proxy hasn't been set up correctly!");
-  }
-}
-
- -

Figure 5. Création du proxy

- -

La fonction createProxy est exécutée à la première demande de traduction. Elle instancie un objet de classe WebServiceProxyFactory et crée un nouveau proxy via la méthode createProxyAsync, à laquelle est passé le listener de création. Une fois le proxy créé, la méthode onLoad du listener est appelée. Elle effecte le proxy à la variable globale gProxy, enregistre le listener comme listener du proxy et appelle requestTranslation puisque le proxy est prêt à l'emploi.

- -

La fonction requestTranslation appelle à son tour la méthode BabelFish du proxy pour effectuer l'appel du service Web. En cas de succès de l'appel, la méthode BabelFishCallback du listener est exécutée, elle affiche la traduction dans un div. En cas d'erreur de l'appel (par exemple si une erreur SOAP est retournée), la méthode onError du listener est appelée.

- -

On peut tester le formulaire de traduction (Netscape 7.1/Mozilla 1.4 ou versions supérieures).

- -

Le modèle de sécurité

- -

Un des problèmes posés par l'implémentation d'appel à des services Web dans le navigateur est la question du modèle de sécurité multi-domaine. Une limitation de JavaScript impose qu'il ne peut charger de données que depuis le même domaine que celui du serveur où le script est hébergé. Par exemple Netscape.com ne peut récupérer de données via l'appel XMLHTTPRequest que de services dans le domaine netscape.com et non de toto.com. Un autre modèle de sécurité est donc nécessaire pour permettre à un site de se connecter à un service Web distant.

- -

Netscape a proposé au W3C un modèle de sécurité dans lequel le fournisseur d'un service Web détermine si celui-ci est accessible par tout le monde, uniquement depuis certains domaines ou n'est pas accessible depuis Internet. Il faut pour cela placer un fichier XML à la racine du serveur hébergeant le service. Dans le cas de XMethods qui fournit Babelfish, le fichier en question est à cette adresse http://services.xmethods.net/web-scripts-access.xml et autorise l'appel du service depuis n'importe quel domaine, ce qui permet à l'exemple de cet article d'effectuer un appel sur un autre serveur. On trouvera plus d'informations sur ce modèle de sécurité à cette adresse : http://lxr.mozilla.org/mozilla/sourc...ity_Model.html.

diff --git a/files/fr/spidermonkey/build_documentation/index.html b/files/fr/spidermonkey/build_documentation/index.html deleted file mode 100644 index 3d7f67bb12..0000000000 --- a/files/fr/spidermonkey/build_documentation/index.html +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Documentation pour Build SpiderMonkey -slug: SpiderMonkey/Build_Documentation -tags: - - Documentation de build - - Guide - - SpiderMonkey -translation_of: Mozilla/Projects/SpiderMonkey/Build_Documentation ---- -
{{SpiderMonkeySidebar("General")}}
- -

 

- -

Utilisez ces instructions pour build la dernière version du code source de SpiderMonkey.

- -

Avant de commencer, soyez certain d'avoir les bons outils de build pour votre ordinateur: Linux, Windows, Mac, autres. Lorsque vous buildez une version plus ancienne que le version 28, vous aurez en plus besoin de NSPR.

- -

Et évidemment, vous aurez besoin du code source de SpiderMonkey.

- -

Build (optimisé) pour les non-développeur

- -

Utilisez ces étapes si vous désirez juste installer SpiderMonkey ou l'utiliser comme une librairie. Si vous voulez travailler à améliorer SpiderMonkey, vous devriez en plus faire le build de développeur/debug décrit un peu plus bas dans cet article.

- -
cd js/src
-autoconf-2.13
-
-# Ce nom devrait se terminer par "_OPT.OBJ" pour que le système de contrôle de version l'ignore.
-mkdir build_OPT.OBJ
-cd build_OPT.OBJ
-../configure
-# Utilisez "mozmake" sur Windows
-make
-
- -

Notez que la  version 2.13 d'autoconf est requise. Une version postérieure ne marchera pas. Le package MozillaBuild pour Windows inclut autoconf 2.13.

- -
-

Note: Si vous sur Mac et que vous rencontrez une erreur similaire à :

- -

"checking whether the C compiler (gcc-4.2  ) works... no
- configure: error: installation or configuration problem: C compiler cannot create executables.
"

- -

Vous pouvez essayer de configurer ainsi:

- -
CC=clang CXX=clang++  ../configure
-
- -

Cela build un exécutable nommé js dans le dossier build-release/dist/bin. Vous pourrez tester avec dist/bin/js --help, ce qui affiche une page d'aide. À ce stade, vous êtes prêt à lancer et essayer le shell.

- -

Sur Mac, Linux ou Unix, vous pouvez installer SpiderMonkey sur votre système avec la commande additionnelle make install. Cette commande installe la librairie partagée dans /usr/local/lib, les fichiers hearder de C dans /usr/local/include, et l'exécutable js dans /usr/local/bin.

- -

Build pour développeur (debug)

- -

Pour développer ou debug SpiderMonkey, c'est mieux d'avoir aussi bien un build de debug( pour du debug de tous les jours) qu'une version optimisée du build (pour des tests de performance), dans des dossiers de build séparés. Pour ce faire, un plus des étapes au dessus, vous devriez céer un build de debug en suivant les instructions ci-après:

- -
cd js/src
-autoconf-2.13
-
-# Ce nom devrait se terminer par "_DBG.OBJ" pour que le système de gestion de version l'ignore.
-mkdir build_DBG.OBJ
-cd build_DBG.OBJ
-../configure --enable-debug --disable-optimize
-# Utilisez "mozmake" sur Windows
-make
-
- -

Vous pouvez aussi build des versions de debug avec l'option JS_GC_ZEAL, ce qui ajoute une nouvelle fonction incorporée à SpiderMonkey qui vous permet de configurer zealous garbage collection. Cette fonction vous permet de debug les fuites de mémoire et autres problèmes liés à la mémoire. Voir JS_SetGCZeal() pour plus de détails.

- -

Pour la liste des autres options de build disponible, tapez (considérant que le dossier courant est un des dossiers de build créés plus haut):

- -
../configure --help
-
- -

Les Builds de Windows

- -
-

Depuis la version 28, les builds threadsafe sont les builds par défaut, et devraient fonctionner tels quels sur toutes les platformes POSIX. De fait, les instructions suivantes devraient fonctionner si vous êtes sur Windows ou que vous compilez une ancienne version de SpiderMonkey.

-
- -

Le fichier batch MozillaBuild que vous utiliserai pour ouvrir le shell (ex. start-shell-msvc2013.bat ou start-shell-msvc2013-x64.bat) détermine si le compilateur ciblera un build 32-bit ou 64-bit builds. Pour créer un build 64-bits, notez qu'il faudra configurer avec --target=x86_64-pc-mingw32 --host=x86_64-pc-mingw32.

- -

Puisque l'émulation de POSIX NSPR n'est pas disponible pour Windows, une version fonctionnelle de NSPR doit être disponible pour votre build. L'option la plus simple est de configurer avec --enable-nspr-build. Cette option de configuration permet de build la version in-tree de NSPR qui est probablement ce que vous recherchez. Parce que SpiderMonkey utilise des symboles récents, le NSPR livré avec votre système d'expoloitation ne fonctionnera probablement pas.

- -

Si --enable-nspr-build ne marche pas, dites explcitement à configure où trouver NSPR en utilisant les options de configuration --with-nspr-cflags et --with-nspr-libs. Par exemple, considérant que votre NSPR local a été installé à C:/mozilla-build/msys/local:

- -
./configure --with-nspr-cflags="-IC:/mozilla-build/msys/local/include" \
-            --with-nspr-libs="C:/mozilla-build/msys/local/lib/libnspr4.a \
-                              C:/mozilla-build/msys/local/lib/libplds4.a \
-                              C:/mozilla-build/msys/local/lib/libplc4.a"
-
- -

Si vous avez des erreurs de chargement de symbole ou librairie dynamique, vous pourrez forcer le NSPR correct à charger avec :

- -
PATH="$PATH;C:/mozilla-build/msys/local/lib/" ./js
- -

Spécifier les dossiers d'installation

- -

make install met par défaut les fichiers dans les dossiers suivants. Vous pouvez modifier ce comportement en passant des options au script configure :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Types de fichiersLocalisationoption de configure
exécutables, scripts shell/usr/local/bin--bindir
librairies, données/usr/local/lib--libdir
données communes, indépendantes d'une architecture/usr/local/share--sharedir
header des fichiers C/usr/local/include--includedir
- -

Vous pouvez aussi passer au script configure une option de la forme --prefix=<PREFIXDIR>, ce qui remplace <PREFIXDIR> par /usr/local dans toutes les configuration au dessus, en une étape. C'est souvent la solution la plus simple à faire puisqu'il préserve l'arrangement de base de lib, bin, et du reste.

- -
Note: Tous les dossiers que vous passez au script configure sont enregistrés dans le makefile généré, alors vous n'aurez pas à les spécifiés à nouveau that que vous ne relancez pas configure.
- -

Building SpiderMonkey as a static library

- -

By default, SpiderMonkey builds as a shared library. However, you can build SpiderMonkey as a static library by specifying the --disable-shared-js flag when you run configure.

- -

Specifying compilers and compiler flags

- -

If you want to use a compiler other than the one the configure script chooses for you by default, you can set the CXX variable in the environment when you run configure. This will save the values you specify in the generated makefile, so once you've set it, you don't need to do so again until you re-run configure.

- -

If you'd like to pass certain flags to the compiler, you can set the CXXFLAGS environment variable when you run configure. For example, if you're using the GNU toolchain, the following will pass the -g3 flag to the compiler, causing it to emit debug information about macros. Then you can use those macros in gdb commands:

- -
$ CXXFLAGS=-g3 $SRC/configure
-...
-checking whether the C++ compiler (c++ -g3 ) works... yes
-...
-$
-
- -

To build a 32-bit version on a 64-bit Linux system, you can use the following:

- -
PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig CC="gcc -m32" CXX="g++ -m32" AR=ar $SRC/configure --target=i686-pc-linux
-
- -

To build a 64-bit version on a 32-bit Mac system (e.g. Mac OS X 10.5), you can use the following:

- -
AR=ar CC="gcc -m64" CXX="g++ -m64" ../configure --target=x86_64-apple-darwin10.0.0
-
- -

To build a 64-bit Windows version, you can use the following:

- -
$SRC/configure --host=x86_64-pc-mingw32 --target=x86_64-pc-mingw32
-
- -
Note: You must have started your MozillaBuild shell with the proper -x64.bat script in order for the 64-bit compilers to be in your PATH.
- -

Whatever compiler and flags you pass to configure are recorded in the generated makefile, so you don't need to specify them again until you re-run configure.

- -

Building your application

- -

While "How to build your complete application" is clearly out of scope for this document, here are some tips that will help get you on your way:

- - - -

Using the js-config script

- -

In addition to the SpiderMonkey libraries, header files, and shell, the SpiderMonkey build also produces a shell script named js-config which other build systems can use to find out how to compile code using the SpiderMonkey APIs, and how to link with the SpiderMonkey libraries.

- -
Note: In SpiderMonkey 1.8.5, the js-config script is not generated properly on many platforms. If the instructions below do not work, you can try this workaround.
- -

When invoked with the --cflags option, js-config prints the flags that you should pass to the C compiler when compiling files that use the SpiderMonkey API. These flags ensure the compiler will find the SpiderMonkey header files.

- -
$ ./js-config --cflags # Example output: -I/usr/local/include/js -I/usr/include/nspr
-
- -

When invoked with the --libs option, js-config prints the flags that you should pass to the C compiler when linking an executable or shared library that uses SpiderMonkey. These flags ensure the compiler will find the SpiderMonkey libraries, along with any libraries that SpiderMonkey itself depends upon (like NSPR).

- -
$ ./js-config --libs # Example output: -L/usr/local/lib -lmozjs -L/usr/lib -lplds4 -lplc4 -lnspr4 -lpthread -ldl -ldl -lm  -lm -ldl
- -

Testing SpiderMonkey

- - - -

Building SpiderMonkey 1.8 or earlier

- -

Use these instructions to build SpiderMonkey from an official source release or from the old CVS repository. To build the latest SpiderMonkey sources from Mercurial, see Building SpiderMonkey above.

- -

SpiderMonkey is easy to build from source if you have the usual Mozilla build prerequisites installed. Before you begin, make sure you have right build tools for your computer: LinuxWindowsMacothers.

- -

First, download a SpiderMonkey source distribution, such as SpiderMonkey 1.8 Release Candidate 1.

- -

To build, use these commands:

- -
tar xvzf js-1.8.0-rc1.tar.gz
-cd js/src
-make -f Makefile.ref
-
- -

This builds a debug version of SpiderMonkey. All build files are created in a subdirectory named depending on your system (for example,Linux_All_DBG.OBJ if you are on Linux). To install this build on your system, see SpiderMonkey installation instructions.

- -

To build an optimized (non-debug) version of SpiderMonkey:

- -
make BUILD_OPT=1 -f Makefile.ref
- -

To build a thread-safe version of SpiderMonkey:

- -
make JS_DIST=/full/path/to/directory/containing/nspr JS_THREADSAFE=1 -f Makefile.ref
-
diff --git a/files/fr/spidermonkey/index.html b/files/fr/spidermonkey/index.html deleted file mode 100644 index d1a56fe723..0000000000 --- a/files/fr/spidermonkey/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: SpiderMonkey -slug: SpiderMonkey -tags: - - JavaScript - - SpiderMonkey -translation_of: Mozilla/Projects/SpiderMonkey ---- -
SpiderMonkey est le moteur JavaScript de Gecko écrit en C. Il est utilisé dans divers produits Mozilla et est disponible sous la triple licence MPL/GPL/LGPL.
- - - - - - - - -
-

Documentation

- -
-
Référence JSAPI
-
Référence de l'API SpiderMonkey (à traduire de en:JSAPI Reference).
-
- -
-
Référence JSDBGAPI
-
La référence des API de débogage de SpiderMonkey. (à traduire de en:JSDBGAPI Reference)
-
- -
-
Guide de l'intégrateur du moteur JavaScript en C
-
Ce guide fournit un aperçu de SpiderMonkey et explique comment il peut être intégré dans d'autres applications pour les rendre perméables à JavaScript (à traduire de en:JavaScript C Engine Embedder's Guide).
-
- -
-
How to embed the JavaScript engine
-
Un tutoriel basique sur l'intégration de SpiderMonkey.
-
- -
-
Astuces sur le garbage collector de SpiderMonkey
-
Astuces permettant d'éviter les pièges du garbage collector (à traduire de en:SpiderMonkey Garbage Collection Tips).
-
- -
-
Introduction au shell JavaScript
-
Comment obtenir, compiler et utiliser le shell JavaScript.
-
- -

Tous les articles…

-
-

- -

Sujets liés

- -
-
JavaScript
-
-
- -

Categories

- -

Interwiki Language Links

diff --git a/files/fr/spidermonkey/index/index.html b/files/fr/spidermonkey/index/index.html deleted file mode 100644 index 322be3e864..0000000000 --- a/files/fr/spidermonkey/index/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Index -slug: SpiderMonkey/Index -tags: - - Index - - MDN Meta - - SpiderMonkey -translation_of: Mozilla/Projects/SpiderMonkey/Index ---- -

{{Index("/fr/docs/SpiderMonkey")}}

diff --git a/files/fr/storage/index.html b/files/fr/storage/index.html deleted file mode 100644 index fdf5f8696b..0000000000 --- a/files/fr/storage/index.html +++ /dev/null @@ -1,392 +0,0 @@ ---- -title: Storage -slug: Storage -tags: - - API_du_toolkit - - Interfaces - - Référence_de_l'API_XPCOM - - Storage - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Storage ---- -

Storage est une API de base de données SQLite. Elle est uniquement accessible aux appels privilégiés, c'est-à-dire provenant d'extensions et de composants de Firefox uniquement. Pour une référence complète de toutes les méthodes et propriétés de l'interface de connexion à la base de données, consultez mozIStorageConnection.

- -

L'API est toujours considérée comme en cours de développement, ce qui signifie qu'elle peut être modifiée à n'importe quel moment. Il se peut en effet que l'API soit quelque peu modifiée entre Firefox 2 et Firefox 3.

- -
Note : Il convient de faire la différence entre Storage et la fonctionnalité DOM:Storage qui peut être utilisée par des pages Web pour conserver des données persistantes ou l'API de restauration de session (un utilitaire de stockage XPCOM destiné aux extensions).
- -

Préambule

- -

Ce document traite de l'API mozStorage et de quelques particularités de sqlite. Il ne traite pas du SQL ou de l'utilisation normale de sqlite. Pour ces autres informations, vous devrez consulter vos références favorites sur SQL. Vous pourrez cependant trouver quelques liens très utiles dans la section Voir également. Pour obtenir plus d'aide sur l'API mozStorage, vous pouvez poster sur le serveur de news mozilla.dev.apps.firefox sur news.mozilla.org. Pour signaler des bogues, utilisez Bugzilla (product « Toolkit », component « Storage »).

- -

mozStorage se présente comme n'importe quelle autres système de bases de données. La procédure complète d'utilisation est la suivante :

- - - -

Ouverture d'une connexion

- -

Pour les utilisateurs de C++, la première initialisation du service Storage doit se faire dans le thread principal. Vous obtiendrez une erreur en voulant l'initialiser dans un autre thread. Vous pouvez toutefois utiliser le service depuis un thread en appelant la méthode getService depuis le thread principal pour vérifier que le service a bien été créé.

- -

Voici un exemple C++ d'ouverture d'une connexion vers « asdf.sqlite » dans le répertoire du profil de l'utilisateur :

- -
nsCOMPtr<nsIFile> dbFile;
-rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
-                            getter_AddRefs(dbFile));
-NS_ENSURE_SUCCESS(rv, rv);
-rv = dbFile->Append(NS_LITERAL_STRING("mon_fichier_db.sqlite"));
-NS_ENSURE_SUCCESS(rv, rv);
-
-mDBService = do_GetService(MOZ_STORAGE_SERVICE_CONTRACTID, &rv);
-NS_ENSURE_SUCCESS(rv, rv);
-rv = mDBService->OpenDatabase(dbFile, getter_AddRefs(mDBConn));
-NS_ENSURE_SUCCESS(rv, rv);
-
- -

MOZ_STORAGE_SERVICE_CONTRACTID est défini dans storage/build/mozStorageCID.h. Sa valeur est "@mozilla.org/storage/service;1".

- -

Voici un exemple en JavaScript :

- -
let { Cc, Ci } = require('chrome');
-var file = Cc["@mozilla.org/file/directory_service;1"]
-                     .getService(Ci.nsIProperties)
-                     .get("ProfD", Ci.nsIFile);
-file.append("mon_fichier_db.sqlite");
-
-var storageService = Cc["@mozilla.org/storage/service;1"]
-                        .getService(Ci.mozIStorageService);
-var mDBConn = storageService.openDatabase(file);
-
- -
-
-
Note : la fonction openDatabase risque d'être modifiée à l'avenir. Elle sera probablement améliorée et simplifiée pour réduire les difficultés d'utilisation.
-
-
- -

Il est déconseillé de nommer votre base de données avec une extension en « .sdb » pour sqlite database. En effet, Windows reconnaît cette extension comme une « base de données de compatibilité des applications » et les modifications sont inscrites dans la fonctionnalité de restauration système. Cela peut donc ralentir fortement les opérations sur le fichier.

- -

Requêtes

- -

Suivez ces instructions pour créer et exécuter des requêtes SQL sur votre base de données SQLite. Pour une référence plus complète, consultez mozIStorageStatement.

- -

Création d'une requête

- -

Il existe deux méthodes pour créer une requête. Si vous n'avez aucun paramètre et si la requête ne renvoie aucune valeur, utilisez mozIStorageConnection.executeSimpleSQL.

- -
C++ :
-rv = mDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING("CREATE TABLE foo (a INTEGER)"));
-
-JS :
-mDBConn.executeSimpleSQL("CREATE TABLE foo (a INTEGER)");
-
- -

Autrement, vous devrez préparer une requête en utilisant mozIStorageConnection.createStatement :

- -
C++ :
-nsCOMPtr<mozIStorageStatement> instruction;
-rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING("SELECT * FROM foo WHERE a = ?1"),
-                              getter_AddRefs(statement));
-NS_ENSURE_SUCCESS(rv, rv);
-
-JS :
-var instruction = mDBConn.createStatement("SELECT * FROM foo WHERE a = ?1");
-
- -

Cet exemple utilise un sélecteur « ?1 » comme paramètre qui sera renseigné ultérieurement (voir la section suivante).

- -

Après avoir préparé une requête, vous pouvez lui lier des paramètres, l'exécuter et la réinitialiser autant de fois que vous le souhaitez. Si vous devez faire une requête fréquemment, l'utilisation d'une requête précompilée augmentera les performances de manière significative car la requête SQL n'aura pas à être traitée à chaque fois.

- -

Si vous êtes familier avec sqlite, vous devez savoir que les requêtes préparées deviennent invalides lorsque la structure de la base de données est modifiée. Heureusement, mozIStorageStatement détecte l'erreur et recompile la requête si nécessaire. Ainsi, après avoir créé une requête, vous n'avez pas à vous soucier d'une modification de structure ; toutes les requêtes continueront à fonctionner de manière transparente.

- -

Liaison de paramètres

- -

Il est généralement préférable de lier tous les paramètres séparément plutôt que d'essayer de construire à la volée des chaînes SQL contenant ces paramètres. Entre autres choses, ce mode de fonctionnement permet d'éviter une attaque par injection SQL puisque les paramètres liés ne sont jamais exécutés en SQL.

- -

Les sélecteurs inclus dans la requête sont liés aux paramètres. Les sélecteurs sont indexés en commençant par « ?1 », puis « ?2 », et ainsi de suite. Vous devez utiliser les fonctions BindXXXParameter(0), BindXXXParameter(1), etc. pour lier ces sélecteurs.

- -
-
-
Attention : les indices des sélecteurs débutent à partir de 1. Les entiers passés aux fonctions de liaison débutent à partir de 0. Cela signifie que « ?1 » correspond au paramètre 0, « ?2 » correspond au paramètre 1, etc.
-
-
- -

Il est également possible d'utiliser des paramètres nommés, comme ceci : « :exemple » au lieu de «?xx ».

- -

Un sélecteur peut apparaître plusieurs fois dans la chaîne SQL et tous les instances seront remplacées par la valeur liée. Les paramètres non liés seront interprétés comme NULL.

- -

Les exemples ci-dessous utilisent uniquement bindUTF8StringParameter() et bindInt32Parameter(). Pour une liste de toutes les fonctions de liaison, consultez mozIStorageStatement.

- -

Exemple C++ :

- -
nsCOMPtr<mozIStorageStatement> instruction;
-rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING("SELECT * FROM foo WHERE a = ?1 AND b > ?2"),
-                              getter_AddRefs(statement));
-NS_ENSURE_SUCCESS(rv, rv);
-rv = instruction->BindUTF8StringParameter(0, "bonjour"); // "bonjour" sera substitué à "?1"
-NS_ENSURE_SUCCESS(rv, rv);
-rv = instruction->BindInt32Parameter(1, 1234); // 1234 sera substitué à "?2"
-NS_ENSURE_SUCCESS(rv, rv);
-
- -

Exemple Javascript :

- -
var instruction = mDBConn.createStatement("SELECT * FROM foo WHERE a = ?1 AND b > ?2");
-instruction.bindUTF8StringParameter(0, "bonjour");
-instruction.bindInt32Parameter(1, 1234);
-
- -

En cas d'utilisation de paramètres nommés, il vous faudra utiliser la méthode getParameterIndex pour obtenir l'indice du paramètre. Voici un exemple en JavaScript :

- -
var instruction = mDBConn.createStatement("SELECT * FROM foo WHERE a = :premierparam AND b > :secondparam");
-
-var premierindice = instruction.getParameterIndex(":premierparam");
-instruction.bindUTF8StringParameter(premierindice, "bonjour");
-
-var secondindice = instruction.getParameterIndex(":secondparam");
-instruction.bindInt32Parameter(secondindice, 1234);
-
- -

Il est évidemment possible d'utiliser à la fois des paramètres nommés et indexés dans une même requête :

- -
var instruction = mDBConn.createStatement("SELECT * FROM foo WHERE a = ?1 AND b > :secondparam");
-
-instruction.bindUTF8StringParameter(0, "bonjour");
-// on peut aussi utiliser
-// var premierindice = instruction.getParameterIndex("?1");
-// instruction.bindUTF8StringParameter(premierindice, "bonjour");
-
-var secondindice = instruction.getParameterIndex(":secondparam");
-instruction.bindInt32Parameter(secondindice, 1234);
-
- -

Si vous désirez utiliser une clause WHERE avec une expression IN ( liste-de-valeurs ), les liaisons ne fonctionneront pas. Construisez plutôt une chaîne. Si ce n'est pas pour gérer une entrée de l'utilisateur, cela ne posera pas de problème de sécurité :

- -
var ids = "3,21,72,89";
-var sql = "DELETE FROM table WHERE id IN ( "+ ids +" )";
-
- -

Exécution d'une requête

- -

La principale manière d'exécuter une requête est d'utiliser la fonction mozIStorageStatement.executeStep. Cette fonction vous permet de récupérer chaque ligne produite par la requête en vous notifiant lorsqu'il n'y a plus de résultats.

- -

Après un appel d'executeStep, vous utilisez la fonction d'accès appropriée de mozIStorageValueArray pour obtenir les valeurs dans une ligne de résultat (mozIStorageStatement implémente mozIStorageValueArray). L'exemple ci-dessous utilise uniquement getInt32().

- -

Vous pouvez obtenir le type de la valeur d'une colonne spécifiée avec mozIStorageValueArray.getTypeOfIndex. Faites attention, sqlite n'est pas une base de données typée. N'importe quel type de données peut être placé dans une cellule, indépendamment du type de la colonne. Si vous lisez une donnée d'un type différent, sqlite fera de son mieux pour la convertir, et vous proposera une valeur par défaut si c'est impossible. De ce fait, il n'est pas possible d'obtenir des erreurs de typage, mais cela peut engendrer des résultats surprenants.

- -

Les codes C++ peuvent également utiliser des fonctions AsInt32, AsDouble, etc. pour adapter la valeur retournée à un type C++. Prenez garde toutefois car aucune erreur ne vous sera signalée si votre index est invalide. D'autres erreurs sont impossibles car sqlite convertira toujours les types, même si cela n'a aucun sens.

- -

Exemple C++ :

- -
PRBool hasMoreData;
-while (NS_SUCCEEDED(instruction->ExecuteStep(&hasMoreData)) && hasMoreData) {
-  PRInt32 valeur = instruction->AsInt32(0);
-  // utiliser la valeur...
-}
-
- -

Exemple Javascript :

- -
while (instruction.executeStep()) {
-  var valeur = instruction.getInt32(0); // utilisez la fonction appropriée !
-  // utiliser la valeur...
-}
-
- -

mozIStorageStatement.execute() est une fonction pratique lorsque votre requête ne renvoie pas de valeurs. Elle effectue la requête en une seule étape et se réinitialise. Elle sert surtout pour des requêtes d'insertion en simplifiant le code :

- -
var instruction = mDBConn.createStatement("INSERT INTO ma_table VALUES (?1)");
-instruction.bindInt32Parameter(52);
-instruction.execute();
-
- -

Ceci 'en:Image:TTRW2.zip est un exemple JavaScript et XUL simple mais complet de la manière d'exécuter un SELECT SQL sur une base de données.

- -

Réinitialisation d'une requête

- -

Il est important de réinitialiser les requêtes qui ne servent plus. Une requête d'écriture non réinitialisée laissera un verrou sur les tables et interdira à d'autres requêtes d'y accéder. Une requête de lecture non réinitialisée interdira toute écriture.

- -

Lorsque l'objet de requête est libéré, la base de données à laquelle il était lié est fermée. Si vous utilisez C++ et savez que toutes les références seront détruites, vous n'avez pas à réinitialiser explicitement la requête. De même, avec l'appel de la fonction mozIStorageStatement.execute(), il est inutile de réinitialiser la requête ; cette fonction le fera pour vous. Dans les autres cas, appelez mozIStorageStatement.reset().

- -

En JavaScript, toutes les requêtes doivent être réinitialisées. Faites attention au sujet des exceptions. Assurez vous que vos requêtes soient réinitialisées même si une exception est déclenchée, sinon l'accès à la base de données ne sera plus possible. La réinitialisation d'une requête est une opération légère sans conséquences, donc n'hésitez pas à effectuer même des réinitialisations superflues.

- -
var instruction = connection.createStatement(...);
-try {
-  // utiliser la requête...
-} finally {
-  instruction.reset();
-}
-
- -

Les scripts C++ doivent faire de même. L'objet de contexte mozStorageStatementScoper dans storage/public/mozStorageHelper.h s'assurera qu'une requête donnée est réinitialisée lorsque le contexte est quitté. Il est fortement recommandé d'utiliser cet objet.

- -
void someClass::someFunction()
-{
-  mozStorageStatementScoper scoper(mStatement)
-  // utiliser la requête...
-}
-
- -

ID de dernière insertion

- -

Utilisez la propriété lastInsertRowID de la connexion pour obtenir l'id (rowid) de la dernière opération INSERT sur la base de donnée.

- -

C'est surtout utile si une des colonnes de votre table est définie à INTEGER PRIMARY KEY ou INTEGER PRIMARY KEY AUTOINCREMENT, auquel cas SQLite assignera automatiquement une valeur pour chaque ligne insérée si vous n'en fournissez pas. La valeur de retour est du type number en JS et long long en C++.

- -

Exemple en JS avec lastInsertRowID :

- -
var sql = "INSERT INTO contacts_table (number_col, name_col) VALUES (?1, ?2)"
-var statement = mDBConn.createStatement(sql);
-statement.bindUTF8StringParameter(0, number);
-statement.bindUTF8StringParameter(1, name);
-statement.execute();
-statement.reset();
-
-var rowid = mDBConn.lastInsertRowID;
-
- -

Transactions

- -

mozIStorageConnection dispose de fonctions pour débuter et clore des transactions. Même si vous n'utilisez pas explicitement de transactions, une transaction implicite sera créée pour chacune de vos requêtes. Ceci a des implications majeures en termes de performances. Chaque transaction, et en particulier les validations, occasionne un délai supplémentaire. Les performances seront meilleures si vous placez plusieurs requêtes dans une même transaction. Consultez Storage:Performances pour plus d'informations sur les performances.

- -

La différence principale avec d'autres systèmes de bases de données est que sqlite ne gère pas les transactions imbriquées. C'est-à-dire qu'une fois une transaction ouverte, vous ne pouvez pas en ouvrir une autre. Vous pouvez vérifier si une transaction est en cours de traitement grâce à mozIStorageConnection.transactionInProgress.

- -

Vous pouvez également exécuter les commandes SQL « BEGIN TRANSACTION » et « END TRANSACTION » directement (c'est ce que fait la connexion avec l'appel des fonctions). Cependant, il est fortement recommandé d'utiliser mozIStorageConnection.beginTransaction et des fonctions associées parce qu'elles mémorisent l'état de la transaction dans la connexion. Dans le cas contraire, l'attribut transactionInProgress aura une valeur erronée.

- -

sqlite comprend différents types de transactions :

- - - - - - - -

Vous pouvez définir le type de la transaction en le transmettant par mozIStorageConnection.beginTransactionAs. Gardez en tête que si une autre transaction a déjà démarré, cette opération échouera. Habituellement, le type par défaut TRANSACTION_DEFERRED suffit, et à moins de savoir exactement ce que vous faites, vous n'aurez pas besoin des autres types. Pour plus d'informations, consultez la document sqlite sur BEGIN TRANSACTION et le verrouillage.

- -
var ourTransaction = false;
-if (mDBConn.transactionInProgress) {
-  ourTransaction = true;
-  mDBConn.beginTransactionAs(mDBConn.TRANSACTION_DEFERRED);
-}
-
-// ... utiliser la connexion ...
-
-if (ourTransaction)
-  mDBConn.commitTransaction();
-
- -

Dans un code C++, vous pouvez utiliser la classe helper mozStorageTransaction définie dans storage/public/mozStorageHelper.h. Cette classe démarrera une transaction du type donné sur la connexion spécifiée lorsqu'elle rentre dans le contexte d'exécution, et fera une validation ou une annulation de la transaction lorsqu'elle sort du contexte. Si une autre transaction est en cours, la classe helper de transaction n'effectuera aucune action.

- -

Elle dispose également de fonctions pour réaliser explicitement des validations. L'utilisation classique est de définir dans la classe un comportement d'annulation (rollback) par défaut, et d'ensuite valider explicitement la transaction si le processus a réussi :

- -
nsresult uneFunction()
-{
-  // Définir (par défaut) la transaction avec une annulation en cas d'échec
-  mozStorageTransaction transaction(mDBConn, PR_FALSE);
-
-  // ... utiliser la connexion ...
-
-  // tout s'est bien passé, alors validation explicite
-  return transaction.Commit();
-}
-
- -

Comment corrompre votre base de données

- - - - - - - - - - - - - -

Verrous SQLite

- -

SQLite verrouille la totalité de la base de données ; ainsi, lorsqu'une lecture active est en cours, toute tentative d'écriture recevra un SQLITE_BUSY, et lorsqu'une écriture active est en cours, toute tentative de lecture recevra un SQLITE_BUSY. Une requête est considérée comme active à partir de la première fonction step() jusqu'à ce que la fonction reset() soit appelée. execute() effectue ces deux opérations en une seule étape. Un problème courant est d'oublier de réinitialiser (reset()) une requête après avoir terminé la boucle step().

- -

Bien qu'une connexion sqlite soit capable de gérer plusieurs requêtes ouvertes, son modèle de verrouillage limite ce qu'elles peuvent faire simultanément (lecture ou écriture). En fait, il est possible pour plusieurs requêtes d'être actives en lecture en même temps. Mais il n'est pas possible qu'elles puissent lire et écrire en même temps sur la même table — même si elles dérivent de la même connexion.

- -

Sqlite a deux niveaux de verrou : un au niveau de la connexion et un au niveau de la table. La plupart des utilisateurs sont habitués au verrou du niveau connexion (base de données) : lecture multiple mais une seule écriture. Les verrous du niveau table (B-Tree) sont ce qui peut devenir moins clair (en interne, chaque table de la base de données dispose de son propre B-Tree, donc les « tables » et « B-Tree » sont techniquement synonymes).

- -

Verrous au niveau de la table

- -

Vous devez penser que si vous possédez une seule connexion qui verrouille la base de données en écriture, vous pouvez utiliser plusieurs requêtes pour faire ce que vous voulez. Ce n'est pas entièrement le cas. Vous devez considérer le verrou de niveau table (B-Tree) qui est maintenu par le gestionnaire de requêtes lors du parcours de la base de données (c'est-à-dire les requêtes d'ouverture SELECT).

- -

La règle générale est la suivante : un gestionnaire de requête ne peut pas modifier une table (B-Tree) qu'un autre gestionnaire de requêtes est en train de lire (avec un pointeur ouvert dessus) — même si le gestionnaire partage la même connexion (contexte de transaction, verrou de base de données, etc.) avec d'autres gestionnaires. Toute tentative sera bloquée (ou retournera SQLITE_BUSY).

- -

Ce problème se présente lorsque vous essayez de parcourir une table avec une requête en modifiant des enregistrements en même temps. Cela ne fonctionnera pas (ou aura une forte probabilité de ne pas fonctionner, selon les optimisations de performances utilisées (voir ci-dessous). La requête en écriture sera bloquée car la requête en lecture a un pointeur ouvert sur la table.

- -

Résolutions des problèmes de verrouillage

- -

La solution est de suivre la méthode (1) comme ce qui est décrit plus haut. Théoriquement, la méthode (2) ne fonctionne pas avec SQLite 3.x. Dans ce scénario, les verrous de la base de données s'ajoutent (avec de multiples connexions) aux verrous de table. La connexion 2 (connexion de modification) ne pourra pas modifier (écrire dans) la base de données pendant que la connexion 1 (connexion de lecture) est en train de la lire. La connexion 2 nécessite un verrou exclusif pour exécuter une commande SQL de modification, mais elle ne peut pas l'obtenir tant que la connexion 1 effectue ses requêtes de lecture sur la base (la connexion 1 a un verrou partagé pendant ce temps, ce qui exclut toute possibilité d'obtention d'un verrou exclusif).

- -

Une autre option consiste à passer par une table temporaire. Créez une table temporaire qui contient les résultats intéressants de la table, parcourez la (ce qui place un verrou de lecture sur la table temporaire) et ensuite effectuez sans problème les modifications sur la table réelle par des requêtes d'écriture. Ceci peut être réalisé avec des requêtes dérivées d'une connexion unique (contexte de transaction). Ce scénario s'effectue parfois en arrière plan, comme dans le cas d'un tri ORDER BY qui génère des tables temporaires en interne. Il ne faut toutefois pas s'attendre à ce que l'optimiseur le fasse dans tous les cas. La création explicite d'une table temporaire est le moyen le plus sûr pour réaliser cette dernière option.

- -

Sécurité des threads

- -

Le service mozStorage et sqlite prennent en compte la sécurité des threads. Cependant, aucun des autres objets mozStorage ou sqlite, ou aucune des opérations n'est à considérer comme thread-safe.

- - - - - - - -

Il convient cependant de noter que les auteurs d'extensions du navigateur en JavaScript seront moins affectés par ces restrictions qu'à première vue. Si une base de données est créée et utilisé exclusivement depuis JavaScript, les threads ne seront généralement pas un problème. SpiderMonkey (le moteur JavaScript de Firefox) exécute JavaScript depuis un seul thread persistant, sauf quand celui-ci s'exécute dans un thread différent ou depuis un callback venant d'un autre thread (par exemple via certaines interfaces réseau ou de flux). Si l'on exclut l'utilisation incorrecte de JavaScript multi-threads, il ne devrait y avoir de problèmes que si une base de données déjà utilisée par un thread système non JavaScript est ensuite accédée au travers de mozStorage.

- -

Voir également

- - - - - -

diff --git "a/files/fr/syst\303\250me_de_pr\303\251f\303\251rences/index.html" "b/files/fr/syst\303\250me_de_pr\303\251f\303\251rences/index.html" deleted file mode 100644 index 590db89ebc..0000000000 --- "a/files/fr/syst\303\250me_de_pr\303\251f\303\251rences/index.html" +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Système de préférences -slug: Système_de_préférences -tags: - - Système_de_préférences - - 'XUL:Références' -translation_of: Mozilla/Preferences/Preferences_system ---- -

Ce document décrit le nouveau système de préférences présent dans les versions récentes du toolkit. L'utilisation de ce système permet de créer des fenêtres de préferences s'affichant et fonctionnant de façon appropriée sur les différentes plateformes (Windows, Mac OS X et GNOME).

- -

Note : Le nouveau système de préferences n'est disponible qu'à partir de Firefox/Thunderbird 1.5 (et leurs versions alpha et beta). Vous ne pourrez pas l'utiliser dans des applications ou extensions basées sur Firefox 1.0.

- -

Ce nouveau système est implémenté grâce à quelques éléments et attributs XUL. Les informations de référence sont disponibles en suivant les liens ci-dessous :

- -

Documentation sur le système de préférences :

- -

Utilisation

- -

this will eventually be moved from here

- -

Voici un code pour une fenêtre de préférences classique :

- -
<prefwindow id="appPreferences"
-            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <prefpane id="pane1" label="&pane1.title;">
-    <preferences>
-      <preference id="pref1" name="pref.name" type="bool"/>
-    </preferences>
-
-   .. Élements de l'interface faisant référence aux préférences ci-dessus, par ex. :
-    <checkbox id="check1" preference="pref1"
-              label="&check1.label;" accesskey="&check1.accesskey;"/>
-  </prefpane>
-
-  <prefpane id="pane2" label="&pane2.title;" src="chrome://uri/to/pane.xul"/>
-</prefwindow>
-
- -

Le contenu d'un panneau peut être défini en ligne ou par l'intermédiaire d'un lien chrome externe via un overlay dynamique. Vous devrez lire attentivement le guide d'interfaces homme-machine (HIG) des plateformes visées et utiliser le pré-processeur XUL lorsque c'est nécessaire pour définir des titres de fenêtres différents. Vous devrez également faire attention à définir la largeur de la fenêtre (en em) de manière adaptée en utilisant le pré-processeur pour chaque plateforme cible, ainsi que la hauteur (en em) pour les plateformes où la fenêtre ne change pas de taille selon le panneau sélectionné (comme sous Windows).

- -

Bugzilla

- -

Les bugs pour les liaisons des préférences (lorsqu'ils ne sont pas des bugs d'interface de Firefox/Thunderbird) sont répertoriés sous le composantToolkit:Preferences(créer un bug liste des bugs ouverts).

- -

 

- -

 

- -
 
diff --git a/files/fr/theme_packaging/index.html b/files/fr/theme_packaging/index.html deleted file mode 100644 index e3377ec59d..0000000000 --- a/files/fr/theme_packaging/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Empaqueter un thème -slug: Theme_Packaging -tags: - - Themes -translation_of: Mozilla/Thunderbird/Thunderbird_extensions/Theme_Packaging ---- -

Ce document décrit comment sont packagés les thèmes pour Firefox et Thunderbird.

-

Préalables

-

Construire un thème pour Firefox ou Thunderbird requiert quelques connaissances des feuilles de style en cascade (CSS), probablement de XBL, et quelques notions de design graphique et d'esthétisme (...ou peut-être pas). Ce document décrit seulement comment les thèmes sont packagés afin d'être affichés dans la fenêtre des thèmes de l'application.

-

Arborescence des fichiers d'un thème

-

Les thèmes Firefox/Thunderbird sont packagés dans un fichier JAR avec la structure arborescente suivante :

-
montheme.jar :
-  install.rdf
-  contents.rdf
-  preview.png
-  icon.png
-  browser/fichiers
-  global/fichiers
-  mozapps/fichiers
-  communicator/fichiers
-  ...
-
-
- -

install.rdf

-

Votre fichier manifest install.rdf devrait ressembler à cela :

-
<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:type>4</em:type>more properties
-  </Description>
-</RDF>
-
-

Les propriétés requises dans install.rdf

-

Votre manifest install.rdf doit contenir les propriétés suivantes. Consultez la référence install.rdf pour plus d'informations :

- -

Les propriétés optionnelles d'install.rdf

- -

Il est à noter que si votre thème est disponible sur le site Web officiel http://addons.mozilla.org, il ne devra pas inclure de propriété updateURL.

-

Exemple de fichier manifest install.rdf

-
<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>{18b64b56-d42f-428d-a88c-baa413bc413f}</em:id>
-    <em:version>1.0</em:version>
-    <em:type>4</em:type>
-
-    <!-- Target Application this extension can install into,
-         with minimum and maximum supported versions. -->
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-        <em:minVersion>0.8</em:minVersion>
-        <em:maxVersion>0.9</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:name>New Theme 1</em:name>
-    <em:description>A test theme for Firefox</em:description>
-    <em:creator>Ben Goodger</em:creator>
-    <em:contributor>John Doe</em:contributor>
-    <em:homepageURL>http://www.bengoodger.com/</em:homepageURL>
-
-    <!-- Front End Integration Hooks (used by Theme Manager)-->
-    <em:internalName>newtheme1</em:internalName>
-  </Description>
-</RDF>
-
-

Ce qui suit sont les GUID habituels des applications que vous devez utiliser dans la propriété targetApplication :

-
Firefox      {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
-Thunderbird  {3550f703-e582-4d05-9a08-453d09bdfdc6}
-Sunbird      {718e30fb-e89b-41dd-9da7-e25a45638b28}
-
-

Référence officielle de l'API du toolkit

-

{{page("/fr/API_du_toolkit/Références_officielles")}}

diff --git a/files/fr/utilisation_de_code_mozilla_dans_d'autres_projets/index.html b/files/fr/utilisation_de_code_mozilla_dans_d'autres_projets/index.html deleted file mode 100644 index 3f9f0bf95d..0000000000 --- a/files/fr/utilisation_de_code_mozilla_dans_d'autres_projets/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Utilisation de code Mozilla dans d'autres projets -slug: Utilisation_de_code_Mozilla_dans_d'autres_projets -translation_of: Mozilla/Using_Mozilla_code_in_other_projects ---- -

Il existe plusieurs façons d'utiliser le code de Mozilla dans votre projet.

- - - - - - - - -
-

Développement d'applications XUL

-
-
- Les joies de XUL
-
- Une introduction à XUL ; une lecture incontournable pour les nouveaux développeurs.
-
- Référence XUL
-
- La référence complète de XUL.
-
- XULRunner
-
- A Mozilla runtime package that can be used to bootstrap XUL and XPCOM applications with ease.
-
- Le toolkit de Mozilla
-
- Informations concernant l'API du Toolkit Mozilla.
-
-
-

Utilisation de composants Mozilla

-
-
- SpiderMonkey
-
- SpiderMonkey est l'environnement d'exécution JavaScript utilisé dans les projets Mozilla.
-
- NSPR
-
- Cette bibliothèque d'exécution portable (Netscape Portable Runtime) fournit une API multiplateforme pour les fonctions de niveau système et de type libc.
-
- Necko
-
- La bibliothèque réseau de Mozilla fournit des fonctionnalités réseau multiplateformes.
-
-
-

Mozilla embarqué

-

Pour des informations sur l'intégration d'un navigateur web dans votre propre application, consultez Mozilla embarqué.

-

{{ languages( { "en": "en/Using_Mozilla_code_in_other_projects", "ja": "ja/Using_Mozilla_code_in_other_projects"} ) }}

diff --git a/files/fr/utilisation_de_modules_de_code_javascript/index.html b/files/fr/utilisation_de_modules_de_code_javascript/index.html deleted file mode 100644 index d35203b9c7..0000000000 --- a/files/fr/utilisation_de_modules_de_code_javascript/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Utilisation de modules de code JavaScript -slug: Utilisation_de_modules_de_code_JavaScript -translation_of: Mozilla/JavaScript_code_modules/Using ---- -

{{ Fx_minversion_header(3) }}

-

Les modules de code JavaScript sont un concept introduit dans Firefox 3 (Gecko 1.9) et peuvent être utilisés pour partager du code entre différentes visibilités privilégiées. On peut également utiliser des modules pour créer des singletons JavaScript globaux pour lesquels on avait auparavant besoin d'objets XPCOM JavaScript. Un module de code JavaScript est simplement constitué de code JavaScript placé à un endroit enregistré. Celui-ci est chargé dans une visibilité JavaScript particulière, comme un script XUL ou un script XPCOM JavaScript, à l'aide de Components.utils.import.

-

Un module JavaScript très simple ressemble à ceci :

-
var EXPORTED_SYMBOLS = ["foo", "bar"]
-
-function foo() {
-  return "foo";
-}
-
-var bar = {
-  nom : "bar",
-  taille : "3"
-};
-
-var brol = "brol";
-
-

Remarquez que le module utilise du JavaScript tout à fait normal pour créer des fonctions, objets, constantes et tout autre type JavaScript. Le module définit également un tableau spécial appelé EXPORTED_SYMBOLS. Tout élément JavaScript présent dans EXPORTED_SYMBOLS sera exporté depuis le module et injecté dans la visibilité qui l'importe. Par exemple :

-
Components.utils.import("resource://app/modules/mon_module.jsm");
-
-alert(foo());           // affiche "foo"
-alert(bar.taille + 3);  // affiche "6"
-alert(brol);            // affiche « brol n'est pas défini » car « brol » n'a pas été exporté par le module
-
-

Une caractéristique très importante du comportement de Components.utils.import est que les modules sont mis en cache lorsqu'il sont chargés et que les importations ultérieures ne rechargent pas une nouvelle version du module, mais utiliseront la version précédemment mise en cache. Cela signifie qu'un module donné sera partagé lorsqu'il est importé plusieurs fois. par exemple, si le module présenté plus haut était importé dans deux visibilités JavaScript différentes, les changements dans l'une pourraient être observés dans l'autre.

-

Visibilité 1 :

-
Components.utils.import("resource://app/modules/mon_module.jsm");
-
-alert(bar.taille + 3);  // affiche "6"
-
-bar.taille = 10;
-
-

Visibilité 2:

-
Components.utils.import("resource://app/modules/mon_module.jsm");
-
-alert(foo());           // affiche "foo"
-alert(bar.taille + 3);  // affiche "13"
-
-

Ce comportement partagé peut être utilisé pour créer des objets singletons pouvant partager des données entre fenêtres et entre scripts XUL et composants XPCOM.

-

Le protocole resource:

-

En utilisant Components.utils.import, vous remarquerez que les modules de code sont chargés à l'aide d'un protocole « resource:// ». La syntaxe de base d'une URL de ressource est la suivante :

-
resource://<alias>/<chemin-relatif>/<fichier.js|jsm>
-
-

La partie <alias> est un alias vers un emplacement, généralement un emplacement physique relatif à l'application ou à l'environnement d'exécution XUL. Différents alias sont prédéfinis par l'environnement d'exécution XUL :

- -

La partie <chemin-relatif> peut avoir plusieurs niveaux de profondeur et est toujours relative à l'emplacement défini par l'<alias>. Le chemin relatif commun est « modules » et est utilisé par XULRunner et Firefox. Les fichiers de modules sont de simples fichiers JavaScript avec une extension .js ou .jsm.

-

La manière la plus simple pour des extensions et applications XUL d'ajouter des alias personnalisés est d'enregistrer un alias dans le manifeste chrome à l'aide d'une ligne comme celle-ci :

-
resource nomalias uri/vers/fichiers/
-
-

Des alias personnalisés peuvent également être ajoutés programmatiquement au protocole resource. Par exemple:

-
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
-                          .getService(Components.interfaces.nsIIOService);
-var resProt = ioService.getProtocolHandler("resource")
-                       .QueryInterface(Components.interfaces.nsIResProtocolHandler);
-
-var aliasFile = Components.classes["@mozilla.org/file/local;1"]
-                          .createInstance(Components.interfaces.nsILocalFile);
-aliasFile.initWithPath("/some/absolute/path");
-
-var aliasURI = ioService.newFileURI(aliasFile);
-resProt.setSubstitution("myalias", aliasURI);
-
-// en supposant que les modules de code sont dans le dossier alias lui-même, pas un sous-dossier
-Components.utils.import("resource://myalias/file.jsm");
-
-// ...
-
-

 

-

{{ languages( { "en": "en/Using_JavaScript_code_modules", "es": "es/Usando_m\u00f3dulos_de_c\u00f3digo_JavaScript", "ja": "ja/Using_JavaScript_code_modules", "pl": "pl/Zastosowanie_modu\u0142\u00f3w_JavaScript" } ) }}

diff --git a/files/fr/venkman/index.html b/files/fr/venkman/index.html deleted file mode 100644 index e7235cdfa0..0000000000 --- a/files/fr/venkman/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Venkman -slug: Venkman -tags: - - Extensions - - JavaScript - - Tools -translation_of: Archive/Mozilla/Venkman ---- -

 

-

Venkman est un debogueur JavaScript basé sur Mozilla.

-

Articles de MDC sur Venkman

- - -

Télécharger Venkman

- -

Ressources

- - -

Catégories

-

Interwiki Language Links

diff --git a/files/fr/web/accessibility/at-apis/at-spi/index.html b/files/fr/web/accessibility/at-apis/at-spi/index.html deleted file mode 100644 index d8aa1d4763..0000000000 --- a/files/fr/web/accessibility/at-apis/at-spi/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: AT-SPI -slug: Web/Accessibility/AT-APIs/AT-SPI -tags: - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Tech/Accessibility/AT-APIs/AT-SPI ---- -{{wiki.localize('System.API.page-generated-for-subpage')}} diff --git a/files/fr/web/accessibility/at-apis/at-spi/interfaces_at-spi_prises_en_charge/index.html b/files/fr/web/accessibility/at-apis/at-spi/interfaces_at-spi_prises_en_charge/index.html deleted file mode 100644 index 49a3682b84..0000000000 --- a/files/fr/web/accessibility/at-apis/at-spi/interfaces_at-spi_prises_en_charge/index.html +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: Interfaces AT-SPI prises en charge -slug: Web/Accessibility/AT-APIs/AT-SPI/Interfaces_AT-SPI_prises_en_charge -tags: - - API - - AT_APIs - - AT_SPI - - Accessibilité -translation_of: Mozilla/Tech/Accessibility/AT-APIs/AT-SPI/Interfaces ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InterfacePrise en chargeNotes
AccessibleOui -

Voir les attributs objets pris en charge

-
ActionOuiToutes les méthodes
ApplicationOuiToutes les méthodes
ComponentOuiToutes les méthodes
DesktopNon
DocumentOuiToutes les méthodes ?
EditableTextOuiToutes les méthodes
EventOui -

Voir les événements pris en charge

-
HyperlinkOuiN’importe quel objet inclus dans un texte est considéré comme un hyperlien !
HypertextOuiN’importe quel texte comportant un objet est considéré comme un hyperlien !
ImageNonROLE_IMAGE est pris en charge et cela suffit
LoginHelperNon
RegistryNon ?
RelationOui -

Voir les relations pris en charge

-
RoleOui -

Voir les rôles pris en charge

-
SelectionOuiPas encore pris en charge pour le texte
SelectorNon
StateOui -

Voir les états pris en charge

-
StreamableContentNonPeut s’appliquer aux greffons, mais probablement pas aux objets rendus par Gecko
TableOuiDe plus, l’objet se voit attribuer layout-guess="true" quand Gecko pense que le tableau est pour un layout et non pour des données
TextOui -

Voir les attributs de texte pris en charge

-
ValueOui
diff --git a/files/fr/web/accessibility/at-apis/gecko/index.html b/files/fr/web/accessibility/at-apis/gecko/index.html deleted file mode 100644 index 9cd605e79d..0000000000 --- a/files/fr/web/accessibility/at-apis/gecko/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Gecko -slug: Web/Accessibility/AT-APIs/Gecko -tags: - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Tech/Accessibility/AT-APIs/Gecko ---- -{{wiki.localize('System.API.page-generated-for-subpage')}} diff --git a/files/fr/web/accessibility/at-apis/gecko/roles/index.html b/files/fr/web/accessibility/at-apis/gecko/roles/index.html deleted file mode 100644 index 7aac23cef2..0000000000 --- a/files/fr/web/accessibility/at-apis/gecko/roles/index.html +++ /dev/null @@ -1,736 +0,0 @@ ---- -title: Rôles Gecko -slug: Web/Accessibility/AT-APIs/Gecko/Roles -tags: - - AT_APIs - - Accessibilité - - NeedsTranslation - - Reference -translation_of: Mozilla/Tech/Accessibility/AT-APIs/Gecko/Roles ---- -

« AT APIs Support Page

-

This page offers a list of accessible roles used in Gecko. Role constants are defined in the nsIAccessibleRole interface.

-
-
- ROLE_NOTHING
-
- Used when the accessible item doesn't have a strongly defined role.
-
-
-
- ROLE_TITLEBAR
-
- Represents a title or caption bar for a window. Used by MSAA only, this is supported automatically by Microsoft Windows.
-
-
-
- ROLE_MENUBAR
-
- Represents the menu bar (positioned beneath the title bar of a window on most platforms or at the top of the screen on Mac OS X) from which menus are selected by the user.
-
-
-
- ROLE_SCROLLBAR
-
- Represents a vertical or horizontal scroll bar, which is part of the client area or used in a control.
-
-
-
- ROLE_GRIP
-
- Represents a special mouse pointer, which allows a user to manipulate user interface elements such as windows. For example, a user clicks and drags a sizing grip in the lower-right corner of a window to resize it
-
-
-
- ROLE_SOUND
-
- Represents a system sound, which is associated with various system events.
-
-
-
- ROLE_CURSOR
-
- Represents the system mouse pointer.
-
-
-
- ROLE_CARET
-
- Represents the system caret.
-
-
-
- ROLE_ALERT
-
- Represents an alert or a condition that a user should be notified about. Assistive Technologies typically respond to the role by reading the entire onscreen contents of containers advertising this role. Should be used for warning dialogs, etc.
-
-
-
- ROLE_WINDOW
-
- Represents the window frame, which contains child objects such as a title bar, client, and other objects contained in a window. The role is supported automatically by Microsoft Windows.
-
-
-
- ROLE_INTERNAL_FRAME
-
- A sub-document.
-
-
-
- ROLE_MENUPOPUP
-
- Represents a menu, which presents a list of options from which the user can make a selection to perform an action.
-
-
-
- ROLE_MENUITEM
-
- Represents a menu item, which is an entry in a menu that a user can choose to carry out a command, select an option.
-
-
-
- ROLE_TOOLTIP
-
- Represents a tooltip that provides helpful hints; this is generally displayed at the mouse cursor position.
-
-
-
- ROLE_APPLICATION
-
- Represents a main window for an application.
-
-
-
- ROLE_DOCUMENT
-
- Represents a document window. A document window is always contained within an application window.
-
-
-
- ROLE_PANE
-
- Represents a pane within a frame or document window. Users can navigate between panes and within the contents of the current pane, but cannot navigate between items in different panes. Thus, panes represent a level of grouping lower than frame windows or documents, but above individual controls.
-
-
-
- ROLE_CHART
-
- Represents a graphical image used to represent data.
-
-
-
- ROLE_DIALOG
-
- Represents a dialog box or message box.
-
-
-
- ROLE_BORDER
-
- Represents a window border.
-
-
-
- ROLE_GROUPING
-
- Logically groups other objects.
-
-
-
- ROLE_SEPARATOR
-
- Used to visually divide a space into two regions, such as a separator menu item or a bar that divides split panes within a window.
-
-
-
- ROLE_TOOLBAR
-
- Represents a toolbar, which is a grouping of controls (push buttons or toggle buttons) that provides easy access to frequently used features.
-
-
-
- ROLE_STATUSBAR
-
- Represents a status bar, which is an area at the bottom of a window that displays information about the current operation, state of the application, or selected object. The status bar has multiple fields, which display different kinds of information.
-
-
-
- ROLE_TABLE
-
- Represents a table that contains rows and columns of cells, and optionally, row headers and column headers.
-
-
-
- ROLE_COLUMNHEADER
-
- Represents a column header, providing a visual label for a column in a table.
-
-
-
- ROLE_ROWHEADER
-
- Represents a row header, which provides a visual label for a table row.
-
-
-
- ROLE_COLUMN
-
- Represents a column of cells within a table.
-
-
-
- ROLE_ROW
-
- Represents a row of cells within a table.
-
-
-
- ROLE_CELL
-
- Represents a cell within a table.
-
-
-
- ROLE_LINK
-
- Represents a link to something else. This object might look like text or a graphic, but it acts like a button.
-
-
-
- ROLE_HELPBALLOON
-
- Displays a Help topic in the form of a ToolTip or Help balloon.
-
-
-
- ROLE_CHARACTER
-
- Represents a cartoon-like graphic object, such as Microsoft Office Assistant, which is displayed to provide help to users of an application.
-
-
-
- ROLE_LIST
-
- Represents a list box, allowing the user to select one or more items.
-
-
-
- ROLE_LISTITEM
-
- Represents an item in a list.
-
-
-
- ROLE_OUTLINE
-
- Represents an outline or tree structure, such as a tree view control, that displays a hierarchical list and allows the user to expand and collapse branches.
-
-
-
- ROLE_OUTLINEITEM
-
- Represents an item in an outline or tree structure.
-
-
-
- ROLE_PAGETAB
-
- Represents a page tab, it is a child of a page tab list.
-
-
-
- ROLE_PROPERTYPAGE
-
- Represents a property sheet.
-
-
-
- ROLE_INDICATOR
-
- Represents an indicator, such as a pointer graphic, that points to the current item.
-
-
-
- ROLE_GRAPHIC
-
- Represents a picture.
-
-
-
- ROLE_STATICTEXT
-
- Represents read-only text, such as labels for other controls or instructions in a dialog box. Static text cannot be modified or selected.
-
-
-
- ROLE_TEXT_LEAF
-
- Represents selectable text that allows edits or is designated read-only.
-
-
-
- ROLE_PUSHBUTTON
-
- Represents a push button control.
-
-
-
- ROLE_CHECKBUTTON
-
- Represents a check box control.
-
-
-
- ROLE_RADIOBUTTON
-
- Represents an option button, also called a radio button. It is one of a group of mutually exclusive options. All objects sharing a single parent that have this attribute are assumed to be part of single mutually exclusive group.
-
-
-
- ROLE_COMBOBOX
-
- Represents a combo box; an edit control with an associated list box that provides a set of predefined choices.
-
-
-
- ROLE_DROPLIST
-
- Represents the calendar control.
-
-
-
- ROLE_PROGRESSBAR
-
- Represents a progress bar, dynamically showing the user the percent complete of an operation in progress.
-
-
-
- ROLE_DIAL
-
- Represents a dial or knob whose purpose is to allow a user to set a value.
-
-
-
- ROLE_HOTKEYFIELD
-
- Represents a hot-key field that allows the user to enter a combination or sequence of keystrokes.
-
-
-
- ROLE_SLIDER
-
- Represents a slider, which allows the user to adjust a setting in given increments between minimum and maximum values.
-
-
-
- ROLE_SPINBUTTON
-
- Represents a spin box, which is a control that allows the user to increment or decrement the value displayed in a separate "buddy" control associated with the spin box.
-
-
-
- ROLE_DIAGRAM
-
- Represents a graphical image used to diagram data.
-
-
-
- ROLE_ANIMATION
-
- Represents an animation control, which contains content that changes over time, such as a control that displays a series of bitmap frames.
-
-
-
- ROLE_EQUATION
-
- Represents a mathematical equation. It is used by MATHML.
-
-
-
- ROLE_BUTTONDROPDOWN
-
- Represents a button that drops down a list of items.
-
-
-
- ROLE_BUTTONMENU
-
- Represents a button that drops down a menu.
-
-
-
- ROLE_BUTTONDROPDOWNGRID
-
- Represents a button that drops down a grid.
-
-
-
- ROLE_WHITESPACE
-
- Represents blank space between other objects.
-
-
-
- ROLE_PAGETABLIST
-
- Represents a container of page tab controls.
-
-
-
- ROLE_CLOCK
-
- Represents a control that displays time.
-
-
-
- ROLE_SPLITBUTTON
-
- Represents a button on a toolbar that has a drop-down list icon directly adjacent to the button.
-
-
-
- ROLE_IPADDRESS
-
- Represents an edit control designed for an Internet Protocol (IP) address. The edit control is divided into sections for the different parts of the IP address.
-
-
-
- ROLE_ACCEL_LABEL
-
- Represents a label control that has an accelerator.
-
-
-
- ROLE_ARROW
-
- Represents an arrow in one of the four cardinal directions.
-
-
-
- ROLE_CANVAS
-
- Represents a control that can be drawn into and is used to trap events.
-
-
-
- ROLE_CHECK_MENU_ITEM
-
- Represents a menu item with a check box.
-
-
-
- ROLE_COLOR_CHOOSER
-
- Represents a specialized dialog that lets the user choose a color.
-
-
-
- ROLE_DATE_EDITOR
-
- Represents control whose purpose is to allow a user to edit a date.
-
-
-
- ROLE_DESKTOP_ICON
-
- An iconified internal frame in an ROLE_DESKTOP_PANE.
-
-
-
- ROLE_DESKTOP_FRAME
-
- A desktop pane. A pane that supports internal frames and iconified versions of those internal frames.
-
-
-
- ROLE_DIRECTORY_PANE
-
- A directory pane. A pane that allows the user to navigate through and select the contents of a directory. May be used by a file chooser.
-
-
-
- ROLE_FILE_CHOOSER
-
- A file chooser. A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. May use the directory pane to show the contents of a directory.
-
-
-
- ROLE_FONT_CHOOSER
-
- A font chooser. A font chooser is a component that lets the user pick various attributes for fonts.
-
-
-
- ROLE_CHROME_WINDOW
-
- Frame role. A top level window with a title bar, border, menu bar, etc. It is often used as the primary window for an application.
-
-
-
- ROLE_GLASS_PANE
-
- A glass pane. A pane that is guaranteed to be painted on top of all panes beneath it.
-
-
-
- ROLE_HTML_CONTAINER
-
- A document container for HTML, whose children represent the document content.
-
-
-
- ROLE_ICON
-
- A small fixed size picture, typically used to decorate components.
-
-
-
- ROLE_LABEL
-
- Presents an icon or short string in an interface.
-
-
-
- ROLE_LAYERED_PANE
-
- A layered pane. A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. This is usually the pane that holds the menu bar as well as the pane that contains most of the visual components in a window.
-
-
-
- ROLE_OPTION_PANE
-
- A specialized pane whose primary use is inside a dialog.
-
-
-
- ROLE_PASSWORD_TEXT
-
- A text object uses for passwords, or other places where the text content is not shown visibly to the user.
-
-
-
- ROLE_POPUP_MENU
-
- A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices.
-
-
-
- ROLE_RADIO_MENU_ITEM
-
- A radio button that is a menu item.
-
-
-
- ROLE_ROOT_PANE
-
- A root pane. A specialized pane that has a glass pane and a layered pane as its children. Its children can include scroll bars and a viewport.
-
-
-
- ROLE_SCROLL_PANE
-
- A scroll pane. An object that allows a user to incrementally view a large amount of information.
-
-
-
- ROLE_SPLIT_PANE
-
- A split pane. A specialized panel that presents two other panels at the same time. Between the two panels is a divider the user can manipulate to make one panel larger and the other panel smaller.
-
-
-
- ROLE_TABLE_COLUMN_HEADER
-
- The header for a column of a table.
-
-
-
- ROLE_TABLE_ROW_HEADER
-
- The header for a row of a table.
-
-
-
- ROLE_TEAR_OFF_MENU_ITEM
-
- A menu item used to tear off and reattach its menu.
-
-
-
- ROLE_TERMINAL
-
- Represents an accessible terminal.
-
-
-
- ROLE_TEXT_CONTAINER
-
- Collection of objects that constitute a logical text entity.
-
-
-
- ROLE_TOGGLE_BUTTON
-
- A toggle button. A specialized push button that can be checked or unchecked, but does not provide a separate indicator for the current state.
-
-
-
- ROLE_TREE_TABLE
-
- Representas a control that is capable of expanding and collapsing rows as well as showing multiple columns of data.
-
-
-
- ROLE_VIEWPORT
-
- A viewport. An object usually used in a scroll pane. It represents the portion of the entire data that the user can see. As the user manipulates the scroll bars, the contents of the viewport can change.
-
-
-
- ROLE_HEADER
-
- Header of a document page.
-
-
-
- ROLE_FOOTER
-
- Footer of a document page.
-
-
-
- ROLE_PARAGRAPH
-
- A paragraph of text.
-
-
-
- ROLE_RULER
-
- A ruler such as those used in word processors.
-
-
-
- ROLE_AUTOCOMPLETE
-
- A text entry having dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry.
-
-
-
- ROLE_EDITBAR
-
- An editable text object in a toolbar.
-
-
-
- ROLE_ENTRY
-
- An control whose textual content may be entered or modified by the user.
-
-
-
- ROLE_CAPTION
-
- A caption describing another object.
-
-
-
- ROLE_DOCUMENT_FRAME
-
- A visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface.
-
-
-
- ROLE_HEADING
-
- Heading.
-
-
-
- ROLE_PAGE
-
- An object representing a page of document content. It is used in documents which are accessed by the user on a page by page basis.
-
-
-
- ROLE_SECTION
-
- A container of document content.
-
-
-
- ROLE_REDUNDANT_OBJECT
-
- An object which is redundant with another object in the accessible hierarchy. ATs typically ignore objects with this role.
-
-
-
- ROLE_FORM
-
- A container of form controls.
-
-
-
- ROLE_IME
-
- An object which is used to allow input of characters not found on a keyboard, such as the input of Chinese characters on a Western keyboard.
-
-
-
- ROLE_APP_ROOT
-
-  ???
-
-
-
- ROLE_PARENT_MENUITEM
-
- Represents a menu item, which is an entry in a menu that a user can choose to display another menu.
-
-
-
- ROLE_CALENDAR
-
- A calendar that allows the user to select a date.
-
-
-
- ROLE_COMBOBOX_LIST
-
- A list of items that is shown by combobox.
-
-
-
- ROLE_COMBOBOX_OPTION
-
- A item of list that is shown by combobox
-
-
-
- ROLE_IMAGE_MAP
-
- An image map -- has child links representing the areas
-
-
-
- ROLE_OPTION
-
- An option in a listbox
-
-
-
- ROLE_RICH_OPTION
-
- A rich option in a listbox, it can have other widgets as children
-
-
-
- ROLE_LISTBOX
-
- A list of options
-
-
-

Editor's note: Use template ROLE_ to get reference on accessible role. It looks like ROLE_MENUITEM.

-
-

 

diff --git a/files/fr/web/accessibility/at-apis/gecko/roles/role_alert/index.html b/files/fr/web/accessibility/at-apis/gecko/roles/role_alert/index.html deleted file mode 100644 index 0a7b46f960..0000000000 --- a/files/fr/web/accessibility/at-apis/gecko/roles/role_alert/index.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: ROLE_ALERT -slug: Web/Accessibility/AT-APIs/Gecko/Roles/ROLE_ALERT -tags: - - AT_APIs - - Accessibilité - - Reference - - Référence(2) - - Rôle - - À relire -translation_of: Mozilla/Tech/Accessibility/AT-APIs/Gecko/Roles/ROLE_ALERT ---- -

« Rôles Gecko Page

- -

Représente une alerte ou une condition qui doit être notifiée à l’utilisateur. Les technologies d’assistance répondent généralement au rôle en lisant l’intégralité des contenus affichés dans les conteneurs possédant ce rôle. Peut être utilisé pour les boîtes de dialogue d’alerte, etc.

- -

Associé à

- - - -

Événements

- - - -

Utilisé par

- - - -

diff --git a/files/fr/web/accessibility/at-apis/gecko/roles/role_password_text/index.html b/files/fr/web/accessibility/at-apis/gecko/roles/role_password_text/index.html deleted file mode 100644 index a3eaacc6b8..0000000000 --- a/files/fr/web/accessibility/at-apis/gecko/roles/role_password_text/index.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: ROLE PASSWORD TEXT -slug: Web/Accessibility/AT-APIs/Gecko/Roles/ROLE_PASSWORD_TEXT -translation_of: Mozilla/Tech/Accessibility/AT-APIs/Gecko/Roles/ROLE_PASSWORD_TEXT ---- -

 

- -

« Gecko Roles Page

- -

Description

- -

Un objet texte utilise pour les mots de passe ou d'autres endroits où le contenu du texte n'est pas affiché de manière visible pour l'utilisateur.

- -

Orienté vers

- - - -

Utilisé par

- - diff --git a/files/fr/web/accessibility/at-apis/index.html b/files/fr/web/accessibility/at-apis/index.html deleted file mode 100644 index 86c5d18b73..0000000000 --- a/files/fr/web/accessibility/at-apis/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: AT APIs Support -slug: Web/Accessibility/AT-APIs -tags: - - AT_APIs - - Accessibility - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Tech/Accessibility/AT-APIs ---- -

Introduction

-
Documentation is in progress still. But in the meantime it more up-to-date and contains more details than existed analogues for AT-SPI and MSAA
-

This documentation explains how makers of screen readers, voice dictation packages, onscreen keyboards, magnification software and other assitive technologies can support Gecko-based software. We provide for them the support of these products on Windows, Linux/Unix and OS X platforms.

-

Accessible Gecko

-

Gecko is a rendering engine that Firefox, SeaMonkey, Netscape and yelp use. Gecko can render a variety of content, not just HTML and supports key web standards such as Cascading Style Sheets, Javascript and the W3C DOM. Gecko also handles the users keystrokes and mouse clicks. Gecko is the core architecture that we are adding accessibility to, in order to support basic accessibility in all applications that are based on it.

-

Gecko Based Applications

-

Gecko can be used in two ways to create application:

-

Embedded Clients

-

Embedded clients use Gecko only in the content window, at the moment for HTML and generic XML only. They typically use standard Windows controls for their user interface -- the area outside of the client content window, plus the context menu.

- -

XUL Applications

-

XUL applications make full use of the Gecko architecture, not only for HTML content, but also for the entire user interface. Widgets such as menus, tab panels, tree views and dialogs are provided via an XML language called XUL (eXtensible User-interface Language). None of the user interface contains standard OS controls. This is done to ensure a common look and feel across all supported platforms, and to allow for different skins (appearances). Developing a XUL window is not that different from developing a web page, but the elements available to add widgets are more powerful and designed to be similar to desktop widgets.

-

Examples of XUL applications:

- -

Gecko Version

-

For Firefox and all other Gecko-based products: this documentation applies to up-to-date product builds based on Gecko 1.9.2 -- currently not available on official releases. However most of described features are supported starting from Gecko 1.9.0 (Firefox 3.0). However it's preferable to grab the current build of Firefox or any other Gecko-based product to be up to dated:

- -

Determining if Accessibility is Enabled in a Firefox

-

Accessibility is enabled on Windows and Linux platforms by default. As well you might find helpful the about:accessibilityenabled Firefox extension.

-

Supported AT APIs

-

AT APIs terms

-
Microsoft Active Accessibility (MSAA)
an API devised by Microsoft so that accessibility aids can track what's going on inside the user interface of any software package that supports it. If you seriously need to understand MSAA, you'll need to read the docs on MSDN and play with the sample apps and code that come with MSAA SDK 1.3. (I recommend SDK 1.3 because the MSAA SDK 2.0 doesn't come with the source code to the testing tools. The other differences are not important).
IAccessible2 (IA2)
IAccessible2 is a new accessibility API which complements Microsoft's earlier work on MSAA. This API fills critical accessibility API gaps in the MSAA offering.
Assistive Technology Service Provider Interface (AT-SPI)
an API devised by Sun Microsystems so that accessibility aids can track what's going on inside the user interface of any software package that supports it. If you seriously need to understand AT-SPI, you'll need to read the docs on gnome.org and play with the available sample apps and code, such as at-poke. Please note that the web docs are sometimes out of date, and the latest AT-SPI is available on CVS.
Universal Access (UA)
Universal Access (UA) is the Apple's accessibility framework.
-

Windows platform

-

We support MSAA (Microsoft Active Accessibility) and IAccessible2 on Windows. Also we expose MS COM interfaces ISimpleDOM* to provide an access to DOM tree.

-

IAccessible2 is a set of interfaces that overlay the MSAA (IAccessible) and DOM (ISimpleDOM*) interface support. Any object that supports IAccessible will also support IAccessible2 and possibly any of the other IA2 interfaces.

-

Linux/Unix platform

-

We support ATK/AT-SPI interfaces on Linux.

-

Mac platform

-

We currently support only a subset of Universal Access. The rest of the Mozilla Universal Access support is in progress.

-

Accessible Web Specifications

-

Gecko exposes the number of XML languages including HTML to AT. Refer to accessible web specifications page to learn what and how markup languages are exposed.

AT APIs Implementation Details

-

Refer to implementation details page to see how Gecko supports interesting AT API. There you will find information how AT API interfaces, roles, states and etc are mapped into Gecko accessibility API and visa versa.

-

Keyboard User Interface and API

-

Fortunately, Gecko uses the standard keyboard API's for each supported platform. The Mozilla keyboard shortcuts for content are similar to what is used in other browsers. Here is a list of Firefox keyboard shortcuts.

-

Test Tools

-

Here you will find a list of tools to test accessibility Gecko-based applications.

- -

Screen Readers

-

Here's a list of screen readers we are oriented to in the first place.

-

Contacts

-

Please discuss accessibility issues on the Mozilla Accessibility groups or on the Mozilla Accessibility IRC channel.

diff --git a/files/fr/web/api/domapplicationsmanager/getall/index.html b/files/fr/web/api/domapplicationsmanager/getall/index.html deleted file mode 100644 index df247c4a1c..0000000000 --- a/files/fr/web/api/domapplicationsmanager/getall/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Apps.mgmt.getAll -slug: Web/API/DomApplicationsManager/getAll -tags: - - API Apps - - Apps -translation_of: Archive/Marketplace/API/DOMApplicationsManager/getAll ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

Résumé

-

Liste toutes les applications installées dans le repertoire de l'utilisateur.

-

Syntaxe

-
window.navigator.mozApps.mgmt.getAll()
-
-

Paramètres

-

Aucun.

-

Renvoie

-

getAll() renvoie un objet pendingGetAll. Il est nécessaire de définir des callbacks pour les propriétés onsuccess et onerror de l'objet renvoyé.

-

pendingGetAll.result sera un tableau d'objet {{ domxref("App") }} qui contient les applications actuellement installées dans le navigateur. pendingGetAll.result sera une liste vide si aucune application n'est installée. onerror sera appelé si un problème grave intervient pendant cette vérification.

-

Cet appel a un accès restreint. navigator.mozApps.mgmt sera null si vous n'avez pas l'autorisation de récuperer les applications.

-

Erreurs

-

L'erreur suivante peut être renvoyée dans DOMRequest.error.

-
-
-
-
- DENIED
-
- Autorisation refusée.
-
-

Sujet en relation

-

API JavaScript Apps

diff --git a/files/fr/web/api/domapplicationsmanager/index.html b/files/fr/web/api/domapplicationsmanager/index.html deleted file mode 100644 index d30d16fa32..0000000000 --- a/files/fr/web/api/domapplicationsmanager/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: DOMApplicationsManager -slug: Web/API/DOMApplicationsManager -tags: - - API -translation_of: Archive/Marketplace/API/DOMApplicationsManager ---- -

{{ ApiRef("Apps") }}

- -

{{ non-standard_header() }}

- -

Provides support for managing, and Open Web apps in a browser. A manager can be accessed via {{domxref("DOMApplicationsRegistry.mgmt", "Navigator.mozApps.mgmt")}}

- -

Property

- -
-
{{domxref("DOMApplicationsManager.oninstall")}}
-
Is an {{domxref("EventManager")}} call when install event is received.
-
{{domxref("DOMApplicationsManager.onuninstall")}}
-
Is an {{domxref("EventManager")}} call when uninstall event is received.
-
{{domxref("DOMApplicationsManager.onenablestatechange")}}
-
Is an {{domxref("EventManager")}} call when enablestatechange event is received.
-
- -

Methods

- -
-
{{ domxref("DOMApplicationsManager.getAll()") }}
-
Returns all applications.
-
- -

Browser compatibility

- -

{{ CompatibilityTable() }}

- -
- - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{ CompatUnknown() }}16.0{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
- -
- - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support{{ CompatUnknown() }}16.0{{ CompatUnknown() }}{{ CompatUnknown() }}{{ CompatUnknown() }}
-
- -

 

diff --git a/files/fr/web/api/navigator/id/index.html b/files/fr/web/api/navigator/id/index.html deleted file mode 100644 index 1da4e224cd..0000000000 --- a/files/fr/web/api/navigator/id/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: navigator.id -slug: Web/API/Navigator/id -tags: - - Navigator - - Persona -translation_of: Archive/Navigator-id ---- -
{{ ApiRef("Persona") }}
- -

Résumé

- -

Le protocole BrowserID définit une nouvelle propriété id dans l'objet {{ domxref ("window.navigator")}}, dans laquelle l'API BrowserID est rendue disponible. Cette API a subi plusieurs importantes modifications. Chaque modification est listée séparément ci-dessous.

- -

Syntaxe

- -
var id = navigator.id
diff --git a/files/fr/web/api/navigator/mozpower/index.html b/files/fr/web/api/navigator/mozpower/index.html deleted file mode 100644 index 5686a8d152..0000000000 --- a/files/fr/web/api/navigator/mozpower/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: window.navigator.mozPower -slug: Web/API/Navigator/mozPower -tags: - - B2G - - Firefox OS - - Non Standard - - Power Management - - WebAPI -translation_of: Archive/B2G_OS/API/Navigator/mozPower ---- -
- {{non-standard_header}} {{B2GOnlyHeader2('certified')}}
-

Résumé

-

Retourne un objet {{domxref("PowerManager")}} que vous pouvez utiliser pour gérer la consommation energétique de l'appareil.

-

Syntaxe

-
var power = window.navigator.mozPower;
-
-

Valeur

-

navigator.mozPower est un objet {{domxref("PowerManager")}}.

-

Spécification

-

Ne fait partie d'aucune spécification actuellement.

-

Voir aussi

- diff --git a/files/fr/web/api/navigator/moztcpsocket/index.html b/files/fr/web/api/navigator/moztcpsocket/index.html deleted file mode 100644 index 82c23e3c4b..0000000000 --- a/files/fr/web/api/navigator/moztcpsocket/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Navigator.mozTCPSocket -slug: Web/API/Navigator/mozTCPSocket -translation_of: Archive/B2G_OS/API/Navigator/mozTCPSocket ---- -

{{APIRef("Firefox OS")}}

- -

{{ non-standard_header() }}

- -

{{ B2GOnlyHeader2('privileged') }}

- -

Résumé

- -

Retourne une objet {{ domxref("TCPSocket") }}, vous pouvez l'utiliser pour ouvrir d'autres sockets.

- -

Syntaxe

- -
var socket = navigator.mozTCPSocket;
-
- -

Valeur

- -

navigator.mozTCPSocket est un objet {{domxref("TCPSocket")}} .

- -

Spécification

- -

Not part of any specification yet; however, this API is discussed at W3C as part of the System Applications Working Group under the TCP and UDP Socket API proposal.

- -

Voir aussi

- - diff --git a/files/fr/web/api/powermanager/index.html b/files/fr/web/api/powermanager/index.html deleted file mode 100644 index 184b07310f..0000000000 --- a/files/fr/web/api/powermanager/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: PowerManager -slug: Web/API/PowerManager -tags: - - API - - B2G - - Firefox OS - - Non-standard - - Power Management - - Reference - - WebAPI -translation_of: Archive/B2G_OS/API/MozPowerManager ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

{{ B2GOnlyHeader2('certified') }}

-

L'interface PowerManager permet de contrôler explicitement les composants de l'appareil consommant de l'énergie.

-

Présentation de l'interface

-
callback wakeLockListener = void (DOMString topic, DOMString state);
-
-interface PowerManager
-{
-  attribute boolean cpuSleepAllowed
-  attribute double screenBrightness
-  attribute boolean screenEnabled
-
-  void addWakeLockListener(wakeLockListener listener);
-  void factoryReset();
-  DOMString getWakeLockState(DOMString topic)
-  void powerOff();
-  void reboot();
-  void removeWakeLockListener(wakeLockListener listener);
-};
-

Propriétés

-
-
- {{domxref("PowerManager.screenEnabled")}}
-
- Cette propriété est un booléen permettant de consulter ou définir l'état de l'écran de l'appareil. true correspond à un écran actif false à un écran éteint.
-
- {{domxref("PowerManager.screenBrightness")}}
-
- Cette propriété définit la luminosité du rétro-éclairage de l'écran sur une échelle de 0 (min) à 1 (max). Définir cet attribut modifie la luminosité de l'écran.
-
- {{domxref("PowerManager.cpuSleepAllowed")}}
-
- Cette propriété détermine si le processeur de l'appareil passera en veille après l'extinction de l'écran. Définir cet attribut à false inhibe la mise en veille du processeur de l'appareil.
-
-

Méthodes

-
-
- {{domxref("PowerManager.addWakeLockListener()")}}
-
- Enregistre un gestionnaire d'événements qui sera appelé à chaque changement d'état par rapport à la mise en veille de la ressource donnée.
-
- {{domxref("PowerManager.factoryReset()")}}
-
- Appeler cette méthode reconfigure l'appareil dans sa configuration usine (toutes les données utilisateurs seront perdues).
-
- {{domxref("PowerManager.getWakeLockState()")}}
-
- Retourne l'état de verrouillage d'une ressource donnée de l'appareil.
-
- {{domxref("PowerManager.powerOff()")}}
-
- Appeler cette méthode éteint l'appareil.
-
- {{domxref("PowerManager.reboot()")}}
-
- Cette méthode éteint l'appareil et le redémarre.
-
- {{domxref("PowerManager.removeWakeLockListener()")}}
-
- Permet de retirer un gestionnaire d'événements défini précédemment avec {{domxref("PowerManager.addWakeLockListener()","addWakeLockListener")}}.
-
-

Exemple

-
var screenTimeout;
-var power = window.navigator.mozPower;
-var powerAction = {
-  unlocked: function suspendDevice() {
-    power.cpuSleepAllowed = true;
-    power.screenEnabled   = false;
-  },
-
-  'locked-background': function shutOffOnlyScreen() {
-    power.cpuSleepAllowed = false;
-    power.screenEnabled   = false;
-  }
-}
-
-function screenLockListener(topic, state) {
-  if ('screen' !== topic) return;
-
-  window.clearTimeout(screenTimeout);
-
-  if (powerAction[state]) {
-    screenTimeout = window.setTimeout(powerAction[state], 3000);
-  }
-}
-
-power.addWakeLockListener(screenLockListener);
-
-

Spécification

-

Cette API ne fait partie d'aucune spécification.

-

Voir aussi

- diff --git a/files/fr/web/api/tcp_socket_api/index.html b/files/fr/web/api/tcp_socket_api/index.html deleted file mode 100644 index c8b06f46c4..0000000000 --- a/files/fr/web/api/tcp_socket_api/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: API TCP Socket -slug: Web/API/TCP_Socket_API -translation_of: Archive/B2G_OS/API/TPC_Socket_API ---- -

{{DefaultAPISidebar("TCP Socket API")}}

- -

{{ non-standard_header() }}

- -

{{ B2GOnlyHeader2('privileged') }}

- -

Résumé

- -

L'API TCPSocket se propose d'ouvrir et d'utiliser une connexion TCP. Cela permet de mettre en œuvre des protocoles de la couche supérieure à TCP comme IMAP, IRC, POP, HTTP, etc., ou même d'en créer de nouveaux pour des besoins spécifiques.

- -

Permission

- -

Pour utiliser cette API, comme pour toutes les API privilégiées, il est nécessaire de demander l'autorisation de l'utiliser dans l'application app manifeste.

- -
"permissions" : {
-  "tcp-socket" : {
-    "description" : "Create TCP sockets and communicate over them."
-  }
-}
- -

Aperçu

- -

Cette API est disponible à travers la propriété {{domxref("Navigator.mozTCPSocket","mozTCPSocket")}} qui est elle-même un objet {{domxref("TCPSocket")}}.

- -

Ouverture d'un socket

- -

L'ouverture d'un socket est fait avec la méthode {{domxref("TCPSocket.open()")}}. Cette méthode peut avoir jusqu'à trois paramètres:

- -
    -
  1. Une chaîne représentant le nom du serveur auquel se connecter (il peut aussi être son adresse IP brute).
  2. -
  3. Un nombre représentant le port TCP à utiliser par la socket (certains protocoles ont un port standard, par exemple 80 pour HTTP, 447 pour SSL, 25 pour SMTP, etc. Les numéros de port au-delà de 1024 ne sont pas assignés à un protocole spécifique et peuvent être utilisés pour d'autres fins.)
  4. -
  5. Un objet optionnel contenant jusqu'à deux paramétres : un booléen nommé useSecureTransport, false par défaut, est nécessaire pour utiliser SSL, ; et une chaîne nommée binaryType permet d'indiquer le type de données récupérées par l'application à travers l'événement {{event("data")}}, avec les valeurs attendues string par défaut ou arraybuffer.
  6. -
- -
var socket = navigator.mozTCPSocket.open('localhost', 80);
- -
-

Note: Seulement les applications certifiées peuvent utiliser un port inférieur à 1024.

-
- -

Ecoute des connexions

- -

L'écoute des connexions se fait avec les méthodes {{domxref("TCPSocket.listen()")}}. Cette méthode prévoit jusqu'à trois paramètres:

- -
    -
  1. Un nombre représentant le port TCP à utiliser pour écouter les connexions.
  2. -
  3. Un objet facultatif spécifiant les détails de la réception. Cet objet attend une propriété appelée binaryType, qui est une chaîne qui peut avoir deux valeurs possibles: "string" ou "ArrayBuffer". Si la valeur est "ArrayBuffer" alors le {{domxref("TCPSocket.send()")}} utilise {{domxref("ArrayBuffer")}} et les données reçues seront également disponible dans ce format.
  4. -
  5. Un nombre représentant la longueur maximale de la file d'attente des connexions en attente.
  6. -
- -
var socket = navigator.mozTCPSocket.listen(8080);
- -
-

Note: Seulement applications certifiées peuvent écouter sur un port inférieur à 1024.

-
- -

Envoi de données

- -

L'envoi de données se fait en utilisant la méthode {{domxref("TCPSocket.send()")}}. Les données envoyées peuvent au format chaîne ou Uint8Array; Cependant, rappelez-vous qu'un socket TCP travail avec les données binaires. Pour cette raison, il est beaucoup plus sûr d'utiliser Uint8Array à la place d'une chaîne lors de l'envoi des données.

- -

Pout protocole TCP, il vaut mieux envoyer 64 Ko maximum de données en même temps. Quand moins de 64kb ont été tamponnés, un appel à la méthode {{domxref("TCPSocket.send()","send")}} retourne true. Si le tampon est plein, la méthode renverra false pour indiquer que l'application devra faire une pause pour vider le tampon. Chaque fois que le tampon est vidé, un événement {{event("drain")}} est déclenché et l'application peut reprendre envoi de données.

- -

Il est possible de connaître exactement la quantité de données en mémoire tampon avec la propriété {{domxref("TCPSocket.bufferedAmount")}} .

- -
function getData() {
-  var data;
-
-  // récupérer les données
-
-  return data;
-}
-
-function pushData() {
-  var data;
-
-  do {
-    data = getData();
-  } while (data != null && socket.send(data));
-}
-
-// Chaque fois que le tampon est vidé
-// Nous essayons à nouveau d'envoyer des données.
-socket.ondrain = pushData;
-
-// Lancer l'envoi de données.
-pushData();
-
- -

Recevoir les données

- -

Chaque fois que le socket reçoit des données de l'hôte, il déclenche un événement {{event("data")}}. Cet événement donnera accès aux données du socket. Le type de données dépend de l'ensemble des options définies lorsque le socket a été ouvert (voir ci-dessus).

- -
socket.ondata = function (event) {
-  if (typeof event.data === 'string') {
-    console.log('Get a string: ' + event.data);
-  } else {
-    console.log('Get a Uint8Array');
-  }
-}
- -

Comme l'événement {{event("data")}} est déclenché autant que nécessaire, il peut parfois être nécessaire d'interrompre le flux de données entrants. À cette fin, l'appel de la méthode {{domxref("TCPSocket.suspend()")}} mettra en pause la lecture des données entrantes et cessera le déclenchement de {{event("data")}}. Il est possible de recommencer la lecture des données en appelant la méthode {{domxref("TCPSocket.resume()")}} .

- -

Fermeture d'un socket

- -

La fermeture d'un socket se fait simplement en utilisant {{domxref("TCPSocket.close()")}}.

- -

Standard

- -

Ne fait partie d'aucune spécification; Toutefois, cette API est discuté au sein du W3C dans le cadre du groupe de travail Applications Système sous la dénomination de RAW sockets.

- -

Voir aussi

- - diff --git a/files/fr/web/api/tcpsocket/index.html b/files/fr/web/api/tcpsocket/index.html deleted file mode 100644 index c0413ef9fc..0000000000 --- a/files/fr/web/api/tcpsocket/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: TCPSocket -slug: Web/API/TCPSocket -translation_of: Archive/B2G_OS/API/TCPSocket ---- -

{{APIRef("Firefox OS")}}

- -

{{ non-standard_header() }}

- -

{{ B2GOnlyHeader2('privileged') }}

- -

Résumé

- -

L'interface TCPSocket permet d'accéder à un socket TCP brut.

- -

Le principal point de cette API d'entrée est la propriété{{domxref("navigator.mozTCPSocket")}} qui est un object TCPSocket.

- -
-

Note: Seulement applications certifiées peuvent accepter des connexions entrantes sur un port en dessous de 1024.

-
- -

Aperçu de l'API

- -
interface TCPSocket{
-  readonly attribute DOMString host;
-  readonly attribute unsigned short port;
-  readonly attribute boolean ssl;
-  readonly attribute unsigned long bufferedAmount;
-  readonly attribute DOMString binaryType;
-  readonly attribute DOMString readyState;
-
-  TCPSocket open(DOMString host, unsigned short port, [object options]);
-  TCPServerSocket listen(unsigned short port, [object options, [unsigned short backlog]]);
-  void upgradeToSecure();
-  void suspend();
-  void resume();
-  void close();
-  boolean send(in jsval data);
-
-  attribute onopen;
-  attribute ondrain;
-  attribute ondata;
-  attribute onerror;
-  attribute onclose;
-};
- -

Propriétés

- -
-
{{domxref("TCPSocket.host")}} {{readonlyinline}}
-
Une chaîne représentant le nom du serveur sur le quel le socket est connecté.
-
{{domxref("TCPSocket.port")}} {{readonlyinline}}
-
Un nombre représentant le port de connexion.
-
{{domxref("TCPSocket.ssl")}} {{readonlyinline}}
-
Une valeur booléenne indiquant si le socket est cryptée avec SSL (true) ou non (false).
-
{{domxref("TCPSocket.bufferedAmount")}} {{readonlyinline}}
-
Le nombre d'octets de données dans le tampon qui ne sont pas encore envoyés.
-
{{domxref("TCPSocket.binaryType")}} {{readonlyinline}}
-
Le type de données utilisé. Valeurs possibles : arraybuffer ou string.
-
{{domxref("TCPSocket.readyState")}} {{readonlyinline}}
-
L'état de socket. Valeurs possibles : connecting, open, closing, ou closed.
-
- -

Gestionnaires d'Evénements

- -
-
{{domxref("TCPSocket.onopen")}}
-
Gestionnaire d'événement {{event("open")}}. Après cet événement, le socket est prêt à envoyer et recevoir des données.
-
{{domxref("TCPSocket.ondrain")}}
-
Gestionnaire pour l'événement {{event("drain")}}. Cet événement est déclenché chaque fois que le tampon de données est vidé.
-
{{domxref("TCPSocket.onerror")}}
-
Gestionnaire pour l'événement {{event("error")}}.
-
{{domxref("TCPSocket.ondata")}}
-
Gestionnaire pour l'événement {{event("data")}}. Cet événement est déclenché chaque fois que les données ont été reçues.
-
{{domxref("TCPSocket.onclose")}}
-
Gestionnaire pour l'événement {{event("close")}}.
-
- -

Méthodes

- -
-
{{domxref("TCPSocket.close()")}}
-
Ferme la connexion.
-
{{domxref("TCPSocket.open()","TCPSocket.open(host, port [, options])")}}
-
Renvoie un nouvel objet connecté TCPSocket aux host donnée et au port donné.
-
{{domxref("TCPSocket.resume()")}}
-
Information sur l'événement data.
-
{{domxref("TCPSocket.send()","TCPSocket.send(data)")}}
-
Données tampons à envoyer sur le réseau.
-
{{domxref("TCPSocket.suspend()")}}
-
Suspend l'événement data.
-
- -

Spécification

- -

Ne fait partie d'aucune spécification; Toutefois, cette API est discuté au sein du W3C dans le cadre du groupe de travail des applications  système sous la dénomination API Socket TCP et UDP (anciennement connu sous le nom Raw Sockets API) .

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/associate/index.html b/files/fr/web/api/wifimanager/associate/index.html deleted file mode 100644 index e19b143cf8..0000000000 --- a/files/fr/web/api/wifimanager/associate/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: WifiManager.associate() -slug: Web/API/WifiManager/associate -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/associate ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -

{{B2GOnlyHeader2('certified')}}

- -

La méthode associate est utilisée pour associer (et connecter) un appareil avec un réseau WiFi donné.

- -

Syntaxe

- -
var request = navigator.mozWifiManager.associate(network);
- -

Paramètres

- -
-
network
-
Un objet réseau fournies par les méthode {{domxref("WifiManager.getNetworks","getNetworks")}} ou {{domxref("WifiManager.getKnownNetworks","getKnownNetworks")}}.
-
- -

Association d'un réseau sécurisé avec un dispositif nécessitant la mise en oeuvre de propriétés supplémentaires sur l'objet network est passé à la méthode:

- - - -

Résultats

- -

Elle renvoie un objet DOMRequest gérant le succès ou l'echec de l'opération. Une opération réussie signifie que le dispositif entre dans le workflow de connexion au réseau fourni. Le succès ou l'échec de la connexion elle-même peuvent être suivis à travers l'événement statuschange en attachant un gestionnaire d'événements à WifiManager.onstatuschange.

- -

Spécification

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/connection/index.html b/files/fr/web/api/wifimanager/connection/index.html deleted file mode 100644 index 928ab6af4e..0000000000 --- a/files/fr/web/api/wifimanager/connection/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: WifiManager.connection -slug: Web/API/WifiManager/connection -tags: - - API - - B2G - - Non-standard - - Propriété - - Reference - - WebAPI - - Wi-Fi -translation_of: Archive/B2G_OS/API/WifiManager/connection ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{B2GOnlyHeader2('certified')}}
- -

La valeur de la propriété connection offre le statut et le réseau actuel utilisé par l'adaptateur WiFi.

- -

Syntaxe

- -
var mac = navigator.mozWifiManager.connection
- -

Valeur

- -

Renvoie un objet avec les propriétés suivantes:

- -
-
status {{readonlyinline}}
-
Une chaîne représentant l'état actuel de la connexion, l'un des disconnected, connecting, associated ou connected (voir {{domxref("MozWifiStatusChangeEvent.status")}} pour plus d'informations sur chacun de ces statuts).
-
network {{readonlyinline}}
-
Un objet network représentant le réseau en cours d'utilisation ou null si l'appareil n'est connecté à aucun réseau (voir {{domxref("WifiManager.getNetworks()")}} pour plus d'informations).
-
- -

Spécifications

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/connectioninformation/index.html b/files/fr/web/api/wifimanager/connectioninformation/index.html deleted file mode 100644 index 0252bb7b15..0000000000 --- a/files/fr/web/api/wifimanager/connectioninformation/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: WifiManager.connectionInformation -slug: Web/API/WifiManager/connectionInformation -tags: - - API - - B2G - - Firefox OS - - Non-standard - - Propriété - - Reference - - WebAPI - - Wi-Fi -translation_of: Archive/B2G_OS/API/WifiManager/connectionInformation ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{B2GOnlyHeader2('certified')}}
- -

La valeur de la propriété connectionInformation fournit des informations supplémentaires sur la connexion en cours.

- -

La valeur de cette propriété est mise à jour chaque fois que l'événement {{event("connectionInfoUpdate")}} est déclenché.

- -

Syntaxe

- -
var info = navigator.mozWifiManager.connectionInformation
- -

Valeur

- -

Retourne un objet avec les propriétés suivantes:

- -
-
signalStrength{{readonlyinline}}
-
Un nombre indiquant la force absolue du signal en dBm .
-
relSignalStrength{{readonlyinline}}
-
Un certain nombre dans l'intervalle [0, 100] indiquant la force relative du signal.
-
LinkSpeed{{readonlyinline}}
-
Un nombre représentant la vitesse de liaison en Mb/s.
-
ipAddress{{readonlyinline}}
-
Une chaîne représentant l'adresse IP de l'appareil dans la notation décimale à point.
-
- -

Spécifications

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/enabled/index.html b/files/fr/web/api/wifimanager/enabled/index.html deleted file mode 100644 index 53f046b621..0000000000 --- a/files/fr/web/api/wifimanager/enabled/index.html +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: WifiManager.enabled -slug: Web/API/WifiManager/enabled -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/enabled ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{ B2GOnlyHeader2('certified') }}
- -

La valeur de la propriété enabled indique si le wifi est activé ( true ) ou désactivé (false).

- -
-

Note : Activer ou désactiver le WiFi ne peut être fait en utilisant les paramètres API pour changer le wifi.enabled réglage. Chaque fois que ce réglage change, l'objet {{domxref("WifiManager")}} enverra un événement {{event("enabled")}} ou {{event("disabled")}} Ces événements peuvent être traitées en utilisant les gestionnaires d'événements {{domxref("WifiManager.onenabled")}} et {{domxref("WifiManager.ondisabled")}}.

-
- -

Syntaxe

- -
var enabled = navigator.mozWifiManager.enabled
- -

Valeur

- -

Retourne un booléen.

- -

Spécifications

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/forget/index.html b/files/fr/web/api/wifimanager/forget/index.html deleted file mode 100644 index a88abba4dc..0000000000 --- a/files/fr/web/api/wifimanager/forget/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: WifiManager.forget() -slug: Web/API/WifiManager/forget -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/forget ---- -
{{APIRef("Firefox OS")}} {{non-standard_header}}
- -
{{B2GOnlyHeader2('certified')}}
- -

La méthode forget est utilisée pour « oublier » un réseau WiFi. Cela permettra d'éliminer le réseau de la liste des réseaux connus et de supprimer tous les paramètres de configuration liés à ce réseau.

- -

Si le dispositif est connecté à ce réseau, il en est déconnecté.

- -

Syntaxe

- -
var request = navigator.mozWifiManager.forget(network);
- -

Paramètres

- -
-
network
-
Un objet réseau fournit par les méthodes {{domxref("WifiManager.getNetworks","getNetworks")}} ou {{domxref("WifiManager.getKnownNetworks","getKnownNetworks")}}.
-
- -

Résultats

- -

Elle renvoie un objet DOMRequest gérant le succès ou l'échec de l'opération.

- -

Spécification

- -

Ne fait pas partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/getknownnetworks/index.html b/files/fr/web/api/wifimanager/getknownnetworks/index.html deleted file mode 100644 index 36f48007d0..0000000000 --- a/files/fr/web/api/wifimanager/getknownnetworks/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: WifiManager.getKnownNetworks() -slug: Web/API/WifiManager/getKnownNetworks -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/getKnownNetworks ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{B2GOnlyHeader2('certified') }}
- -

La méthode getKnownNetworks est utilisée pour récupérer la liste des réseaux WiFi connus, peu importe si ils sont disponibles ou non dans la zone entourant le dispositif. Un réseau connu est tout réseau précédemment associée au dispositif à l'aide de la méthode WifiManager.associate().

- -

Syntaxe

- -
var request = navigator.mozWifiManager.getKnownNetworks();
- -

Returns

- -

Elle retourne un handle DOMRequest de succès ou d'échec. Si l'opération est réussie, result est un Array d'objets network.

- -

Spécification

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/getnetworks/index.html b/files/fr/web/api/wifimanager/getnetworks/index.html deleted file mode 100644 index bdde0246c3..0000000000 --- a/files/fr/web/api/wifimanager/getnetworks/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: WifiManager.getNetworks() -slug: Web/API/WifiManager/getNetworks -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/getNetworks ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{B2GOnlyHeader2('certified')}}
- -

La méthode getNetworks est utilisée pour récupérer de la liste des réseaux WiFi disponibles autour de l'appareil.

- -

Syntaxe

- -
var request = navigator.mozWifiManager.getNetworks();
- -

Résultats

- -

Elle renvoie un handle DOMRequest de succès ou d'échec de l'opération. Si l'opération réussit, result est un Array d'objet {{Anch("Network")}}.

- -

Network

- -

Ce sont des objets JavaScript régulières avec les propriétés suivantes:

- -
-
ssid {{readonlyinline}}
-
Une chaîne représentant le ssid du réseau.
-
bssid{{readonlyinline}}
-
Une chaîne représentant le bssid du réseau.
-
capabilities{{readonlyinline}}
-
Un tableau de chaînes représentant les capacités spéciales du réseau (actuellement, seulement WPS est pris en charge).
-
security{{readonlyinline}}
-
Un tableau de chaînes représentant le modèle du réseau de sécurité (prend actuellement en charge WEP , WPA-PSK et WPA-EAP ).
-
signalStrength{{readonlyinline}}
-
Un nombre indiquant la force absolue du signal en dBm .
-
relSignalStrength{{readonlyinline}}
-
Une valeure dans l'intervalle [0, 100] indiquant la force relative du signal.
-
connected{{readonlyinline}}
-
Un booléen indiquant si l'appareil est connecté à ce réseau.
-
known{{readonlyinline}}
-
Une valeur booléenne indiquant si le réseau est déjà connu par le dispositif (si il a déjà été utilisée).
-
- -

Spécification

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/index.html b/files/fr/web/api/wifimanager/index.html deleted file mode 100644 index 51804c74f8..0000000000 --- a/files/fr/web/api/wifimanager/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: WifiManager -slug: Web/API/WifiManager -translation_of: Archive/B2G_OS/API/WifiManager ---- -

{{APIRef("Firefox OS")}}{{ non-standard_header() }}

- -

{{ B2GOnlyHeader2('certified') }}

- -

Sommaire

- -

Le manager Wifi (WifiManager) donne un accès aux périphriques wifi

- -

Interface

- -
interface WifiManager {
-  readonly attribute boolean enabled;
-  readonly attribute string macAddress;
-  readonly attribute object connection;
-  readonly attribute object connectionInformation;
-
-  attribute nsIDOMEventListener onenabled;
-  attribute nsIDOMEventListener ondisabled;
-  attribute nsIDOMEventListener onstatuschange;
-  attribute nsIDOMEventListener onconnectioninfoupdate;
-  attribute nsIDOMEventListener onstationinfoupdate
-
-  DOMRequest getNetworks();
-  DOMRequest getKnownNetworks();
-  DOMRequest associate(object network);
-  DOMRequest forget(object network);
-  DOMRequest wps(object detail);
-  DOMRequest setPowerSavingMode(boolean enabled);
-  DOMRequest setStaticIpMode(object network, object info)
-};
-
- -

Propriétés

- -
-
{{domxref("WifiManager.enabled")}} {{readonlyinline}}
-
Un booléen qui indique si le wifi est en marche (true) ou pas (false).
-
{{domxref("WifiManager.macAddress")}} {{readonlyinline}}
-
Une chaine de caractères représentant l' adresse MAC de l'adaptateur wifi
-
{{domxref("WifiManager.connection")}} {{readonlyinline}}
-
Un objet donnant des informations a propos de la connexion en cours (statut et réseau en cours d'utilisation).
-
{{domxref("WifiManager.connectionInformation")}} {{readonlyinline}}
-
Un objet donnant des informations supplémentaires a propos de la connexion en cours ou null si le périphérique n'est pas connecté en wifi.
-
- -

Gestion des évènements

- -
-
{{domxref("WifiManager.onenabled")}}
-
Signal {{event("enabled")}} ; Ce signal est déclenché quand le wifi est allumé.
-
{{domxref("WifiManager.ondisabled")}}
-
Signal {{event("disabled")}} ; Ce signal est déclenché quand le wifi est arrêté.
-
{{domxref("WifiManager.onstatuschange")}}
-
Signal {{event("statuschange")}} ; L'objet retourné correspondant à l'évènement est une instance de {{domxref("MozWifiStatusChangeEvent")}}.
-
{{domxref("WifiManager.connectionInfoUpdate")}}
-
{{domxref("WifiManager.onconnectionInfoUpdate")}}
-
{{domxref("WifiManager.onconnectioninfoupdate")}}
-
Signal {{event("connectioninfoupdate")}} ; Déclenché à chaque fois que les informations de connexion changent. L'objet retourné correspondant à l'évènement est une instance de {{domxref("MozWifiConnectionInfoEvent")}}.
-
{{domxref("WifiManager.onstationInfoUpdate")}}
-
{{domxref("WifiManager.onstationinfoupdate")}}
-
TBD
-
- -

Méthodes

- -
-
{{domxref("WifiManager.associate()")}}
-
Permet d'associer (et de connecter) un périphérique avec un réseau donné. Retourne un {{domxref("DOMRequest")}}.
-
{{domxref("WifiManager.forget()")}}
-
permet de créer un périphérique non associé à un réseau donné. Retourne un {{domxref("DOMRequest")}}.
-
{{domxref("WifiManager.getKnownNetworks()")}}
-
Permet de récupérer la liste de tous les réseaux avec lesquels le périphérique est associé. Retourne un {{domxref("DOMRequest")}}.
-
{{domxref("WifiManager.getNetworks()")}}
-
Permet de récupérer la liste de tous les réseaux disponibles dans la zone couverte par le périphérique. Retourne un {{domxref("DOMRequest")}}.
-
{{domxref("WifiManager.setPowerSavingMode()")}}
-
Permet à l'adaptateur wifi d'entrer/de sortir du mode d'enregistrement allumé  "power saving mode". Retourne un {{domxref("DOMRequest")}}.
-
{{domxref("WifiManager.setStaticIpMode()")}}
-
Permet de configurer une adresse IP statique pour le périphérique dans un réseau donné. Retourne un {{domxref("DOMRequest")}}.
-
{{domxref("WifiManager.wps()")}}
-
Permet de connecter le périphérique à un réseau en utilisant le système réseau WPS (si disponible). Retourne un {{domxref("DOMRequest")}}.
-
- -

Spécifications

- -

Il n'y a pas de spécifications pour ce module

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/macaddress/index.html b/files/fr/web/api/wifimanager/macaddress/index.html deleted file mode 100644 index 9c930a0548..0000000000 --- a/files/fr/web/api/wifimanager/macaddress/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: WifiManager.macAddress -slug: Web/API/WifiManager/macAddress -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/macAddress ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{ B2GOnlyHeader2('certified') }}
- -

La valeur de la propriété macAddress est l'adresse MAC fournie par l'adaptateur wifi.

- -

Syntaxe

- -
var mac = navigator.mozWifiManager.macAddress
- -

Valeur

- -

Retourne une chaîne.

- -

Spécification

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/onconnectioninfoupdate/index.html b/files/fr/web/api/wifimanager/onconnectioninfoupdate/index.html deleted file mode 100644 index 887dac48dc..0000000000 --- a/files/fr/web/api/wifimanager/onconnectioninfoupdate/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: WifiManager.onconnectioninfoupdate -slug: Web/API/WifiManager/onconnectioninfoupdate -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/onconnectioninfoupdate ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{B2GOnlyHeader2('certified')}}
- -

Pointe vers un écouteur d'événement pour recevoir l'événement {{event("connectioninfoupdate")}}. Ces événements se produisent lorsque les informations de connexion WiFi de l'appareil change.

- -

Syntaxe

- -
navigator.mozWifiManager.onconnectioninfoupdate = funcRef
- -

funcRef est une fonction à appeler lorsque l'événement {{event("connectioninfoupdate")}} se produit. Cette fonction de rappel reçoit un objet {{domxref("MozWifiConnectionInfoEvent")}} comme premier paramètre.

- -

Spécifications

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/ondisabled/index.html b/files/fr/web/api/wifimanager/ondisabled/index.html deleted file mode 100644 index c853d8d328..0000000000 --- a/files/fr/web/api/wifimanager/ondisabled/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: WifiManager.ondisabled -slug: Web/API/WifiManager/ondisabled -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/ondisabled ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -

{{B2GOnlyHeader2('certified')}}

- -

Pointe sur un écouteur d'événement pour recevoir l'événement {{event("disabled")}}. Cet événement se produit lorsque la WiFi de l'appareil est éteinte.

- -

Syntaxe

- -
navigator.mozWifiManager.ondisabled = funcRef
- -

funcRef est une fonction à appeler lorsque l'événement {{event("disabled")}} se produit.

- -

Spécifications

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/onenabled/index.html b/files/fr/web/api/wifimanager/onenabled/index.html deleted file mode 100644 index b0ca2ac382..0000000000 --- a/files/fr/web/api/wifimanager/onenabled/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: WifiManager.onenabled -slug: Web/API/WifiManager/onenabled -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/onenabled ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{ B2GOnlyHeader2('certified') }}
- -

Pointe sur un écouteur d'événement pour recevoir l'événement {{event("enabled")}}. Cet événement se produit lorsque la WiFi de l'appareil est allumée.

- -

Syntaxe

- -
navigator.mozWifiManager.onenabled = funcRef
- -

funcRef est une fonction à appeler lorsque l'événement {{event("enabled")}} se produit.

- -

Spécifications

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/onstatuschange/index.html b/files/fr/web/api/wifimanager/onstatuschange/index.html deleted file mode 100644 index fa27f2742b..0000000000 --- a/files/fr/web/api/wifimanager/onstatuschange/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: WifiManager.onstatuschange -slug: Web/API/WifiManager/onstatuschange -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/onstatuschange ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{B2GOnlyHeader2('certified')}}
- -

Pointe sur un écouteur d'événement pour recevoir l'événement {{event("statuschange")}}. Cet événement se produit lorsque la connexion WiFi change d'état.

- -

Syntaxe

- -
navigator.mozWifiManager.onstatuschange = funcRef
- -

funcRef est une fonction à appeler lorsque l'événement {{event("statuschange")}} se produit. Cette fonction de rappel reçoit un objet {{domxref("MozWifiStatusChangeEvent")}} comme premier paramètre.

- -

Spécifications

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/setpowersavingmode/index.html b/files/fr/web/api/wifimanager/setpowersavingmode/index.html deleted file mode 100644 index 5735b5944a..0000000000 --- a/files/fr/web/api/wifimanager/setpowersavingmode/index.html +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: WifiManager.setPowerSavingMode() -slug: Web/API/WifiManager/setPowerSavingMode -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/setPowerSavingMode ---- -
{{APIRef("Firefox OS")}}{{ non-standard_header() }}
- -
{{B2GOnlyHeader2('certified') }}
- -

La méthode setPowerSavingMode est utilisée pour que l'adaptateur WiFi active ou désactive le mode économie d'énergie.

- -

Syntaxe

- -
var request = navigator.mozWifiManager.setPowerSavingMode(enabled);
- -

Paramètres

- -
-
enabled
-
Un booléen indiquant si le dispositif doit activer (true) ou désactiver (false) le mode économie d'énergie.
-
- -

Résultats

- -

Elle renvoie un handle DOMRequest  qui indique le succès ou l'echec de l'opération.

- -

Spécification

- -

Ne fait partie d'aucune spécification.

- - diff --git a/files/fr/web/api/wifimanager/setstaticipmode/index.html b/files/fr/web/api/wifimanager/setstaticipmode/index.html deleted file mode 100644 index f88e2433eb..0000000000 --- a/files/fr/web/api/wifimanager/setstaticipmode/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: WifiManager.setStaticIpMode() -slug: Web/API/WifiManager/setStaticIpMode -tags: - - API - - B2G - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/setStaticIpMode ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{B2GOnlyHeader2('certified')}}
- -

La méthode setStaticIpMod est utilisée pour définir une adresse IP statique ou dynamique pour l'appareil sur un réseau donné (si le réseau dispose d'un serveur DHCP).

- -

Syntaxe

- -
var request = navigator.mozWifiManager.setStaticIpMode(param);
- -

Paramètres

- -
-
param
-
Un objet de configuration avec les propriétés suivantes: -
    -
  • enabled : Un booléen demandant si le mode IP statique doit être activé (true) ou désactivé (false). Si il est désactivé et un réseau WiFi DHCP activé, l'appareil obtiendra une adresse IP dynamique.
  • -
  • ipaddr : Une chaîne représentant l'adresse IP de l'appareil dans le format de quad en pointillés.
  • -
  • proxy : Une chaîne représentant l'adresse du serveur proxy (le cas échéant, sinon une chaîne vide).
  • -
  • maskLength : Un nombre représentant la longueur du masque réseau.
  • -
  • gateway : Une chaîne représentant une adresse de passerelle (le cas échéant, sinon une chaîne vide).
  • -
  • dns1 : Une chaîne représentant la première adresse du serveur DNS.
  • -
  • dns2 : Une chaîne représentant la deuxième adresse du serveur DNS.
  • -
-
-
- -

Résultats

- -

Elle renvoie un handle DOMRequest  qui indique le succès ou l'echec de l'opération.

- -

Spécification

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/wifimanager/wps/index.html b/files/fr/web/api/wifimanager/wps/index.html deleted file mode 100644 index b1b232f9a7..0000000000 --- a/files/fr/web/api/wifimanager/wps/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: WifiManager.wps() -slug: Web/API/WifiManager/wps -tags: - - API - - B2G - - Method - - Non Standard - - WebAPI -translation_of: Archive/B2G_OS/API/WifiManager/wps ---- -
{{APIRef("Firefox OS")}}{{non-standard_header}}
- -
{{ B2GOnlyHeader2('certified') }}
- -

La méthode wps est utilisée pour traiter un handle de connexionWPS avec les réseaux qui soutiennent cette fonctionnalité.

- -

Un réseau suportant une connexion WPS à la chaîne WPS disponible dans le tableau {{domxref("WifiManager.capabilities")}}.

- -

Une connexion WPS est un moyen simple de connecter un périphérique à un réseau. Il nécessite moins de connaissances de l'utilisateur et rend les choses plus faciles pour lui.Fondamentalement, quand un utilisateur a un routeur WiFi compatible WPS, il peut choisir cette méthode pour connecter son appareil sur le réseau au lieu de saisir son mot de passe.

- -

Il existe deux façons de lancer une connexion WPS:

- - - -

Syntaxe

- -
var request = navigator.mozWifiManager.wps(param);
- -

Paramètres

- -
-
param
-
Un objet de configuration avec les propriétés suivantes : -
    -
  • method : l'une des chaînes suivantes : -
      -
    • cancel pour annuler une tentative de connexion WPS.
    • -
    • pbs pour tenter une connexion en appuyant sur ​​le bouton physique du routeur WiFi.
    • -
    • pin pour tenter une connexion avec un code pin.
    • -
    -
  • -
  • bssid : une chaîne représentant le bssid du réseau pour se connecter. Il est obligatoire si la propriété method est définie à pin .
  • -
  • pin : une chaîne représentant le code pin saisi par l'utilisateur. Il est obligatoire si la propriété method est définie à pin.
  • -
-
-
- -

Résultats

- -

Elle renvoie un handle DOMRequestqui indique le succès ou l'échec de l'opération.

- -

Lorsque la propriété method est définie à pin, si l'opération est réussie et si l'utilisateur doit saisir un numéro d'identification sur son interface de routeur WiFi, le résultat de la requête est une chaîne représentant le code PIN.

- -

Exemple

- -
var wifi = navigator.mozWifiManager;
-
-var request = wifi.getNetworks();
-
-request.onsuccess = function () {
-  // Utilisons du premier réseau.
-  var network = this.result[0];
-  var isWPSEnabled = network.capabilities.indexOf('WPS') > -1;
-  var wpsRequest;
-
-  if (isWPSEnabled) {
-    if (comfirm('Voulez-vous utiliser le bouton poussoir pour connecter votre appareil ?')) {
-      wpsRequest = wifi.wps({
-        method : 'pbs'
-      });
-    }
-
-    else if (confirm('Voulez-vous saisir un numéro de code PIN sur votre interface de routeur wifi ?')){
-      wpsRequest = wifi.wps({
-        method : 'pin',
-        bssid: network.bssid
-      })
-
-      wpsRequest.onsuccess = function () {
-        alert('Veuillez saisir ce numéro sur votre interface de routeur WiFi:' + this.result)
-      }
-    }
-
-    else {
-      wpsRequest = wifi.wps({
-        method : 'pin',
-        bssid: network.bssid
-        pin: prompt('Veuillez indiquer le code PIN de votre routeur WiFi.')
-      })
-    }
-  }
-}
- -

Spécification

- -

Ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/api/window/importdialog/index.html b/files/fr/web/api/window/importdialog/index.html deleted file mode 100644 index 8b870f39d6..0000000000 --- a/files/fr/web/api/window/importdialog/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: window.importDialog -slug: Web/API/Window/importDialog -tags: - - Traduction_à_relire -translation_of: Archive/Web/Window.importDialog ---- -

{{ ApiRef() }}

-
- Cette page vient d'être traduite, mais elle a besoin d'un relecteur différent du traducteur. Pensez également à toujours vérifier le contenu avec sa toute dernière version en anglais.
-

Résumé

-

Puisque ouvrir une nouvelle fenêtre sur une plateforme mobile n'est pas vraiment approprié, l'équipe de Firefox Mobile a créé la méthode importDialog() pour remplacer {{ domxref("window.openDialog()") }}. Au lieu d'ouvrir une nouvelle fenêtre, elle fusionne l'élément XUL dialog spécifié avec la fenêtre principale.

-

Syntaxe

-
newDialog = importDialog(aParent, aSrc, aArguments)
-
-
-
- newDialog
-
- La fenêtre ouverte.
-
- aParent
-
- L'élément parent de la boîte de dialogue. Peut être null.
-
- aSrc
-
- L'URL chrome vers la boîte de dialogue XUL.
-
- aArguments
-
- Un objet JavaScript contenant les données à passer à la boîte de dialogue.
-
-

Exemple

-
newDialog = importDialog(aParent, aSrc, aArguments)
-
-
-
- newDialog
-
- La fenêtre ouverte
-
- aParent
-
- La parent de la fenêtre, éventuellement null.
-
- aSrc
-
- L'URL chrome  de la boîte de dialogue XUL.
-
- aArguments
-
- Un objet JavaScript contenant les données à transférer à la boîte de dialogue.
-
-

Notes

-

Le XUL passé à la méthode importDialog() est très similaire à celui passé à la méthode {{ domxref("window.openDialog()") }}, avec cependant quelques limitations et mises en garde :

- -

Le XUL est fusionné avec la fenêtre spécifiée, un peu à la manière d'un overlay. En conséquence, des conflits entre les identifiants (attributs id) et les scripts JavaScript sont possibles, comme avec les overlays. Prenez cela en considération.

-

Spécification

-

{{ DOM0() }}

-

{{ languages( { "en": "en/DOM/window.importDialog", "fr": "fr/DOM/window.importDialog" } ) }}

diff --git a/files/fr/web/apps/design/building_blocks/buton/index.html b/files/fr/web/apps/design/building_blocks/buton/index.html deleted file mode 100644 index 1ff0416084..0000000000 --- a/files/fr/web/apps/design/building_blocks/buton/index.html +++ /dev/null @@ -1,231 +0,0 @@ ---- -title: Bouton -slug: Web/Apps/Design/Building_Blocks/Buton -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_blocks/1.x/Button ---- -

Effectue une action quand touché par l'utilisateur. Ce sont des objets de l'interface utilisateur hautements flexibles qui ont une grande variété de styles. Consultez le guide de codage pour la façon de mettre en œuvre des boutons qui ressemblent à ceux décrits ici.

-

Caractéristiques

- -

Il y a différents types de boutons :

-
-
- Boutons d'action
-
- Utilisés lorsqu'il n'y a que quelques actions et qu'une liste n'est pas nécessaire. Le bouton d'action principal utilise une couleur spéciale pour indiquer que c'est la première option.
-
- Boutons de listes
-
- Utilisés lors de l'affichage d'une liste d'actions, ou pour déclencher l'affichage d'un sélecteur de valeur.
-
- Boutons de champ de saisie
-
- Utilisés pour effectuer des actions avec les champs de saisie.
-
- Boutons spéciaux/personnalisés
-
- Utilisés pour fournir des actions spécifiques, comme l'enregistrement, la numérotation, etc.
-
-

Captures d'écran

-

Voici quelques exemples visuels de ce à quoi les boutons devraient ressembler. N'oubliez pas que vous pouvez utiliser les feuilles de style et des ressources d'images fournies dans le guide de codage pour les implémenter.

-

Boutons d'action

-

Utilisés lorsqu'il n'y a que quelques actions et qu'une liste n'est pas nécessaire. Le bouton d'action principal utilise une couleur spéciale pour indiquer que c'est la première option.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  Première actionSeconde actionSupprimer
Normal
Pressé
Désactivé
-

Sur un fond sombre, les boutons d'action ont une apparence spéciale, comme ci-dessous.

- - - - - - - - - - - - - - - -
 Première actionSeconde action
Désactivé
-

Boutons de liste

-

Utilisés lors de l'affichage d'une liste d'actions, ou pour déclencher l'affichage d'un sélecteur de valeur.

-

Déclencheurs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Déclencher une action dans la vue actuelleDéclencher une action dans une nouvelle vue Afficher un sélecteur de valeur
Normal
Pressé
Désactivé
-

Sélecteur de valeur

-

Une fois que le sélecteur de valeur a été ouvert, vous aurez besoin d'au moins un bouton sur le panneau de sélection de valeur pour annuler ledit sélecteur de valeur. Ces boutons doivent ressembler à ce qui suit:

- - - - - - - - - - - - - - - -
NormalPresséDésactivé
-

Boutons de champ de saisie

-

Les boutons de champ de saisie sont des boutons associés à un champ de saisie, qui, lorsqu'il est pressé, effectuent une action liée à ce champ de saisie.

- - - - - - - - - - - - - - - -
NormalPresséDésactivé
-

Boutons spéciaux

-

Les boutons spéciaux sont des boutons de style visuels avec des icônes, utilisés à des fins spéciales, telles que l'exploitation de la caméra de l'appareil, répondre et raccrocher le téléphone, et l'activation de la numérotation au clavier. Vous pouvez bien sûr trouver d'autres utilisations pour ce style de bouton.

-

Boutons photo

-

Ces butons n'ont pas d'état désactivé, vous n'avez tout simplement pas besoin de les afficher si la prise de photos n'est pas disponible.

- - - - - - - - - - - - - - - - - - - - - - - -
 Enregistrement vidéoArrêter l'enregistrement vidéoPrendre photo
Normal
Pressé
-

Boutons téléphone

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
 RépondreRaccrocherMasquer le clavier
Normal
Pressé
Désactivé
-

Boutons personnalisés

-

Voici des exemples boutons personnalisés, ici pour ajouter un contact.

- - - - - - - - - - - - - - - -
Normal
Pressé
Désactivé
-

Voir aussi

- diff --git a/files/fr/web/apps/design/building_blocks/confirmation/index.html b/files/fr/web/apps/design/building_blocks/confirmation/index.html deleted file mode 100644 index 17d6db6553..0000000000 --- a/files/fr/web/apps/design/building_blocks/confirmation/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Confirmation -slug: Web/Apps/Design/Building_Blocks/Confirmation -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_blocks/1.x/Confirmation ---- -

Un message de confirmation demande à l'utilisateur d'effectuer ou de confirmer une action, par exemple répondre à un message système qui demande à l'utilisateur de redémarrer l'appareil après un changement de carte SIM, ou demander à l'utilisateur d'accorder ou de refuser l'autorisation d'exécuter une tâche. Consultez le guide de codage pour la façon de mettre en œuvre ces invites dans votre application.

-

Caractéristiques

- -

Captures d'écran

-

Voici quelques exemples de ce à quoi diverses invites de confirmation peuvent ressembler.

- - - - - - - - - - - -
-

Apparence par défaut

-

- Ici, un {{HTMLElement("h1")}} est utilisé pour créer la « confirmation » du titre.. La classe delete est appliquée au bouton Supprimer pour l'afficher avec l'apparence d'un bouton Supprimer
-

Avec un contenu de corps

-

-

Dans cet exemple, un corps plus complexe est utilisé, avec une image et son style. La classe « recommandé » est utilisée pour indiquer que le bouton « Action » est le bouton qui doit effectuer ladite action.

-
-

Sans titre

-

Cet exemple est exactement comme celui du dessus sauf qu'il n'y a pas de bloc {{HTMLElement("h1")}} pour créer un titre.

-
-

En mode d'édition

-

-
-

Variations

-

Il y a quelques variantes sur le plan des invites de confirmation, comme vous l'avez vu ci-dessus. Les maquettes simplifiées ci-dessous aident à clarifier les composants de l'invite de confirmation, et montrent que vous avez le contrôle sur la mise en page du contenu.

- - - - - - - - - - - -
-

Invite de permission

-

-

Ici, l'icône et le titre sont utilisés pour identifier l'application qui demande l'autorisation, et le genre de permission demandé.

-

Le texte du corps du document doit aller plus en détail sur ce que l'octroi de cette autorisation signifie.

-
-

Invite de confirmation d'action

-

-

Ce message simple confirmation d'action pose une question simple, et ne dispose pas d'un titre.

-
-

Invite de confirmation d'action

-

-

Cet invite de confirmation d'action un peu plus complexe ajoute une icône et un titre.

-
 
-

Interaction

-

Supprimer des  messages

-

Dans cet exemple, une invite de confirmation est utilisée pour demander à l'utilisateur s'il est certain de vouloir supprimer les messages sélectionnés à partir d'une liste de courriels. Appuyer sur le bouton « Supprimer » affiche l'invite ; la suppression se produit uniquement si l'utilisateur appuie sur le bouton « Supprimer » dans l'invite de confirmation.

-

-

Confirmer une demande de permission

-

Dans cet exemple, l'utilisateur ouvre pour la première fois une application qui a besoin de l'autorisation d'utiliser le service de géolocalisation. Comme l'application nécessite l'autorisation pour fonctionner, il demande immédiatement l'autorisation d'utiliser le service de localisation. Lorsque l'utilisateur ferme l'invite en tapant soit « Ne pas autoriser » (qui refuse l'autorisation d'utiliser la géolocalisation) soit « Autoriser » (qui accorde la permission), le message de confirmation se ferme et le choix de l'utilisateur prend effet.

-

-

Notez que cet exemple comporte une case à cocher dans l'invite de confirmation pour enregistrer le choix de l'utilisateur afin que celui-ci ne soit pas demandé à nouveau ultérieurement.

-

Voir aussi

- diff --git a/files/fr/web/apps/design/building_blocks/filtre/index.html b/files/fr/web/apps/design/building_blocks/filtre/index.html deleted file mode 100644 index 91df36efa2..0000000000 --- a/files/fr/web/apps/design/building_blocks/filtre/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Filtre -slug: Web/Apps/Design/Building_Blocks/Filtre -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_blocks/1.x/Filter ---- -

Les filtres peuvent être utilisés pour deux usages :

-
    -
  1. le filtrage, dans lequel l'utilisateur peut visualiser un ensemble unique de données de différentes manières. Par exemple, l'application Calendrier utilise des filtres pour sélectionner l'échelle de temps utilisée de la visualisation de données (qui est de jour, semaine ou mois) ;
  2. -
  3. la navigation (présentation d'un second ensemble d'onglets lorsque des onglets sont déjà présents dans votre interface utilisateur).
  4. -
-

Consultez le Guide de codage pour la façon de mettre en œuvre les filtres dans votre application.

-

Caractéristiques

- -

Captures d'écran

- - - - - - - -
-

Filtres au somment

-

-
-

Filtres au fond

-

-
-

Variations

-

Il ya seulement deux variations: si les filtres sont au sommet ou au fond.

-

Filtres au sommet

-

-

Filtres au fond

-

-

Interaction

-

Taper sur un bouton du filtre change immédiatement la vue affichée pour représenter le nouveau contenu.

-

Voir aussi

- diff --git a/files/fr/web/apps/design/building_blocks/index.html b/files/fr/web/apps/design/building_blocks/index.html deleted file mode 100644 index f652943f31..0000000000 --- a/files/fr/web/apps/design/building_blocks/index.html +++ /dev/null @@ -1,268 +0,0 @@ ---- -title: Open Web App UX building blocks -slug: Web/Apps/Design/Building_Blocks -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_blocks/1.x ---- -

Vous trouverez ici une description des éléments de l'interface utilisateur commune aux applications Open Web dont l'interface est destinée aux petits écrans  — comme les applications Firefox OSavec des exemples montrant leur aspect et leurs fonctions. Notez que les exemples particuliers que vous trouverez dans cette section ont été rédigés conformément aux lignes directrices de conception de Firefox OS, mais ils doivent vous fournir des informations utiles, quel que soit le type d'aide que vous recherchez pour votre projet.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-


-  Détails
- Coding guide

-
-

 

-
-

Bouton

-
-

- -

Détails
- Coding guide

-
-

 

-
-

Confirmation

-
-

- -

Détails
- Coding guide
-  

-
-

 

-
-

Filtre

-
-

- -

Détails
- Coding guide

-
-

 

-
-

Entête

-
-

- -

Details
- Coding guide

-
-

 

-
-

Zone de saisie

-
-

- -

Détails
- Coding guide

-
-

 

-
-

Listes

-
-

- -

Details
- Coding guide

-
-

 

-
-

Object menu

-
-

- -

Details
- Coding guide

-
-

 

-
-

Indicateur de progression et d'activité

-
-

- -

Details
- Coding guide

-
-

 

-
-

Défilement

-
-

- -

Details
- Coding guide

-
-

 

-
-

Barre de réglage

-
-

- -

Details
- Coding guide

-
-

 

-
-

Statut

-
-


- Details
- Coding guide

-
-

 

-
-

Switch

-
-

- -

Details
- Coding guide

-
-

 

-
-

Onglets

-
-

- -

Details
- Coding guide

-
-

 

-
-

Barre d'outils

-
-

- -

Details
- Coding guide

-
-

 

-
-

Sélecteur de valeur

-
-

- -

Details
- Coding Guide

-
-

 

-
- -

 

diff --git a/files/fr/web/apps/design/building_blocks/menu_action/index.html b/files/fr/web/apps/design/building_blocks/menu_action/index.html deleted file mode 100644 index 707a1ae49d..0000000000 --- a/files/fr/web/apps/design/building_blocks/menu_action/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Menu action -slug: Web/Apps/Design/Building_Blocks/menu_action -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_blocks/1.x/Action_menu ---- -

Un menu Action présente une liste d'élémenst, liée au contenu de l'application, à partir de laquelle l'utilisateur peut faire une sélection. Consultez le guide de codage pour plus de détails sur la façon de mettre en place un menu d'action dans votre application.

-

Caractéristiques

- -

Captures d'écran

- - - - - - - -
-

État neutre

-

-

Le menu Action ouvert attendant la sélection de l'utilisateur.

-
-

État appuyé

-

-

L'apparence du menu quand l'utilisateur touche le boutton "Option 3"

-
-

Variations

-

Il existe deux variantes de base sur le menu Action : si le menu a une chaîne de titre en haut ou non.

-

-

Interaction

-

Ce diagramme montre comment l'utilisateur interagit avec le menu action.

-

-

Voir aussi

- diff --git a/files/fr/web/apps/design/building_blocks/zone_saisie/index.html b/files/fr/web/apps/design/building_blocks/zone_saisie/index.html deleted file mode 100644 index 666da829a2..0000000000 --- a/files/fr/web/apps/design/building_blocks/zone_saisie/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Zone de saisie -slug: Web/Apps/Design/Building_Blocks/zone_saisie -translation_of: Archive/B2G_OS/Firefox_OS_apps/Building_blocks/1.x/Input_area ---- -

Une zone de saisie est un champ d'entrée de données. Il peut y avoir beaucoup de variations sur ce à quoi une zone de saisie peut ressembler, elles peuvent être aussi simple que d'un champ de saisie de texte, et aussi complexe qu'un champ de saisie multi-partie avec une entrée de texte, des sélecteurs de valeur et des boutons. Consultez le Guide de codage pour les détails sur la mise en œuvre des zones de saisie.

-

Caractéristiques

-

Détails à venir.

-

Captures d'écrans

-

Ici vous pouvez voir une variété de zones de saisie, qui suggère différentes utilisations possibles.

-

Entrées génériques

-

Ce sont de simples boîtes de saisie de texte.

- - - - - - - -
-

Entrée générique: vide

-

-

Voici une boîte de saisie simple, sans texte saisi à l'intérieur, seulement du texte générique pour l'espace réservé.

-
-

Entrée générique: remplie

-

-

Ici, l'entrée générique est préremplie. Notez la présence du bouton "effacer" à l'extrémité droite du champ de saisie.

-
-

Entrées dans le haut de la vue

-

Ces entrées sont situées dans la partie supérieure de la vue (soit tout en haut de l'écran, ou immédiatement sous un en-tête).

- - - - - - - -
-

Haut : vide

-

-

Voici un champ de saisie de texte en haut d'une page, qui devrait être utilisé sous un en-tête.

-
-

Haut : actif

-

-

Ce champ de saisie de texte du haut de vue est actif, il dispose d'un bouton actif "Annuler" à côté de lui, et le bouton "Effacer" dans le champ de saisie est visible.

-

Ce style d'entrée doit être utilisée sans en-tête.

-
-

Note: Ceci nécessite plus d'explications, de quelle façon est-ce différent de la forme «vide» en termes d'utilisation d'en-tête ?

-
-
-

Entrées dans le bas de la vue

-

Ces entrées sont situées dans le bas de la vue.

- - - - - - - - - - - -
-

Boîte de saisie de texte vide

-

-

Cette zone de saisie en bas de vue comporte un bouton "Envoyer" (qui vient d'une application SMS). Notez que le bouton "Envoyer" est désactivée car l'entrée est vide.

-
-

Boîte de saisie de texte pleine

-

-

Maintenant, la zone de saisie est remplie, et le bouton "Envoyer" est activé.

-
-

Boîte de saisie de texte multi-lignes

-

-

Étant donné que la quantité de texte saisi par l'utilisateur augmente, la zone de saisie en bas de vue s'étend vers le haut pour faire de la place à plus de contenu, comme on le voit ici.

-
 
-

Fieldsets simples

-

Ces fieldsets comprennent une combinaison d'un sélecteur de valeur et d'une zone de saisie. Dans cet exemple, le bouton de sélection de valeur est utilisée pour ouvrir un sélecteur de choisir de type de contact dans l'application contacts (travail, maison, etc), et la zone de saisie est utilisé pour entrer l'adresse e-mail correspondante.

- - - - - - - - - - - -
-

Vide

-

-

Ici, la zone de saisie de texte est vide, ne montrant que le texte de l'espace réservé.

-
-

Avec du texte

-

-

Ici, l'utilisateur a entré une adresse email. Un bouton Supprimer se trouve à côté du champ, afin de permettre la suppression de l'adresse de courriel à partir de l'enregistrement de contact.

-

 

-
-

Avec le bouton de sélection de valeurs pressé

-

-

Ici, l'utilisateur a appuyé sur le bouton de sélection de valeur, quand il sera relâché, le sélecteur de valeur s'ouvrira pour laisser choisir le type de contact.

-
-

Désactivé, avec le bouton annuler

-

-

Ici, l'entrée est désactivée, mais possède un bouton annuler.

-
-

Note: Besoin d'explication pour les cas d'utilisation de cet objet.

-
-
-

Fieldsets complexes

-

Les fieldsets plus complexes peuvent contenir

- - - - - - - -
-

Avec du contenu entré

-

-

Ici, nous avons une zone d'entrée pour laquelle plusieurs valeurs de saisie de texte sont associés à la catégorie "Maison": un numéro de téléphone et un nom. Un bouton est inclus pour ajouter une adresse à cette catégorie.

-

 

-
-

Désactivé, avec un bouton annuler

-

-

Dans cet exemple, l'entrée est désactivée, avec un bouton annuler.

-
-

Note: Besoin d'explication pour les cas d'utilisation de cet objet.

-
-

 

-
-

Interaction

-

Ci dessous vous pouvez voir une série d'interaction dans le but de créer une nouvelle entrée de calendrier.

-

-

Voir aussi

- diff --git a/files/fr/web/css/-moz-binding/index.html b/files/fr/web/css/-moz-binding/index.html deleted file mode 100644 index 509abfe15a..0000000000 --- a/files/fr/web/css/-moz-binding/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: '-moz-binding' -slug: Web/CSS/-moz-binding -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference - - XBL -translation_of: Archive/Web/CSS/-moz-binding ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété -moz-binding, utilisée par les applications Mozilla, permet d'attacher une liaison (binding) XBL à un élément DOM.

- -

{{cssinfo}}

- -

Syntaxe

- -
/* Valeur de type <url> */
--moz-binding: url(http://www.exemple.org/xbl/htmlBindings.xml#checkbox);
-
-/* Valeurs globales */
--moz-binding: inherited;
--moz-binding: initial;
--moz-binding: unset;
-
- -

Valeurs

- -
-
<url>
-
L'URL (typ {{cssxref("<url>")}} depuis laquelle effectuer la liaison XBL (l'URL inclue le fragment d'identification)
-
none
-
Aucune liaison XBL n'est appliquée à l'élément.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -
.exemple {
-  -moz-binding: url(http://www.exemple.org/xbl/htmlBindings.xml#radiobutton);
-}
- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Mozilla/Gecko et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-moz-binding")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-moz-border-bottom-colors/index.html b/files/fr/web/css/-moz-border-bottom-colors/index.html deleted file mode 100644 index 7f13373584..0000000000 --- a/files/fr/web/css/-moz-border-bottom-colors/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: '-moz-border-bottom-colors' -slug: Web/CSS/-moz-border-bottom-colors -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-moz-border-bottom-colors ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Pour les applications Mozilla, la propriété -moz-border-bottom-colors définit une liste de couleurs à utiliser pour mettre en forme la bordure du côté bas.

- -
/* Une couleur  */
-/* Type <color> */
--moz-border-bottom-colors: #f0f0f0;
-
-/* Plusieurs valeurs <color> */
--moz-border-bottom-colors: #f0f0f0 #a0a0a0 #505050 #000000;
-
-/* Valeurs globales */
--moz-border-bottom-colors: inherit;
--moz-border-bottom-colors: initial;
--moz-border-bottom-colors: unset;
-
- -

Lorsque la bordure d'un élément est plus épaisse qu'un pixel CSS, chaque ligne de pixels utilisera une des couleurs indiquées (en allant de l'extérieur vers l'intérieur). Cela permet d'éviter l'utilisation de boîtes imbriquées. Si la bordure est plus large que le nombre de couleurs indiquées, la partie restante de la bordure sera peinte avec la couleur utilisée le plus à intérieur.

- -

{{cssinfo}}

- -

Cette propriété n'est pas appliquée :

- -
    -
  1. Si {{cssxref("border-style")}} vaut dashed ou dotted.
  2. -
  3. Aux tableaux pour lesquels border-collapse: collapse.
  4. -
- -

Syntaxe

- -

Valeurs

- -

Cette propriété permet d'utiliser une liste de couleurs séparées par des blancs.

- -
-
<color>
-
Définit la couleur à utiliser pour une ligne de pixels de la bordure basse. La valeur transparent est valide. Voir {{cssxref("<color>")}} pour les valeurs et unités possibles.
-
none
-
La valeur initiale de la propriété, aucune couleur n'est utilisée ou {{cssxref("border-color")}} est utilisée si elle est définie.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

CSS

- -
#exemple {
-  padding: 20px;
-  background-color: gray;
-  border: 10px solid black;
-  -moz-border-top-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-  -moz-border-right-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-bottom-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-left-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-}
- -

HTML

- -
<div id="exemple">Exemple</div>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples", 120, 90)}}

- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Mozilla/Gecko et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-moz-border-bottom-colors")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-moz-border-left-colors/index.html b/files/fr/web/css/-moz-border-left-colors/index.html deleted file mode 100644 index 417c62f00a..0000000000 --- a/files/fr/web/css/-moz-border-left-colors/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: '-moz-border-left-colors' -slug: Web/CSS/-moz-border-left-colors -tags: - - CSS - - Non-standard - - Reference -translation_of: Archive/Web/CSS/-moz-border-left-colors ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Pour les applications Mozilla, la propriété -moz-border-left-colors définit une liste de couleurs à utiliser pour mettre en forme la bordure du côté gauche.

- -
/* Une couleur  */
-/* Type <color> */
--moz-border-left-colors: #f0f0f0;
-
-/* Plusieurs valeurs <color> */
--moz-border-left-colors: #f0f0f0 #a0a0a0 #505050 #000000;
-
-/* Valeurs globales */
--moz-border-left-colors: inherit;
--moz-border-left-colors: initial;
--moz-border-left-colors: unset;
-
- -

Lorsque la bordure d'un élément est plus épaisse qu'un pixel CSS, chaque ligne de pixels utilisera une des couleurs indiquées (en allant de l'extérieur vers l'intérieur). Cela permet d'éviter l'utilisation de boîtes imbriquées. Si la bordure est plus large que le nombre de couleurs indiquées, la partie restante de la bordure sera peinte avec la couleur utilisée le plus à intérieur.

- -

{{cssinfo}}

- -

Cette propriété n'est pas appliquée :

- -
    -
  1. Si {{cssxref("border-style")}} vaut dashed ou dotted.
  2. -
  3. Aux tableaux pour lesquels border-collapse: collapse.
  4. -
- -

Syntaxe

- -

Valeurs

- -

Cette propriété permet d'utiliser une liste de couleurs séparées par des blancs.

- -
-
<color>
-
Définit la couleur à utiliser pour une ligne de pixels de la bordure gauche. La valeur transparent est valide. Voir {{cssxref("<color>")}} pour les valeurs et unités possibles.
-
none
-
La valeur initiale de la propriété, aucune couleur n'est utilisée ou {{cssxref("border-color")}} est utilisée si elle est définie.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

CSS

- -
#exemple {
-  padding: 20px;
-  background-color: gray;
-  border: 10px solid black;
-  -moz-border-top-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-  -moz-border-right-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-bottom-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-left-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-}
- -

HTML

- -
<div id="exemple">Exemple</div>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples", 120, 90)}}

- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Mozilla/Gecko et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-moz-border-left-colors")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-moz-border-right-colors/index.html b/files/fr/web/css/-moz-border-right-colors/index.html deleted file mode 100644 index ee49e0effe..0000000000 --- a/files/fr/web/css/-moz-border-right-colors/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: '-moz-border-right-colors' -slug: Web/CSS/-moz-border-right-colors -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-moz-border-right-colors ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Pour les applications Mozilla, la propriété -moz-border-right-colors définit une liste de couleurs à utiliser pour mettre en forme la bordure du côté droit.

- -
/* Une couleur  */
-/* Type <color> */
--moz-border-right-colors: #f0f0f0;
-
-/* Plusieurs valeurs <color> */
--moz-border-right-colors: #f0f0f0 #a0a0a0 #505050 #000000;
-
-/* Valeurs globales */
--moz-border-right-colors: inherit;
--moz-border-right-colors: initial;
--moz-border-right-colors: unset;
-
- -

Lorsque la bordure d'un élément est plus épaisse qu'un pixel CSS, chaque ligne de pixels utilisera une des couleurs indiquées (en allant de l'extérieur vers l'intérieur). Cela permet d'éviter l'utilisation de boîtes imbriquées. Si la bordure est plus large que le nombre de couleurs indiquées, la partie restante de la bordure sera peinte avec la couleur utilisée le plus à intérieur.

- -

{{cssinfo}}

- -

Cette propriété n'est pas appliquée :

- -
    -
  1. Si {{cssxref("border-style")}} vaut dashed ou dotted.
  2. -
  3. Aux tableaux pour lesquels border-collapse: collapse.
  4. -
- -

Syntaxe

- -

Valeurs

- -

Cette propriété permet d'utiliser une liste de couleurs séparées par des blancs.

- -
-
<color>
-
Définit la couleur à utiliser pour une ligne de pixels de la bordure droite. La valeur transparent est valide. Voir {{cssxref("<color>")}} pour les valeurs et unités possibles.
-
none
-
La valeur initiale de la propriété, aucune couleur n'est utilisée ou {{cssxref("border-color")}} est utilisée si elle est définie.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

CSS

- -
#exemple {
-  padding: 20px;
-  background-color: gray;
-  border: 10px solid black;
-  -moz-border-top-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-  -moz-border-right-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-bottom-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-left-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-}
- -

HTML

- -
<div id="exemple">Exemple</div>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples", 120, 90)}}

- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Mozilla/Gecko et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-moz-border-right-colors")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-moz-border-top-colors/index.html b/files/fr/web/css/-moz-border-top-colors/index.html deleted file mode 100644 index cbb381bab6..0000000000 --- a/files/fr/web/css/-moz-border-top-colors/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: '-moz-border-top-colors' -slug: Web/CSS/-moz-border-top-colors -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-moz-border-top-colors ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Pour les applications Mozilla, la propriété {{cssxref("-moz-border-top-colors")}} définit une liste de couleurs à utiliser pour mettre en forme la bordure du côté haut.

- -
/* Une couleur  */
-/* Type <color> */
--moz-border-top-colors: #f0f0f0;
-
-/* Plusieurs valeurs <color> */
--moz-border-top-colors: #f0f0f0 #a0a0a0 #505050 #000000;
-
-/* Valeurs globales */
--moz-border-top-colors: inherit;
--moz-border-top-colors: initial;
--moz-border-top-colors: unset;
-
- -

Lorsque la bordure d'un élément est plus épaisse qu'un pixel CSS, chaque ligne de pixels utilisera une des couleurs indiquées (en allant de l'extérieur vers l'intérieur). Cela permet d'éviter l'utilisation de boîtes imbriquées. Si la bordure est plus large que le nombre de couleurs indiquées, la partie restante de la bordure sera peinte avec la couleur utilisée le plus à intérieur.

- -

{{cssinfo}}

- -

Cette propriété n'est pas appliquée :

- -
    -
  1. Si {{cssxref("border-style")}} vaut dashed ou dotted.
  2. -
  3. Aux tableaux pour lesquels border-collapse: collapse.
  4. -
- -

Syntaxe

- -

Valeurs

- -

Cette propriété permet d'utiliser une liste de couleurs séparées par des blancs.

- -
-
<color>
-
Définit la couleur à utiliser pour une ligne de pixels de la bordure haute. La valeur transparent est valide. Voir {{cssxref("<color>")}} pour les valeurs et unités possibles.
-
none
-
La valeur initiale de la propriété, aucune couleur n'est utilisée ou {{cssxref("border-color")}} est utilisée si elle est définie.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

CSS

- -
#exemple {
-  padding: 20px;
-  background-color: gray;
-  border: 10px solid black;
-  -moz-border-top-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-  -moz-border-right-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-bottom-colors: red #f60 #f80 #f90 #fa0 #fb0 #fc0 #fd0 #fe0 #ff0;
-  -moz-border-left-colors: #e00 #c30 #c50 #c60 #c70 #c80 #c90 #ca0 #cb0 #cc0;
-}
- -

HTML

- -
<div id="exemple">Exemple</div>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples", 120, 90)}}

- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Mozilla/Gecko et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-moz-border-top-colors")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-moz-stack-sizing/index.html b/files/fr/web/css/-moz-stack-sizing/index.html deleted file mode 100644 index dab5eb2287..0000000000 --- a/files/fr/web/css/-moz-stack-sizing/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: '-moz-stack-sizing' -slug: Web/CSS/-moz-stack-sizing -tags: - - CSS - - Non-standard - - Propriété - - Reference - - XUL -translation_of: Archive/Web/CSS/-moz-stack-sizing ---- -
{{Non-standard_header}}{{CSSRef}}{{gecko_minversion_header("1.9.1")}}
- -

La propriété -moz-stack-sizing est une propriété propriétaire. Normalement, un élément {{XULElem("stack")}} changera sa taille pour que tous ses éléments fils soient complètement visibles. Ainsi, si on déplace un élément fils de cette pile vers la droite, la pile s'élargira pour que l'élément reste visible.

- -
/* Valeurs avec un mot-clé */
--moz-stack-sizing: stretch-to-fit;
--moz-stack-sizing: ignore;
-
-/* Valeurs globales */
--moz-stack-sizing: inherit;
--moz-stack-sizing: initial;
--moz-stack-sizing: unset;
-
- -

Si on veut empêcher le redimensionnement automatique, on pourra définir -moz-stack-sizing avec la valeur ignore sur l'élément fils. La propriété n'est pas définie sur la pile elle-même mais sur les éléments fils de la pile. Cela permet d'ignorer certains éléments fils mais pas d'autres.

- -

Note : Dans les versions antérieures de Gecko, on pouvait contourner ce problème en définissant des marges basse et droite négatives sur la pile et des marges basse et droite positives sur les éléments fils qu'on ne souhaitait pas ignorer.

- -

Syntaxe

- -

Valeurs

- -
-
stretch-to-fit
-
L'élément enfant influencera la taille de la pile.
-
ignore
-
La pile ne prendra pas en compte cet élément enfant lors du calcul de la taille.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -
.mainsheet {
-  -moz-stack-sizing: ignore;
-}
-
- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Mozilla/Gecko et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-moz-text-blink/index.html b/files/fr/web/css/-moz-text-blink/index.html deleted file mode 100644 index dd11eb1154..0000000000 --- a/files/fr/web/css/-moz-text-blink/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: '-moz-text-blink' -slug: Web/CSS/-moz-text-blink -tags: - - CSS - - Non-standard - - Obsolete - - Propriété - - Reference -translation_of: Archive/Web/CSS/-moz-text-blink ---- -
{{CSSRef}}{{non-standard_header}}{{Obsolete_Header(26)}}
- -

La propriété CSS non-standard -moz-text-blink détermine le mode de clignotement.

- -
-

Note : Firefox, qui était le seul des principaux navigateurs à la prendre en charge, a abandonné son support dans Firefox 26. Désormais, plus aucun navigateur ne la prend en charge.

-
- -

Syntaxe

- -

Valeurs

- -
-
none
-
Il n'y a pas de clignotement.
-
blink
-
Le texte clignote. Ne pas faire clignoter le texte est l'une des techniques pour respecter le point de contrôle 3.3 des WAI-UAAG.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -
.exemple {
-  -moz-text-blink: blink;
-}
- -

Spécifications

- -

Cette propriété était définie dans un ancien brouillon de la spécification CSS 3 Text. Sa définition a été supprimée des nouvelles versions.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-moz-text-blink")}}

diff --git a/files/fr/web/css/-moz-window-shadow/index.html b/files/fr/web/css/-moz-window-shadow/index.html deleted file mode 100644 index 4312b16d54..0000000000 --- a/files/fr/web/css/-moz-window-shadow/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: '-moz-window-shadow' -slug: Web/CSS/-moz-window-shadow -tags: - - CSS - - Non-standard - - Obsolete - - Propriété - - Reference - - XUL -translation_of: Archive/Web/CSS/-moz-window-shadow ---- -

{{CSSRef}}{{Non-standard_Header}}{{deprecated_Header("Gecko44")}}

- -

La propriété -moz-window-shadow définit si une fenêtre doit avoir une ombre. Cette propriété ne fonctionne que pour Mac OS X.

- -
-

Note : Cette propriété n'est pas standard et ne peut plus être utilisée depuis Firefox 44.

-
- -

Firefox 3 a ajouté la prise en charge des fenêtres transparentes sur Mac OS X. Cependant, les ombres pour ces fenêtres étaient désactivées et il n'y avait aucun moyen de les activer.Avec Firefox 3.5, le comportement par défaut a été modifié. Toutes les fenêtres ont une ombre et la propriété -moz-window-shadow a été introduite afin de désactiver les ombres indésirables.

- -

Syntaxe

- -

La propriété -moz-window-shadow est définie avec l'un des mots-clés suivants.

- -

Valeurs

- -
-
default
-
La fenêtre aura une ombre avec le style par défaut.
-
menu
-
La fenêtre aura une ombre dont le style est approprié pour les menus.
-
tooltip
-
La fenêtre aura une ombre dont le style est approprié pour les bulles d'information.
-
sheet
-
La fenêtre aura une ombre dont le style est approprié pour les fenêtres qui sont des feuilles.
-
none
-
La fenêtre n'aura pas d'ombre.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -
.KUI-panel {
-  -moz-window-shadow: none;
-}
-
- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-moz-window-shadow")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-ms-accelerator/index.html b/files/fr/web/css/-ms-accelerator/index.html deleted file mode 100644 index 048b5b6f09..0000000000 --- a/files/fr/web/css/-ms-accelerator/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: '-ms-accelerator' -slug: Web/CSS/-ms-accelerator -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-accelerator ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-accelerator est une extension Microsoft qui définit ou récupère une chaîne qui indique si l'objet représente un raccourci clavier.

- -

Syntaxe

- -
/* L'objet n'est pas un raccourci clavier (par défaut) */
--ms-accelerator: false
-/* L'objet est un raccourci clavier */
--ms-accelerator: true
-
- -

 

- -

Valeurs

- -
-
false
-
-

L'objet n'est pas un raccourci clavier.

-
-
true
-
-

L'objet est un raccourci clavier.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

Cet exemple utilise l'attribut -ms-accelerator dans un élément {{HTMLElement("u")}} pour spécifier que 'N' est la touche d'accès qui permettra d'accéder à l'élément {{HTMLElement("label")}}. Si l'option "souligner les raccourcis clavier" n'est pas activée dans les propriétés d'affichage Windows de l'utilisateur,  'N' ne sera pas souligné tant que la touche Alt ne sera pas enfoncée. Lorsque l'utilisateur appuie sur Alt+N, l'élément {{HTMLElement("input")}} qui possède l'attribut {{htmlattrxref("accessKey","input")}} avec pour valeur 'N' reçoit le focus.

- -
<!DOCTYPE html>
-
-<html>
-  <head>
-    <title>Accelerator</title>
-  </head>
-  <body>
-    <label for="oNom"><u style="-ms-accelerator: true; accelerator: true">N</u>om: </label>
-    <input type="text"
-      id="oNom"
-      size="25"
-      accesskey="N"
-      value="Votre nom ici" />
-  </body>
-</html>
-
- -

Spécifications

- -

Ce pseudo-élément ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est prise en charge par Windows 2000 et les versions ultérieures. Elle permet aux utilisateurs de masquer les indicateurs de navigation pour les éléments de menu et les contrôles tant que la touche Alt n'est pas enfoncée.

- -

Une touche d'accès (access key) est un caractère utilisé comme raccourci clavier pour sélectionner un objet. L'utilisateur effectue la combinaison de touches Alt + touche d'accès pour déplacer le focus sur l'objet demandé et déclencher l'évènement associé à cet objet.

- -

Dans Internet Explorer 8 (IE8) l'attribut -ms-accelerator est une extension CSS, et peut être utilisé comme synonyme de accelerator dans le mode standard d'IE 8.

diff --git a/files/fr/web/css/-ms-block-progression/index.html b/files/fr/web/css/-ms-block-progression/index.html deleted file mode 100644 index 502f1fb6b7..0000000000 --- a/files/fr/web/css/-ms-block-progression/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: '-ms-block-progression' -slug: Web/CSS/-ms-block-progression -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-block-progression ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-block-progression est une propriété spécifique à Microsoft qui indique la progression du bloc et l'orientation de la disposition.

- -

Syntaxe

- -

La propriété -ms-block-progression est définie grâce à l'un des mots-clés suivants.

- -

Valeurs

- -
-
tb
-
La valeur par défaut. Les blocs s'écoulent de haut en bas et la disposition est horizontale.
-
rl
-
Les blocs s'écoulent de droite à gauche et la disposition est verticale.
-
bt
-
Les blocs s'écoulent de bas en haut et la disposition est horizontale.
-
lr
-
Les blocs s'écoulent de gauche à droite et la disposition est verticale
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Avec une disposition verticale, les lignes de textes sont tournées de 90° dans le sens des aiguilles d'une montre. Les images ne sont pas tournées mais les tableaux sont tournés. La disposition des boîtes avec un orientatiofrn verticale est strictement analogue à la disposition avec une orientation horizontale : la largeur, la hauteur, top, bottom, right et left ne tournent pas avec le texte.

- -

Seul un seul mode de progression peut être actif à un moment donné. Ces valeurs ne peuvent pas êtres combinées.

- -

Cette propriété est basée sur la propriété block-progression décrite dans le module de spécification CSS3 Text Layout.

diff --git a/files/fr/web/css/-ms-content-zoom-chaining/index.html b/files/fr/web/css/-ms-content-zoom-chaining/index.html deleted file mode 100644 index 5a016f2178..0000000000 --- a/files/fr/web/css/-ms-content-zoom-chaining/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: '-ms-content-zoom-chaining' -slug: Web/CSS/-ms-content-zoom-chaining -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zoom-chaining ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zoom-chaining est une propriété spécifique à Microsoft qui indique le comportement du zoom lorsque l'utilisateur atteint la limite du zoom lors de son utilisation.

- -

Syntaxe

- -

La propriété -ms-content-zoom-chaining est définie grâce à l'un des mots-clés suivants.

- -

Valeurs

- -
-
none
-
La valeur par défaut. Un effet de rebondissement est déclenché lorsque l'utilisateur atteint la limite.
-
chained
-
Le zoom est fait sur le plus proche parent qui peut être zoomé lorsque l'utilisateur atteint la limite. Aucun effet de rebondissement n'est affiché.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a pas d'impact sur les éléments qui ne peuvent pas être zoomés. Pour plus d'informations sur les éléments pouvant être zoomés, voir -ms-content-zooming.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Il est nécessaire d'avoir Windows 8 ou une version ultérieure afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-content-zoom-limit-max/index.html b/files/fr/web/css/-ms-content-zoom-limit-max/index.html deleted file mode 100644 index b683e617b5..0000000000 --- a/files/fr/web/css/-ms-content-zoom-limit-max/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: '-ms-content-zoom-limit-max' -slug: Web/CSS/-ms-content-zoom-limit-max -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zoom-limit-max ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zoom-limit-max est une propriété spécifique à Microsoft qui détermine le facteur de zoom maximal.

- -

Syntaxe

- -

La propriété -ms-content-zoom-limit-max est définie avec une valeur en pourcentage de la taillle sans zoom.

- -

Valeurs

- -
-
<percentage>
-
Le facteur de zoom maximal proportionnellement à la taille originale (pour ce type de valeur cf. {{cssxref("<percentage>")}}).
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cet élément ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété contraint la limite pour le zoom tactile et les valeurs de la propriété msContentZoomFactor. Cette propriété n'a pas d'impact pour les éléments qui ne peuvent pas être zoomés. Voir {{CSSXref("-ms-content-zooming")}} pour plus de détails sur les éléments pouvant être zoomés.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Windows 8 ou une version ultérieure est nécessaire afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-content-zoom-limit-min/index.html b/files/fr/web/css/-ms-content-zoom-limit-min/index.html deleted file mode 100644 index e4303cb9f1..0000000000 --- a/files/fr/web/css/-ms-content-zoom-limit-min/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: '-ms-content-zoom-limit-min' -slug: Web/CSS/-ms-content-zoom-limit-min -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zoom-limit-min ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zoom-limit-min est une propriété spécifique à Microsoft qui détermine le facteur de zoom minimal.

- -

Syntaxe

- -

La propriété -ms-content-zoom-limit-min est définie avec une valeur en pourcentage de la taillle sans zoom.

- -

Valeurs

- -
-
<percentage>
-
Le facteur de zoom minimal proportionnellement à la taille originale (pour ce type de valeur cf. {{cssxref("<percentage>")}}).
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cet élément ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété contraint la limite pour le zoom tactile et les valeurs de la propriété msContentZoomFactor. Cette propriété n'a pas d'impact pour les éléments qui ne peuvent pas être zoomés. Voir {{CSSXRef("-ms-content-zooming")}} pour plus de détails sur les éléments pouvant être zoomés.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Windows 8 ou une version ultérieure est nécessaire afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-content-zoom-limit/index.html b/files/fr/web/css/-ms-content-zoom-limit/index.html deleted file mode 100644 index 420ad5c2ea..0000000000 --- a/files/fr/web/css/-ms-content-zoom-limit/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: '-ms-content-zoom-limit' -slug: Web/CSS/-ms-content-zoom-limit -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zoom-limit ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zoom-limit est une propriété raccourcie spécifique à Microsoft qui indique les valeurs à utiliser pour les propriétés  {{CSSXref("-ms-content-zoom-limit-min")}} et  {{CSSXref("-ms-content-zoom-limit-max")}}.

- -

Syntaxe

- -

La propriété -ms-content-zoom-limit est définie avec une ou deux valeurs de limites de zoom, dans l'ordre qui suit et séparées par un espace.

- -

Valeur

- -
-
-ms-content-zoom-limit-min
-
La valeur à utiliser pour la propriété -ms-content-zoom-limit-min.
-
-ms-content-zoom-limit-max
-
La valeur à utiliser pour la propriété -ms-content-zoom-limit-max.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a pas d'impact pour les éléments qui ne peuvent pas être zoomés. Pour plus d'informations sur les éléments pouvant être zoomés, voir -ms-content-zooming.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Il est nécessaire d'avoir Windows 8 ou une version ultérieure afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-content-zoom-snap-points/index.html b/files/fr/web/css/-ms-content-zoom-snap-points/index.html deleted file mode 100644 index e600c0a099..0000000000 --- a/files/fr/web/css/-ms-content-zoom-snap-points/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: '-ms-content-zoom-snap-points' -slug: Web/CSS/-ms-content-zoom-snap-points -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zoom-snap-points ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zoom-snap-points est une propriété spécifique à Microsoft qui indique l'emplacement des points d'accroches pour les niveaux de zoom.

- -

Syntaxe

- -

La propriété -ms-content-zoom-snap-points est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
snapInterval(<start zoomfactors>, <step zoomfactors>)
-
-

Cette forme indique l'emplacement des points d'accroche pour le zoom :

- -
    -
  • <start zoomfactor> indique l'emplacement du premier point d'accroche. Cette valeur est exprimée comme un nombre suivi d'un signe pourcent (%).
  • -
  • <step zoomfactor> indique la distance entre les différents points d'accroche (en zoom et en dézoom) à partir du point d'accroche initial. Cette valeur est exprimée comme un nombre suivi d'un signe pourcent (%).
  • -
-
-
snapList(<list zoomfactors>)
-
-

Cette forme indique la position des points d'accroche sous la forme d'une liste de points d'accroche indidivuels, séparés par des virgules. Chaque point d'accroche est exprimé comme un nombre suivi d'un caractère pourcent (%).

- -
    -
  • Si l'une des valeurs de <list zoomfactors> est inférieure à la valeur indiquée par la propriété {{CSSXref("-ms-content-zoom-limit-min")}}, ce sera la valeur de cette dernière qui sera utilisée.
  • -
  • Si l'une des valeurs de <list zoomfactors> est supérieure à la valeur définie par la propriété {{CSSXref("-ms-content-zoom-limit-max")}}, ce sera la valeur de cette dernière qui sera utilisée.
  • -
-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

Cet exemple illustre les deux formes possibles pour une règle utilisant la propriété -ms-content-zoom-snap-points. Dans le premier sélecteur, le premier point d'accorche est situé à 0% puis l'intervalle à 100%. Dans le second sélecteur, chaque point d'accroche est explicitement listé : le premier à 100%, le deuxième à 200%, le troisième à 300%, etc.

- -
.snappy1 {
-  -ms-content-zoom-snap-points: snapInterval(0%, 100%);
-  ...
-}
-
-.snappy2 {
-  -ms-content-zoom-snap-points: snapList(100%, 200%, 300%, 400%, 500%);
-  ...
- }
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a pas d'impact pour les éléments qui ne peuvent pas être zoomés. Voir {CSSXref("-ms-content-zooming")} pour plus de détails sur les éléments pouvant être zoomés.

- -

Lorsqu'un utilisateur fait défiler du contenu ou le déplace puis retire le pointeur (doigt ou stylet), le contenu peut continuer à bouger avec une certaine inertie. Les points d'accroche permettent de modifier ce comportement en arrêtant cette inertie à certains niveaux. Utiliser des points d'accroches permet ainsi d'éviter que le contenu se déplace ou se zoome/dézoome à des niveaux qui ne seraient pas pertinents.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Windows 8 ou une version ultérieure est nécessaire afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-content-zoom-snap-type/index.html b/files/fr/web/css/-ms-content-zoom-snap-type/index.html deleted file mode 100644 index d2e52fc009..0000000000 --- a/files/fr/web/css/-ms-content-zoom-snap-type/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: '-ms-content-zoom-snap-type' -slug: Web/CSS/-ms-content-zoom-snap-type -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zoom-snap-type ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zoom-snap-type est une propriété spécifique à Microsoft qui définit la façon dont le zoom se comporte aux points d'accroche pour les niveaux de zoom.

- -

Syntaxe

- -

La propriété -ms-content-zoom-snap-type est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
none
-
-

La valeur par défaut. Les points d'accroche n'ont pas d'impact sur le zoom. Le contenu continuera à être zoomé / dézoomé après que l'action utilisateur se soit arrêtée.

-
-
proximity
-
-

Cette valeur indique que le processus de zoom/dézoom s'arrête à peu près au niveau du point d'accroche après que l'interaction utilisateur ait cessé. Avec cette valeur, il est donc possible que le facteur de zoom du contenu soit arrêté entre deux points d'accroche.

-
-
mandatory
-
-

Cette valeur indique que le processus de zoom/dézoom s'arrête obligatoirement sur un des points d'accroche après que l'interaction utilisateur ait cessé. Le point d'accroche sélectionné est le point d'accroche le plus proche du facteur de zoom du contenu sur lequel le mouvement se serait arrêté.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a pas d'impact pour les éléments qui ne peuvent pas être zoomés. Voir {{CSSXRef("-ms-content-zooming")}} pour plus de détails sur les éléments pouvant être zoomés.

- -

Lorsqu'un utilisateur fait défiler du contenu ou le déplace puis retire le pointeur (doigt ou stylet), le contenu peut continuer à bouger avec une certaine inertie. Les points d'accroche permettent de modifier ce comportement en arrêtant cette inertie à certains niveaux. Utiliser des points d'accroches permet ainsi d'éviter que le contenu se déplace ou se zoome/dézoome à des niveaux qui ne seraient pas pertinents.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Windows 8 ou une version ultérieure est nécessaire afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-content-zoom-snap/index.html b/files/fr/web/css/-ms-content-zoom-snap/index.html deleted file mode 100644 index 2e3b584d59..0000000000 --- a/files/fr/web/css/-ms-content-zoom-snap/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: '-ms-content-zoom-snap' -slug: Web/CSS/-ms-content-zoom-snap -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zoom-snap ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zoom-snap est une propriété raccourcie spécifique à Microsoft qui définit les valeurs des proriétés {{CSSXref("-ms-content-zoom-snap-type")}} et {{CSSXref("-ms-content-zoom-snap-points")}}.

- -

Syntaxe

- -

La propriété -ms-content-zoom-snap est définie avec une ou deux des valeurs suivantes, dans cet ordre et séparées par un espace.

- -

Valeurs

- -
-
-ms-content-zoom-snap-type
-
La valeur à utiliser pour la propriété {{CSSXref("-ms-content-zoom-snap-type")}}.
-
-ms-content-zoom-snap-points
-
La valeur à utiliser pour la propriété {{CSSXref("-ms-content-zoom-snap-points")}}.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cet élément ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a pas d'impact pour les éléments qui ne peuvent pas être zoomés. Voir {{CSSXref("-ms-content-zooming")}} pour plus de détails sur les éléments pouvant être zoomés.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Windows 8 ou une version ultérieure est nécessaire afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-content-zooming/index.html b/files/fr/web/css/-ms-content-zooming/index.html deleted file mode 100644 index 216a176781..0000000000 --- a/files/fr/web/css/-ms-content-zooming/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: '-ms-content-zooming' -slug: Web/CSS/-ms-content-zooming -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-content-zooming ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-content-zooming est une propriété spécifique à Microsoft qui indique si le zoom est autorisé.

- -

Syntaxe

- -

La propriété -ms-content-zooming est définie avec l'un des mots-clés suivants.

- -

Valeurs

- -
-
none
-
La valeur initiale pour tous les éléments sauf ceux de plus haut niveau. L'élément ne peut pas être zoomé.
-
zoom
-
La valeur initiale pour l'élément de plus haut niveau. L'élément peut être zoomé.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a pas d'impact sauf si le dépassement est permis sur l'axe horizontal et sur l'axe vertical.

- -

Par défaut, les éléments pouvant être zoomés peuvent être zoomés au doigt avec un geste de "pincement". L'élément de plus haut niveau peut également être zoomés avec une double touche lorsque le zoom est autorisé.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions avec le pavé tactile.

- -

Il est nécessaire d'avoir Windows 8 ou une version ultérieure afin d'utiliser cette propriété.

diff --git a/files/fr/web/css/-ms-filter/index.html b/files/fr/web/css/-ms-filter/index.html deleted file mode 100644 index 5b0f0a3042..0000000000 --- a/files/fr/web/css/-ms-filter/index.html +++ /dev/null @@ -1,218 +0,0 @@ ---- -title: '-ms-filter' -slug: Web/CSS/-ms-filter -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-filter ---- -
{{CSSRef}}{{Non-standard_Header}}{{Obsolete_Header}}
- -

La propriété -ms-filter est une propriété spécifique à Microsoft qui permet de définir des filtres à appliquer à un objet.

- -
-

Attention ! Ne pas confondre cette propriété et la propriété standard {{CSSxRef("filter")}}  car les deux sont pleinement incompatibles.

-
- -
-

Attention ! Cette fonctionnalité a été dépréciée avec Internet Explorer 9. Dans Internet Explorer 10, cette fonctionnalité a été supprimée et ne devrait plus être utilisée.

-
- -

Syntaxe

- -

La propriété -ms-filter est définie avec une chaîne de caractères contenant une liste d'un ou plusieurs éléments, séparés par des espaces. Chacun de ces éléments peut avoir l'un des types suivants :

- - - -

Syntaxe formelle

- -
filter: <-ms-filter-function>+ {{Deprecated_Inline}}
--ms-filter: [ "'" <-ms-filter-function># "'" ] | [ '"' <-ms-filter-function># '"' ]
-
-où
-<-ms-filter-function> = <-ms-filter-function-progid> | <-ms-filter-function-legacy>
-
-où
-<-ms-filter-function-progid> = 'progid:' [ <ident-token> '.' ]* [ <ident-token> | <function-token> <any-value> ')' ]
-<-ms-filter-function-legacy> = <ident-token> | <function-token> <any-value> ')'
- -

La chaîne de caractères ({{CSSxRef("string")}}) contient la liste des filtres, transitions et surfaces procédurales. Voir la référence relative aux filtres et transitions pour plus de détails.

- -

Exemples

- -

L'exemple suivant illustre comment utiliser la propriété -ms-filter dans Internet Explorer 8.

- -
-ms-filter: 'progid:DXImageTransform.Microsoft.MotionBlur(strength=50), progid:DXImageTransform.Microsoft.BasicImage(mirror=1)';
-
- -

L'exemple suivant illustre comment utiliser un style en incise pour appliquer un filtre sur une image.

- -
<img style="filter:progid:DXImageTransform.Microsoft.MotionBlur(strength=50)
-    progid:DXImageTransform.Microsoft.BasicImage(mirror=1)"
-    src="/workshop/samples/author/dhtml/graphics/cone.jpg"
-    height="80px" width="80px" alt="cone">
-
- -

Dans l'exemple suivant, on voit comment utiliser les API scriptées pour définir un filtre sur une image.

- -
<body>
-  <p>Click the image to start the filter.</p>
-  // Call the function.
-  <div id="filterFrom"
-      style="position: absolute;
-            width: 200px;
-            height: 250px;
-            background-color: white;
-            filter: revealTrans()">
-    <img id="imageFrom"
-         style="position: absolute;
-                top: 20px;
-                left: 20px;"
-                src="sphere.jpg"
-                alt="sphere">
-    <div id="filterTo"
-         style="position: absolute;
-                width: 200px;
-                height: 250px;
-                top: 20px;
-                left: 20px;
-                background: white;
-                visibility: hidden;">
-    </div>
-  </div>
-  <script type="text/javascript">
-  let filterImg = document.querySelector('#filterFrom');
-  filterImg.addEventListener('click', doFilter);
-
-  function doFilter () {
-    filterFrom.filters.item(0).Apply(); // 12 is the dissolve filter.
-    filterFrom.filters.item(0).Transition=12;
-    imageFrom.style.visibility = "hidden";
-    filterTo.style.visibility = "";
-    filterFrom.filters.item(0).play(14);
-  }
-  </script>
-</body>
-
- -

Dégradé

- -
progid:DXImageTransform.Microsoft.Gradient( <properties> )
-
-où
-<properties> = [ <Enabled> | <EndColor> | <EndColorStr> | <GradientType> | <StartColor> | <StartColorStr> ]#
-
-où
-<Enabled> = 'Enabled=' [ true | false ]
-<EndColor> = 'StartColor=' {{CSSxRef("<color>")}}
-<EndColorStr> = 'StartColorStr=' {{CSSxRef("<color>")}}
-<GradientType> = 'GradientType=' {{CSSxRef("<integer>")}}
-<StartColor> = 'StartColor=' {{CSSxRef("<color>")}}
-<StartColorStr> = 'StartColorStr=' {{CSSxRef("<color>")}}
-
- -
-
Enabled
-
Valeur par défaut : true
- Utiliser false pour désactiver le dégradé.
-
EndColor
-
La couleur pour la fin du dégradé, seules les couleurs opaques (utilisant la notation #RRGGBB) sont prises en charge.
-
EndColorStr
-
La couleur pour la fin du dégradé avec une prise en charge des couleurs opaques avec la notation #RRGGBB et une prise en charge des couleurs avec la notation #AARRGGBB.
-
GradientType
-
Valeur par défaut : 0 (ce qui est équivalent à {{CSSxRef("linear-gradient",'linear-gradient(to bottom, …)')}})
- Toute valeur non nulle rendra le dégradé horizontal (équivalent à {{CSSxRef("linear-gradient",'linear-gradient(to right, …)')}})
-
StartColor
-
La couleur pour le début du dégradé, seules les couleurs opaques (utilisant la notation #RRGGBB) sont prises en charge.
-
StartColorStr
-
La couleur pour le début du dégradé avec une prise en charge des couleurs opaques avec la notation #RRGGBB et une prise en charge des couleurs avec la notation #AARRGGBB.
-
- -

HTML

- -
<div class="gradient horizontal"></div>
-<div class="gradient vertical"></div>
-
- -

CSS

- - - -
.gradient.horizontal {
-  -ms-filter: 'progid:DXImageTransform.Microsoft.Gradient(startColorStr="#ffffff", endColorStr="#000000", GradientType=1)';
-  background-image: linear-gradient(to right, #ffffff 0%, #000000 100%);
-}
-
-.gradient.vertical {
-  -ms-filter: 'progid:DXImageTransform.Microsoft.Gradient(startColorStr="#ffffff", endColorStr="#000000", GradientType=0)';
-  background-image: linear-gradient(to bottom, #ffffff 0%, #000000 100%);
-}
-
- -

Résultat

- -

{{EmbedLiveSample("Dégradé","100%","120")}}

- -

Spécifications

- -

Cette propriété est une propriété spécifique à Microsoft, ne doit pas être utilisée sur le Web et ne fait partie d'aucune spécification.

- -

{{CSSInfo("-ms-filter")}}

- -

Notes

- -

Le tableau suivant énumère les différents filtres DX spécifiques qui étaient fréquemment utilisés, avec leur équivalent en CSS standard :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nom du filtre DXAlternative standard
Alpha{{CSSxRef("opacity")}}
AlphaImageLoader{{HTMLElement("img")}} ou {{CSSxRef("background-image")}} et les propriétés associées
Gradient{{CSSxRef("background-image")}}: {{CSSxRef("linear-gradient")}}
DropShadow{{CSSxRef("text-shadow")}} ou {{CSSxRef("box-shadow")}}
Matrix{{CSSxRef("transform")}}, {{CSSxRef("transform-origin")}}
- -

Pour Windows Internet Explorer 8, la propriété -ms-filter est une extension à CSS et peut être utilisée comme synonyme de {{CSSxRef("filter")}} en mode standard IE8.

- -

Un objet doit avoir une disposition où afficher le filtre. Pour cela, on pourra fournir une hauteur et une largeur à l'élément grâce aux propriétés {{CSSxRef("height")}} et {{CSSxRef("width")}}.

- -

Le filtre d'ombre peut être appliqué à un objet {{HTMLElement("img")}} en paramétrant le filtre sur le conteneur de l'image.

diff --git a/files/fr/web/css/-ms-flow-from/index.html b/files/fr/web/css/-ms-flow-from/index.html deleted file mode 100644 index 30218bc85d..0000000000 --- a/files/fr/web/css/-ms-flow-from/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: '-ms-flow-from' -slug: Web/CSS/-ms-flow-from -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-flow-from ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-flow-from est une propriété spécifique de Microsoft qui permet d'obtenir ou de définir une valeur identifiant un conteneur {{HTMLElement("iframe")}} du document et qui reçoit du contenu d'une  source de données.

- -

Syntaxe

- -

La propriété -ms-flow-from est définie grâce à l'une des valeurs suivantes.

- -

Valeurs

- -
-
none
-
-

La valeur par défaut. Aucun conteneur n'est indiqué.

-
-
{{cssxref("<custom-ident>")}}
-
-

Le nom du conteneur de région.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

diff --git a/files/fr/web/css/-ms-flow-into/index.html b/files/fr/web/css/-ms-flow-into/index.html deleted file mode 100644 index fc3e6d0e43..0000000000 --- a/files/fr/web/css/-ms-flow-into/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: '-ms-flow-into' -slug: Web/CSS/-ms-flow-into -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-flow-into ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-flow-into est une propriété spécifique de Microsoft extension qui permet d'obtenir ou de définir une valeur identifiant un conteneur {{HTMLElement("iframe")}} du document et qui sert de source de données à la région.

- -

Syntaxe

- -

La propriété -ms-flow-into est définie grâce à l'une des valeurs suivantes.

- -

Valeurs

- -
-
none
-
-

La valeur par défaut. Aucun conteneur n'est indiqué.

-
-
{{cssxref("<custom-ident>")}}
-
-

Le nom du conteneur de région.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

diff --git a/files/fr/web/css/-ms-high-contrast-adjust/index.html b/files/fr/web/css/-ms-high-contrast-adjust/index.html deleted file mode 100644 index 255065c35e..0000000000 --- a/files/fr/web/css/-ms-high-contrast-adjust/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: '-ms-high-contrast-adjust' -slug: Web/CSS/-ms-high-contrast-adjust -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-high-contrast-adjust ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-high-contrast-adjust est une propriété spécifique à Microsoft qui permet de récupérer ou de définir une valeur qui indique s'il faut surcharger des propriétés CSS qui auraient été définies pour un mode de contraste élevé.

- -

Syntaxe

- -

La propriété -ms-high-contrast-adjust est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
auto
-
-

Cet mot-clé indique que les propriétés CSS applicables seront ajustées comme souhaité lorsque le système utilisera un mode de contraste élevé.

-
-
none
-
-

Cet mot-clé indique que les propriétés CSS applicables ne seront pas ajustées lorsque le système utilisera un mode de contraste élevé.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique et n'est décrite dans aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

La propriété -ms-high-contrast-adjust fonctionne avec la caractéristique média {{cssxref("-ms-high-contrast")}}.

diff --git a/files/fr/web/css/-ms-hyphenate-limit-chars/index.html b/files/fr/web/css/-ms-hyphenate-limit-chars/index.html deleted file mode 100644 index b95cc7f355..0000000000 --- a/files/fr/web/css/-ms-hyphenate-limit-chars/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: '-ms-hyphenate-limit-chars' -slug: Web/CSS/-ms-hyphenate-limit-chars -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-hyphenate-limit-chars ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-hyphenate-limit-chars est une propriété spécifique à Microsoft qui définit une à trois valeurs indiquant le nombre minimal de caractères utilisés pour un mot tronqué pour passer à la ligne. Si le mot n'a pas suffisamment de caractères avant ou après le passage à la ligne, aucune césure n'est appliquée sur le mot.

- -

Syntaxe

- -

La propriété -ms-hyphenate-limit-chars est définie de la façon suivante.

- -

Valeurs

- -
-
auto
-
-

Cette valeur correspond à la valeur composite 5 2 2 qui signifie que le mot doit mesurer au moins 5 caractères pour être sujet à une césure, qu'il faut au moins 2 caractères avant la césure et 2 caractères après la césure.

-
-
<integer> {1,3}
-
-

Une à trois valeurs entières (cf. {{cssxref("<integer>")}}) qui décrivent respectivement la taille minimale du mot, le nombre de caractères minimal avant la césure et le nombre de caractères minimal après la césure.

- -

Lorsque la troisième valeur n'est pas indiquée, la valeur utilisée est égale à la seconde valeur.

- -

Si la deuxième et troisième valeurs sont absentes, elles utilisent la même valeur que auto.

- -

Note : il n'est pas possible d'utiliser des valeurs négatives.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété non-standard et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

diff --git a/files/fr/web/css/-ms-hyphenate-limit-lines/index.html b/files/fr/web/css/-ms-hyphenate-limit-lines/index.html deleted file mode 100644 index cc6d74f543..0000000000 --- a/files/fr/web/css/-ms-hyphenate-limit-lines/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: '-ms-hyphenate-limit-lines' -slug: Web/CSS/-ms-hyphenate-limit-lines -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-hyphenate-limit-lines ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété -ms-hyphenate-limit-lines est une propriété spécifique à Microsoft qui indique le nombre maximum de lignes consécutives pouvant se terminer avec un mot sur deux lignes (au sein d'un même élément).

- -

Syntaxe

- -

La propriété -ms-hyphenate-limit-lines est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
no-limit
-
-

Cette valeur indique que les césures ne sont pas limitées en fonction des lignes coupées auparavant. On peut donc avoir toutes les lignes de texte de l'élément qui se terminent par une césure.

-
-
<integer>
-
-

Un entier (type {{cssxref("<integer>")}} qui indique le nombre maximal de lignes successives pouvant se terminer par une césure.

- -

Si on utilise la valeur 2 (par exemple), on ne pourra pas avoir plus de deux lignes qui se suivent et pour lesquelles la fin est un mot coupé. Lorsqu'on utilise la valeur 0, cela signifie qu'aucune ligne ne peut entraîner la césure d'un de ses mots et il n'y a donc aucune césure.

- -

Les valeurs négatives ne sont pas autorisées pour cette propriété.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique à Microsoft et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

diff --git a/files/fr/web/css/-ms-hyphenate-limit-zone/index.html b/files/fr/web/css/-ms-hyphenate-limit-zone/index.html deleted file mode 100644 index f1cd54609e..0000000000 --- a/files/fr/web/css/-ms-hyphenate-limit-zone/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: '-ms-hyphenate-limit-zone' -slug: Web/CSS/-ms-hyphenate-limit-zone -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-hyphenate-limit-zone ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-hyphenate-limit-zone est une propriété spécifique à Microsoft qui indique la largeur de la zone dans laquelle on peut appliquer une césure et un trait d'union sur les mots pour passer à la ligne.

- -

Syntaxe

- -

La propriété -ms-hyphenate-limit-zone est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
{{cssxref("percentage")}}
-
-

Un entier suivi du caractère % qui indique la taille de la zone proportionnellement à la taille de la boîte de la ligne. Les valeurs négatives ne sont pas autorisées.

-
-
{{cssxref("length")}}
-
-

Une valeur décimale suivie par une unité qui indique la largeur de la zone. Pour plus d'informations sur les valeurs possibles, voir les types de donnée en CSS. Les valeurs négatives ne sont pas autorisées.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique et n'est décrite dans aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

La propriété -ms-hyphenate-limit-zone permet de contrôler le nombre de blancs autorisés pour le passage à la ligne. La zone concernée se situe toujours sur le côté logique droit de la boîte de padding..

- -

Un mot sera uniquement sujet à une césure s'il commence à l'extérieur ou à la limite gauche de la zone.

diff --git a/files/fr/web/css/-ms-ime-align/index.html b/files/fr/web/css/-ms-ime-align/index.html deleted file mode 100644 index 9193fc87d2..0000000000 --- a/files/fr/web/css/-ms-ime-align/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: '-ms-ime-align' -slug: Web/CSS/-ms-ime-align -tags: - - CSS - - NeedsBrowserCompatibility - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-ime-align ---- -
{{Non-standard_header}}{{CSSRef}}
- -

La propriété CSS -ms-ime-align est une propriété spécifique à Microsoft qui permet d'aligner la boîte de la fenêtre pour l'Input Method Editor (IME) par rapport à l'élément sur lequel la composition IME est active.

- -

Cette extension est implémentée par Microsoft Edge et Internet Explorer 11.

- -

Les listes IME potentielles sont positionnées sur l'écran avec suffisamment d'espace pour permettre une saisie de texte. Dans certains cas, l'IME peut imposer une taille minimale.

- -

Lorsqu'on utilise -ms-ime-align: after, un IME pourra ajuster la fenêtre candidate et le comportement de la saisie clavier afin de permettre une meilleure ergonomie (en utilisant par exemple une liste candidate horizontale et en autorisant l'envoi de certaines touches à l'application pour les suggestions).

- -

Syntaxe

- -
/* Keyword values */
--ms-ime-align: auto;
--ms-ime-align: after;
-
- -

La propriété -ms-ime-align est définie avec l'un des mot-clés suivants.

- -

Valeurs

- -
-
auto
-
La valeur initiale. L'IME peut aligner la fenêtre candidate de n'importe quelle manière.
-
after
-
L'IME devrait essayer d'aligner la fenêtre candidate sous l'élément (pour les dispositions organisées avec un mode gauche à droite ou avec un mode droite à gauche).
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

{{cssinfo}}

diff --git a/files/fr/web/css/-ms-overflow-style/index.html b/files/fr/web/css/-ms-overflow-style/index.html deleted file mode 100644 index b118010d4e..0000000000 --- a/files/fr/web/css/-ms-overflow-style/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: '-ms-overflow-style' -slug: Web/CSS/-ms-overflow-style -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-overflow-style ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété -ms-overflow-style est une propriété propriétaire, spécifique à Internet Explorer et Microsoft Edge qui permet de contrôler le comportement des barres de défilement lorsque le contenu d'un élément déborde.

- -

Valeurs

- -
-
auto
-
La valeur initiale. Synonyme de inherit.
-
none
-
Les barres de défilement ne sont jamais affichées. Si l'élément dépasse, on peut toujours le faire défiler.
-
scrollbar
-
Les barres de défilement « classiques » sont affichées si le contenu de l'élément dépasse. Les barres ne se masquent pas automatiquement et ne chevauchent jamais le contenu de l'élément. Les dimensions de la zone accordée au contenu sont réduites d'autant que nécessaire pour afficher les barres de défilement.
-
-ms-autohiding-scrollbar
-
Des barres de défilement sont utilisées si le contenu dépasse et ces barres sont automatiquement masquées. C'est-à-dire qu'elles apparaissent pendant le défilement ou peu après que le pointeur ait interagit avec l'élément. Elles se « cachent » après l'arrêt de l'interaction et/ou du défilement. Lorsqu'elles sont visbles, les barres de défilement empiètent sur le contenu de l'élément.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété propriétaire liée à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/-ms-scroll-chaining/index.html b/files/fr/web/css/-ms-scroll-chaining/index.html deleted file mode 100644 index f5ade6d887..0000000000 --- a/files/fr/web/css/-ms-scroll-chaining/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: '-ms-scroll-chaining' -slug: Web/CSS/-ms-scroll-chaining -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-chaining ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété -ms-scroll-chaining est une propriété spécifique à Microsoft qui définit la façon dont le défilement se comporte lorsque l'utilisateur atteint la limite du défilement suite à une manipulation.

- -

Syntaxe

- -

La propriété -ms-scroll-chaining est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
chained
-
-

La valeur initiale. L'élément parent le plus proche commence à défiler lorsque l'utilisateur atteint la limite. Il n'y a pas d'effet de rebond.

-
-
none
-
-

Un effet de rebond est utilisé lorsque l'utilisateur atteint la limite de défilement.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

Dans l'exemple qui suit, le conteneur de l'image a -ms-scroll-chaining property qui vaut chained et c'est donc l'élément parent qui poursuivra le défilement. Si on avait utilisé none, un effet de blocage avec rebondissement aurait été utilisé. Pour plus d'informations, voir un exemple de défilement, déplacement, zoom en HTML.

- -
.imageContainer {
-  -ms-scroll-chaining: chained;
-  -ms-overflow-style: none;
-  -ms-content-zooming: zoom;
-  -ms-scroll-rails: none;
-  -ms-content-zoom-limit-min: 100%;
-  -ms-content-zoom-limit-max: 500%;
-  -ms-scroll-snap-type: proximity;
-  -ms-scroll-snap-points-x: snapList(100%, 200%, 300%, 400%, 500%);
-  -ms-overflow-style: none;
-  width: 480px;
-  height: 270px;
-  overflow: auto;
-}
-
- -

Spécifications

- -

Cette propriété est spécifique à Microsoft et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété ne s'applique qu'aux contrôles tactiles. Quelle que soit la valeur de –ms-scroll-chaining, les contrôles clavier ne permettront pas l'enchaînement du défilement et la navigation à la souris entraînera toujours le défilement sur l'élément ancêtre le plus proche.

- -

Cette propriété n'a aucun effet sur les éléments qui ne défilent pas.

- -

Cette propriété est uniquement disponible pour Windows 8 ou les versions ultérieures.

diff --git a/files/fr/web/css/-ms-scroll-limit-x-max/index.html b/files/fr/web/css/-ms-scroll-limit-x-max/index.html deleted file mode 100644 index 88f3276fda..0000000000 --- a/files/fr/web/css/-ms-scroll-limit-x-max/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: '-ms-scroll-limit-x-max' -slug: Web/CSS/-ms-scroll-limit-x-max -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-limit-x-max ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-scroll-limit-x-max est une propriété spécifique à Microsoft qui indique la valeur maximum pour la propriété {{domxref("Element.scrollLeft")}}.

- -

Cette propriété est accessible en lecture et en écriture.

- -

Syntaxe

- -

La propriété -ms-scroll-limit-x-max est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
auto
-
-

La valeur maximale pour scrollLeft est égale à scrollWidth.

-
-
{{cssxref("length")}}
-
-

La longueur maximale choisie pour scrollLeft.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a aucun effet sur les éléments qui ne défilent pas.

- -

Le comportement choisi avec -ms-scroll-limit-x-max s'appliquera uniquement avec {{cssxref("msContentZoomFactor")}} qui vaut 1 ; pour les autres facteurs de zoom, le comportement de la propriété n'est pas défini.

- -

Cette propriété est uniquement disponible à partir de Windows 8.

diff --git a/files/fr/web/css/-ms-scroll-limit-x-min/index.html b/files/fr/web/css/-ms-scroll-limit-x-min/index.html deleted file mode 100644 index b9f22df94e..0000000000 --- a/files/fr/web/css/-ms-scroll-limit-x-min/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: '-ms-scroll-limit-x-min' -slug: Web/CSS/-ms-scroll-limit-x-min -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-limit-x-min ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété -ms-scroll-limit-x-min est une propriété spécifique à Microsoft qui indique la valeur minimale pour la propriété {{domxref("Element.scrollLeft")}}.

- -

Syntaxe

- -

La propriété -ms-scroll-limit-x-min est définie avec une longueur.

- -

Valeurs

- -
-
{{cssxref("length")}}
-
-

La valeur minimale pour la propriété scrollLeft. Si la valeur fournie est négative, c'est 0 qui sera utilisé.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a aucun effet sur les éléments qui ne défilent pas.

- -

Le comportement choisi avec -ms-scroll-limit-x-min s'appliquera uniquement avec {{cssxref("msContentZoomFactor")}} qui vaut 1 ; pour les autres facteurs de zoom, le comportement de la propriété n'est pas défini.

- -

Cette propriété est uniquement disponible à partir de Windows 8.

diff --git a/files/fr/web/css/-ms-scroll-limit-y-max/index.html b/files/fr/web/css/-ms-scroll-limit-y-max/index.html deleted file mode 100644 index c677901f71..0000000000 --- a/files/fr/web/css/-ms-scroll-limit-y-max/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: '-ms-scroll-limit-y-max' -slug: Web/CSS/-ms-scroll-limit-y-max -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-limit-y-max ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-scroll-limit-y-max est une propriété spécifique à Microsoft qui indique la valeur maximum pour la propriété {{domxref("Element.scrollTop")}}.

- -

Syntaxe

- -

La propriété -ms-scroll-limit-y-max est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
auto
-
-

La valeur maximale pour scrollTop est égale à {{domxref("Element.scrollHeight")}}.

-
-
{{cssxref("length")}}
-
-

La longueur maximale choisie pour scrollTop.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a aucun effet sur les éléments qui ne défilent pas.

- -

Le comportement choisi avec -ms-scroll-limit-y-max s'appliquera uniquement avec {{cssxref("msContentZoomFactor")}} qui vaut 1 ; pour les autres facteurs de zoom, le comportement de la propriété n'est pas défini.

- -

Cette propriété est uniquement disponible à partir de Windows 8.

diff --git a/files/fr/web/css/-ms-scroll-limit-y-min/index.html b/files/fr/web/css/-ms-scroll-limit-y-min/index.html deleted file mode 100644 index 85150a1660..0000000000 --- a/files/fr/web/css/-ms-scroll-limit-y-min/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: '-ms-scroll-limit-y-min' -slug: Web/CSS/-ms-scroll-limit-y-min -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-limit-y-min ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété -ms-scroll-limit-y-min est une propriété spécifique à Microsoft qui indique la valeur minimale pour la propriété {{domxref("Element.scrollTop")}}.

- -

Syntaxe

- -

La propriété -ms-scroll-limit-y-min est définie avec une longueur.

- -

Valeurs

- -
-
{{cssxref("length")}}
-
-

La valeur minimale pour la propriété scrollTop. Si la valeur fournie est négative, c'est 0 qui sera utilisé.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a aucun effet sur les éléments qui ne défilent pas.

- -

Le comportement choisi avec -ms-scroll-limit-y-min s'appliquera uniquement avec {{cssxref("msContentZoomFactor")}} qui vaut 1 ; pour les autres facteurs de zoom, le comportement de la propriété n'est pas défini.

- -

Cette propriété est uniquement disponible à partir de Windows 8.

diff --git a/files/fr/web/css/-ms-scroll-limit/index.html b/files/fr/web/css/-ms-scroll-limit/index.html deleted file mode 100644 index b541233201..0000000000 --- a/files/fr/web/css/-ms-scroll-limit/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: '-ms-scroll-limit' -slug: Web/CSS/-ms-scroll-limit -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-limit ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS -ms-scroll-limit est une propriété raccourcie spécifique à Microsoft qui définit les valeurs de {{cssxref("-ms-scroll-limit-x-min")}}, {{cssxref("-ms-scroll-limit-y-min")}}, {{cssxref("-ms-scroll-limit-x-max")}} et {{cssxref("-ms-scroll-limit-y-max")}}.

- -

Syntaxe

- -

La propriété -ms-scroll-limit est définie avec une ou plusieurs valeurs de limite de défilmeent dans l'ordre et séparées par des espaces.

- -

Valeurs

- -
-
-ms-scroll-limit-x-min
-
-

La valeur utilisée pour la propriété {{cssxref("-ms-scroll-limit-x-min")}}.

-
-
-ms-scroll-limit-y-min
-
-

La valeur utilisée pour la propriété {{cssxref("-ms-scroll-limit-y-min")}}.

-
-
-ms-scroll-limit-x-max
-
-

La valeur utilisée pour la propriété {{cssxref("-ms-scroll-limit-x-max")}}.

-
-
-ms-scroll-limit-y-max
-
-

La valeur utilisée pour la propriété {{cssxref("-ms-scroll-limit-y-max")}}.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique à Microsoft et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a aucun effet sur les éléments qui ne défilent pas.

- -

Le comportement choisi avec -ms-scroll-limit s'appliquera uniquement avec {{cssxref("msContentZoomFactor")}} qui vaut 1 ; pour les autres facteurs de zoom, le comportement de la propriété n'est pas défini.

- -

Cette propriété est uniquement disponible à partir de Windows 8.

diff --git a/files/fr/web/css/-ms-scroll-rails/index.html b/files/fr/web/css/-ms-scroll-rails/index.html deleted file mode 100644 index c5441922c5..0000000000 --- a/files/fr/web/css/-ms-scroll-rails/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: '-ms-scroll-rails' -slug: Web/CSS/-ms-scroll-rails -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-rails ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété -ms-scroll-rails est une propriété spécifique à Microsoft qui indique si le défilement est contraint sur l'axe principal du déplacement.

- -

Cette propriété est accessible en lecture et en écriture.

- -

Syntaxe

- -

La propriété -ms-scroll-rails est définie avec l'une des valeurs suivantes.

- -

Valeurs

- -
-
none
-
-

Le contenu défile en suivant exactement le doigt de l'utilisateur. Cette valeur permet un déplacement libre.

-
-
railed
-
-

Le défilement est contraint sur l'axe principal. C'est la valeur par défaut.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété n'a adeucun effet sur les éléments qu'on ne peut pas faire défiler.

- -

À partir de Windows 8.1, cette propriété est prise en charge pour les interactions au pavé tactile.

- -

Cette propriété est uniquement disponible à partir de Windows 8.

diff --git a/files/fr/web/css/-ms-scroll-snap-points-x/index.html b/files/fr/web/css/-ms-scroll-snap-points-x/index.html deleted file mode 100644 index 85d49351c5..0000000000 --- a/files/fr/web/css/-ms-scroll-snap-points-x/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: '-ms-scroll-snap-points-x' -slug: Web/CSS/-ms-scroll-snap-points-x -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-snap-points-x ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété CSS -ms-scroll-snap-points-x est une propriété spécifique à Microsoft qui définit l'emplacement des points d'accroche le long de l'axe horizontal.

- -

Syntaxe

- -

Valeurs

- -
-

Note : Une valeur de type <length-percentage> est une valeur de type {{cssxref("<length>")}} ou une valeur de type {{cssxref("<percentaqe>")}}.

-
- -
-
snapInterval( <length-percentage>, <length-percentage> )
-
-

Cette forme permet d'indiquer la position d'un point d'accroche puis l'intervalle entre les points d'accroche.

- -
    -
  • La première valeur indique l'emplacement du premier point d'accroche.
  • -
  • La seconde valeur indique la distance entre chaque point d'accroche qui suit ou précède (c'est-à-dire à gauche et à droite du point d'accroche initial).
  • -
-
-
snapList( <length-percentage># )
-
-

Cette forme permet d'indiquer l'ensemble des points d'accroche comme une liste de valeurs séparées par des virgules. Chaque valeur représente un facteur de zoom.

- -
    -
  • Si la valeur est inférieure à {{CSSXref("-ms-scroll-limit-x-min")}}, {{CSSXref("-ms-scroll-limit-x-min")}} sera utilisée.
  • -
  • Si la valeur est supérieure à {{CSSXref("-ms-scroll-limit-x-max")}}, {{CSSXref("-ms-scroll-limit-x-max")}} sera utilisée.
  • -
-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Exemples

- -

Dans cet exemple, on illustre les deux types de valeurs possibles pour -ms-scroll-snap-points-x. Dans le premier sélecteur, le premier point d'accroche se situe à 0% et l'intervalle est défini à 100%. Dans le second sélecteur, chaque point d'accroche est défini séparément (à 100%, 200%, 300%, et ainsi de suite).

- -
.container {
-  overflow-x: auto;
-  overflow-y: hidden;
-  -ms-scroll-snap-type: mandatory;
-  -ms-scroll-snap-points-x: snapInterval(0%, 100%);
-  width: 480px;
-  height: 270px;
-}
-
-.imageContainer {
-  -ms-scroll-chaining: chained;
-  -ms-overflow-style: none;
-  -ms-content-zooming: zoom;
-  -ms-scroll-rails: none;
-  -ms-scroll-limit-x-min: 100%;
-  -ms-scroll-limit-x-max: 500%;
-  -ms-scroll-snap-type: proximity;
-  -ms-scroll-snap-points-x: snapList(100%, 200%, 300%, 400%, 500%);
-  -ms-overflow-style: none;
-  width: 480px;
-  height: 270px;
-  overflow: auto;
-}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Windows 8. Elle n'a aucun effet pour les éléments qui ne permettent pas d'utiliser un ascenseur.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions à la souris, au clavier ou au pavé tactile.

diff --git a/files/fr/web/css/-ms-scroll-snap-points-y/index.html b/files/fr/web/css/-ms-scroll-snap-points-y/index.html deleted file mode 100644 index 6568891ed1..0000000000 --- a/files/fr/web/css/-ms-scroll-snap-points-y/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: '-ms-scroll-snap-points-y' -slug: Web/CSS/-ms-scroll-snap-points-y -tags: - - CSS - - Non-standard - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-snap-points-y ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété CSS -ms-scroll-snap-points-y est une propriété spécifique à Microsoft qui définit l'emplacement des points d'accroche le long de l'axe vertical.

- -

Syntaxe

- -

Valeurs

- -
-

Note : Une valeur de type <length-percentage> est une valeur de type {{cssxref("<length>")}} ou une valeur de type {{cssxref("<percentaqe>")}}.

-
- -
-
snapInterval( <length-percentage>, <length-percentage> )
-
-

Cette forme permet d'indiquer la position d'un point d'accroche puis l'intervalle entre les points d'accroche.

- -
    -
  • La première valeur indique l'emplacement du premier point d'accroche.
  • -
  • La seconde valeur indique la distance entre chaque point d'accroche qui suit ou précède (c'est-à-dire au dessus et en dessous du point d'accroche initial).
  • -
-
-
snapList( <length-percentage># )
-
-

Cette forme permet d'indiquer l'ensemble des points d'accroche comme une liste de valeurs séparées par des virgules. Chaque valeur représente un facteur de zoom.

- -
    -
  • Si la valeur est inférieure à {{CSSXref("-ms-scroll-limit-y-min")}}, {{CSSXref("-ms-scroll-limit-y-min")}} sera utilisée.
  • -
  • Si la valeur est supérieure à {{CSSXref("-ms-scroll-limit-y-max")}}, {{CSSXref("-ms-scroll-limit-y-max")}} sera utilisée.
  • -
-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Exemples

- -

Dans cet exemple, on illustre les deux types de valeurs possibles pour -ms-scroll-snap-points-y. Dans le premier sélecteur, le premier point d'accroche se situe à 0% et l'intervalle est défini à 100%. Dans le second sélecteur, chaque point d'accroche est défini séparément (à 100%, 200%, 300%, et ainsi de suite).

- -
.container {
-  overflow-x: auto;
-  overflow-y: hidden;
-  -ms-scroll-snap-type: mandatory;
-  -ms-scroll-snap-points-y: snapInterval(0%, 100%);
-  width: 480px;
-  height: 270px;
-}
-
-.imageContainer {
-  -ms-scroll-chaining: chained;
-  -ms-overflow-style: none;
-  -ms-content-zooming: zoom;
-  -ms-scroll-rails: none;
-  -ms-scroll-limit-x-min: 100%;
-  -ms-scroll-limit-x-max: 500%;
-  -ms-scroll-snap-type: proximity;
-  -ms-scroll-snap-points-y: snapList(100%, 200%, 300%, 400%, 500%);
-  -ms-overflow-style: none;
-  width: 480px;
-  height: 270px;
-  overflow: auto;
-}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Windows 8. Elle n'a aucun effet pour les éléments qui ne permettent pas d'utiliser un ascenseur.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions à la souris, au clavier ou au pavé tactile.

- -

Voir aussi

- - diff --git a/files/fr/web/css/-ms-scroll-snap-x/index.html b/files/fr/web/css/-ms-scroll-snap-x/index.html deleted file mode 100644 index 6b889bb584..0000000000 --- a/files/fr/web/css/-ms-scroll-snap-x/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: '-ms-scroll-snap-x' -slug: Web/CSS/-ms-scroll-snap-x -tags: - - CSS - - Non-standard - - Propriété raccourcie - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-snap-x ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété raccourcie -ms-scroll-snap-x est une propriété spécifique à Microsoft qui définit les valeurs des propriétés {{cssxref("-ms-scroll-snap-type")}} and {{cssxref("-ms-scroll-snap-points-x")}}.

- -

Syntaxe

- -

Valeurs

- -

La propriété raccourcie -ms-scroll-snap-x est définie avec une ou deux des valeurs suivantes, dans cet ordre et séparées par des espaces.

- -
-
-ms-scroll-snap-type
-
-

La valeur de la propriété {{cssxref("-ms-scroll-snap-type")}}.

-
-
-ms-scroll-snap-points-x
-
-

La valeur de la propriété {{cssxref("-ms-scroll-snap-points-x")}}.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Exemples

- -

La proprirété -ms-scroll-snap-x est une propriété raccourcie. Les deux sélecteurs du fragment de code suivant auront le même effet.

- -
.scroll1 {
-  -ms-scroll-snap-type: proximity;
-  -ms-scroll-snap-points-x: snapList(100%, 200%, 300%, 400%, 500%);
-}
-
-.scroll2 {
-  -ms-scroll-snap-x: proximity snapList(100%, 200%, 300%, 400%, 500%);
-}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Windows 8. Elle n'a aucun effet pour les éléments qui ne permettent pas d'utiliser un ascenseur.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions à la souris, au clavier ou au pavé tactile.

diff --git a/files/fr/web/css/-ms-scroll-snap-y/index.html b/files/fr/web/css/-ms-scroll-snap-y/index.html deleted file mode 100644 index de5c0836cb..0000000000 --- a/files/fr/web/css/-ms-scroll-snap-y/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: '-ms-scroll-snap-y' -slug: Web/CSS/-ms-scroll-snap-y -tags: - - CSS - - Non-standard - - Propriété raccourcie - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-snap-y ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété raccourcie -ms-scroll-snap-y est une propriété spécifique à Microsoft qui définit les valeurs des propriétés {{cssxref("-ms-scroll-snap-type")}} and {{cssxref("-ms-scroll-snap-points-y")}}.

- -

Syntaxe

- -

Valeurs

- -

La propriété raccourcie -ms-scroll-snap-y est définie avec une ou deux des valeurs suivantes, dans cet ordre et séparées par des espaces.

- -
-
-ms-scroll-snap-type
-
-

La valeur de la propriété {{cssxref("-ms-scroll-snap-type")}}.

-
-
-ms-scroll-snap-points-y
-
-

La valeur de la propriété {{cssxref("-ms-scroll-snap-points-y")}}.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Exemples

- -

La proprirété -ms-scroll-snap-y est une propriété raccourcie. Les deux sélecteurs du fragment de code suivant auront le même effet.

- -
.scroll1 {
-  -ms-scroll-snap-type: proximity;
-  -ms-scroll-snap-points-y: snapList(100%, 200%, 300%, 400%, 500%);
-}
-
-.scroll2 {
-  -ms-scroll-snap-y: proximity snapList(100%, 200%, 300%, 400%, 500%);
-}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Windows 8. Elle n'a aucun effet pour les éléments qui ne permettent pas d'utiliser un ascenseur.

- -

À partir de Windows 8.1, cette propriété est également prise en charge pour les interactions à la souris, au clavier ou au pavé tactile.

diff --git a/files/fr/web/css/-ms-scroll-translation/index.html b/files/fr/web/css/-ms-scroll-translation/index.html deleted file mode 100644 index 0246236b59..0000000000 --- a/files/fr/web/css/-ms-scroll-translation/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: '-ms-scroll-translation' -slug: Web/CSS/-ms-scroll-translation -tags: - - CSS - - Non-standard - - Reference -translation_of: Archive/Web/CSS/-ms-scroll-translation ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété CSS -ms-scroll-translation est une propriété spécifique à Microsoft qui indique si une translation verticale / horizontale est appliquée lors du défilement sur l'élément ciblé.

- -

{{cssinfo}}

- -

Syntaxe

- -

Valeurs

- -
-
vertical-to-horizontal
-
-

Une translation verticale/horizontale est appliquée lorsque c'est pertinent.

-
-
none
-
-

Aucune translation n'est appliquée. C'est la valeur initiale pour l'élément {{HTMLElement("html")}}.

-
-
inherit
-
-

La valeur initiale : la valeur de la propriété est héritée via la valeur de l'élément parent.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Windows 8. Elle n'a aucun effet pour les éléments qui ne permettent pas d'utiliser un ascenseur

- -

Si le code JavaScript de la page écoute les évènements DOM liés au défilement, les évènements relatifs au défilement vertical et au défilement horizontal sont distincts et correspondent à l'axe selon lequel l'utilisateur a défilé. La propriété -ms-scroll-translation, avec la valeur vertical-to-horizontal, permet de transformer les évènements de défilement vertical en évènements de défilement horizontal.

- -

Cette propriété n'a pas d'impact lorsqu'on navigue avec le clavier.

- -

Les modèles CSS par défaut pour les applications Windows qui utilisent JavaScript, "ui-light.css" et "ui-dark.css" utilisent la valeur vertical-to-horizontal sur l'élément {{HTMLElement("html")}}.

diff --git a/files/fr/web/css/-ms-scrollbar-3dlight-color/index.html b/files/fr/web/css/-ms-scrollbar-3dlight-color/index.html deleted file mode 100644 index 5caa81ebc2..0000000000 --- a/files/fr/web/css/-ms-scrollbar-3dlight-color/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: '-ms-scrollbar-3dlight-color' -slug: Web/CSS/-ms-scrollbar-3dlight-color -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-3dlight-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété -ms-scrollbar-3dlight-color est une propriété spécifique à Microsoft qui définit la couleur pour les bords haut et gauche de la boîte de défilement et pour les flèches de la barre de défilement.

- -

Syntaxe

- -

La valeur de -ms-scrollbar-3dlight-color est définie avec une couleur.

- -

Valeurs

- -
-
<color>
-
-

Une couleur (cf. type {{cssxref("<color>")}}) qui sera utilisée pour les bords gauche et haut de la boîte de défilement et pour les flèches de l'ascenseur.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

L'exemple qui suit illustre comment appliquer la propriété -ms-scrollbar-3dlight-color à un élément {{HTMLElement("textarea")}}.

- -

HTML

- -
<textarea class="Blue3dLight">
-  The top and left edges of the thumb and
-  button-face elements in the scroll bar for
-  this element will be blue.
-</textarea>
- -

CSS

- -
.Blue3dLight {
-  -ms-scrollbar-3dlight-color: blue;
-  scrollbar-3dlight-color: blue; /* Use the standard when available. */
-}
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-3dlight-color")}}

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Internet Explorer 8.

- -

La boîte de défilement est la boîte carrée dans laquelle une barre de défilement peut être déplacée de haut en bas ou de gauche à droite afin de modifier la position du contenu sur l'écran. Les flèches de défilement sont situées aux extrémités de l'ascenseur et permettent de faire défiler le contenu.

- -

Cette propriété s'applique aux éléments qui affichent un ascenseur (notamment via la propriété {{cssxref("overflow")}}).

diff --git a/files/fr/web/css/-ms-scrollbar-arrow-color/index.html b/files/fr/web/css/-ms-scrollbar-arrow-color/index.html deleted file mode 100644 index cc67bd8bde..0000000000 --- a/files/fr/web/css/-ms-scrollbar-arrow-color/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: '-ms-scrollbar-arrow-color' -slug: Web/CSS/-ms-scrollbar-arrow-color -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-arrow-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété CSS -ms-scrollbar-arrow-color est une propriété spécifique à Microsoft qui définit la couleur des flèches pour les extrêmités des barres de défilement.

- -

Syntaxe

- -

Valeurs

- -
-
<color>
-
-

La couleur à utiliser pour les flèches des barres de défilement, voir {{cssxref("<color>")}}.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

L'exemple qui suit illustre comment utiliser -ms-scrollbar-arrow-color et {{cssxref("-ms-scrollbar-face-color")}} afin d'afficher une boîte avec une barre de défilement avec un curseur et des flèches bleues d'une part et une boîte avec une barre de défilement avec un curseur et des flèches vertes d'autre part.

- -

CSS

- -
div {
-  width: 150px;
-  height: 150px;
-  overflow-y: scroll;
-  border-style: solid;
-  border-width: thin;
-  font-family: sans-serif;
-  float: left;
-  margin-right: 10px;
-}
-.blueScrollBox {
-  scrollbar-face-color: blue;
-  scrollbar-arrow-color: blue;
-}
-.greenScrollBox {
-  scrollbar-face-color: green;
-  scrollbar-arrow-color: green;
-}
-
- -

HTML

- -
<body>
-  <div class="blueScrollBox">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-  <div class="greenScrollBox">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-</body>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

Si votre navigateur ne permet de visualiser le résultat, voici une image statique :

- -

Image for -ms-scrollbar-arrow-color usage example

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-arrow-color")}}

- -

Notes

- -

Pour IE 8, la propriété -ms-scrollbar-arrow-color est une extension et peut être utilisée comme synonyme de scrollbar-arrow-color en mode standard.

- -

Les flèches de défilement sont présentes sur les boutons situés à chaque extrêmité de la barre de défilement.

- -

Cette propriété s'applique aux éléments affichant une barre de défilement. Pour activer le défilement sur différents éléments, voir la propriété {{cssxref("overflow")}}.

diff --git a/files/fr/web/css/-ms-scrollbar-base-color/index.html b/files/fr/web/css/-ms-scrollbar-base-color/index.html deleted file mode 100644 index df5cb77dc5..0000000000 --- a/files/fr/web/css/-ms-scrollbar-base-color/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: '-ms-scrollbar-base-color' -slug: Web/CSS/-ms-scrollbar-base-color -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-base-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété CSS -ms-scrollbar-base-color est une propriété spécifique à Microsoft qui indique la couleur de base à utiliser pour les principaux composants d'une barre de défilement.

- -

Syntaxe

- -

Valeurs

- -
-
<color>
-
-

La couleur de base à utiliser pour les principaux composants de la barre de défilement, voir {{cssxref("<color>")}}.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

Dans cet exemple, on utilise les propriétés -ms-scrollbar-base-color et {{cssxref("-ms-scrollbar-arrow-color")}} afin de créer deux objets {{HTMLElement("div")}} ayant chacun un thème différent pour les barres de défilement.

- -

CSS

- -
div {
-  width: 150px;
-  height: 150px;
-  border-style: solid;
-  border-width: thin;
-  overflow-y: scroll;
-  font-family: sans-serif;
-  float: left;
-  margin-right: 10px;
-}
-.aquaScroll {
-  scrollbar-base-color: aqua;
-  scrollbar-arrow-color: blue;
-  border-color: blue;
-}
-.bisqueScroll {
-  scrollbar-base-color: bisque;
-  scrollbar-arrow-color: red;
-  border-color: red;
-}
-
- -

CSS

- -
<body>
-  <div class="aquaScroll">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-  <div class="bisqueScroll">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-</body>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

L'image suivante illustre le résultat obtenu. On voit que scrollbar-base-color fournit une couleur de base et que le navigateur décline cette couleur sur différents tons pour les différents composants.

- -

Image for -ms-scrollbar-base-color example

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-base-color")}}

- -

Notes

- -

Pour IE 8 et les versions ultérieures, la propriété -ms-scrollbar-base-color est une extension et peut être utilisée comme synonyme de scrollbar-base-color en mode standard.

- -

Cette propriété s'applique aux éléments affichant une barre de défilement. Pour activer le défilement sur différents éléments, voir la propriété {{cssxref("overflow")}}.

diff --git a/files/fr/web/css/-ms-scrollbar-darkshadow-color/index.html b/files/fr/web/css/-ms-scrollbar-darkshadow-color/index.html deleted file mode 100644 index a2346346f6..0000000000 --- a/files/fr/web/css/-ms-scrollbar-darkshadow-color/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: '-ms-scrollbar-darkshadow-color' -slug: Web/CSS/-ms-scrollbar-darkshadow-color -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-darkshadow-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété -ms-scrollbar-darkshadow-color est une propriété spécifique à Microsoft qui définit la couleur de la gouttière pour l'ascenseur.

- -

Syntaxe

- -

La propriété -ms-scrollbar-darkshadow-color est définie avec une couleur.

- -

Valeurs

- -
-
<color>
-
-

La couleur de la gouttière (cf. le type {{cssxref("<color>")}} pour les valeurs possibles).

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

HTML

- -
<textarea class="BlueShadow">
-  The gutter elements in the scroll bar for this
-  element will be blue.
-</textarea>
- -

CSS

- -
.BlueShadow {
-  scrollbar-darkshadow-color: blue;
-}
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-darkshadow-color")}}

- -

Notes

- -

Cette propriété est disponible à partir de Internet Explorer 8.

- -

La gouttière est l'espace entre la piste et les bords bas et droit de la boîte de défilement et des flèches de l'ascenseur. La couleur -ms-scrollbar-darkshadow-color apparaît en dehors de {{cssxref("-ms-scrollbar-shadow-color")}}.

- -

Cette propriété s'applique aux éléments qui affichent un ascenseur (notamment via la propriété {{cssxref("overflow")}}).

diff --git a/files/fr/web/css/-ms-scrollbar-face-color/index.html b/files/fr/web/css/-ms-scrollbar-face-color/index.html deleted file mode 100644 index 6a2929243f..0000000000 --- a/files/fr/web/css/-ms-scrollbar-face-color/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: '-ms-scrollbar-face-color' -slug: Web/CSS/-ms-scrollbar-face-color -tags: - - CSS - - Non-standard - - Obsolete - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-face-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété CSS -ms-scrollbar-face-color est une propriété spécifique à Microsoft qui indique la couleur du curseur de défilement et des flèches de la barre de défilement.

- -

Syntaxe

- -

Valeurs

- -
-
<color>
-
-

La couleur à utiliser pour le curseur et les flèches, cf. {{cssxref("<color>")}}.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

Dans cet exemple, on utilise -ms-scrollbar-face-color et {{cssxref("-ms-scrollbar-arrow-color")}} afin de créer deux styles de barre de défilement pour deux boîtes : l'une verte et l'autre bleue.

- -

CSS

- -
div {
-  width: 150px;
-  height: 150px;
-  overflow-y: scroll;
-  border-style: solid;
-  border-width: thin;
-  font-family: sans-serif;
-  float: left;
-  margin-right: 10px;
-}
-.blueScrollBox {
-  scrollbar-face-color: blue;
-  scrollbar-arrow-color: blue;
-}
-.greenScrollBox {
-  scrollbar-face-color: green;
-  scrollbar-arrow-color: green;
-}
-
- -

HTML

- -
<body>
-  <div class="blueScrollBox">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-  <div class="greenScrollBox">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-</body>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

L'image qui suit permet d'avoir un aperçu du résultat si votre navigateur n'est pas compatible avec ces fonctionnalités.

- -

Image for -ms-scrollbar-face-color example

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-face-color")}}

- -

Notes

- -

Cette fonctionnalité est prise en charge à partir de IE 8. Pour IE 8, la propriété -ms-scrollbar-face-color est une extension et peut être utilisée comme synonyme de scrollbar-face-color en mode standard.

- -

Cette propriété s'applique aux éléments affichant une barre de défilement. Pour activer le défilement sur différents éléments, voir la propriété {{cssxref("overflow")}}.

diff --git a/files/fr/web/css/-ms-scrollbar-highlight-color/index.html b/files/fr/web/css/-ms-scrollbar-highlight-color/index.html deleted file mode 100644 index 43a0ea824b..0000000000 --- a/files/fr/web/css/-ms-scrollbar-highlight-color/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: '-ms-scrollbar-highlight-color' -slug: Web/CSS/-ms-scrollbar-highlight-color -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-highlight-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété CSS -ms-scrollbar-highlight-color est une propriété spécifique à Microsoft qui définit la couleur pour la piste et le contour d'une barre de défilement.

- -

Syntaxe

- -

Valeurs

- -
-
<color>
-
-

La couleur à utiliser pour le contour et la piste de la barre de défilement, cf. {{cssxref("<color>")}}.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

Dans l'exemple qui suit, on utilise -ms-scrollbar-highlight-color, {{CSSXref("-ms-scrollbar-face-color")}} ainsi que {{CSSXref("-ms-scrollbar-arrow-color")}} afin de créer deux {{HTMLElement("div")}} ayant chacun un thème différent pour les barres de défilement.

- -

CSS

- -
div {
-  width: 150px;
-  height: 150px;
-  border-style: solid;
-  border-width: thin;
-  overflow-y: scroll;
-  font-family: sans-serif;
-  float: left;
-  margin-right: 10px;
-}
-.blueScroll {
-  -ms-scrollbar-highlight-color: aqua;
-  -ms-scrollbar-face-color: blue;
-  -ms-scrollbar-arrow-color: blue;
-  border-color: blue;
-}
-.redScroll {
-  -ms-scrollbar-highlight-color: bisque;
-  -ms-scrollbar-face-color: red;
-  -ms-scrollbar-arrow-color: red;
-  border-color: red;
-}
- -

HTML

- -
<body>
-  <div class="blueScroll">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-  <div class="redScroll">
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-  </div>
-</body>
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

L'image qui suit permet d'avoir un aperçu du résultat si votre navigateur n'est pas compatible avec ces fonctionnalités.

- -

Image for -ms-scrollbar-highlight-color example

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-highlight-color")}}

- -

Notes

- -

Pour IE 8, la propriété -ms-scrollbar-highlight-color est une extension et peut être utilisée comme synonyme de scrollbar-highlight-color en mode standard.

- -

Cette propriété s'applique aux éléments affichant une barre de défilement. Pour activer le défilement sur différents éléments, voir la propriété {{cssxref("overflow")}}.

diff --git a/files/fr/web/css/-ms-scrollbar-shadow-color/index.html b/files/fr/web/css/-ms-scrollbar-shadow-color/index.html deleted file mode 100644 index 126fe6fb7f..0000000000 --- a/files/fr/web/css/-ms-scrollbar-shadow-color/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: '-ms-scrollbar-shadow-color' -slug: Web/CSS/-ms-scrollbar-shadow-color -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-shadow-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété -ms-scrollbar-shadow-color est une propriété spécifique à Microsoft qui définit la couleur pour les bords bas et droit de la boîte de défilement et pour les flèches de la barre de défilement.

- -

Syntaxe

- -

La valeur de -ms-scrollbar-shadow-color est définie avec une couleur.

- -

Valeurs

- -
-
<color>
-
-

Une couleur (cf. type {{cssxref("<color>")}}) qui sera utilisée pour les bords droit et bas de la boîte de défilement et pour les flèches de l'ascenseur.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

L'exemple qui suit illustre comment appliquer la propriété -ms-scrollbar-shadow-color à un élément {{HTMLElement("textarea")}}.

- -

HTML

- -
<textarea class="BlueShadow">
- Placeat reiciendis impedit quo qui ea et. Cum quia aut
- non ut est ducimus necessitatibus
-</textarea>
- -

CSS

- -
.BlueShadow {
-  -ms-scrollbar-shadow-color: blue;
-}
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-shadow-color")}}

- -

Notes

- -

Cette propriété est disponible à partir de Internet Explorer 8. La propriété -ms-scrollbar-shadow-color est une extension spécifique à CSS et, sous le mode Standard d'IE8, peut être utilisée comme synonyme de scrollbar-shadow-color.

- -

La boîte de défilement est la boîte carrée dans laquelle une barre de défilement peut être déplacée de haut en bas ou de gauche à droite afin de modifier la position du contenu sur l'écran. Les flèches de défilement sont situées aux extrémités de l'ascenseur et permettent de faire défiler le contenu.

- -

Cette propriété s'applique aux éléments qui affichent un ascenseur (notamment via la propriété {{cssxref("overflow")}}).

diff --git a/files/fr/web/css/-ms-scrollbar-track-color/index.html b/files/fr/web/css/-ms-scrollbar-track-color/index.html deleted file mode 100644 index 557cf14a6b..0000000000 --- a/files/fr/web/css/-ms-scrollbar-track-color/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: '-ms-scrollbar-track-color' -slug: Web/CSS/-ms-scrollbar-track-color -tags: - - CSS - - Déprécié - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-scrollbar-track-color ---- -
{{CSSRef}}{{Non-standard_header}}{{Deprecated_Header}}
- -

La propriété CSS -ms-scrollbar-track-color est une propriété spécifique à Microsoft qui permet de définir la couleur de la piste utilisée pour les barres de défilement.

- -

Syntaxe

- -

Valeurs

- -
-
<color>
-
-

La couleur à utiliser pour la piste (cf. {{cssxref("<color>")}}).

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

L'exemple qui suit utilise -ms-scrollbar-track-color, {{cssxref("-ms-scrollbar-face-color")}} ainsi que {{cssxref("-ms-scrollbar-arrow-color")}} afin de créer deux éléments {{HTMLElement("div")}} disposants d'un thème chacun pour les barres de défilement.

- -

CSS

- -
div {
-  width: 150px;
-  height: 150px;
-  border-style: solid;
-  border-width: thin;
-  overflow-y: scroll;
-  font-family: sans-serif;
-  float: left;
-  margin-right: 10px;
-}
-.blueScroll {
-  -ms-scrollbar-highlight-color: aqua;
-  -ms-scrollbar-face-color: blue;
-  -ms-scrollbar-arrow-color: blue;
-  border-color: blue;
-}
-.redScroll {
-  -ms-scrollbar-highlight-color: bisque;
-  -ms-scrollbar-face-color: red;
-  -ms-scrollbar-arrow-color: red;
-  border-color: red;
-}
-
- -

HTML

- -
<div class="blueScroll">
-  Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-</div>
-<div class="redScroll">
-  Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-</div>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples")}}

- -

L'image suivante illustre le résultat obtenu :

- -

Image for -scrollbar-track-color example

- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.-ms-scrollbar-track-color")}}

- -

Notes

- -

Pour IE 8, la propriété -ms-scrollbar-track-color est une extension et peut être utilisée comme synonyme de scrollbar-track-color en mode standard.

- -

La piste est l'élément de la barre sur laquelle on déplace le curseur verticalement ou horizontalement

- -

Cette propriété s'applique aux éléments affichant une barre de défilement. Pour activer le défilement sur différents éléments, voir la propriété {{CSSXref("overflow")}}.

diff --git a/files/fr/web/css/-ms-text-autospace/index.html b/files/fr/web/css/-ms-text-autospace/index.html deleted file mode 100644 index 972ef3bc1d..0000000000 --- a/files/fr/web/css/-ms-text-autospace/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: '-ms-text-autospace' -slug: Web/CSS/-ms-text-autospace -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-text-autospace ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété -ms-text-autospace est une propriété spécifique à Microsoft qui définit l'espacement automatique et la réduction d'espace lorsque le texte doit être ajusté.

- -

Syntaxe

- -

Valeurs

- -
-
none
-
-

La valeur initiale de cette propriété. Aucun effet n'est appliqué, aucun espace supplémentaire n'est ajouté.

-
-
ideograph-alpha
-
-

Un espace supplémentaire est inséré entre le texte idéographique et le texte non-idéographique (alphabet latin, cyrillique, grec, arabe ou hébreu).

-
-
ideograph-numeric
-
-

Un espace supplémentaire est inséré entre le texte idéographique et les caractères numériques.

-
-
ideograph-parenthesis
-
-

Un espace supplémentaire est inséré entre les parenthèses (normales) et un idéographe.

-
-
ideograph-space
-
-

La largeur de l'espace est agrandie lorsque celui-ci est accolé à des idéogrammes.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Windows 8.

- -

Cette propriété est une extension spécifique à CSS et peut être utilisée comme synonyme de text-autospace lorsqu'IE8 est en mode standard.

- -

Un idéogramme est un caractère provenant d'un système d'écriture asiatique qui représente un concept ou une idée mais qui ne correspond pas à un mot ou à une prononciation particulière.

diff --git a/files/fr/web/css/-ms-touch-select/index.html b/files/fr/web/css/-ms-touch-select/index.html deleted file mode 100644 index f59ffad593..0000000000 --- a/files/fr/web/css/-ms-touch-select/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: '-ms-touch-select' -slug: Web/CSS/-ms-touch-select -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-touch-select ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété -ms-touch-select est une propriété spécifique à Microsoft qui active la barre d'accroche (gripper) pour les éléments qui permettent de sélectionner du texte au toucher.

- -

Syntaxe

- -

Valeurs

- -
-
grippers
-
-

La valeur initiale pour la propriété. Les points qui forment la barre d'accroche sont toujours activé. De plus, la sélection commencera même si un gestionnaire onclick, onmsgesturetap ou onmouseup est activé.

-
-
none
-
-

La barre d'accroche n'est jamais affichée et les fonctionnalités de sélection tactile par défaut ne sont pas fournies.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Cette propriété est disponible à partir de Windows 8.

- -

La propriété -ms-touch-select doit uniquement être utilisée par les applications qui fournissent leur propre mécanisme de sélection. La plupart des applications devraient plutôt utiliser la propriété {{cssxref("-ms-user-select")}}.

- -

Si vous choisissez de masquer la barre d'accroche, vous devrez vous assurer de fournir un mécanisme de sélection tactile. Pour réaliser cela avec JavaScript, vous pouvez voir les différentes API disponibles.

- -

Cette propriété n'a aucun effet pour les interactions à la souris, au clavier ou au pavé tactile.

diff --git a/files/fr/web/css/-ms-wrap-flow/index.html b/files/fr/web/css/-ms-wrap-flow/index.html deleted file mode 100644 index 54c93a3ae6..0000000000 --- a/files/fr/web/css/-ms-wrap-flow/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: '-ms-wrap-flow' -slug: Web/CSS/-ms-wrap-flow -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-wrap-flow ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété CSS -ms-wrap-flow est une propriété spécifique à Microsoft qui indique comment les exclusions jouent sur le contenu en ligne (inline) au sein des éléments de bloc.

- -

Syntaxe

- -

Valeurs

- -
-
auto
-
-

Une exclusion est créée pour les éléments flottants. Pour les éléments non-flottants, aucune exclusion n'est créée.

-
-
both
-
-

Le contenu en ligne peut s'écouler sur chaque côté de l'exclusion.

-
-
start
-
-

Le contenu en ligne peut passer à la ligne au début de la zone d'exclusion mais ne peut occuper la partie située après la zone d'exclusion.

-
-
end
-
-

Le contenu en ligne peut passer à la ligne après la zone d'exclusion mais ne peut occuper la partie située avant la zone d'exclusion.

-
-
maximum
-
-

Le contenu en ligne peut passer à ligne sur le côté de l'exclusion qui dispose de l'espace le plus grand pour cette ligne (l'autre côté est alors laissé vide).

-
-
clear
-
-

Le contenu en ligne peut uniquement passer à la ligne au dessus et en dessous de l'exclusion, les zones avant le début et après la fin de l'exclusion sont laissées vide.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Spécifications

- -

Cette propriété n'est pas une propriété standard et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

La propriété -ms-wrap-flow transforme un élément en exclusion lorsque sa valeur calculée est différente de auto. Cette propriété définit le comportement du contenu en ligne autour de cet élément d'exclusion (de façon similaire aux éléments flottants).

- -

Lorsque -ms-wrap-flow a une valeur calculée différente de auto, l'élément ne devient pas un élément d'exclusion, sauf si la valeur calculée de la propriété float n'est pas none. Dans ce cas, l'élément fournit sa bordure au contexte du bloc englobant et le flux du contenu s'adapte selon la propriété {{cssxref("clear")}}.

- -

Pour plus d'informations sur l'impact d'un élément d'exclusion quant au flux du contenu, voir la section Terminologie de la spécification de niveau 1 pour les exclusions CSS.

diff --git a/files/fr/web/css/-ms-wrap-margin/index.html b/files/fr/web/css/-ms-wrap-margin/index.html deleted file mode 100644 index 164c64b9f2..0000000000 --- a/files/fr/web/css/-ms-wrap-margin/index.html +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: '-ms-wrap-margin' -slug: Web/CSS/-ms-wrap-margin -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-wrap-margin ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété -ms-wrap-margin est une propriété spécifique à Microsoft qui définit une marge qui décale le retour à la ligne par rapport aux autres formes.

- -

Syntaxe

- -

Valeurs

- -
-
{{cssxref("<length>")}}
-
-

La taille de la marge avec une valeur non-négative.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

Les décalages créés par la propriété -ms-wrap-margin sont décalés en en dehors de l'exclusion. Cette propriété peut être utilisée avec n'importe quelle valeur de longueur.

diff --git a/files/fr/web/css/-ms-wrap-through/index.html b/files/fr/web/css/-ms-wrap-through/index.html deleted file mode 100644 index d817d34bbb..0000000000 --- a/files/fr/web/css/-ms-wrap-through/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: '-ms-wrap-through' -slug: Web/CSS/-ms-wrap-through -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Archive/Web/CSS/-ms-wrap-through ---- -
{{CSSRef}}{{non-standard_header}}
- -

La propriété CSS -ms-wrap-through est une propriété spécifique à Microsoft qui indique comment le contenu devrait s'écouler autour d'un élément d'exclusion.

- -

Syntaxe

- -

Valeurs

- -
-
wrap
-
-

L'élément d'exclusion hérite de la configuration de l'élément parent. Les éléments en ligne descendants s'écoulent autour des éléments d'exclusion définis en dehors de l'élément.

-
-
none
-
-

L'élément d'exclusion n'hérite pas de la configuration de l'élément parent. Les éléments descendants s'écoulent uniquement autour des éléments d'exclusion définis à l'intérieur de l'élément.

-
-
- -

Syntaxe formelle

- -
{{csssyntax}}
-
- -

Spécifications

- -

Cette propriété est une propriété spécifique et ne fait partie d'aucune spécification.

- -

{{cssinfo}}

- -

Notes

- -

La propriété -ms-wrap-through peut être utilisée afin de contrôler l'effet des exclusions. On peut notamment avoir un contenu de bloc qui s'écoule autour d'un élément d'exclusion et un autre contenu de bloc de créer une intersection avec ce même élément d'exclusion.

- -

Le contour d'exclusion d'une boîte est formé par l'ensemble des zones d'exclusion associées à l'élément. Pour plus d'informations, voir la section Terminologie de la spécification de niveau 1 pour le module CSS Exclusions.

diff --git a/files/fr/web/css/@media/-moz-mac-graphite-theme/index.html b/files/fr/web/css/@media/-moz-mac-graphite-theme/index.html deleted file mode 100644 index 0e40cdfb52..0000000000 --- a/files/fr/web/css/@media/-moz-mac-graphite-theme/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: '-moz-mac-graphite-theme' -slug: Web/CSS/@media/-moz-mac-graphite-theme -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-mac-graphite-theme ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

La caractéristique média -moz-mac-graphite-theme, rattachée à la règle @  @media, est spécifique à Gecko et peut être utilisée afin d'appliquer des styles si, sur macOS, l'utilisateur utilise le thème "Graphite".

- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'utilisateur a configuré son appareil afin d'utiliser le thème "Graphite" de macOS X, cette caractéristique vaut 1. Sinon, elle vaut 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-maemo-classic/index.html b/files/fr/web/css/@media/-moz-maemo-classic/index.html deleted file mode 100644 index 1711266448..0000000000 --- a/files/fr/web/css/@media/-moz-maemo-classic/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: '-moz-maemo-classic' -slug: Web/CSS/@media/-moz-maemo-classic -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-maemo-classic ---- -
{{CSSRef}}{{Non-standard_Header}}{{Gecko_MinVersion_Header("1.9.2")}}
- -

La caractérique média -moz-maemo-classic, rattachée à la règle @ @media, est spécifique à Gecko et permet d'appliquer des styles si l'agent utilisateur utilise le thème Maemo original.

- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'agent utilisateur utilise Maemo avec le thème original, cette caractéristique vaut 1. Sinon, elle vaut 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non.

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-os-version/index.html b/files/fr/web/css/@media/-moz-os-version/index.html deleted file mode 100644 index 5fafbdb5c5..0000000000 --- a/files/fr/web/css/@media/-moz-os-version/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: '-moz-os-version' -slug: Web/CSS/@media/-moz-os-version -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-os-version ---- -
{{cssref}}{{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

La caractéristique média -moz-os-version, rattachée à la règle @ @media, est spécifique à Gecko et permet d'appliquer des styles en fonction de la version de Windows de l'utilisateur. Cela peut être utile afin d'adapter l'apparence d'une interface utilisateur en fonction de la version du système d'exploitation.

- -

Syntaxe

- -

Valeurs

- -
-
windows-win7
-
Le système d'exploitation est Windows 7.
-
windows-win8
-
Le système d'exploitation est Windows 8.
-
windows-win10
-
Le système d'exploitation est Windows 10.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non

diff --git a/files/fr/web/css/@media/-moz-scrollbar-end-backward/index.html b/files/fr/web/css/@media/-moz-scrollbar-end-backward/index.html deleted file mode 100644 index 823591be7f..0000000000 --- a/files/fr/web/css/@media/-moz-scrollbar-end-backward/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: '-moz-scrollbar-end-backward' -slug: Web/CSS/@media/-moz-scrollbar-end-backward -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-scrollbar-end-backward ---- -
{{cssref}}{{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'interface de l'appareil affiche une flèche à la fin des ascensceurs (scrollbars), cette caractéristique vaut 1 et sinon 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-scrollbar-end-forward/index.html b/files/fr/web/css/@media/-moz-scrollbar-end-forward/index.html deleted file mode 100644 index 2d7bb0dd8a..0000000000 --- a/files/fr/web/css/@media/-moz-scrollbar-end-forward/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: '-moz-scrollbar-end-forward' -slug: Web/CSS/@media/-moz-scrollbar-end-forward -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-scrollbar-end-forward ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'interface de l'appareil affiche un bouton avec une flèche à la fin des ascenseurs (scrollbars), cette caractéristique vaut 1, sinon elle vaut 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-scrollbar-start-backward/index.html b/files/fr/web/css/@media/-moz-scrollbar-start-backward/index.html deleted file mode 100644 index 1424cda885..0000000000 --- a/files/fr/web/css/@media/-moz-scrollbar-start-backward/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: '-moz-scrollbar-start-backward' -slug: Web/CSS/@media/-moz-scrollbar-start-backward -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-scrollbar-start-backward ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'interface de l'appareil affiche un bouton avec une flèche vers l'arrière à la fin des ascenseurs (scrollbars), cette caractéristique vaut 1 et sinon 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-scrollbar-start-forward/index.html b/files/fr/web/css/@media/-moz-scrollbar-start-forward/index.html deleted file mode 100644 index 851323ed06..0000000000 --- a/files/fr/web/css/@media/-moz-scrollbar-start-forward/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: '-moz-scrollbar-start-forward' -slug: Web/CSS/@media/-moz-scrollbar-start-forward -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-scrollbar-start-forward ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'interface de l'appareil affiche une flèche vers l'avant au début des ascenseurs (scrollbars), cette caractéristique vaut 1 et sinon 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non.

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-scrollbar-thumb-proportional/index.html b/files/fr/web/css/@media/-moz-scrollbar-thumb-proportional/index.html deleted file mode 100644 index 575085f65a..0000000000 --- a/files/fr/web/css/@media/-moz-scrollbar-thumb-proportional/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: '-moz-scrollbar-thumb-proportional' -slug: Web/CSS/@media/-moz-scrollbar-thumb-proportional -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-scrollbar-thumb-proportional ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'interface de l'appareil affiche une barre de défilement dont la taille est proportionnelle au pourcentage du document visible, cette caractéristique vaut 1 et sinon 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-touch-enabled/index.html b/files/fr/web/css/@media/-moz-touch-enabled/index.html deleted file mode 100644 index 76b8621ab3..0000000000 --- a/files/fr/web/css/@media/-moz-touch-enabled/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: '-moz-touch-enabled' -slug: Web/CSS/@media/-moz-touch-enabled -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-touch-enabled ---- -

{{CSSRef}}{{Non-standard_Header}}{{Gecko_MinVersion_Header("1.9.2")}}

- -
-

Note : Depuis Firefox 58, cette caractéristique média ne peut plus être utilisée pour du contenu web, elle est uniquement accessible pour du code pour le chrome/XUL. Voir {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Cette caractéristique vaut 1 si l'appareil prend en charge les évènements tactiles et 0 sinon.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : Non

- -

Exemples

- -

Cette caractéristique peut être utilisée pour afficher des boutons plus gros si l'utilisateur emploie un appareil tactile.

- -
button {
-  padding: .5em;
-}
-
-@media (-moz-touch-enabled) {
-  button {
-    padding: 1em;
-  }
-}
- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-windows-accent-color-in-titlebar/index.html b/files/fr/web/css/@media/-moz-windows-accent-color-in-titlebar/index.html deleted file mode 100644 index 3b2937525c..0000000000 --- a/files/fr/web/css/@media/-moz-windows-accent-color-in-titlebar/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: '-moz-windows-accent-color-in-titlebar' -slug: Web/CSS/@media/-moz-windows-accent-color-in-titlebar -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-windows-accent-color-in-titlebar ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

La caractéristique média -moz-windows-accent-color-in-titlebar, spécifique à Gecko et rattachée à la règle @ @media, peut-être utilisée afin d'appliquer des styles selon que les couleurs d'accentuation de Microsoft Windows pour les barres de titres sont activées ou non.

- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Cette caractéristique vaut 1 si les couleurs d'accentuation sont activées pour les barres de titre des fenêtres (pour les versions récentes de Windows, par exemple Windows 10). Sinon, elle vaut 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : non

- -

Exemples

- -
@media (-moz-windows-accent-color-in-titlebar: 1) {
-  h1 {
-    color: -moz-win-accentcolortext;
-  }
-
-  body {
-    background-color: -moz-win-accentcolor;
-  }
-}
- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-windows-classic/index.html b/files/fr/web/css/@media/-moz-windows-classic/index.html deleted file mode 100644 index eed112dbf8..0000000000 --- a/files/fr/web/css/@media/-moz-windows-classic/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: '-moz-windows-classic' -slug: Web/CSS/@media/-moz-windows-classic -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-windows-classic ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Cette caractéristique vaut 1 si l'utilisateur utilise Windows sans aucun thème (c'est-à-dire en mode classique plutôt qu'en mode uxtheme). Sinon, elle vaut 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des prefixes min/max : non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-windows-compositor/index.html b/files/fr/web/css/@media/-moz-windows-compositor/index.html deleted file mode 100644 index c590e35390..0000000000 --- a/files/fr/web/css/@media/-moz-windows-compositor/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: '-moz-windows-compositor' -slug: Web/CSS/@media/-moz-windows-compositor -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: 'Archive/Web/CSS/:-moz-system-metric/-moz-windows-compositor' ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Cette caractéristique vaut 1 si l'utilisateur utilise Windows avec le compositeur DWM. Sinon, elle vaut 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-windows-default-theme/index.html b/files/fr/web/css/@media/-moz-windows-default-theme/index.html deleted file mode 100644 index 8a84ca3119..0000000000 --- a/files/fr/web/css/@media/-moz-windows-default-theme/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: '-moz-windows-default-theme' -slug: Web/CSS/@media/-moz-windows-default-theme -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-windows-default-theme ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Si l'utilisateur utilise un thème Windows par défaut (Luna, Royale, Zune ou Aero (incluant Vista Basic, Vista Advanced et Aero Glass)), cette caractéristique vaut 1 et sinon elle vaut 0.
-
- -


- Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : non

- -

Voir aussi

- - diff --git a/files/fr/web/css/@media/-moz-windows-glass/index.html b/files/fr/web/css/@media/-moz-windows-glass/index.html deleted file mode 100644 index 9fdccd49a6..0000000000 --- a/files/fr/web/css/@media/-moz-windows-glass/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: '-moz-windows-glass' -slug: Web/CSS/@media/-moz-windows-glass -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-windows-glass ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -
-
{{cssxref("<integer>")}}
-
Cette caractéristique vaut 1 si l'utilisateur utilise l thème Windows Glass et 0 sinon. Note : ce thème n'existe que pour Windows 7 et les versions antérieures.
-
- -

Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : non

diff --git a/files/fr/web/css/@media/-moz-windows-theme/index.html b/files/fr/web/css/@media/-moz-windows-theme/index.html deleted file mode 100644 index c0bebdf7f1..0000000000 --- a/files/fr/web/css/@media/-moz-windows-theme/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: '-moz-windows-theme' -slug: Web/CSS/@media/-moz-windows-theme -tags: - - '@media' - - CSS - - Caractéristique média - - Non-standard -translation_of: Archive/Web/CSS/@media/-moz-windows-theme ---- -
{{cssref}} {{Non-standard_header}}
- -
-

Note : Depuis Firefox 58, cette caractéristique média n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

La caractéristique média -moz-windows-theme, spécifique à Gecko et rattachée à la règle @ @media, permet de personnaliser les éléments d'interfaces afin que ceux-ci soient bien intégrés par rapport au thème Windows utilisé par l'utilisateur.

- -

Syntaxe

- -

La caractéristique -moz-windows-theme est un mot-clé indiquant le thème Windows actuellement utilisé.

- -

Valeurs

- - - -

Média : {{cssxref("Media/Visual")}}
- Gestion des préfixes min/max : non

- -

Voir aussi

- - diff --git a/files/fr/web/css/_colon_-moz-full-screen-ancestor/index.html b/files/fr/web/css/_colon_-moz-full-screen-ancestor/index.html deleted file mode 100644 index 4004032f1c..0000000000 --- a/files/fr/web/css/_colon_-moz-full-screen-ancestor/index.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: ':-moz-full-screen-ancestor' -slug: 'Web/CSS/:-moz-full-screen-ancestor' -tags: - - CSS - - Non-standard - - Obsolete - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-full-screen-ancestor' ---- -
{{CSSRef}}{{non-standard_header}}{{deprecated_header}}
- -

La pseudo-classe :-moz-full-screen-ancestor permettait de cibler tous les ancêtres d'un élément affiché en plein écran à l'exception des frames contenues dans les documents parents.

- -
-

Cette pseudo-classe a été retirée de Firefox 50

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-full-screen-ancestor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/_colon_-moz-lwtheme-brighttext/index.html b/files/fr/web/css/_colon_-moz-lwtheme-brighttext/index.html deleted file mode 100644 index 68304a2c21..0000000000 --- a/files/fr/web/css/_colon_-moz-lwtheme-brighttext/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: ':-moz-lwtheme-brighttext' -slug: 'Web/CSS/:-moz-lwtheme-brighttext' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/:-moz-lwtheme-brighttext' ---- -
{{CSSRef}}{{non-standard_header}}
- -

La pseudo-classe :-moz-lwtheme-brighttext correspond à un élément de l'interface utilisateur du navigateur (le chrome) lorsque {{cssxref(":-moz-lwtheme")}} vaut true et qu'un thème léger avec une couleur de texte clair est sélectionné.

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/css/_colon_-moz-lwtheme-darktext/index.html b/files/fr/web/css/_colon_-moz-lwtheme-darktext/index.html deleted file mode 100644 index 912ddbd7f6..0000000000 --- a/files/fr/web/css/_colon_-moz-lwtheme-darktext/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: ':-moz-lwtheme-darktext' -slug: 'Web/CSS/:-moz-lwtheme-darktext' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/:-moz-lwtheme-darktext' ---- -
{{CSSRef}}{{non-standard_header}}
- -

La pseudo-classe :-moz-lwtheme-darktext correspond à un élément de l'interface utilisateur du navigateur (le chrome) lorsque {{cssxref(":-moz-lwtheme")}} vaut true et qu'un thème léger avec une couleur de texte sombre est sélectionné.

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/css/_colon_-moz-lwtheme/index.html b/files/fr/web/css/_colon_-moz-lwtheme/index.html deleted file mode 100644 index 31b249d0ca..0000000000 --- a/files/fr/web/css/_colon_-moz-lwtheme/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: ':-moz-lwtheme' -slug: 'Web/CSS/:-moz-lwtheme' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/:-moz-lwtheme' ---- -
{{CSSRef}}{{non-standard_header}}
- -

La pseudo-classe :-moz-lwtheme permet de cibler les documents liés à l'interface utilisateur du navigateur (le chrome) lorsque l'attribut {{xulattr("lightweightthemes")}} de l'élément racine vaut true et qu'un thème est sélectionné.

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/css/_colon_-moz-system-metric/images-in-menus/index.html b/files/fr/web/css/_colon_-moz-system-metric/images-in-menus/index.html deleted file mode 100644 index dba93df04b..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/images-in-menus/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-system-metric(images-in-menus)' -slug: 'Web/CSS/:-moz-system-metric/images-in-menus' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/images-in-menus' ---- -
{{CSSRef}}{{Non-standard_header}}{{Fx_minversion_header(3)}}
- -

La pseudo-classe :-moz-system-metric(images-in-menus) correspond à un élément si l'interface utilisateur de l'ordinateur utilisée permet d'utiliser des images dans les menus.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.images-in-menus")}}

diff --git a/files/fr/web/css/_colon_-moz-system-metric/index.html b/files/fr/web/css/_colon_-moz-system-metric/index.html deleted file mode 100644 index 75e34f4f90..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/index.html +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: ':-moz-system-metric()' -slug: 'Web/CSS/:-moz-system-metric' -tags: - - CSS - - Non-standard - - Obsolete - - Pseudo-classe -translation_of: 'Archive/Web/CSS/:-moz-system-metric' ---- -

{{CSSRef}}{{Draft}}{{Non-standard_Header}}{{Obsolete_Header("gecko58")}}

- -

{{wiki.localize("System.API.page-generated-for-subpage")}}

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur le Web. Elle ne peut être utilisée que de façon interne (pour du chrome ou du code XUL). Voir {{bug(1396066)}} pour plus de détails.

-
- -

Syntaxe

- -

Valeurs

- -

{{SubpagesWithSummaries}}

- -

Syntaxe formelle

- -
{{CSSSyntax}}
- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/_colon_-moz-system-metric/mac-graphite-theme/index.html b/files/fr/web/css/_colon_-moz-system-metric/mac-graphite-theme/index.html deleted file mode 100644 index fb3013b14f..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/mac-graphite-theme/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: ':-moz-system-metric(mac-graphite-theme)' -slug: 'Web/CSS/:-moz-system-metric/mac-graphite-theme' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/mac-graphite-theme' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

La pseudo-classe :-moz-system-metric(mac-graphite-theme) correspond à un élément si l'utilisateur a sélectionné l'apparence Graphite dans l'écran des préférences système de Mac OS X.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.mac-graphite-theme")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-backward/index.html b/files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-backward/index.html deleted file mode 100644 index d5ff5941e3..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-backward/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-system-metric(scrollbar-end-backward)' -slug: 'Web/CSS/:-moz-system-metric/scrollbar-end-backward' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/scrollbar-end-backward' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La pseudo-classe :-moz-system-metric(scrollbar-end-backward) correspond à un élément si l'interface utilisateur de l'ordinateur inclut un bouton de recul à la fin des barres de défilement.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.scrollbar-end-backward")}}

diff --git a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-forward/index.html b/files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-forward/index.html deleted file mode 100644 index abc2ef8c2e..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-end-forward/index.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: ':-moz-system-metric(scrollbar-end-forward)' -slug: 'Web/CSS/:-moz-system-metric/scrollbar-end-forward' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/scrollbar-end-forward' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La pseudo-classe :-moz-system-metric(scrollbar-end-forward) correspond à un élément si l'interface utilisateur de l'ordinateur inclut un bouton d'avancement à la fin des barres de défilement.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.scrollbar-end-forward")}}

diff --git a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-backward/index.html b/files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-backward/index.html deleted file mode 100644 index 19c645904f..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-backward/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-system-metric(scrollbar-start-backward)' -slug: 'Web/CSS/:-moz-system-metric/scrollbar-start-backward' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/scrollbar-start-backward' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La pseudo-classe :-moz-system-metric(scrollbar-start-backward) correspond à un élément si l'interface utilisateur de l'ordinateur utilisé inclut un bouton avec une flèche vers le bas à la fin des barres de défilement.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.scrollbar-start-backward")}}

diff --git a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-forward/index.html b/files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-forward/index.html deleted file mode 100644 index a6cc78db85..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-start-forward/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-system-metric(scrollbar-start-forward)' -slug: 'Web/CSS/:-moz-system-metric/scrollbar-start-forward' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/scrollbar-start-forward' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La pseudo-classe :-moz-system-metric(scrollbar-start-forward) correspond à un élément si l'interface utilisateur de l'ordinateur inclue une flèche pour remonter au début des barres de défilement.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.scrollbar-start-forward")}}

diff --git a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-thumb-proportional/index.html b/files/fr/web/css/_colon_-moz-system-metric/scrollbar-thumb-proportional/index.html deleted file mode 100644 index 14c1511f98..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/scrollbar-thumb-proportional/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-system-metric(scrollbar-thumb-proportional)' -slug: 'Web/CSS/:-moz-system-metric/scrollbar-thumb-proportional' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/scrollbar-thumb-proportional' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

La pseudo-classe :-moz-system-metric(scrollbar-thumb-proportional) correspondra à un élément si l'interface utilisateur de l'ordinateur utilise des curseurs de barre de défilement proportionnels à la taille de la zone visible du document à l'écran.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.scrollbar-thumb-proportional")}}

diff --git a/files/fr/web/css/_colon_-moz-system-metric/touch-enabled/index.html b/files/fr/web/css/_colon_-moz-system-metric/touch-enabled/index.html deleted file mode 100644 index 4b48986029..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/touch-enabled/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-system-metric(touch-enabled)' -slug: 'Web/CSS/:-moz-system-metric/touch-enabled' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/touch-enabled' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

La pseudo-classe :-moz-system-metric(touch-enabled) correspondra à un élément si l'appareil sur lequel il est affiché est une interface tactile.

- -
Note : Cette pseudo-classe n'est pas destinée à être utilisée sur le Web. Pour cela, on privilégiera la requête média {{cssxref("-moz-touch-enabled")}}.
- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.touch-enabled")}}

diff --git a/files/fr/web/css/_colon_-moz-system-metric/windows-default-theme/index.html b/files/fr/web/css/_colon_-moz-system-metric/windows-default-theme/index.html deleted file mode 100644 index ae0eaf8806..0000000000 --- a/files/fr/web/css/_colon_-moz-system-metric/windows-default-theme/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: ':-moz-system-metric(windows-default-theme)' -slug: 'Web/CSS/:-moz-system-metric/windows-default-theme' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Archive/Web/CSS/:-moz-system-metric/windows-default-theme' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

La pseudo-classe :-moz-system-metric(windows-default-theme) correspond à un élément si l'utilisateur utilise l'un des thèmes Windows suivant : Luna, Royale, Zune ou Aero (c'est-à-dire Vista Basic, Vista Standard ou Aero Glass). Les thèmes Windows classiques et les thèmes tiers sont exclus.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -
-

Note : Depuis Firefox 58, cette pseudo-classe n'est plus disponible pour être utilisée sur du contenu web. Elle ne peut être utilisée que de façon interne (c'est-à-dire avec XUL et pour le code du chrome). Cf. {{bug(1396066)}} pour plus de détails.

-
- -

Exemples

- -

CSS

- -
#defaultThemes,
-#nonDefaultThemes {
-  background-color: #FFA0A0;
-}
-
-#defaultThemes:-moz-system-metric(windows-default-theme) {
-  background-color: #A0FFA0;
-}
-
-#nonDefaultThemes:not(-moz-system-metric(windows-default-theme)) {
-  background-color: #A0FFA0;
-}
-
-#notSupported:-moz-system-metric(windows-default-theme),
-#notSupported:not(:-moz-system-metric(windows-default-theme)) {
-  display: none;
-}
- -

HTML

- -
<p id="defaultThemes">
-  Ce paragraphe devrait avoir un fond vert avec les thèmes Windows
-  Luna/Royale/Zune/Aero et un fond rouge avec les autres.
-</p>
-
-<p id="nonDefaultThemes">
-  Ce paragraphe devrait avoir un fond vert avec with Windows Classic
-  ou avec un thème tiers ou un fond rouge pour les autres.
-</p>
-
-<p id="notSupported">La détection des thèmes n'est pas prise en charge.</p>
- -

Résultat

- -

{{EmbedLiveSample("Exemples", "100%", 170)}}

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-moz-system-metric.windows-default-theme")}}

diff --git a/files/fr/web/css/_doublecolon_-ms-browse/index.html b/files/fr/web/css/_doublecolon_-ms-browse/index.html deleted file mode 100644 index a1c0fc0ad9..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-browse/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: '::-ms-browse' -slug: 'Web/CSS/::-ms-browse' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-browse' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-browse représente le bouton qui permet d'ouvrir l'explorateur de fichier d'un élément {{HTMLElement("input")}} de type file.

- -

Propriétés autorisées

- -

Seules les propriétés CSS suivantes peuvent être utilisées avec une règle qui utilise un sélecteur avec ::-ms-browse. Les autres propriétés sont ignorées.

- -
- -
-

Syntaxe

- -
  {{csssyntax}}
-
- -

Exemples

- -

HTML

- -
<label>Choisir une image : <input type="file"></label>
- -

CSS

- -
input[type="file"]::-ms-browse {
-  color: red;
-  background-color: yellow;
-}
- -

Résultat

- -

{{EmbedLiveSample('Exemples')}}

- -

Capture d'écran correspondante

- -

- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-browse")}}

diff --git a/files/fr/web/css/_doublecolon_-ms-check/index.html b/files/fr/web/css/_doublecolon_-ms-check/index.html deleted file mode 100644 index 7696ee6792..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-check/index.html +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: '::-ms-check' -slug: 'Web/CSS/::-ms-check' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-check' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-check est une extension Microsoft qui représente la marque visuelle d'un élément {{HTMLElement("input")}} de type="checkbox" or type="radio". Ce pseudo-élément n'est pas standard et est uniquement pris en charge par Internet Explorer et Edge.

- -

Propriétés autorisées

- -

Seules certaines propriétés CSS peuvent être utilisées au sein d'une règle dont le sélecteur contient ::-ms-check. Les autres propriétés seront ignorées.

- -
- -
- -

Syntaxe

- -
selecteur::-ms-check
-
- -

Exemples

- -

CSS

- -
input, label {
-  display: inline;
-}
-
-input[type=radio]::-ms-check {
-  /* Le cercle sera rouge comme l'option sera sélectionnée. */
-  color: red;
-  /* La bordure de l'élément sera rouge si l'option est sélectionnée */
-  border-color: red;
-}
-
-input[type=checkbox]::-ms-check {
-  /* La coche sera verte quand la case sera cochée. */
-  color: green;
-  /* La bordure de l'élément sera verte si la case est cochée */
-  border-color: red;
-}
- -

HTML

- -
<form>
-  <label for="redButton">Rouge</label>
-  <input type="radio" id="redButton"><br>
-  <label for="greenCheckbox">Verte</label>
-  <input type="checkbox" id="greenCheckbox">
-</form>
- -

Résultat

- -

La capture d'écran à gauche illustre le résultat obtenu avec Internet Explorer ou Edge.

- -

{{EmbedLiveSample('Exemples', '', '', 'https://mdn.mozillademos.org/files/15814/ie11-example.PNG', 'Web/CSS/::-ms-check')}}

- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-check")}}

diff --git a/files/fr/web/css/_doublecolon_-ms-clear/index.html b/files/fr/web/css/_doublecolon_-ms-clear/index.html deleted file mode 100644 index fe06d95707..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-clear/index.html +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: '::-ms-clear' -slug: 'Web/CSS/::-ms-clear' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-clear' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-clear représente le bouton qui permet d'effacer la valeur saisie dans un champ {{HTMLElement("input")}}. Ce bouton et ce pseudo-élément ne sont pas standards et sont uniquement pris en charge par Internet Explorer 10, 11 et Edge. Le bouton est uniquement affichés pour les champs textuels {{HTMLElement("input")}} non-vides et qui ont le focus.

- -

Le bouton de remise à zéro est uniquement affiché pour les contrôles textuels qui ont le focus et qui ne sont pas vides. Les contrôles concernés sont :

- - - -

Propriétés autorisées

- -

Seules les propriétés CSS suivantes peuvent être utilisées dans une règle qui contient ::-ms-clear dans son sélecteur (les autres propriétés seront ignorées).

- -
- -
- -

Syntaxe

- -
 selecteur::-ms-clear
- -

Exemples

- -

CSS

- -
input,
-label {
-  display: block;
-}
-
-input[type=text]::-ms-clear {
-  color: red; /* La croix du bouton sera rouge. */
-  /* On peut cacher la croix avec display qui vaut "none" */
-}
- -

HTML

- -
<form>
-  <label for="firstname">First name:</label>
-  <input type="text" id="firstname" name="firstname" placeholder="First name"><br>
-
-  <label for="lastname">Last name:</label>
-  <input type="text" id="lastname" name="lastname" placeholder="Second name">
-</form>
-
- -

Résultat

- -

{{EmbedLiveSample('Exemples')}}

- -

Voici une capture d'écran du résultat obtenu avec IE 10/11 :

- -

 

- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-clear")}}

diff --git a/files/fr/web/css/_doublecolon_-ms-expand/index.html b/files/fr/web/css/_doublecolon_-ms-expand/index.html deleted file mode 100644 index f8f7b3ded3..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-expand/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: '::-ms-expand' -slug: 'Web/CSS/::-ms-expand' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-expand' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-expand représente le bouton contenu dans un élément {{HTMLElement("select")}} et qui permet d'ouvrir ou de fermer le menu déroulant qui propose les options ({{HTMLElement("option")}}). Il est généralement représenté par un triangle orienté vers le bas.

- -

Propriétés autorisées

- -

Seules certaines propriétés CSS peuvent être utilisées dans une règle contenant ::-ms-expand dans son sélecteur (les autres propriétés seront ignorées).

- - -
- -
-

Syntaxe

- -
::-ms-expand
-
- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- - -

Compatibilité des navigateurs

- - -

{{Compat("css.selectors.-ms-expand")}}

diff --git a/files/fr/web/css/_doublecolon_-ms-fill-lower/index.html b/files/fr/web/css/_doublecolon_-ms-fill-lower/index.html deleted file mode 100644 index de4df1e4af..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-fill-lower/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: '::-ms-fill-lower' -slug: 'Web/CSS/::-ms-fill-lower' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-fill-lower' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-fill-lower représente la portion de la piste d'un élément {{HTMLElement("input")}} de type range qui contient les valeurs inférieures à la valeur du curseur.

- -

Propriétés autorisées

- -

Seules les propriétés CSS suivantes peuvent être utilisées dans une règle dont le sélecteur contient ::-ms-fill-lower (les autres propriétés sont ignorées).

- - - -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-fill-lower")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-fill-upper/index.html b/files/fr/web/css/_doublecolon_-ms-fill-upper/index.html deleted file mode 100644 index 3413848720..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-fill-upper/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: '::-ms-fill-upper' -slug: 'Web/CSS/::-ms-fill-upper' -tags: - - CSS - - Non-standard - - Pseudo-élément(2) - - Référence(2) -translation_of: 'Archive/Web/CSS/::-ms-fill-upper' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-fill-upper représente la portion de la piste d'un élément {{HTMLElement("input")}} de type range qui contient les valeurs supérieures à la valeur du curseur.

- -

Propriétés autorisées

- -

Seules les propriétés CSS suivantes peuvent être utilisées dans une règle dont le sélecteur contient ::-ms-fill-upper. Les autres propriétés sont ignorées.

- - - -

Syntax

- -
{{csssyntax}}
-
- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-fill-upper")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-fill/index.html b/files/fr/web/css/_doublecolon_-ms-fill/index.html deleted file mode 100644 index e122d2104d..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-fill/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: '::-ms-fill' -slug: 'Web/CSS/::-ms-fill' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-fill' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-fill est un pseudo-élément spécifique à Microsoft qui représente la partie « remplie » d'un élément {{HTMLElement("progress")}}. Ce pseudo-élément n'est pas standard et est uniquement disponible avec Internet Explorer 10, Internet Explorer 11 et Microsoft Edge.

- -

Toutes les propriétés autorisées (à l'exception de {{cssxref("animation-name")}}) s'appliquent sur une barre de progression dans un état déterminé. Seule animation-name s'applique sur une barre dans un état indéterminée. Les éléments <progress> dans un état indéterminés sont ceux qui n'ont pas d'attribut {{htmlattrxref("value")}}, ils peuvent être sélectionnés grâce à la pseudo-classe {{cssxref(":indeterminate")}}.

- -

Par défaut, IE affiche un bordure avec des points qui se déplacent lorsque la barre est dans un état déterminée. En utilisant animation-name sur ::-ms-fill, on peut modifier l'animation :

- - - - - - - - - - - - - - - - - - - - - - -
ValeurDescription
noneL'animation est désactivée, aucun point n'est affiché.
-ms-barLes points animés sont affichés sous la forme d'une barre.
-ms-ringLes points animés sont affichés sous la forme d'un anneau.
- -

Propriétés autorisées

- -

Seules les propriétés suivantes peuvent être utilisées avec ::-ms-fill (les autres propriétés seront ignorées) :

- - - -

Syntaxe

- -
{{csssyntax}}
- - - -

Exemples

- -

CSS

- -
progress::-ms-fill {
-  background-color: orange;
-}
- -

HTML

- -
<progress value="10" max="50"></progress>
-
- -

Résultat

- -

{{EmbedLiveSample("Exemples", 300, 50)}}

- -

Une barre de progression mise en forme avec cette feuille de style devrait ressembler à :

- -

Progress Bar with Orange Fill

- -

Spécifications

- -

Ce pseudo-élément est spécifique à Microsoft et n'est décrit dans aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-fill")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-reveal/index.html b/files/fr/web/css/_doublecolon_-ms-reveal/index.html deleted file mode 100644 index e0e998ad5b..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-reveal/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: '::-ms-reveal' -slug: 'Web/CSS/::-ms-reveal' -tags: - - CSS - - Microsoft - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-reveal' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-reveal est un pseudo-élément spécifique à Microsoft qui est utilisé pour la représentation du bouton qui permet de révéler le mot de passe qui est généralement affiché juste après un élément {{HTMLElement("input/password", '<input type="password">')}} dans Internet Explorer 10+.

- -

Ce bouton permet d'afficher le contenu du mot de passe dans le champs (plutôt que les astérisques qui masquent les caractères).

- -

Ce pseudo-élément n'est pas standard et est spécifique à Internet Explorer 10+.

- -

Propriétés autorisées

- -

Seules les propriétés suivantes peuvent être utilisées dans une règle dont le sélecteur contient ::-ms-reveal (les autres propriétés seront ignorées).

- - - -

Syntaxe

- -
{{csssyntax("::-ms-reveal")}}
-
- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-reveal")}}

diff --git a/files/fr/web/css/_doublecolon_-ms-thumb/index.html b/files/fr/web/css/_doublecolon_-ms-thumb/index.html deleted file mode 100644 index 895408d2b0..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-thumb/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: '::-ms-thumb' -slug: 'Web/CSS/::-ms-thumb' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-thumb' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-thumb est un pseudo-élément spécifique à Microsoft qui représente le curseur qui peut être déplacer le long de la piste d'un élément {{HTMLElement("input")}} de type range afin de modifier la valeur numérique associée.

- -

Propriétés autorisées

- -

Seules les propriétés suivantes peuvent être utilisées dans une règle dont le sélecteur contient ::-ms-thumb (les autres propriétés sont ignorées).

- - - -

Syntax

- -
{{csssyntax}}
-
- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-ticks-after/index.html b/files/fr/web/css/_doublecolon_-ms-ticks-after/index.html deleted file mode 100644 index 02bf07507a..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-ticks-after/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: '::-ms-ticks-after' -slug: 'Web/CSS/::-ms-ticks-after' -tags: - - CSS - - Microsoft - - Non-standard - - Pseudo-element - - Reference - - Web -translation_of: 'Archive/Web/CSS/::-ms-ticks-after' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-ticks-after est une extension Microsoft qui permet d'appliquer un ou plusieurs styles aux graduations d'une piste qui sont situées après le curseur (la piste est celle d'un contrôle <input type="range">). Pour une disposition avec une écriture de gauche à droite, les marques sont situées sous la piste. Pour une disposition avec une écriture de haut en bas, les marques sont situées à droite de la piste.

- -

Par défaut, les marques ne sont pas affichées, il est nécessaire d'utiliser la valeur block pour la propriété {{cssxref("display")}}.

- -

Il est possible d'utiliser simultanément les sélecteurs ::-ms-ticks-after, {{cssxref("::-ms-ticks-before")}}, et {{cssxref("::-ms-track")}} mais cela créera alors trois ensembles de marques, ce qui n'est pas recommandé. Pour une meilleure ergonomie, il est conseillé de n'utiliser qu'un seul ensemble de marque. Pour retirer les marques, on pourra utiliser la valeur transparent sur la propriété {{cssxref("color")}}.

- -

Propriétés autorisées

- -

Voici les propriétés qui peuvent être définies dans les styles associés à ce pseudo-élément (les autres propriétés seront ignorées) :

- - - -

Syntaxe

- -
{{csssyntax}}
-
- - - -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-ticks-before/index.html b/files/fr/web/css/_doublecolon_-ms-ticks-before/index.html deleted file mode 100644 index 371ff710ec..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-ticks-before/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: '::-ms-ticks-before' -slug: 'Web/CSS/::-ms-ticks-before' -tags: - - CSS - - Microsoft - - Non-standard - - Pseudo-element - - Reference - - Web -translation_of: 'Archive/Web/CSS/::-ms-ticks-before' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-ticks-before est une extension Microsoft qui permet d'appliquer un ou plusieurs styles aux graduations d'une piste qui sont situées avant le curseur (la piste est celle d'un contrôle <input type="range">). Pour une disposition avec une écriture de gauche à droite, les marques sont situées au-dessus de la piste. Pour une disposition avec une écriture de haut en bas, les marques sont situées à gauche de la piste.

- -

Par défaut, les marques ne sont pas affichées, il est nécessaire d'utiliser la valeur block pour la propriété {{cssxref("display")}}.

- -

Il est possible d'utiliser simultanément les sélecteurs {{cssxref("::-ms-ticks-after")}}, ::-ms-ticks-before et {{cssxref("::-ms-track")}} mais cela créera alors trois ensembles de marques, ce qui n'est pas recommandé. Pour une meilleure ergonomie, il est conseillé de n'utiliser qu'un seul ensemble de marque. Pour retirer les marques, on pourra utiliser la valeur transparent sur la propriété {{cssxref("color")}}.

- -

Propriétés autorisées

- -

 

- -

Voici les propriétés qui peuvent être définies dans les styles associés à ce pseudo-élément (les autres propriétés seront ignorées) :

- - - -

Syntaxe

- -
{{csssyntax}}
- -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-tooltip/index.html b/files/fr/web/css/_doublecolon_-ms-tooltip/index.html deleted file mode 100644 index e4d68b6bcc..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-tooltip/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: '::-ms-tooltip' -slug: 'Web/CSS/::-ms-tooltip' -tags: - - CSS - - Extension - - Microsoft - - Non-standard - - Pseudo-element - - Reference - - Web -translation_of: 'Archive/Web/CSS/::-ms-tooltip' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-tooltip est une extension Microsoft qui permet d'appliquer un ou plusieurs styles à la bulle d'information du curseur d'un élément <input type="range">.

- -

Propriétés autorisées

- -

Seules les propriétés {{cssxref("display")}} et {{cssxref("visibility")}} peuvent être utilisées avec ::-ms-tooltip.

- -

Syntaxe

- -
{{csssyntax}}
- -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-track/index.html b/files/fr/web/css/_doublecolon_-ms-track/index.html deleted file mode 100644 index 5dda04462a..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-track/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: '::-ms-track' -slug: 'Web/CSS/::-ms-track' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-track' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-track est un pseudo-élément spécifique à Microsoft qui permet de représenter la piste sur laquelle on peut déplacer le curseur d'un élément {{HTMLElement("input")}} de range.

- -

La propriété {{cssxref("color")}}, appliquée au sein d'un sélecteur ::-ms-track modifiera la couleur des graduations le long de la piste. Si on souhaite les masquer, on pourra utiliser la valeur transparent.

- -

On peut utiliser les pseudo-éléments {{cssxref("::-ms-ticks-after")}}, {{cssxref("::-ms-ticks-before")}} et ::-ms-track ensemble afin de créer trois ensembles graduations. Toutefois, pour des raisons d'ergonomie, il est conseillé de n'avoir qu'une seule mise en forme pour ces graudations.

- -

Propriétés autorisées

- -

Seules les propriétés CSS suivantes sont autorisées dans une règle dont le sélecteur contient ::-ms-track (les autres propriétés sont ignorées).

- - - -

Syntaxe

- -
  {{csssyntax}}
-
- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/web/css/_doublecolon_-ms-value/index.html b/files/fr/web/css/_doublecolon_-ms-value/index.html deleted file mode 100644 index 264ead8b53..0000000000 --- a/files/fr/web/css/_doublecolon_-ms-value/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: '::-ms-value' -slug: 'Web/CSS/::-ms-value' -tags: - - CSS - - Non-standard - - Pseudo-element - - Reference -translation_of: 'Archive/Web/CSS/::-ms-value' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Le pseudo-élément ::-ms-value est un pseudo-élément spécifique à Microsoft qui permet d'appliquer des règles sur les éléments {{HTMLElement("input")}} ou {{HTMLElement("select")}}. Seules certaines propriétés peuvent être paramétrées via ce pseudo-élément, les règles agissant sur d'autres propriétés n'auront donc aucun effet.

- -

Propriétés autorisées

- -

Seules les propriétés suivantes peuvent être utilisées dans une règle dont le sélecteur contient ::-ms-value (les autres propriétés sont ignorées).

- - - -

Syntaxe

- -
{{csssyntax}}
- -

Exemples

- -
input::-ms-value {
-  color: lime;
-  font-style: italic;
-}
- -

Spécifications

- -

Ce pseudo-élément est un pseudo-élément propriétaire lié à Trident/Microsoft et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.selectors.-ms-value")}}

diff --git a/files/fr/web/css/azimuth/index.html b/files/fr/web/css/azimuth/index.html deleted file mode 100644 index c8143dcaac..0000000000 --- a/files/fr/web/css/azimuth/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: azimuth -slug: Web/CSS/azimuth -tags: - - CSS - - Obsolete - - Propriété - - Reference -translation_of: Archive/Web/CSS/azimuth ---- -
{{CSSRef}}{{obsolete_header}}{{outdated}}
- -

Utilisée avec la propriété {{cssxref("elevation")}}, azimuth permet de positionner différentes sources audio dans l'espace pour une présentation auditive. Cela permet de séparer les voix de façons naturelles, qui pourront donc provenir de différents emplacements. Une sortie stereo permettra d'obtenir un son avec des sources situées sur deux dimensions, des écouteurs binauriculaires permettent d'obtenir un son tri-dimensionnel.

- -

Syntaxe

- -
{{csssyntax}}
- -

Valeurs

- -
-
angle
-
Un angle indiquant la position de la source dans l'intervalle -360deg - 360deg. La valeur 0deg (la valeur par défaut) est dirigée vers le centre, 90deg vers la droite, 180deg vers l'arrière et 270deg ou -90deg vers la gauche.
-
- -

Image:Azimuth.png

- -

Mots-clés pour cette propriété

- - - -

Exemples

- -
h1 {
-  azimuth: 30deg;
-}
-
-td.a {
-  azimuth: far-right;
-}
-
-#12 {
-  azimuth: behind far-right;  /* 120deg */
-}
-
-p.comment {
-  azimuth: behind;  /* 180deg */
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('CSS2.1', 'aural.html#spatial-props', 'azimuth')}}{{Spec2('CSS2.1')}}Définition initiale.
- -

{{cssinfo}}

- -

Compatibilité des navigateurs

- - - -

{{Compat("css.properties.azimuth")}}

- -

Voir aussi

- - diff --git a/files/fr/web/css/overflow-clip-box-block/index.html b/files/fr/web/css/overflow-clip-box-block/index.html deleted file mode 100644 index 54c60574d8..0000000000 --- a/files/fr/web/css/overflow-clip-box-block/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: overflow-clip-box-block -slug: Web/CSS/overflow-clip-box-block -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Mozilla/Gecko/Chrome/CSS/overflow-clip-box-block ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS overflow-clip-box-block définit par rapport à quelle boîte est appliqué le rognement lorsque le contenu dépasse dans la direction de bloc (la direction orthogonale au sens d'écriture).

- -
/* Valeurs avec un mot-clé */
-overflow-clip-box-block: padding-box;
-overflow-clip-box-block: content-box;
-
-/* Valeurs globales */
-overflow-clip-box-block: inherited;
-overflow-clip-box-block: initial;
-overflow-clip-box-block: unset;
-
- -
-

Note : Sur Gecko, padding-box est, par défaut utilisé partout sauf pour <input type="text"> et les éléments semblables qui utilisent content-box. Par défaut, cette propriété est uniquement activée pour les feuilles de style de l'agent utilisateur et le contexte du chrome.

-
- -

{{cssinfo}}

- -

Syntaxe

- -

Valeurs

- -
-
padding-box
-
Avec ce mot-clé, le rognage est relatif à la boîte de remplissage (padding).
-
content-box
-
Avec ce mot-clé, le rognage est relatif à la boîte de contenu.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

padding-box

- -

HTML

- -
<div class="things">
-  <input value="ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ" class="scroll padding-box">
-  <div class="scroll padding-box"><span>ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ</span></div>
-</div>
-
- -

CSS

- -
.scroll {
-  overflow: auto;
-  padding: 0 30px;
-  width: 6em;
-  border: 1px solid black;
-  background: lime content-box;
-}
-
-.padding-box {
-  overflow-clip-box-block: padding-box;
-}
- -

JavaScript

- -
function scrollSomeElements() {
-  var elms = document.querySelectorAll('.scroll');
-  for (i=0; i < elms.length; ++i) {
-    elms[i].scrollLeft=80;
-  }
-}
-var elt = document.queryElementsByTagName('body')[0];
-
-elt.addEventListener("load", scrollSomeElements, false);
-
- -

Résultat

- -

{{EmbedLiveSample('padding-box')}}

- -

Spécifications

- -

Cette propriété a été proposée au groupe de travail CSSWG du W3C. Elle n'est pas encore en voie de standardisation mais devrait apparaître dans {{SpecName("CSS3 Overflow")}} si c'est le cas.

- -

Compatibilité des navigateurs

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéFirefox (Gecko)ChromeInternet ExplorerOperaSafari (WebKit)
Support simple{{CompatGeckoDesktop(59)}}[1]{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéFirefox Mobile (Gecko)AndroidIE PhoneOpera MobileSafari Mobile
Support simple{{CompatGeckoMobile(59)}}[1]{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

[1] Cette propriété est contrôlée par la préférence layout.css.overflow-clip-box.enabled dont la valeur par défaut est false. Elle est uniquement activée pour les feuilles de style de l'agent utilisateur ou le contexte du chrome. Voir {{bug(966992)}}.

- -

Voir aussi

- - - -

 

diff --git a/files/fr/web/css/overflow-clip-box-inline/index.html b/files/fr/web/css/overflow-clip-box-inline/index.html deleted file mode 100644 index e7df371778..0000000000 --- a/files/fr/web/css/overflow-clip-box-inline/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: overflow-clip-box-inline -slug: Web/CSS/overflow-clip-box-inline -tags: - - CSS - - Non-standard - - Propriété - - Reference -translation_of: Mozilla/Gecko/Chrome/CSS/overflow-clip-box-inline ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété CSS overflow-clip-box-inline définit par rapport à quelle boîte est appliqué le rognement lorsque le contenu dépasse dans la direction en ligne (la direction correspondant au sens d'écriture).

- -
/* Valeurs avec un mot-clé */
-overflow-clip-box-inline: padding-box;
-overflow-clip-box-inline: content-box;
-
-/* Valeurs globales */
-overflow-clip-box-inline: inherited;
-overflow-clip-box-inline: initial;
-overflow-clip-box-inline: unset;
-
- -
-

Note : Sur Gecko, padding-box est, par défaut utilisé partout sauf pour <input type="text"> et les éléments semblables qui utilisent content-box. Par défaut, cette propriété est uniquement activée pour les feuilles de style de l'agent utilisateur et le contexte du chrome.

-
- -

{{cssinfo}}

- -

Syntaxe

- -

Valeurs

- -
-
padding-box
-
Avec ce mot-clé, le rognage est relatif à la boîte de remplissage (padding).
-
content-box
-
Avec ce mot-clé, le rognage est relatif à la boîte de contenu.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

padding-box

- -

HTML

- -
<div class="things">
-  <input value="ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ" class="scroll padding-box">
-  <div class="scroll padding-box"><span>ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ</span></div>
-</div>
-
- -

CSS

- -
.scroll {
-  overflow: auto;
-  padding: 0 30px;
-  width: 6em;
-  border: 1px solid black;
-  background: lime content-box;
-}
-
-.padding-box {
-  overflow-clip-box-inline: padding-box;
-}
- -

JavaScript

- -
function scrollSomeElements() {
-  var elms = document.querySelectorAll('.scroll');
-  for (i=0; i < elms.length; ++i) {
-    elms[i].scrollLeft=80;
-  }
-}
-var elt = document.queryElementsByTagName('body')[0];
-
-elt.addEventListener("load", scrollSomeElements, false);
-
- -

Résultat

- -

{{EmbedLiveSample('padding-box')}}

- -

Spécifications

- -

Cette propriété a été proposée au groupe de travail CSSWG du W3C. Elle n'est pas encore en voie de standardisation mais devrait apparaître dans {{SpecName("CSS3 Overflow")}} si c'est le cas.

- -

Compatibilité des navigateurs

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéFirefox (Gecko)ChromeInternet ExplorerOperaSafari (WebKit)
Support simple{{CompatGeckoDesktop(59)}}[1]{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéFirefox Mobile (Gecko)AndroidIE PhoneOpera MobileSafari Mobile
Support simple{{CompatGeckoMobile(59)}}[1]{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

[1] Cette propriété est contrôlée par la préférence layout.css.overflow-clip-box.enabled dont la valeur par défaut est false. Elle est uniquement activée pour les feuilles de style de l'agent utilisateur ou le contexte du chrome. Voir {{bug(966992)}}.

- -

Voir aussi

- - - -

 

diff --git a/files/fr/web/css/overflow-clip-box/index.html b/files/fr/web/css/overflow-clip-box/index.html deleted file mode 100644 index 997137220e..0000000000 --- a/files/fr/web/css/overflow-clip-box/index.html +++ /dev/null @@ -1,175 +0,0 @@ ---- -title: overflow-clip-box -slug: Web/CSS/overflow-clip-box -tags: - - CSS - - Non-standard - - Propriété - - Propriété raccourcie - - Reference -translation_of: Mozilla/Gecko/Chrome/CSS/overflow-clip-box ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La propriété overflow-clip-box permet de définir la boîte à laquelle faire référence lorsqu'il y a un dépassement du contenu. C'est une propriété raccourcie pour les propriétés {{cssxref("overflow-clip-box-inline")}} et {{cssxref("overflow-clip-box-block")}}.

- -
/* Valeurs avec un mot-clé */
-overflow-clip-box: padding-box;
-overflow-clip-box: content-box;
-
-/* Deux valeurs */
-overflow-clip-box: padding-box content-box;
-overflow-clip-box: content-box content-box;
-
-/* Valeurs globales */
-overflow-clip-box: inherited;
-overflow-clip-box: initial;
-overflow-clip-box: unset;
-
- -
-

Note : Par défaut, sur Gecko, padding-box est utilisé partout mais <input type="text"> et les éléments similaires utilisent la valeur content-box. Avant Firefox 29, ce comportement était intégré en dur. Depuis, le comportement se base sur cette propriété qui peut être utilisée à d'autres endroits. On notera que cette propriété est uniquement activée pour les feuilles de styles définies au niveau de l'agent utilisateur et pour les contextes liés au chrome de l'application.

-
- -

{{cssinfo}}

- -

Syntaxe

- -

Valeurs

- -
-
padding-box
-
Ce mot-clé indique que le rognage du contenu qui dépasse sera fait par rapport à la boîte de remplissage (padding).
-
content-box
-
Ce mot-clé indique que le rognage du contenu qui dépasse sera fait par rapport à la boîte de contenu.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemples

- -

HTML

- -
<div class="things">
-  <input value="ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ" class="scroll padding-box">
-  <div class="scroll padding-box"><span>ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ</span></div>
-</div>
-
- -

CSS

- -
.scroll {
-  overflow: auto;
-  padding: 0 30px;
-  width: 6em;
-  border: 1px solid black;
-  background: lime content-box;
-}
-
-.padding-box {
-  overflow-clip-box: padding-box;
-}
-
- -

JavaScript

- -
function scrollSomeElements() {
-  var elms = document.querySelectorAll('.scroll');
-  for (i=0; i < elms.length; ++i) {
-    elms[i].scrollLeft=80;
-  }
-}
-var elt = document.queryElementsByTagName('body')[0];
-
-elt.addEventListener("load", scrollSomeElements, false);
-
- -

Résultat

- -

{{EmbedLiveSample('Exemples')}}

- -

Spécifications

- -

Cette propriété a été proposée dans le cadre du groupe de travail CSS du W3C. Elle n'est pas encore sur le chemin du processus standard mais si elle est acceptée, elle fera vraisemblablement partie de la spécification {{SpecName("CSS3 Overflow")}}.

- -

Compatibilité des navigateurs

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéFirefox (Gecko)ChromeInternet ExplorerOperaSafari (WebKit)
Support simple{{CompatGeckoDesktop("29.0")}}[1]{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Propriété raccourcie, gestion de deux valeurs{{CompatGeckoDesktop("59")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéFirefox Mobile (Gecko)AndroidIE PhoneOpera MobileSafari Mobile
Support simple{{CompatGeckoMobile("29.0")}}[1]{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
Propriété raccourcie, gestion de deux valeurs{{CompatGeckoMobile("59")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

[1] Cette propriété est contrôlée grâce à la préférence layout.css.overflow-clip-box.enabled dont la valeur par défaut est false. Elle est uniquement activée au sein des feuilles de style de l'agent utilisateur pour le chrome. Pour plus d'informations, voir {{bug(966992)}}.

- -

Voir aussi

- - diff --git a/files/fr/web/events/cached/index.html b/files/fr/web/events/cached/index.html deleted file mode 100644 index eb0abd8d1f..0000000000 --- a/files/fr/web/events/cached/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: cached -slug: Web/Events/cached -translation_of: Archive/Events/cached ---- -

L'événement cached est déclenché lorsque les resources répertoriées dans le manifeste du cache de l'application ont été téléchargées et que l'application est maintenant mise en cache.

- -

Informations générales

- -
-
Spécification
-
Offline
-
Interface
-
Event
-
Propagation
-
Non
-
Annulable
-
Non
-
Cible
-
applicationCache
-
Action par défaut
-
Aucune
-
- -

Propriétés

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriétéTypeDescription
-

target {{ReadOnlyInline}}

-
{{domxref("EventTarget")}}La cible de l'événement (la plus haute cible dans l'arbre du DOM).
-

type {{ReadOnlyInline}}

-
{{domxref("DOMString")}}Le type de l'événement.
-

canBubble {{ReadOnlyInline}}

-
booleanEst-ce que l'événement se propage?
-

cancelable {{ReadOnlyInline}}

-
booleanEst-il possible d'annuler l'événement?
- -

Evénements liés

- - - -

Voir aussi

- - diff --git a/files/fr/web/events/chargingchange/index.html b/files/fr/web/events/chargingchange/index.html deleted file mode 100644 index faf96a2b44..0000000000 --- a/files/fr/web/events/chargingchange/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: chargingchange -slug: Web/Events/chargingchange -translation_of: Archive/Events/chargingchange ---- -

L'événement chargingchange est déclenché lorsque l'attribut charging de l'API batterie est modifié.

- -

Informations générales

- -
-
Spécification
-
Battery
-
Interface
-
Event
-
Propagation
-
Non
-
Annulable
-
Non
-
Cible
-
{{domxref("BatteryManager")}}
-
Action par défaut
-
Aucune
-
- -

Propriétés

- -

Le callback de l'événement ne reçoit aucun objet événement, mais les propriétés peuvent être lues à partir de l'objet {{domxref("BatteryManager")}} reçu par la méthode {{domxref("navigator.getBattery")}}.

- - - - - - - - - - - - - - -
PropertyTypeDescription
{{domxref("BatteryManager.charging")}} {{readOnlyInline}}booleanEtat de charge de la batterie du système. Retourne true si la batterie est en chargement. Si l'état de la batterie du système est non-déterminé, aucune batterie n'est rattachée au système ou si si la batterie se décharge, retourne false.
- -

Exemple

- -
navigator.getBattery().then(function(battery) {
-
-  console.log("Battery charging? " + (battery.charging ? "Yes" : "No"));
-
-  battery.addEventListener('chargingchange', function() {
-    console.log("Battery charging? " + (battery.charging ? "Yes" : "No"));
-  });
-
-});
-
- -

Evénements liés

- - diff --git a/files/fr/web/events/chargingtimechange/index.html b/files/fr/web/events/chargingtimechange/index.html deleted file mode 100644 index da83eed90c..0000000000 --- a/files/fr/web/events/chargingtimechange/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: chargingtimechange -slug: Web/Events/chargingtimechange -translation_of: Archive/Events/chargingtimechange ---- -

L'événement chargingtimechange est déclenché quand l'attribut chargingTime de l'API batterie a été modifié.

- -

Informations générales

- -
-
Spécification
-
Battery
-
Interface
-
Event
-
Propagation
-
Non
-
Annulable
-
Non
-
Cible
-
{{domxref("BatteryManager")}}
-
Action par défaut
-
Aucune
-
- -

Propriétés

- -

Le callback de l'événement ne reçoit aucun objet événement, mais les propriétés peuvent être lues à partir de l'objet {{domxref("BatteryManager")}} reçu par la méthode {{domxref("navigator.getBattery")}}.

- - - - - - - - - - - - - - -
PropertyTypeDescription
{{domxref("BatteryManager.chargingTime")}} {{readOnlyInline}}double (float)Le temps restant en seconde jusqu'à ce que la batterie du système soit pleine. Retourne 0 si la batterie est chargée. Retourne l'infini positif si la batterie se décharge ou si l'implémentation est incapable de trouver le temps restant de charge.
- -

Exemple

- -
navigator.getBattery().then(function(battery) {
-
-  console.log("Battery charging time: " + battery.chargingTime + " seconds");
-
-  battery.addEventListener('chargingtimechange', function() {
-    console.log("Battery charging time: " + battery.chargingTime + " seconds");
-  });
-
-});
-
- -

Evénements liés

- - diff --git a/files/fr/web/events/checking/index.html b/files/fr/web/events/checking/index.html deleted file mode 100644 index 4260ed04cf..0000000000 --- a/files/fr/web/events/checking/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: checking -slug: Web/Events/checking -translation_of: Archive/Events/checking ---- -

L'événement checking est déclenché lorsque le user agent recherche une mise à jour ou tente de télécharger le manifeste de cache pour la première fois

- -

Informations générales

- -
-
Spécification
-
Offline
-
Interface
-
Event
-
Propagation
-
Non
-
Annulable
-
Non
-
Cible
-
applicationCache
-
Action par défaut
-
Aucune
-
- -

Propriétés

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyTypeDescription
target {{ReadOnlyInline}}EventTarget (DOM element)La cible de l'événement (la plus haute cible dans l'arbre du DOM).
type {{ReadOnlyInline}}stringLe type de l'événement.
canBubble {{ReadOnlyInline}}booleanEst-ce que l'événement se propage?
cancelable {{ReadOnlyInline}}booleanEst-il possible d'annuler l'événement?
- -

Evénements liés

- - - -

Voir aussi

- - diff --git a/files/fr/web/events/downloading/index.html b/files/fr/web/events/downloading/index.html deleted file mode 100644 index bcb9af0622..0000000000 --- a/files/fr/web/events/downloading/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: downloading -slug: Web/Events/downloading -translation_of: Archive/Events/downloading ---- -

L'événement downloading est déclenché après la vérification de la mise à jour du cache d'application, si le user-agent a trouvé une mise à jour et la récupère ou  télécharge les resources répertoriées par le manifeste du cache pour la première fois.

- -

Informations générales

- -
-
Spécification
-
Offline
-
Interface
-
Event
-
Ppropagation
-
Non
-
Annulable
-
Non
-
Cible
-
applicationCache
-
Action par défaut
-
Aucune
-
- -

Propriétés

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyTypeDescription
target {{ReadOnlyInline}}EventTarget (DOM element)La cible de l'événement ( La cible la plus haute dans l'arbre DOM).
type {{ReadOnlyInline}}stringLe type d'événement.
canBubble {{ReadOnlyInline}}booleanEst-ce que l'événement se propage?
cancelable {{ReadOnlyInline}}booleanEst-il possible d'annuler l'événement.
- -

Evénements liés

- - - -

Voir aussi

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.1/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.1/index.html" deleted file mode 100644 index f5f42abe9d..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.1/index.html" +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.1 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.1 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.1 ---- -
{{jsSidebar("New_in_JS")}}
- -

Ce document liste les modifications apportées à JavaScript entre Netscape Navigator 2.0 et 3.0. L'ancienne documentation Netscape décrit ceci comme « les fonctionnalités ajoutées après la version 1 ». Netscape Navigator 3.0 est sorti le 19 août 1996. Netscape Navigator 3.0 était la deuxième version majeure du navigateur à supporter JavaScript.

- -

Versions de JavaScript

- -

Netscape Navigator 3.0 a introduit des versions pour le langage JavaScript :

- -
<SCRIPT LANGUAGE="JavaScript">    <!-- JavaScript pour Navigator 2.0. -->
-<SCRIPT LANGUAGE="JavaScript1.1"> <!-- JavaScript pour Navigator 3.0. -->
- -

Nouvelles fonctionnalités de JavaScript 1.1

- -

Nouveaux objets

- - - -

Nouvelles propriétés

- - - -

Nouvelles méthodes

- - - -

Nouveaux opérateurs

- - - -

Autres fonctionnalités apparues

- - - -

Fonctionnalités modifiées avec JavaScript 1.1

- - - -

 

diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.2/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.2/index.html" deleted file mode 100644 index c5d42ee62b..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.2/index.html" +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.2 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.2 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.2 ---- -
{{jsSidebar("New_in_JS")}}
- -

Ce document liste les modifications apportées à JavaScript entre Netscape Navigator 3.0 et Netscape Navigator 4.0. L'ancienne documentation de Netscape peut être consultée sur archive.org. Netscape Navigator 4.0 est sorti le 11 juin 1997. Netscape Navigator 4.0 était la troisième version majeure du navigateur à supporter JavaScript.

- -

Versions de JavaScript

- -

Netscape Navigator 4.0 permet d'exécuter les versions de JavaScript inférieures ou égales à 1.2. On notera que Netscape Navigator 3.0, ainsi que les versions antérieures, ignoraient les scripts dont l'attribut LANGUAGE correspondait à "JavaScript1.2" ou à une autre version ultérieure.

- -
<SCRIPT LANGUAGE="JavaScript1.1"> <!-- JavaScript pour Navigator 3.0. -->
-<SCRIPT LANGUAGE="JavaScript1.2"> <!-- JavaScript pour Navigator 4.0. -->
- -

Nouvelles fonctionnalités de JavaScript 1.2

- -

Nouveaux objets

- - - -

Nouvelles propriétés

- - - -

Nouvelles méthodes

- - - -

Nouveaux opérateurs

- - - -

Nouvelles instructions

- - - -

Nouvelles fonctionnalités supplémentaires

- - - -

Les fonctionnalités modifiées avec JavaScript 1.2

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.3/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.3/index.html" deleted file mode 100644 index 19bb50046e..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.3/index.html" +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.3 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.3 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.3 ---- -
{{jsSidebar("New_in_JS")}}
- -

Le document qui suit est un journal des modifications concernant JavaScript entre les versions de Netscape Navigator 4.0 et 4.5. L'ancienne documentation de Netscape peut être consultée sur archive.org. Netscape Navigator 4.5 est sorti le 19 octobre 1998.

- -

Le changement le plus important concernant JavaScript 1.3 fut la conformité avec ECMA-262 et Unicode grâce au retrait des incohérences entre JavaScript 1.2 et le nouveau standard ECMA (publié en juin 1997). Certaines fonctionnalités supplémentaires de la version 1.2, non définies par ECMA-262, furent conservées dans le langage JavaScript (voir ci-après la liste des différences).

- -

Versions de JavaScript

- -

Netscape Communicator et Navigator 4.06 et 4.5 exécutent les versions de JavaScript inférieures ou égales à 1.3. Les versions de Communicator et Navigator 4.0-4.05 et inférieures ignoraient les scripts dont l'attribut LANGUAGE avait la valeur "JavaScript1.3" ou supérieur.

- -
<SCRIPT LANGUAGE="JavaScript1.2"> <!-- JavaScript pour Navigator 4.0. -->
-<SCRIPT LANGUAGE="JavaScript1.3"> <!-- JavaScript pour Navigator 4.5. -->
- -

Nouvelles fonctionnalités de JavaScript 1.3

- -

Nouveaux objets globaux

- - - -

Nouvelles méthodes

- - - -

Nouvelles fonctionnalités supplémentaires

- - - -

Les fonctionnalités modifiées avec JavaScript 1.3

- - - -

Les fonctionnalités de JavaScript 1.3 hors d'ECMA-262

- -

Les listes qui suivent comparent la version d'ECMA-262 avant juin 1998 et JavaScript 1.3. Les fonctionnalités qui suivent ne faisaient pas parties du standard mais furent implémentées avec JavaScript 1.3.

- -

Les opérateurs et mots-clés

- - - -

Les instructions

- - - -

Les objets natifs

- - - -

Les méthodes d'objets natifs

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.4/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.4/index.html" deleted file mode 100644 index 990ecbe991..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.4/index.html" +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.4 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.4 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.4 ---- -
{{jsSidebar("New_in_JS")}}
- -

Ce document liste les modifications apportées avec JavaScript 1.4 qui fut uniquement utilisé côté serveur pour Nescape, il fut sorti en 1999. L'ancienne documentation pour Netscape peut être trouvée sur archive.org.

- -

Nouvelles fonctionnalités de JavaScript 1.4

- - - -

Les fonctionnalités modifiées avec JavaScript 1.4

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.5/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.5/index.html" deleted file mode 100644 index 6b506a0ba6..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.5/index.html" +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.5 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.5 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.5 ---- -
{{jsSidebar("New_in_JS")}}
- -
Ce document liste les modifications apportées avec JavaScript 1.5. Cette version était incluse dans Netscape Navigator 6.0 qui est sorti le 14 novembre 2000. Cette version de JavaScript fut également utilisée dans les versions suivantes de Netscape Navigator et dans Firefox 1.0. JavaScript 1.5 peut être comparé à JScript 5.5 et Internet Explorer 5.5, qui fut sorti en juillet 2000. Le standard ECMA correspondant est la troisième édition d'ECMA-262 (décembre 1999).
- -

Nouvelles fonctionnalités de JavaScript 1.5

- - - -

Fonctionnalités modifiées avec JavaScript 1.5

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.6/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.6/index.html" deleted file mode 100644 index c45e80840a..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.6/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.6 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.6 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.6 ---- -
{{jsSidebar("New_in_JS")}}
- -

Ce document liste les modifications apportées avec JavaScript 1.6. Cette version fut incluse avec Firefox 1.5 (Gecko 1.8) sorti en novembre 2005. Le standard ECMA correspondant est la troisième édition d'ECMA-262 et ECMAScript for XML (E4X) définit des fonctionnalités additionnelles. Plusieurs fonctionnalités furent introduites avec cette version : E4X, des nouvelles méthodes pour Array et les méthodes génériques pour Array et String.

- -

Nouvelles fonctionnalités de JavaScript 1.6

- - - -

Fonctionnalités modifiées avec JavaScript 1.6

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.7/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.7/index.html" deleted file mode 100644 index b88fa1606e..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.7/index.html" +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.7 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.7 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.7 ---- -
{{jsSidebar("New_in_JS")}}
- -

Cette page présente le journal des modifications (changelog) pour JavaScript 1.7. Cette version de Javascript a été incluse dans Firefox 2 (Octobre 2006).

- -

JavaScript 1.7 est une mise à jour du langage qui introduit plusieurs nouvelles fonctionnalités, en particulier : les générateurs et les itérateurs, la définition de tableaux par compréhension, les expressions let et l'assignation par décomposition.

- -

Utilisation de JavaScript 1.7

- -

Afin de pouvoir utiliser certaines des nouvelles fonctionnalités de JavaScript 1.7, il est nécessaire de spécifier qu'on utilise JavaScript 1.7. Dans du code HTML ou XUL, on utilisera :

- -
<script type="application/javascript;version=1.7"></script>
-
- -

Si vous utilisez le shell JavaScript, vous devrez définir la version utilisée à l'aide de l'argument en ligne de commande -version 170 ou de la fonction version() :

- -
version(170);
-
- -

Pour utiliser les fonctionnalités nécessitant l'utilisation des nouveaux mots-clés « yield » et « let », il est obligatoire de spécifier l'utilisation de la version 1.7, les scripts existants pouvant utiliser ces mots-clés comme noms de variables ou de fonctions. Les fonctionnalités n'utilisant pas de nouveaux mots-clés (assignations déstructurantes et définitions de tableaux par compréhension) peuvent être utilisées sans préciser la version de JavaScript.

- -

Nouvelles fonctionnalités dans JavaScript 1.7

- -

Les fonctionnalités suivantes ont été ajoutées à JavaScript 1.7 et ne faisaient partie d'aucun standard ECMA-262 lors de leur introduction. Dans les versions plus récentes de Firefox, leur implémentation a été mise à jour de façon à respecter la sémantique de ECMAScript Edition 6. Veuillez consulter les pages de référence pour plus d'informations sur ces évolutions.

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.1/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.1/index.html" deleted file mode 100644 index 3b2a3b16a0..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.1/index.html" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.8.1 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.8.1 -tags: - - Firefox 3.5 - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.1 ---- -
{{jsSidebar("New_in_JS")}}
- -

Cette page présente le journal des modifications (changelog) pour JavaScript 1.8.5. Cette version de Javascript a été introduite dans Firefox 3.5.

- -

JavaScript 1.8.1 est une version de mise à jour mineure de JavaScript du point de vue de la syntaxe. Le principal changement lié à cette version est l'ajout du compilateur juste-à-temps Tracemonkey (en anglais), qui améliore les performances.

- -

Nouvelles fonctionnalités dans JavaScript 1.8.1

- - - -

Changements apportés par JavaScript 1.8.1

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.5/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.5/index.html" deleted file mode 100644 index 1e03d6f2a0..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8.5/index.html" +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.8.5 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.8.5 -tags: - - ECMAScript 5 - - Firefox 4 - - JavaScript - - JavaScript 1.8.5 - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.5 ---- -
{{jsSidebar("New_in_JS")}}
- -

Cette page présente le journal des modifications (changelog) pour JavaScript 1.8.5. Cette version de Javascript a été introduite dans Firefox 4.

- -

Nouvelles fonctionnalités dans JavaScript 1.8.5

- -

Nouvelles fonctions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionDescription
{{jsxref("Object.create")}}Crée un nouvel objet avec l'objet prototype et les propriétés fournies. {{bug("492840")}}
{{jsxref("Object.defineProperty")}}Ajoute une propriété nommée et avec un descripteur à un objet.
{{jsxref("Object.defineProperties")}}Ajoute des propriétés nommées et avec descripteurs à un object.
{{jsxref("Object.getOwnPropertyDescriptor")}}Renvoie un descripteur de propriété d'une propriété nommée ou d'un objet. {{bug("505587")}}
{{jsxref("Object.keys")}}Renvoie un tableau avec toutes les propriétés énumérables d'un objet. {{bug("307791")}}
{{jsxref("Object.getOwnPropertyNames")}}Renvoie un tableau avec toutes les propriétés (énumérables et non énumérables) d'un objet. {{bug("518663")}}
{{jsxref("Object.preventExtensions")}}Empêche l'ajout de nouvelles propriétés à un objet. {{bug("492849")}}
{{jsxref("Object.isExtensible")}}Détermine s'il est possible d'étendre un objet. {{bug("492849")}}
{{jsxref("Object.seal")}}Empêche la suppression des propriétés d'un objet par un autre code. {{bug("492845")}}
{{jsxref("Object.isSealed")}}Détermine si un objet est scellé. {{bug("492845")}}
{{jsxref("Object.freeze")}}« Gèle » un objet : un code externe ne peut pas supprimer ou changer des propriétés {{bug("492844")}}
{{jsxref("Object.isFrozen")}}Détermine si un objet a été gelé. {{bug("492844")}}
{{jsxref("Array.isArray")}}Vérifie si une variable est un tableau.  {{bug("510537")}}
{{jsxref("Date.prototype.toJSON")}}Renvoie une chaîne de caractères JSON depuis un objet Date.
{{jsxref("Function.prototype.bind")}}Crée une nouvelle fonction qui, lorsqu'elle est appelée, appelle elle-même cette fonction dans le contexte fourni (avec une séquence d'arguments) {{bug("429507")}}
- -

Nouvelles fonctionnalités ECMAScript5

- - - -

Avancées de standardisation

- -

Les diverses syntaxes non-standard utilisées pour définir les getters et les setters ont été retirées. La syntaxe définie dans ECMAScript 5 n'a pas été changée. Ces syntaxes étaient assez obscures et rarement utilisées : si vous pensez être concerné, veuillez lire cet article de blog (anglais) pour plus de détails.

- -

Nouveaux objets

- - - - - - - - - - - - - - -
ObjetDescription
Ancienne API ProxyOffre un support pour la création de proxies d'Object et Function permettant la méta-programmation en JavaScript.
- -

Changements apportés par JavaScript 1.8.5

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8/index.html" deleted file mode 100644 index b9574c34ab..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/1.8/index.html" +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Nouveautés de JavaScript 1.8 -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript/1.8 -tags: - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8 ---- -
{{jsSidebar("New_in_JS")}}
- -

Cette page présente le journal des modifications (changelog) pour JavaScript 1.8. Cette version de Javascript a été introduite dans Firefox 3 avec Gecko 1.9. Consultez le {{ Bug(380236) }} pour suivre les progrès du développement de JavaScript 1.8.

- -

Utilisation de JavaScript 1.8

- -

Afin d'utiliser certaines des nouvelles fonctionnalités de JavaScript 1.8, utilisez :

- -
<script type="application/javascript;version=1.8">
-  ... votre code ...
-</script>
-
- -

Une autre méthode (non recommandée) consiste à utiliser l'attribut déprécié language de la balise <script> avec la valeur « JavaScript1.8 ».

- -

Lorsque vous utilisez le shell JavaScript, des composants XPCOM JavaScript ou des éléments <script> XUL, la dernière version de JavaScript (JavaScript 1.8 dans Mozilla 1.9) est utilisée automatiquement (cf. {{ Bug(381031) }}, {{ Bug(385159) }}).

- -

Pour utiliser les fonctionnalités nécessitant l'utilisation des nouveaux mots-clés « yield » et « let », la version 1.7 ou supérieure doit être spécifiée, car du code existant peut utiliser ces mots-clés comme noms de variables ou de fonctions. Les fonctionnalités qui n'utilisent pas de nouveaux mots-clés (comme les expressions génératrices) peuvent être utilisés sans préciser la version de JavaScript.

- -

Nouvelles fonctionnalités dans JavaScript 1.8

- - - -

Changements apportés par JavaScript 1.8

- -

Affectation par décomposition dans les boucles for...in

- -

L'une des modifications apportées par JavaScript 1.8 est la correction d'un bug lié à l'{{ jsxref('Opérateurs/Affecter_par_décomposition', 'Affection par décomposition de tableaux') }}, introduite avec JavaScript 1.7. Il était auparavant possible de décomposer les clés et valeurs d'un tableau avec la syntaxe for ( var [clé, valeur] in tableau ). Cela rendait cependant impossible la décomposition des valeurs d'un tableau de tableaux. Ce bug a été résolu ({{ Bug("366941") }}), et la syntaxe a utiliser est devenue la suivante : for ( var [clé, valeur] in Iterator(tableau)).

diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/index.html" deleted file mode 100644 index c6140c5323..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/index.html" +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Nouveautés et historique de JavaScript -slug: Web/JavaScript/Nouveautés_et_historique_de_JavaScript -tags: - - ECMAScript - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript ---- -
{{jsSidebar("New_in_JS")}}
- -

Ce chapitre contient des informations sur l'historique des versions de JavaScript et sur le statut de l'implémentation des applications basées sur SpiderMonkey telles que Firefox.

- -

Versions d'ECMAScript

- -
-
Ressources sur le language
-
Plus d'informations sur les standards ECMAScript sur lesquels est basé JavaScript.
-
Support d'ECMAScript 5
-
Le statut d'implémentation relatif à l'édition 5.1 du standard ECMA-262 pour les moteurs et les produits Mozilla.
-
Support d'ECMAScript 2015
-
Le statut d'implémentation relatif à l'édition 6 du standard ECMA-262 (ES2015/ES6) pour les moteurs et les produits Mozilla.
-
Support d'ECMAScript Next
-
Le statut d'implémentation relatif aux éditions à venir du standard ECMA-262 qui suit désormais un rythme annuel (ES2016/ES2017/ES2018/etc.) pour les moteurs et les produits Mozilla.
-
- -

Notes des versions JavaScript

- -
-
Notes des versions de Firefox pour les fonctionnalités liées à JavaScript
-
Ces notes de versions décrivent les fonctionnalités JavaScript implémentées à partir de Firefox 5.
-
- -

Versions de JavaScript

- -

Notion dépréciée ({{deprecated_inline()}}). Le versionnement de JavaScript et le ciblage de la version pour les fonctionnalités est spécifique à Mozilla et est en cours de suppression. Firefox 4 fut la dernière version de Firefox qui fait référence à une version de JavaScript (en l'occurence la version 1.8.5). Avec les standards ECMA, les fonctionnalités de JavaScript sont désormais mentionnées avec l'édition ECMA-262 qui comporte leur définition initiale, par exemple ECMAScript 2015 (ES2015/ES6).

- -

JavaScript fut publié avec la version 1.0 en mars 1996 dans les logiciels Netscape Navigator 2.0 et Internet Explorer 2.0.

- -
-
JavaScript 1.1
-
La version livrée avec Netscape Navigator 3.0. Sortie le 19 août 1996.
-
JavaScript 1.2
-
La version livrée avec Netscape Navigator 4.0-4.05. Sortie le 11 juin 1997.
-
JavaScript 1.3
-
La version livrée avec Netscape Navigator 4.06-4.7x. Sortie le 19 octobre 1998.
- Travail de standardisation pour la mise aux normes par rapport aux deux premières édition d'ECMA-262.
-
JavaScript 1.4
-
La version livrée pour le JavaScript côté serveur de Netscape. Sortie en 1999.
-
JavaScript 1.5
-
La version livrée avec Netscape Navigator 6.0 et Firefox 1.0. Sortie le 14 novembre 2000.
- Travail de standardisation pour la mise aux normes par rapport à la troisième édition d'ECMA-262.
-
JavaScript 1.6
-
Version livrée avec Firefox 1.5. Sortie en novembre 2005.
- Inclue ECMAScript pour XML (E4X), de nouvelles méthodes pour Array et les méthodes génériques pour String et Array.
-
JavaScript 1.7
-
Version livrée avec Firefox 2. Sortie en octobre 2006.
- Inclue les générateurs et itérateurs historiques (différents de ceux définis par ECMAScript 2015 (ES6)), les compréhensions de tableaux, les expressions let et l'affectation par décomposition.
-
JavaScript 1.8
-
Version livrée avec Firefox 3. Sortie en juin 2008.
- Inclue les expressions pour les fermetures, les expressions de générateurs (ancienne version, différente de celles d'ECMAScript 2015 (ES6)) et Array.reduce()
-
JavaScript 1.8.1
-
Version livrée avec Firefox 3.5. Sortie le 30 juin 2009.
- Inclue le compilateur JIT TraceMonkey et le support du JSON natif.
-
JavaScript 1.8.2
-
Version livrée avec Firefox 3.6. Sortie le 22 juin 2009.
- Inclue uniquement quelques changements mineurs.
-
JavaScript 1.8.5
-
Version livrée avec Firefox 4. Sortie le 27 juillet 2010.
- Inclue de nombreuses fonctionnalités pour la mise aux normes par rapport à la cinquième édition d'ECMA-262 Edition 5.
- Cette version est la dernière version de JavaScript utilisant cette méthode dépréciée pour la numérotation.
-
diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_2015_par_mozilla/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_2015_par_mozilla/index.html" deleted file mode 100644 index cbfddccb7a..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_2015_par_mozilla/index.html" +++ /dev/null @@ -1,273 +0,0 @@ ---- -title: Support d'ECMAScript 6 par Mozilla -slug: >- - Web/JavaScript/Nouveautés_et_historique_de_JavaScript/Support_ECMAScript_2015_par_Mozilla -tags: - - ECMAScript 2015 - - Firefox - - JavaScript -translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_2015_support_in_Mozilla ---- -
{{jsSidebar("New_in_JS")}}
- -

ECMAScript 2015 (sixième édition) est la version actuelle pour le langage ECMAScript. C'est le standard qui définit l'implémentation de JavaScript, notamment pour SpiderMonkey, le moteur utilisé par Firefox et les autres applications Mozilla.

- -

Cette version est appelée avec le nom de code « ES.next », « Harmony » ou « ECMAScript 6 ». Les brouillons de spécification (aussi appelés drafts) se trouvent sur le wiki officiel d'ECMA. Le premier draft basé sur ECMAScript 5.1, a été publié le 12 juillet 2011 sous le nom « ES.next ». À partir d'août 2014, ECMAScript 2015 n'a plus accepté de nouvelles fonctionnalités et a été stabilisé. Il a été officiellement approuvé et fut publié le 17 juin 2015 par l'assemblée générale ECMA. Ce standard apparaîtra également sur le standard international ISO/IEC 16262:2016.

- -

Une version PDF et une version HTML du standard sont disponibles et peuvent être librement téléchargéees sur ecma-international.org.

- -

La liste de diffusion es-discuss permet de discuter des standards ECMAScript.

- -

Bibliothèque standard

- -

Ajouts à l'objet Array

- - - -

Les objets Map et Set et leurs équivalents avec références faibles

- - - -

Nouvelles fonctions pour l'objet Math

- - - -

Ajouts à l'objet Number

- - - -

Ajouts à l'objet Object

- - - -

Ajouts à l'objet Date

- - - -

Nouvel objet Promise

- - - -

Nouvel objet Proxy

- - - -

Nouvel objet Reflect

- - - -

Ajouts à l'objet RegExp

- - - -

Ajouts à l'objet String

- - - -

Nouvel objet Symbol

- - - -

Tableaux typés

- -

Les tableaux typés sont désormais spécifiés par ECMAScript 2015, ils ne suivent donc plus leur propre spécification.

- - - -

Expressions et opérateurs

- - - -

Instructions

- - - -

Fonctions

- - - -

Autres fonctionnalités

- - - -

Voir aussi

- - diff --git "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_5_par_mozilla/index.html" "b/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_5_par_mozilla/index.html" deleted file mode 100644 index 03ba972133..0000000000 --- "a/files/fr/web/javascript/nouveaut\303\251s_et_historique_de_javascript/support_ecmascript_5_par_mozilla/index.html" +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Support d'ECMAScript 5 par Mozilla -slug: >- - Web/JavaScript/Nouveautés_et_historique_de_JavaScript/Support_ECMAScript_5_par_Mozilla -tags: - - ECMAScript 5 - - JavaScript - - Versions -translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla ---- -
{{jsSidebar("New_in_JS")}}
- -

ECMAScript 5.1 est une version publiée du standard sur lequel est basé JavaScript. Cette version a été approuvée en juin 2011.

- -

L'environnement d'exécution JavaScript utilisé dans les dernières versions des projets Mozilla (Firefox et Thunderbird par exemple) supporte entièrement les fonctionnalités d'ECMAScript 5.1. Cet article traite des différentes fonctionnalités d'ECMAScript 5.1 et de leur support par les différentes versions de l'environnement JavaScript de Mozilla.

- -

Fonctionnalités supportées

- -

Ajoutées dans JavaScript 1.8.5 (Gecko 2, Firefox 4 et ultérieures)

- -

Firefox 4 supporte entièrement ECMAScript 5, y compris les méthodes Object.* et le mode strict. Voir la page Nouveautés de JavaScript 1.8.5 pour plus d'informations.

- -

Ajoutées dans JavaScript 1.8.1 (Gecko 1.9.1, Firefox 3.5)

- - - -

Des  améliorations apportées par ECMAScript 5 ont permis de corriger l'algorithme d'analyse (parsing) pour ne plus évaluer du code XHTML comme du code JavaScript dans certains cas.

- -

Ajoutées dans JavaScript 1.6 (Gecko 1.8, Firefox 1.5)

- -

De nouvelles méthodes Array ont été introduites pour faciliter la manipulation des tableaux. Ces méthodes faisaient partie de JavaScript depuis JavaScript 1.6. Elles ont été standardisées avec ECMAScript 5.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/fonctions/arguments/caller/index.html b/files/fr/web/javascript/reference/fonctions/arguments/caller/index.html deleted file mode 100644 index 0a6660cab2..0000000000 --- a/files/fr/web/javascript/reference/fonctions/arguments/caller/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: caller -slug: Web/JavaScript/Reference/Fonctions/arguments/caller -tags: - - Functions - - JavaScript - - Obsolete - - Propriété - - Reference - - arguments -translation_of: Archive/Web/JavaScript/arguments.caller ---- -
{{jsSidebar("Functions")}}{{obsolete_header}}
- -
La propriété obsolète arguments.caller était utilisée afin de fournir la fonction ayant appelée la fonction en cours d'exécution. Cette propriété a été retirée et ne fonctione plus.
- -

Description

- -

Cette propriété n'est plus disponible. Vous pouvez en revanche utiliser {{jsxref("Function.caller")}}.

- -
function quiAppelle() {
-   if (quiAppelle.caller == null)
-      console.log('Appel depuis la portée globale.');
-   else
-      console.log(quiAppelle.caller + ' a appelé !');
-}
- -

Exemples

- -

Le code suivant pouvait être utilisé pour connaître la valeur de arguments.caller dans une fonction. La propriété étant obsolète, le code ne fonctionne plus.

- -
function quiAppelle() {
-   if (arguments.caller == null)
-      console.log('Appel depuis la portée globale.');
-   else
-      console.log(arguments.caller + ' a appelé !');
-}
-
- -

Spécifications

- -

Cette propriété ne fait partie d'aucun standard. Elle fut implémentée avec JavaScript 1.1 et retirée avec le {{bug(7224)}} en raisons d'éventuelles vulnérabilités.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.functions.arguments.caller")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/instructions/for_each...in/index.html b/files/fr/web/javascript/reference/instructions/for_each...in/index.html deleted file mode 100644 index 103651bc31..0000000000 --- a/files/fr/web/javascript/reference/instructions/for_each...in/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: for each...in -slug: Web/JavaScript/Reference/Instructions/for_each...in -tags: - - Déprécié - - E4X - - Instruction - - JavaScript - - Reference -translation_of: Archive/Web/JavaScript/for_each...in ---- -
{{JsSidebar("Statements")}}{{deprecated_header}}
- -
-

L'instruction for each...in est dépréciée car elle appartient au standard ECMA-357 (E4X). E4X sera désactivé par défaut puis retiré à l'avenir. Il faut désormais utiliser l'instruction {{jsxref("Instructions/for...of","for...of")}}. (Voir {{ bug("791343")}}.)
- Firefox lance désormais des avertissements lorsque des boucles for each...in et cette instruction a été retirée du canal Nightly.
- Veuillez consulter l'article sur cet avertissement pour des indications quant aux solutions de migration.

-
- -

L'instruction for each...in itère une variable donnée sur toutes les propriétés d'un objet. Pour chaque propriété distincte, une instruction spécifique est exécutée.

- -

Syntaxe

- -
for each (variable in objet) {
-  instruction
-}
- -
-
variable
-
Une variable à itérer sur les valeurs des propriétés, elle peut être déclarée avec le mot-clé {{jsxref("Instructions/var","var")}}. Cette variable est locale à la fonction et non à la boucle.
-
- -
-
objet
-
L'objet pour lequel les propriétés sont itérées.
-
- -
-
instruction
-
Une instruction à exécuter pour chaque propriétés. Pour effectuer plusieurs instructions au sein de la boucle, il faut utiliser une instruction de {{jsxref("Instructions/block","bloc","",1)}} ({ ... }) pour regrouper les instructions.
-
- -

Description

- -

L'itération ne s'effectue que sur les propriétés spécifiques, définies par l'utilisateur. Elle ne s'effectuera pas sur les propriétés implicites déjà intégrées comme les méthodes objet telles que la méthode indexOf des chaînes de caractères.

- -

Exemple

- -

Utiliser for each...in

- -

Attention : Ne jamais utiliser cette boucle sur un tableau. Ne l'utiliser que pour les objets. (Voir des détails sur la page de l'instruction {{jsxref("Instructions/for...in")}}).

- -

Le fragment de code parcourt les propriétés d'un objet et en calcule leur somme.

- -
var somme = 0;
-var obj = {prop1: 5, prop2: 13, prop3: 8};
-
-for each (var item in obj) {
-  somme += item;
-}
-
-console.log(somme); // affiche "26", ce qui correspond à 5+13+8
- -

Spécifications

- -

Cette instruction ne fait partie d'aucune spécification ECMA-262. Elle a été implémentée avec JavaScript 1.6 et est dépréciée.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.statements.for_each_in")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/array/observe/index.html b/files/fr/web/javascript/reference/objets_globaux/array/observe/index.html deleted file mode 100644 index ea02585a28..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/array/observe/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Array.observe() -slug: Web/JavaScript/Reference/Objets_globaux/Array/observe -tags: - - Array - - JavaScript - - Méthode - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Array.observe ---- -
{{JSRef}} {{obsolete_header}}
- -

La méthode Array.observe() est utilisée afin d'observer les modifications apportées à un tableau de façon asynchrone. Elle fonctionne de la même façon que la méthode {{jsxref("Object.observe()")}} pour les objets. Cette méthode fournit un flux de changements, triés dans l'ordre dans lequel ils se sont produits. Utiliser cette méthode est équivalent à appeler {{jsxref("Object.observe()")}} avec la liste ["add", "update", "delete", "splice"] comme troisième argument. Toutefois, cette API a été dépréciée et retirée des navigateurs. Il est préférable d'utiliser l'objet {{jsxref("Proxy")}}, plus générique, à la place.

- -

Syntaxe

- -
Array.observe(arr, callback)
- -

Paramètres

- -
-
arr
-
Le tableau qu'on souhaite observer.
-
callback
-
La fonction à appeler à chaque fois que des changements sont effectués. Cette fonction est appelée avec l'argument suivant : -
-
changes
-
Un tableau d'objets représentant chacun une modification. Les propriétés de ces objets sont : -
    -
  • name : Le nom de la propriété qui a été modifiée.
  • -
  • object : Le tableau modifié (une fois que la modification a été effectuée).
  • -
  • type : Une chaîne de caractères indiquant le type de modification qui a eu lieu. Elle peut valoir "add" (pour ajout), "update" (pour modification), "delete"(pour suppression) ou "splice" (pour découpage).
  • -
  • oldValue : Propriété présente uniquement lorsque le type vaut "update" ou "delete". La valeur de la propriété est la valeur avant qu'elle ait été modifiée.
  • -
  • index : Propriété présente uniquement lorsque le type vaut "splice". L'index auquel la modification a eu lieu.
  • -
  • removed : Propriété présente uniquement lorsque le type vaut "splice". Le tableau des éléments supprimés.
  • -
  • addedCount : Propriété uniquement présente lorsque le type vaut "splice". Le nombre d'éléments ajoutés.
  • -
-
-
-
-
- -

Description

- -

La fonction callback est appelée à chaque fois qu'un changement est apporté à arr, elle est appelée avec un argument qui est un tableau contenant tous les changements qui se sont produits, dans l'ordre dans lequel ils se sont produits. 

- -
-

Les modifications apportées avec les méthodes d'Array, comme Array.prototype.pop(), seront enregistrées avec le type "splice". Les modifications d'éléments qui ne modifient pas la longueur du tableau sont enregistrés en tant qu'update".

-
- -

Exemples

- -

Enregistrer les différents types de modifications

- -
var arr = ['a', 'b', 'c'];
-
-Array.observe(arr, function(changes) {
-  console.log(changes);
-});
-
-arr[1] = 'B';
-// [{type: 'update', object: <arr>, name: '1', oldValue: 'b'}]
-
-arr[3] = 'd';
-// [{type: 'splice', object: <arr>, index: 3, removed: [], addedCount: 1}]
-
-arr.splice(1, 2, 'beta', 'gamma', 'delta');
-// [{type: 'splice', object: <arr>, index: 1, removed: ['B', 'c'], addedCount: 3}]
-
- -

Spécifications

- -

Proposition de spécification (Strawman proposal) (en anglais).

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Array.observe")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/array/unobserve/index.html b/files/fr/web/javascript/reference/objets_globaux/array/unobserve/index.html deleted file mode 100644 index bb32557e28..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/array/unobserve/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Array.unobserve() -slug: Web/JavaScript/Reference/Objets_globaux/Array/unobserve -tags: - - Array - - JavaScript - - Méthode - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Array.unobserve ---- -
{{JSRef}} {{obsolete_header}}
- -

La méthode Array.unobserve() est utilisée pour retirer les observateurs placés grâce à {{jsxref("Array.observe()")}}. Cette API a été dépréciée et retirée des navigateurs. À la place, il est préférable d'utiliser l'objet {{jsxref("Proxy")}}, plus générique.

- -

Syntaxe

- -
Array.unobserve(arr, callback)
- -

Paramètres

- -
-
arr
-
Le tableau qu'on souhaite arrêter d'observer.
-
callback
-
La référence à l'observateur dont on souhaite qu'il arrête d'être appelé à chaque changement apporté au tableau arr.
-
- -

Description

- -

Array.unobserve() doit être appelé après {{jsxref("Array.observe()")}} afin de retirer un observateur du tableau.

- -

La fonction de rappel (callback) utilisée doit être une référence à une fonction et non une fonction anonyme car c'est cette référence qui sera utilisée pour retrouver l'observateur. Ça ne sert à rien d'appeler Array.unobserve() avec une fonction anonyme comme paramètre de callback, cela ne retirera aucun observateur.

- -

Exemples

- -

Arrêter d'observer un tableau

- -
var arr = [1, 2, 3];
-
-var observateur = function(changements) {
-  console.log(changements);
-}
-
-Array.observe(arr, observateur);
-​
-arr.push(4);
-// [{type: "splice", object: <arr>, index: 3, removed:[], addedCount: 1}]
-
-Array.unobserve(arr, observateur);
-
-arr.pop();
-// Le callback n'a pas été appelé
- -

Utiliser une fonction anonyme

- -
var personnes = ['Khalid', 'Ahmed', 'Mohammed'];
-
-Array.observe(personnes, function (changements) {
-  console.log(changements);
-});
-
-personnes.shift();
-// [{type: "splice", object: <arr>, index: 0, removed: [ "Khalid" ], addedCount: 0 }]
-
-Array.unobserve(personnes, function (changements) {
-  console.log(changements);
-});
-
-personnes.push('Abdullah');
-// [{type: "splice", object: <arr>, index: 2, removed: [], addedCount: 1 }]
-// Le callback est toujours appelé
-
- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Array.unobserve")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/arraybuffer/transfer/index.html b/files/fr/web/javascript/reference/objets_globaux/arraybuffer/transfer/index.html deleted file mode 100644 index 0d13e6aa38..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/arraybuffer/transfer/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: ArrayBuffer.transfer() -slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/transfer -tags: - - ArrayBuffer - - Experimental - - JavaScript - - Méthode - - Reference - - TypedArrays - - polyfill -translation_of: Archive/Web/JavaScript/ArrayBuffer.transfer ---- -
{{JSRef}}{{SeeCompatTable}}
- -

La méthode statique ArrayBuffer.transfer() renvoie un nouvel objet ArrayBuffer dont le contenu a été transféré depuis les données d'ancienBuffer et qui est soit tronqué soit complété avec des zéros pour que la longueur du nouvel objet soit égale à nouvelleLongueur. Si nouvelleLongueur vaut undefined, on utilisera la propriété byteLength de l'ancienBuffer. Cette opération fait que ancienBuffer sera dans un état détaché.

- -

Syntaxe

- -
ArrayBuffer.transfer(ancienBuffer [, nouvelleLongueur]);
- -

Paramètres

- -
-
ancienBuffer
-
Un objet {{jsxref("ArrayBuffer")}} à partir duquel on souhaite transférer des données.
-
nouvelleLongueur
-
La longueur, exprimée en octets, du nouvel objet ArrayBuffer.
-
- -

Valeur de retour

- -

Un nouvel objet ArrayBuffer.

- -

Description

- -

La méthode ArrayBuffer.transfer() permet d'agrandir et de détacher des objets ArrayBuffer. Le fait de pouvoir agrandir un ArrayBuffer sans effectuer de copie permet d'être beaucoup plus efficace sur les grands buffers (comme pour realloc). Le fait de pouvoir détacher un ArrayBuffer permet au développeur d'avoir un contrôle explicite sur la mémoire sous-jacente et sa libération. Cela permet d'éviter d'avoir à libérer toutes les références et d'attendre le travail du ramasse-miettes.

- -

Exemples

- -
var buf1 = new ArrayBuffer(40);
-new Int32Array(buf1)[0] = 42;
-
-var buf2 = ArrayBuffer.transfer(buf1, 80);
-buf1.byteLength; // 0 (attention, avec la prothèse, la valeur sera toujours 40)
-buf2.byteLength; // 80
-new Int32Array(buf2)[0]; // 42
-
-var buf3 = ArrayBuffer.transfer(buf2, 0);
-buf2.byteLength; // 0 (attention, avec la prothèse, la valeur sera toujours 80)
-buf3.byteLength; // 0
-
- -

Prothèse d'émulation (polyfill)

- -

Ce fragment de code permet d'obtenir la plupart des fonctionnalités de transfer() dans un environnement qui ne le prend pas en charge nativement. Attention, cela ne correspond pas exactement à l'API mais permet de transférer des données d'un ArrayBuffer vers un autre.

- -
if (!ArrayBuffer.transfer) {
-    ArrayBuffer.transfer = function(source, length) {
-        if (!(source instanceof ArrayBuffer))
-            throw new TypeError('Source must be an instance of ArrayBuffer');
-        if (length <= source.byteLength)
-            return source.slice(0, length);
-        var sourceView = new Uint8Array(source),
-            destView = new Uint8Array(new ArrayBuffer(length));
-        destView.set(sourceView);
-        return dest.buffer;
-    };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour ArrayBuffer.prototype.transferBrouillonBrouillon de niveau 2
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.ArrayBuffer.transfer")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/date/tolocaleformat/index.html b/files/fr/web/javascript/reference/objets_globaux/date/tolocaleformat/index.html deleted file mode 100644 index 70c13e3a25..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/date/tolocaleformat/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Date.prototype.toLocaleFormat() -slug: Web/JavaScript/Reference/Objets_globaux/Date/toLocaleFormat -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Date.toLocaleFormat ---- -
{{JSRef}} {{Non-standard_header}}
- -

La méthode non-standard toLocaleFormat() convertit une date en une chaîne de caractères, en utilisant le formatage renseigné. {{jsxref("DateTimeFormat")}} est une alternative standardisée. Voir aussi la nouvelle version de {{jsxref("Date.prototype.toLocaleDateString()")}}.

- -
-

Attention, cette fonction a été  retirée à partir de Firefox 58. Voir l'article sur cet avertissement pour plus d'informations et d'éléments pour migrer le code concerné.

-
- -

Syntaxe

- -
dateObj.toLocaleFormat(formatTexte)
- -

Paramètres

- -
-
formatTexte
-
Une chaîne de caractères formattée selon les attentes de la fonction strftime() en C.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente la date indiquée avec le formatage décrit par l'argument.

- -

Description

- -

La méthode toLocaleFormat() apporte un meilleur contrôle sur le formattage des textes produits pour une date. Les noms des mois et des jours de la semaine sont localisés en utilisant la locale du système d'exploitation. Cependant, l'arrangement des jours et mois, ainsi que les autres tâches de localisation ne sont pas prises en charge automatiquement, puisque vous avez le contrôle sur leur ordre d'éxécution. Vous devez faire attention que la chaîne formattée soit localisée correctement en fonction des réglages du systèmes de l'utilisateur. N'oubliez pas que la locale utilisée n'est pas forcément la même que la locale du navigateur.

- -

Les développeurs de modules et XULRunner doivent savoir que charger directement le chaîne de formattage depuis un fichier .dtd ou .properties en utilisant chrome://somedomain/locale/somefile.ext doit être évité, car le fichier dtd/properties et la méthode toLocaleFormat() n'utilisent pas forcément la même locale, ce qui peut produire des résultats ambigües, ou des dates illisibles.

- -

Notez aussi que le comportement de la locale utilisée dépend de la plateforme, et que l'utilisateur peut modifier cette locale. Ainsi, utiliser la locale du système pour choisir le format, peut dans certains cas ne pas être approprié. Vous devriez envisager l'usage des méthodes plus génériques toLocale* de l'objet {{jsxref("Date")}}, ou créer votre localisation personnalisée de la date à partir des méthodes get* de l'objet Date.

- -

Utiliser toLocaleFormat()

- -
var aujourdhui = new Date();
-var date = aujourdhui.toLocaleFormat("%A, %B %e, %Y"); // A ne pas faire
-
- -

Dans cet exemple, toLocaleFormat() renvoie une chaîne de caractères tel que "Wednesday, October 3, 2007". Notez que le format de ce texte dans cet exemple n'est pas correctement localisé, ce qui amène aux problèmes décrits plus haut.

- -

Prothèse d'émulation (polyfill)

- -

En utilisant la bibliothèque DateJS, il est possible d'émuler {{jsxref("Date.prototype.toLocaleDateString()")}} pour des environnements qui n'en disposent pas nativement :

- -
if (!Date.prototype.toLocaleFormat) {
-    (function() {
-        Date.prototype.toLocaleFormat = function(formatString) {
-            return this.format(formatString);
-        };
-    }());
-}
- -

Spécifications

- -

Ne fait partie d'aucune spécification. Implémentée avec JavaScript 1.6.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Date.toLocaleFormat")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/function/arity/index.html b/files/fr/web/javascript/reference/objets_globaux/function/arity/index.html deleted file mode 100644 index 9245cd83ab..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/function/arity/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Function.arity -slug: Web/JavaScript/Reference/Objets_globaux/Function/arity -tags: - - Function - - JavaScript - - Obsolete - - Propriété - - Reference -translation_of: Archive/Web/JavaScript/Function.arity ---- -
{{JSRef}} {{Obsolete_header}}
- -

La propriété arity était utilisée pour renvoyer le nombre d'arguments attendu par la fonction. Elle n'existe plus et a été remplacée par la propriété {{jsxref("Function.prototype.length")}}.

- -

Spécifications

- -

Implémentée avec JavaScript 1.2. Obsolète depuis JavaScript 1.4.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Function.arity")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/function/isgenerator/index.html b/files/fr/web/javascript/reference/objets_globaux/function/isgenerator/index.html deleted file mode 100644 index 2c483e93ec..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/function/isgenerator/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Function.prototype.isGenerator() -slug: Web/JavaScript/Reference/Objets_globaux/Function/isGenerator -tags: - - Function - - JavaScript - - Méthode - - Reference -translation_of: Archive/Web/JavaScript/Function.isGenerator ---- -
{{JSRef}} {{Non-standard_header}}
- -

La méthode non-standard isGenerator() permettait de déterminer si une fonction était un générateur. Cette fonction a été retirée de Firefox à partir de Firefox 58.

- -

Syntaxe

- -
fun.isGenerator()
- -

Valeur de retour

- -

Un booléen indiquant si la fonction appelante est un générateur.

- -

Description

- -

La méthode isGenerator() permet de déterminer si la fonction fun est un générateur. Elle faisait partie des propositions pour Harmony mais n'a pas été retenue pour la spécification ECMAScript 2015.

- -

Exemples

- -
function f () { }
-
-function* g () {
-  yield 42;
-}
-
-console.log("f.isGenerator() = " + f.isGenerator()); // f.isGenerator() = false
-console.log("g.isGenerator() = " + g.isGenerator()); // g.isGenerator() = true
-
- -

Spécifications

- -

Cette méthode ne fait partie d'aucune spécification. Elle a été implémentée avec JavaScript 1.8.6.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Function.isGenerator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/number/tointeger/index.html b/files/fr/web/javascript/reference/objets_globaux/number/tointeger/index.html deleted file mode 100644 index cce3444088..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/number/tointeger/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Number.toInteger() -slug: Web/JavaScript/Reference/Objets_globaux/Number/toInteger -tags: - - JavaScript - - Méthode - - Number - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Number.toInteger ---- -
{{JSRef}}{{obsolete_header}}
- -

La méthode Number.toInteger() est utilisée pour évaluer la valeur passée en argument et la convertir en entier. Son implémentation a été supprimée.

- -

Si la valeur à convertir est {{jsxref("NaN")}}, {{jsxref("null")}} ou {{jsxref("undefined")}}, 0 sera renvoyé.
- Si la valeur à convertir est false, 0 sera renvoyé, si c'est true, 1 sera renvoyé.

- -

Syntaxe

- -
Number.toInteger(nombre)
- -

Paramètres

- -
-
nombre
-
La valeur à convertir en entier.
-
- -

Exemples

- -

Utiliser toInteger

- -

Voici quelques exemples utilisant la méthode :

- -
Number.toInteger(0.1),     // 0
-Number.toInteger(1),       // 1
-Number.toInteger(Math.PI), // 3
-Number.toInteger(null)     // 0
-
- -

Spécifications

- -

Number.toInteger faisait partie de la spécification ECMAScript 6 mais a été retirée le 23/08/2013 dans la révision 17 du brouillon (draft).

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Number.toInteger")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/count/index.html b/files/fr/web/javascript/reference/objets_globaux/object/count/index.html deleted file mode 100644 index 03dfa86bde..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/count/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Object.prototype.__count__ -slug: Web/JavaScript/Reference/Objets_globaux/Object/count -tags: - - JavaScript - - Object - - Obsolete - - Propriété - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Object.count ---- -
{{JSRef}}{{Non-standard_Header}}{{obsolete_header("gecko2")}}
- -

La propriété __count__ était utilisée pour compter les propriétés énumérables d'un objet mais a été retiréee.

- -

Syntaxe

- -
obj.__count__
- -

Exemples

- -
{ 1: 1 }.__count__              // 1
-[].__count__                    // 0
-[1].__count__                   // 1
-[1, /* trou */, 2, 3].__count__ // 3
- -

Spécifications

- -

Cette propriété n'appartient à aucune spécification.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Object.count")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/eval/index.html b/files/fr/web/javascript/reference/objets_globaux/object/eval/index.html deleted file mode 100644 index ae6e095928..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/eval/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Object.prototype.eval() -slug: Web/JavaScript/Reference/Objets_globaux/Object/eval -tags: - - JavaScript - - Méthode - - Object - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Object.eval ---- -
{{JSRef}} {{obsolete_header}}
- -

La méthode Object.eval() permet d'évaluer une chaîne de caractères contenant du code JavaScript dans le contexte de l'objet. Cette méthode a été retirée.

- -

Syntaxe

- -
obj.eval(string)
- -

Paramètres

- -
-
string
-
N'importe quelle chaîne de caractères qui représente une expression JavaScript ou une séquence d'instructions. L'expression peut contenir des variables et des propriétés d'objets existants.
-
- -

Description

- -

La méthode eval ne peut plus être utilisée à partir d'un objet. Il faut utiliser la méthode {{jsxref("eval", "eval")}} à la place.

- -

Spécifications

- -

Cette méthode ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.eval")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/getnotifier/index.html b/files/fr/web/javascript/reference/objets_globaux/object/getnotifier/index.html deleted file mode 100644 index ab7f2e2779..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/getnotifier/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Object.getNotifier() -slug: Web/JavaScript/Reference/Objets_globaux/Object/getNotifier -tags: - - JavaScript - - Méthode - - Object - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Object.getNotifier ---- -
{{JSRef}}{{obsolete_header}}
- -

La méthode Object.getNotifer() est utilisée pour créer un objet qui permet de déclencher des changements (tels que perçus par Object.observe()) de façon synthétique. Cette API a été dépréciée et retirée des navigateurs.

- -

Syntaxe

- -
Object.getNotifier(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite récupérer le notificateur (notifier) associé.
-
- -

Valeur de retour

- -

L'objet de notification associé à l'objet passé en argument.

- -

Description

- -

Le notificateur est utilisé pour déclencher des changements qui pourront être observés avec Object.observe().

- -

Spécifications

- -

Proposition de spécification.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.getNotifier")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/nosuchmethod/index.html b/files/fr/web/javascript/reference/objets_globaux/object/nosuchmethod/index.html deleted file mode 100644 index bd87292bc5..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/nosuchmethod/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Object.prototype.__noSuchMethod__ -slug: Web/JavaScript/Reference/Objets_globaux/Object/noSuchMethod -tags: - - JavaScript - - Object - - Obsolete - - Propriété - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Object.noSuchMethod ---- -
{{JSRef}}{{Non-standard_Header}}{{Obsolete_Header("gecko43")}}
- -

La propriété __noSuchMethod__ était utilisée pour faire référence à une fonction qui devait être utilisée lorsqu'on appelait une méthode inexistante d'un objet. Cette fonction n'est plus disponible.

- -

Si __noSuchMethod__ a été abandonnée, la spécification ECMAScript 2015 (ES6) fournit les objets Proxy qui permettent de réaliser ce qui pouvait être fait avec cette propriété (et plus encore).

- -

Syntaxe

- -
obj.__noSuchMethod__ = fun
- -

Paramètres

- -
-
fun
-
Une fonction de la forme
-
-
function (id, args) { . . . }
- -
-
id
-
Le nom de la méthode qui n'est pas définie pour l'objet et qui a été appelée.
-
args
-
Le tableau d'arguments passé à la méthode.
-
-
-
- -

Description

- -

Par défaut, lorsqu'on appelle une méthode qui n'existe pas pour un objet, cela lève une exception {{jsxref("TypeError")}}. Ce comportement peut être modifié en définissant une fonction pour la propriété __noSuchMethod__. Cette fonction prend en compte deux arguments : le premier qui est le nom de la méthode non définie qui a été appelée et le second qui correspond au tableau des arguments passés lors de l'appel. Le deuxième argument est bien un tableau (il hérite de {{jsxref("Array.prototype")}}) et n'est pas un objet semblable à un tableau comme l'objet {{jsxref("Fonctions/arguments","arguments")}}.

- -

Si cette méthode ne peut être appelée, soit parce qu'elle vaut undefined (sa valeur par défaut), soit parce qu'elle a été supprimée ou définie avec une valeur qui n'est pas une fonction, le moteur JavaScript reprendra le comportement par défaut et renverra des exceptions TypeError.

- -

Exemples

- -

Un test simple avec __noSuchMethod__

- -
var o = {
-  __noSuchMethod__: function(id, args) {
-                     console.log(id, '(' + args.join(', ') + ')');
-                    }
-};
-
-o.toto(1, 2, 3);
-o.truc(4, 5);
-o.machin();
-
-// affichera
-// toto (1, 2, 3)
-// truc (4, 5)
-// machin ()
-
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification et a été retirée : voir le {{bug(683218)}}.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.noSuchMethod")}}

-
diff --git a/files/fr/web/javascript/reference/objets_globaux/object/observe/index.html b/files/fr/web/javascript/reference/objets_globaux/object/observe/index.html deleted file mode 100644 index eb0e3ec8c0..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/observe/index.html +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Object.observe() -slug: Web/JavaScript/Reference/Objets_globaux/Object/observe -tags: - - JavaScript - - Méthode - - Object - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Object.observe ---- -
{{JSRef}}{{obsolete_header}}
- -

La méthode Object.observe() est utilisée afin d'observer de façon asynchrone les modifications apportées à un objet. Cette méthode fournit un flux d'information qui correspondent aux changement apportés à l'objet, dans l'ordre dans lequel ils se sont produits. Cependant, cette API a été dépréciée et retirée des navigateurs. À la place, il est préférable d'utiliser l'objet {{jsxref("Proxy")}}.

- -

Syntaxe

- -
Object.observe(obj, callback[,listeChangements])
- -

Paramètres

- -
-
obj
-
L'objet qu'on souhaite observer.
-
callback
-
La fonction qui est appelée à chaque fois qu'un changement est effectué. Elle est invoquée avec l'argument suivant : -
-
changes
-
Un tableau d'objets dont chaque élément représente une modification. Les propriétés de ces objets sont : -
    -
  • name : Le nom de la propriété qui a été modifiée.
  • -
  • object : L'objet modifié une fois le changement apporté.
  • -
  • type : Une chaîne de caractères qui indique le type de modification qui a eu lieu. Elle peut valoir "add", "update", ou "delete".
  • -
  • oldValue : Propriété présente uniquement pour les types "update" et "delete". Elle correspond à la valeur de l'objet avant la modification.
  • -
-
-
-
-
listeChangements
-
La liste des types de changements qu'on souhaite observer sur l'objet donné avec la fonction de retour donnée. Par défaut, si cet argument n'est pas utilisé, le tableau utilisé sera ["add", "update", "delete", "reconfigure", "setPrototype", "preventExtensions"].
-
- -

Valeur de retour

- -

L'objet qu'on souhaite observer.

- -

Description

- -

La fonction callback est appelée chaque fois qu'une modification est apportée à obj avec comme argument le tableau listant l'ensemble des modifications, dans l'ordre dans lequel elles se sont produites.

- -

Exemples

- -

Enregistrer les différents types de modifications

- -
var obj = {
-  toto: 0,
-  truc: 1
-};
-
-Object.observe(obj, function(changes) {
-  console.log(changes);
-});
-
-obj.machin = 2;
-// [{name: 'machin', object: , type: 'add'}]
-
-obj.toto = 'coucou';
-// [{name: 'toto', object: , type: 'update', oldValue: 0}]
-
-delete obj.machin;
-// [{name: 'machin', object: , type: 'delete', oldValue: 2}]
-
-Object.defineProperty(objet,'toto', {writable: false});
-// [{name: 'toto', object: <obj>, type: 'reconfigure'}]
-
-Object.setPrototypeOf(obj, {});
-//  [{name: '__proto__',object: <obj>, type: 'setPrototype', oldValue: <prototype>}]
-
-Object.seal(obj);
-// [
-//    {name: 'toto', object: <obj>, type: 'reconfigure'},
-//    {name: 'machin', object: <obj>, type: 'reconfigure'},
-//    {object: <obj>, type: 'preventExtensions'}
-// ]
-
- -

Lier des données

- -
// Un objet représentant un utilisateur
-var utilisateur = {
-  id: 0,
-  nom: 'Brendan Eich',
-  titre: 'Mr.'
-};
-
-// Une fonction de salutation
-function majSalutation() {
-  user.greeting = 'Bonjour, ' + utilisateur.titre + ' ' + utilisateur.nom + ' !';
-}
-majSalutation();
-
-Object.observe(utilisateur, function(changes) {
-  changes.forEach(function(change) {
-    // Pour chaque modification qui porte sur le nom ou le titre
-    // on met à jour la salutation
-    if (change.name === 'nom' || change.name === 'titre') {
-      majSalutation();
-    }
-  });
-});
-
- -

Exemple : Enregistrer des changements personnalisés

- -
// On représente un point sur un plan bidimensionnel
-var point = {x: 0, y: 0, distance: 0};
-
-function setPosition(pt, x, y) {
-  // On effectue un changement personnalisé
-  Object.getNotifier(pt).performChange('reposition', function() {
-    var exDistance = pt.distance;
-    pt.x = x;
-    pt.y = y;
-    pt.distance = Math.sqrt(x * x + y * y);
-    return {exDistance: exDistance};
-  });
-}
-
-Object.observe(point, function(changes) {
-  console.log('Distance modifiée : ' + (point.distance - changes[0].exDistance));
-}, ['reposition']);
-
-setPosition(point, 3, 4);
-// Distance modifiée : 5
- -

Spécifications

- -

Proposition de spécification (straw man proposal).

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.observe")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/parent/index.html b/files/fr/web/javascript/reference/objets_globaux/object/parent/index.html deleted file mode 100644 index dfbda99f34..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/parent/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Object.prototype.__parent__ -slug: Web/JavaScript/Reference/Objets_globaux/Object/Parent -tags: - - JavaScript - - Object - - Obsolete - - Propriété - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Object.parent ---- -
{{JSRef}}{{Non-standard_Header}}{{Obsolete_Header("gecko2")}}
- -

La propriété __parent__ était utilisée pour pointer vers le contexte d'un objet mais elle a été supprimée.

- -

Syntaxe

- -
obj.__parent__
- -

Description

- -

Pour les objets de plus haut niveau, on aurait eu window par exemple.

- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.parent")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/unobserve/index.html b/files/fr/web/javascript/reference/objets_globaux/object/unobserve/index.html deleted file mode 100644 index 88de52a813..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/unobserve/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Object.unobserve() -slug: Web/JavaScript/Reference/Objets_globaux/Object/unobserve -tags: - - JavaScript - - Méthode - - Object - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Object.unobserve ---- -
{{JSRef}} {{obsolete_header}}
- -

La méthode Object.unobserve() est utilisée pour retirer des observateurs placés avec {{jsxref("Object.observe()")}}. Cette méthode et l'API à laquelle elle appartient ont été dépréciées et retirées des navigateurs. À la place, il est préférable d'utiliser l'objet {{jsxref("Proxy")}}.

- -

Syntaxe

- -
Object.unobserve(obj, callback)
- -

Paramètres

- -
-
obj
-
L'objet qu'on souhaite arrêter d'observer.
-
callback
-
La référence vers l'observateur qu'on souhaite arrêter d'appeler à chaque fois qu'une modification est apportée à obj.
-
- -

Valeur de retour

- -

L'objet qui n'est plus observé.

- -

Description

- -

Object.unobserve() doit être appelé après {{jsxref("Object.observe()")}} afin de retirer un observateur d'un objet.

- -

La fonction de rappel (callback) doit être une référence à la fonction et non une fonction anonyme. En effet, c'est cette référence qui sera utilisée pour retirer l'observateur précédemment placé. Appeler Object.unobserve() avec une fonction anonyme n'aura aucun effet, cela ne retirera aucun observateur.

- -

Exemples

- -

Arrêter l'observation un objet

- -
var obj = {
-  toto: 0,
-  truc: 1
-};
-
-var observer = function(changements) {
-  console.log(changements);
-}
-
-Object.observe(obj, observer);
-​
-obj.nouvelleProp = 2;
-// [{name: 'nouvelleProp', object: <obj>, type: 'add'}]
-
-Object.unobserve(obj, observer);
-
-obj.toto = 1;
-// La fonction callback n'a pas été appelée
- -

Utiliser une fonction anonyme

- -
var personne = {
-  name : 'Ahmed',
-  age : 25
-};
-
-Object.observe(personne, function (changements) {
-  console.log(changements);
-});
-
-personne.age = 40;
-// [{name: 'age', object: <obj>, oldValue: 25, type: 'update'}]
-
-Object.unobserve(personne, function (changements) {
-  console.log(changements);
-});
-
-personne.age = 63;
-// [{name: 'age', object: <obj>, oldValue: 40, type: 'update'}]
-// La fonction callback est toujours appelée
-
- -

Specifications

- -

Proposition de spécification (strawman proposal).

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.unobserve")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/unwatch/index.html b/files/fr/web/javascript/reference/objets_globaux/object/unwatch/index.html deleted file mode 100644 index 4863156034..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/unwatch/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Object.prototype.unwatch() -slug: Web/JavaScript/Reference/Objets_globaux/Object/unwatch -tags: - - JavaScript - - Méthode - - Non-standard - - Object - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Object.unwatch ---- -
{{JSRef}}{{Non-standard_header}}
- -
-

Méthode dépréciée ! Ne pas utiliser unwatch() et {{jsxref("Object.prototype.watch", "watch()")}}. En effet, ces deux méthodes n'étaient implémentées qu'avec Gecko et ont été retirées à partir de Firefox 58. De plus, l'ajout de points d'arrêts conditionnels a de graves impacts sur les performances, notamment sur les objets globaux comme window. Il est conseillé d'utiliser les accesseurs et mutateurs ou les proxies.

-
- -

La méthode unwatch() permet de retirer un point d'arrêt conditionnel créé par la méthode {{jsxref("Object.prototype.watch", "watch()")}}.

- -

Syntaxe

- -
obj.unwatch(prop)
- -

Paramètres

- -
-
prop
-
Le nom de la propriété dont on ne veut plus suivre l'état.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Description

- -

Le débogueur JavaScript possède plusieurs fonctionnalités, y compris celles offertes par cette fonction. Pour plus d'informations sur cet outil, voir le débogueur JavaScript.

- -

Par défaut, tous les objets qui descendent de {{jsxref("Object")}} héritent de cette méthode.

- -
-

Note : unwatch() utilise le nom d'une seule propriété comme paramètre. Ce comportement est expliqué avec la méthode {{jsxref("Object.watch", "watch()")}}.

-
- -

Exemples

- -

Voir {{jsxref("Object.watch", "watch()")}}.

- -

Spécifications

- -

Cette méthode ne fait partie d'aucune spécification. Implémentée avec JavaScript 1.2.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.unwatch")}}

-
- -

Notes de compatibilté

- -

Si on appelle unwatch() sur un objet {{domxref("Document")}}, on aura une exception {{jsxref("TypeError")}} à partir de Firefox 23 ({{bug(903332)}}). Cette régression a été corrigée avec Firefox 27.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/object/watch/index.html b/files/fr/web/javascript/reference/objets_globaux/object/watch/index.html deleted file mode 100644 index 5a99dfe28f..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/object/watch/index.html +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Object.prototype.watch() -slug: Web/JavaScript/Reference/Objets_globaux/Object/watch -tags: - - JavaScript - - Méthode - - Non-standard - - Object - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Object.watch ---- -
{{JSRef}}{{non-standard_header}}
- -
-

Méthode dépréciée ! Ne pas utiliser watch() et {{jsxref("Object.prototype.unwatch", "unwatch()")}}. En effet, ces deux méthodes n'ont été implémentées qu'avec Gecko et sont dépréciées. Elle sont retirées avec à partir de Firefox 58. De plus, l'ajout de points d'arrêts conditionnels a de graves impacts sur les performances, notamment sur les objets globaux comme window. Il est conseillé d'utiliser les accesseurs et mutateurs ou les proxies. Attention également à ne pas confondre {{jsxref("Object.prototype.watch", "Object.watch")}} et {{jsxref("Object.prototype.observe", "Object.observe")}}.

-
- -

La méthode watch() permet d'appeler une fonction lorsqu'une propriété est affectée.

- -

Syntaxe

- -
obj.watch(prop, handler)
- -

Paramètres

- -
-
prop
-
Le nom d'une propriété d'un objet dont on souhaite surveiller les changements.
-
handler
-
Une fonction à appeler quand la valeur de la propriété est modifiée.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Description

- -

Cette méthode permet de surveiller les assignations à une propriété appelée prop de l'objet courant, et appelle handler(prop, ancienneValeur, nouvelleValeur) dès que prop est définie et enregistre la valeur de retour dans cette propriété. Un tel point de surveillance peut filtrer (ou rendre null) l'assignation de la valeur, en renvoyant une valeur nouvelleValeur modifiée (ou en renvoyant ancienneValeur).

- -

Si une propriété pour laquelle un point de surveillance avait été défini, celui-ci ne disparait pas. Si la propriété est recréée par la suite, le point de surveillance sera toujours en activité.

- -

Pour retirer un point de surveillance, utilisez la méthode {{jsxref("Object.unwatch", "unwatch()")}}/ Par défaut, la méthode watch est héritée par tous les objets descendant d'Object.

- -

Le débogueur JavaScript a des fonctionnalités similaires à celles fournies par cette méthode, ainsi que d'autres options de débogage. Pour en savoir plus, voir le débogueur JavaScript.

- -

Dans Firefox, handler n'est appelé que pour les assignations par script, pas depuis du code natif. Par exemple, window.watch('location', myHandler) n'appellera pas myHandler si l'utilisateur clique sur un lien vers une cible dans le document courant. Par contre, window.location += '#myAnchor' appellera myHandler :

- -

Exemples

- -

Utiliser watch et unwatch

- -
var o = {p:1};
-o.watch("p",
-   function (id, oldval, newval) {
-      console.log("o." + id + " a été modifiée de " + oldval + " en " + newval);
-      return newval;
-   });
-
-o.p = 2;
-o.p = 3;
-delete o.p;
-o.p = 4;
-
-o.unwatch('p');
-o.p = 5;
-
- -

Ce script affiche la sortie suivante :

- -
o.p a été modifiée de 1 en 2
-o.p a été modifiée de 2 en 3
-o.p a été modifiée de undefined en 4
-
- -

Utiliser watch pour valider les propriétés d'un objet

- -

La méthode watch peut être utilisée pour tester les assignations d'une propriété d'objet. Cet exemple s'assure que toute Personne a un nom valide et un age entre 0 et 200.

- -
Personne = function(name,age) {
-  this.watch("age", Personne.prototype._isValidAssignment);
-  this.watch("nom", Personne.prototype._isValidAssignment);
-  this.nom = nom;
-  this.age = age;
-}
-
-Personne.prototype.toString = function() {
-  return this.nom + ", " + this.age;
-};
-
-Personne.prototype._isValidAssignment = function(id, oldval, newval) {
-  if (id == "nom" && (!newval || newval.length > 30)) {
-    throw new RangeError("nom invalide pour " + this);
-  }
-  if (id == "age"  && (newval < 0 || newval > 200)) {
-    throw new RangeError("âge invalide pour " + this);
-  }
-  return newval;
-}
-
-will = new Personne("Will", 29);
-console.log(will);   // Will, 29
-
-try {
-  will.nom = "";
-} catch (e) {
-  console.log(e);
-}
-
-try {
-  will.age = -4;
-} catch (e) {
-  console.log(e);
-}
-
- -

Ce script affichera la sortie suivante :

- -
Will, 29
-RangeError: nom invalide pour Will, 29
-RangeError: âge invalide pour Will, 29
-
- -

Spécifications

- -

Cette méthode ne fait partie d'aucune spécification. Elle a été implémentée avec JavaScript 1.2.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Object.watch")}}

-
- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/parallelarray/index.html b/files/fr/web/javascript/reference/objets_globaux/parallelarray/index.html deleted file mode 100644 index 2ab4d8bb74..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/parallelarray/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: ParallelArray -slug: Web/JavaScript/Reference/Objets_globaux/ParallelArray -tags: - - JavaScript - - Obsolete - - ParallelArray - - Reference -translation_of: Archive/Web/ParallelArray ---- -
{{jsSidebar("Objects")}}{{ obsolete_header}}
- -

Le but de ParallelArray est de disposer de parallélisme pour les données des applications web. Les fonctions disponibles via cette objet tenteront une exécution en parallèle avant de traiter l'exécution de façon séquentielle si besoin. Pour être sûr que votre code puisse être exécuté en parallèle, il est conseillé de se limiter aux fonctions JavaScript parallélisables supportées par Firefox (article en anglais).

- -

Syntaxe

- -
new ParallelArray()
-new ParallelArray([element0, element1, ...])
-new ParallelArray(arrayLength, elementalFunction)
- -

Instances de ParallelArray

- -

Propriétés

- -
-
length
-
Indique le nombre d'éléments dans l'objet ParallelArray.
-
- -

Méthodes

- -
-
map
-
reduce
-
scan
-
scatter
-
filter
-
flatten
-
partition
-
get
-
- -

Exemples

- -

Utilisation de map en parallèle

- -
var p = new ParallelArray([0, 1, 2, 3, 4]);
-var m = p.map(function (v) {
-  return v + 1;
-});
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/stopiteration/index.html b/files/fr/web/javascript/reference/objets_globaux/stopiteration/index.html deleted file mode 100644 index 5b26730085..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/stopiteration/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: StopIteration -slug: Web/JavaScript/Reference/Objets_globaux/StopIteration -tags: - - JavaScript - - Legacy Iterator - - Reference - - Référence(2) - - StopIteration -translation_of: Archive/Web/StopIteration ---- -
{{jsSidebar("Objects")}}{{deprecated_header}}
- -
Non standard. L'objet StopIteration est une fonctionnalité propre à SpiderMonkey. Pour utiliser des fonctions pérennes, préférez les boucles {{jsxref("Instructions/for...of", "for...of")}} et le protocole itérateur.
- -

L'objet StopIteration est une exception levée lorsque l'on cherche à accéder au prochain élément d'un itérateur épuisé et implémentant le protocole itérateur historique.

- -

Syntaxe

- -
StopIteration
- -

Description

- -

StopIteration est un élément lié à l'ancien protocole pour les itérateurs. Il sera retiré en même temps que les itérateurs et générateurs historiques (pour être remplacé par l'équivalent ECMAScript2015/ECMAScript6).

- -

Exemples

- -

StopIteration est levée par l'objet {{jsxref("Objets_globaux/Iterator", "Iterator")}}.

- -
var a = {
-  x: 10,
-  y: 20
-};
-var iter = Iterator(a);
-console.log(iter.next()); // ["x", 10]
-console.log(iter.next()); // ["y", 20]
-console.log(iter.next()); // lève StopIteration
-
- -

Lever StopIteration directement.

- -
function f() {
-  yield 1;
-  yield 2;
-  throw StopIteration;
-  yield 3; // cette ligne ne sera jamais exécutée
-}
-
-for (var n in f()) {
-  console.log(n);   // imprime 1, puis 2, mais pas 3
-}
-
- -

Spécifications

- -

Non standard. Ne fait partie d'aucun standard.

- -

Compatibilité des navigateurs

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - -
FonctionnalitéChromeFirefox (Gecko)Internet ExplorerOperaSafari
Support simple{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidChrome pour AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support simple{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/objets_globaux/string/quote/index.html b/files/fr/web/javascript/reference/objets_globaux/string/quote/index.html deleted file mode 100644 index 181ae613fc..0000000000 --- a/files/fr/web/javascript/reference/objets_globaux/string/quote/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: String.prototype.quote() -slug: Web/JavaScript/Reference/Objets_globaux/String/quote -tags: - - JavaScript - - Méthode - - Obsolete - - Prototype - - Reference - - String -translation_of: Archive/Web/JavaScript/String.quote ---- -
{{obsolete_header("37")}}{{JSRef}} {{Non-standard_header}}
- -

La méthode quote() est une méthode non-standard qui permet de renvoyer une copie de la chaîne de caractères en remplaçant les différents caractères spéciaux de la chaîne par leur séquence d'échappement et en encadrant le résultat avec des doubles quotes (").

- -

Syntaxe

- -
str.quote()
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères représentant la chaîne appelante, encadrée entre doubles quotes et pour laquelle les caractères spéciaux ont été échappés.

- -

Exemples

- -

Le tableau suivant illustre comment la méthode quote remplace les différents caractères spéciaux et encadre la chaîne résultante entre doubles quotes. La troisième colonne illustre comment la méthode eval évalue les séquences d'échappement à nouveau.

- - - - - - - - - - - - - - - - - - - - - - - - - - -
strstr.quote()eval(str.quote())
Coucou monde !"Coucou monde !"Coucou monde !
Coucou
-         monde !
"Coucou\n\tmonde !"Coucou
-         monde !
" \ — '"\" \\ \u2014 '"" \ — '
- -

Spécifications

- -

Aucune. Cette méthode ne fait partie d'aucun standard. Elle a été implémentée avec JavaScript 1.3.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.String.quote")}}

- -

Voir aussi

- - diff --git "a/files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_g\303\251n\303\251rateur/index.html" "b/files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_g\303\251n\303\251rateur/index.html" deleted file mode 100644 index 83682e6284..0000000000 --- "a/files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_g\303\251n\303\251rateur/index.html" +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: Compréhensions de générateur -slug: Web/JavaScript/Reference/Opérateurs/Compréhensions_de_générateur -tags: - - Iterator - - JavaScript - - Non-standard - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Generator_comprehensions ---- -
{{JSSidebar("Operators")}}{{Non-standard_Header}}{{Obsolete_Header("gecko58")}}
- -
Non-standard. Ne pas utiliser !
-La syntaxe de  compréhensions de générateurs ne sont pas une fonctionnalité standard et ont été retirées à partir de Firefox 58. Mieux vaut utiliser les {{jsxref("Instructions/function*", "générateurs", "", 1)}} pour des fonctionnalités similaires.
- -

La syntaxe de compréhension de générateur était une expression qui permettait de construire rapidement une fonction génératrice à partir d'un objet itérable. Toutefois, cette syntaxe a été retirée du standard et de l'implémentation qui en est faite par Firefox. Elle ne doit pas être utilisée.

- -

Syntaxe

- -
(for (x of itérable) x)
-(for (x of itérable) if (condition) x)
-(for (x of itérable) for (y of itérable) x + y)
-
- -

Description

- -

Une compréhension de générateur peut contenir deux sortes de composants :

- - - -

L'itération for-of est toujours le premier composant. Il est possible d'utiliser plusieurs itérations for-of et plusieurs instructions if.

- -

Les {{jsxref("Opérateurs/Compréhensions_de_tableau","compréhensions de tableaux","","true")}} ont un inconvénient majeur : quand on les utilise, un nouveau tableau est créé en mémoire. Cela ne pose pas de problème particulier quand le tableau en question est petit (l'impact sera alors léger) mais lorsque le tableau est très grand (voire infini avec un générateur), cela peut poser problème que de vouloir créer un nouveau tableau.

- -

Les générateurs permettent de calculer des suites à la demande (chaque élément successif est calculé lorsqu'on en a besoin). Les compréhensions de générateurs sont presque identiques, d'une point de vue syntaxique, aux compréhensions de tableaux. Plutôt d'utiliser des crochets, elles utilisent des parenthèses et au lieu de créer un tableau, elles créent un générateur qui pourra être utilisé. Cette notation peut être vue comme une notation raccourcie pour créer des générateurs.

- -

Imaginons qu'on ait un itérateur qui parcourt une grande série d'entiers et qu'on veuille créer un itérateur qui itère sur les doubles de ces entiers. Une compréhension de tableau entraînerait la création d'un tableau complet en mémoire, dont les éléments seraient les valeurs doublées :

- -
var doubles = [for (i in it) i * 2];
-
- -

En revanche, une compréhension de générateur permettrait de créer un nouvel itérateur qui pourrait être utilisé pour créer les valeurs doublées à la demande, quand on a besoin de les utiliser :

- -
var it2 = (for (i in it) i * 2);
-console.log(it2.next()); // La première valeur, doublée
-console.log(it2.next()); // La deuxième valeur, doublée
-
- -

Lorsqu'une compréhension de générateur est utilisée comme un argument d'une fonction, les parenthèses utilisées pour l'appel de la fonction permettent de ne pas écrire les parenthèse encadrant la compréhension :

- -
var résultat = faireQuelqueChose(for (i in it) i * 2);
-
- -

Avec la compréhension de générateur, on ne parcourt qu'une fois la structure de l'objet alors qu'avec une compréhension de tableau, on parcourt une fois le tableau pour construire la nouvelle version puis une seconde fois quand on souhaite l'utiliser.

- -

Exemples

- -

Compréhensions simples

- -
(for (i of [ 1, 2, 3 ]) i*i );
-// fonction génératrice qui générera 1, 4, et 9
-
-[...(for (i of [ 1, 2, 3 ]) i*i )];
-// [1, 4, 9]
-
-var abc = [ "A", "B", "C" ];
-(for (lettres of abc) lettres.toLowerCase());
-// fonction génératrice qui générera "a", "b", et "c"
-
- -

Compréhensions utilisant une instruction if

- -
var années = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
-
-(for (année of années) if (année > 2000) année);
-// fonction génératrice qui générera 2006, 2010, et 2014
-
-(for (année of années) if (année > 2000) if(année < 2010) année);
-// fonction génératrice qui générera 2006, équivaut à :
-
-(for (année of années) if (année > 2000 && année < 2010) année);
-// fonction génératrice qui générera 2006
-
- -

Compréhensions de générateurs et fonctions génératrices

- -

Pour mieux comprendre la syntaxe des compréhensions, on peut la comparer avec celle des fonctions génératrices :

- -

Exemple 1 : Générateur simple.

- -
var nombres = [ 1, 2, 3 ];
-
-// Fonction génératrice
-(function*() {
-  for (let i of nombres) {
-    yield i * i;
-  }
-})()
-
-// Compréhension de générateur
-(for (i of nombres) i*i );
-
-// Résultat : les deux instructions renvoient chacune un générateur pour créer [ 1, 4, 9 ]
-
- -

Second exemple : Un générateur avec if.

- -
var nombres = [ 1, 2, 3 ];
-
-// Fonction génératrice
-(function*() {
-  for (let i of nombres) {
-    if (i < 3) {
-      yield i * 1;
-    }
-  }
-})()
-
-// Compréhension
-(for (i of nombres) if (i < 3) i);
-
-// Résultat : les deux renvoient un générateur qui générera [ 1, 2 ]
- -

Spécifications

- -

Était initialement prévu pour le brouillon ECMAScript 2015 mais fut retiré lors de la révision 27 (août 2014). Consulter les révisions antérieures d'ES2015 pour les spécifications de cette sémantique.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.operators.generator_comprehensions")}}

- -

Notes relatives à l'implémentation de SpiderMonkey

- - - -

Différences avec les anciennes compréhensions JS 1.7 et JS 1.8

- -
-

Les compréhensions « JS1.7 / JS1.8 » ont été retirées à partir de Gecko 46 ({{bug(1220564)}}).

-
- -

Ancienne syntaxe pour les compréhensions (ne plus l'utiliser) :

- -
[X for (Y in Z)]
-[X for each (Y in Z)]
-[X for (Y of Z)]
-
- -

Les différences :

- - - -

Voir aussi

- - diff --git "a/files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_tableau/index.html" "b/files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_tableau/index.html" deleted file mode 100644 index 17a61266a9..0000000000 --- "a/files/fr/web/javascript/reference/op\303\251rateurs/compr\303\251hensions_de_tableau/index.html" +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Compréhensions de tableau -slug: Web/JavaScript/Reference/Opérateurs/Compréhensions_de_tableau -tags: - - JavaScript - - Non-standard - - Obsolete - - Opérateurs - - Reference -translation_of: Archive/Web/JavaScript/Array_comprehensions ---- -
{{jsSidebar("Operators")}}{{Obsolete_Header(58)}}
- -
Non-standard. Ne pas utiliser !
-Les compréhensions de tableau ne sont pas standard et ont été retirées à partir de Firefox 58. Pour obtenir des fonctionnalités équivalentes, il est conseillés d'utiliser {{jsxref("Array.prototype.map")}}, {{jsxref("Array.prototype.filter")}}, {{jsxref("Fonctions/Fonctions_fléchées", "les fonctions fléchées", "", 1)}} et la{{jsxref("Opérateurs/Opérateurs/Affecter_par_décomposition", "décomposition", "", 1)}}.
- -

La syntaxe de compréhension de tableau était une expression JavaScript permettant de construire rapidement un nouveau tableau à partir d'un tableau existant. Toutefois, cette syntaxe a été retirée du standard et de l'implémentation qui en est faite par Firefox. Elle ne doit pas être utilisée.

- -

Syntaxe

- -
[for (x of itérable) x]
-[for (x of itérable) if (condition) x]
-[for (x of itérable) for (y of itérable) x + y]
-
- -

Description

- -

Dans une compréhension de tableau, on peut utiliser deux types de composants :

- - - -

L'itération basée sur for...of sera toujours le premier composant. On peut utiliser plusieurs for...of ou instructions if.

- -

Les compréhensions de tableau furent proposées pour être standardisées avec ECMAScript 2016. Elles fournissent une notation raccourcie pour pouvoir construire un nouveau tableau basé sur le contenu d'un autre tableau. Les compréhensions sont proches des fonctions {{jsxref("Array.prototype.map", "map()")}} et {{jsxref("Array.prototype.filter", "filter()")}} qui peuvent être combinées pour arriver au même effet.

- -

La compréhension qui suit prend un tableau de nombres et crée un nouveau tableau qui contiendra les doubles de chaque élément :

- -
var nombres = [1, 2, 3, 4];
-var doublés = [for (i of nombres) i * 2];
-console.log(doublés); // affiche 2,4,6,8
-
- -

Cela est équivalent à l'opération suivante, qui utilise {{jsxref("Array.prototype.map", "map()")}} :

- -
var doublés = nombres.map(i => i * 2);
-
- -

Les compréhensions peuvent également être utilisées pour sélectionner certains éléments qui respectent un critère donné. Voici par exemple une compréhension qui ne sélectionne que les nombres pairs :

- -
var nombres = [1, 2, 3, 21, 22, 30];
-var pairs = [for (i of nombres) if (i % 2 === 0) i];
-console.log(pairs); // affiche 2,22,30
-
- -

Ici, la méthode {{jsxref("Array.prototype.filter", "filter()")}} peut être utilisée pour parvenir au même résultat :

- -
var pairs = nombres.filter(i => i % 2 === 0);
-
- -

{{jsxref("Array.prototype.map", "map()")}} et {{jsxref("Array.prototype.filter", "filter()")}} peuvent être utilisés pour traduire une compréhension de tableau.

- -

Voici un autre exemple de compréhension, qui ne prend que les nombres pairs et qui les double :

- -
var nombres = [1, 2, 3, 21, 22, 30];
-var pairsDoublés = [for (i of nombres) if (i % 2 === 0) i * 2];
-console.log(pairsDoublés); // affiche 4,44,60
-
- -

Les crochets d'une compréhension introduisent un bloc implicite pour les portées. Les nouvelles variables (comme i dans l'exemple), sont traitées comme si elles avaient été déclarées avec {{jsxref("Instructions/let","let")}}. Cela signifie donc que ces variables ne pourront pas être utilisées en dehors de la compréhension.

- -

L'élément d'entrée d'une compréhension de tableau ne doit pas nécessairement être un tableau, il est également possible d'utiliser des itérateurs et des générateurs.

- -

Une chaîne de caractères peut aussi être utilisé comme élément de départ :

- -
var str = 'abcdef';
-var consonnes = [for (c of str) if (!(/[aeiouyAEIOUY]/).test(c)) c].join(''); // 'bcdf'
-var avecZéros = [for (c of str) c+'0' ].join(''); // 'a0b0c0d0e0f0'
-
- -

Là encore, la structure de l'élément d'entrée n'est pas préservée, il faut donc utiliser {{jsxref("Array.prototype.join", "join()")}} pour récupérer une chaîne.

- -

Exemples

- -

Compréhensions de tableaux simples

- -
[for (i of [ 1, 2, 3 ]) i*i ];
-// [ 1, 4, 9 ]
-
-var abc = [ "A", "B", "C" ];
-[for (lettres of abc) lettres.toLowerCase()];
-// [ "a", "b", "c" ]
- -

Compréhensions de tableaux utilisant if

- -
var années = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
-[for (année of années) if (année > 2000) année];
-// [ 2006, 2010, 2014 ]
-[for (année of années) if (année > 2000) if(année < 2010) année];
-// [ 2006 ] qui correspond aussi à
-[for (année of années) if (année > 2000 && année < 2010) année];
-// [ 2006 ]
- -

Comparaison avec map et filter

- -

Afin de mieux comprendre la syntaxe des compréhensions, on peut la comparer avec les méthodes de l'objet Array {{jsxref("Array.map", "map")}} et {{jsxref("Array.filter", "filter")}} :

- -
var nombres = [ 1, 2, 3 ];
-
-nombres.map(function (i) { return i * i });
-nombres.map(i => i*i);
-[for (i of nombres) i*i ];
-// tous vaudront [ 1, 4, 9 ]
-
-nombres.filter(function (i) { return i < 3 });
-nombres.filter(i => i < 3);
-[for (i of nombres) if (i < 3) i];
-// on obtiendra [ 1, 2 ] pour ces trois instructions
-
- -

Les compréhensions manipulant deux tableaux

- -

On peut itérer deux fois avec for...of afin de travailler avec deux tableaux :

- -
var nombres = [ 1, 2, 3 ];
-var lettres = [ "a", "b", "c" ];
-
-var produitCartésien = [for (i of nombres) for (j of lettres) i+j];
-// [ "1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c" ]
-
-var grille = [for (i of nombres) [for (j of lettres) i+j]];
-// [
-//  ["1a", "1b", "1c"],
-//  ["2a", "2b", "2c"],
-//  ["3a", "3b", "3c"]
-// ]
-
-[for (i of nombres) if (i > 1) for (j of lettres) if(j > "a") i+j]
-// ["2b", "2c", "3b", "3c"], correspond à :
-
-[for (i of nombres) for (j of lettres) if (i > 1) if(j > "a") i+j]
-// ["2b", "2c", "3b", "3c"]
-
-[for (i of nombres) if (i > 1) [for (j of lettres) if(j > "a") i+j]]
-// [["2b", "2c"], ["3b", "3c"]], ne correspond pas à :
-
-[for (i of nombres) [for (j of lettres) if (i > 1) if(j > "a") i+j]]
-// [[], ["2b", "2c"], ["3b", "3c"]]
-
- -

Spécifications

- -

Ce point faisait initialement partie du brouillon ECMAScript 2015 mais fut retiré dans la révision 27 (août 2014). Veuillez vous référer aux révisions précédentes pour la sémantique utilisée.

- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.operators.array_comprehensions")}}

- -

Notes spécifiques relatives à l'implémentation de SpiderMonkey

- - - -

Différences avec les compréhensions précédentes JS1.7/JS1.8

- -
-

Les compréhensions « JS1.7 / JS1.8 » ont été retirées à partir de Gecko 46 ({{bug(1220564)}}).

-
- -

Ancienne syntaxe pour les compréhensions (ne plus l'utiliser) :

- -
[X for (Y in Z)]
-[X for each (Y in Z)]
-[X for (Y of Z)]
-
- -

Les différences :

- - - -

Pour quelques suggestions pour migrer du code, voir le bug {{bug("1220564")}} et notamment le commentaire #42.

- -

Voir aussi

- - diff --git "a/files/fr/web/javascript/reference/op\303\251rateurs/expression_closures/index.html" "b/files/fr/web/javascript/reference/op\303\251rateurs/expression_closures/index.html" deleted file mode 100644 index a80e576883..0000000000 --- "a/files/fr/web/javascript/reference/op\303\251rateurs/expression_closures/index.html" +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Expression closures -slug: Web/JavaScript/Reference/Opérateurs/Expression_closures -tags: - - Functions - - JavaScript - - Non-standard - - Obsolete - - Reference -translation_of: Archive/Web/JavaScript/Expression_closures ---- -
{{JSSidebar("Operators")}}{{Non-standard_Header}}{{Obsolete_Header("gecko60")}}
- -
Opérateur non-standard, ne pas utiliser !
-Cette syntaxe est une fonctionnalité dépréciée, spécifique à Firefox et qui a été retirée avec Firefox 60. En remplacement, il est préférable d'utiliser les fonctions fléchées.
- -

Les expressions de fermetures sont une notation de raccourci pour écrire des fonctions simples.

- -

Syntaxe

- -
function [nom]([param1[, param2[, ..., paramN]]])
-   expression
-
- -

Paramètres

- -
-
nom
-
Le nom de la fonction, ce paramètre est optionnel. S'il n'est pas utilisé, la fonction sera anonyme. Le nom de cette fonction est local uniquement pour le corps de la fonction.
-
paramN
-
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments.
-
expression
-
L'expression qui correspond au corps de la fonction.
-
- -

Description

- -

Cet élément du langage n'est qu'une notation raccourcie pour l'écriture de fonctions simples. Il permet d'approcher un peu plus d'une notation correspondant au lambda calcul.

- -

Pour les versions de JavaScript antérieures ou égales à 1.7 :

- -
function(x) { return x * x; }
- -

Avec JavaScript 1.8 :

- -
function(x) x * x
- -

Cette syntaxe permet de ne pas utiliser les accolades et l'instruction return (ici implicite). En dehors de la concision syntaxique, cet opérateur n'apporte pas d'autre avantage.

- -

Exemples

- -

Un raccourci pour ajouter des gestionnaires d'événements :

- -
 document.addEventListener("click", function() false, true);
-
- -

On peut utiliser cette notation avec les fonctions introduites pour les tableaux avec JavaScript 1.6 :

- -
elems.some(function(elem) elem.type == "text");
-
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.operators.expression_closures")}}

- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/webapi/browser/index.html b/files/fr/webapi/browser/index.html deleted file mode 100644 index 776952894f..0000000000 --- a/files/fr/webapi/browser/index.html +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Using the Browser API -slug: WebAPI/Browser -tags: - - WebAPI -translation_of: Mozilla/Gecko/Chrome/API/Browser_API/Using ---- -

{{ non-standard_header() }}

- -

{{ B2GOnlyHeader2('privileged') }}

- -

Résumé

- -

L'API HTML Browser (Navigateur HTML) est une extension de l'élément {{HTMLElement("iframe")}} qui permet aux applications d'implémenter des navigateurs ou des applications de navigations. Cela implique deux choses principales :

- - - -

Il est également possible de communiquer sur le fait que le contenu intégré soit une application web. Dans ce cas, le contenu sera chargé avec le contexte pertinent (comme les permissions).

- -

Utilisation

- -

Un élément {{HTMLElement("iframe")}} est transformé en fenêtre de navigateur en utilisant l'attribut {{htmlattrxref("mozbrowser","iframe")}} :

- -
<iframe src="http://hostname.tld" mozbrowser>
- -

Afin d'intégrer une application web, il faut également renseigner l'attribut {{htmlattrxref("mozapp","iframe")}}, la valeur sera le chemin vers le manifeste de l'application :

- -
<iframe src="http://hostname.tld" mozapp='http://chemin/du/manifeste.webapp' mozbrowser>
- -

Enfin, en utilisant l'attribut {{htmlattrxref("remote","iframe")}} le contenu de l'élément{{HTMLElement("iframe")}} peut être chargé en utilisant uniquement un processus fils qui sera séparé de celui de la page qui contient l'élément {{HTMLElement("iframe")}}.

- -
<iframe src="http://hostname.tld" mozbrowser remote>
- -
-

Warning : Ce dernier attribut est indispensable pour des raisons de sécurité lors du chargement de contenu provenant d'une origine inconnue. Si vous ne l'utilisez pas, cela rendra votre application vulnérable aux attaques d'un site web malveillant.

-
- -

Permissions de l'application

- -

Chaque application qui souhaite intégrer une fenêtre de navigateur devra avoir la permission browser au sein du manifeste d'application.

- -
{
-  "permissions": {
-    "browser": {}
-  }
-}
- -

Si elle souhaite intégrer une application web, l'application hôte devra disposer de la permission embed-apps.

- -
{
-  "permissions": {
-    "browser": {},
-    "embed-apps": {}
-  }
-}
- -

Méthodes supplémentaires

- -

Afin d'être conforme aux spécifications d'un navigateur  {{HTMLElement("iframe")}}, Firefox OS étend l'interface DOM {{domxref("HTMLIFrameElement")}}. Ces nouvelles méthodes permettent d'augmenter les capacités de l'élément  {{HTMLElement("iframe")}} :

- -

Les méthodes de navigation

- -

Ces méthodes permettent de naviguer au sein de l'historique de l'élément {{HTMLElement("iframe")}}. Elles sont nécessaires afin d'implémenter les boutons de pages précédentes, suivantes ou le bouton d'actualisation de la page.

- - - -

Les méthodes liées aux performances

- -

Ces méthodes sont utilisées pour gérer les ressources utilisées par un navigateur contenu dans un élément {{HTMLElement("iframe")}}. Cela est particulièrement utile lorsqu'il s'agit d'un navigateur utilisant des onglets.

- - - -

Méthodes liées aux événements

- -

Afin de gérer le contenu du navigateur {{HTMLElement("iframe")}} il est nécessaire d'introduire de nouveaux événements (voir ci-après). Les méthodes suivantes peuvent être utilisées pour manipuler ces événements :

- - - -

Méthodes diverses

- -

Ces méthodes sont des utilitaires destinés aux applications qui conteiennent un navigateur {{HTMLElement("iframe")}}.

- - - -

Événements

- -

Afin de permettre à une application de manipuler le navigateur {{HTMLElement("iframe")}}, l'application peut écouter, surveiller les nouveaux événements qui se passent au sein du navigateur  {{HTMLElement("iframe")}}. Il est possible de surveiller les événements suivant :

- - - -

Exemple

- -

Dans cet exemple, nous verrons comment implémenter un navigateur intégré de manière simplifiée.

- -

HTML

- -

Dans le code HTML, il faut juste ajouter une barre pour la saisie de l'URL, un bouton « Aller à », un bouton « Arrêter » et un élément  {{HTMLElement("iframe")}} pour le navigateur.

- -
<header>
-  <input id="url">
-  <button id="go">Aller à</button>
-  <button id="stop">Arrêter</button>
-</header>
-
-<iframe src="about:blank" mozbrowser remote></iframe>
-
- -

CSS

- -

Il est possible de passer du bouton « Aller à » au bouton « Arrêter »  (et vice versa) en utilisant ce fragment de code CSS :

- -
button:disabled {
-  display: none;
-}
- -

JavaScript

- -

Et maintenant, il faut ajouter les fonctionnalités nécessaires au navigateur :

- -
document.addEventListener("DOMContentLoaded", function () {
-  var url  = document.getElementById("url");
-  var go   = document.getElementById("go");
-  var stop = document.getElementById("stop");
-
-  var browser = document.getElementsByTagName("iframe")[0];
-
-  // Cette fonction permet de passer entre le bouton "Aller" au bouton "Arreter"
-  // (et vice versa). Si le navigateur charge, le bouton "Aller" est désactivé
-  // et le bouton "Arrêter" est activé. Sinon, on a l'état inverse.
-  function uiLoading(isLoading) {
-      go.disabled =  isLoading;
-    stop.disabled = !isLoading;
-  }
-
-  go.addEventListener("touchend", function () {
-    browser.setAttribute("src", url.value);
-  });
-
-  stop.addEventListener("touchend", function () {
-    browser.stop();
-  });
-
-  // Quand le navigateur charge, on change l'état des boutons "Aller" et "Arrêter"
-  browser.addEventListener('mozbrowserloadstart', function () {
-    uiLoading(true);
-  });
-
-  // Quand le navigateur a fini de charger du contenu,
-  // on change l'état des boutons "Aller" et "Arrêter"
-  browser.addEventListener('mozbrowserloadend', function () {
-    uiLoading(false);
-  });
-
-  // Si jamais il y a une erreur il faut également
-  // changer l'état des boutons "Aller" et "Arrêter"
-  browser.addEventListener('mozbrowsererror', function (event) {
-    uiLoading(false);
-    alert("Erreur de chargement : " + event.detail);
-  });
-
-  // Lorsqu'un utilisateur suit un lien il faut s'assurer que
-  // l'emplacement de la nouvelle page apparaît dans la barre d'URL
-  browser.addEventListener('mozbrowserlocationchange', function (event) {
-    url.value = event.detail;
-  });
-});
- -

Voir aussi

- - diff --git a/files/fr/webapi/camera/index.html b/files/fr/webapi/camera/index.html deleted file mode 100644 index 20053d8670..0000000000 --- a/files/fr/webapi/camera/index.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Camera API -slug: WebAPI/Camera -tags: - - Video - - WebAPI -translation_of: Archive/B2G_OS/API/Camera_API ---- -

{{ ApiRef() }}

-

{{ non-standard_header() }}

-

{{ B2GOnlyHeader2('certified') }}

-

L'API Camera permet aux applications de gérer la caméra (ou l'appareil photo) de l'appareil. Cela leur permet de prendre des photos, d'enregistrer des vidéos et d'obtenir des informations concernant le focus, le zoom, la balance des blancs, le flash... Cette API à privilèges ne peut être utilisée que par les applications certifiées.

-
-

Note : Sauf si vous avez l'intention de développer une application remplaçant l'application Caméra/Appareil Photo par défaut, vous ne devriez pas utiliser cette API. Si vous souhaitez simplement accéder à la caméra (ou l'appareil photo) de votre appareil, vous devriez utiliser l'API Web Activities.

-
-

Voir aussi

- -

 

diff --git a/files/fr/webapi/idle/index.html b/files/fr/webapi/idle/index.html deleted file mode 100644 index 1679ac97f7..0000000000 --- a/files/fr/webapi/idle/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Idle API -slug: WebAPI/Idle -translation_of: Archive/B2G_OS/API/Idle_API ---- -
- {{non-standard_header}} {{B2GOnlyHeader2('certified')}}
-

Summary

-

L'API Idle est utilisée pour notifier une application lorsque l'utilisateur est inactif. Cela permet à une application d'intervenir lorsque l'utilisateur ne fait rien avec son appareil. Le cas d'utilisation le plus courant consiste à économiser la batterie; dans ce cas, Il est couramment utilisé en conjonction avec le Power Management API.

-

Surveiller un utilisateur inactif

-

Quand une application veut être averti de l'inactivité du système, elle doit inscrire un idle observer. Un idle observer est un objet composé de trois propriétés :

- -

Exemple: diminuer la luminosité de l'écran lorsque l'utilisateur est inactif

-

Dans cet exemple, un observateur idle est mis en place pour réduire la luminosité de l'écran à 50 % lorsque l'utilisateur est inactif pendant 10 secondes et le restaurer à 100 % lorsque l'utilisateur est de nouveau actif. Un deuxième observateur est mis en place pour éteindre l'écran lorsque l'utilisateur est inactif pendant au moins 15 secondes.

-
// REMARQUE: mozPower fait partie de l'API de gestion de puissance (Power Management API)
-
-var fadeLight = {
-  time: 10, // 10 secondes
-
-  onidle: function () {
-    // L'utilisateur ne semble pas actif, nous allons diminuer la luminosité de l'écran
-    navigator.mozPower.screenBrightness = 0.5;
-  },
-
-  onactive: function () {
-    // OK, l'utilisateur est de retour, nous allons ré-éclairer l'écran
-    navigator.mozPower.screenBrightness = 1;
-  }
-}
-
-var screenOff = {
-  time: 15, // quinze seconds
-
-  onidle: function () {
-    // OK, l'utilisateur a eu sa chance, mais il est vraiment inactif, nous allons désactiver l'écran
-    navigator.mozPower.screenEnabled = false;
-  },
-
-  onactive: function () {
-    // OK, l'utilisateur est de retour, nous allons allumer l'écran
-    navigator.mozPower.screenEnabled = true;
-  }
-}
-
-// Enregistrer les observateurs inactifs
-
-navigator.addIdleObserver(fadeLight);
-navigator.addIdleObserver(screenOff);
-
-

Ce code définit deux objets idle observer : fadeLight et screenOff, puis appelle {{domxref("window.navigator.addIdleObserver","navigator.addIdleObserver()")}} une fois pour chacun d'eux afin de les enregistrer dans le système. Les applications peuvent mettre en place autant d'observateurs inactif que nécessaire.

-

Si l'application n'a plus besoin de surveiller l’inactivité de l'utilisateur, il peut enlever les observateurs en appelant la méthode {{domxref("window.navigator.removeIdleObserver","navigator.removeIdleObserver()")}}, comme indiqué ci-dessous :

-
navigator.removeIdleObserver(fadeLight);
-navigator.removeIdleObserver(screenOff);
-
-

Spécification

-

Ne fait partie d'aucune spécification pour le moment ; cependant, cette API sera discutée au W3C dans le cadre de la System Applications Working Group.

-

Voir aussi

- diff --git a/files/fr/webapi/mobile_connection/index.html b/files/fr/webapi/mobile_connection/index.html deleted file mode 100644 index b815442da0..0000000000 --- a/files/fr/webapi/mobile_connection/index.html +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: Mobile Connection -slug: WebAPI/Mobile_Connection -tags: - - WebAPI -translation_of: Archive/B2G_OS/API/Mobile_Connection_API ---- -

{{ draft }}

-

{{ non-standard_header() }}

-

{{ B2GOnlyHeader2('certified') }}

-

Résumé

-

Cette API a été conçue pour 2 choses :

- -

Cette API peut donc accéder à des fonctionnalités qui pourront avoir un impact sur l'abonnement de l'utilisateur (certaines fonctionnalités seront payantes ou pourront endommager l'ICC) : elle est donc limitée aux applications certifiées.

-

Le point d'entrée de cette API est la propriété {{domxref("window.navigator.mozMobileConnection","navigator.mozMobileConnection")}} , cette propriété est une instance de l'interface {{domxref("MozMobileConnection")}}.

-

État de la connexion mobile

-

L'état de la connexion mobile se partage en deux. D'un côté, la connexion voice et de l'autre la connexion data. Les données relatives à chaque type de connexion sont accessibles à travers les propriétés {{domxref("MozMobileConnection.voice")}} et {{domxref("MozMobileConnection.data")}} qui renvoient toutes les deux un objet {{domxref("MozMobileConnectionInfo")}}.

-

Ces objets donnent accès à toutes les informations liées à la qualité du réseau (la force du signal, la qualité du signal, la position des cellules réseau, la restriction de l'usage, les données en itinérance, etc.), et à l'opérateur réseau.

-
var cnx = navigator.mozMobileConnection;
-
-console.log("L'opérateur voix est :" + cnx.voice.network.longName);
-
-if (cnx.voice.connected) {
-  console.log("La force du signal est :" + (+cnx.voice.relSignalStrength) + "%");
-} else {
-  console.log("L'état de la connexion est : " + cnx.voice.state);
-}
-
-

Les fonctionnalités ICC

-

Les fonctionnalités offertes par l'ICC peuvent se ranger dans deux catégories :  la gestion de l'ICC même ou l'utilisation des commandes disponibles et intégrées au sein de STK (SIM Application Toolkit).

-

Les actions de base

-

Le {{domxref("MozMobileConnection")}} fournit un ensemble de méthodes pour gérer les différents comportements des cartes ICC.

-
-

Note : L'ensemble des méthodes de l'interface MozMobileConnection sont intégralement asynchrones. Elles renvoient toutes un objet {{domxref("DOMRequest")}} qui possède les gestionnaires d'événements onsuccess et onerror afin de gérer les succès ou échecs suite à l'appel de la méthode.

-
-

Verrouillage de la carte

-

Tant que la carte est verrouillée, un utilisateur sera incapable de l'utiliser pour atteindre le réseau mobile. Il est possible de gérer le verrouillage de la carte avec les méthodes {{domxref("MozMobileConnection.getCardLock","getCardLock()")}}, {{domxref("MozMobileConnection.setCardLock","setCardLock()")}} et {{domxref("MozMobileConnection.unlockCardLock","unlockCardLock()")}}.

-

Si le {{domxref("MozMobileConnection.getCardLock","getCardLock()")}} permet d'obtenir certaines informations précises sur le verrouillage, il est également possible d'avoir des informations plus concises sur le verrouillage grâce à {{domxref("MozMobileConnection.cardState")}} qui renvoie une chaîne de caractères représentant l'état actuel du verrouillage.

-
-

Note : Même dans le cas où les requêtes ont réussi, cela ne signifie pas forcément que les opérations aient été réussies. C'est pourquoi les changements d'état de la carte sont suivis grâce à des événements indépendants :

- -
-
var cnx = navigator.mozMobileConnection;
-
-function unlockCard() {
-  var unlockOptions = {
-    lockType: "pin",
-    pin     : prompt("Veuillez saisir votre PIN")
-  }
-
-  var unlock = cnx.unlockCardLock(unlockOptions);
-
-  unlock.onsuccess = function () {
-    console.log("Le code PIN a bien été reçu.");
-
-    if (this.result.success === false) {
-      if (this.result.retryCount > 0) {
-        console.log("Vous avez fait une faute dans votre code PIN : " + this.result.retryCount + " essais restants.");
-      } else {
-        console.log("Votre carte est vérrouillée, vous devez contact votre opérateur afin de recevoir un code de déblocage.");
-      }
-    }
-  }
-
-  unlock.onerror = function () {
-    console.log("Il y a eu un problème !")
-  }
-}
-
-cnx.addEventListener('icccardlockerror', function () {
-  // S'il y a une erreur, demander à l'utilisateur de resaisir le code PIN
-  unlockCard();
-});
-
-cnx.addEventListener('cardsatechange', function () {
-  // Dans le cas où l'état de la carte change et nécessite un dévérouillage
-  if (cnx.cardState === 'pinRequired') {
-    unlockCard();
-  }
-}
-
-// Le premier appel à unlockCard s'il est nécessaire
-if (cnx.cardState === 'pinRequired') {
-  unlockCard();
-}
-
-

Les messages MMI

-

Un message MMI est un code, lisible par les humains, qui, une fois tapé avec le clavier du téléphone, déclenche une action spécifique depuis le RIL ou d'obtenir une réponse depuis le réseau via une requête USSD. Un exemple : taper un code pour obtenir le numéro IMEI du téléphone.

-

De tels messages sont envoyés en utilisant la méthode  {{domxref("MozMobileConnection.sendMMI()")}} (et peuvent être annulés avec {{domxref("MozMobileConnection.cancelMMI","cancelMMI()")}}). Même si la réponse sera un objet {{domxref("DOMRequest")}}, la réponse à un tel message pourra être gérée de deux manières :

- -
var cnx = navigator.mozMobileConnection;
-
-cnx.addEventHandler('ussdreceived', function (evt) {
-  console.log('Message réseau : ' + evt.data.message);
-});
-
-var MMIRequest = cnx.sendMMI(prompt('Provide a valid MMI'));
-
-MMIRequest.onerror = function() {
-  console.log("Il y a eu un problème...");
-}
-
-

Options de renvoi d'appels

-

Les options de renvoi d'appels permettent de définir la façon dont un appel peut, ou non, être transféré vers un autre numéro de téléphone.

-

Ces options sont gérées par les méthodes {{domxref("MozMobileConnection.getCallForwardingOption","getCallForwardingOption()")}} et {{domxref("MozMobileConnection.setCallForwardingOption","setCallForwardingOption()")}} .

-
var options = {
-  action      : MozMobileCFInfo.CALL_FORWARD_ACTION_ENABLE,
-  reason      : MozMobileCFInfo.CALL_FORWARD_REASON_UNCONDITIONAL,
-  serviceClass: MozMobileConnectionInfo.ICC_SERVICE_CLASS_VOICE,
-  number      : prompt('À quelle numéro doit être transféré l appel ?'),
-  timeSeconds : 5
-};
-
-var setOption = navigator.mozMobileConnection.setCallForwardingOption(options);
-
-setOption.onsuccess = function () {
-  console.log('Options paramétrées avec succès');
-}
-
-setOption.onerror = function () {
-  console.log('Impossible de paramétrer les options : ' + this.error.name);
-}
-
-

Commandes STK

-

Les commandes STK dépendent de plusieurs facteurs (opérateur, modèle de puces...) mais sont toujours accessibles via la propriété {{domxref("MozMobileConnection.icc")}} qui renverra un objet {{domxref("MozIccManager")}}.

-
-

Avertissement : Il est recommandé de n'utiliser les commandes STK uniquement si vous êtes parfaitement conscient de ce que vous faites. En effet, cela peut endommager la puce électronique et la rendre inutilisable.

-
-

Spécification

-

Cette API n'appartient à aucune spécification.

-

Voir aussi

- diff --git a/files/fr/webapi/network_stats/index.html b/files/fr/webapi/network_stats/index.html deleted file mode 100644 index 363d5ca3fe..0000000000 --- a/files/fr/webapi/network_stats/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Network Stats -slug: WebAPI/Network_Stats -tags: - - WebAPI -translation_of: Archive/B2G_OS/API/Network_Stats_API ---- -

{{ draft }}

-

{{ non-standard_header() }}

-

{{ B2GOnlyHeader2('certified') }}

-

Résumé

-

L'API Network Stats (statistiques réseaux) permet de surveiller l'utilisation des données et de fournir ces informations aux applications disposant des privilèges nécessaires.

-

On peut accéder aux données grâce à {{domxref("window.navigator.mozNetworkStats","navigator.mozNetworkStats")}} qui est une instance de l'interface {{domxref("MozNetworkStatsManager")}}.

-

Accès aux données

-

Les informations concernant le volume de données envoyé/reçu est automatiquement enregistré par le système. On peut y accéder avec la méthode {{domxref("MozNetworkStatsManager.getNetworkStats()")}}. Cette méthode prend un objet de configuration comme premier paramètre, celui-ci doit contenir les propriétés suivantes :

- -

Lorsqu'elle est appelée, cette méthode renvoie un objet {{domxref("DOMRequest")}} permettant de savoir si la requête d'informations a réussi ou échoué. Si elle a réussi, le résultat de la requête, result, est un objet {{domxref("MozNetworkStats")}}.

-
var manageWifi   = navigator.mozNetworkStats.connectionTypes.indexOf('wifi')   > -1;
-var manageMobile = navigator.mozNetworkStats.connectionTypes.indexOf('mobile') > -1;
-
-var config = {
-  start: new Date(),
-  end  : new Date(),
-  connectionType: manageWifi ? 'wifi' : null
-};
-
-var request = navigator.mozNetworkStats.getNetworkStats(config);
-
-request.onsuccess = function () {
-  console.log("Données reçues : " + request.result.data[0].rxBytes + " bytes");
-  console.log("Données envoyées : " + request.result.data[0].txBytes + " bytes")
-}
-
-request.onerror = function () {
-  console.log("Il y a eu un problème : ", request.error);
-}
-
-

Échantillonage temporel

-

Afin de voir comment évolue l'utilisation des données au cours du temps, on stocke l'information sous forme de morceaux. Chaque morceau de données représente la quantité de données échangées depuis l'enregistrement du précédent morceau.

-

Lorsqu'une requête est faite pour obtenir ces statistiques, un objet {{domxref("MozNetworkStats")}} est envoyé qui contient autant de « morceaux » que possible pour l'intervalle start-end.  Le nombre total de morceaux dépend de deux paramètres (ces paramètres sont en lecture seule) :

- -

Chaque morceau de données est un objet {{domxref("MozNetworkStatsData")}} et tous les morceaux de données d'un moment donné sont accessibles via la propriété {{domxref("MozNetworkStats.data")}}. Cette propriété est un Array d'objets {{domxref("MozNetworkStatsData")}}.

-
var rate = navigator.mozNetworkStats.sampleRate;
-var max  = navigator.mozNetworkStats.maxStorageSample;
-
-var config = {
-  start: new Date() - (rate * max), // Cela permet d'obtenir tous les morceaux de données disponibles.
-  end  : new Date(),
-  connectionType: 'mobile'
-};
-
-var request = navigator.mozNetworkStats.getNetworkStats(config);
-
-request.onsuccess = function () {
-  var total = {
-    receive: 0,
-    send   : 0
-  };
-
-  this.result.forEach(function (chunk) {
-    total.receive += chunk.rxBytes;
-    total.send    += chunk.txBytes;
-  });
-
-  console.log("Depuis : " + config.start.toString());
-  console.log("Données reçues : " + (total.receive * 1000).toFixed(2) + "Ko");
-  console.log("Données envoyées : " + (total.send * 1000).toFixed(2) + "Ko")
-}
-
-request.onerror = function () {
-  console.log("Il y a eu un problème : ", request.error);
-}
-

Spécification

-

Cette API ne fait partie d'aucune spécification.

-

Voir aussi

- diff --git a/files/fr/webapi/power_management/index.html b/files/fr/webapi/power_management/index.html deleted file mode 100644 index 71767d3fb1..0000000000 --- a/files/fr/webapi/power_management/index.html +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Gestion de l'énergie -slug: WebAPI/Power_Management -tags: - - B2G - - Firefox OS - - Non Standard - - Power Management - - WebAPI -translation_of: Archive/B2G_OS/API/Power_Management_API ---- -

{{ non-standard_header() }}

-

{{ B2GOnlyHeader2('certified') }}

-

Résumé

-

L'API de gestion de l'énergie, propose des outils pour gérer la consommation énergétique de l'appareil.

-

Gestion de l'énergie

-

L'API : Power Management , permet d'agir directement sur la consommation d'énergie (écran, processeur, etc...).
- L'interface principale pour gérer l'alimentation est accessible
- via {{domxref("window.navigator.mozPower","navigator.mozPower")}} qui est une instance de l'interface {{domxref("PowerManager")}}.

-

Opérations d'alimentation de base

-

L'interface {{domxref("PowerManager")}} permet de gérer la consommation énergétique d'un appareil grâce à de simples opérations.

-

Opérations globales d'alimentation

-

Il est possible d'éteindre l'appareil avec la méthode {{domxref("PowerManager.powerOff()","powerOff()")}} ou de le redémarrer via la méthode {{domxref("PowerManager.reboot()","reboot()")}}.

-
// Redémarre l'appareil.
-navigator.mozPower.reboot();
-// Eteint l'appareil.
-navigator.mozPower.powerOff();
-

Opérations d'alimentation de l'écran

-

L'écran peut être éteint ou rallumé avec la propriété {{domxref("PowerManager.screenEnabled","screenEnabled")}} en lecture-écriture.

-

Mais il est aussi possible d'agir sur l'écran de manière plus précise, en changeant par exemple la luminosité avec la propriété {{domxref("PowerManager.screenBrightness","screenBrightness")}} en lecture-écriture. Cette propriété définit, sur une échelle de 0 à 1, quel est le niveau de luminosité du rétro-éclairage de l'écran (0 étant la luminosité minimale et 1 la luminosité maximale).

-
// Il est inutile de changer la luminosité si
-// l'écran est éteint.
-if (navigator.mozPower.screenEnabled) {
-  navigator.mozPower.screenBrightness = 0.5;
-}
-

Opération sur la consommation du processeur

-

Même s'il n'est pas possible d'éteindre directement le processeur, il est cependant possible de dire s'il peut être arrêté ou, si l'écran est hors tension. Cela peut être défini avec la propriété : {{domxref("PowerManager.cpuSleepAllowed","cpuSleepAllowed")}}.
- Elle détermine si le processeur se mettra en veille une fois que l'écran a été éteint (true) ou si le processeur continuera de fonctionner normalement (false), auquel cas l'appareil ne passera pas en veille.

-

Opérations d'alimentation avancées

-

L'énergie peut être mieux gérée lorsque l'application en charge de l'énergie est capable de recevoir des informations quant aux besoins énergétiques des applications tierces. La lecture d'une vidéo, par exemple, sera plus agréable si l'écran ne s'éteint pas automatiquement après quelques secondes de lecture.

-

Inhibiteur de mise en veille

-

Toute application peut faire une requête d'inhibition de la mise en veille.
- Une requête d'inhibition de mise en veille est une façon d’empêcher l'appareil de mettre en veille ses ressources matérielles (écran, processeur, son etc...).  Cette requête peut être appelée grâce à la méthode {{domxref("window.navigator.requestWakeLock","navigator.requestWakeLock()")}} .

-

L'inhibition de la mise en veille est requise pour des ressources spécifiques qui pourraient être indisponibles pour diverses raisons.
- Par exemple, sur un appareil mobile, le gestionnaire d'énergie peut décider d'éteindre l'écran après une période d'inactivité pour économiser de l'énergie.

-

L'application qui gère une ressource vérifie la disponibilité de la mise en veille de la ressource associée, avant de la désactiver. Une page peut ainsi empêcher que l'économiseur d'écran s'active ou que l'écran s'éteigne.

-

Par défaut, Firefox OS autorise l'écran, le processeur, le wifi, à se mettre en veille. Néanmoins, toute application peut manipuler une ressource matérielle et définir sa propre politique de mise en veille pour cette ressource. Le gestionnaire de ressource peut décider par exemple d'ignorer la requête d’inhibition de mise en veille de l'écran demandée par des applications en arrière plan.

-
var lock = navigator.requestWakeLock('screen');
-

La méthode {{domxref("window.navigator.requestWakeLock","requestWakeLock")}} retourne un objet contenant une propriété topic représentant, le nom de la ressource spécifique verrouilée ainsi qu'une methode unlock() qui peut être utiliser pour annuler manuellement l’inhibition. Notons que si l'application est close (réellement close et pas seulement en arrière plan) toutes les inhibitions seront libérées automatiquement.

-

Gérer un inhibiteur de mise en veille

-

Les applications certifiées, sont capables de gérer le blocage de mise en veille et d'être notifiées changements sur l'état de ce verrouillage. Toute application désirant gérer l'énergie doit en fait écouter tout changement de l'état du blocage de veille de l'écran et du processeur. Ceci peut être réalisé à l'aide de la méthode {{domxref("PowerManager.addWakeLockListener()")}}.
- Il est également possible d’arrêter d'écouter les requêtes de verrouillage via la méthode {{domxref("PowerManager.removeWakeLockListener()","")}}.

-

La méthode {{domxref("PowerManager.addWakeLockListener()","addWakeLockListener")}} prends en paramètre une fonction de rappel (callback) acceptant deux paramètres : une première chaine de caractères représentant une ressource à gérer (dans notre cas l'écran, le processeur ou le wifi) et une seconde chaine de caractères représentant l'état du blocage de veille pour la ressoure concernée.

-

Le verrou de la mise en veille peut avoir trois états :

-
-
- unlocked
-
- Personne ne détient le verrou pour bloquer la veille de la ressource donnée
-
- locked-foreground
-
- Au moins une application détient le verrou et est visible.
-
- locked-background
-
- Au moins une application détient le verrou, cependant aucune d'entre elle n'est visible.
-
-
// Utilisé pour garder une trace du
-// dernier changement d'état de WakeLock.
-var screenTimeout,
-
-// Une référence sur le gestionnaire d'énergie.
-    power = window.navigator.mozPower,
-
-// Ici l'action pour gérer l'état du WakeLock.
-    powerAction = {
-  // Si il n'y a aucun WakeLock, on va suspendre l'appareil.
-  // * Éteindre l'écran
-  // * Permettre au processeur de se mettre en veille.
-    unlocked: function suspendDevice() {
-    power.cpuSleepAllowed = true;
-    power.screenEnabled   = false;
-  },
-
-  // Si il y a un WakeLock mais les application qui le requièrent
-  // sont toutes en arrière plan, on éteint juste l'écran.
-  'locked-background': function shutOffOnlyScreen() {
-    power.cpuSleepAllowed = false;
-    power.screenEnabled   = false;
-  },
-
-  // En fin s'il n'y a pas d'application active, requérant un WakeLock,
-  // et bien il n'y a rien à faire!
- }
-
-function screenLockListener(topic, state) {
-  // Si la ressource désignée par le WakeLock n'est pas l'écran ne rien faire.
-  if ('screen' !== topic) { return; }
-
-  // Chaque fois que l'état de WakeLock change,
-  // on arrête toute opération de gestion d'énergie en cours.
-  window.clearTimeout(screenTimeout);
-
-  // Si il y a une action définie pour l'état donnée.
-  if (powerAction[state]) {
-    // On retard l'action de 3s.
-    screenTimeout = window.setTimeout(powerAction[state], 3000);
-  }
-}
-// On s'assure que notre application de gestion de l'énergie écoute,
-// tout les changements sur l'état de WakeLock d'une ressource donnée.
-power.addWakeLockListener(cpuLockListener);
-power.addWakeLockListener(screenLockListener);
-

 

-

Spécification

-

Cette API ne fait partie d'aucune spécification actuellement.

-

Voir aussi

- diff --git a/files/fr/webapi/websms/index.html b/files/fr/webapi/websms/index.html deleted file mode 100644 index 66bf727f00..0000000000 --- a/files/fr/webapi/websms/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: WebSMS -slug: WebAPI/WebSMS -tags: - - WebAPI -translation_of: Archive/B2G_OS/API/Mobile_Messaging_API ---- -

L'API WebSMS permet à du contenu web de créer, envoyer ou recevoir des SMS (Short Message Services).

-

Cette API est disponible en utilisant {{ domxref("window.navigator.mozSms") }} qui renvoie un objet {{ domxref("SmsManager") }}. Voir ci-après pour une liste complète des interfaces :

-

Interfaces DOM

- -

Interfaces

- -

Exemple de code et introduction à WebSMS

- -

Compatibilité des navigateurs

-

Pour des raisons évidentes, cette API est surtout destinée aux navigateurs mobiles.

- - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Support simple{{ CompatNo() }}{{ CompatGeckoMobile("12.0") }}{{ CompatNo() }}{{ CompatNo() }}{{ CompatNo() }}
-

 

-

Réglages et disponibilité

- -

Voir aussi

- diff --git a/files/fr/xml_dans_mozilla/index.html b/files/fr/xml_dans_mozilla/index.html deleted file mode 100644 index b928d104a6..0000000000 --- a/files/fr/xml_dans_mozilla/index.html +++ /dev/null @@ -1,286 +0,0 @@ ---- -title: XML dans Mozilla -slug: XML_dans_Mozilla -tags: - - XML -translation_of: Archive/Mozilla/XML_in_Mozilla ---- -

Mozilla offre un vaste support des technologies XML. De nombreuses Recommandations et spécifications en développement du World Wide Web Consortium (W3C), ainsi que d'autres technologies associées, sont supportées.

- -
-

Le contenu de cette page est dépassé. Aidez-nous à la mettre à jour avec des informations actualisées.

-
- -

Recommandations W3C ducore XML supportées

- -

Parmi les fonctionnalités faisant partie ducore XML on peut citer l'analyse XML sans validation (par l'utilisation de l'analyseur Expat), l'affichage de documents XML avec CSS et leur manipulation par des scripts via le DOM, l'association de feuilles de styles avec des documents XML, et les espaces de noms dans XML. Le support ducore XML est très bon, et les quelques bogues qui subsistent sont peu nombreux.

- -

Les DTD et les autres entités externes

- -

Mozilla ne charge pas les entités externes depuis le Web.

- -

Mozilla peut charger les entités externes dont l'identifiant système utilise le protocole chrome. Cette fonctionnalité est principalement utilisée pour localiser Mozilla dans différentes langues (les chaînes de l'interface utilisateur (UI) sont stockées dans des fichiers DTD externes). Autre exception, les entités dont l'identifiant système est un chemin relatif lorsqu'elles se trouvent dans un document dont la déclaration XML indique qu'il n'est pas autonome (c'est le cas par défaut). Dans ce cas, Mozilla n'essayera pas de chercher l'entité dans le répertoire <bin>/res/dtd.

- -

Mozilla peut également faire une exception pour certains documents XHTML, voir ci-dessous.

- -

Mozilla lira les sous-ensembles internes (DTD), et dans certaines circonstances les DTD externes comme détaillé ci-dessus et utilisera ces informations pour identifier les attributs de type ID, les valeurs par défaut des attributs et les entités générales.

- -

Autres notes

- -

Une grande partie du Document Object Model (DOM, recommandations et de documents de travail du W3C) s'applique au XML. De même, les Cascading Style Sheets (CSS, recommandations et de documents de travail du W3C) peut être utilisé pour définir les styles d'un document XML.

- -

Le code ducore XML peut être consulté depuis les répertoires suivants du serveur CVS de Mozilla : content/xml/, parser/expat/ et parser/htmlparser/.

- -

Le forum Usenet dans lequel discuter du XML dans Mozilla, dépend largement de la nature de la question. Par exemple, les questions relatives au DOM auront plus leur place sur le forum mozilla.dev.tech.dom, alors que celles concernant les styles seront plus appropriée sur mozilla.dev.tech.css. Le forum de discussion général pour les discussions XML est mozilla.dev.tech.xml.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Spécification ou technologieStatut et/ou autres documentations
XMLRecommandation W3C (traduction)
Espaces de noms dans XMLRecommandation W3C
Associer des feuilles de styles à des documents XMLRecommandation W3C (traduction)
Styler les documents XML avec CSS 
Manipuler les document XML avec des scripts à l'aide du DOM 
- -

Autres recommandations XML du W3C supportées

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Spécification ou technologieDocumentation
XHTMLRecommandation W3C (traduction)
XML Base (uniquement pour les liens, non utilisé pour les propriétés CSS comme :visited, etc.)Recommandation W3C (traduction)
XLink (uniquement XLinks simple)Recommandation W3C (traduction)
FIXptr« Proposition » W3C
Framework XPointerRecommandation W3C (traduction)
Schéma XPointer element()Recommandation W3C (traduction)
Schéma XPointer xmlns()Recommandation W3C (traduction)
Schéma XPointer fixptr()Ce schéma est simplement une classe enveloppante de FIXptr
Schéma XPointer xpath1()Brouillon
document.load(), document.asyncPartie du DOM niveau 3, moduleLoad & Save, document de travail du W3C
- -

XHTML

- -

Mozilla possède un support de XHTML très correct, la plupart des éléments doivent fonctionner. Mozilla traite les documents XHTML différemment suivant le type MIME (ou le suffixe d'extension du fichier si celui-ci est chargé depuis un disque local). Les fichiers traités comme du HTML ne sont pas vérifiés quant à la bonne formulation du code. Vous remarquerez également que toutes les fonctions XHTML sont supportées lorsque vous les traitez comme du code HTML.

- - - - - - - - - - - - - - - - - - - -
Type MIMEExtension du fichierTraitement du code
text/xml
- application/xml
- application/xhtml+xml
xml
- xht
- xhtml
XML
text/htmlhtml
- htm
HTML
- -

Le document n'a pas besoin d'être intégralement en XHTML. Vous pouvez utiliser des éléments XHTML dans un document XML quelconque en utilisant les espaces de noms XHTML. Voir la section Tests et assurance qualité pour des exemples. L'équivalent XHTML correct est http://www.w3.org/1999/xhtml.

- -

Veuillez noter que les entités XHTML, telles que &auml;, fonctionnent uniquement dans les documents XHTML conformes qui possèdent unidentifiant public officiel XHTML (ou, en d'autres mots, une section DOCTYPE avec un identifiant public). Les entités XHTML ne s'afficheront pas dans des documents XML quelconques, même si les équivalents XHTML sont utilisés. Les identifiants publics reconnus sont :

- -
-//W3C//DTD XHTML 1.0 Transitional//EN
--//W3C//DTD XHTML 1.1//EN
--//W3C//DTD XHTML 1.0 Strict//EN
--//W3C//DTD XHTML 1.0 Frameset//EN
--//W3C//DTD XHTML Basic 1.0//EN
--//W3C//DTD XHTML 1.1 plus MathML 2.0//EN
--//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN
--//W3C//DTD SVG 20001102//EN
--//WAPFORUM//DTD XHTML Mobile 1.0//EN
-
- -

Lier et pointer dans XML

- -

Le support des liens dans XML inclut XML Base (utilisé uniquement lorsque vous survolez ou que vous cliquez sur un lien) et XLinks simple. Vous faire de n'importe quel élément XML un XLink en utilisant l'espace de noms XLink http://www.w3.org/1999/xlink. Vous pouvez également utiliser les éléments de liens de l'espace de noms XHTML. Voir la section Tests et assurance qualité pour des exemples.

- -

Pour pointer vers d'autres ressources depuis des documents XML, Mozilla permet aussi d'utiliser FIXptr, une version simplifiée et non compatible de XPointer. Outre son utilisation dans des liens, FIXptr peut être utilisé à partir de scripts. Voir l'interface propriétaire dom/public/idl/core/nsIDOMXMLDocument.idl. Un cas de texte est disponible pour les liens FIXptr ainsi qu'un exemple de script.

- -

Depuis sa version 1.4 alpha, Mozilla supporte également le Framework XPointer, le schéma XPointer element(), le schéma XPointer xmlns(), le schéma XPointer fixptr() et le schéma XPointer xpath1(). Le processeur XPointer est extensible et il est facile d'implémenter le support d'autres schémas — jetez un œil à l'API. Le schéma xpath1() a été implémenté en utilisant ce mécanisme d'extensibilité. Il existe également une API propriétaire à partir de scripts au processeur XPointer. Vous pouvez encore étudier un cas de test pour XPointers.

- -

Enfin, il existe une préférence que vous pourriez avoir envie d'essayer (particulièrement utile avec FIXptr) qui sélectionne la cible d'un lien lorsque vous le traversez. Il n'y pas encore d'UI pour activer cette préférence, aussi aurez-vous besoin de l'éditer manuellement dans le fichier des préférences. Ajoutez cette ligne :

- -
pref("layout.selectanchor", true);
-
- -

Méthodes DOM de chargement et d'enregistrement (Load and Save)

- -

document.load() appartient à une ancienne version du module DOM Level 3 Load & Save du W3C. À l'heure actuelle, Mozilla implémente uniquement la méthode load() et la propriété async. Depuis la version 1.4 alpha, il est possible de charger des documents de façon synchrone, auparavant cela se faisait de façon asynchrone. Consultez l'exemple<em>load</em> dans le répertoire des tests XML. Charger le fichier load.html depuis la page LXR ne fonctionnera pas, car LXR convertira le fichier test.xml en HTML et le servira en tant que tel. Pour tester cette fonctionnalité, créez les fichiers localement sur votre disque dur ou sur un serveur Web.

- -

Recommandations XML externes du W3C supportées

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Spécification ou technologieDocumentationProjet Mozilla
XSLTRecommandation W3C (traduction)XSLT
XQueryW3C Recommendation 
XPathRecommandation W3C (traduction)XSLT
XMLHttpRequestBrouillon du W3CXML Extras
DOMParser et XMLSerializerMozillaXML Extras
SAXhttp://www.saxproject.org/ 
SOAPNote du W3CServices Web
XML-RPCUserLand SoftwareXML-RPC
RDFRecommandations W3CRDF
SVGW3C Proposed RecommendationSVG
MathMLRecommandation W3C (traduction)MathML
P3PRecommandation W3C (traduction)P3P
WSDLW3C NoteServices Web
XBLRéférence de Mozilla XBL 
XULRéférence de Mozilla XUL 
- -

Feuille de route

- -

Parmi les prochains grands travaux dans ce domaine, citons le support du schéma XPointer xpointer() (bug 32832), d'XInclude (bug 201754), de XML Catalogs (bug 98413), de XForms (bug 97806 ; dont une implémentation sous forme d'extension est en cours de développement), de l'analyseur de validation (bug 196355), des schémas XML et du rendu incrémental d'un document XML (bug 18333).

- -

Pour implémenter complètement XLink, nous aurons besoin d'une fonction appelée gestionnaire de liens. Voir quelques uns des documents initiaux.

- -

Tests et assurance qualité

- -

La page d'Assurance Qualité recense un grand nombre de cas de test concernant la conformité aux standards du navigateur.

- -

Les documents de test ducore XML présents sur le serveur CVS sont répertoriés dans content/xml/tests. Deux d'entre-eux sont également disponibles en ligne : la démonstration d'un livre et une démonstration de sommaire de déclaration d'impôts (pour l'IRS américain). Chacun d'eux présente des exemples mettant en œuvre XML, son association avec des feuilles de styles, son affichage avec CSS, les espaces de noms XML, XHTML, des XLinks simples, et la manipulation de XML par des scripts via le DOM.

- -

Bugzilla possède un composant XML.

- -

Nous avons également le mot clef « xhtml » pour les bogues concernant XHTML (Ceux-ci tendent à être dispersé entre les divers composants).

- -

Comment aider ?

- -

Si vous savez coder, cherchez [le mot clef « helpwanted » parmi les bogues XML. Nous n'utilisons pas toujours ce moyen, donc si vous voulez donc éviter de faire un travail en double, vous pouvez commencer à travailler sur les bogues planifiés pour des évolutions futures, ou bien sur ceux qui sont déjà planifiés mais dans un avenir éloigné.

- -

Vous pouvez également tester notre support de XML. Nous aimeriez fortement avoir des tests automatiques (ceci nécessita de posséder des connaissances en développement Web ; document.load() et/ou XML Extras peuvent être nécessaire), mais la plupart des bogues ouverts l'ont été par des utilisateurs ordinaires essayant de faire quelque chose qui fonctionne dans d'autres navigateurs mais pas dans Mozilla.

- -

Interwikis Laguages Links

diff --git a/files/fr/xml_extras/index.html b/files/fr/xml_extras/index.html deleted file mode 100644 index 3ebfaaf2e6..0000000000 --- a/files/fr/xml_extras/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: XML Extras -slug: XML_Extras -tags: - - XML -translation_of: Mozilla/Tech/XML_Extras ---- -

-

Le module XML Extras contient différentes fonctionnalités permettant aux développeurs de traiter du XML comme des données, et pas seulement comme un format quelconque de document. Le module est structuré comme un composant intégré, et ses fonctions de traitement des données XML sont accessibles aux utilisateurs par du JavaScript et C++/XPCOM. Le module XML Extras est compilé par défaut pour toutes les plateformes, et il est inclus dans les programmes d'installation du navigateur, ce qui le rend disponible dans les compilations nocturnes. -

-

États des fonctionnalités

- - - - - - - - - - - - - - -
Fonctionnalité -État -
XMLSerializer -Disponible -
XMLHttpRequest -Disponible -
DOMParser (chaînes ou flux comme source entrante) -Disponible -
Services Web avec SOAP et WSDL -Disponible depuis 1.4alpha. Déplacé vers le module Services Web dans la 1.4beta. -
Persistance XML - -
FIXptr et XPointer -Disponible depuis 1.4alpha dans le noyau Mozilla. Déplacé vers XMLExtras dans la 1.4beta. -
-

Voir aussi : -

- -

Assurance Qualité et tests

-

Plusieurs tests en ligne expérimentent la méthode GET HTTP via XMLHttpRequest. -

D'autres exemples de tests pour chacun des composants listés ci-dessus sont disponibles dans extensions/xmlextras/tests/. Toutefois, une autre série d'exemples mérite d'être créée. Si vous voulez participer à cette démarche d'assurance qualité, voici la procédure à suivre : -

- -

Documentation

-

La manière la plus efficace pour apprendre à utiliser ces technologies est de travailler à partir d'exemples. Il y en a quelques uns dans extensions/xmlextras/tests/. Si vous suivez ce lien pour consultez les exemples, vous devriez aussi consulter le code source des documents HTML. -

Pour les objets XMLHttpRequest, vous pouvez le plus souvent vous référer à la documentation XMLHttpRequest de Microsoft, avec les mises en garde suivantes : toutes les noms de fonctions et de propriétés commencent par une minuscule, et la création de l'objet est différente. Certaines propriétés ne sont pas implémentées. -

Thad Hoffman a écrit un document montrant comment mimer du XML Data Islands dans Mozilla. Edmond Woychowsky a également écrit des articles sur le XML Data Islands dans Mozilla : "Make XML data islands work in Mozilla", "Build cross-browser XML paging code" et "Implement a flexible shopping cart with XML and ASP". Mozilla Developer Center dispose aussi de plusieurs pages sur XMLHttpRequest. -

Ci-dessous, voici les quelques différences majeures entre les logiciels Mozilla et Microsoft : -

- - - - - - - - - - - - - - -
Différence -Microsoft -Mozilla -
Noms des membres -Insensible à la casse ? -Débute par une minuscule -
Création de XMLHttpRequest -new ActiveXObject("Msxml2.XMLHTTP") -new XMLHttpRequest() -
XMLHttpRequest.send("du texte") -ok -ok, implémenté depuis le milestone 0.9.7 (précisément la nocturne du 28/11/2001). Avec les précédentes compilations, la transmission de chaînes dans send() ne fonctionnait que dans le chrome, voir l'exemple post.html. La « solution » est d'utiliser la méthode parseFromString() l'objet DOMParser pour créer un document depuis une chaîne de caractères, et de transmettre ce document temporaire dans send(). -
XMLHttpRequest.open("aHost") -ok -Des documents <tt>file://</tt> peuvent être ouverts depuis des documents <tt>http://</tt>, mais vous devez activer le privilège UniversalBrowserRead dans vos scripts - consultez le document JavaScript Security: Signed Scripts pour plus de détails. Normalement, vos fichiers doivent résider sur un serveur Web, donc cela ne devrait pas poser de problème (cette ligne devrait être inutile). De plus, « foo.com:80 » et « foo.com:313 » sont considérés comme des domaines différents pour des raisons de sécurité. Vous ne pouvez pas ouvrir une connexion vers un domaine différent. -
Création de DOMParser -non disponible -new DOMParser() -
Création de XMLSerializer -non disponible -new XMLSerializer() -
-

Une documentation minimale des composants listés ci-dessus est disponible avec la documentation de Mozilla en utilisant Doxygen. Remplissez des nouveaux bugs pour contribuer à de nouvelles documentations, soit spécifiquement dédiées aux développeurs JavaScript, ou soit en complétant les commentaires JavaDoc-style dans les fichiers IDL. -

- -

Veuillez consulter la section Lier et pointer dans le XML dans l'article XML dans Mozilla pour plus d'informations sur FIXptr et XPointer. -

-

Comment aider ?

- -

Interwiki Languages Links -

-
-
diff --git a/files/fr/xpcnativewrapper/index.html b/files/fr/xpcnativewrapper/index.html deleted file mode 100644 index 69a091407d..0000000000 --- a/files/fr/xpcnativewrapper/index.html +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: XPCNativeWrapper -slug: XPCNativeWrapper -tags: - - DOM - - Extensions - - Sécurité - - XPCNativeWrapper -translation_of: Mozilla/Tech/Xray_vision ---- -

-

XPCNativeWrapper permet d'emballer un objet pour qu'il soit sur d'y accéder depuis du code privilègié. Il peut être utilisé dans toutes les versions de Firefox, bien que son comportement ait été légèrement modifié depuis Firefox 1.5 (Gecko 1.8). Consultez les informations sur XPCNativeWrapper dans la base de connaissance de MozillaZine pour connaître le comportement de XPCNativeWrapper dans les versions de Firefox antérieures à 1.5. Ce document traite de XPCNativeWrapper dans Firefox 1.5 et postérieurs. -

-

À quoi sert XPCNativeWrapper

-

Un XPCNativeWrapper restreint l'accès aux propriétés et méthodes des objets qu'il enveloppe. Les seules propriétés et méthodes accessibles au travers du XPCNativeWrapper sont celles définies dans les IDL ou définies par le niveau 0 du DOM (bien que certaines propriétés et méthodes du niveau 0 du DOM ne fonctionnent pas sur un XPCNativeWrapper). En particulier, les propriétés ajoutées à un objet via JavaScript ne sont pas accessibles à travers un XPCNativeWrapper, pas plus que les accesseurs et mutateurs définis avec __defineGetter__ et __defineSetter__. L'objectif est de pouvoir accéder en toute sécurité aux méthodes d'un objet définies dans les IDL . -

Assurez-vous de lire la section concernant les bugs connus, en particulier si vous écrivez du code destiné à certaines versions de Firefox 1.5.0.x. -

-

Types de XPCNativeWrapper

-

Il existe trois types différents de XPCNativeWrapper dans Firefox 1.5. Chacun enveloppe un objet potentiellement non sur et fournit un accès sécurisé à ses propriétés et méthodes. -

Les différences de comportement entre ces trois types sont déterminées par deux caractéristiques du XPCNativeWrapper. Un XPCNativeWrapper peut être explicite (ou par opposition, implicite) et peut être profond (ou par opposition, superficiel). Le type de l'emballage créé est déterminé par la façon dont il est créé, de la manière suivante : -

- - - - - - - - -
Créé par - Explicite/Implicite - Profond/Superficiel -
Un script protégé accédant à un objet non sécurisé - Implicite - Profond -
Appel du constructeur avec des paramètres - Explicite - Superficiel -
Appel du constructeur sans paramètre - Explicite - Profond -
-

Explicite/Implicite

-

La différence de comportement entre un XPCNativeWrapper explicite et un implicite est qu'un accès à une propriété d'un XPCNativeWrapper implicite depuis un script non protégé N'est PAS sûr. L'accès à la propriété sera transmis à travers l'objet wrappedJSObject du XPCNativeWrapper. -

Ainsi, les scripts qui ne sont pas protégés n'ont pas à se soucier de bogues dûs au fait qu'un autre bout de code leur passerait un XPCNativeWrapper implicite. D'un autre côté, de tels scripts doivent se méfier des accès à des objets non sûrs. -

Les accès aux propriétés d'un XPCNativeWrapper explicite sont sûrs, que le script appelant soit ou non protégé. -

-

Profond/Superficiel

-

La différence de comportement entre un XPCNativeWrapper profond et un superficiel est que, lors de l'accès à une propriété ou de l'appel d'une fonction sur un profond, la valeur renvoyée sera enveloppée dans son propre XPCNativeWrapper. Le nouvel XPCNativeWrapper sera également profond et sera explicite si et seulement si le XPCNativeWrapper dont la propriété est accédée était explicite. En revanche, l'accès à une propriété ou l'appel d'une fonction sur un emballage superficiel renverra une valeur qui peut être un objet non sûr. -

Par exemple, admettons que nous ayons trois instances de XPCNativeWrapper pour le même objet window. Appelons les deepExplicitWindow, deepImplicitWindow et shallowWindow. Nous avons alors : -

-
var doc1 = deepExplicitWindow.document;
-// doc1 est maintenant un XPCNativeWrapper profond et explicite
-// pour l'objet document. L'accès à doc1.open() est sûr.
-
-
var doc2 = deepImplicitWindow.document;
-// Si le code appelant est paramétré avec xpcnativewrappers=yes, doc2 est
-// un XPCNativeWrapper profond et implicite pour l'objet document.
-// Autrement, doc2 est un objet document non sécurisé, puisque les accès
-// aux propriétés sont simplement transmises à un objet non sécurisé.
-
-
var doc3 = shallowWindow.document;
-// doc3 est maintenant un objet document non sécurisé.
-
-

Création d'objets XPCNativeWrapper

-

Il existe trois manières différentes de créer un objet XPCNativeWrapper ; une pour chacun des trois types. -

-

Script protégé accédant à un objet non sécurisé

-

À chaque fois qu'un script protégé accède à un objet non sécurisé, il obtient en retour un XPCNativeWrapper implicite et profond. L'accès aux propriétés de ce XPCNativeWrapper depuis des scripts protégés est sécurisé. -

Un emballage créé de cette façon existera aussi longtemps que l'objet emballé, et accéder à cet objet deux fois de suite donnera le même XPCNativeWrapper. -

-
Qu'est-ce qu'un script protégé ?
-

Dans les versions de Firefox comprises entre la 1.5 et la 1.5.0.5, un script est protégé ou non selon son URI. Un script est protégé seulement si son URI commence par un préfixe protégé connu ; les scripts qui ne sont pas chargés par une URI (par exemple les composants implémentés en JavaScript) ne sont pas protégés. Les préfixes protégés dans Firefox 1.5 sont déterminés par le registre Chrome. -

Par défaut, tous les paquetages de contenu sont protégés. De ce fait, toutes les URI commençant par "<tt>chrome://<nom du paquetage>/content/</tt>" (quel que soit le paquetage) sont protégées. Des paquetages individuels peuvent contourner ce comportement par une option dans leur fichier manifeste chrome. -

À partir de Firefox 1.5.0.6, les composants implémentés depuis JavaScript sont des scripts protégés. Par conséquent, un script est protégé s'il est soit chargé depuis une URI débutant par un préfixe protégé, ou est un composant implémenté en JavaScript. -

-
Qu'est-ce qu'un objet non sécurisé ?
-

Tous les objets sont soit sécurisés, soit non sécurisés. Un objet est sécurisé si une au moins de ces trois conditions est remplie : -

-
  1. son parent (propriété __parent__ en JavaScript) est un objet sécurisé. -
  2. il est l'objet de visibilité racine d'un composant JavaScript. -
  3. il s'agit de l'objet window d'une fenêtre sécurisée. -
-

Puisque tous les objets DOM d'une fenêtre disposent de l'objet window dans leur chaîne d'objets __parent__, ils seront sécurisés si et seulement si la fenêtre dans lesquelle ils se trouvent l'est. -

-
Qu'est-ce qu'une fenêtre sécurisée ?
-

Une fenêtre est sécurisée ou pas suivant son conteneur. Une fenêtre est sécurisée si une des conditions suivantes est remplie : -

-
  1. Il s'agit d'une fenêtre de premier niveau (comme <xul:window>, <xul:dialog>, ou une URI quelconque passée en ligne de commande avec l'option <tt>-chrome</tt>). -
  2. Son parent est sécurisé, et une de ces trois options est valable : -
    1. Elle n'est pas chargée dans un <xul:iframe> ou <xul:browser>. -
    2. Elle est chargée dans un <xul:iframe> ou <xul:browser> ne possédant pas d'attribut « type ». -
    3. Elle est chargée dans un <xul:iframe> ou <xul:browser> dont la valeur de l'attribut « type » n'est pas « content » ni ne débute par « content- ». -
    -
-

Notez que le fait qu'une fenêtre soit sécurisée ne dépend pas de l'URI chargée dans la fenêtre. Par conséquent, les exemples suivants créeront des fenêtres sécurisées s'ils sont utilisés à l'intérieur d'un document dont la fenêtre est déjà sécurisée : -

- -

Ce qui suit ne crée pas de fenêtres sécurisées : -

- -

Notez de même que toutes les fenêtres filles d'une fenêtre non sécurisée sont automatiquement non sécurisées. -

-
Que se passe-t-il lorsqu'un script accède à un objet ?
-

Le tableau ci-dessous décrit ce qui se produit lorsqu'un script accède à un objet et comment l'emballage est impliqué. -

- - - - - - - - - - -
Script - Objet - Effets -
Protégé Sécurisé Aucun emballage n'est créé et par conséquent le script obtient un accès complet à l'objet. -
Protégé Sécurisé Un XPCNativeWrapper implicite et profond est créé. -
Non protégé Sécurisé Aucun emballage n'est créé, exactement comme dans le cas protégé/sécurisé. -
Non protégé Non sécurisé Aucun emballage n'est créé, exactement comme dans le cas protégé/sécurisé. -
-

Appel du constructeur XPCNativeWrapper avec des paramètres

-

Par exemple : -

-
var contentWinWrapper = new XPCNativeWrapper(content,
-                                             "document");
-
-

Cette ligne va créer un XPCNativeWrapper explicite et superficiel. Cette syntaxe a été conservée pour la compatibilité avec les versions antérieures à Firefox 1.5. Bien que toutes les propriétés de l'objet contentWinWrapper sont sécurisées, les valeurs renvoyées par ces propriétés NE le sont PAS (comme dans les versions antérieures à Firefox 1.5), puisque XPCNativeWrapper est superficiel. Donc pour comparer le titre du document courant à la sélection de contenu actuelle, il faut procéder ainsi : -

-
var winWrapper = new XPCNativeWrapper(content, "document",
-                                      "getSelection()");
-var docWrapper = new XPCNativeWrapper(winWrapper.document,
-                                      "title");
-return docWrapper.title == winWrapper.getSelection();
-
-

de la même manière qu'avec les versions antérieures à Firefox 1.5. Notez que l'argument "getSelection()" n'est pas strictement nécessaire ici ; si le code n'est pas destiné à être utilisé avec des versions antérieures à Firefox 1.5, il peut être supprimé. Un seul argument après l'objet emballé est nécessaire à Firefox 1.5 pour créer ce type de XPCNativeWrapper. -

-

Appel du constructeur XPCNativeWrapper sans paramètre

-

Par exemple : -

-
var contentWinWrapper = new XPCNativeWrapper(content);
-
-

Cette ligne va créer un XPCNativeWrapper explicite et profond. L'accès aux propriétés de ce XPCNativeWrapper est sécurisé, et les valeurs renvoyées seront également emballées dans des objets XPCNativeWrapper explicites et profonds. -

-

Définition de propriétés "expando" sur XPCNativeWrapper

-

Il est possible de définir des propriétés "expando" (des propriétés dont les noms ne correspondent à aucune propriété IDL) sur des objets XPCNativeWrapper. En procédant ainsi, le chrome sera capable de voir ces propriétés expando, mais le contenu ne pourra pas. Il n'existe pas de manière sécurisée de définir une propriété expando depuis le chrome et de la rendre accessible depuis le contenu. -

-

Durée de vie d'un XPCNativeWrapper

-

Les objets XPCNativeWrapper explicites existent tant qu'ils sont référencés. Créé un nouvel XPCNativeWrapper explicite pour le même objet potentiellement non sécurisé créera un nouvel emballage ; c'est une chose à surveiller lors de la définition de propriétés "expando". -

Les objets XPCNativeWrapper implicites ont la même durée de vie que les objets qu'ils emballent. -

-

Accès aux propriétés non sécurisées

-

Si un accès non sécurisé à une propriété est nécessaire pour une raison précise, il suffit d'employer la propriété wrappedJSObject de l'emballage. Par exemple, si docWrapper est l'emballage de doc, alors -

-
docWrapper.wrappedJSObject.prop
-
-

est identique à

-
doc.prop
-
-

Bogues connus

-

Il existe deux bogues de XPCNativeWrapper connus dans les versions 1.5.0.x : -

-
  1. Le {{ Bug(337095) }} concerne les versions de Firefox de 1.5 à 1.5.0.4 et empêche la création de l'emballage pour des scripts protégés dans certains cas. En particulier, si un script accède à une propriété ou appelle une fonction qui retourne un objet non sécurisé, un emballage est créé. Cependant, si une fonction dans un script protégé est appellée depuis C++ et qu'un objet non sécurisé est passé en tant qu'argument à cette fonction, l'emballage ne sera pas créé. Les fonctions qui souhaitent être appellées de cette manière doivent réaliser leur propre emballage. Ce bogue est résolu dans Firefox 1.5.0.5 et supérieurs. -
  2. Le {{ Bug(345991) }} concerne les versions de Firefox de 1.5 à 1.5.0.5 et empêche les composants écrits en JavaScript d'être des scripts protégés. Ce bogue est résolu dans Firefox 1.5.0.6 et supérieurs. -
-

Limitations de XPCNativeWrapper

-

Il existe certaines propriétés couramment utilisées et certains styles de programmation qui ne peuvent pas être employés avec XPCNativeWrapper. En particulier : -

-
  1. L'assignation ou la lecture d'une propriété on* sur un XPCNativeWrapper d'un noeud DOM ou d'un objet Window va générer une exception. (Utilisez plutôt addEventListener, et utilisez "event.preventDefault();" dans votre gestionnaire si vous utilisiez "return false;" auparavant.) -
  2. L'accès aux cadres par le nom de la fenêtre (par ex window.frameName) ne fonctionne pas sur un XPCNativeWrapper. -
  3. document.all ne fonctionne pas avec le XPCNativeWrapper d'un document. -
  4. L'accès aux items nommés par leurs noms ne fonctionne pas sur le XPCNativeWrapper d'un document HTML. Par exemple, si vous avez <form name="foo"> et que docWrapper est l'emballage du document HTML doc, alors doc.foo sera un HTMLFormElement tandis que docWrapper.foo sera undefined. Vous pouvez utiliser à la place docWrapper.forms.namedItem("foo") dans votre code. -
  5. L'accès aux noeuds par leurs id ne fonctionne pas sur le XPCNativeWrapper d'un document HTML. getElementById doit être utilisé à la place. -
  6. L'accès aux champs de saisie par leurs noms ne fonctionne pas sur le XPCNativeWrapper d'un formulaire HTML. Le code requis à la place est le suivant : form.elements.namedItem("inputname"). -
  7. L'accès aux éléments par leurs noms ne fonctionne pas sur le XPCNativeWrapper d'un HTMLCollection. Il est nécessaire d'utiliser la méthode namedItem(). Notez que namedItem renvoie uniquement le premier élément input de ce nom, même s'il en existe plusieurs (par exemple pour des boutons radio) au sein du formulaire. -
  8. L'appel de méthodes implémentées par des plugins NPAPI à travers le XPCNativeWrapper pour le nœud correspondant ne fonctionne pas. -
  9. La lecture ou l'affectation de propriétés implémentées par des plugins NPAPI à travers le XPCNativeWrapper pour le nœud correspondant ne fonctionne pas. -
  10. L'appel de méthodes implémentées via des liaisons XBL attachées à un nœud à travers le XPCNativeWrapper pour ce ce nœud ne fonctionne pas. -
  11. La lecture ou l'affectation de propriétés implémentées via des liaisons XBL à travers le XPCNativeWrapper pour le nœud correspondant ne fonctionne pas. -
  12. L'énumération des propriétés d'un XPCNativeWrapper via "for (var p in wrapper)" ne permet de récupérer les propriétés définies dans les IDL. -
  13. Object.prototype ne correspond pas à la chaîne de prototype d'un XPCNativeWrapper. Comme résultat, plusieurs propriétés Objet.prototype sont indéfinies sur un XPCNativeWrapper (pour être précis, ce sont __proto__, __parent__, __count__, toSource, toLocaleString, valueOf, watch, unwatch, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, __defineGetter__, __defineSetter__, __lookupGetter__, et __lookupSetter__). -
  14. La méthode importXPCNative que l'ancienne implémentation XPCNativeWrapper utilisait n'est plus gérée. -
  15. L'accès aux classes standard (comme Function) au travers d'un XPCNativeWrapper ne fonctionnera pas. Pour créer des fonctions et objets avec une fenêtre particulière comme parent, utilisez la fonction eval de cette fenêtre. -
-

L'article Avoid Common Pitfalls in Greasemonkey propose une explication élaborée de certaines de ces limitations (dans le contexte de scripts Greasemonkey). -


-

-
-
-{{ languages( { "en": "en/XPCNativeWrapper", "es": "es/XPCNativeWrapper", "it": "it/XPCNativeWrapper", "ja": "ja/XPCNativeWrapper", "pl": "pl/XPCNativeWrapper" } ) }} diff --git a/files/fr/xpcom/index.html b/files/fr/xpcom/index.html deleted file mode 100644 index 725d74e85c..0000000000 --- a/files/fr/xpcom/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: XPCOM -slug: XPCOM -tags: - - XPCOM -translation_of: Mozilla/Tech/XPCOM ---- -
-

WebExtensions are becoming the new standard for creating add-ons. Eventually support for XPCOM add-ons will be deprecated, so you should begin to investigate porting your add-ons to use the WebExtensions API, and report any missing functionality so we can be sure to address your concerns. Work is ongoing on WebExtension capabilities, so your input will help prioritize and plan the work. To learn more about the kinds of changes that will be needed, see Comparison with XUL/XPCOM extensions. In addition, any binaries you use will then need to be converted for use with the WebExtensions native messaging API, or compiled using WebAssembly or Emscripten.

-
- - -
Une introduction à XPCOM - -

Un tutoriel en cinq parties par IBM developerWorks : Partie I, Partie II, Partie III, Partie IV, Partie V

-
- -
XPCOM est un modèle objet simple de composants multiplateformes, similaire au COM de Microsoft. Il possède des liaisons vers plusieurs langages permettant que les composants XPCOM soient utilisés et implémentes en JavaScript, Java et Python en complément du C++. Les interfaces en XPCOM sont définies dans un dialecte IDL appelé XPIDL. - -

XPCOM fournit lui même une série de composants et classes de base, par exemple la gestion des fichiers et de la mémoire, des tâches, des structures de données basiques (chaînes, tableaux, variants), etc. La majorité des composants XPCOM ne fait pas partie de cette série de base et est fournie par d'autres parties de la plateforme (par exemple Gecko ou Necko) ou par une application, ou même par une extension.

-
- -

 

- - - - - - - - -
-

Documentation

- -
Documentation des XPCOM de base
- -
-
Référence de l'API XPCOM
-
Documentation des composants, interfaces et fonctions de base fournis par XPCOM. (à traduire de XPCOM API Reference)
-
- -
-
Guides sur les chaînes, hashtable, et tableaux
-
Utilisation des structures de données de base. (à traduire de String, hashtable, et array)
-
- -
-
XPCOM Glue
-
Le XPCOM Glue permet l'utilisation des fonctions et classes XPOM utiles sans avoir de dépendences vers des parties non stabilisées d'XPCOM (xpcom_core.{dll,so,dylib}) (à traduire de en:XPCOM Glue).
-
- -
Création de composants XPCOM
- -
-
Création de composants XPCOM
-
Ce livre fournit un tutorial concernant la construction d'un composant XPCOM contrôlant le comportement de la navigation (à traduire de Creating XPCOM Components).
-
- -
-
Construction d'un composant XPCOM en JavaScript
-
Guide de démarrage rapide pour l'écriture de composants JavaScript. (à traduire en:How to Build an XPCOM Component in Javascript
-
- -
Divers
- -
-
Utilisation d'XPCOM en JavaScript sans dégradation de la mémoire
-
L'utilisation de XPCOM dans JavaScript (que l'on appelle aussi XPConnect) est un environnement dans lequel les problèmes de gestion de la mémoire ne sont pas évidents. En dépit de cela, il est facile d'écrire du code JavaScript qui dégrade la mémoire parce que certains objets que vous manipulez ont leur référencement comptabilisé en arrière plan. (à traduire de en:Using XPCOM in JavaScript without leaking)
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Groupe dev-tech-xpcom
  • -
- -

- -

Outils

- -

JavaScript Component Wizard, Visual C++ Component Wizard

- -

Sujets liés

- -
-
Liaisons de langage, JavaXPCOM, XPConnect, PlXPCOM, PyXPCOM, RbXPCOM, JavaScript
-
-
diff --git a/files/fr/xpcom/liaisons_de_langage/components.exception/index.html b/files/fr/xpcom/liaisons_de_langage/components.exception/index.html deleted file mode 100644 index e50af52389..0000000000 --- a/files/fr/xpcom/liaisons_de_langage/components.exception/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Components.Exception -slug: XPCOM/Liaisons_de_langage/Components.Exception -translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.Exception ---- -

Résumé

- -

Components.Exception est un constructeur JavaScript pour créer des objets nsIXPCException. Ces objets exceptions peuvent être émis lors de l'implémentation des interfaces XPCOM en JavaScript, et ils peuvent fournir de meilleurs diagnostics dans la console d'erreur que la simplement valeur nsresult.

- -

Voir aussi nsIXPCException.

- -

Syntaxe

- -
var exception = [ new ] Components.Exception([ message [, result [, stack [, data ] ] ] ]);
-
- -

Paramètres

- -
-
message
-
Une chaîne qui peut être affiché dans la console d'erreur lorsque votre exception.
-
result 
-
La valeur nsresult de l'exception, qui par défaut est Components.results.NS_ERROR_FAILURE.
-
stack 
-
Une pile XPCOM réglée sur l'exception (par défaut à la chaîne de la pile en cours).
-
data 
-
toutes les données supplémentaires que vous pouvez stocker, par défaut null.
-
- -

Exemple

- -
throw Components.Exception("I am throwing an Exception from a Javascript XPCOM component.");
-
- -

diff --git a/files/fr/xpcom/liaisons_de_langage/components.id/index.html b/files/fr/xpcom/liaisons_de_langage/components.id/index.html deleted file mode 100644 index 6b9fd7c7cb..0000000000 --- a/files/fr/xpcom/liaisons_de_langage/components.id/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Components.ID -slug: XPCOM/Liaisons_de_langage/Components.ID -translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.ID ---- -

Résumé

- -

Components.ID est un constructeur qui crée des objets natifs qui sont conformes à l'interface nsIJSID.

- -

Syntaxe

- -
var interfaceID = [ new ] Components.ID(iid);
-
- -

Paramètres

- -
-
iid
-
Une chaîne de format '{00000000-0000-0000-0000-000000000000}' donnant l'ID de l'interface
-
- -

Description

- -

Components.ID crée des interfaceID pour une utilisation dans la mise en œuvre des méthodes telles que QueryInterface, getInterfaces, et d'autres méthodes qui prennent des ID d'interface en tant que paramètres.Components.classes , Components.classes, Components.classesByID fournissent à peu près tous les nsIDs qu'a besoin JavaScript. L'exception à cette règle est le cas où un composant est écrit en JavaScript et doit s'inscrire lui-même avec le gestionnaire de composant en utilisant son propre nsID - ID qui ne soit pas déjà enregistré et donc ne figure pas dans Components.classes.

- -

diff --git a/files/fr/xpcom/liaisons_de_langage/index.html b/files/fr/xpcom/liaisons_de_langage/index.html deleted file mode 100644 index 71537a6b7c..0000000000 --- a/files/fr/xpcom/liaisons_de_langage/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Liaisons de langage -slug: XPCOM/Liaisons_de_langage -tags: - - XPCOM - - 'XPCOM:Liaisons_de_langage' -translation_of: Mozilla/Tech/XPCOM/Language_Bindings ---- -
-

Une Liaison de langage XPCOM est une passerelle entre un langage donné et XPCOM en vue d'atteindre deux objectifs :  

- - - -

Puisque la couche XPCOM est écrite en C/C++, son API peut être employée sans intermédiaire avec les langages C et C++. Pour tous les autres langages désirant accéder à l'API XPCOM, l'utilisation d'une passerelle est nécessaire.

- -

 De telles passerelles existent pour différents langages :

- -

-
Components.classes
Components.classes est un objet en lecture seule dont les propriétés sont des classes indexées par ContractID. Sespropriétés mettre en œuvre l'interface nsIJSCID. Chaque objet représente l'une des classes de XPCOM qui peuvent être construits ou accessibles en tant que service XPCOM.
Components.Constructor
Crée une fonction JavaScript qui peut être utilisé pour construire de nouvelles instances de composants XPCOM.
Components.Exception
Components.Exception est un constructeur JavaScript pour créer des objets nsIXPCException. Ces objets exceptions peuvent être émis lors de l'implémentation des interfaces XPCOM en JavaScript, et ils peuvent fournir de meilleurs diagnostics dans la console d'erreur que la simplement valeur nsresult.
Components.ID
Components.ID est un constructeur qui crée des objets natifs qui sont conformes à l'interface nsIJSID.
Components.utils
Components.utils est une collection de diverses fonctionnalités utiles à XPConnect. Son interface est définie dans js/xpconnect/idl/xpccomponents.idl. Cet objet a actuellement les membres suivants :
Components.utils.evalInSandbox
Il peut arriver que vous vouliez exécuter du code JavaScript avec des droits restreints. Depuis Firefox 1.5 (Gecko 1.8) vous pouvez faire cela en utilisant une API qui permet la création de "bacs à sables" à l'intérieur desquels le code sera interprété avec des droits restreints, comme le code exécuté dans une page web.
-
Components.utils.import
Components.utils.reportError
JavaXPCOM
Objet Components
L'objet Components est l'objet au travers duquel les fonctionnalités XPConnect sont reflétées en JavaScript. Il s'agit en réalité d'une instance native de l'interface nsIXPCComponents qui est reflétée en JavaScript comme un objet de niveau global à l'aide d'XPConnect.
Objet Components
L'objet Components est l'objet au travers duquel les fonctionnalités XPConnect sont reflétées en JavaScript. Il s'agit en réalité d'une instance native de l'interface nsIXPCComponents qui est reflétée en JavaScript comme un objet de niveau global à l'aide d'XPConnect.
PyXPCOM
PyXPCOM permet la communication entre Python et XPCOM de telle façon qu'une application Python puisse accéder à des objets XPCOM, et que XPCOM puisse accéder à des classes Python qui implémentent une interface XPCOM. PyXPCOM est utilisé dans ActiveState Komodo, par exemple.
-

- -
-
-
-
Components.classesByID
-
Components.classesByID is a read-only object whose properties are classes indexed by CID.
-
Components.interfaces
-
Components.interfaces is a read-only object whose properties are interfaces indexed by their names.
-
Components.interfacesByID
-
Components.interfacesByID is a read-only array of classes indexed by IID.
-
Components.isSuccessCode
-
Determines whether a given XPCOM return code (that is, an nsresult value) indicates the success or failure of an operation, returning true or false respectively.
-
Components.lastResult
-
 
-
Components.manager
-
 
-
Components.results
-
Components.results is a read-only object whose properties are the names listed as the first parameters of the macros in js/xpconnect/src/xpc.msg (also at Table Of Errors), with the value of each corresponding to that constant's value.
-
Components.returnCode
-
 
-
Components.stack
-
Components.stack is a read only property of type nsIStackFrame (IDL definition) that represents a snapshot of the current JavaScript callstack. This can be used for various diagnostic purposes.
-
Components.utils
-
Components.utils is a collection of various useful XPConnect features. Its interface is defined at js/xpconnect/idl/xpccomponents.idl.
-
Components.utils.Sandbox
-
Components.utils.Sandbox is used to create a sandbox object for use with evalInSandbox().
-
Components.utils.cloneInto
-
This function provides a safe way to take an object defined in a privileged scope and create a structured clone of it in a less-privileged scope. It returns a reference to the clone:
-
Components.utils.createObjectIn
-
Components.utils.createObjectIn creates a new JavaScript object in the scope of the specified object's compartment.
-
Components.utils.evalInSandbox
-
The evalInSandbox() function enables you to evaluate JavaScript code inside a sandbox you've previously created using the Components.utils.Sandbox constructor.
-
Components.utils.evalInWindow
-
This function enables code running in a more-privileged JavaScript context to evaluate a string in a less-privileged JavaScript context. The result is structured cloned back to the original context, unless it is native (for example, if it returns a DOM node, this is not structured cloned, because the original context will see that through an XrayWrapper already), so it's guaranteed to behave predictably.
-
- This is useful for privileged code, such as add-on code, to access variables and APIs defined in web content.
-
Components.utils.exportFunction
-
This function provides a safe way to expose a function from a privileged scope to a less-privileged scope. In this way privileged code, such as an add-on, can share code with less-privileged code like a normal web page script. A function exported from privileged to less-privileged code can be called from the less privileged code's context.
-
Components.utils.forceGC
-
Components.utils.forceGC lets scripts force a garbage collection cycle. The Mozilla JavaScript engine will perform garbage collection automatically when the JavaScript heap grows beyond a certain size. This mechanism doesn't account for any native (C++) XPCOM objects hanging off JavaScript objects though. In many cases a JavaScript application will have internal knowledge of JavaScript objects referencing large (trees of) XPCOM objects and know when they are no longer reachable. In this case it can be important to be able to force a garbage collection cycle from JavaScript.
-
- -
-
-
- -
-
-
Components.utils.getGlobalForObject
-
This method is used to determine the global object with which an object is associated. This is the global object in place at the time the object was created, which is to say the global object used when executing the script that created the object.
-
Components.utils.getWeakReference
-
This method was introduced in Firefox 3 and is used for obtaining a weak reference for an object. To obtain the object reference, you have to call get() on the resulting object.
-
Components.utils.import
-
Components.utils.import was introduced in Firefox 3 and is used for sharing code between different scopes easily. For example, you can import XPCOMUtils.jsm to avoid copy/pasting long XPCOM component registration boilerplate in your component files.
-
Components.utils.importGlobalProperties
-
Imports various objects into a system scope.
-
Components.utils.isXrayWrapper
-
When privileged JavaScript in Gecko accesses objects belonging to less-privileged code (such as untrusted web content), it does so, by default, with "Xray vision": a mechanism that filters out certain changes to the objects that could cause them to behave in unexpected ways. For example, privileged code using an Xray to a DOM object sees only  the original, native version of the DOM object. Any expando properties are not visible, and if any native properties have been redefined, this has no effect.
-
Components.utils.makeObjectPropsNormal
-
Ensures that the specified object's methods are all in the object's scope, and aren't cross-component wrappers.
-
Components.utils.reportError
-
Components.utils.reportError reports a JavaScript Error object to the Error Console, and returns. It is meant for use by extension developers who have exception handler blocks which want to "eat" an exception, but still want to report it to the console.
-
Components.utils.schedulePreciseGC
-
This method lets scripts schedule a garbage collection cycle. The garbage collection cycle will occur sometime in the future, when no JavaScript code is executing. This is useful particularly when testing for memory leaks, because normal garbage collection is conservative when JavaScript code is running to ensure that in-use memory isn't inadvertently collected.
-
Components.utils.setGCZeal
-
This method lets scripts set the zeal level for garbage collection. You can get details on what this method does in JS_SetGCZeal. This method calls through to that thusly:
-
Components.utils.unload
-
Components.utils.unload was introduced in Firefox 7 and is used to unload JavaScript code modules. This can be particularly handy with restartless (boostrapped) extensions, so that you can unload an old version of a code module when a new version of your add-on is installed.
-
Components.utils.unwaiveXrays
-
Undo a previous call to Components.utils.waiveXrays(), restoring Xray vision for the caller.
-
Components.utils.waiveXrays
-
Waives Xray vision for an object, giving the caller a transparent wrapper to the underlying object.
-
JavaXPCOM
-
JavaXPCOM allows for communication between Java and XPCOM, such that a Java application can access XPCOM objects, and XPCOM can access any Java class that implements an XPCOM interface. JavaXPCOM is not actively maintained.
-
PlXPCOM
-
plXPCOM (Perl XPCOM) provides language bindings letting you use XPCOM from Perl code. The resources here provide information about this language binding and how to use it.
-
RbXPCOM
-
RbXPCOM (Ruby Cross-Platform COM) provides bindings between the popular Ruby programming language and XPCOM. You can find additional information using the resource links below.
-
XPConnect
-
XPConnect is a bridge between JavaScript and XPCOM. With XPConnect, you can use XPCOM components from JavaScript code, and interact with JavaScript objects from within XPCOM components. XPConnect is part of Firefox and is actively used in XUL applications.
-
-
-
-
diff --git a/files/fr/xpcom/reference/core_functions/index.html b/files/fr/xpcom/reference/core_functions/index.html deleted file mode 100644 index bab6e4dd8b..0000000000 --- a/files/fr/xpcom/reference/core_functions/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Core XPCOM functions -slug: XPCOM/Reference/Core_functions -translation_of: Mozilla/Tech/XPCOM/Reference/Core_functions ---- -

XPCOM fournit un certain nombre de fonctions globales qui sont utilisées pour initialiser et arrêter la bibliothèque XPCOM, allouer de la mémoire, avoir accès aux services, et instancier les interfaces.

- -

There are no subpages at this time.

diff --git a/files/fr/xpcom/reference/index.html b/files/fr/xpcom/reference/index.html deleted file mode 100644 index 5c659f9f32..0000000000 --- a/files/fr/xpcom/reference/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Référence XPCOM -slug: XPCOM/Reference -translation_of: Mozilla/Tech/XPCOM/Reference ---- -

Cette référence décrit les interfaces et les fonctions fournies par la bibliothèque XPCOM. En outre, elle détaille les différentes classes et fonctions d'assistance, ainsi que les composants fournis par la bibliothèque XPCOM glue. Actuellement, les contenus sont orientés principalement vers le développement d'extensions et l'encapsulation d'XPCOM dans d'autres projets.

- -
-

Note: Si vous travaillez sur un module de code Mozilla qui est compilé avec MOZILLA_INTERNAL_API, certaines de ces API -- les fonctions de chaîne et les classes en particulier -- ne sont pas ceux que vous devriez utiliser. Voir la XPCOM internal string guide pour la documentation de l'internal string API utilisé dans le code de base de Mozilla.

-
- -

-
Core XPCOM functions
XPCOM fournit un certain nombre de fonctions globales qui sont utilisées pour initialiser et arrêter la bibliothèque XPCOM, allouer de la mémoire, avoir accès aux services, et instancier les interfaces.
Interfaces XPCOM par groupe
Cette page présente l'actuel (à partir de 1 décembre 2010) liste des interfaces de Mozilla comme indiqué sur Page d'interface XPCOM de référence qui répertorie les éléments par ordre alphabétique, cette page est une tentatives de les regrouper par fonction. Noms de Regroupement et de catégorie ont été faites par décision quelque peu arbitraire.
-
Référence des interfaces XPCOM
Cette page référence l'ensemble des interfaces XPCOM fournies par Mozilla.
Standard XPCOM components
Il ya un certain nombre de composants fournis dans la mise en œuvre de la norme XPCOM; ceux-ci sont comme suit.
-

- -

 

- -

Beaucoup de pages XPCOM renvoient un nsresult. Avant Gecko 19 (Firefox 19 / Thunderbird 19 / SeaMonkey 2.16), le code d'erreur était un entier. Il est maintenant un type enum quand XPCOM est construit en utilisant un compilateur C++11. Cela provoque des erreurs de compilation lorsque des valeurs nsresult incorrectes sont retournés, ce qui rend plus facile le débogage.

diff --git a/files/fr/xpcom/reference/reference_by_grouping/index.html b/files/fr/xpcom/reference/reference_by_grouping/index.html deleted file mode 100644 index aecdfdafbb..0000000000 --- a/files/fr/xpcom/reference/reference_by_grouping/index.html +++ /dev/null @@ -1,981 +0,0 @@ ---- -title: Interfaces XPCOM par groupe -slug: XPCOM/Reference/Reference_by_grouping -translation_of: Mozilla/Tech/XPCOM/Reference/Reference_by_grouping ---- -

Utilisation de ce guide

- -

Cette page présente l'actuel (à partir de 1 décembre 2010) liste des interfaces de Mozilla comme indiqué sur Page d'interface XPCOM de référence qui répertorie les éléments par ordre alphabétique, cette page est une tentatives de les regrouper par fonction. Noms de Regroupement et de catégorie ont été faites par décision quelque peu arbitraire.

- -

Les sections principales sont:

- - - -
-

Browser

- -

Autocomplete

- - - -

Console

- - - -

Document

- - - -

DOM

- -

Device

- - - -

Element

- - - -

Event

- - - -

HTML

- - - -

Script

- - - -

StyleSheet

- - - -

URL

- - - -

Util

- - - -

XSLT

- - - -

Download

- - - -

Element

- -

Internal

- - - -

Tree

- - - -

Xform

- - - -

XMLHttpRequest

- - - -

FavIcon

- - - -

Frame

- - - -

Interface

- - - -

Jetpack

- - - -

offlineStorage

- - - -

Places

- - - -

RSS Feed

- - - -

script

- - - -

storage

- - - -

Util

- - - -

Worker

- - - -

Data

- - - -

DO NOT USE

- - - -

Future

- - - -

Obsolete

- - - -

Security

- - - -

System

- - - -

Thunderbird

- - - -

User

- - -
- -

 

diff --git a/files/fr/xpcom/setting_http_request_headers/index.html b/files/fr/xpcom/setting_http_request_headers/index.html deleted file mode 100644 index d9252a72a6..0000000000 --- a/files/fr/xpcom/setting_http_request_headers/index.html +++ /dev/null @@ -1,261 +0,0 @@ ---- -title: Setting HTTP request headers -slug: XPCOM/Setting_HTTP_request_headers -translation_of: Mozilla/Tech/XPCOM/Setting_HTTP_request_headers ---- -

Le protocole HTTP  est l'une des technologies les plus importantes du Web. Au-delà du contenu, d'autres informations importantes sont passées par l'intermédiaire des en-têtes HTTP à la fois pour les réponses et les requêtes.

- -

Vous pouvez ajouter vos propres en-têtes HTTP a n'importe laquelle des requêtes faites par votre application, que ce soit explicitement par une requête XMLHttpRequest ou bien par une balise "img" dans votre code ou même depuis le CSS

- -

HTTP Channels

- -

Le travail sur les requêtes et réponses HTTP se fait généralement par l'interface nsIHttpChannel. Cette dernière possède de nombreuses méthodes et propriétés pour le traitement des requêtes et réponse, dont setRequestHeader qui nous intérèsse plus particulièrement ici. Cette méthode nous permet en effet de définir un en-tête de requête HTTP.

- -

Ci-dessous, un exemple de définition d'en-tête 'X-Hello', valant 'World' :

- -
// adds "X-Hello: World" header to the request
-httpChannel.setRequestHeader("X-Hello", "World", false);
-
- -

Dans cet exemple, la variable httpChannel est un objet implémentant l'interface nsIHttpChannel. (Bien qu'on eut pu choisir de la nommer différemment)

- -

La méthode setRequestHeader prends 3 paramètres. Le premier comme vu dans l'exemple, est le nom de l'en-tête. Le second est la valeur associée à cet en-tête. Concernant le troisième paramètre, ignorez-le pour le moment et contentez-vous de le fixer à false.

- -
-

NOTE: Pour des en-têtes personnalisés comme dans l'exemple ci-dessus, vous devrez rajouter 'X-' au nom de vôtre en-tête.

- -


- Plus besoin aujourd'hui: http://tools.ietf.org/html/rfc6648

-
- -

Notifications

- -

La question qui pourrait vous venir à l'esprit en ce moment est, comment obtenez-vous nsIHttpChannel Lorsqu'une demande HTTP est effectuée.

- -

Dans le cas où votre code déclenche la demande, vous en avez déjà une. Le piégeage d'autres demandes se fait avec des notifications, qui ressemblent beaucoup à des événements ou des signaux trouvés dans d'autres langues et cadres.

- -

En particulier, pour obtenir le nsIHttpChannel juste avant que la requête HTTP ne soit faite, nous devons observer le sujet "http-on-modify-request". (Et oui, "http-on-modify-request" est une chaîne.)

- -
-

NOTE: Il existe de nombreux sujets, en plus simplement "http-on-modify-request", sur lequel vous pouvez recevoir des notifications, par exemple "http-on-examine-response" et "xpcom-shutdown". Vous pouvez également composer vos propres sujets et envoyer vos propres notifications.

- -

Pour plus d'informations sur le cadre de notifications et une liste de sujets de notification communs, voir Observer Notifications.

-
- -

Observers

- -

Pour être informé de certains sujets (comme "http-on-modify-request"), nous devons créer un observateur. Un observateur est un composant implémentant nsIObserver interface. Et une fois que l'observateur est inscrit pour un sujet, il sera informé du sujet en appelant sa méthode d'observation.

- -

Voici un exemple d'observateur qui ajoute un en-tête personnalisé "X-Hello" au canal transmis pour la notification http-on-modify-request:

- -
var {Cc, Ci} = require("chrome");
-var httpRequestObserver =
-{
-  observe: function(subject, topic, data)
-  {
-    if (topic == "http-on-modify-request") {
-      var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
-      httpChannel.setRequestHeader("X-Hello", "World", false);
-    }
-  }
-};
-
- -
NOTE: Le code ci-dessus a été modifié afin de refléter que dans un complément FireFox ne peut pas accéder directement à Components.interfaces und Components.classes mais doit utiliser la ligne requise présentée dans l'exemple de code ci-dessus. Donc, où vous voyez Ci et Cc dans cette page, il s'agissait d'Components.interfaces et Components.classes.
-Notez également que le code lui-même est habituellement enveloppé dans un hangar export.main = function () {...}.
- -

Notez que le nombre de paramètres que prend la méthode d'observation est important. Il faut 3 paramètres (comme nous l'avons montré dans le code d'exemple ci-dessus). Pour le sujet "http-on-modify-request", le premier paramètre (sujet nommé dans le code ci-dessus) sera le nsIHttpChannel. Cependant, il nous est transmis en tant que un nsISupports. Nous devons donc changer les nsISupports en un nsIHttpChannel qui est ce que fait l'appel QueryInterface. Et oui, la conversion d'objets d'un genre à l'autre est très moche et manque (ce qu'on appelle habituellement) de sucre syntaxique.

- -

La deuxième ligne de code dans le bloc if devrait déjà vous être familier. C'est le même code que nous avons utilisé avant, plus tôt dans cet article, pour ajouter l'en-tête de requête HTTP.

- -

Le nom ce object  -- httpRequestObserver -- n'est pas important. Vous pouvez le normé comme vous le souhaitez.

- -

Enregistrement

- -

Après avoir créé l'observateur, nous devons l'enregistrer. Dans notre cas, nous voulons l'enregistrer pour le sujet "http-on-modify-request". Nous pouvons le faire avec le code ci-dessous.

- -
var observerService = Cc["@mozilla.org/observer-service;1"]
-                                .getService(Ci.nsIObserverService);
-observerService.addObserver(httpRequestObserver, "http-on-modify-request", false);
-
- -

La première déclaration obtient l'objet qui nous permettra de nous inscrire à des sujets sur lesquels nous voulons être informés.

- -

La deuxième déclaration fait l'enregistrement réel. Nous disons que nous voulons que le serveur httpRequestObserver soit notifié (en appelant sa méthode d'observation) lorsqu'un sujet "http-on-modify-request" a lieu (ce qui nous arrive juste avant chaque demande HTTP).

- -

Unregistering

- -

You should unregister the observer on shutdown. Failing to do that may cause memory leaks. To unregister the observer use nsIObserverService.removeObserver as follows:

- -
observerService.removeObserver(httpRequestObserver, "http-on-modify-request");
- -

All-in-one example

- -

Here is a slightly different version of our httpRequestObserver object. While the previous version we showed before was good for learning, in an actual real-world application, you'd probably want to code it more like the following.

- -
var httpRequestObserver =
-{
-  observe: function(subject, topic, data)
-  {
-    if (topic == "http-on-modify-request") {
-      var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
-      httpChannel.setRequestHeader("X-Hello", "World", false);
-    }
-  },
-
-  get observerService() {
-    return Cc["@mozilla.org/observer-service;1"]
-                     .getService(Ci.nsIObserverService);
-  },
-
-  register: function()
-  {
-    this.observerService.addObserver(this, "http-on-modify-request", false);
-  },
-
-  unregister: function()
-  {
-    this.observerService.removeObserver(this, "http-on-modify-request");
-  }
-};
-
- -

This object has a convenience register() and unregister() methods, so in order to activate it you just need to call:

- -
httpRequestObserver.register();
-
- -

You should also remember to unregister the observer at shutdown:

- -
httpRequestObserver.unregister();
-
- -

And that's it.

- -

XPCOM components

- -

You need to register a single http-on-modify-request observer per application (and not one per window). This means that you should put the observer's implementation in an XPCOM component instead of an overlay. If you want to support Gecko2 (Firefox4) you need to register your javascript component as described here: https://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0#JavaScript_components.

- -
var headerName  = "X-hello";
-var headerValue = "world";
-
-function LOG(text)
-{
-    //    var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
-    //    consoleService.logStringMessage(text);
-}
-
-function myHTTPListener() { }
-
-myHTTPListener.prototype = {
-
-  observe: function(subject, topic, data)
-  {
-      if (topic == "http-on-modify-request") {
-
-          LOG("----------------------------> (" + subject + ") mod request");
-
-          var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
-          httpChannel.setRequestHeader(headerName, headerValue, false);
-          return;
-      }
-
-
-      if (topic == "profile-after-change") {
-
-          LOG("----------------------------> profile-after-change");
-
-          var os = Components.classes["@mozilla.org/observer-service;1"]
-                             .getService(Components.interfaces.nsIObserverService);
-
-          os.addObserver(this, "http-on-modify-request", false);
-          return;
-      }
-  },
-
-  QueryInterface: function (iid) {
-        if (iid.equals(Components.interfaces.nsIObserver) ||
-            iid.equals(Components.interfaces.nsISupports))
-            return this;
-
-        Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
-        return null;
-    },
-};
-
-var myModule = {
-    registerSelf: function (compMgr, fileSpec, location, type) {
-
-        var compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
-        compMgr.registerFactoryLocation(this.myCID,
-                                        this.myName,
-                                        this.myProgID,
-                                        fileSpec,
-                                        location,
-                                        type);
-
-
-          LOG("----------------------------> registerSelf");
-
-        var catMgr = Components.classes["@mozilla.org/categorymanager;1"].getService(Components.interfaces.nsICategoryManager);
-        catMgr.addCategoryEntry("app-startup", this.myName, this.myProgID, true, true);
-    },
-
-
-    getClassObject: function (compMgr, cid, iid) {
-
-          LOG("----------------------------> getClassObject");
-
-        return this.myFactory;
-    },
-
-    myCID: Components.ID("{9cf5f3df-2505-42dd-9094-c1631bd1be1c}"),
-
-    myProgID: "@dougt/myHTTPListener;1",
-
-    myName:   "Simple HTTP Listener",
-
-    myFactory: {
-        QueryInterface: function (aIID) {
-            if (!aIID.equals(Components.interfaces.nsISupports) &&
-                !aIID.equals(Components.interfaces.nsIFactory))
-                throw Components.results.NS_ERROR_NO_INTERFACE;
-            return this;
-        },
-
-        createInstance: function (outer, iid) {
-
-          LOG("----------------------------> createInstance");
-
-          return new myHTTPListener();
-        }
-    },
-
-    canUnload: function(compMgr) {
-        return true;
-    }
-};
-
-function NSGetModule(compMgr, fileSpec) {
-    return myModule;
-}
-
- -

Privacy and security good practice

- -

A use case for setting specific a HTTP request header is to have a specific web site be able to check if a specific plugin / addon / extension is installed.

- -

The good practice is not to have this specific HTTP header (for example "X-site.net-extension") sent all the time but only when doing requests with this specific web sites. By not advertising to all sites what extensions are installed this improves both privacy (this makes it harder to track a user known by his set of plugins, addons and extensions) and security (some plugins, addons and extensions may be known to have flaws by attackers).

- -

With this privacy and security addition the code to use becomes:

- -
observe: function(subject, topic, data)
- {
-   if (topic == "http-on-modify-request") {
-     var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
-     if (/site.net/.test(httpChannel.originalURI.host)) {
-          httpChannel.setRequestHeader("X-Hello", "World", false);
-     }
-   }
- },
-
diff --git a/files/fr/xpcom_interface_reference/index.html b/files/fr/xpcom_interface_reference/index.html deleted file mode 100644 index fb2c7a6c18..0000000000 --- a/files/fr/xpcom_interface_reference/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Référence des interfaces XPCOM -slug: XPCOM_Interface_Reference -tags: - - Référence des interfaces XPCOM - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Reference/Interface ---- -

Cette page référence l'ensemble des interfaces XPCOM fournies par Mozilla.

- -

- -

Voir aussi

- - diff --git a/files/fr/xpcom_interface_reference/mozistoragestatement/index.html b/files/fr/xpcom_interface_reference/mozistoragestatement/index.html deleted file mode 100644 index 8c48748b36..0000000000 --- a/files/fr/xpcom_interface_reference/mozistoragestatement/index.html +++ /dev/null @@ -1,568 +0,0 @@ ---- -title: mozIStorageStatement -slug: XPCOM_Interface_Reference/mozIStorageStatement -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/mozIStorageStatement ---- -

-
storage/public/mozIStorageStatement.idlScriptable
- - -Cette interface vous permet de créer et d'exécuter des instructions SQL sur une mozIStorageConnection. - - -
-Inherits from: mozIStorageValueArray -Last changed in Gecko 1.9.2 (Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)
-

- -

Pour une introduction sur la façon d'utiliser cette interface, voir  document storage.

- -

Aperçu des méthode

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void initialize(in mozIStorageConnection aDBConnection, in AUTF8String aSQLStatement); Obsolète depuis Gecko 1.9.1
void finalize();
mozIStorageStatement clone();
AUTF8String getParameterName(in unsigned long aParamIndex);
unsigned long getParameterIndex(in AUTF8String aName);
AUTF8String getColumnName(in unsigned long aColumnIndex);
unsigned long getColumnIndex(in AUTF8String aName);
void reset();
AString escapeStringForLIKE(in AString aValue, in wchar aEscapeChar);
void bindParameters(in mozIStorageBindingParamsArray aParameters);
mozIStorageBindingParamsArray newBindingParamsArray();
void bindUTF8StringParameter(in unsigned long aParamIndex, in AUTF8String aValue);
void bindStringParameter(in unsigned long aParamIndex, in AString aValue);
void bindDoubleParameter(in unsigned long aParamIndex, in double aValue);
void bindInt32Parameter(in unsigned long aParamIndex, in long aValue);
void bindInt64Parameter(in unsigned long aParamIndex, in long long aValue);
void bindNullParameter(in unsigned long aParamIndex);
void bindBlobParameter(in unsigned long aParamIndex, [array,const,size_is(aValueSize)] in octet aValue, in unsigned long aValueSize);
mozIStoragePendingStatement executeAsync(mozIStorageStatementCallback aCallback);
boolean executeStep();
boolean step();
void execute();
- -

Attributs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeTypeDescription
columnCountunsigned longNombre de colonnes retourné. Lecture seule.
parameterCountunsigned longNombre de paramètres. Lecture seule.
paramsmozIStorageStatementParamsLa liste des paramètres nommés, qui peut être demandés. Disponible uniquement pour le code JavaScript. Lecture seule.
rowmozIStorageStatementRowLa ligne en cours, avec un accès à tous les données par leurs nom. Disponible uniquement au code JavaScript. Lecture seule.
statelongL'état actuel défini par mozIStorageStatement.MOZ_STORAGE_STATEMENT_INVALID, mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, or mozIStorageStatement.MOZ_STORAGE_STATEMENT_EXECUTING. Lecture seule.
- -

Statement status constants

- - - - - - - - - - - - - - - - - - - - - - - - -
ConstantValueDescription
MOZ_STORAGE_STATEMENT_INVALID0L'instruction SQL est non valide.
MOZ_STORAGE_STATEMENT_READY1L'instruction SQL est prêt à être exécuté.
MOZ_STORAGE_STATEMENT_EXECUTING2L'instruction SQL est en cours d'exécution.
- -

Methods

- -

-

initialize()

- Obsolète depuis Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0) -

- -

Note :  Cette méthode a été supprimé pour Gecko 1.9.1. Pour initialiser une déclaration, les utilisateurs devraient appeler mozIStorageConnection.createStatement(). Cette méthode existe depuis Gecko 1.8.0.

- -

Initialisation une requête avec l'instruction SQL donnée.

- -
void initialize(
-  in mozIStorageConnection aDBConnection,
-  in AUTF8String aSQLStatement
-);
-
- -
Paramètres
- -
-
aDBConnection
-
Une mozIStorageConnection à une base de données.
-
aSQLStatement
-
Chaîne représentant l'instruction SQL.
-
- -

finalize()

- -

Finalise une déclaration qui libère toutes les ressources qui ont été allouées pour elle. Vous devez appeler cette méthode sur chaque instruction active avant d'appeler mozIStorageConnection.close().

- -
void finalize();
-
- -

Note : Cette méthode n'a pas besoin d'être utilisé par des utilisateurs locaux parce que vous devez libérer la déclaration avant d'arrêter. finalize sera appelé automatiquement lorsque le compteur de référence passe à zéro.

- -

clone()

- -

Crée une copie de la déclaration dont l'état sera mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY.

- -
mozIStorageStatement clone();
- -
Valeur de retour
- -

mozIStorageStatement est une copie de l'instruction en cours.

- -

getParameterName()

- -

Obtient le nom du paramètre pour l'index spécifié.

- -
AUTF8String getParameterName(
-  in unsigned long aParamIndex
-);
-
- -
Paramètres
- -
-
aParamIndex
-
-

L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).

-
-
- -
Valeur de retour
- -

Un AUTF8String représentant le nom de paramètre pour l'index spécifié.

- -

getParameterIndex()

- -

Obtient l'index du paramètre avec le nom spécifié. Cette méthode a été ajoutée en 1.9.0. En 1.8.1, il fallait utiliser getParameterIndexes(). Voir bug 388048 pour plus de détails.

- -
unsigned long getParameterIndex(
-  in AUTF8String aName
-);
-
- -
Paramètres
- -
-
aName
-
Nom du paramètre pour obtenir l'index. Pour le paramètre 'foo', le format de nom est ':foo' dans 1.9.0 et 1.9.1. dans 1.9.2 le ':' a été abandonnée et la valeur du nom doit être juste 'foo'. Voir bug 528166 pour plus de détails.
-
- -
Valeur de retour
- -

L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).

- -

getColumnName()

- -

Obtient le nom de la colonne pour l'index spécifié.

- -
AUTF8String getColumnName(
-  in unsigned long aColumnIndex
-);
-
- -
Paramètres
- -
-
aColumnIndex
-
-

L'indice numérique de base zéro de la colonne.

-
-
- -
Valeur de retour
- -

Un AUTF8String avec le du nom de la colonne pour l'index spécifié.

- -

getColumnIndex()

- -

Obtient l'index de la colonne avec le nom spécifié.

- -
unsigned long getColumnIndex(
-  in AUTF8String aName
-);
-
- -
Paramètres
- -
-
aName
-
Le nom de la colonne.
-
- -
Return value
- -

L'indice numérique de base zéro de la colonne.

- -

reset()

- -

Réinitialise les paramètres liés et l'état d'exécution de l'instruction. Doit être appelé avant de réutiliser la déclaration.

- -

Note : Les utilisateurs JavaScript doivent toujours envelopper leur exécution dans un bloc try, et une déclaration de remise à zéro dans un bloc finally.

- -

Voir le document de synthèse sur le stockag pour plus de détails.

- -
void reset()
-
- -

escapeStringForLIKE()

- -

Entre une chaîne pour une recherche SQL LIKE.

- -

Note : Les utilisateurs devront utiliser le même caractère d'échappement lorsque ils font des déclarations telles que: ...LIKE '?1' ESCAPE '/'.... Voir l'exemple de code pour plus de détails.

- -
AString escapeStringForLIKE(
-  in AString aValue,
-  in wchar aEscapeChar
-);
-
- -
Paramètres
- -
-
aValue
-
Chaîne d'enter pour SQL LIKE.
-
aEscapeChar
-
Le caractère d'échappement à utiliser. En général "/ " sera suffisant.
-
- -
Valeur de retour
- -

Une chaîne encodée UTF-16 qui a des caractères qui ont une signification particulière pour aValue.

- -
Sample Code
- -
var statement = dbConn.createStatement(
-  "SELECT * " +
-  "FROM table_name " +
-  "WHERE column_name LIKE :userInput ESCAPE '/'"
-);
-statement.params.userInput = statement.escapeStringForLIKE(someUserInput, "/");
- -

Fonctions de liaison

- -

Ces fonctions sont discutés plus en détail avec exemple de code dans Storage.

- -

newBindingParamsArray()

- -

Crée et retourne un nouvel mozIStorageBindingParamsArray objet qui peut être utilisé pour lier des valeurs multiples à des paramètres en cours de préparation pour appeler executeAsync().

- -
mozIStorageBindingParamsArray newBindingParamsArray();
-
- -
Paramètres
- -

Aucun.

- -

bindParameters()

- -

Relie tous les paramètres dans un tableau spécifié à la déclaration en préparation pour appeler executeAsync().

- -
Remarque: À partir de Gecko 2.0, cette méthode renvoie NS_ERROR_UNEXPECTED si mozIStorageBindingParamsArray est vide .
- -
void bindParameters(
-  in mozIStorageBindingParamsArray aParameters
-);
-
- -
Paramètres
- -
-
aParameters
-
L'objet mozIStorageBindingParamsArray contenant un ou plusieurs objets mozIStorageBindingParams contenant les paramètres liés à la déclaration avant l'exécution.
-
- -

bindUTF8StringParameter()

- -

Associe un UTF8String à l'index spécifié.

- -
void bindUTF8StringParameter(
-  in unsigned long aParamIndex,
-  in AUTF8String aValue
-);
-
- -
Paramètres
- -
-
aParamIndex
-
L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).
-
aValue
-
Valeur lié à l'index spécifié.
-
- -

bindStringParameter()

- -

Associe un paramètre de chaîne à l'index spécifié.

- -
void bindStringParameter(
-  in unsigned long aParamIndex,
-  in AString aValue
-);
-
- -
paramêtres
- -
-
aParamIndex
-
L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).
-
aValue
-
Valeur lié à l'index spécifié.
-
- -

bindDoubleParameter()

- -

Relie un réel double à l'index spécifié.

- -
void bindDoubleParameter(
-  in unsigned long aParamIndex,
-  in double aValue
-);
-
- -
Paramètres
- -
-
aParamIndex
-
L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).
-
aValue
-
Valeur lié à l'index spécifié.
-
- -

bindInt32Parameter()

- -

Associe un Int32 à l'index spécifié.

- -
void bindInt32Parameter(
-  in unsigned long aParamIndex,
-  in long aValue
-);
-
- -
Paramètres
- -
-
aParamIndex
-
L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).
-
aValue
-
Valeur lié à l'index spécifié.
-
- -

bindInt64Parameter()

- -

Associe un Int64 à l'index spécifié.

- -
void bindInt64Parameter(
-  in unsigned long aParamIndex,
-  in long long aValue
-);
-
- -
Paramètres
- -
-
aParamIndex
-
L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).
-
aValue
-
Valeur lié à l'index spécifié.
-
- -

bindNullParameter()

- -

Associe un paramètre null à l'index spécifié.

- -
void bindNullParameter(
-  in unsigned long aParamIndex
-);
-
- -
Paramètres
- -
-
aParamIndex
-
L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).
-
- -

bindBlobParameter()

- -

Associe un paramètre blob à l'index spécifié.

- -
void bindBlobParameter(
-  in unsigned long aParamIndex,
-  [array,const,size_is(aValueSize)] in octet aValue,
-  in unsigned long aValueSize
-);
-
- -
Parameters
- -
-
aParamIndex
-
L'index numérique de base zéro pour le paramètre appelé. Ce sera n-1 par rapport au nombre utilisé dans SQL (<code>?1</code> pour <code>0</code>,  et ainsi de suite).
-
aValue
-
Valeur lié à l'index spécifié.
-
aValueSize
-
Taille de aValue.
-
- -

Fonctions d'exécution

- -

Ces fonctions sont discutés plus en détail avec exemple de code dans overview document.

- -

executeAsync()

- -

Démarre l'exécution d'une requête asynchrone avec les paramètres liés. La routine de rappel facultative reçoit des notifications sur l'état d'avancement de la requête. Pour des exemples de code et plus de détails, voir Storage .

- -

Note : La déclaration n'a pas à être remis à zéro avant d'être réutilisés.

- -
mozIStoragePendingStatement executeAsync(
-  [optional] mozIStorageStatementCallback aCallback
-);
-
- -
Paramètres
- -
-
aCallback
-
Un objet de rappel qui sera informé des progrès, des erreurs, et de la fin de la requête. Ce paramètre est facultatif.
-
- -
Valeur de retour
- -

Un objet mozIStoragePendingStatement qui peut être utilisé pour annuler l'exécution de l'instruction.

- -

executeStep()

- -

Exécute une requête synchrone avec les paramètres liés, et donne les résultats ligne par ligne. Pour des exemples de code et plus de détails, voir le Storage .

- -

Note : La déclaration doit être remise à zéro avant d'être réutilisés.

- -
boolean executeStep();
-
- -
Valeur de retour
- -

Retourne un boolean indiquant s'il y a encor des lignes ou pas. les données par ligne peuvent être accessibles en utilisant la méthodes mozIStorageValueArray avec la déclaration.

- -

step()

- -

Identique un appelle executeStep(), puis un appelle reset() quand il n'y a plus de ligne à retourner.

- -
Note: Cette méthode ne peut être appelée à partir du code JavaScript .
- -
boolean step()
- -
Valeur de retour
- -

true s'il y a encor des lignes disponible dans les résultats, sinon false.

- -

execute()

- -

Exécutez la requête, sans tenir compte des résultats. Ceci est accompli en appelant executeStep(), puis reset().

- -
 void execute();
-
- -

Voir aussi

- - diff --git a/files/fr/xpcom_interface_reference/nsiaccessibleprovider/index.html b/files/fr/xpcom_interface_reference/nsiaccessibleprovider/index.html deleted file mode 100644 index d9d53fb38b..0000000000 --- a/files/fr/xpcom_interface_reference/nsiaccessibleprovider/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: nsIAccessibleProvider -slug: XPCOM_Interface_Reference/nsIAccessibleProvider -tags: - - Accessibilité - - Interfaces - - Référence_de_l'API_XPCOM - - XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIAccessibleProvider ---- -

 

-


-

-
accessible/public/nsIAccessibleProvider.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.9 (Firefox 3)
-

-

Hérite de : nsISupports

-

Attributs

- - - - - - - - - - - - - -
AttributTypeDescription
accessiblensIAccessibleRenvoie un objet accessible. - - En lecture seule -
-

Voir également

- -

 

diff --git a/files/fr/xpcom_interface_reference/nsidomclientrect/index.html b/files/fr/xpcom_interface_reference/nsidomclientrect/index.html deleted file mode 100644 index 3a641290fc..0000000000 --- a/files/fr/xpcom_interface_reference/nsidomclientrect/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: nsIDOMClientRect -slug: XPCOM_Interface_Reference/nsIDOMClientRect -tags: - - Interfaces - - 'Interfaces:Scriptable' - - XPCOM - - XPCOM Interface Reference -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMClientRect ---- -

-
dom/interfaces/base/nsIDOMClientRect.idlScriptable
-Représente une boîte rectangulaire. Le type de boîte est spécifié par la méthode qui renvoie un tel objet. Il est retourné par des fonctions comme element.getBoundingClientRect. - -
- -
1.0
- -
66
- -
- -
- -
Introduced
-
Gecko 1.9
- -
- -
- -
-Inherits from: nsISupports -Last changed in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)
-

- -

Attributs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributTypeDescription
bottomfloatCoordonnée Y, par rapport à l'origine du point de vue, du bas de la boîte rectangulaire. En lecture seule.
heightfloatHauteur de la boîte rectangle (identique à bottom moins top). En lecture seule.
leftfloatCoordonnée X, par rapport à l'origine du point de vue, de la gauche de la boîte rectangulaire. En lecture seule.
rightfloatCoordonnée X, par rapport à l'origine du point de vue, de la droite de la boîte rectangulaire. En lecture seule.
topfloatCoordonnée Y, par rapport à l'origine du point de vue, du haut de la boîte rectangulaire. En lecture seule.
widthfloatLargeur de la boîte rectangle (identique à right moins left). En lecture seule.
xfloatCoordonnée X, par rapport à l'origine du point de vue, de la gauche de la boîte rectangulaire. En lecture seule.
yfloatCoordonnée Y, par rapport à l'origine du point de vue,, du haut de la boîte rectangulaire. En lecture seule.
- -

Voir aussi

- - - -

Cet objet a été renommé plusieurs fois : le nom initial était TextRectangle, ensuite ClientRect, ensuite DOMRect.

- -

Initialement, il avait juste les attributs top/left/right/bottom, puis width/height/x/y ont été ajoutés.

diff --git a/files/fr/xpcom_interface_reference/nsiidleservice/index.html b/files/fr/xpcom_interface_reference/nsiidleservice/index.html deleted file mode 100644 index aeb263759f..0000000000 --- a/files/fr/xpcom_interface_reference/nsiidleservice/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: nsIIdleService -slug: XPCOM_Interface_Reference/nsIIdleService -tags: - - Interfaces - - NeedsContent - - Référence_de_l'API_XPCOM - - XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIIdleService ---- -

Le service idle permet de mesurer depuis combien de temps l'utilisateur a été « inactif », c'est-à-dire qu'il n'a pas utilisé la souris ou le clavier. Le temps d'inactivité peut être obtenu directement, mais dans la plupart des cas il sera plus utile d'enregistrer un observateur pour un intervalle prédéfini.

-

-
widget/public/nsIIdleService.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.9a
-

-

Actuellement, des implémentations de nsIIdleService existent pour Windows, Mac OS X et Linux (via XScreenSaver).

-

Exemple 1 :

-
var idleService = Components.classes["@mozilla.org/widget/idleservice;1"]
-                            .getService(Components.interfaces.nsIIdleService)
-setTimeout(function() { alert(idleService.idleTime) }, 1000)
-// si vous n'utilisez pas la souris ou le clavier après avoir exécuté cet extrait de code,
-// vous verrez un message avec un nombre aux alentours de 1000.
-
-

Exemple 2 :

-
var idleService = Components.classes["@mozilla.org/widget/idleservice;1"]
-                            .getService(Components.interfaces.nsIIdleService)
-var idleObserver = {
-  observe: function(subject, topic, data) {
-    alert("sujet : " + topic + "\ndonnées : " + data);
-  }
-};
-idleService.addIdleObserver(idleObserver, 60); // une minute
-// ...
-// Ne pas oublier de retirer l'observateur avec removeIdleObserver !
-idleService.removeIdleObserver(idleObserver, 60);
-
-

Méthodes

-
void addIdleObserver(in nsIObserver observer, in unsigned long time);
-void removeIdleObserver(in nsIObserver observer, in unsigned long time);
-
-

Attributs

-
readonly attribute unsigned long idleTime;
-
diff --git a/files/fr/xpcom_interface_reference/nsiprocess/index.html b/files/fr/xpcom_interface_reference/nsiprocess/index.html deleted file mode 100644 index 214cd52167..0000000000 --- a/files/fr/xpcom_interface_reference/nsiprocess/index.html +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: nsIProcess -slug: XPCOM_Interface_Reference/nsIProcess -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIProcess ---- -

-
xpcom/threads/nsIProcess.idlScriptable
- - -This interface represents an executable process. - - -
-Inherits from: nsISupports -Last changed in Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)
-

- -

Mis en œuvre par: @mozilla.org/process/util;1. Pour créer une instance, utilisez:

- -
var process = Components.classes["@mozilla.org/process/util;1"]
-              .createInstance(Components.interfaces.nsIProcess);
-
- -

Méthodes

- - - - - - - - - - - - - - - - - - - - - - - - - -
void init(in nsIFile executable);
void initWithPid(in unsigned long pid); Obsolète depuis Gecko 1.9.2
void kill();
void run(in boolean blocking, [array, size_is(count)] in string args, in unsigned long count);
void runAsync([array, size_is(count)] in string args, in unsigned long count, [optional] in nsIObserver observer, [optional] in boolean holdWeak);
void runw(in boolean blocking, [array, size_is(count)] in wstring args, in unsigned long count);
void runwAsync([array, size_is(count)] in wstring args, in unsigned long count, [optional] in nsIObserver observer, [optional] in boolean holdWeak);
- -

Attributes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributeTypeDescription
exitValuelongLa valeur retournée par le processus à la sortie. Ceci est valable uniquement après la fin du processus. Lecture seule.
isRunningbooleantrue si le processus est en marche, sinon false. Précise seulement si le processus a été exécuté avec le blocage désactivé. Lecture seule.
locationnsIFile -

L'emplacement du fichier exécutable sur le disque. Lecture seule.

- -

-
Gecko 1.9.1 note
-
This attribute is no longer implemented as of Gecko 1.9.1, and is removed entirely in Gecko 1.9.2.
-

-
pidunsigned longL'ID du processus. Cette valeur est uniquement disponible après le début du processus; En outre, certaines plates-formes ne peuvent pas offrir cette valeur. Lecture seule.
processNamestring -

Le nom du processus. Lecture seule.

- -

-
Gecko 1.9.1 note
-
This attribute is no longer implemented as of Gecko 1.9.1, and is removed entirely in Gecko 1.9.2.
-

-
processSignatureunsigned long -

La signature du processus. Lecture seule.

- -

-
Gecko 1.9.1 note
-
This attribute is no longer implemented as of Gecko 1.9.1, and is removed entirely in Gecko 1.9.2.
-

-
- -

Méthodes

- -

init()

- -

Initialise le nsIProcess avec le fichier exécutable spécifié. Une fois initialisé, vous pouvez commencer le processus d'exécution en appelant run().

- -

Note :  Cette fonction ne fonctionne pas avec des kits d'applications sur Mac OS X, voir bug 307463 pour plus de détails

- -
void init(
-  in nsIFile executable
-);
-
- -
Paramètres
- -
-
executable
-
Le fichier exécutable nsIFile représenté par l'objet nsIProcess.
-
- -

-

initWithPid()

- Obsolète depuis Gecko 1.9.2 (Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0) -

- -

Initialise le nsIProcess pour représenter un processus existant, donne l'ID de ce processus.

- -

-
Gecko 1.9.1 note
-
This method is no longer implemented as of Gecko 1.9.1, and is removed entirely in Gecko 1.9.2.
-

- -
void initWithPid(
-  in unsigned long pid
-);
-
- -
Paramètres
- -
-
pid
-
L'identifiant du processus existant.
-
- -

kill()

- -

Termine immédiatement le processus représenté par la nsIProcess. Cela ne fonctionne que si le processus a été exécuté sans blocage.

- -

-
Gecko 1.9.1 note
-
Prior to Gecko 1.9.1 (Firefox 3.5), this method did not work on Windows or Mac OS X. Now it does.
-

- -
void kill();
-
- -
Paramètres
- -

Aucun.

- -

run()

- -

Commence l'exécution du processus.

- -

-
Gecko 1.9.1 note
-
Prior to Gecko 1.9.1 (Firefox 3.5), this method returned the process ID of the newly executing process. It no longer returns a value.
-

- -
void run(
-  in boolean blocking,
-  [array, size_is(count)] in string args,
-  in unsigned long count
-);
-
- -
Paramètres
- -
-
blocking
-
Si true, cette méthode permet de bloquer jusqu'à ce que le processus se termine; si false, la méthode renvoie immédiatement.
-
args
-
Un tableau de count arguments, en utilisant le jeu de caractères natif, à passer à l'exécutable en ligne de commande.
-
count
-
Le nombre d'arguments dans le tableau args.
-
- -

runAsync()

- -

Fonctionnement asynchrone du processus avec lequel l'objet a été initialisé, appelant éventuellement un observateur lorsque le processus ce termine.

- -
void runAsync(
-  [array, size_is(count)] in string args,
-  in unsigned long count,
-  in nsIObserver observer, Facultatif
-  in boolean holdWeak Facultatif
-);
-
- -
Paramètres
- -
-
args
-
Un tableau d'arguments à passer dans le processus, en utilisant le jeu de caractères natif. Ce tableau doit avoir count entrées.
-
count
-
Le nombre d'arguments passés dans le tableau args.
-
observer Facultatif
-
Un observateur qui sera notifiée lorsque le processus se termine. L'observateur recevra de l'instance nsIProcess «processus-fini" ou "processus échoué". L'observateur sera notifiée sur le thread principal.
-
holdWeak Facultatif
-
Si true, un weak reference est utilisé pour maintenir l'observateur.
-
 
-
- -

runw()

- -

Executes the file this object was initialized with.

- -
void runw(
-  in boolean blocking,
-  [array, size_is(count)] in wstring args,
-  in unsigned long count
-);
-
- -
Parameters
- -
-
blocking
-
If true, this method will block until the process terminates; if false, the method returns immediately.
-
args
-
An array of count arguments, using UTF-16, to be passed to the executable on its command line.
-
count
-
The number of arguments in the args array.
-
- -

runwAsync()

- -

Asynchronously runs the process with which the object was initialized, optionally calling an observer when the process finishes running.

- -
void runwAsync(
-  [array, size_is(count)] in wstring args,
-  in unsigned long count,
-  in nsIObserver observer, Facultatif
-  in boolean holdWeak Facultatif
-);
-
- -
Parameters
- -
-
args
-
An array of arguments to pass into the process, using UTF-16. This array must have count entries.
-
count
-
The number of arguments passed in the args array.
-
observer Facultatif
-
An observer that will be notified when the process exits. The observer will receive this nsIProcess instance as the subject and "process-finished" or "process-failed" as the topic. The observer will be notified on the main thread.
-
holdWeak Facultatif
-
If true, a weak reference is used to hold the observer.
-
- -

Example

- -
//créer un nsIFile pour l'exécutable
-var file = Components.classes["@mozilla.org/file/local;1"]
-                     .createInstance(Components.interfaces.nsIFile);
-file.initWithPath("c:\\myapp.exe");
-
-// créer un nsIProcess
-var process = Components.classes["@mozilla.org/process/util;1"]
-                        .createInstance(Components.interfaces.nsIProcess);
-process.init(file);
-
-// Exécuter le processus.
-// Si le premier paramètre est vrai, le thread appelant sera bloqué
-//jusqu'à ce que le processus appelé se termine.
-//les deuxième et troisième params sont utilisés pour passer des
-//arguments de ligne de commande pour le processus.
-var args = ["argument1", "argument2"];
-process.run(false, args, args.length);
-
- -

Voir aussi

- - - -

diff --git a/files/fr/xpcom_interface_reference/nsisupports/index.html b/files/fr/xpcom_interface_reference/nsisupports/index.html deleted file mode 100644 index 0e47fd988d..0000000000 --- a/files/fr/xpcom_interface_reference/nsisupports/index.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: nsISupports -slug: XPCOM_Interface_Reference/nsISupports -tags: - - Interfaces - - 'Interfaces:Gelées' - - Référence_de_l'API_XPCOM - - XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsISupports ---- -

« Référence de l'API XPCOM

-

Résumé

-

Toutes les interfaces XPCOM héritent de l'interface nsISupports.

-
#include "nsISupports.h"
-
-[scriptable, uuid=(0000000-0000-0000-c000-000000000046)]
-interface nsISupports { ... };
-
-

Méthodes

-
-
- AddRef
-
- La méthode AddRef notifie l'objet qu'un pointeur d'interface a été dupliqué.
-
-
-
- QueryInterface
-
- La méthode QueryInterface permet la découverte de type à l'exécution.
-
-
-
- Release
-
- La méthode Release notifie l'objet qu'un pointeur d'interface a été détruit et que toutes les ressources maintenues par l'objet concernant ce client peuvent être libérées.
-
-

Remarques

-

Les descriptions de méthodes ci-dessus sont tirées de Essential COM par Don Box. Le but de ces descriptions est de mettre en évidence le fait qu'Addref et Release ne correspondent pas nécessairement à l'incrémentation et la décrémentation d'un compteur, respectivement, même si c'est la manière dont elles sont généralement implémentées.

-

Sur les systèmes Win32, nsISupports est compatible au niveau de l'ABI avec l'interface IUnknown de Microsoft COM.

diff --git a/files/fr/xpcom_interface_reference/nsiuri/index.html b/files/fr/xpcom_interface_reference/nsiuri/index.html deleted file mode 100644 index 89313e616a..0000000000 --- a/files/fr/xpcom_interface_reference/nsiuri/index.html +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: nsIURI -slug: XPCOM_Interface_Reference/nsIURI -tags: - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIURI ---- -

nsIURI est une interface pour un identifiant de ressource uniforme (URI) avec gestion de l'internationalisation.

-


-

-
netwerk/base/public/nsIURI.idlScriptable
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.0.0
-

-

Code de l'interface

-
[scriptable, uuid(07a22cc0-0ce5-11d3-9331-00104ba0fd40)]
-interface nsIURI : nsISupports
-{
-  attribute AUTF8String spec;
-  readonly attribute AUTF8String prePath;
-  attribute ACString scheme;
-  attribute AUTF8String userPass;
-  attribute AUTF8String username;
-  attribute AUTF8String password;
-  attribute AUTF8String hostPort;
-  attribute AUTF8String host;
-  attribute long port;
-  attribute AUTF8String path;
-
-  boolean equals(in nsIURI other);
-  boolean schemeIs(in string scheme);
-  nsIURI clone();
-  AUTF8String resolve(in AUTF8String relativePath);
-
-  readonly attribute ACString asciiSpec;
-  readonly attribute ACString asciiHost;
-  readonly attribute ACString originCharset;
-};
-
-

Les URI sont essentiellement des noms structurés pour des choses, quelles qu'elles soient. Cette interface fournit des accesseurs pour définir et interroger les composants les plus basiques d'une URI. Les sous-classes, comme nsIURL, imposent une plus grande structure à l'URI. Cette interface suit la spécification de Tim Berners-Lee dans la RFC 2396, où les composants de base d'une URI sont définis comme suit :

-
ftp://user:password@example.org:12345/path/leaf
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComposantValeur dans l'exemple
schemeftp
userPassuser:password
hostexample.org
port12345
path/path/leaf
prePathftp://user:password@example.org:12345
-

Méthodes

-

equals()

-
boolean equals (in nsIURI other);
-
-

Test d'équivalence d'URI (pas une comparaison stricte). Par exemple, http://example.com:80/ == http://example.com/

-

schemeIs()

-
boolean schemeIs(in string scheme);
-
-

Une optimisation pour effectuer certaines vérifications sur le schéma sans que les utilisateurs de nsIURI aient à utiliser GetScheme, économisant ainsi des allocations et libérations supplémentaires. Renvoie true si le schéma correspond, en ignorant la casse).

-

clone()

-
nsIURI clone();
-
-

Clone l'URI courante. Pour certains protocoles il ne s'agit pas que d'une simple optimisation. Par exemple, sous Mac OS, la spécification d'une URL de fichier n'identifie pas nécessairement un fichier unique car deux volumes pourraient partager le même nom.

-

resolve()

-
AUTF8String resolve(in AUTF8String relativePath);
-
-

Cette méthode résoud une chaîne relative en une chaîne URI absolue, en utilisant cette URI comme base. NOTE : certaines implémentations peuvent ne pas avoir de notion d'URI relative.

-

Attributs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AttributTypeDescription
specnsACString (UTF-8)Renvoie une représentation chaîne de l'URI. En définissant cet attribut, celui-ci sera analysé et l'URI sera initialisée.
prePathreadonly nsACString (UTF-8)L'attribut prePath (par exemple scheme://user:password@host:port) renvoie la chaîne qui précède le chemin. Cela peut servir pour l'authentification ou la gestion de sessions. -

Certains caractères peuvent être échappés.

-
schemensACString (US-ASCII)Le protocole auquel cette URI fait référence. Il est limité au sous-ensemble US-ASCII selon la RFC2396.
userPassnsACString (UTF-8)La partie username:password (ou uniquement username si la valeur ne contient pas de « : ») -

Certains caractères peuvent être échappés.

-
usernamensACString (UTF-8)Le nom d'utilisateur éventuel, en supposant que preHost consiste en username:password. -

Certains caractères peuvent être échappés.

-
passwordnsACString (UTF-8)Le mot de passe éventuel, en supposant que preHost consiste en username:password. -

Certains caractères peuvent être échappés.

-
hostPortnsACString (UTF-8)La valeur host:port (ou simplement l'hôte, si port == -1). -

Les caractères ne sont PAS échappés.

-
hostnsACString (UTF-8)L'hôte est le nom de domaine Internet auquel cette URI fait référence. Il peut s'agir d'une adresse littérale IPv4 (ou IPv6). Si géré, il peut s'agir d'un nom de domaine internationalisé non-ASCII. -

Les caractères ne sont PAS échappés.

-
portPRInt32Une valeur de port de -1 correspond au port par défaut du protocole (par exemple, -1 indique le port 80 pour les URI HTTP).
pathnsACString (UTF-8)Le chemin, typiquement avec au moins un « / » initial (mais peut également être vide, selon le protocole). -

Certains caractères peuvent être échappés.

-
asciiSpecreadonly nsACString (US-ASCII)L'attribut spec mais avec un encodage compatible ASCII. La portion d'hôte suit la spécification brouillon IDNA. D'autres parties utilisent l'échappement d'URL selon les règles de la RFC2396. Le résultat est strictement de l'ASCII.
asciiHostreadonly nsACString (US-ASCII)L'hôte de l'URI mais avec un encodage compatible ASCII. Suit la spécification brouillon IDNA pour la conversion de noms de domaines internationalisés (UTF-8) en ASCII pour la compatibilité avec les infrastructures Internet existantes.
originCharsetreadonly nsACStringLe jeu de caractères du document dont cette URI est originaire. Une valeur vide indique l'UTF-8. -

Si cette valeur est différente d'UTF-8, les composants de l'URI (comme spec, prePath, username, etc.) seront tous échappés comme une URL. Autrement, les composants de l'URI peuvent contenir des caractères multioctets UTF-8 non échappés

-
-

 

diff --git a/files/fr/xpcom_interface_reference/nsixulappinfo/index.html b/files/fr/xpcom_interface_reference/nsixulappinfo/index.html deleted file mode 100644 index fff5ff66a8..0000000000 --- a/files/fr/xpcom_interface_reference/nsixulappinfo/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: nsIXULAppInfo -slug: XPCOM_Interface_Reference/nsIXULAppInfo -tags: - - Interfaces - - XPCOM - - 'XPCOM:Références' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIXULAppInfo ---- -

Voir nsIXULAppInfo.idl et Utilisation de nsIXULAppInfo.

diff --git a/files/fr/xpconnect/index.html b/files/fr/xpconnect/index.html deleted file mode 100644 index 0285f07a5d..0000000000 --- a/files/fr/xpconnect/index.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: XPConnect -slug: XPConnect -tags: - - 'XPCOM:Liaisons_de_langage' - - XPConnect -translation_of: Mozilla/Tech/XPCOM/Language_bindings/XPConnect ---- -

 

-
-

XPConnect est une passerelle entre JavaScript et XPCOM. Avec XPConnect, vous pour utiliser des composants XPCOM depuis du code JavaScript, et interagir avec des objets JavaScript dans des composants XPCOM.

-
- -

Documentation

XPConnect:Les bases de l'architecture
XPConnect, JavaScript, XPCOM, XUL... (à traduire de en:XPConnect:Architecture basics)
XPConnect:Utilisation de composants
Comment dialoguer avec des composants XPCOM. (à traduire de en:XPConnect:Using components)
FAQ sur XPConnect et XPIDL (en)
Classes XPConnect
Quelles sont les genres de classes générées et utilisées par XPConnect.

Tous les articles...

Exemples

nsIEnumerator
Comment déterminer la fin d'une énumération ? (à traduire de en:nsIEnumerator)
XPConnect:nsIRegistry
Représente appreg. (à traduire de en:XPConnect:nsIRegistry)
XPConnect:nsIProfile
Créer, renommer, supprimer, lister des profiles. (à traduire de en:XPConnect:nsIProfile)
XPConnect:appShellService
Vous pouvez quitter Mozilla avec lui. (à traduire de en:XPConnect:appShellService)

Tous les exemples...

Communauté

  • Forums Mozilla...

{{ DiscussionList("dev-tech-xpcom", "mozilla.dev.tech.xpcom") }}

Outils

Sujets liés

XPCOM, JavaScript
-

Categories

-

Interwiki Language Links

-

 

-

{{ languages( { "en": "en/XPConnect", "ja": "ja/XPConnect", "ko": "ko/XPConnect", "pl": "pl/XPConnect" } ) }}

diff --git a/files/fr/xpcshell/index.html b/files/fr/xpcshell/index.html deleted file mode 100644 index a322ce2383..0000000000 --- a/files/fr/xpcshell/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: xpcshell -slug: xpcshell -tags: - - JavaScript - - Tests_automatisés - - Tools - - 'XPCOM:Liaisons_de_langage' - - XPConnect -translation_of: Mozilla/Tech/XPCOM/Language_bindings/XPConnect/xpcshell ---- -

 

-

Prérequis

-

xpcshell est un interpréteur JavaScript en ligne de commande utilisant XPConnect. C'est une application dans un terminal qui permet d'exécuter du code JavaScript, mais contrairement à l'interpréteur JS habituel, (js), xpcshell permet aux scripts d'accéder aux fonctionnalités XPCOM grâce à XPConnect.

-

Vous devez utilisez votre propre compilation du code de Mozilla pour pouvoir utiliser xpcshell

-

Exécuter xpcshell

-
./run-mozilla.sh ./xpcshell
-
-

xpcshell est presque toujours situé dans le même répertoire que run-mozilla.sh.

-
$ locate run-mozilla.sh
-/usr/lib/firefox-0.10.1/run-mozilla.sh
-/usr/lib/thunderbird-0.9/run-mozilla.sh
-/usr/local/mozilla/run-mozilla.sh
-/opt/mozilla/run-mozilla.sh
-/root/.Trash/mozilla/run-mozilla.sh
-
-

Choisissez un répertoire, placez vous dedans, et lancez run-mozilla.sh xpcshell s'il est présent (Il peut ne pas s'y trouver si vous n'avez pas une version de Firefox, Mozilla, Thunderbird, etc. permettant le débogage).

-
$ cd /opt/mozilla
-$ ./run-mozilla.sh ./xpcshell
-js>
-
-

Vous pouvez saisir du JavaScript, directement à Mozilla !

-
js> 5+7
-12
-js> print("Bonjour !")
-Bonjour !
-js>
-
-

Voir également

- diff --git a/files/fr/xpi/index.html b/files/fr/xpi/index.html deleted file mode 100644 index f180e35a15..0000000000 --- a/files/fr/xpi/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: XPI -slug: XPI -tags: - - API_du_toolkit - - XPInstall -translation_of: Mozilla/XPI ---- -

-

Le module Cross-Platform Installer (XPI) (prononcé "zippy") est un fichier ZIP servant à l'installation de paquetages en utilisant la technologie XPInstall. Les modules XPI (également appelés "Bundles") sont employés pour l'installation d'une grande variété d'applications telles que les Plugins, les Extensions, les Thèmes, les dictionnaires pour Thunderbird, etc. -

Un XPI contient des instructions d'installation (install.js ou install.rdf) pour l'application à installer. Il peut également contenir un fichier empaqueté et compressé JAR. Lors du téléchargement ou du dépot d'un lien XPI dans le gestionnaire d'extensions, XPInstall va interagir automatiquement avec les instructions contenues dans le XPI et installer l'application. -

Lorsque des archives XPI sont servies via HTTP, le type MIME application/x-xpinstall MIME doit être associé à l'extension de fichier xpi. -

-

Voir également

- -
-
-{{ languages( { "en": "en/XPI", "ja": "ja/XPI", "pl": "pl/XPI" } ) }} diff --git a/files/fr/zones/index.html b/files/fr/zones/index.html deleted file mode 100644 index 5035065440..0000000000 --- a/files/fr/zones/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Zones -slug: Zones -translation_of: Zones ---- -

MDN Zones est le principal répertoire d'informations regroupant, ci-joint, les différents liens vers les sujets et produits mis à votre disposition.

- -
-
-

Développement Web et Apps

- -
-
Le Center App
-
Apprenez à créer des applications Open Web : des applications riches qui peuvent être utilisées sur diverses appareils et formes ; tout en continuant d'utiliser les mêmes standards Web et Open technologies que vous connaissez déjà.
-
Les Outils du développeur
-
Apprenez à utiliser les outils de développement Firefox afin de debugger, tester, et optimiser vos sites et applications Web.
-
Le Firefox Marketplace
-
Un Open Marché libre, en ligne, pour vos applications Webs écrites en HTML, CSS, et JavaScript. Publiez vos applications sur le Firefox Marketplace ou créez votre propre Marketplace en le codant.
-
Le développement de jeux
-
Apprenez à développer des jeux pour le Web, porter des jeux existants aux Webs technologies, et convertir vos jeux en applications Web.
-
Le Programme Développeur Mozilla
-
Apprenez en plus sur le programme Développeur Mozilla, signez pour devenir membre du programme, souscrivez à la newsletter, et accédez à notre nombre grandissant d'options pour les développeurs Web.
-
-
- -
-

Produits et Projets

- -
-
Emscripten
-
Un compilateur LLVM vers le JavaScript qui vous permet de compiler, par exemple, du code C++ vers du code JavaScript pouvant fonctionner sur n'importe quel navigateur Web.
-
L20n
-
Un projet de localisation pour le framework de JavaScript, vous permettant de libérer toute la puissance de votre langue natale en un simple code.
-
Le projet MDN
-
Le Mozilla Developer Network (ce site) ne peut s'agrandir et s'améliorer sans les lecteurs et contributeurs de sa communauté. Apprenez ici à nous aider, contribuer, et construire le code qui se cache derrière MDN!
-
Persona
-
Un nouveau système de connexion exclusive et privée, basé sur une authentification unique. Développé par Mozilla, il permet aux utilisateurs de se connecter à votre site Web en utilisant simplement leur adresse mail, et vous évitant la gestion de mots de passe.
-
- -

Technologies Mozilla

- -
-
Les Modules
-
Apprenez à construire et installer des extensions, thèmes, et plug-ins pour des logiciels basés sur Mozilla, comme le populaire navigateur Web Firefox.
-
Firefox
-
Apprenez tout à propos de Firefox, de comment développer et réviser Firefox à comment développer des extensions plus particulièrement pour Firefox.
-
Firefox OS
-
Le nouvel opérateur système mobile, développé par Mozilla, permet aux utilisateurs d'installer et lancer des applications Open Web créées en HTML, CSS, et JavaScript.
-
-
-
- -

 

diff --git "a/files/fr/\303\251criture_de_code_localisable/index.html" "b/files/fr/\303\251criture_de_code_localisable/index.html" deleted file mode 100644 index 0d6eb54430..0000000000 --- "a/files/fr/\303\251criture_de_code_localisable/index.html" +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Écriture de code localisable -slug: Écriture_de_code_localisable -tags: - - Localisation -translation_of: Mozilla/Localization/Writing_localizable_code ---- -

Cette page présente les bonnes pratiques et des recommandations à suivre en ce qui concerne la localisation lorsqu'on touche à l'interface utilisateur. Elle est destinée aux développeurs de Mozilla et d'extensions.

- -

Pour des détails techniques, veuillez également consulter la section Localisation du tutoriel XUL.

- -

À propos des localisateurs

- -

Quelques notes au sujet des localisateurs pour les développeurs qui traitent rarement avec eux :

- - - -

Recommandations

- -

Par conséquent, voici quelques recommandations à suivre pour rendre la localisation de votre code plus aisée :

- -
-
Choisissez de bons noms de clés 
-
Les noms choisis pour vos clés (que ce soit pour un fichier .DTD ou .properties) doivent être descriptifs. Considérez que ce sont de longs noms de variables. Si vous changez la sémantique d'une clé localisée, renommez la clé. Ce sera sans doute un meilleur nom pour la clé, et cela aidera les divers outils à repérer que le changement que vous avez fait n'est pas juste une coquille.
-
Faites attention de ne pas faire de suppositions basées sur la grammaire dans vos chaînes 
-
Couper des phrases en plusieurs clés suppose souvent par inadvertance une grammaire particulière, une structure de phrase, et de telles chaînes composites sont souvent très difficiles à traduire. Lorsque c'est vraiment nécessaire, essayez de laisser de la place aux traducteurs. Un exemple d'une chaîne composite bien utilisée est l'option de Firefox pour les pages visités : le traducteur peut (implicitement) positionner le champ de texte comme il lui convient.
-
N'utilisez pas de macros de pré-traitement 
-
L'utilisation de #if #else #endif ou #expand est fortement déconseillée. Il y a quelques exceptions à cette règle, mais en général, le fichier localisé doit se conformer aux standards et ne doit pas nécessiter d'outils d'empaquetage pour être transformé. Si vous voulez ajouter un traitement pour compiler des fichiers localisés, assurez-vous d'obtenir l'avis de l10n@. Dans la plupart des cas, vous pouvez aussi juste ajouter le traitement dans le code contenu et référencer les différentes paires clé-valeur dans l10n.
-
Utilisez une bonne structure du répertoire des sources 
-
Assurez-vous de placer les fichiers localisables au bon endroit. L'ajout de nouveaux répertoires racines est un compromis entre la propriété du module dans le référentiel cvsroot et la facilité de localisation.
-
Utilisez une bonne structure du répertoire chrome
-
Pour un module mod particulier, un chemin tel que jar:ab-CD.jar!/locale/ab-CD/mod/foo.dtd a été largement testé et constitue un bon emplacement pour vos fichiers référencés ainsi : chrome://mod/locale/foo.dtd. Utiliser une telle structure de répertoire facilite la localisation sans le code source et c'est particulièrement recommandé pour les auteurs d'extensions. Les Manifestes JAR peuvent faciliter ceci.
-
- -

Impact l10n

- -

Sur les arbres gelés, la règle est de ne pas appliquer de changements impliquant la localisation. Qu'est-ce à dire ? Un impact sur la localisation est :

- - diff --git "a/files/fr/\303\251v\303\250nements_de_glisser-d\303\251poser/index.html" "b/files/fr/\303\251v\303\250nements_de_glisser-d\303\251poser/index.html" deleted file mode 100644 index 3069773273..0000000000 --- "a/files/fr/\303\251v\303\250nements_de_glisser-d\303\251poser/index.html" +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Évènements de glisser-déposer -slug: Évènements_de_glisser-déposer -tags: - - Firefox 3 -translation_of: Archive/Mozilla/Drag_and_drop/Drag_and_drop_events ---- -

-{{ Fx_minversion_header(3) }} -Firefox 3 ajoute deux évènements permettant de déterminer lorsque des opérations de glisser-déposer commencent et se terminent. Ces évènements font partie du brouillon de travail de la spécification HTML 5. -

-
drag -
Envoyé lorsqu'une opération de glisser-déposer commence. -
dragend -
Envoyé lorsqu'une opération de glisser-déposer se termine. -
-

Pour plus d'informations concernant le glisser-déposer, consultez l'article Glisser et déposer. -

Vous pouvez observer un exemple de ces évènements en action : -

- -

Voir également

- -


-


-

-
-
-{{ languages( { "en": "en/Drag_and_drop_events", "es": "es/Eventos_arrastrar_y_soltar", "ja": "ja/Drag_and_drop_events", "pl": "pl/Zdarzenia_przeci\u0105gania_i_upuszczania" } ) }} -- cgit v1.2.3-54-g00ecf