aboutsummaryrefslogtreecommitdiff
path: root/files/fr/mozilla/add-ons
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 21:46:22 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 21:46:22 -0500
commita065e04d529da1d847b5062a12c46d916408bf32 (patch)
treefe0f8bcec1ff39a3c499a2708222dcf15224ff70 /files/fr/mozilla/add-ons
parent218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (diff)
downloadtranslated-content-a065e04d529da1d847b5062a12c46d916408bf32.tar.gz
translated-content-a065e04d529da1d847b5062a12c46d916408bf32.tar.bz2
translated-content-a065e04d529da1d847b5062a12c46d916408bf32.zip
update based on https://github.com/mdn/yari/issues/2028
Diffstat (limited to 'files/fr/mozilla/add-ons')
-rw-r--r--files/fr/mozilla/add-ons/add-on_debugger/index.html94
-rw-r--r--files/fr/mozilla/add-ons/amo/règles/featured/index.html85
-rw-r--r--files/fr/mozilla/add-ons/amo/règles/index.html21
-rw-r--r--files/fr/mozilla/add-ons/amo/règles/reviews/index.html157
-rw-r--r--files/fr/mozilla/add-ons/bootstrapped_extensions/index.html348
-rw-r--r--files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html213
-rw-r--r--files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html68
-rw-r--r--files/fr/mozilla/add-ons/install_manifests/index.html566
-rw-r--r--files/fr/mozilla/add-ons/nous_contacter/index.html45
-rw-r--r--files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html103
-rw-r--r--files/fr/mozilla/add-ons/plugins/index.html110
-rw-r--r--files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html111
-rw-r--r--files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html833
-rw-r--r--files/fr/mozilla/add-ons/sdk/high-level_apis/index.html13
-rw-r--r--files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html166
-rw-r--r--files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html170
-rw-r--r--files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html669
-rw-r--r--files/fr/mozilla/add-ons/sdk/index.html337
-rw-r--r--files/fr/mozilla/add-ons/sdk/low-level_apis/index.html24
-rw-r--r--files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html109
-rw-r--r--files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html196
-rw-r--r--files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html50
-rw-r--r--files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html659
-rw-r--r--files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html192
-rw-r--r--files/fr/mozilla/add-ons/sdk/tools/index.html13
-rw-r--r--files/fr/mozilla/add-ons/sdk/tools/jpm/index.html600
-rw-r--r--files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html115
-rw-r--r--files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html165
-rw-r--r--files/fr/mozilla/add-ons/sdk/tutorials/index.html143
-rw-r--r--files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html383
-rw-r--r--files/fr/mozilla/add-ons/thunderbird/index.html135
-rw-r--r--files/fr/mozilla/add-ons/thèmes/fond/index.html79
-rw-r--r--files/fr/mozilla/add-ons/thèmes/index.html45
-rw-r--r--files/fr/mozilla/add-ons/thèmes/theme_concepts/index.html231
-rw-r--r--files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html219
35 files changed, 0 insertions, 7467 deletions
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/'
----
-<div>{{AddonSidebar}}</div>
-
-<p>Le débogueur de module complémentaire <em>(Add-on)</em> <span id="result_box" lang="fr"><span>vous permet d'exécuter un ensemble d'outils de développement de Firefox dans le contexte de votre module</span></span> :</p>
-
-<ul>
- <li><a href="https://developer.mozilla.org/fr/docs/Outils/D%C3%A9bogueur">Débogueur</a>, <span id="result_box" lang="fr"><span>pour définir des points d'arrêt et examiner l'état interne de votre code</span></span>.</li>
- <li><a href="https://developer.mozilla.org/fr/docs/Outils/Console_Web">Console web</a>, <span id="result_box" lang="fr"><span>pour voir les messages enregistrés et évaluer le JavaScript dans le contexte du module complémentaire</span></span>.</li>
- <li><a href="https://developer.mozilla.org/fr/docs/Outils/Ardoise">Ardoise JavaScript</a>, <span id="result_box" lang="fr"><span>pour évaluer commodément le JavaScript multiligne du module complémentaire et l'enregistrer dans un fichier.</span></span></li>
-</ul>
-
-<p><span id="result_box" lang="fr"><span>Le débogueur de module complémentaire n'est pas disponible pour les modules de superposition XUL requis pour le redémarrage.</span> <span>Pour déboguer des modules comme ceux-ci, utilisez la</span></span> <a href="https://developer.mozilla.org/fr/docs/Outils/Bo%C3%AEte_%C3%A0_outils_du_navigateur">boîte à outils du navigateur</a>.</p>
-
-<p>Pour une rapide introduction sur le débogueur, regardez la rapide démonstration ici (en) :</p>
-
-<p>{{EmbedYouTube("KU3Xsck7qy0")}}</p>
-
-<h2 id="Ouverture_du_débogueur_de_module_complémentaire">Ouverture du débogueur de module complémentaire</h2>
-
-<div class="note">
-<p><span id="result_box" lang="fr"><span>Ceci décrit comment ouvrir le débogueur à partir de Firefox 45.</span> <span>Pour les versions antérieures de Firefox, vous devez :</span></span></p>
-
-<ul>
- <li>
- <p><span id="result_box" lang="fr"><span>activer le débogage d'extension en cochant les <a href="https://developer.mozilla.org/fr/docs/Outils/Settings">options</a> «Activer les scripts chrome et boîte à outils de débogage des extensions» <em>(</em></span></span><em>Enable browser chrome and add-on debugging toolboxes)</em> <span lang="fr"><span>et «Activer le débogage distant» <em>(</em></span></span><em>Enable remote debugging)</em> <span lang="fr"><span>dans les outils de développement</span></span></p>
- </li>
- <li>
- <p><span id="result_box" lang="fr"><span>trouver l'extension dans about:addons (pas </span></span> about:debugging<span lang="fr"><span>), et cliquer sur le bouton "Debogage" sur cette page.</span></span></p>
- </li>
-</ul>
-
-<ul>
-</ul>
-</div>
-
-<p><span id="result_box" lang="fr"><span>Pour connecter le débogueur d'extensions à un module complémentaire, ouvrez la page <a href="https://developer.mozilla.org/fr/docs/Outils/about:debugging">modules</a> dans Firefox, assurez-vous que la case "</span></span>Activer le débogage des modules<span lang="fr"><span>" est cochée et cliquez sur le bouton "Déboguer" à proximité de votre add-on</span> <span>dans la page.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Ensuite, vous verrez une boîte de dialogue vous demandant d'accepter une connexion entrante.</span> <span>Cliquez sur "OK", et le débogueur va commencer dans une fenêtre séparée.</span> <span>Notez que parfois la fenêtre du débogueur est masquée par la fenêtre principale de Firefox.</span></span></p>
-
-<p>{{EmbedYouTube("tGGcA3bT3VA")}}</p>
-
-<h2 id="Utilisation_du_débogueur_de_module_complémentaire">Utilisation du débogueur de module complémentaire</h2>
-
-<p><span id="result_box" lang="fr"><span>Le débogueur de module complémentaire a une apparence et un comportement proches de ceux de la <a href="https://developer.mozilla.org/fr/docs/Outils/Bo%C3%AEte_%C3%A0_outils_du_navigateur">Boîte à outils du navigateur</a>, à 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é.</span> <span>À l'instar de la boîte à outils du navigateur, une barre d'outils en haut vous permet de basculer entre plusieurs outils différents.</span> <span>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.</span></span></p>
-
-<h3 id="Le_débogueur_JavaScript">Le débogueur JavaScript</h3>
-
-<p><span id="result_box" lang="fr"><span>Il se comporte comme le <a href="https://developer.mozilla.org/fr/docs/Outils/D%C3%A9bogueur">débogueur JavaScript</a> normal, à l'exception de sa portée qui est le module complémentaire et non une page Web.</span> <span>Sur la gauche, il répertorie les sources JavaScript:</span></span></p>
-
-<ul>
- <li><span id="result_box" lang="fr"><span>en haut <code>bootstrap.js</code> : celui que vous avez écrit si votre extension est un <a href="https://developer.mozilla.org/fr/Add-ons/Bootstrapped_extensions">module complémentaire "bootstrapé"</a> <em>(avec des commandes de démarrage écrites manuellement)</em> , ou celui inclus dans le SDK si votre extension est un module complémentaire SDK.</span></span></li>
- <li><span id="result_box" lang="fr"><span>ensuite, si votre extension est un module complémentaire SDK, vous trouverez le fichier <code>main.js</code> de votre module, tous les <a href="https://developer.mozilla.org/fr/Add-ons/SDK/Guides/Module_structure_of_the_SDK#Modules_locaux">modules locaux</a> livrés avec et les scripts de contenu actuellement chargés</span></span></li>
- <li>puis, <span id="result_box" lang="fr"><span>tous les modules SDK utilisés directement ou indirectement par votre extension.</span></span></li>
-</ul>
-
-<h4 id="Scripts_de_contenu">Scripts de contenu</h4>
-
-<p><span id="result_box" lang="fr"><span>Les scripts de contenu ne sont listés que s'ils sont chargés.</span> <span>Par conséquent, si votre module complémentaire <a href="/fr/docs/">charge un script de contenu</a> avec <code>contentScriptFile</code>, le fichier n'apparaîtra pas dans les sources du débogueur tant que vous n'allez pas sur une page qui le charge.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>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.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Par exemple, supposons que vous ayez un module complémentaire qui attache un script de contenu à chaque onglet chargé par l'utilisateur.</span> <span>Le script de contenu ajoute un gestionnaire de clics à la page.</span> <span>Dès que vous ouvrez un onglet, ce script de contenu sera répertorié dans le débogueur.</span> <span>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.</span> <span>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.</span></span></p>
-
-<p><span class="short_text" id="result_box" lang="fr"><span>Nous étudions des améliorations à ce</span></span> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1016046">bug 1016046</a>.</p>
-
-<h3 id="La_console">La console</h3>
-
-<p>La console se comporte comme la <a href="https://developer.mozilla.org/fr/docs/Outils/Console_Web">console web</a>, mais sa portée est le module complémentaire et non une page web.</p>
-
-<p><span id="result_box" lang="fr"><span>Notez toutefois qu'elle s'exécute réellement dans le contexte du <code>bootstrap.js</code> 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 <code>main.js</code></span><span>de votre extension, et vous ne verrez pas <code>require()</code> non plus.</span> <span>Ce problème fait l'objet d'un suivi</span></span>  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1005193">bug 1005193</a>.</p>
-
-<p>Vous pouvez exécuter des instructions de la console dans le contexte de <code>main.js</code> <span id="result_box" lang="fr"><span>tandis que l'exécution est interrompue dans</span></span> <code>main.js</code>.</p>
-
-<h3 id="L'ardoise_JavaScript">L'ardoise JavaScript</h3>
-
-<p>L'ardoise se comporte comme l'<a href="https://developer.mozilla.org/fr/docs/Outils/Ardoise">ardoise JavaScript</a> normale, <span id="result_box" lang="fr"><span>mais sa portée est l'extension et non la page web.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Comme pour la console, le module complémentaire s'exécute dans le contexte du <code>bootstrap.js</code> 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 <code>main.js</code> pendant que l'exécution</span> <span>est suspendue dans main.js.</span></span></p>
-
-<h2 id="Débogage_des_pages_chrome_et_about">Débogage des pages chrome: et about:</h2>
-
-<p><span id="result_box" lang="fr"><span>À 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.</span></span></p>
diff --git a/files/fr/mozilla/add-ons/amo/règles/featured/index.html b/files/fr/mozilla/add-ons/amo/règles/featured/index.html
deleted file mode 100644
index 6955588244..0000000000
--- a/files/fr/mozilla/add-ons/amo/règles/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
----
-<p>{{AddonSidebar}}</p>
-
-<p>Featured add-ons are top-quality extensions and themes highlighted on <a href="https://addons.mozilla.org/en-US/firefox/extensions/?sort=featured">AMO</a>, 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.</p>
-
-<p>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.</p>
-
-<p>New <a href="https://addons.mozilla.org/en-US/firefox/search/?featured=true&amp;type=extension">featured extensions</a> are chosen every month.</p>
-
-<h3 id="Criteria_for_Featured_Extensions">Criteria for Featured Extensions</h3>
-
-<p>Before nominating an extension to be featured, please ensure it meets the following criteria:</p>
-
-<ol>
- <li>The extension must have a complete and informative listing on AMO. This means:
- <ul>
- <li>a 64-pixel custom icon</li>
- <li>a clear and concise name (no lengthy keywords)</li>
- <li>a clear and concise summary of the extension's functionality</li>
- <li>detailed description and privacy policy, if applicable</li>
- <li>updated screenshots of the extension's functionality</li>
- </ul>
- </li>
- <li>The extension must have excellent user reviews and any problems or support requests must be promptly addressed by the developer.</li>
- <li>The extension must have a minimum of 500 users.</li>
- <li>The extension must be built with <a href="https://developer.mozilla.org/Add-ons/WebExtensions">WebExtensions</a> API.</li>
- <li>The extension must be compatible with the latest release of Firefox.</li>
- <li><strong>Most importantly</strong>, 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.</li>
-</ol>
-
-<h3 id="Discovery_Pane">Discovery Pane</h3>
-
-<p>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.</p>
-
-<p>Only content that is part of AMO’s <a class="external text" href="https://addons.mozilla.org/en-US/firefox/search/?featured=true&amp;type=extension" rel="nofollow">Featured Extensions collection</a> will be considered for the Discovery Pane; please note that featured content must meet certain <a href="https://wiki.mozilla.org/AMO/Featured_Board_Process#Add-on_Requirements" title="AMO/Featured Board Process">criteria</a>.</p>
-
-<p>Discovery Pane content is updated monthly, though some highly popular extensions may remain on the page for an indefinite period of time.</p>
-
-<p>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 <strong>amo-featured@mozilla.org</strong> 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.</p>
-
-<h3 id="Nominating_an_Add-on">Nominating an Add-on</h3>
-
-<p>If you wish to nominate an extension to be featured and it meets the criteria above, send an email to <a href="mailto:amo-featured@mozilla.org">amo-featured@mozilla.org</a> with:</p>
-
-<ul>
- <li>the extension name, URL, and whether you are its developer</li>
- <li>a short explanation of why the extension has wide appeal and should be featured</li>
- <li>optionally, links to any external reviews or articles mentioning the extension</li>
-</ul>
-
-<p>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.</p>
-
-<h3 id="Rotating_Featured_Extensions">Rotating Featured Extensions</h3>
-
-<p>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:</p>
-
-<ul>
- <li>Lack of growth — Extensions that are featured typically experience a substantial gain in both downloads and active users. If an extension is not demonstrating growth in any substantial way, that's a good indicator the extension may not be very useful to our users.</li>
- <li>Negative reviews — Featured extensions should have a great experience and very few bugs, so extensions with many negative reviews may be reconsidered.</li>
- <li>Incompatibility with upcoming Firefox versions — Featured extensions are expected to be compatible with stable and beta versions of Firefox. Extensions not yet compatible with a Beta version of Firefox four weeks before its expected release will lose their featured status.</li>
-</ul>
-
-<h3 id="Joining_the_Featured_Extensions_Advisory_Board">Joining the Featured Extensions Advisory Board</h3>
-
-<p>Every six months a new Advisory Board is chosen based on applications from the add-ons community. Members must:</p>
-
-<ul>
- <li>be active members of the add-ons community, whether as a developer, evangelist, or fan</li>
- <li>commit to trying all the nominations submitted, giving their feedback, and casting their votes every month</li>
- <li>abstain from voting on extensions that they have any business or personal affiliations with, as well as direct competitors of any such extensions</li>
-</ul>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<p>Follow the <a href="http://blog.mozilla.com/addons">Add-ons Blog</a> or <a href="http://www.twitter.com/mozamo">@mozamo</a> on Twitter to learn when the next application period opens.</p>
-
-<p><em>Last updated: April 12, 2018</em></p>
-
-<p><span class="comment seoSummary">How up-and-coming add-ons become featured and what's involved in the process. </span></p>
diff --git a/files/fr/mozilla/add-ons/amo/règles/index.html b/files/fr/mozilla/add-ons/amo/règles/index.html
deleted file mode 100644
index c99c0d1094..0000000000
--- a/files/fr/mozilla/add-ons/amo/règles/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
----
-<p>{{AddonSidebar}}</p>
-
-<p><span id="result_box" lang="fr"><span>Mozilla s'engage à assurer une excellente expérience pour nos utilisateurs et développeurs d'extensions.</span> <span>Veuillez consulter les règles ci-dessous avant de soumettre votre module.</span></span></p>
-
-<dl>
- <dd></dd><dt><a href="/Mozilla/Add-ons/AMO/Policy/Agreement">Agrément du développeur</a></dt>
-<dd>Effective January 5, 2016</dd><br>
- <dt><a href="/Mozilla/Add-ons/AMO/Policy/Reviews">Processus de revue</a></dt>
-<dd>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.</dd><br>
- <dt><a href="/Mozilla/Add-ons/AMO/Policy/Featured">Présentation des extensions</a></dt>
-<dd>How up-and-coming add-ons become featured and what's involved in the process. </dd><br>
- <strong><a href="/en-US/Add-ons#Contact_us">Nous contacter</a></strong>
-
- <p> Comment nous contacter à propos de ces règles ou de votre module.</p>
-
-</dl>
diff --git a/files/fr/mozilla/add-ons/amo/règles/reviews/index.html b/files/fr/mozilla/add-ons/amo/règles/reviews/index.html
deleted file mode 100644
index fab668a282..0000000000
--- a/files/fr/mozilla/add-ons/amo/règles/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
----
-<p>{{AddonSidebar}}</p>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<h2 id="No_Surprises">No Surprises</h2>
-
-<p>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.</p>
-
-<h3 id="Unexpected_Features">Unexpected Features</h3>
-
-<p>“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.</p>
-
-<p>Should an add-on include any unexpected feature that falls into one of the following categories:</p>
-
-<ul>
- <li>Potentially compromises user privacy or security (like sending data to third parties)</li>
- <li>Changes default settings like the new tab page, homepage or search engine</li>
- <li>Makes unexpected changes to the browser or web content</li>
- <li>Includes features or functionality not related to the add-on’s core function(s)</li>
-</ul>
-
-<p>Then the “unexpected” feature(s) must adhere to all of the following requirements:</p>
-
-<ul>
- <li>The add-on description must clearly state what changes the add-on makes.</li>
- <li>All changes must be “opt-in”, meaning the user has to take non-default action to enact the change. Changes that prompt users via the permissions system don’t require an additional opt-in.</li>
- <li>The opt-in interface must clearly state the name of the add-on requesting the change.</li>
-</ul>
-
-<h2 id="Content">Content</h2>
-
-<p>Add-ons that make use of Mozilla trademarks must comply with the <a href="https://www.mozilla.org/en-US/foundation/trademarks/policy/">Mozilla Trademark Policy</a>. If the add-on uses “Firefox” in its name, the naming standard the add-on is expected to follow is “&lt;Add-on name&gt; for Firefox”.</p>
-
-<p>In addition, add-ons listed on addons.mozilla.org (AMO) must adhere to the following policies:</p>
-
-<ul>
- <li>All add-ons submitted for listing on AMO are subject to Mozilla’s <a href="https://www.mozilla.org/en-US/about/legal/acceptable-use/">Conditions of Use</a>.</li>
- <li>Add-ons must disclose when payment is required to enable any functionality.</li>
- <li>Any add-ons, or add-on content, hosted on Mozilla site(s) must conform to the laws of the United States.</li>
- <li>The add-on listing should have an easy-to-read description about everything it does, and any information it collects. Please consult our best practices guide for <a href="https://developer.mozilla.org/en-US/Add-ons/Listing">creating an appealing listing</a>.</li>
- <li>Add-ons that are intended for internal or private use, or for distribution testing may not be listed on AMO. Such add-ons may be <a href="https://developer.mozilla.org/en-US/Add-ons/Distribution#Self-distributed_(unlisted)_versions">uploaded for self-distribution</a> instead.</li>
- <li>If the add-on is a fork of another add-on, the name must clearly distinguish it from the original and provide a significant difference in functionality and/or code.</li>
-</ul>
-
-<h2 id="Submission_Guidelines">Submission Guidelines</h2>
-
-<p>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 <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/User_experience_best_practices">here</a>.</p>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<h3 id="Source_Code_Submission">Source Code Submission</h3>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<p>Please read our <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/Source_Code_Submission">Source Code Submission guidelines</a> to avoid unexpected rejections.</p>
-
-<h2 id="Development_Practices">Development Practices</h2>
-
-<p>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.</p>
-
-<p>While any code, method or practice in a submitted add-on is subject to review and rejection, the following requirements are of particular importance:</p>
-
-<ul>
- <li>Add-ons must only request those permissions that are necessary for function</li>
- <li>Add-ons must be self-contained and not load remote code for execution</li>
- <li>Add-ons must use encrypted channels for sending sensitive user data</li>
- <li>Add-ons should avoid including duplicate or unnecessary files</li>
- <li>Add-on code must be written in a way that is reviewable and understandable. Reviewers may ask you to refactor parts of the code if it is not reviewable.</li>
- <li>Add-ons must not negatively impact the performance or stability of Firefox.</li>
- <li>Only release versions of third-party libraries and/or frameworks may be included with an add-on. Modifications to these libraries/frameworks are not permitted.</li>
-</ul>
-
-<h2 id="Data_Disclosure_Collection_and_Management">Data Disclosure, Collection and Management</h2>
-
-<p>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 <a href="https://www.mozilla.org/en-US/about/policy/lean-data/">Lean Data Practices</a> and Mozilla’s <a href="https://www.mozilla.org/en-US/privacy/principles/">Data Privacy Principles</a>, and uses the data only for the purpose for which it was originally collected.</p>
-
-<p>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.</p>
-
-<p>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:</p>
-
-<ul>
- <li>be specific and exclusive to the add-on,</li>
- <li>clearly describe the purpose of the data collection,</li>
- <li>set forth the exact data to be collected,</li>
- <li>address the add-on’s particular privacy properties.</li>
-</ul>
-
-<p>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.</p>
-
-<h3 id="User_Interactions_Technical_Data">User Interactions &amp; Technical Data</h3>
-
-<ul>
- <li>Users must be provided a clear way to control this data collection. The control mechanism must be shown during the installation process of the add-on.</li>
- <li>Add-ons must only collect information about add-on performance and/or use.</li>
- <li>Collecting ancillary information (e.g. any data not explicitly required for the add-on’s basic functionality) is prohibited.</li>
-</ul>
-
-<h3 id="Cookies">Cookies</h3>
-
-<ul>
- <li>If your add-on installs cookies, this must also be disclosed in the add-on’s privacy policy.</li>
- <li>The add-on privacy policy must clearly express the placing and purposes of the cookie(s). It is highly recommended that you disclose the types of cookies being used.</li>
- <li>Users must be provided an opportunity to refuse the storage of or access to cookies, and must be informed of the consequences of doing so (e.g., without a functional cookie, the add-on may not work).</li>
- <li>Installing cookies that are not explicitly required for the add-on’s functionality is prohibited.</li>
-</ul>
-
-<h3 id="Personal_Data">Personal Data</h3>
-
-<ul>
- <li>If you are collecting any personal information, the users must provide affirmative consent (i.e., explicit opt-in from the user). It must be clear to the user that they give consent to the collection of personal data.</li>
- <li>Collecting ancillary personal information (e.g., any data not explicitly required for the add-on’s basic functionality) is prohibited.</li>
- <li>Any transmission of this type of data must use secure, encrypted connections.</li>
-</ul>
-
-<h3 id="Additional_Privacy_Protocols">Additional Privacy Protocols</h3>
-
-<ul>
- <li>Leaking local or user-sensitive information to websites or other processes (e.g., using native messaging) is prohibited.</li>
- <li>If the add-on uses native messaging, the privacy policy must clearly disclose which information is being exchanged with the native application. Data exchanged with the native application must be in accordance with our No Surprises policy.</li>
- <li>HTTPS must be used for security and privacy-sensitive operations such as transmitting passwords or tokens.</li>
- <li>Browsing data from private browsing sessions must not be stored.</li>
- <li>Identity information must not be leaked to web content in private browsing sessions.</li>
-</ul>
-
-<h2 id="Security_Vulnerabilities">Security Vulnerabilities</h2>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<h2 id="Monetization">Monetization</h2>
-
-<ul>
- <li>Monetization mechanisms must comply with the policies in the <em>Data Disclosure, Collection and Management</em> section. In particular, an add-on must be accompanied with a clear user control mechanism (and opt-in for personal data) presented during the installation or update process of the add-on. Collecting ancillary information for monetization is prohibited.</li>
- <li>An add-on injecting advertising into web page content must clearly identify the injected content as originating from the add-on.</li>
- <li>The inclusion of any cryptocurrency miners or similar functionality in an add-on is prohibited.</li>
- <li>Modifying web content or facilitating redirects to include affiliate promotion tags is not permitted. Conversely, the use of affiliate promotion in user interface elements clearly identified as belonging to the add-on are acceptable.</li>
-</ul>
-
-<h2 id="Compliance_Blocklisting">Compliance &amp; Blocklisting</h2>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<p>Mozilla reserves the right to block or delete the developer’s account on addons.mozilla.org, thereby preventing further use of the service.</p>
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
----
-<p>{{LegacyAddonsNotice}}{{AddonSidebar}}</p>
-
-<p>{{ gecko_minversion_header("2.0") }}</p>
-
-<p><span id="result_box" lang="fr"><span>Les extensions traditionnelles incluent des <strong>superpositions</strong>, dans lesquelles l'application peut charger XUL depuis le paquet de l'extension et l'appliquer automatiquement sur sa propre interface utilisateur.</span> <span>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.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Gecko 2.0 {{geckoRelease ("2.0")}} introduit des <strong>extensions "bootstrapées"</strong>.</span> <span>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.</span> <span>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.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Toute l'application fait appel à ce fichier de script;</span> <span>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.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Cet article explique comment fonctionnent les extensions "bootstrap".</span> <span>Consultez ce didacticiel sur la <a href="https://developer.mozilla.org/fr/Add-ons/How_to_convert_an_overlay_extension_to_restartless">conversion d'une extension superposée en une opération sans redémarrage</a> pour obtenir un guide pratique étape par étape de la migration.</span></span></p>
-
-<h2 id="Le_processus_de_démarrage_et_d'arrêt"><span class="short_text" id="result_box" lang="fr"><span>Le processus de démarrage et d'arrêt</span></span></h2>
-
-<p><span id="result_box" lang="fr"><span>Une fonctionnalité clé des extensions "bootstrapées" est qu'elles doivent pouvoir démarrer et arrêter à la demande de l'application.</span> <span>Lorsque la fonction de </span></span> <code>startup()</code> <em>(</em><span lang="fr"><span><em>démarrage)</em> de l'extension est appelée, elle doit injecter manuellement son interface utilisateur et tout autre comportement dans l'application.</span> <span>De même, lorsque sa fonction <code>shutdown()</code> <em>(arrêt)</em> 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.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Il existe plusieurs scénarios dans lesquels la fonction <code>startup()</code> peut être appelée,</span> <span>par exemple :</span></span></p>
-
-<ul>
- <li><span id="result_box" lang="fr"><span>lorsque l'extension est installée pour la première fois, en supposant qu'elle soit compatible avec l'application et activée.</span></span></li>
- <li><span id="result_box" lang="fr"><span>lorsque l'extension est activée à l'aide de la fenêtre du gestionnaire de modules complémentaires.</span></span></li>
- <li><span id="result_box" lang="fr"><span>lorsque l'application est démarrée, si l'extension est activée et compatible avec l'application.</span></span></li>
-</ul>
-
-<p>Quelques exemples  <span id="result_box" lang="fr"><span>de situations où la fonction <code>shutdown()</code> peut être appelée :</span></span></p>
-
-<ul>
- <li><span id="result_box" lang="fr"><span>lorsque l'extension est désinstallée, si elle est actuellement activée.</span></span></li>
- <li><span class="short_text" id="result_box" lang="fr"><span>lorsque l'extension est désactivée.</span></span></li>
- <li><span id="result_box" lang="fr"><span>lorsque l'utilisateur quitte l'application, si l'extension est activée.</span></span></li>
-</ul>
-
-<h2 id="Notes_sur_la_modification_de_l'interface_utilisateur_de_l'application"><span id="result_box" lang="fr"><span>Notes sur la modification de l'interface utilisateur de l'application</span></span></h2>
-
-<h3 id="chrome.manifest_dans_les_extensions_bootstrapées">chrome.manifest dans les extensions "bootstrapées"</h3>
-
-<p>Vous pouvez utiliser un fichier <a href="https://developer.mozilla.org/fr/docs/Enregistrement_chrome#Exemple_de_fichier_manifest_chrome"><code>chrome.manifest</code></a> dans l'extension "bootstrapée" pour :</p>
-
-<ul>
- <li><span id="result_box" lang="fr"><span>Rendre le contenu de votre module complémentaire disponible via une URL <code>chrome://</code> (en utilisant les instructions </span></span> <code>content</code> <em>(</em><span lang="fr"><span><em>contenu)</em>, </span></span> <code>locale</code> <em>(</em><span lang="fr"><span><em>langue)</em> et </span></span> <code>skin</code> <em>(</em><span lang="fr"><span><em>habillage)</em> dans le manifeste).</span></span></li>
- <li>Remplacer les URI du <code>chrome://</code> existant avec votre contenu (en utilisant l'instruction <code>override</code> <em>(passer outre)</em>).</li>
-</ul>
-
-<p>Toutes les instructions <code>chrome.manifest</code> ne sont pas supportées dans les extensions bootstrapées, <span id="result_box" lang="fr"><span>par exemple, vous ne pouvez toujours pas enregistrer d'</span></span> <a href="https://developer.mozilla.org/fr/docs/Overlays_XUL">Overlays XUL</a> à partir d'une extension "bootstrapée". Voir la documentation <a href="https://developer.mozilla.org/fr/docs/Enregistrement_chrome"><code>Enregistrement chrome</code></a> pour les détails.</p>
-
-<p><span id="result_box" lang="fr"><span>Dans Firefox 10 et versions ultérieures, le fichier <code>chrome.manifest</code> situé dans la racine du XPI du module complémentaire (c'est-à-dire un frère du fichier <code>install.rdf</code>) est chargé automatiquement.</span> <span>Dans Firefox 8 et 9, vous devez charger / décharger manuellement le manifeste en utilisant {{ifmethod ("nsIComponentManager", "addBootstrappedManifestLocation")}} et {{ifmethod ("nsIComponentManager", "removeBootstrappedManifestLocation")}}.</span> <span>Cette fonctionnalité n'était pas disponible dans les versions de Firefox avant 8.</span></span></p>
-
-<h3 id="Ajout_manuel_d'une_interface_utilisateur">Ajout manuel d'une interface utilisateur</h3>
-
-<p><span id="result_box" lang="fr"><span>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.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>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.</span> <span>Par exemple, vous pouvez accéder à la barre de menus de Firefox avec <code>document.getElementById ("main-menubar")</code>.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>Assurez-vous qu'au moment de l'arrêt, vous supprimez toute interface utilisateur que vous avez ajoutée.</span></span></p>
-
-<h2 id="Création_d'une_extension_bootstrapée">Création d'une extension "bootstrapée"</h2>
-
-<p><span id="result_box" lang="fr"><span>Pour marquer une extension comme "bootstrappable", vous devez ajouter l'élément suivant à son</span></span> <a href="https://developer.mozilla.org/fr/Add-ons/Install_Manifests">manifeste d'installation</a> :</p>
-
-<pre><code>&lt;em:bootstrap&gt;true&lt;/em:bootstrap&gt;</code></pre>
-
-<p>Alors, vous devez ajouter un fichier <a href="https://developer.mozilla.org/fr/docs/Extensions/bootstrap.js"><code><strong>bootstrap.js</strong></code></a> qui contient les fonctions requises ; <span class="short_text" id="result_box" lang="fr"><span>elles devraient être à côté du fichier</span></span> <a href="https://developer.mozilla.org/fr/Add-ons/Install_Manifests"><code>install.rdf</code></a> dans le paquet de l'extension.</p>
-
-<h3 id="Rétrocompatibilité"><span class="short_text" id="result_box" lang="fr"><span>Rétrocompatibilité</span></span></h3>
-
-<p><span id="result_box" lang="fr"><span>Parce que les anciennes versions de Firefox ne connaissent pas la propriété <code>bootstrap</code> ou le fichier <code>bootstrap.js</code>, il n'est pas trop difficile de créer un XPI qui fonctionnera à la fois comme une extension "bootstrapable" et comme une extension traditionnelle.</span> <span>Créez votre extension en tant qu'extension "bootstrapable", puis ajoutez les "overlays" <em>(superpositions)</em> traditionnels.</span> <span>Les versions plus récentes de Firefox utiliseront le script <code>bootstrap.js</code>, en ignorant les composants et les superpositions, alors que les versions plus anciennes utiliseront les superpositions.</span></span></p>
-
-<h2 id="Points_d'entrée_Bootstrap"><span class="short_text" id="result_box" lang="fr"><span>Points d'entrée Bootstrap</span></span></h2>
-
-<p><span id="result_box" lang="fr"><span>Le script <code>bootstrap.js</code> doit contenir plusieurs fonctions spécifiques, appelées par le navigateur pour gérer l'extension.</span> <span>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.</span></span></p>
-
-<h3 id="startup_(démarrage)">startup <em>(démarrage)</em></h3>
-
-<p><span id="result_box" lang="fr"><span>Appelé lorsque l'extension doit se démarrer elle-même.</span> <span>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.</span> <span>Il peut être appelé plusieurs fois pendant la durée de vie de l'application.</span></span></p>
-
-<p><span id="result_box" lang="fr"><span>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.</span></span></p>
-
-<pre>void startup(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="Paramètres">Paramètres</h6>
-
-<dl>
- <dt><code>data </code><em>(donnée)</em></dt>
- <dd>Une <a href="#Données bootstrap">donnée bootstrap</a>.</dd>
- <dt><code>reason <em>(motif)</em></code></dt>
- <dd>Une des <a href="#Constantes causales">constantes causales</a>, <span id="result_box" lang="fr"><span>indiquant pourquoi l'extension est en cours de démarrage.</span></span> Ce peut être l'une d'entre elles : <code>APP_STARTUP</code>, <code>ADDON_ENABLE</code>, <code>ADDON_INSTALL</code>, <code>ADDON_UPGRADE ou</code> <code>ADDON_DOWNGRADE</code>.</dd>
-</dl>
-
-<h3 id="shutdown_(arrêt)">shutdown <em>(arrêt)</em></h3>
-
-<p><span id="result_box" lang="fr"><span>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.</span> <span>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.</span></span></p>
-
-<pre>void shutdown(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="Paramètres_2">Paramètres</h6>
-
-<dl>
- <dt><code>data <em>(donnée)</em></code></dt>
- <dd>Une <a href="#Données bootstrap">donnée bootstrap</a>.</dd>
- <dt><code>reason <em>(motif)</em></code></dt>
- <dd>Une des <a href="#Constantes causales">constantes causales</a>, indiquant pourquoi l'extension est en train de se fermet. Ce peut être l'une d'entre elles : <code>APP_SHUTDOWN</code>, <code>ADDON_DISABLE</code>, <code>ADDON_UNINSTALL</code>, <code>ADDON_UPGRADE</code> ou <code>ADDON_DOWNGRADE</code>.</dd>
-</dl>
-
-<h3 id="install_(installation)">install <em>(installation)</em></h3>
-
-<p><span id="result_box" lang="fr"><span>Votre script "bootstrap" doit inclure une fonction <code>install()</code> que l'application appelle avant le premier appel </span></span> <code>startup()</code> <span lang="fr"><span> après l'installation, la mise à niveau ou le déclassement de l'extension.</span></span></p>
-
-<pre>void install(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="Paramètres_3">Paramètres</h6>
-
-<dl>
- <dt><code>data <em>(donnée)</em></code></dt>
- <dd>Une <a href="#Données bootstrap">donnée bootstrap</a>.</dd>
- <dt><code>reason <em>(motif)</em></code></dt>
- <dd>Une des <a href="#Constantes causales">constantes causales</a>, indiquant pourquoi l'extension est en train d'être installée. Ce peut être l'une d'entre elles : <code>ADDON_INSTALL</code>, <code>ADDON_UPGRADE</code>, ou <code>ADDON_DOWNGRADE</code>.</dd>
-</dl>
-
-<h3 id="uninstall_(désinstallation)">uninstall <em>(désinstallation)</em></h3>
-
-<p>Cette fonction est appelée après le dernier appel à <code>shutdown()</code>  <span id="result_box" lang="fr"><span>avant qu'une version particulière de l'extension soit désinstallée.</span></span> Il n'est pas appelé si <code>install()</code>  <span class="short_text" id="result_box" lang="fr"><span>n'a jamais été appelé</span></span> .</p>
-
-<div class="note"><strong>Note :</strong> <span id="result_box" lang="fr"><span>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.</span> <span>Il s'agit d'une désinstallation en raison de l'option "Annuler" disponible.</span> <span>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.</span></span></div>
-
-<div class="note"><strong>Note :</strong> <span id="result_box" lang="fr"><span>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 :</span></span><br>
-<code>function uninstall(aData, aReason) {</code><br>
-<code>     if (aReason == ADDON_UNINSTALL) {</code><br>
-<code>          console.log('really uninstalling');</code><br>
-<code>     } else {</code><br>
-<code>          console.log('not a permanent uninstall, likely an upgrade or downgrade');</code><br>
-<code>     }</code><br>
-<code>}</code></div>
-
-<pre>void uninstall(
-  data,
-  reason
-);
-</pre>
-
-<h6 id="Paramètres_4">Paramètres</h6>
-
-<dl>
- <dt><code>data <em>(donnée)</em></code></dt>
- <dd>Une <a href="#Données bootstrap">donnée bootstrap</a>.</dd>
- <dt><code>reason</code></dt>
- <dd>Une des <a href="#Constantes causales">constantes causales,</a> indiquant pourquoi l'extension est en train d'être désinstallée. Ce peut être l'une d'entre elles : <code>ADDON_UNINSTALL</code>, <code>ADDON_UPGRADE</code> ou <code>ADDON_DOWNGRADE</code>.</dd>
-</dl>
-
-<h2 id="Constantes_causales"><a id="Constantes causales" name="Constantes causales">Constantes causales</a></h2>
-
-<p>La fonction bootstrap accepte un paramètre <code>reason</code> (motif), qui explique pourquoi l'extension est appelée. Les constantes causales sont :</p>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <td class="header">Constante</td>
- <td class="header">Valeur</td>
- <td class="header">Description</td>
- </tr>
- <tr>
- <td><code>APP_STARTUP</code></td>
- <td>1</td>
- <td>L'application est démarrée.</td>
- </tr>
- <tr>
- <td><code>APP_SHUTDOWN</code></td>
- <td>2</td>
- <td>L'application est fermée.</td>
- </tr>
- <tr>
- <td><code>ADDON_ENABLE</code></td>
- <td>3</td>
- <td><span class="short_text" id="result_box" lang="fr"><span>Le module complémentaire est activé.</span></span></td>
- </tr>
- <tr>
- <td><code>ADDON_DISABLE</code></td>
- <td>4</td>
- <td>Le module complémentaire est désactivé. (également <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=620541">envoyé pendant la désinstallation</a>)</td>
- </tr>
- <tr>
- <td><code>ADDON_INSTALL</code></td>
- <td>5</td>
- <td>Le module complémentaire est installé.</td>
- </tr>
- <tr>
- <td><code>ADDON_UNINSTALL</code></td>
- <td>6</td>
- <td>Le module complémentaire est désinstallé.</td>
- </tr>
- <tr>
- <td><code>ADDON_UPGRADE</code></td>
- <td>7</td>
- <td>Le module complémentaire est mis à jour.</td>
- </tr>
- <tr>
- <td><code>ADDON_DOWNGRADE</code></td>
- <td>8</td>
- <td>Le module complémentaire est déclassé.</td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="Données_bootstrap"><a id="Données bootstrap" name="Données bootstrap">Données bootstrap</a></h2>
-
-<p><span id="result_box" lang="fr"><span>Chacun des points d'entrée est transmis à une structure de données simple contenant des informations utiles sur le module complémentaire "bootstrapé".</span> <span>Plus d'informations sur l'extension peuvent être obtenues en appelant</span></span> <code><a href="/en-US/docs/Addons/Add-on_Manager/AddonManager#getAddonByID()">AddonManager.getAddonByID()</a></code>. <span id="result_box" lang="fr"><span>Les données sont un objet JavaScript simple avec les propriétés suivantes :</span></span></p>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <td class="header">Propriété</td>
- <td class="header">Type</td>
- <td class="header">Description</td>
- </tr>
- <tr>
- <td><code>id</code></td>
- <td><code>chaîne de caractères</code></td>
- <td>L'ID du module complémentaire est "bootstrapé".</td>
- </tr>
- <tr>
- <td><code>version</code></td>
- <td><code>chaîne de caractères</code></td>
- <td>La version du module complémentaire est "bootstrapée".</td>
- </tr>
- <tr>
- <td><code>installPath <em>(chemin d'installation)</em></code></td>
- <td><code>nsIFile</code></td>
- <td><span id="result_box" lang="fr"><span>L'emplacement d'installation du module complémentaire est "bootstrapé".</span> <span>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.</span></span></td>
- </tr>
- <tr>
- <td><code>resourceURI </code><em>(URI ressource)</em></td>
- <td><code>nsIURI</code></td>
- <td><span id="result_box" lang="fr"><span>L'URI pointe sur la racine des fichiers complémentaires, il peut s'agir d'un URI <code>jar:</code> ou <code>file:</code> , selon que le module complémentaire est installé ou non.</span></span> {{ gecko_minversion_inline("7.0") }}</td>
- </tr>
- <tr>
- <td><code>oldVersion </code><em>(ancienne version)</em></td>
- <td><code>chaîne de caractères</code></td>
- <td>La précédente version installée, si le motif est <code>ADDON_UPGRADE</code> ou <code>ADDON_DOWNGRADE</code>, et si la méthode est <code>install</code> ou<code>startup</code>. {{ gecko_minversion_inline("22.0") }}</td>
- </tr>
- <tr>
- <td><code>newVersion </code><em>(nouvelle version)</em></td>
- <td><code>chaîne de caractères</code></td>
- <td>La version à installer, si le motif est <code>ADDON_UPGRADE</code> ou <code>ADDON_DOWNGRADE</code>, et si la méthode est <code>shutdown</code> ou <code>uninstall</code>. {{ gecko_minversion_inline("22.0") }}</td>
- </tr>
- </tbody>
-</table>
-
-<div class="note">
-<p><strong>Note :</strong> <span id="result_box" lang="fr"><span>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 </span></span> <code>startup</code> <span lang="fr"><span> est <code>APP_STARTUP</code> et la propriété <code>oldVersion</code> n'est pas définie.</span> <span>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.</span></span></p>
-</div>
-
-<h2 id="Débogueur_de_module_complémentaire">Débogueur de module complémentaire</h2>
-
-<p><span id="result_box" lang="fr"><span>A partir de Firefox 31, vous pouvez utiliser le <a href="https://developer.mozilla.org/fr/Add-ons/Add-on_Debugger">débogueur de module complémentaire</a> pour déboguer les modules complémentaires "bootstrapés".</span></span></p>
-
-<h2 id="Localisation_(L10n)">Localisation (L10n)</h2>
-
-<p><span id="result_box" lang="fr"><span>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é.</span></span></p>
-
-<h3 id="Fichiers_JS_et_JSM_-_Utilisation_des_fichiers_de_propriétés">Fichiers JS et JSM - Utilisation des fichiers de propriétés</h3>
-
-<p>Pour localiser vos fichiers .js et .jsm , vous avez à utiliser <a href="https://developer.mozilla.org/fr/docs/Mozilla/Tech/XUL/Tutoriel_XUL/Les_fichiers_de_propri%C3%A9t%C3%A9s">les fichiers de propriétés</a>.</p>
-
-<p>Le minimum absolument nécessaire est :</p>
-
-<ol>
- <li>Fichier : install.rdf</li>
- <li>Fichier : chrome.manifest</li>
- <li>Fichier : bootstrap.js</li>
- <li>Dossier : locale <em>(langue)</em>
- <ol>
- <li>Dossier : VALID_LOCALE_HERE <em>(localisation valide ici)</em>
- <ol>
- <li>Fichier : ANYTHING.properties <em>(toutes les propriétés)</em></li>
- </ol>
- </li>
- </ol>
- </li>
-</ol>
-
-<p><span id="result_box" lang="fr"><span>Dans le dossier "locale", vous devez disposer de dossiers pour chacune des langues que vous souhaitez fournir;</span> <span>chaque dossier doit être nommé avec un nom "locale" valide (exemple : fr).</span> <span>Dans ce dossier, doit exister un fichier de propriétés.</span> <span>Dans le fichier chrome.manifest, ces paramètres régionaux doivent être définis.</span> <span>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/</span></span></p>
-
-<p>Ici un exemple : <a href="https://github.com/Noitidart/l10n/tree/properties">GitHub :: l10n-properties</a> - <span id="result_box" lang="fr"><span>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.</span> <span>Vous pouvez tester différents "locale" en allant sur </span></span> about:config <span lang="fr"><span> et en changeant les préférences de general.useragent.locale, et en désactivant puis en réactivant le module complémentaire.</span></span></p>
-
-<h3 id="Fichiers_XUL_et_HTML_-_Utilisation_d'entités_à_partir_de_fichiers_DTD">Fichiers XUL et HTML - Utilisation d'entités à partir de fichiers DTD</h3>
-
-<p><span id="result_box" lang="fr"><span>Plusieurs pages HTML sont utilisées, mais elles ne peuvent pas être localisées avec des fichiers DTD.</span> <span>Il y a trois changements que vous devez faire :</span></span></p>
-
-<ol>
- <li><span id="result_box" lang="fr"><span>Vous devez changer l'extension du fichier HTML en</span></span> <code>.xhtml</code></li>
- <li>Le doctype <span id="result_box" lang="fr"><span>doit être défini pointant sur un fichier DTD dans votre dossier "locale", ainsi par exemple</span></span> : <code>&lt;!DOCTYPE html SYSTEM <span class="pl-s1">"chrome://l10n/locale/mozilla.dtd"</span>&gt;</code></li>
- <li>Vous devez ajouter l'attribut xmlns à la balise html, par exemple : <code>&lt;<span class="pl-ent">html</span> <span class="pl-e">xmlns</span>=<span class="pl-s1"><span class="pl-pds">"</span>http://www.w3.org/1999/xhtml<span class="pl-pds">"</span></span>&gt;</code></li>
- <li>Si vous avez plusieurs fichiers DTD lisez ceci : <a href="https://developer.mozilla.org/fr/docs/Utilisation_de_plusieurs_DTD">Utilisation de plusieurs DTD</a></li>
-</ol>
-
-<p><span class="short_text" id="result_box" lang="fr"><span>Le minimum nécessaire est</span></span> :</p>
-
-<ol>
- <li>Fichier : install.rdf</li>
- <li>Fichier : chrome.manifest</li>
- <li>Fichier : bootstrap.js</li>
- <li>Dossier : locale
- <ol>
- <li>Dossier : VALID_LOCALE_HERE
- <ol>
- <li>Fichier : ANYTHING.dtd</li>
- </ol>
- </li>
- </ol>
- </li>
-</ol>
-
-<p><span id="result_box" lang="fr"><span>Le fichier chrome.manifest doit inclure une définition pour le contenu, par exemple:</span></span> <code>content NAME_OF_YOUR_ADDON ./</code></p>
-
-<p>Le fichier chrome.manifest doit aussi inclure une ligne pointant sur le dossier "locale", <span class="short_text" id="result_box" lang="fr"><span>comme dans la section de propriété ci-dessus</span></span>, si vous avez un dossier nommé en-US dans le dossier "locale", le fichier chrome.manifest doit contenir : <code>locale NAME_OF_YOUR_ADDON en-US locale/en-US/</code></p>
-
-<p>ici un exemple de module complémentaire qui ouvre une page HTML et une page  XUL sur install : <a href="https://github.com/Noitidart/l10n/tree/c456cc82a8a66b6d552cd8c2299cd2babc383af0">GitHub :: l10n-xhtml-xul</a>. <span id="result_box" lang="fr"><span>Voici un exemple montrant comment utiliser une page HTML localisée en tant que page d'options</span></span> : <a href="https://github.com/Noitidart/l10n/tree/html-options">GitHub :: l10n-html-options</a>. Vous pouvez aller sur about:config et changer la valeur de la préférence <code>general.useragent.locale </code><code>en-US</code> par <code>en-GB</code> et recharger la page ouverte pour voir les changements sur les paramètres régionaux.</p>
-
-<h2 id="Plus_de_lecture">Plus de lecture</h2>
-
-<ul>
- <li><a href="https://developer.mozilla.org/fr/Add-ons/How_to_convert_an_overlay_extension_to_restartless">Comment convertir une extension superposée en redémarrage</a> un guide étape par étape. Quelques exemples de code sont fournis. La page est basée et étendue à partir du guide étape par étape de Dave Garrett <a class="external" href="https://flagfox.wordpress.com/2014/01/19/writing-restartless-addons/">convert an old overlay based extension into a restartless addon</a> <em>(<span id="result_box" lang="fr"><span>convertir une ancienne extension basée sur une superposition en un module complémentaire sans redémarrage).</span></span></em></li>
- <li>Dave Townsend fournit un code basique <a class="external" href="http://www.oxymoronical.com/blog/2011/01/Playing-with-windows-in-restartless-bootstrapped-extensions">charger l'interface utilisateur pour chaque fenêtre ouverte</a> (en) dans un module complémentaire "bootstrapé".</li>
- <li>Mark Finkle fournit quelques exemples simples de code pour <a class="external" href="http://starkravingfinkle.org/blog/2011/01/bootstrap-jones-adventures-in-restartless-add-ons/">modules complémentaires sans redémarrage dans Firefox mobile</a>, <a class="external" href="http://starkravingfinkle.org/blog/2011/01/restartless-add-ons-more-resources/">ajouter des ressources (comme la fenêtre d'options)</a> (en) pour les extensions "bootstrapées" et <a class="external" href="http://starkravingfinkle.org/blog/2011/01/restartless-add-ons-%e2%80%93-default-preferences/">utilisation des préférences par defaut</a> (en) sans fichier <code>default/preferences/prefs.js</code> .</li>
- <li>Kris Maglione écrit au sujet de <a class="external" href="http://maglione-k.users.sourceforge.net/bootstrapped.xhtml">les exigences pour les procédures de nettoyage</a> (en) dans les modules complémentaires "bootstrapés".</li>
- <li>Edward Lee montre quelques <a class="external" href="http://ed.agadak.net/2011/01/restartless-add-on-example-code">modèles de codage utiles et exemples</a> que vous pouvez utiliser dans votre module complémentaire "bootstrapé".</li>
- <li>Documentation pour <a href="https://developer.mozilla.org/fr/Add-ons/Inline_Options">Options en ligne</a> dans Firefox 7 et suivants.</li>
-</ul>
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
----
-<p>{{AddonSidebar}}</p>
-
-<p>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.</p>
-
-<p>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..</p>
-
-<h2 id="Est-ce_que_je_pourrai_un_jour_vendre_par_l'entremise_d'AMO">Est-ce que je pourrai un jour vendre par l'entremise d'AMO ?</h2>
-
-<p>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.</p>
-
-<h2 id="Qu'est-ce_que_tu_ne_peux_pas_faire">Qu'est-ce que tu ne peux pas faire ?</h2>
-
-<p>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 :</p>
-
-<ul>
- <li>Divulguez quand le paiement est requis pour activer n'importe quelle fonctionnalité dans votre poste.</li>
- <li>Fournissez une description facile à lire de toute information recueillie par votre extension.</li>
- <li>S'assurer que tous les mécanismes de monétisation sont conformes aux politiques de divulgation, de collecte et de gestion des données.</li>
- <li>Fournir un mécanisme clair de contrôle de l'utilisateur (et opt-in pour les données personnelles) pour toutes les fonctions de monétisation lors de l'installation ou de la mise à jour de l'extension.</li>
- <li>Collecte uniquement les données essentielles nécessaires au fonctionnement du mécanisme de monétisation.</li>
- <li>Identifiez toute publicité injectée dans une page Web comme provenant de l'extension.</li>
- <li>Ne pas inclure les mineurs de cryptocurrency ou des fonctionnalités similaires.</li>
- <li>Identifier les promotions d'affiliation comme faisant partie de l'extension. Toutefois, il est interdit de modifier le contenu du site Web ou de faciliter les redirections afin d'inclure des balises promotionnelles d'affiliation.</li>
-</ul>
-
-<p>Pour plus de détails, consultez les sections <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/AMO/Policy/Reviews#Content">contenu</a> et <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/AMO/Policy/Reviews#Monetization">monétisation</a> des politiques complémentaires.</p>
-
-<h2 id="Que_pouvez-vous_faire">Que pouvez-vous faire ?</h2>
-
-<p>Il y a trois approches que vous pouvez adopter pour monétiser l'extension de votre navigateur :</p>
-
-<ul>
- <li>Facturation des fonctions</li>
- <li>Affichage d'annonces</li>
- <li>Demander des dons</li>
-</ul>
-
-<h3 id="Facturation_des_fonctions">Facturation des fonctions</h3>
-
-<p>Il existe de nombreuses approches que vous pouvez prendre pour facturer les fonctionnalités de votre extension de navigateur, vous pouvez par exemple :</p>
-
-<ul>
- <li>Placez toutes vos fonctions derrière un mur payant.</li>
- <li>Offrez des fonctions de base gratuitement et placez des fonctions améliorées derrière un mur payant.</li>
- <li>Offrir un certain nombre d'utilisations gratuites d'une fonction ou l'utilisation gratuite de cette fonction pendant un certain temps avant de la placer derrière un mur payant.</li>
-</ul>
-
-<p>À 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.</p>
-
-<h4 id="Choisir_un_fournisseur_de_paiement">Choisir un fournisseur de paiement</h4>
-
-<p>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 :</p>
-
-<ul>
- <li>Offrent-ils à la fois des paiements uniques et des abonnements ?</li>
- <li>Offrent-ils des mécanismes pour générer des clés de licence ou émettre des clés de licence à partir d'une liste ?</li>
- <li>Est-ce qu'ils traitent dans les devises les plus populaires parmi mes utilisateurs ?</li>
- <li>Quels sont les types de paiement pris en charge ? (N'oubliez pas que les cartes de crédit ne sont pas nécessairement courantes dans tous les marchés du monde.)</li>
- <li>Est-ce qu'ils s'occupent de toutes les questions relatives à la taxe d'achat pour moi ?</li>
-</ul>
-
-<h4 id="Choix_de_la_fréquence_de_paiement">Choix de la fréquence de paiement</h4>
-
-<p>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.</p>
-
-<h4 id="Mise_en_œuvre_d'un_mécanisme_de_paiement_et_d'octroi_de_licences">Mise en œuvre d'un mécanisme de paiement et d'octroi de licences</h4>
-
-<p>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.</p>
-
-<p>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 :</p>
-
-<ul>
- <li>Vendre aux utilisateurs une licence à vie avec une clé de licence privée.</li>
- <li>Sur un serveur approprié, stockez les détails de la clé de licence et une adresse e-mail associée.</li>
- <li>Dans le navigateur, stockez la clé de licence avec un code de hachage de la clé et certaines données privées de l'utilisateur, telles qu'un code PIN.</li>
- <li>Lorsque la fonction payante est utilisée, vérifiez si le code de hachage est valide. Si le code de hachage n'est pas valide, demandez au serveur d'envoyer un e-mail à l'adresse enregistrée avec la clé de licence afin de revalider (c'est-à-dire recalculer et enregistrer) le code de hachage. Cela empêche que la clé de licence soit largement partagée.</li>
-</ul>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<h4 id="Conversion_de_la_gratuité_en_paiement">Conversion de la gratuité en paiement</h4>
-
-<p>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.</p>
-
-<h3 id="Affichage_d'annonces">Affichage d'annonces</h3>
-
-<p>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.</p>
-
-<p>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 :</p>
-
-<ul>
- <li>Injection d'annonces dans des pages Web. Dans ce cas d'utilisation, vous modifiez une page Web consultée pour injecter des annonces ou modifier des cibles publicitaires existantes. Il peut s'agir à la fois de pages générées par l'extension de votre navigateur et de pages provenant de sites Web tiers dont l'extension de navigateur est installée. La pratique consistant à modifier les pages Web de tiers est autorisée par la plupart des magasins d'extension de navigateur, y compris AMO et le Chrome Web Store. Cependant, la résistance de l'utilisateur aux extensions de navigateur qui modifient les pages de tiers peut être élevée et peut entraîner des critiques négatives et des désinstallations.</li>
- <li>La plupart des programmes publicitaires n'autorisent pas cette méthode (ils vérifient le référent au niveau de la cible du lien) en raison du risque de fraude, à travers l'extension générant des clics publicitaires. Lorsqu'un fournisseur de publicité autorise ce mécanisme, il est probable qu'il vous demandera d'examiner votre extension. Si vous pouvez trouver un fournisseur, l'avantage de ce mécanisme, en particulier lorsque vous indiquez clairement que vous financez le développement de votre extension de navigateur, est qu'il est relativement bien toléré par les utilisateurs.</li>
- <li>Afficher des annonces dans les pages Web à partir du site d'extension. Dans ce cas, vous incluriez de la publicité dans le site Web de votre extension et afficheriez ensuite ces pages déclenchées par des événements appropriés dans l'extension du navigateur. Des exemples de déclencheurs appropriés incluent l'installation, la mise à jour ou la désinstallation de l'extension du navigateur, ainsi que l'aide, les meilleures pratiques, des trucs et astuces ou des pages similaires ouvertes depuis l'extension du navigateur. Vous devriez pouvoir utiliser n'importe quel programme publicitaire avec cette méthode.</li>
-</ul>
-
-<h4 id="Choisir_un_programme_publicitaire">Choisir un programme publicitaire</h4>
-
-<p>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 :</p>
-
-<ul>
- <li>Le service dispose-t-il d'un bon inventaire publicitaire pour les pays où vivent mes utilisateurs ?</li>
- <li>Le service jouit-il d'une bonne réputation en matière de paiement rapide et régulier ?</li>
- <li>Est-ce que le service me permet d'inclure des annonces dans l'interface d'extension de mon navigateur ?</li>
- <li>Quelles options le service offre-t-il pour générer des revenus, par exemple des impressions publicitaires, des clics ou autres ?</li>
- <li>Le service me permet-il de filtrer les annonces pour qu'elles soient pertinentes pour mes utilisateurs ?</li>
- <li>Quelles sont les tailles et les modes d'affichage des publicités proposées par le service ?</li>
-</ul>
-
-<p>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.</p>
-
-<h4 id="Meilleures_pratiques_pour_l'affichage_des_annonces">Meilleures pratiques pour l'affichage des annonces</h4>
-
-<p>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.</p>
-
-<ul>
- <li>Précisez clairement que l'extension de votre navigateur est financée par la publicité, par exemple dans sa description AMO. Les utilisateurs sont plus enclins à tolérer les publicités s'ils savent qu'ils s'y attendent.</li>
- <li>Utilisez les annonces interstitielles (publicités qui s'emparent d'une page entière et interrompent le flux de l'extension) avec précaution. Recherchez les événements où le flux est naturellement interrompu, comme les transitions entre les niveaux dans les jeux ou au début du téléchargement d'un fichier. Pensez également à rejeter automatiquement ces annonces.</li>
- <li>Là où votre réseau publicitaire le permet, ciblez l'audience de votre extension.</li>
- <li>Ne rendez pas les publicités trop intrusives.</li>
-</ul>
-
-<h3 id="Demander_des_dons">Demander des dons</h3>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<p>Il existe un certain nombre de plates-formes que vous pouvez utiliser pour fournir des services de paiement pour les dons, y compris :</p>
-
-<ul>
- <li><a href="http://liberapay.com">liberapay.com</a>—une plateforme open source, financée par des dons, conçue pour gérer les contributions récurrentes aux créateurs de Commons.</li>
- <li><a href="http://micropayment.de">micropayment.de</a>—un fournisseur de paiement commercial offrant des fonctionnalités pour les dons uniques et récurrents.</li>
- <li><a href="http://opencollective.com">opencollective.com</a>—une plateforme open source, financée par les sponsors, conçue pour gérer le remboursement des dépenses au sein des collectifs.</li>
- <li><a href="http://patreon.com">patreon.com</a>—une plateforme commerciale axée sur la génération de revenus pour les créateurs à partir d'abonnements réguliers.</li>
- <li><a href="http://paypal.com">paypal.com</a>—une plateforme commerciale supportant les dons uniques et récurrents.</li>
- <li><a href="http://paypal.me">paypal.me</a>—un add-on à PayPal qui fournit un lien simple vers une page de paiement où les utilisateurs peuvent faire des dons uniques.</li>
-</ul>
-
-<p>Lorsque vous choisissez un fournisseur de plateforme de dons, tenez compte de ce qui suit  :</p>
-
-<ul>
- <li>Prévoit-il des paiements dans les devises les plus susceptibles d'être utilisées par vos utilisateurs ?</li>
- <li>Quel pourcentage de vos dons le site retient-il comme frais de gestion ?</li>
- <li>Est-ce que le fournisseur me protège contre la fraude au paiement ?</li>
- <li>Est-ce que le suivi de l'activité du fournisseur a entraîné l'annulation des abonnements ?</li>
-</ul>
-
-<p>Avec les extensions de navigateur pour Firefox, vous avez deux façons de demander des dons : par AMO et par votre extension.</p>
-
-<h4 id="Demande_de_dons_par_l'entremise_de_l'AMO">Demande de dons par l'entremise de l'AMO</h4>
-
-<p>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 :</p>
-
-<ul>
- <li>Créez un compte auprès d'un des fournisseurs pris en charge : <a href="http://liberapay.com">liberapay.com</a>,<a href="http://micropayment.de"> micropayment.de</a>,<a href="http://opencollective.com"> opencollective.com</a>,<a href="http://patreon.com"> patreon.com</a>,<a href="http://paypal.com"> paypal.com</a>,<a href="http://paypal.me"> or paypal.me</a>.</li>
- <li>Obtenez le lien vers votre page de dons.</li>
- <li>Dans le hub du développeur AMO, pour l'extension web ou le thème auquel vous voulez ajouter un bouton de contributions, cliquez sur Modifier les détails.</li>
- <li>Dans la section Informations de base, ajoutez le lien de votre page de dons à l'URL Contributions.<br>
- <img alt="The field in an extension's or theme's Basic information section where the URL of a donations page is entered." src="https://mdn.mozillademos.org/files/16252/Contributions_URL.png" style="height: 340px; width: 2174px;"></li>
-</ul>
-
-<p>Une section de contribution est alors ajoutée à la page AMO de votre poste.</p>
-
-<p><img alt="Example extension page on AMO highlighting the contribution next section" src="https://mdn.mozillademos.org/files/16251/Contribute_now.png" style="height: 643px; width: 723px;"></p>
-
-<h4 id="Demander_des_dons_à_partir_de_l'extension_de_votre_navigateur">Demander des dons à partir de l'extension de votre navigateur</h4>
-
-<p>Pour ce faire, vous ajoutez un bouton de don ou un lien vers un endroit approprié dans votre extension.</p>
-
-<h4 id="Bonnes_pratiques">Bonnes pratiques</h4>
-
-<p>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 :</p>
-
-<ul>
- <li>Lier les demandes de dons aux caractéristiques que l'utilisateur est susceptible d'utiliser régulièrement ou leur donner une "valeur" significative.</li>
- <li>Donner à l'utilisateur une option claire pour fermer une demande de don.</li>
- <li>Si possible, désactivez les demandes de dons une fois que l'utilisateur a donné.</li>
- <li>Si vous demandez des dons uniques, ne redémarrez les demandes de dons qu'après une mise à niveau majeure, et identifiez les caractéristiques nouvelles ou améliorées dans la demande.</li>
-</ul>
-
-<p>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.</p>
-
-<h2 id="Offres_non_sollicitées">Offres non sollicitées</h2>
-
-<p>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 !"</p>
-
-<p>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.</p>
-
-<h2 id="Comment_puis-je_maximiser_mon_revenu">Comment puis-je maximiser mon revenu ?</h2>
-
-<p>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 :</p>
-
-<ul>
- <li>implémenter l'extension de votre navigateur sur autant de plateformes que possible, au minimum Firefox et Chrome.</li>
- <li>se concentrer sur les fonctionnalités et la qualité de l'extension de votre navigateur, les extensions de mauvaise qualité retiennent rarement un nombre significatif d'utilisateurs.</li>
- <li>engagez autant que possible le dialogue avec vos utilisateurs par le biais des médias sociaux, des forums et en répondant aux demandes d'assistance et aux retours d'information.</li>
-</ul>
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
----
-<p>{{AddonSidebar}}</p>
-
-<p>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é.</p>
-
-<h2 id="Raisons_du_retrait_d'une_extension">Raisons du retrait d'une extension</h2>
-
-<p>Il y a deux raisons principales pour lesquelles vous pourriez vouloir mettre fin à votre extension :</p>
-
-<ul>
- <li>vous envisagez de supprimer le support pour un produit ou un service. Dans ce cas, vous devez supprimer l'extension des navigateurs lorsque la prise en charge cesse.</li>
- <li>vous remplacez l'extension par une nouvelle, qui n'est pas une mise à niveau directe. Dans ce cas, vous devez encourager les utilisateurs existants à installer la nouvelle extension avant de supprimer l'ancienne extension des navigateurs.</li>
-</ul>
-
-<h2 id="Étapes_à_suivre_pour_retirer_une_extension">Étapes à suivre pour retirer une extension</h2>
-
-<p>Lorsque vous souhaitez retirer une extension, envisagez de prendre les mesures suivantes :</p>
-
-<ol>
- <li>Concevoir un calendrier pour la fin de vie de votre extension<br>
- Envisagez d'inclure les étapes suivantes dans un calendrier de retrait de votre extension :
- <ol>
- <li>publier le calendrier de fin de vie de votre poste, y compris une explication des raisons pour lesquelles vous retirez votre poste.</li>
- <li>publier une mise à jour qui supprime les copies installées de votre extension.</li>
- <li>rendre l'extension indisponible pour les nouvelles installations, en rendant sa liste AMO invisible.</li>
- </ol>
- </li>
- <li>Publier des conseils que vous prévoyez de mettre fin à votre extension<br>
- Considérez les options suivantes pour informer les gens de votre intention de prendre votre extension :
- <ol>
- <li>mettez à jour la page AMO de votre extension avec son calendrier de fin de vie.</li>
- <li>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")}}.</li>
- <li>communiquez le calendrier par le biais des médias sociaux, des forums ou, si possible, par courrier électronique.</li>
- </ol>
- </li>
- <li>Publier une version finale, auto-supprimée de votre extension<br>
- 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.</li>
- <li>Rendez votre liste AMO invisible pour éviter de nouvelles installations<br>
- Pour masquer la liste des AMO de votre extension
- <ol>
- <li>Ouvrez la liste de votre extension dans AMO.</li>
- <li>Dans le menu de la barre latérale, ouvrez <strong>Gérer le statut &amp; les  versions</strong>.</li>
- <li>Dans la section Visibilité de la liste, cliquez sur <strong>Invisible</strong>.</li>
- </ol>
- </li>
-</ol>
-
-<p>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.</p>
-
-<h2 id="Calendrier_de_départ_suggéré">Calendrier de départ suggéré</h2>
-
-<p>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 :</p>
-
-<ul>
- <li>Si vous ne fournissez pas une extension de remplacement, vous pourriez envisager une période de préavis relativement courte, peut-être quelques semaines.</li>
- <li>Si vous remplacez l'extension par une autre version, vous souhaiterez peut-être prévoir une période de préavis plus longue, avec des rappels réguliers sur la nouvelle extension. Dans ce cas, vous pouvez laisser des semaines ou des mois entre le conseil de fin de vie initial et la suppression finale des copies installées.</li>
-</ul>
-
-<p>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 <strong>Afficher le tableau de bord des statistiques</strong> dans le menu contextuel.</p>
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
----
-<h2 id="Présentation">Présentation</h2>
-
-<p>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...</p>
-
-<p>Le format du manifest d'installation est RDF/XML.</p>
-
-<p>Le fichier doit être appelé <code>install.rdf</code> et se trouver au niveau le plus haut du fichier <a href="https://developer.mozilla.org/fr/docs/XPI">XPI</a> de l'add-on.</p>
-
-<h2 id="Disposition">Disposition</h2>
-
-<p>La disposition de base d'un Manifest d'installation est comme cela:</p>
-
-<div style="overflow: hidden;">
-<pre class="brush:xml;auto-links:false">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:em="http://www.mozilla.org/2004/em-rdf#"&gt;
- &lt;Description about="urn:mozilla:install-manifest"&gt;
- &lt;!-- properties --&gt;
- &lt;/Description&gt;
-&lt;/RDF&gt;
-</pre>
-</div>
-
-<p>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.</p>
-
-<h2 id="Référence_de_Propriété_Requise">Référence de Propriété Requise</h2>
-
-<p>Votre Manifest d'installation doit spécifier ces propriétés autrement votre add-on ne s'installera pas.</p>
-
-<h3 id="id">id</h3>
-
-<p>L'ID de l'extension, qui doit être l'une des suivantes:</p>
-
-<ul>
- <li><a href="/en-US/docs/Generating_GUIDs" title="Generating_GUIDs">GUID</a> (Firefox 1.0)</li>
- <li>{{ Fx_minversion_inline(1.5) }} Une chaîne formatée ainsi: <code class="plain">extensionname@example.org</code></li>
-</ul>
-
-<p><span class="tlid-translation translation" lang="fr"><span title="">Ce dernier format est considérablement plus facile à générer et à manipuler.</span> <span title="">Firefox 1.5 vérifie que votre <code>id</code> correspond à un format ou à l'autre et refusera d'installer des addons contenant des <code>id</code> mal formés.</span> <span title="">Cependant, vous ne devriez pas utiliser une adresse email réelle pour votre <code>id</code>, car cela pourrait attirer des spams.</span></span></p>
-
-<p><strong>Exemples</strong></p>
-
-<pre class="brush:xml;auto-links:false">&lt;em:id&gt;extensionname@example.org&lt;/em:id&gt;
-
-&lt;em:id&gt;{daf44bf7-a45e-4450-979c-91cf07434c3d}&lt;/em:id&gt;</pre>
-
-<h3 id="version">version</h3>
-
-<p>A version string identifying the version of the add-on being supplied.</p>
-
-<p>For Firefox/Thunderbird 1.0, the format must conform to the rules specified in <a href="/en-US/docs/Extension_Versioning,_Update_and_Compatibility" title="Extension_Versioning,_Update_and_Compatibility">Extension Versioning, Update and Compatibility</a>. For Firefox/Thunderbird 1.5, see <a href="/en-US/docs/Toolkit_version_format" title="Toolkit_version_format">Toolkit version format</a>.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:version&gt;2.0&lt;/em:version&gt;
-
-&lt;em:version&gt;1.0.2&lt;/em:version&gt;
-
-&lt;em:version&gt;0.4.1.2005090112&lt;/em:version&gt;</pre>
-
-<p><strong>Firefox 1.5 / XULRunner 1.8</strong> - 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.</p>
-
-<p><strong>For addons hosted on addons.mozilla.org</strong> - Mozilla's update website may repackage your add-on and correct or reject malformed version strings.</p>
-
-<h3 id="type">type</h3>
-
-<p>An integer value representing the type of add-on.</p>
-
-<table>
- <tbody>
- <tr>
- <td>2</td>
- <td>Extensions</td>
- </tr>
- <tr>
- <td>4</td>
- <td>Themes</td>
- </tr>
- <tr>
- <td>8</td>
- <td>Locale</td>
- </tr>
- <tr>
- <td>32</td>
- <td><a href="/en-US/docs/Multiple_Item_Packaging" title="Multiple_Item_Packaging">Multiple Item Package</a></td>
- </tr>
- <tr>
- <td>64</td>
- <td>Spell check dictionary</td>
- </tr>
- <tr>
- <td>128</td>
- <td><a href="https://wiki.mozilla.org/Telemetry/Experiments" title="Telemetry Experiments">Telemetry Experiment</a></td>
- </tr>
- </tbody>
-</table>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:type&gt;2&lt;/em:type&gt;</pre>
-
-<p>{{ 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.</p>
-
-<p>{{ Fx_minversion_inline(3) }} Firefox 2 and previous supported a value of 16 to represent plug-ins. In Firefox 3 this has been removed.</p>
-
-<h3 id="targetApplication">targetApplication</h3>
-
-<p>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 (<code>&lt;em:id&gt;</code>) specified (for a comprehensive list of application IDs and valid min/maxVersions for them see <a class="link-https" href="https://addons.mozilla.org/en-US/firefox/pages/appversions">Valid application versions for add-on developers</a>), from the minimum version (<code>&lt;em:minVersion&gt;</code>) up to and including the maximum version (<code>&lt;em:maxVersion&gt;</code>). These version strings are formatted in the same fashion as the <a href="#version"><code>version</code> property</a> 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.</p>
-
-<p><code>id</code>, <code>minVersion</code>, and <code>maxVersion</code> are all required.</p>
-
-<div class="note"><strong>Note:</strong> Extensions compatible with Firefox 3.5 should specify a <code>maxVersion</code> of<code> 3.5.*</code>, so that they are automatically compatible with security and stability updates. For Firefox 3.0, a <code>maxVersion</code> of<code> 3.0.*</code> should be used. Extensions compatible only with Firefox or Thunderbird 2 should specify a <code>maxVersion</code> of <code>2.0.0.*</code>.</div>
-
-<p>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).</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:targetApplication&gt;
- &lt;Description&gt;
- &lt;em:id&gt;{ec8030f7-c20a-464f-9b0e-13a3a9e97384}&lt;/em:id&gt; &lt;!--Firefox--&gt;
- &lt;em:minVersion&gt;1.5&lt;/em:minVersion&gt;
- &lt;em:maxVersion&gt;3.0.*&lt;/em:maxVersion&gt;
- &lt;/Description&gt;
-&lt;/em:targetApplication&gt;</pre>
-
-<p>{{ Fx_minversion_inline(3) }} Gecko 1.9 based applications allow you to use the special <code>targetApplication </code>id <code class="plain">toolkit@mozilla.org</code> to say that the add-on is compatible with any toolkit app with a toolkit version matching the <code>minVersion</code> and <code>maxVersion</code>.</p>
-
-<h3 id="name">name</h3>
-
-<p>The name of the add-on; intended for display in the UI.</p>
-
-<p><strong>Examples </strong></p>
-
-<pre class="brush:xml">&lt;em:name&gt;My Extension&lt;/em:name&gt;</pre>
-
-<h2 id="Optional_Property_Reference">Optional Property Reference</h2>
-
-<p>You may need to supply these properties, depending on the capabilities of your add-on.</p>
-
-<h3 id="bootstrap">bootstrap</h3>
-
-<p>{{ 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 <code>false</code>. For more information, see <a href="/en-US/docs/Extensions/Bootstrapped_extensions" title="Extensions/Bootstrapped extensions">Bootstrapped extensions</a>.</p>
-
-<h3 id="unpack">unpack</h3>
-
-<p>{{ 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:</p>
-
-<ul>
- <li>Binary <a href="/en-US/docs/XPCOM" title="XPCOM">XPCOM</a> components</li>
- <li><a href="/en-US/docs/Shipping_a_plugin_as_a_Toolkit_bundle" title="Shipping a plugin as a Toolkit bundle">Plugins</a></li>
- <li><a href="/en-US/docs/Creating_MozSearch_plugins" title="Creating MozSearch plugins">Search plugins</a></li>
- <li>DLLs loaded with <a href="/en-US/docs/Mozilla/js-ctypes" title="js-ctypes">ctypes</a></li>
- <li>Dictionaries</li>
- <li>Window icons</li>
-</ul>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;Description about="urn:mozilla:install-manifest"&gt;
- &lt;em:id&gt;extension@mysite.com&lt;/em:id&gt;
- &lt;em:unpack&gt;true&lt;/em:unpack&gt;
- ...
-&lt;/Description&gt;</pre>
-
-<h3 id="skinnable">skinnable</h3>
-
-<p>{{ 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:</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:skinnable&gt;true&lt;/em:skinnable&gt;
-</pre>
-
-<h3 id="localized">localized</h3>
-
-<p>{{ 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 <code>em:locale</code> which indicates which locales to use this information for.</p>
-
-<p><strong>Examples</strong></p>
-
-<p>This declares a set of add-on metadata to be displayed when the application is running in the de-DE locale.</p>
-
-<pre class="brush:xml">&lt;em:localized&gt;
- &lt;Description&gt;
- &lt;em:locale&gt;de-DE&lt;/em:locale&gt;
- &lt;em:name&gt;Tab Sidebar&lt;/em:name&gt;
- &lt;em:description&gt;Zeigt in einer Sidebar Vorschaubilder der Inhalte aller offenen Tabs an.&lt;/em:description&gt;
- &lt;/Description&gt;
-&lt;/em:localized&gt;</pre>
-
-<p>The following properties which are described elsewhere in this page can be included in the localized property:</p>
-
-<ul>
- <li>name</li>
- <li>description</li>
- <li>creator</li>
- <li>homepageURL</li>
- <li>developer</li>
- <li>translator</li>
- <li>contributor</li>
-</ul>
-
-<p>More documentation can be found at <a href="/en-US/docs/Localizing_extension_descriptions" title="Localizing_extension_descriptions">Localizing extension descriptions</a>.</p>
-
-<h3 id="description">description</h3>
-
-<p>A short description of the add-on - intended for display in the user interface. This description should fit on one short line of text.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:description&gt;Advanced foo tools.&lt;/em:description&gt;</pre>
-
-<h3 id="creator">creator</h3>
-
-<p>The name of the creator/principal developer - intended for display in the user interface.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:creator&gt;John Doe&lt;/em:creator&gt;</pre>
-
-<p>or</p>
-
-<pre class="brush:xml">&lt;em:creator&gt;CoolExtension Team&lt;/em:creator&gt;</pre>
-
-<h3 id="developer">developer</h3>
-
-<p>{{ Fx_minversion_inline(2) }} The name(s) of co-developers. You may specify more than one of this value to specify multiple developers.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:developer&gt;Jane Doe&lt;/em:developer&gt;
-&lt;em:developer&gt;Koos van der Merwe&lt;/em:developer&gt;
-</pre>
-
-<h3 id="translator">translator</h3>
-
-<p>{{ Fx_minversion_inline(2) }} The name(s) of translators. You may specify more than one of this value to specify multiple translators.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:translator&gt;Janez Novak&lt;/em:translator&gt;
-&lt;em:translator&gt;Kari Nordmann&lt;/em:translator&gt;
-</pre>
-
-<h3 id="contributor">contributor</h3>
-
-<p>The name(s) of additional contributors. You may specify more than one of this value to specify multiple contributors.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:contributor&gt;John Doe&lt;/em:contributor&gt;
-
-&lt;em:contributor&gt;John Doe&lt;/em:contributor&gt;
-&lt;em:contributor&gt;Jane Doe&lt;/em:contributor&gt;
-&lt;em:contributor&gt;Elvis Presley&lt;/em:contributor&gt;
-</pre>
-
-<h3 id="homepageURL">homepageURL</h3>
-
-<p>A link to the add-on's home page - intended for display in the user interface.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml;auto-links:false">&lt;em:homepageURL&gt;http://www.foo.com/&lt;/em:homepageURL&gt;
-</pre>
-
-<h3 id="updateURL">updateURL</h3>
-
-<p>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.</p>
-
-<div class="note"><strong>Note:</strong> It is strongly recommended that the <code>updateURL</code> be an HTTPS (secure) link. Non-secure update URLs can be hijacked by a malicious <code>update.rdf</code> file, enabling malware to infiltrate the user's computer. <strong>Alternatively, you could host your extension on </strong><a class="external" href="http://addons.mozilla.org"><strong>AMO</strong></a><strong> and leave out the <code>updateURL</code> completely.</strong> This provides secure updates automatically.</div>
-
-<p>{{ Fx_minversion_inline(3) }} For security reasons, Gecko 1.9 applications <strong>require</strong> that if you specify an <code>updateURL</code>, it must be an https URL, or you must include an <code><a href="#updateKey">updateKey</a></code>.</p>
-
-<p>Your server must send this file as <code>text/rdf</code>, <code>text/xml</code> or <code>application/rdf+xml</code> or the update checker may not work.</p>
-
-<p>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:</p>
-
-<table>
- <tbody>
- <tr>
- <td><code>%REQ_VERSION%</code></td>
- <td>The version of the request. Currently 1</td>
- </tr>
- <tr>
- <td><code>%ITEM_ID%</code></td>
- <td>The <code>id</code> of the addon being updated</td>
- </tr>
- <tr>
- <td><code>%ITEM_VERSION%</code></td>
- <td>The <code>version</code> of the addon being updated</td>
- </tr>
- <tr>
- <td><code>%ITEM_MAXAPPVERSION%</code></td>
- <td>The <code>maxVersion</code> of the <code>targetApplication</code> object corresponding to the current application for the addon being updated.</td>
- </tr>
- <tr>
- <td><code>%ITEM_STATUS%</code></td>
- <td>{{ Fx_minversion_inline(2) }} Comma separated list of the add-ons operating status in the application. Contains at the least either <code>userEnabled</code> or <code>userDisabled</code> plus any number of <code>incompatible</code>, <code>blockslisted</code> or <code>needsDependencies</code>.</td>
- </tr>
- <tr>
- <td><code>%APP_ID%</code></td>
- <td>The <code>id</code> of the current application</td>
- </tr>
- <tr>
- <td><code>%APP_VERSION%</code></td>
- <td>The <code>version</code> of the application to check for updates for</td>
- </tr>
- <tr>
- <td><code>%CURRENT_APP_VERSION%</code></td>
- <td>{{ Fx_minversion_inline(3.5) }} The <code>version</code> of the current application</td>
- </tr>
- <tr>
- <td><code>%APP_OS%</code></td>
- <td>{{ Fx_minversion_inline(1.5) }} The value of <code><a href="/en-US/docs/OS_TARGET" title="OS_TARGET">OS_TARGET</a></code> from the Firefox build system, identifying the operating system being used.</td>
- </tr>
- <tr>
- <td><code>%APP_ABI%</code></td>
- <td>{{ Fx_minversion_inline(1.5) }} The value of the <code><a href="/en-US/docs/XPCOM_ABI" title="XPCOM_ABI">TARGET_XPCOM_ABI</a></code> value from the Firefox build system, identifying the compiler/architecture combination used to compile the current application.</td>
- </tr>
- <tr>
- <td><code>%APP_LOCALE%</code></td>
- <td>{{ Fx_minversion_inline(3) }} The current application's locale.</td>
- </tr>
- <tr>
- <td><code>%UPDATE_TYPE%</code></td>
- <td>{{ Fx_minversion_inline(4) }} <code>UPDATE_TYPE_COMPATIBILITY(32)</code>, <code>UPDATE_TYPE_NEWVERSION(64)</code></td>
- </tr>
- <tr>
- <td><code>%COMPATIBILITY_MODE%</code></td>
- <td>{{ Fx_minversion_inline(10) }} related to <a href="/en-US/docs/Firefox/Updating_add-ons_for_Firefox_10#Compatible_by_default" title="https://developer.mozilla.org/en-US/docs/Firefox/Updating_add-ons_for_Firefox_10#Compatible_by_default">default to compatible</a>, values could be <code>normal</code>, <code>ignore</code> or <code>strict</code>.</td>
- </tr>
- </tbody>
-</table>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml;auto-links:false">&lt;em:updateURL&gt;http://www.foo.com/update.cgi?id=%ITEM_ID%&amp;amp;version=%ITEM_VERSION%&lt;/em:updateURL&gt;
-&lt;em:updateURL&gt;http://www.foo.com/extension/windows.rdf&lt;/em:updateURL&gt;
-</pre>
-
-<p><strong>For add-ons hosted on addons.mozilla.org:</strong> You may not specify an <code>updateURL</code> property. By default, Mozilla applications using the Add-on Manager (such as Firefox and Thunderbird) will send update requests to <code>addons.mozilla.org</code> 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.</p>
-
-<p><strong>Format of the Update Manifest:</strong> The Update Manifest is a RDF/XML datasource. For an example of an update manifest, see <a href="/en-US/docs/Extension_Versioning,_Update_and_Compatibility#Update_RDF_Format" title="Extension_Versioning,_Update_and_Compatibility#Update_RDF_Format">Extension Versioning, Update and Compatibility</a>.</p>
-
-<h3 id="updateKey">updateKey</h3>
-
-<div>{{ Gecko_minversion_header(1.9) }} {{ Fx_minversion_header(3) }}</div>
-
-<p>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 <a href="/en-US/docs/McCoy" title="McCoy">McCoy</a> tool. Any line breaks and whitespace as part of this entry are ignored.</p>
-
-<pre class="brush:xml">&lt;em:updateKey&gt;MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj
- Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD
- NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf
- awB/zH4KaPiY3vnrzQIDAQAB&lt;/em:updateKey&gt;
-</pre>
-
-<h3 id="optionsURL">optionsURL</h3>
-
-<p>The <code>chrome://</code> 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.</p>
-
-<pre class="brush:xml">&lt;em:optionsURL&gt;chrome://myext/content/options.xul&lt;/em:optionsURL&gt;</pre>
-
-<p>{{ gecko_minversion_note("7", "In Firefox 7 you can also simply include your options XUL as a file named <code>options.xul</code>, in the base directory of the add-on.") }}</p>
-
-<p>{{ h3_gecko_minversion("optionsType", 7) }}</p>
-
-<p>The type of user-interface used for displaying the options. Accepted values are:</p>
-
-<table>
- <tbody>
- <tr>
- <td>1</td>
- <td>Opens optionsURL in a dialog box</td>
- </tr>
- <tr>
- <td>2</td>
- <td><a href="/en-US/docs/Extensions/Inline_Options" title="Extensions/Inline Options">Options are displayed inside the Add-on Manager</a></td>
- </tr>
- <tr>
- <td>3</td>
- <td>Opens optionsURL in a new tab (if the application supports that), or a dialog box</td>
- </tr>
- </tbody>
-</table>
-
-<p>optionsType defaults to 1 if there is an optionsURL included in install.rdf or 2 if there is no optionsURL and the file <code>options.xul</code> exists in the root of the add-on.</p>
-
-<pre class="brush:xml">&lt;em:optionsType&gt;2&lt;/em:optionsType&gt;
-</pre>
-
-<h4 id="Open_Options_in_New_Tab_Gecko_minversion_header(7)">Open Options in New Tab {{ Gecko_minversion_header(7) }}</h4>
-
-<p>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.</p>
-
-<pre class="brush:xml">&lt;em:optionsType&gt;3&lt;/em:optionsType&gt;
-&lt;em:optionsURL&gt;chrome://myaddon/content/options.html&lt;/em:optionsURL&gt;</pre>
-
-<p>This section here contains an example of localized HTML page as an option panel in a new tab: <a href="/en-US/Add-ons/Bootstrapped_extensions#Localization_%28L10n%29">Bootstrapped Extensions :: Localization (L10n)</a> (example linked to is: <a href="https://github.com/Noitidart/l10n/tree/html-options">GitHub :: l10n-html-options</a>)</p>
-
-<h4 id="Make_Options_Button_Execute_Arbitrary_Javascript">Make Options Button Execute Arbitrary Javascript</h4>
-
-<div class="note">
-<p>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</p>
-</div>
-
-<p>If the default methods offered by <code>optionsType</code> 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 <code>install.rdf</code> we would have:</p>
-
-<pre class="brush:xml">&lt;em:optionsType&gt;2&lt;/em:optionsType&gt;
-&lt;em:optionsURL&gt;javascript:Components.utils.import('resource://gre/modules/Services.jsm');Services.obs.notifyObservers(window, 'hellothisisyourcaptainspeaking', 'options'); window.close();&lt;/em:optionsURL&gt;</pre>
-
-<p>This sends a notification <code>hellothisisyourcaptainspeaking</code> and passes <code>window </code>to the listener. Notice the <code>window.close()</code> 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 <code>Services.jsm</code>. Now in your add-on have a listener that does this:</p>
-
-<pre class="brush: js">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.</pre>
-
-<h3 id="aboutURL">aboutURL</h3>
-
-<p>The<code> chrome://</code> URL of the extension's about dialog box. This is only useful to extensions. If this property is specified,  in the <code>about:addons</code> extensions list, the <code>About..</code>. link in the extension's context menu will show this dialog, rather than the default.</p>
-
-<div class="note">
-<p><strong>Note:</strong> As of {{Gecko("2.0")}}, the dialog receives the <code>Addon</code> object representing your add-on as a parameter.</p>
-</div>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:aboutURL&gt;<a class="external" rel="freelink">chrome://myext/content/about.xul</a>&lt;/em:aboutURL&gt;
-</pre>
-
-<h3 id="iconURL">iconURL</h3>
-
-<p>A <code>chrome://</code> 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.</p>
-
-<pre class="brush:xml">&lt;em:iconURL&gt;<a class="external" rel="freelink">chrome://myext/skin/icon.png</a>&lt;/em:iconURL&gt;
-</pre>
-
-<div class="note"><strong>Note:</strong> For the above example to work you will also have to add a <code>skin package</code> line to your <code>chrome.manifest</code> file. See <a href="/en-US/docs/Chrome_Registration#skin" title="Chrome_Registration#skin">Chrome Registration#skin</a>. Alternatively you can place your icon in the directory specified in your <code>content package</code> line.</div>
-
-<p>{{ gecko_minversion_note("1.9.2", "Starting in Gecko 1.9.2 (Firefox 3.6), you can also simply include your icon, named <code>icon.png</code>, 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 <code>iconURL</code> entry.") }}</p>
-
-<p>{{ h3_gecko_minversion("icon64URL", "2.0") }}</p>
-
-<p>A <code>chrome://</code> 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.</p>
-
-<pre class="brush:xml">&lt;em:icon64URL&gt;<a class="external" rel="freelink">chrome://myext/skin/icon64.png</a>&lt;/em:icon64URL&gt;
-</pre>
-
-<div class="note"><strong>Note:</strong> For the above example to work you will also have to add a <code>skin package</code> line to your <code>chrome.manifest</code> file. See <a href="/en-US/docs/Chrome_Registration#skin" title="Chrome_Registration#skin">Chrome Registration#skin</a>. Alternatively you can place your icon in the directory specified in your <code>content package</code> line.</div>
-
-<p>{{ gecko_minversion_note("2.0", "Starting in Gecko 2.0 (Firefox 4.0), you can also simply include your icon, named <code>icon64.png</code>, 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 <code>icon64URL</code> entry.") }}</p>
-
-<p>{{ h3_gecko_minversion("targetPlatform", "1.8") }}</p>
-
-<p>A string specifying a platform that the add-on supports. It contains either the value of <code><a href="/en-US/docs/OS_TARGET" title="OS_TARGET">OS_TARGET</a></code> alone or combined with <code><a href="/en-US/docs/XPCOM_ABI" title="XPCOM_ABI">TARGET_XPCOM_ABI</a></code>, separated by an underscore (_).</p>
-
-<p>You can specify multiple <code>targetPlatform</code> 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.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:targetPlatform&gt;WINNT_x86-msvc&lt;/em:targetPlatform&gt;
-
-&lt;em:targetPlatform&gt;Linux&lt;/em:targetPlatform&gt;
-
-&lt;em:targetPlatform&gt;Darwin_ppc-gcc3&lt;/em:targetPlatform&gt;
-
-&lt;em:targetPlatform&gt;SunOS_sparc-sunc&lt;/em:targetPlatform&gt;</pre>
-
-<p>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 <a href="/en-US/docs/XPCOM_ABI" title="XPCOM_ABI">ABI (s)</a> that you compiled the components with. If you want to include multiple versions of the components, you should also use <a href="/en-US/docs/Bundles#Platform-specific_Subdirectories" title="Bundles#Platform-specific_Subdirectories">Platform-specific Subdirectories</a>.</p>
-
-<p><strong>Notes</strong></p>
-
-<ul>
- <li>In the same manifest file, you could even mix values with and without ABI. If a value for the application's OS is encountered that requires any specific ABI, the ABI is considered important for that OS and the application will refuse to install the add-on if it does not find a matching OS/ABI combination. This means that if all of the above examples would occur in one manifest, the add-on will install on any Linux build of the application, regardless of its ABI, but not on a Windows Cygwin build.</li>
- <li>There may be builds of Firefox and Thunderbird which do not "know" their ABI (most likely ports to rare platforms, or non-official builds). These builds will refuse to install any addon that requires a specific ABI for their platform.</li>
-</ul>
-
-<p>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.</p>
-
-<p>{{ h3_gecko_minversion("strictCompatibility", "10.0") }}</p>
-
-<p>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 <code>false</code> meaning that the compatibility checking will not be performed against the max version.</p>
-
-<pre class="brush:xml">&lt;em:strictCompatibility&gt;true&lt;/em:strictCompatibility&gt;</pre>
-
-<p>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 <strong>do not</strong> 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).</p>
-
-<div class="note"><strong>Note:</strong> 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 <code>extensions.strictCompatibility</code> preference to <code>true</code>.</div>
-
-<div class="note">
-<p><strong>Note:</strong> 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.</p>
-</div>
-
-<p>{{ h3_gecko_minversion("multiprocessCompatible", "33.0") }}</p>
-
-<p>A Boolean value declaring whether this add-on is, or is not, compatible with <a href="/en-US/Add-ons/Working_with_multiprocess_Firefox">multiprocess Firefox</a>. If present and set to <code>true</code>, this flag instructs Firefox not to load various <a href="/en-US/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts#Compatibility_shims">compatibility shims</a> that enable many add-ons to work even when the add-on is not compatible with multiprocess Firefox:</p>
-
-<pre class="brush: xml">&lt;em:multiprocessCompatible&gt;true&lt;/em:multiprocessCompatible&gt;</pre>
-
-<p>The setting defaults to <code>false</code>, meaning that if you omit the property, the shims are loaded for your add-on.</p>
-
-<p>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 <code>true</code>,  and after that point incompatible add-ons will have to explicitly declare that they are not compatible.</p>
-
-<h2 id="Obsolete_Property_Reference">Obsolete Property Reference</h2>
-
-<p>These properties were required in older versions of the Add-on Manager, but have been replaced with newer and better mechanisms.</p>
-
-<h3 id="file">file</h3>
-
-<p><strong>Firefox 1.0</strong> This property pointed to a chrome <code>.jar</code> file that contains chrome packages that require registration with the Chrome Registry.</p>
-
-<p>The <code>&lt;em:file&gt;</code> property has a complex object value. The uri of the value is <code>urn:mozilla:extension:file:jarFile.jar</code> where <code>jarFile.jar</code> 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. <code>urn:mozilla:extension:file:directory</code>). In either case, the referenced chrome package file(s) must be placed in the <code>chrome</code> subdirectory of the XPI's top level.</p>
-
-<p>This object has a <code>package</code> property (with a path within the jar file or directory that leads to the location where the <code>contents.rdf</code> file responsible for registering that package is located), a <code>locale</code> property (ditto, but to register the locale) and a <code>skin</code> property (ditto, but to register the theme material).</p>
-
-<p>In extensions for Firefox 1.5, this property is no longer necessary: the <code><a href="/en-US/docs/Chrome_Registration" title="Chrome_Registration">chrome.manifest</a></code> 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.</p>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:file&gt;
- &lt;Description about="urn:mozilla:extension:file:myext.jar"&gt;
- &lt;em:package&gt;content/myext/&lt;/em:package&gt;
- &lt;em:locale&gt;locale/en-US/myext/&lt;/em:locale&gt;
- &lt;em:skin&gt;skin/classic/myext/&lt;em:skin&gt;
- &lt;/Description&gt;
-&lt;/em:file&gt;
-</pre>
-
-<p>An Install Manifest may specify multiple <code>file</code> properties, one for each jar file or subdirectory that contains chrome to register.</p>
-
-<h3 id="hidden">hidden</h3>
-
-<p><strong>Firefox 1.0</strong><strong> - 3.5</strong> A boolean value that when <code>true</code> 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.</p>
-
-<div class="note"><strong>Note:</strong> 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.</div>
-
-<p><strong>Examples</strong></p>
-
-<pre class="brush:xml">&lt;em:hidden&gt;true&lt;/em:hidden&gt;
-</pre>
-
-<h3 id="requires">requires</h3>
-
-<p><strong>Firefox 2.0 - 3.6.x</strong>. Other versions will ignore the restrictions and install the add-on regardless of the requirements.</p>
-
-<p>See <a class="link-https" href="https://groups.google.com/forum/#!topic/mozilla.dev.platform/u9QT2ZucV-c" title="https://groups.google.com/forum/#!topic/mozilla.dev.platform/u9QT2ZucV-c">Replacement for install.rdf property "requires"</a> discussion for rationale behind removing this feature and the suggested workaround.</p>
-
-<p><code>&lt;em:requires</code>&gt; has a similar syntax to the <code>&lt;em:targetApplication&gt;</code> tag (i.e. you must specify <code>&lt;em:id&gt;</code>, <code>&lt;em:minVersion&gt;</code>, <code>&lt;em:maxVersion&gt;</code> when using it). If the add-on specified by the <code>&lt;em:id&gt;</code> 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 <code>&lt;em:requires&gt;</code> 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 <code>&lt;em:targetApplication&gt;</code>. See <a href="https://wiki.mozilla.org/Extension_Dependencies" title="https://wiki.mozilla.org/Extension_Dependencies">Extension Dependencie</a>s for more details.</p>
-
-<h2 id="Glossary">Glossary</h2>
-
-<h2 id="restricted_access_area">restricted access area</h2>
-
-<p>A <em>restricted access area</em> 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 <code>($APPDIR)/extensions</code> folder and the registry install location under <code>HKEY_LOCAL_MACHINE</code> (see <a href="/en-US/docs/Adding_Extensions_using_the_Windows_Registry" title="Adding_Extensions_using_the_Windows_Registry">Adding Extensions using the Windows Registry</a> for details) are restricted.</p>
-
-<p>The <code>($PROFILE)/extensions</code> and <code>HKEY_CURRENT_USER</code> install locations, on the other hand, are not restricted.</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<p>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.</p>
-
-<h3 id="Forum_des_add-ons">Forum des add-ons</h3>
-
-<p>Utilisez le <a href="https://discourse.mozilla.org/c/add-ons">forum Discourse Add-ons</a> pour discuter de tous les aspects du développement d'add-on et demander de l'aide.</p>
-
-<h3 id="Mailing_listes">Mailing listes</h3>
-
-<p>Utilisez la liste <strong>dev-addons</strong> pour discuter du développement de l'écosystème des add-ons, y compris le système WebExtensions et addons.mozilla.org:</p>
-
-<ul>
- <li><a href="https://mail.mozilla.org/listinfo/dev-addons">informations sur la liste dev-addons</a></li>
- <li><a href="https://mail.mozilla.org/pipermail/dev-addons/">archives dev-addons</a></li>
-</ul>
-
-<h3 id="Chat">Chat</h3>
-
-<p><a class="external text" href="https://matrix.org/" rel="nofollow">Matrix</a> 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 <a href="https://wiki.mozilla.org/Matrix">Matrix sur MozillaWiki</a>.</p>
-
-<ul>
- <li><a href="https://chat.mozilla.org/#/room/#addons:mozilla.org">Add-ons</a> (prise en charge des extensions, des thèmes et de l'API WebExtensions)</li>
- <li><a href="https://chat.mozilla.org/#/room/#amo:mozilla.org">AMO</a> (discussion autour de addons.mozilla.org)</li>
-</ul>
-
-<h3 id="Signaler_des_problèmes">Signaler des problèmes</h3>
-
-<h4 id="Vulnérabilités_de_sécurité">Vulnérabilités de sécurité</h4>
-
-<p>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 <a href="http://www.mozilla.org/projects/security/security-bugs-policy.html">confidentielle</a> dans <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=addons.mozilla.org&amp;component=Add-on%20Security&amp;maketemplate=Add-on%20Security%20Bug&amp;bit-23=1&amp;rep_platform=All&amp;op_sys=All">Bugzilla </a>ou par e-mail à <a href="mailto:amo-admins@mozilla.com">amo-admins@mozilla.com</a>.</p>
-
-<h4 id="Bugs_sur_addons.mozilla.org_AMO">Bugs sur addons.mozilla.org (AMO)</h4>
-
-<p>Si vous rencontrez un problème avec le site, nous serions ravis de le résoudre. Veuillez déposer un <a href="https://github.com/mozilla/addons/issues/new">rapport de bug </a>et inclure autant de détails que possible.</p>
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
----
-<p>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.</p>
-
-<h2 id="Améliorer_les_performances_du_démarrage">Améliorer les performances du démarrage</h2>
-
-<p>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.</p>
-
-<h3 id="Chargez_seulement_ce_dont_vous_avez_besoin_quand_vous_en_avez_besoin">Chargez seulement ce dont vous avez besoin quand vous en avez besoin</h3>
-
-<p>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é.</p>
-
-<h3 id="Utilisez_les_modules_de_code_JavaScript">Utilisez les modules de code JavaScript</h3>
-
-<p>Vous pouvez créer vos propres <a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Using" title="/en-US/docs/Mozilla/JavaScript_code_modules/Using">modules de code JavaScript</a> 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.</p>
-
-<p>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.</p>
-
-<h3 id="Différez_tout_ce_que_vous_pouvez">Différez tout ce que vous pouvez</h3>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<h2 id="Conseils_sur_les_performances_générales">Conseils sur les performances générales</h2>
-
-<h3 id="Évitez_de_créer_des_fuites_de_mémoire">Évitez de créer des fuites de mémoire</h3>
-
-<p>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.</p>
-
-<p>Les compartiments zombie sont un type particulier de fuite mémoire que vous pouvez détecter avec un minimum d'effort. Consultez la page <a href="https://developer.mozilla.org/en/Zombie_compartments" title="en/Zombie_compartments">Compartiments zombie</a>, particulièrement la section <a href="https://developer.mozilla.org/en/Zombie_compartments#Proactive_checking_of_add-ons" title="en/Zombie_compartments#Proactive_checking_of_add-ons">Vérification proactive des extensions</a>.</p>
-
-<p>Consultez les <a href="https://developer.mozilla.org/en/Extensions/Common_causes_of_memory_leaks_in_extensions" title="en/Extensions/Common_causes_of_zombie_compartments_in_extensions">Causes classiques de fuites de mémoire dans les extensions </a>afin d'éviter les compartiments zombie et d'autres genres de fuites.</p>
-
-<p>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 <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=719601" title="https://bugzilla.mozilla.org/show_bug.cgi?id=719601">bug 719601</a> 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.</p>
-
-<h3 id="Évitez_l'écriture_de_CSS_lent">Évitez l'écriture de CSS lent</h3>
-
-<ul>
- <li>Lisez le guide <a href="/en/CSS/Writing_Efficient_CSS" title="en/CSS/Writing_Efficient_CSS">Écriture de CSS efficace</a>.</li>
- <li>Rappelez-vous que n'importe quel sélecteur dans votre règle qui pourrait s'appairer avec beaucoup de nœuds différents est une source d'inefficacité, soit durant l'apparemment du sélecteur ou soit durant le traitement dynamique de mise à jour. C'est particulièrement déconseillé pour ce dernier si le sélecteur peut dynamiquement démarrer ou cesser l'appairement. Évitez les « :hover » excessifs comme la peste.</li>
-</ul>
-
-<h3 id="Évitez_les_auditeurs_d'événements_de_mutation_dans_un_DOM">Évitez les auditeurs d'événements de mutation dans un DOM</h3>
-
-<p>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.</p>
-
-<p>Les événements de mutation sont officiellement obsolètes, et il existe de<a href="/en-US/Add-ons/Overlay_Extensions/XUL_School/Appendix_F:_Monitoring_DOM_changes">nombreuses alternatives</a> ; ils devraient donc être évités à tout prix.</p>
-
-<h3 id="Chargez_les_services_en_mode_paresseux">Chargez les services en mode paresseux</h3>
-
-<p>Le <a href="/en/JavaScript_code_modules/XPCOMUtils.jsm#Methods" title="en/JavaScript_code_modules/XPCOMUtils.jsm#Methods">module XPCOMUtils JavaScript</a> fournit deux méthodes pour le chargement lent de ressources :</p>
-
-<ul>
- <li><code>defineLazyGetter()</code> définit une fonction sur un objet spécifié qui agit comme un getter et qui sera créée dès la première fois qu'elle est utilisée. <a class="external" href="http://mxr.mozilla.org/mozilla-central/search?string=defineLazyGetter">Voir exemples</a>.</li>
- <li><code>defineLazyServiceGetter()</code> définit une fonction sur un objet spécifié qui agit comme un getter pour un service. Le service s'active dès la première fois que l'on utilise. {{ LXRSearch("ident", "string", "defineLazyServiceGetter", "Look through the source") }} par exemples.</li>
-</ul>
-
-<p>Beaucoup de services communs sont déjà mis en cache pour vous dans <a href="/en-US/JavaScript_code_modules/Services.jsm">Services.jsm</a>.</p>
-
-<h3 id="Utilisez_les_entrées-sorties_en_asynchrone">Utilisez les entrées-sorties en asynchrone</h3>
-
-<p>Cela ne peut pas être suffisamment souligné : ne jamais faire d'entrées-sorties dans une tâche principale.</p>
-
-<p>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.</p>
-
-<ul>
- <li>Ne jamais utiliser XMLHttpRequests en synchrone.</li>
- <li><a href="/en-US/JavaScript_code_modules/NetUtil.jsm">NetUtils.jsm</a> fournit des aides pour la lecture et la copie asynchrones des dossiers.</li>
- <li>Ne jamais accéder en synchrone à une base de données SQLite. Utiliser l'API asynchrone à la place.</li>
- <li>Effectuer des opérations séquentielles et asynchrones peuvent souvent être considérablement simplifiées <a href="/en-US/Add-ons/Techniques/Promises">en utilisant Promises</a>.</li>
-</ul>
-
-<h3 id="Évitez_les_événements_de_mouvement_de_souris">Évitez les événements de mouvement de souris</h3>
-
-<p>É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 .</p>
-
-<p>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.</p>
-
-<h3 id="Évitez_les_images_animées">Évitez les images animées</h3>
-
-<p>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") }}.</p>
-
-<h3 id="Envisagez_d'utiliser_les_exécuteurs_du_Chrome">Envisagez d'utiliser les exécuteurs du Chrome</h3>
-
-<p>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.</p>
-
-<h2 id="Consulter_aussi">Consulter aussi</h2>
-
-<ul>
- <li><a href="/en/Performance/Measuring_add-on_startup_performance" title="en/Measuring Add-on Startup Performance">Mesure de performence au démarrage d'une extensions</a></li>
- <li><a class="external" href="http://blog.mozilla.com/addons/2010/06/14/improve-extension-startup-performance/" title="http://blog.mozilla.com/addons/2010/06/14/improve-extension-startup-performance/">Comment améliorer la performance de démarrage d'une extension</a></li>
- <li><a href="/en-US/docs/Performance">Information générale relative à la mesure et à l'amélioration de la perfomance dans le code Mozilla</a></li>
-</ul>
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
----
-<div class="blockIndicator warning">
-<p><strong>Important</strong>: Since <a href="/en-US/docs/Mozilla/Firefox/Releases/52">Firefox 52</a>, all plugin support except Flash has been dropped (see <span><a href="https://www.fxsitecompat.com/en-CA/docs/2016/plug-in-support-has-been-dropped-other-than-flash/">Plug-in support has been dropped other than Flash</a> for more details</span>). Flash usage is also set to be phased out in the future.</p>
-</div>
-
-<div class="blockIndicator note">
-<p><strong>Note</strong>: 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.</p>
-</div>
-
-<p>For more information about plugin roadmap, see <a href="/en-US/docs/Plugins">non-archived plugin information</a>.</p>
-
-<p>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.</p>
-
-<p>Plugins are written using <strong>NPAPI</strong>, the cross-browser API for plugins. The main source of documentation for NPAPI is the <a href="/en/Gecko_Plugin_API_Reference" title="en/Gecko_Plugin_API_Reference">Gecko Plugin API Reference</a>. To make your plugin scriptable from web pages, use <a href="/en/Gecko_Plugin_API_Reference/Scripting_plugins" title="en/Gecko_Plugin_API_Reference/Scripting_plugins">npruntime</a>.</p>
-
-<p>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 <a class="external" href="http://www.firebreath.org" title="http://www.firebreath.org/">Firebreath</a>, <a class="external" href="http://www.juce.com/" title="http://www.rawmaterialsoftware.com/juce.php">JUCE</a>, or <a class="external" href="http://doc.qt.nokia.com/solutions/4/qtbrowserplugin/developingplugins.html" title="http://doc.qt.nokia.com/solutions/4/qtbrowserplugin/developingplugins.html">QtBrowserPlugin</a>. There are also some code generation tools that may be helpful. More information about these tools can be found on the <a href="/en/Plugins/External_resources_for_plugin_creation" title="en/Plugins/External resources for plugin creation">External Resources</a> page.</p>
-
-<p>Plugins are different from <a href="/en/Extensions" title="en/Extensions">extensions</a>, which modify or enhance the functionality of the browser itself. Plugins are also different from <a href="/en/Creating_OpenSearch_plugins_for_Firefox" title="en/Creating_OpenSearch_plugins_for_Firefox">search plugins</a>, which plug additional search engines in the search bar.</p>
-
-<hr>
-<div class="topicpage-table">
-<div class="section">
-<dl>
- <dt><a href="/en/Gecko_Plugin_API_Reference" title="en/Gecko_Plugin_API_Reference">Gecko Plugin API Reference</a> (NPAPI)</dt>
- <dd>This reference describes the application programming interfaces for NPAPI plugins and provides information about how to use these interfaces.</dd>
- <dt><a href="/en-US/docs/Site_Author_Guide_for_Click-To-Activate_Plugins">Site Author Guide For Click-To-Activate Plugins</a></dt>
- <dd>These guidelines will help website authors use plugins when they are blocked by default with the Firefox click-to-activate feature.</dd>
-</dl>
-
-<dl>
- <dt><a href="/en/Gecko_Plugin_API_Reference/Scripting_plugins" title="en/Gecko_Plugin_API_Reference/Scripting_plugins">Scripting plugins</a> (npruntime)</dt>
- <dd>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.</dd>
-</dl>
-
-<dl>
- <dt><a href="/en/Shipping_a_plugin_as_a_Toolkit_bundle" title="en/Shipping_a_plugin_as_a_Toolkit_bundle">Shipping a plugin as a Toolkit bundle</a></dt>
- <dd>Plugins can be shipped as a Toolkit <a href="/en/Bundles" title="Bundles">bundle</a>, allowing a user to easily install, uninstall and manage their personal plugins.</dd>
-</dl>
-
-<dl>
- <dt><a class="internal" href="/En/Supporting_private_browsing_in_plugins" title="en/Supporting private browsing in plugins">Supporting private browsing in plugins</a></dt>
- <dd>Firefox 3.5 introduced support for private browsing; learn how to make your plugin respect the user's privacy wishes.</dd>
- <dt><a href="/en/Plugins/Multi-Process_Plugin_Architecture" title="en/Plugins/Multi-Process Plugin Architecture">Multi-Process Plugin Architecture</a></dt>
- <dd>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.</dd>
- <dt><a href="/en/Plugins/Logging" title="en/Plugins/Logging">Logging and Debugging for Multi-Process Plugins</a></dt>
- <dd>How to create a plugin log to aid in debugging problems with multi-process plugins.</dd>
-</dl>
-</div>
-
-<div class="section">
-<dl>
- <dt><a class="internal" href="/En/Writing_a_plugin_for_Mac_OS_X" title="en/Writing a plugin for Mac OS X">Writing a plugin for Mac OS X</a></dt>
- <dd>Learn how to write a plugin for Mac OS X; a template Xcode project is provided.</dd>
-</dl>
-
-<dl>
- <dt><a href="/en/Monitoring_plugins" title="en/Monitoring_plugins">Monitoring Plugins</a></dt>
- <dd>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.</dd>
-</dl>
-
-<dl>
- <dt><a href="/en/Scripting_Plugins/Adobe_Flash" title="en/Scripting_Plugins/Macromedia_Flash">Scripting Plugins: Macromedia Flash</a></dt>
- <dd>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.</dd>
-</dl>
-
-<dl>
- <dt><a href="/en/Gecko_Plugin_API_Reference/Plug-in_Development_Overview" title="en/Plugins/The_First_Install_Problem">Plugins: The First Install Problem</a></dt>
- <dd>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.</dd>
-</dl>
-
-<dl>
- <dt><a href="/en/Plugins/Samples_and_Test_Cases" title="en/Plugins/Samples_and_Test_Cases">Plugins: Samples and Test Cases</a></dt>
- <dd>NPAPI plugin samples and test cases.</dd>
- <dt><a href="/en/Plugins/External_resources_for_plugin_creation" title="https://developer.mozilla.org/en/Plugins/External_resources_for_plugin_creation">External Resources for Plugin Creation</a></dt>
- <dd>External projects, frameworks, and blog posts that may be useful.</dd>
-</dl>
-
-<dl>
- <dt><a href="/en/XEmbed_Extension_for_Mozilla_Plugins" title="en/XEmbed_Extension_for_Mozilla_Plugins">XEmbed Extension for Mozilla Plugins</a></dt>
- <dd>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.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<p><span class="comment">Categories</span></p>
-
-<p><span class="comment">Interwiki Language Links</span></p>
-
-<div class="blockIndicator communitybox" dir="ltr">
-<div class="column-container">
-<h2 id="Join_the_plugin_development_community">Join the plugin development community</h2>
-
-<div class="column-half">
-<div class="communitysubhead">Choose your preferred method for joining the discussion:</div>
-
-<ul class="communitymailinglist">
- <li><a href="https://lists.mozilla.org/listinfo/dev-tech-plugins">Mailing list</a></li>
- <li><a href="http://groups.google.com/group/mozilla.dev.tech.plugins">Newsgroup</a></li>
- <li><a href="http://groups.google.com/group/mozilla.dev.tech.plugins/feeds">RSS feed</a></li>
-</ul>
-</div>
-
-<div class="column-half"> </div>
-</div>
-</div>
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
----
-<p> <span id="result_box" lang="fr"><span class="hps">Le codage des données</span> <span class="hps">et le décodage</span> <span class="hps">en utilisant des algorithmes</span> <span class="hps">Base64</span><span>.</span><br>
- <br>
- <span class="hps">var</span> <span class="hps">base64</span> <span class="hps">=</span> <span class="atn hps">require (</span><span class="atn hps">"</span><span>sdk</span> <span class="hps">/</span> <span class="hps">base64</span><span>"</span><span>)</span><span>;</span><br>
-  <br>
- <span class="hps">var</span> <span class="hps">encodedData</span> <span class="hps">=</span> <span class="hps">base64.encode</span> <span class="atn hps">(</span><span class="atn hps">"</span><span>Bonjour,</span> <span class="hps">monde»</span><span>)</span><span>;</span><br>
- <span class="hps">var</span> <span class="hps">decodedData</span> <span class="hps">=</span> <span class="hps">base64.decode</span> <span class="atn hps">(</span><span>encodedData</span><span>)</span><span>;</span></span></p>
-
-<div class="almost_half_cell" id="gt-res-content">
-<div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">Les fonctions</span><br>
-<span class="atn hps">encode (</span><span>données</span><span>,</span> <span class="hps">charset)</span><br>
-<br>
-<span class="hps">Crée une</span> <span class="hps">chaîne de caractères ASCII</span> <span class="hps">de base</span> <span class="hps">64</span> <span class="hps">codé</span> <span class="hps">à partir d'une</span> <span class="hps">chaîne de données</span> <span class="hps">binaires</span><span>.</span><br>
-<span class="hps">Paramètres</span><br>
-<br>
-<span class="hps">données</span><span>: string</span><br>
-<span class="hps">Les données</span> <span class="hps">pour coder</span><br>
-<br>
-<span class="hps">charset</span><span>: string</span><br>
-<span class="hps">Le</span> <span class="hps">charset</span> <span class="hps">de la chaîne à</span> <span class="hps">coder</span> <span class="hps">(en option</span><span>)</span><span>.</span> <span class="hps">La seule valeur</span> <span class="hps">acceptée est</span> <span class="atn hps">"</span><span>utf-8"</span><span>.</span> <span class="hps">Pour</span> <span class="hps">coder et décoder</span> <span class="hps">les chaînes Unicode</span><span>,</span> <span class="hps">le paramètre charset</span> <span class="hps">doit être réglé</span><span>:</span><br>
-<br>
-<span class="hps">var</span> <span class="hps">base64</span> <span class="hps">=</span> <span class="atn hps">require (</span><span class="atn hps">"</span><span>sdk</span> <span class="hps">/</span> <span class="hps">base64</span><span>"</span><span>)</span><span>;</span><br>
-<br>
-<span class="hps">var</span> <span class="hps">encodedData</span> <span class="hps">=</span> <span class="hps">base64.encode</span> <span class="atn hps">(</span><span>UnicodeString</span><span>,</span> <span class="atn hps">"</span><span>utf-8"</span><span>)</span><span>;</span><br>
-<br>
-<span class="hps">résultats</span><br>
-<br>
-<span class="hps">string:</span> <span class="hps">La chaîne</span> <span class="hps">codée</span><br>
-<span class="atn hps">decode (</span><span>données</span><span>,</span> <span class="hps">charset)</span><br>
-<br>
-<span class="hps">Décode</span> <span class="hps">une chaîne de données</span> <span class="hps">qui a été codé</span> <span class="hps">en utilisant la base</span> <span class="hps">64</span> <span class="hps">codage.</span><br>
-<span class="hps">Paramètres</span><br>
-<br>
-<span class="hps">données</span><span>: string</span><br>
-<span class="hps">Les données codées</span><br>
-<br>
-<span class="hps">charset</span><span>: string</span><br>
-<span class="hps">Le</span> <span class="hps">charset</span> <span class="hps">de la chaîne à</span> <span class="hps">coder</span> <span class="hps">(en option</span><span>)</span><span>.</span> <span class="hps">La seule valeur</span> <span class="hps">acceptée est</span> <span class="atn hps">"</span><span>utf-8"</span><span>.</span> <span class="hps">Pour</span> <span class="hps">coder et décoder</span> <span class="hps">les chaînes Unicode</span><span>,</span> <span class="hps">le paramètre charset</span> <span class="hps">doit être réglé</span><span>:</span><br>
-<br>
-<span class="hps">var</span> <span class="hps">base64</span> <span class="hps">=</span> <span class="atn hps">require (</span><span class="atn hps">"</span><span>sdk</span> <span class="hps">/</span> <span class="hps">base64</span><span>"</span><span>)</span><span>;</span><br>
-<br>
-<span class="hps">var</span> <span class="hps">decodedData</span> <span class="hps">=</span> <span class="hps">base64.decode</span> <span class="atn hps">(</span><span>encodedData</span><span>,</span> <span class="atn hps">"</span><span>utf-8"</span><span>)</span><span>;</span><br>
-<br>
-<span class="hps">résultats</span><br>
-<br>
-<span class="hps">string:</span> <span class="hps">La chaîne</span> <span class="hps">décodée</span> <span class="atn hps">(</span><span>encodedData</span><span>)</span><span>;</span></span></div>
-</div>
-
-<div class="note">
-<p>{{AddonSidebar}}</p>
-</div>
-
-<div class="note">
-<p>Unstable</p>
-</div>
-
-<p>Data encoding and decoding using Base64 algorithms.</p>
-
-<pre class="brush: js">var base64 = require("sdk/base64");
-
-var encodedData = base64.encode("Hello, World");
-var decodedData = base64.decode(encodedData);</pre>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Functions">Functions</h3>
-
-<h4 class="addon-sdk-api-name" id="encode(data_charset)"><code>encode(data, charset)</code></h4>
-
-<p>Creates a base-64 encoded ASCII string from a string of binary data.</p>
-
-<h5 id="Parameters">Parameters</h5>
-
-<p><strong>data : string</strong><br>
- The data to encode</p>
-
-<p><strong>charset : string</strong><br>
- The charset of the string to encode (optional). The only accepted value is <code>"utf-8"</code>. In order to encode and decode Unicode strings, the charset parameter needs to be set:</p>
-
-<pre class="brush: js">var base64 = require("sdk/base64");
-
-var encodedData = base64.encode(unicodeString, "utf-8");
-</pre>
-
-<h5 id="Returns">Returns</h5>
-
-<p><strong>string</strong> : The encoded string</p>
-
-<h4 class="addon-sdk-api-name" id="decode(data_charset)"><code>decode(data, charset)</code></h4>
-
-<p>Decodes a string of data which has been encoded using base-64 encoding.</p>
-
-<h5 id="Parameters_2">Parameters</h5>
-
-<p><strong>data : string</strong><br>
- The encoded data</p>
-
-<p><strong>charset : string</strong><br>
- The charset of the string to encode (optional). The only accepted value is <code>"utf-8"</code>. In order to encode and decode Unicode strings, the charset parameter needs to be set:</p>
-
-<pre class="brush: js">var base64 = require("sdk/base64");
-
-var decodedData = base64.decode(encodedData, "utf-8");</pre>
-
-<h5 id="Returns_2">Returns</h5>
-
-<p><strong>string</strong> : The decoded string</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">
-<p>Stable</p>
-</div>
-
-<p><span class="seoSummary">Ajouez des éléments, sous-menus et des séparateurs au menu contextuel.</span></p>
-
-<h2 id="Usage">Usage</h2>
-
-<p>Instead of manually adding items when particular contexts occur and then removing them when those contexts go away, you <em>bind</em> 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.</p>
-
-<p>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.</p>
-
-<p>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 <code>extensions.addon-sdk.context-menu.overflowThreshold</code> preference) all of the menu items will instead appear in an overflow menu to avoid making the context menu too large.</p>
-
-<h3 id="Specifying_contexts">Specifying contexts</h3>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<h4 id="The_page_context">The page context</h4>
-
-<p>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.</p>
-
-<p>The <em>page context</em> 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.</p>
-
-<p>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.</p>
-
-<h4 id="Declarative_contexts">Declarative contexts</h4>
-
-<p>You can specify some simple, declarative contexts when you create a menu item by setting the <code>context</code> property of the options object passed to its constructor, like this:</p>
-
-<pre class="brush: js">var cm = require("sdk/context-menu");
-cm.Item({
- label: "My Menu Item",
- context: cm.URLContext("*.mozilla.org")
-});</pre>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <th>Constructor</th>
- <th>Description</th>
- </tr>
- <tr>
- <td><code>PageContext() </code></td>
- <td>The page context.</td>
- </tr>
- <tr>
- <td><code>SelectionContext() </code></td>
- <td>This context occurs when the menu is invoked on a page in which the user has made a selection.</td>
- </tr>
- <tr>
- <td><code>SelectorContext(selector) </code></td>
- <td>This context occurs when the menu is invoked on a node that either matches <code>selector</code>, a CSS selector, or has an ancestor that matches. <code>selector</code> may include multiple selectors separated by commas, e.g., <code>"a[href], img"</code>.</td>
- </tr>
- <tr>
- <td><code>URLContext(matchPattern) </code></td>
- <td>This context occurs when the menu is invoked on pages with particular URLs. <code>matchPattern</code> is a match pattern string or an array of match pattern strings. When <code>matchPattern</code> 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 <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod"><code>page-mod</code></a> <code>include</code> property. <a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_match-pattern">Read more about patterns</a>.</td>
- </tr>
- <tr>
- <td><code>PredicateContext(predicateFunction)</code></td>
- <td><code>predicateFunction</code> 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.</td>
- </tr>
- <tr>
- <td>array</td>
- <td>An array of any of the other types. This context occurs when all contexts in the array occur.</td>
- </tr>
- </tbody>
-</table>
-
-<p>Menu items also have a <code>context</code> property that can be used to add and remove declarative contexts after construction. For example:</p>
-
-<pre class="brush: js">var context = require("sdk/context-menu").SelectorContext("img");
-myMenuItem.context.add(context);
-myMenuItem.context.remove(context);</pre>
-
-<p>When a menu item is bound to more than one context, it appears in the menu when all of those contexts occur.</p>
-
-<h3 id="In_content_scripts">In content scripts</h3>
-
-<p>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.</p>
-
-<p>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 <code>context-menu</code> API uses <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">content scripts</a> 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.</p>
-
-<p>A special event named <code>"context"</code> 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.</p>
-
-<p>For example, this item appears whenever the context menu is invoked on a page that contains at least one image:</p>
-
-<pre class="brush: js">require("sdk/context-menu").Item({
- label: "This Page Has Images",
- contentScript: 'self.on("context", function (node) {' +
- ' return !!document.querySelector("img");' +
- '});'
-});</pre>
-
-<p>Note that the listener function has a parameter called <code>node</code>. 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.</p>
-
-<p>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).</p>
-
-<p>If you combine <code>SelectorContext</code> and the <code>"context"</code> event, be aware that the <code>node</code> argument passed to the <code>"context"</code> event will not always match the type specified in <code>SelectorContext</code>.</p>
-
-<p><code>SelectorContext</code> will match if the menu is invoked on the node specified <em>or any descendant of that node</em>, but the <code>"context"</code> event handler is passed <em>the actual node</em> on which the menu was invoked. The example above works because <code>&lt;IMG&gt;</code> elements can't contain other elements, but in the example below, <code>node.nodeName</code> is not guaranteed to be "P" - for example, it won't be "P" if the user context-clicked a link inside a paragraph:</p>
-
-<pre class="brush: js">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;' +
- '});'
-});</pre>
-
-<p>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.</p>
-
-<h3 id="Handling_menu_item_clicks">Handling menu item clicks</h3>
-
-<p>In addition to using content scripts to listen for the <code>"context"</code> event as described above, you can use content scripts to handle item clicks. When the user clicks your menu item, an event named <code>"click"</code> is emitted in the item's content script.</p>
-
-<p>Therefore, to handle an item click, listen for the <code>"click"</code> event in that item's content script like so:</p>
-
-<pre class="brush: js">require("sdk/context-menu").Item({
- label: "My Item",
- contentScript: 'self.on("click", function (node, data) {' +
- ' console.log("Item clicked!");' +
- '});'
-});</pre>
-
-<p>Note that the listener function has parameters called <code>node</code> and <code>data</code>.</p>
-
-<h4 id="The_node_argument">The "node" argument</h4>
-
-<p><code>node</code> is the node that the user context-clicked to invoke the menu.</p>
-
-<ul>
- <li>If you did not use <code>SelectorContext</code> to decide whether to show the menu item, then this is the actual node clicked.</li>
- <li>If you did use <code>SelectorContext</code>, then this is the node that matched your selector.</li>
-</ul>
-
-<p>For example, suppose your add-on looks like this:</p>
-
-<pre class="brush: js">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
-});</pre>
-
-<p>This add-on creates a context-menu item that uses <code>SelectorContext</code> to display the item whenever the context menu is activated on any descendant of the <code>&lt;BODY&gt;</code> element. When clicked, the item just logs the <a href="https://developer.mozilla.org/en-US/docs/DOM/Node.nodeName"><code>nodeName</code></a> property for the node passed to the click handler.</p>
-
-<p>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:</p>
-
-<pre>info: contextmenu-example: clicked: BODY</pre>
-
-<p>By contrast, this add-on uses the <code>PageContext</code>:</p>
-
-<pre class="brush: js">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
-});</pre>
-
-<p>It will log the name of the actual node clicked:</p>
-
-<pre>info: contextmenu-example: clicked: P</pre>
-
-<h4 id="The_data_Argument">The "data" Argument</h4>
-
-<p><code>data</code> is the <code>data</code> 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 <code>data</code> value passed matches the item you expect. You can use this to simplify click handling by providing just a single click listener on a <code>Menu</code> that reacts to clicks for any child items.:</p>
-
-<pre class="brush: js">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" })
- ]
-});
-</pre>
-
-<h4 id="Communicating_With_the_Add-on">Communicating With the Add-on</h4>
-
-<p>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 <code>postMessage</code> function attached to the global <code>self</code> object, passing it some JSON-able data. The menu item's <code>"message"</code> event listener will be called with that data.</p>
-
-<pre class="brush: js">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);
- }
-});</pre>
-
-<h3 id="Updating_a_menu_item's_label">Updating a menu item's label</h3>
-
-<p>Each menu item must be created with a label, but you can change its label later using a couple of methods.</p>
-
-<p>The simplest method is to set the menu item's <code>label</code> property. This example updates the item's label based on the number of times it's been clicked:</p>
-
-<pre class="brush: js">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.
- }
-});</pre>
-
-<p>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 <code>"context"</code> 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 <code>"context"</code> listeners can also return strings. When a <code>"context"</code> listener returns a string, it becomes the item's new label.</p>
-
-<p>This item implements the aforementioned search example:</p>
-
-<pre class="brush: js">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 &gt; 20)' +
- ' text = text.substr(0, 20) + "...";' +
- ' return "Search Google for " + text;' +
- '});'
-});</pre>
-
-<p>The <code>"context"</code> 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 <code>text</code>", where <code>text</code> is the truncated selection.</p>
-
-<p>You can also get the selected text using the High Level <code><a href="/en-US/Add-ons/SDK/High-Level_APIs/selection">selection</a></code> API.</p>
-
-<pre class="brush: js">var selection = require("sdk/selection");</pre>
-
-<p>and within the contentScript, reference the selected text as <code>selection.text</code></p>
-
-<h3 id="Private_windows">Private windows</h3>
-
-<p>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.</p>
-
-<p>To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">documentation for the <code>private-browsing</code> module</a>.</p>
-
-<h3 id="More_examples">More examples</h3>
-
-<p>For conciseness, these examples create their content scripts as strings and use the <code>contentScript</code> property. In your own add-on, you will probably want to create your content scripts in separate files and pass their URLs using the <code>contentScriptFile</code> property. See <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Working with Content Scripts</a> for more information.</p>
-
-<div class="warning">
-<p><strong>Warning:</strong> Unless your content script is extremely simple and consists only of a static string, don't use <code>contentScript</code>: if you do, you may have problems getting your add-on approved on AMO.</p>
-
-<p>Instead, keep the script in a separate file and load it using <code>contentScriptFile</code>. This makes your code easier to maintain, secure, debug and review.</p>
-</div>
-
-<p>Show an "Edit Page Source" item when the user right-clicks a non-interactive part of the page:</p>
-
-<pre class="brush: js">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);
- }
-});</pre>
-
-<p>Show an "Edit Image" item when the menu is invoked on an image:</p>
-
-<pre class="brush: js">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);
- }
-});</pre>
-
-<p>Show an "Edit Mozilla Image" item when the menu is invoked on an image in a mozilla.org or mozilla.com page:</p>
-
-<pre class="brush: js">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);
- }
-});</pre>
-
-<p>Show an "Edit Page Images" item when the page contains at least one image:</p>
-
-<pre class="brush: js">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 &lt; imgs.length; i++)' +
- ' imgSrcs.push(imgs[i].src);' +
- ' self.postMessage(imgSrcs);' +
- '});',
- onMessage: function (imgSrcs) {
- openImageEditor(imgSrcs);
- }
-});</pre>
-
-<p>Show a "Search With" menu when the user right-clicks an anchor that searches Google or Wikipedia with the text contained in the anchor:</p>
-
-<pre class="brush: js">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]
-});</pre>
-
-<p>To create sub-menus, one of the items in your main menu must be defined as a menu.</p>
-
-<pre class="brush: js">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]
-});</pre>
-
-<p>If you need a <strong>tooltip</strong>:</p>
-
-<p><img alt="tooltip" src="https://github.com/vitaly-zdanevich/extension-firefox-yandex-translate/raw/master/screenshot-hover.png" style="height: 500px; width: 800px;"></p>
-
-<p>First you need a dummy menu item that will serve as a trigger and subsequently will add the tooltips to the actual menu items.</p>
-
-<p>It is easy to find out which menu items are constructed by the addon-sdk module because they have the class <code>addon-context-menu-item</code>. The difficult part it to identify those that belong to your extension.</p>
-
-<p>One way to achieve this it to utilize the <code>data</code> attribute of <code>Item</code> class constructor, which conveniently maps to the <code>value</code> attribute of the underlying xul element.</p>
-
-<p>So if <code>data</code> consists of unique prefix and the desired tooltip text, it is just a matter of kicking in the right moment.</p>
-
-<pre><code>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 &lt; cmitems.length; i++)
- cmitems[i].tooltipText = cmitems[i].value.substring(36);
- }
-});</code></pre>
-
-<p> </p>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Constructors">Constructors</h3>
-
-<h4 class="addon-sdk-api-name" id="Item(options)"><code>Item(options)</code></h4>
-
-<p>Creates a labeled menu item that can perform an action when clicked.</p>
-
-<h5 id="Parameters">Parameters</h5>
-
-<p><strong>options : object</strong><br>
- Required options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>label</td>
- <td>string</td>
- <td>
- <p>The item's label. It must either be a string or an object that implements <code>toString()</code>.</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<p>Optional options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>image</td>
- <td>string</td>
- <td>
- <p>The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> directory, or a data URI.</p>
- </td>
- </tr>
- <tr>
- <td>data</td>
- <td>string</td>
- <td>
- <p>An optional arbitrary value to associate with the item. It must be either a string or an object that implements <code>toString()</code>. It will be passed to click listeners.</p>
- </td>
- </tr>
- <tr>
- <td>accesskey</td>
- <td>single-character string</td>
- <td>
- <div class="geckoVersionNote">
- <p>New in Firefox 35.</p>
- </div>
-
- <p>Access key for the item. Pressing this key selects the item when the context menu is open.</p>
- </td>
- </tr>
- <tr>
- <td>context</td>
- <td>value</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>contentScript</td>
- <td>string,array</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>contentScriptFile</td>
- <td>string,array</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>onMessage</td>
- <td>function</td>
- <td>
- <p>If the item is contained in the top-level context menu, this function will be called when the content script calls <code>self.postMessage</code>. It will be passed the data that was passed to <code>postMessage</code>.</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h4 class="addon-sdk-api-name" id="Menu(options)"><code>Menu(options)</code></h4>
-
-<p>Creates a labeled menu item that expands into a submenu.</p>
-
-<h5 id="Parameters_2">Parameters</h5>
-
-<p><strong>options : object</strong><br>
- Required options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>label</td>
- <td>string</td>
- <td>
- <p>The item's label. It must either be a string or an object that implements <code>toString()</code>.</p>
- </td>
- </tr>
- <tr>
- <td>items</td>
- <td>array</td>
- <td>
- <p>An array of menu items that the menu will contain. Each must be an <code>Item</code>, <code>Menu</code>, or <code>Separator</code>.</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<p>Optional options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>image</td>
- <td>string</td>
- <td>
- <p>The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> directory, or a data URI.</p>
- </td>
- </tr>
- <tr>
- <td>context</td>
- <td>value</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>contentScript</td>
- <td>string,array</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>contentScriptFile</td>
- <td>string,array</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>onMessage</td>
- <td>function</td>
- <td>
- <p>If the menu is contained in the top-level context menu, this function will be called when the content script calls <code>self.postMessage</code>. It will be passed the data that was passed to <code>postMessage</code>.</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h4 class="addon-sdk-api-name" id="Separator()"><code>Separator()</code></h4>
-
-<p>Creates a menu separator.</p>
-
-<h4 class="addon-sdk-api-name" id="PageContext()"><code>PageContext()</code></h4>
-
-<p>Creates a page context. See Specifying Contexts above.</p>
-
-<h4 class="addon-sdk-api-name" id="SelectionContext()"><code>SelectionContext()</code></h4>
-
-<p>Creates a context that occurs when a page contains a selection. See Specifying Contexts above.</p>
-
-<h4 class="addon-sdk-api-name" id="SelectorContext(selector)"><code>SelectorContext(selector)</code></h4>
-
-<p>Creates a context that matches a given CSS selector. See Specifying Contexts above.</p>
-
-<h5 id="Parameters_3">Parameters</h5>
-
-<p><strong>selector : string</strong><br>
- A CSS selector.</p>
-
-<h4 class="addon-sdk-api-name" id="URLContext(matchPattern)"><code>URLContext(matchPattern)</code></h4>
-
-<p>Creates a context that matches pages with particular URLs. See Specifying Contexts above.</p>
-
-<h5 id="Parameters_4">Parameters</h5>
-
-<p><strong>matchPattern : string,array</strong><br>
- A <a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_match-pattern">match pattern</a> string, regexp or an array of match pattern strings or regexps.</p>
-
-<h4 class="addon-sdk-api-name" id="PredicateContext(predicateFunction)"><code>PredicateContext(predicateFunction)</code></h4>
-
-<div class="geckoVersionNote">
-<p>New in Firefox 29</p>
-</div>
-
-<p>Creates a context that occurs when predicateFunction returns a true value. See Specifying Contexts above.</p>
-
-<h5 id="Parameters_5">Parameters</h5>
-
-<p><strong>predicateFunction : function(context)</strong><br>
- A function which will be called with an object argument that provide information about the invocation context. <code>context</code> object properties:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Property</th>
- <th scope="col">Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>documentType</code></td>
- <td>The MIME type of the document the menu was invoked in. E.g. <code>text/html</code> for HTML pages, <code>application/xhtml+xml</code> for XHTML, or <code>image/jpeg</code> if viewing an image directly.</td>
- </tr>
- <tr>
- <td><code>documentURL</code></td>
- <td>The URL of the document the menu was invoked in.</td>
- </tr>
- <tr>
- <td><code>targetName</code></td>
- <td>The name of the DOM element that the menu was invoked on, in lower-case.</td>
- </tr>
- <tr>
- <td><code>targetID</code></td>
- <td>The <code>id</code> attribute of the element that the menu was invoked on, or <code>null</code> if not set.</td>
- </tr>
- <tr>
- <td><code>isEditable</code></td>
- <td><code>true</code> 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 <code>contenteditable</code> attribute set to <code>true</code>.</td>
- </tr>
- <tr>
- <td><code>selectionText</code></td>
- <td>The current selection as a text string, or <code>null</code>. 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.</td>
- </tr>
- <tr>
- <td><code>srcURL</code></td>
- <td>The <code>src</code> URL of the element that the menu was invoked on, or <code>null</code> if it doesn't have one.</td>
- </tr>
- <tr>
- <td><code>linkURL</code></td>
- <td>The <code>href</code> URL of the element that the menu was invoked on, or <code>null</code> if it doesn't have one.</td>
- </tr>
- <tr>
- <td><code>value</code></td>
- <td>The current contents of a input text box or area if the menu was invoked in one, <code>null</code> otherwise.</td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="Item">Item</h2>
-
-<p>A labeled menu item that can perform an action when clicked.</p>
-
-<h3 id="Methods">Methods</h3>
-
-<h4 class="addon-sdk-api-name" id="destroy()"><code>destroy()</code></h4>
-
-<p>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 <code>removeItem()</code> on the parent menu instead.</p>
-
-<h3 id="Properties">Properties</h3>
-
-<h4 class="addon-sdk-api-name" id="label"><code>label</code></h4>
-
-<p>The menu item's label. You can set this after creating the item to update its label later.</p>
-
-<h4 class="addon-sdk-api-name" id="image"><code>image</code></h4>
-
-<p>The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> 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 <code>null</code>.</p>
-
-<h4 class="addon-sdk-api-name" id="data"><code>data</code></h4>
-
-<p>An optional arbitrary value to associate with the item. It must be either a string or an object that implements <code>toString()</code>. It will be passed to click listeners. You can set this after creating the item to update its data later.</p>
-
-<h4 class="addon-sdk-api-name" id="context"><code>context</code></h4>
-
-<p>A list of declarative contexts for which the menu item will appear in the context menu. Contexts can be added by calling <code>context.add()</code> and removed by called <code>context.remove()</code>.</p>
-
-<h4 class="addon-sdk-api-name" id="parentMenu"><code>parentMenu</code></h4>
-
-<p>The item's parent <code>Menu</code>, or <code>null</code> 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 <code>addItem()</code> method.</p>
-
-<h4 class="addon-sdk-api-name" id="contentScript"><code>contentScript</code></h4>
-
-<p>The content script or the array of content scripts associated with the menu item during creation.</p>
-
-<h4 class="addon-sdk-api-name" id="contentScriptFile"><code>contentScriptFile</code></h4>
-
-<p>The URL of a content script or the array of such URLs associated with the menu item during creation.</p>
-
-<h3 id="Events">Events</h3>
-
-<h4 class="addon-sdk-api-name" id="message"><code>message</code></h4>
-
-<p>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 <code>self.postMessage()</code>, the message is delivered to the add-on code in the menu item's <code>message</code> event.</p>
-
-<h5 id="Arguments">Arguments</h5>
-
-<p><strong>value</strong> : Listeners are passed a single argument which is the message posted from the content script. The message can be any <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/using_port#JSON-Serializable_Values">JSON-serializable value</a>.</p>
-
-<h2 id="Menu">Menu</h2>
-
-<p>A labeled menu item that expands into a submenu.</p>
-
-<h3 id="Methods_2">Methods</h3>
-
-<h4 class="addon-sdk-api-name" id="addItem(item)"><code>addItem(item)</code></h4>
-
-<p>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.</p>
-
-<h5 id="Parameters_6">Parameters</h5>
-
-<p><strong>item : Item,Menu,Separator</strong><br>
- The <code>Item</code>, <code>Menu</code>, or <code>Separator</code> to add to the menu.</p>
-
-<h4 class="addon-sdk-api-name" id="removeItem(item)"><code>removeItem(item)</code></h4>
-
-<p>Removes the given menu item from the menu. If the menu does not contain the item, this method does nothing.</p>
-
-<h5 id="Parameters_7">Parameters</h5>
-
-<p><strong>item : Item,Menu,Separator</strong><br>
- The menu item to remove from the menu.</p>
-
-<h4 class="addon-sdk-api-name" id="destroy()_2"><code>destroy()</code></h4>
-
-<p>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 <code>removeItem()</code> on the parent menu instead.</p>
-
-<h3 id="Properties_2">Properties</h3>
-
-<h4 class="addon-sdk-api-name" id="label_2"><code>label</code></h4>
-
-<p>The menu's label. You can set this after creating the menu to update its label later.</p>
-
-<h4 class="addon-sdk-api-name" id="items"><code>items</code></h4>
-
-<p>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.</p>
-
-<h4 class="addon-sdk-api-name" id="image_2"><code>image</code></h4>
-
-<p>The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> 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 <code>null</code>.</p>
-
-<h4 class="addon-sdk-api-name" id="context_2"><code>context</code></h4>
-
-<p>A list of declarative contexts for which the menu will appear in the context menu. Contexts can be added by calling <code>context.add()</code> and removed by called <code>context.remove()</code>.</p>
-
-<h4 class="addon-sdk-api-name" id="parentMenu_2"><code>parentMenu</code></h4>
-
-<p>The menu's parent <code>Menu</code>, or <code>null</code> 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 <code>addItem()</code> method.</p>
-
-<h4 class="addon-sdk-api-name" id="contentScript_2"><code>contentScript</code></h4>
-
-<p>The content script or the array of content scripts associated with the menu during creation.</p>
-
-<h4 class="addon-sdk-api-name" id="contentScriptFile_2"><code>contentScriptFile</code></h4>
-
-<p>The URL of a content script or the array of such URLs associated with the menu during creation.</p>
-
-<h3 id="Events_2">Events</h3>
-
-<h4 class="addon-sdk-api-name" id="message_2"><code>message</code></h4>
-
-<p>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 <code>self.postMessage()</code>, the message is delivered to the add-on code in the menu item's <code>message</code> event.</p>
-
-<h5 id="Arguments_2">Arguments</h5>
-
-<p><strong>value</strong> : Listeners are passed a single argument which is the message posted from the content script. The message can be any <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/using_port#JSON-Serializable_Values">JSON-serializable value</a>.</p>
-
-<h2 id="Separator">Separator</h2>
-
-<p>A menu separator. Separators can be contained only in <code>Menu</code>s, not in the top-level context menu.</p>
-
-<h3 id="Methods_3">Methods</h3>
-
-<h4 class="addon-sdk-api-name" id="destroy()_3"><code>destroy()</code></h4>
-
-<p>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 <code>removeItem()</code> on the parent menu instead.</p>
-
-<h3 id="Properties_3">Properties</h3>
-
-<h4 class="addon-sdk-api-name" id="parentMenu_3"><code>parentMenu</code></h4>
-
-<p>The separator's parent <code>Menu</code>. This property is read-only. To add the separator to a new menu, call that menu's <code>addItem()</code> method.</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<p>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.</p>
-
-<p>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) }}</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">
-<p>Expérimental</p>
-</div>
-
-<p><span class="seoSummary">Expose l'<a href="https://developer.mozilla.org/fr/docs/IndexedDB" title="https://developer.mozilla.org/fr/docs/IndexedDB">API IndexedDB</a> pour les add-ons.</span></p>
-
-<h2 id="Utilisation">Utilisation</h2>
-
-<p>Les scripts en cours d'exécution dans les pages Web peuvent accéder à IndexedDB via <code>window</code>. Par exemple:</p>
-
-<pre class="brush: js">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");
-};</pre>
-
-<p>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 <code>indexed-db</code> pour y accéder:</p>
-
-<pre class="brush: js">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");
-};</pre>
-
-<p>La plupart des objets qui mettent en œuvre l'API IndexedDB, tels que <a href="https://developer.mozilla.org/fr/docs/IndexedDB/IDBTransaction" title="https://developer.mozilla.org/fr/docs/IndexedDB/IDBTransaction"> IDBTransaction </a>, <a href="https://developer.mozilla.org/fr/docs/IndexedDB/IDBOpenDBRequest" title="https://developer.mozilla.org/fr/docs/IndexedDB/IDBOpenDBRequest"> IDBOpenDBRequest </a>, et <a href="https://developer.mozilla.org/fr/docs/IndexedDB/IDBObjectStore" title="https://developer.mozilla.org/fr/docs/IndexedDB/IDBObjectStore"> IDBObjectStore </a>, sont accessibles à travers l'objet IndexedDB lui-même. &lt; br&gt;</p>
-
-<p>L'API exposée par <code>indexed-db</code> est presque identique à l'API DOM IndexedDB, donc on n'a pas répété sa documentation ici, référer vous à la <a href="https://developer.mozilla.org/fr/docs/IndexedDB" title="https://developer.mozilla.org/fr/docs/IndexedDB">documentation de l'API IndexedDB</a> pour tous les détails.</p>
-
-<p>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 <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=779197" title="https://bugzilla.mozilla.org/show_bug.cgi?id=779197"> bug 778197 </a> et <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=786688" title="https://bugzilla.mozilla.org/show_bug.cgi?id=786688"> bug 786688 </a>.</p>
-
-<h3 id="Exemple">Exemple</h3>
-
-<div class="note">
-<p>Cet exemple utilise l'<a href="https://developer.mozilla.org/fr/Add-ons/SDK/Low-Level_APIs/ui_button_action" title="https://developer.mozilla.org/fr/Add-ons/SDK/Low-Level_APIs/ui_button_action">API bouton d'action </a>, qui est uniquement disponible à partir de Firefox 29 partir.</p>
-</div>
-
-<p>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 .</p>
-
-<p>L'add-on implémente les fonctions <code>open()</code>, <code>addItem()</code> et <code>getItems()</code> 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.</p>
-
-<pre class="brush: js">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);
-  }
-});
-</pre>
-
-<p>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 .</p>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Propriétés">Propriétés</h3>
-
-<h4 class="addon-sdk-api-name" id="indexedDB"><code>indexedDB</code></h4>
-
-<p>Permet de créer, ouvrir et supprimer des bases de données. Voir la <a href="https://developer.mozilla.org/fr/docs/IndexedDB/IDBFactory" title="https://developer.mozilla.org/fr/docs/IndexedDB/IDBFactory"> documentation IDBFactory</a>.</p>
-
-<h4 class="addon-sdk-api-name" id="IDBKeyRange"><code>IDBKeyRange</code></h4>
-
-<p>Définit une plage de clés. Voir la <a href="https://developer.mozilla.org/fr/docs/IndexedDB/IDBKeyRange" title="https://developer.mozilla.org/fr/docs/IndexedDB/IDBKeyRange"> documentation IDBKeyRange</a>.</p>
-
-<h4 class="addon-sdk-api-name" id="DOMException"><code>DOMException</code></h4>
-
-<p>Fournit des informations plus détaillées sur une exception. Voir la <a href="https://developer.mozilla.org/fr/docs/DOM/DOMException" title="https://developer.mozilla.org/fr/docs/DOM/DOMException"> documentation DOMException</a>.</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">
-<p>Stable</p>
-</div>
-
-<p><span class="seoSummary">Permet au add-on le stockage des données afin qu'il soit conservé entre les redémarrages de Firefox. </span> Ce module fonctionne de façon similaire au <a href="https://developer.mozilla.org/en/DOM/Storage" title="https://developer.mozilla.org/en/DOM/Storage"> DOM Storage</a> du Web, mais il est uniquement disponible pour des add-ons.</p>
-
-<h2 id="Utilisation">Utilisation</h2>
-
-<p>Le module de stockage simple exporte un objet appelé <code>storage</code> 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.</p>
-
-<p>Pour stocker une valeur, il faut juste l'affecter avec la propriété <code>storage</code>:</p>
-
-<pre class="brush: js">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!";</pre>
-
-<p>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.</p>
-
-<p>Veillez à définir les propriétés avec <code>storage</code> et non avec le module lui-même:</p>
-
-<pre class="brush: js">// This is not good!
-var ss = require("sdk/simple-storage");
-ss.foo = "I will not be saved! :(";</pre>
-
-<h3 id="stockage_simple_et_jpm_run">stockage simple et "jpm run"</h3>
-
-<p>Le module de stockage simple stocke ses données dans votre profil. Parce que <code>jpm run</code> 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 <code>jpm run</code> - les données stockées ne persisteront pas d'une exécution à l'autre.</p>
-
-<p>La solution la plus simple à ce problème est d'utiliser l'option <a href="https://developer.mozilla.org/fr/Add-ons/SDK/Tools/jpm#Using_profiles_2">--profile de jpm</a> avec un chemin d'accès à un profil - pas seulement un nom de profil. Vous pouvez aussi avoir besoin d'inclure l'option<a href="https://developer.mozilla.org/fr/Add-ons/SDK/Tools/jpm#Using_profiles_2"> --no-copie</a> pour empêcher Firefox de copier le profil dans un répertoire de temporaire chaque fois qu'il démarre.</p>
-
-<pre class="brush: bash">jpm run --no-copy --profile path/to/profile/dir</pre>
-
-<p>Si vous spécifiez un profil non-existant, il sera créé.</p>
-
-<blockquote>
-<p>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.</p>
-</blockquote>
-
-<h3 id="Accès_au_stockage_à_partir_de_la_console">Accès au stockage à partir de la console</h3>
-
-<p>Dans l'<a href="/fr/Add-ons/Add-on_Debugger" title="/fr/Add-ons/Add-on_Debugger"> Add-on Debugger </a>, vous pouvez accéder à vos addons simple stockage par programmation à partir de la console en utilisant ce qui suit:</p>
-
-<pre class="brush: js">loader.modules['resource://gre/modules/commonjs/sdk/simple-storage.js'].exports.storage</pre>
-
-<h3 id="Constructeur_de_tableaux">Constructeur de tableaux</h3>
-
-<p>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:</p>
-
-<pre class="brush: js">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);
-  }
-});</pre>
-
-<p>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à:</p>
-
-<pre class="brush: js">if (!ss.storage.pages)
- ss.storage.pages = [];</pre>
-
-<h3 id="Suppression_de_données">Suppression de données</h3>
-
-<p>Vous pouvez supprimer des propriétés en utilisant l'opérateur <code>delete</code>. Voici une add-on qui ajoute trois boutons pour écrire, lire et supprimer une valeur:</p>
-
-<pre class="brush: js">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");
-  }
-});</pre>
-
-<p>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é:</p>
-
-<pre>info: undefined
-</pre>
-
-<p>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".</p>
-
-<h3 id="Quotas">Quotas</h3>
-
-<p>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.</p>
-
-<p>Pour écouter les notifications du quota, utiliser l'evenement <code>"OverQuota"</code>. il sera appelée quand votre stockage dépasse le quota.</p>
-
-<pre class="brush: js">function myOnOverQuotaListener() {
- console.log("Uh oh.");
-}
-ss.on("OverQuota", myOnOverQuotaListener);</pre>
-
-<p>Les auditeurs peuvent également être retirés:</p>
-
-<pre><code><code class="brush: js">ss.removeListener("OverQuota", myOnOverQuotaListener);</code></code></pre>
-
-<p>Pour connaitre le % de saturation du quota utiliser la proprieté <code>quotaUsage</code>. 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.</p>
-
-<p>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 <code>quotaUsage</code> soit inférieur ou égal à 1.</p>
-
-<pre class="brush: js">ss.storage.myList = [ /* some long array */ ];
-ss.on("OverQuota", function () {
- while (ss.quotaUsage &gt; 1)
- ss.storage.myList.pop();
-});</pre>
-
-<h3 id="Navigation_privée">Navigation privée</h3>
-
-<p>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 <a href="http://support.mozilla.com/fr/kb/Private+Browsing" title="http://support.mozilla.com/fr/kb/Private+Browsing"> navigation privé </a>.</p>
-
-<p>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 <a href="/fr/Add-ons/SDK/High-Level_APIs/private-browsing" title="/fr/Add-ons/SDK/High-Level_APIs/private-browsing"> <code>private-browsing</code> Module </a> .</p>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Propriétés">Propriétés</h3>
-
-<h4 class="addon-sdk-api-name" id="storage"><code>storage</code></h4>
-
-<p>Un objet persistant privé de votre add-on.</p>
-
-<h4 class="addon-sdk-api-name" id="quotaUsage"><code>quotaUsage</code></h4>
-
-<p>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.</p>
-
-<h3 id="Événements">Événements</h3>
-
-<h4 class="addon-sdk-api-name" id="OverQuota"><code>OverQuota</code></h4>
-
-<p>Le module émet cet événement lorsque votre stockage add-ons dépasse son quota.</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">
-<p>Stable</p>
-</div>
-
-<p><span class="seoSummary">Ouvre, manipule, accède et recevoir les événements des onglets.</span></p>
-
-<h2 id="Utilisation">Utilisation</h2>
-
-<h3 id="Ouvrez_un_onglet">Ouvrez un onglet</h3>
-
-<p>Vous pouvez ouvrir un nouvel onglet, en spécifiant diverses propriétés, y compris l'emplacement:</p>
-
-<pre class="brush: js">var tabs = require("sdk/tabs");
-tabs.open("http://www.example.com");</pre>
-
-<h3 id="Track_tabs">Track tabs</h3>
-
-<p>You can register event listeners to be notified when tabs open, close, finish loading DOM content, or are made active or inactive:</p>
-
-<pre class="brush: js">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);
-});</pre>
-
-<h3 id="Access_tabs">Access tabs</h3>
-
-<p>The module itself can be used as a list of all opened tabs across all windows. In particular, you can enumerate it:</p>
-
-<pre class="brush: js">var tabs = require('sdk/tabs');
-for (let tab of tabs)
- console.log(tab.title);</pre>
-
-<p>You can also access individual tabs by index:</p>
-
-<pre class="brush: js">var tabs = require('sdk/tabs');
-
-tabs.on('ready', function () {
- console.log('first: ' + tabs[0].title);
- console.log('last: ' + tabs[tabs.length-1].title);
-});</pre>
-
-<p>You can access the currently active tab:</p>
-
-<pre class="brush: js">var tabs = require('sdk/tabs');
-
-tabs.on('activate', function () {
- console.log('active: ' + tabs.activeTab.url);
-});</pre>
-
-<h3 id="Track_a_single_tab">Track a single tab</h3>
-
-<p>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 <a href="https://developer.mozilla.org/en-US/docs/Working_with_BFCache">"back-forward cache"</a>:</p>
-
-<pre class="brush: js">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);</pre>
-
-<h3 id="Manipulate_a_tab">Manipulate a tab</h3>
-
-<p>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 <code>ready</code> event fires). By setting the <code>url</code> property you can load a new page in the tab:</p>
-
-<pre class="brush: js">var tabs = require("sdk/tabs");
-tabs.on('activate', function(tab) {
- tab.url = "http://www.example.com";
-});</pre>
-
-<h3 id="Run_scripts_in_a_tab">Run scripts in a tab</h3>
-
-<p>You can attach a <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">content script</a> to the page hosted in a tab, and use that to access and manipulate the page's content (see the <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">Modifying the Page Hosted by a Tab</a> tutorial):</p>
-
-<pre class="brush: js">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)
- })
-});</pre>
-
-<p>Note that <code>tab.attach</code> 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.</p>
-
-<h3 id="Attaching_stylesheets">Attaching stylesheets</h3>
-
-<div class="geckoVersionNote">
-<p>New in Firefox 34.</p>
-</div>
-
-<p>You can't attach style sheets to a tab using <code>tab.attach()</code>, but from Firefox 34 onwards you can attach and detach them using the low-level <a href="/en-US/Add-ons/SDK/Low-Level_APIs/stylesheet_style">stylesheet/style</a> and <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_mod">content/mod</a> 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:</p>
-
-<pre class="brush: js">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);
- }
- }
-});</pre>
-
-<h3 id="Private_windows">Private windows</h3>
-
-<p>If your add-on has not opted into private browsing, then you won't see any tabs that are hosted by private browser windows.</p>
-
-<p>Tabs hosted by private browser windows won't be seen if you enumerate the <code>tabs</code> module itself, and you won't receive any events for them.</p>
-
-<p>To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">documentation for the <code>private-browsing</code> module</a>.</p>
-
-<h3 id="Converting_to_XUL_tabs">Converting to XUL tabs</h3>
-
-<p>To convert from the high-level <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#Tab"><code>Tab</code></a> objects used in this API to the low-level <a href="/en-US/docs/Mozilla/Tech/XUL/tab">XUL <code>tab</code></a> objects used in the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/tabs_utils"><code>tabs/utils</code></a> API and by traditional add-ons, use the <code>viewFor()</code> function exported by the <code>viewFor</code> module.</p>
-
-<p>To convert back the other way, from a XUL <code>tab</code> to a high-level <code>Tab</code> object, use the <code>modelFor()</code> function, exported by the <code>modelFor</code> module.</p>
-
-<p>Here's an example converting from a high-level <code>Tab</code> to a XUL <code>tab</code> and then back the other way:</p>
-
-<pre class="brush: js">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);
-</pre>
-
-<p>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 <a href="http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/">multiprocess Firefox</a>.</p>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Functions">Functions</h3>
-
-<h4 class="addon-sdk-api-name" id="open(options)"><code>open(options)</code></h4>
-
-<p>Opens a new tab. The new tab will open in the active window or in a new window, depending on the <code>inNewWindow</code> option.</p>
-
-<p><strong>Example</strong></p>
-
-<pre class="brush: js">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.
- }
-});</pre>
-
-<h5 id="Parameters">Parameters</h5>
-
-<p><strong>options : object</strong><br>
- Required options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>url</td>
- <td>string</td>
- <td>
- <p>String URL to be opened in the new tab. This is a required property.</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<p>Optional options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>isPrivate</td>
- <td>boolean</td>
- <td>
- <p>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 <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">private-browsing</a> documentation for more information. Defaults to <code>false</code>.</p>
- </td>
- </tr>
- <tr>
- <td>inNewWindow</td>
- <td>boolean</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>inBackground</td>
- <td>boolean</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>isPinned</td>
- <td>boolean</td>
- <td>
- <p>If present and true, then the new tab will be pinned as an <a href="http://support.mozilla.com/en-US/kb/what-are-app-tabs">app tab</a>.</p>
- </td>
- </tr>
- <tr>
- <td>onOpen</td>
- <td>function</td>
- <td>
- <p>A callback function that will be registered for the 'open' event. This is an optional property.</p>
- </td>
- </tr>
- <tr>
- <td>onClose</td>
- <td>function</td>
- <td>
- <p>A callback function that will be registered for the 'close' event. This is an optional property.</p>
- </td>
- </tr>
- <tr>
- <td>onReady</td>
- <td>function</td>
- <td>
- <p>A callback function that will be registered for the 'ready' event. This is an optional property.</p>
- </td>
- </tr>
- <tr>
- <td>onLoad</td>
- <td>function</td>
- <td>
- <p>A callback function that will be registered for the 'load' event. This is an optional property.</p>
- </td>
- </tr>
- <tr>
- <td>onPageShow</td>
- <td>function</td>
- <td>
- <p>A callback function that will be registered for the 'pageshow' event. This is an optional property.</p>
- </td>
- </tr>
- <tr>
- <td>onActivate</td>
- <td>function</td>
- <td>
- <p>A callback function that will be registered for the 'activate' event. This is an optional property.</p>
- </td>
- </tr>
- <tr>
- <td>onDeactivate</td>
- <td>function</td>
- <td>
- <p>A callback function that will be registered for the 'deactivate' event. This is an optional property.</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h3 id="Properties">Properties</h3>
-
-<h4 class="addon-sdk-api-name" id="activeTab"><code>activeTab</code></h4>
-
-<p>The currently active tab in the active window. This property is read-only. To activate a <code>Tab</code> object, call its <code>activate</code> method.</p>
-
-<p><strong>Example</strong></p>
-
-<pre class="brush: js">// Get the active tab's title.
-var tabs = require("sdk/tabs");
-console.log("title of active tab is " + tabs.activeTab.title);</pre>
-
-<h4 class="addon-sdk-api-name" id="length"><code>length</code></h4>
-
-<p>The number of open tabs across all windows.</p>
-
-<h3 id="Events">Events</h3>
-
-<h4 class="addon-sdk-api-name" id="open"><code>open</code></h4>
-
-<p>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.</p>
-
-<p>Properties relating to the tab's content (for example: <code>title</code>, <code>favicon</code>, and <code>url</code>) will not be correct at this point. If you need to access these properties, listen for the <code>ready</code> event:</p>
-
-<pre class="brush: js">var tabs = require("sdk/tabs");
-tabs.on('open', function(tab){
- tab.on('ready', function(tab){
- console.log(tab.url);
- });
-});</pre>
-
-<h5 id="Arguments">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object that just opened.</p>
-
-<h4 class="addon-sdk-api-name" id="close"><code>close</code></h4>
-
-<p>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.</p>
-
-<h5 id="Arguments_2">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object that has closed.</p>
-
-<h4 class="addon-sdk-api-name" id="ready"><code>ready</code></h4>
-
-<p>This event is emitted when the DOM for a tab's content is ready. It is equivalent to the <code>DOMContentLoaded</code> event for the given content page.</p>
-
-<p>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.</p>
-
-<p>After this event has been emitted, all properties relating to the tab's content can be used.</p>
-
-<h5 id="Arguments_3">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object that has loaded.</p>
-
-<h4 class="addon-sdk-api-name" id="activate"><code>activate</code></h4>
-
-<p>This event is emitted when an inactive tab is made active.</p>
-
-<h5 id="Arguments_4">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object that has become active.</p>
-
-<h4 class="addon-sdk-api-name" id="deactivate"><code>deactivate</code></h4>
-
-<p>This event is emitted when the active tab is made inactive.</p>
-
-<h5 id="Arguments_5">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object that has become inactive.</p>
-
-<h2 id="Tab">Tab</h2>
-
-<p>A <code>Tab</code> instance represents a single open tab. It contains various tab properties, several methods for manipulation, as well as per-tab event registration.</p>
-
-<p>Tabs emit all the events described in the Events section. Listeners are passed the <code>Tab</code> object that triggered the event.</p>
-
-<h3 id="Methods">Methods</h3>
-
-<h4 class="addon-sdk-api-name" id="pin()"><code>pin()</code></h4>
-
-<p>Pins this tab as an <a href="http://support.mozilla.com/en-US/kb/what-are-app-tabs">app tab</a>.</p>
-
-<h4 class="addon-sdk-api-name" id="unpin()"><code>unpin()</code></h4>
-
-<p>Unpins this tab.</p>
-
-<h4 class="addon-sdk-api-name" id="close(callback)"><code>close(callback)</code></h4>
-
-<p>Closes this tab.</p>
-
-<h5 id="Parameters_2">Parameters</h5>
-
-<p><strong>callback : function</strong><br>
- A function to be called when the tab finishes its closing process. This is an optional argument.</p>
-
-<h4 class="addon-sdk-api-name" id="reload()"><code>reload()</code></h4>
-
-<p>Reloads this tab.</p>
-
-<h4 class="addon-sdk-api-name" id="activate()"><code>activate()</code></h4>
-
-<p>Makes this tab active, which will bring this tab to the foreground.</p>
-
-<h4 class="addon-sdk-api-name" id="getThumbnail()"><code>getThumbnail()</code></h4>
-
-<p>Returns thumbnail data URI of the page currently loaded in this tab.</p>
-
-<h4 class="addon-sdk-api-name" id="attach(options)"><code>attach(options)</code></h4>
-
-<p>Attach one or more scripts to the document loaded in the tab. Note that by attaching inside <em>ready</em> 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.</p>
-
-<p><strong>Example</strong></p>
-
-<pre class="brush: js">var tabs = require("sdk/tabs");
-
-tabs.on('ready', function(tab) {
- var worker = tab.attach({
- contentScript:
- 'document.body.style.border = "5px solid red";'
- });
-});</pre>
-
-<h5 id="Parameters_3">Parameters</h5>
-
-<p><strong>options : object</strong><br>
- Optional options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>contentScriptFile</td>
- <td>string,array</td>
- <td>
- <p>The local file URLs of content scripts to load. Content scripts specified by this option are loaded <em>before</em> those specified by the <code>contentScript</code> option. Optional.</p>
- </td>
- </tr>
- <tr>
- <td>contentScript</td>
- <td>string,array</td>
- <td>
- <p>A string or an array of strings of code to be evaluated in the context. Content scripts specified by this option are loaded <em>after</em> those specified by the <code>contentScriptFile</code> option. Optional.</p>
- </td>
- </tr>
- <tr>
- <td>contentScriptOptions</td>
- <td>object</td>
- <td>
- <p>You can use this option to define read-only values for your content scripts.</p>
-
- <p>The option consists of an object literal listing <code>name:value</code> pairs for the values you want to provide to the content script. For example:</p>
-
- <pre class="brush: js">
-// main.js
-
-const tabs = require("sdk/tabs");
-
-tabs.open({
- url: "./page.html",
- onReady: function(tab) {
- tab.attach({
- contentScriptFile: "./content-script.js",
- contentScriptOptions: {
- a: "blah"
- }
- });
- }
-});</pre>
-
- <p>The values are accessible to content scripts via the <code>self.options</code> property:</p>
-
- <pre class="brush: js">
-// content-script.js
-
-alert(self.options.a);</pre>
- </td>
- </tr>
- <tr>
- <td>onMessage</td>
- <td>function</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>onError</td>
- <td>function</td>
- <td>A function called when the content worker receives an error from content scripts. Listeners are passed a single argument, <code>error</code>, which is the error posted from the content script and an object of type <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error">Error</a>. Optional</td>
- </tr>
- </tbody>
-</table>
-
-<h5 id="Returns">Returns</h5>
-
-<p><strong>Worker</strong> : The <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker">Worker</a> object can be used to communicate with the content script. See <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Content Scripts guide</a> to learn the details.</p>
-
-<h3 id="Properties_2">Properties</h3>
-
-<h4 class="addon-sdk-api-name" id="id"><code>id</code></h4>
-
-<p>The unique id for the tab. This property is read-only.</p>
-
-<h4 class="addon-sdk-api-name" id="title"><code>title</code></h4>
-
-<p>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.</p>
-
-<h4 class="addon-sdk-api-name" id="url"><code>url</code></h4>
-
-<p>The URL of the page currently loaded in the tab. This property can be set to load a different URL in the tab.</p>
-
-<h4 class="addon-sdk-api-name" id="favicon"><code>favicon</code></h4>
-
-<p>The URL of the favicon for the page currently loaded in the tab. This property is read-only.</p>
-
-<div class="warning">This property is deprecated. From version 1.15, use the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_favicon">favicon module's <code>getFavicon()</code></a> function instead.</div>
-
-<h4 class="addon-sdk-api-name" id="contentType"><code>contentType</code></h4>
-
-<div class="note">
-<p><strong>This is currently an experimental API, so we might change it in future releases.</strong></p>
-
-<p>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.</p>
-</div>
-
-<h4 class="addon-sdk-api-name" id="index"><code>index</code></h4>
-
-<p>The index of the tab relative to other tabs in the application window. This property can be set to change its relative position.</p>
-
-<h4 class="addon-sdk-api-name" id="isPinned"><code>isPinned</code></h4>
-
-<p>Whether or not this tab is pinned as an <a href="http://support.mozilla.com/en-US/kb/what-are-app-tabs">app tab</a>. This property is read-only.</p>
-
-<h4 class="addon-sdk-api-name" id="window"><code>window</code></h4>
-
-<p>The <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#BrowserWindow"><code>window</code></a> object for this tab.</p>
-
-<h4 class="addon-sdk-api-name" id="readyState"><code>readyState</code></h4>
-
-<div class="geckoVersionNote">
-<p>New in Firefox 33.</p>
-</div>
-
-<p>A string telling you the load state of the document hosted by this tab. This corresponds directly to <a href="/en-US/docs/Web/API/document.readyState"><code>Document.readyState</code></a>. It has one of four possible values:</p>
-
-<ul>
- <li>"uninitialized": the tab's document is not yet loading</li>
- <li>"loading": the tab's document is still in the process of loading</li>
- <li>"interactive": the tab's document has loaded and is parsed, but resources such as images and stylesheets may still be loading</li>
- <li>"complete": the tab's document and all resources are fully loaded</li>
-</ul>
-
-<p>Once a tab's <code>readyState</code> has entered "interactive", you can retrieve properties such as the document's URL.</p>
-
-<h3 id="Events_2">Events</h3>
-
-<h4 class="addon-sdk-api-name" id="close_2"><code>close</code></h4>
-
-<p>This event is emitted when the tab is closed. It's also emitted when the tab's window is closed.</p>
-
-<h5 id="Arguments_6">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object.</p>
-
-<h4 class="addon-sdk-api-name" id="ready_2"><code>ready</code></h4>
-
-<p>This event is emitted when the DOM for the tab's content is ready. It is equivalent to the <a href="https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded"><code>DOMContentLoaded</code></a> 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.</p>
-
-<p>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.</p>
-
-<h5 id="Arguments_7">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object.</p>
-
-<h4 class="addon-sdk-api-name" id="load"><code>load</code></h4>
-
-<p>This event is emitted when the page for the tab's content is loaded. It is equivalent to the <a href="https://developer.mozilla.org/en-US/docs/Web/Reference/Events/load"><code>load</code></a> event for the given content page. At this point the document and its resources, such as images and stylesheets, have finished loading.</p>
-
-<p>This event can be used for pages that do not have a <code>DOMContentLoaded</code> event, like images. For pages that have a <code>DOMContentLoaded</code> event, <code>load</code> is fired after <code>ready</code>.</p>
-
-<p>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.</p>
-
-<h5 id="Arguments_8">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object.</p>
-
-<h4 class="addon-sdk-api-name" id="pageshow"><code>pageshow</code></h4>
-
-<p>The <code>pageshow</code> event is emitted when the page for a tab's content is loaded. It is equivalent to the <a href="https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/pageshow"><code>pageshow</code></a> event for the given content page.</p>
-
-<p>This event is similar to the <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#load"><code>load</code></a> and <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#ready"><code>ready</code></a> events, except unlike <code>load</code> and <code>ready</code>, <code>pageshow</code> is triggered if the page was retrieved from the <a href="https://developer.mozilla.org/en-US/docs/Working_with_BFCache">bfcache</a>. 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 <code>pageshow</code> event is emitted when the user moves back to the previous page, while the <code>load</code> and <code>ready</code> events are not.</p>
-
-<p>This event is <em>not</em> emitted when the tab is made the active tab: to get notified about that, you need to listen to the <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#activate"><code>activate</code></a> event.</p>
-
-<p>After this event has been emitted, all properties relating to the tab's content can be used. It is emitted after <code>load</code> and <code>ready</code>.</p>
-
-<h5 id="Arguments_9">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object.</p>
-
-<p><strong>persisted</strong> : Listeners are passed a boolean value indicating whether or not the page was loaded from the <a href="https://developer.mozilla.org/en-US/docs/Working_with_BFCache">bfcache</a>.</p>
-
-<h4 class="addon-sdk-api-name" id="activate_2"><code>activate</code></h4>
-
-<p>This event is emitted when the tab is made active.</p>
-
-<p>Note that you cannot guarantee that a tab's content, or even its <code>url</code>, are initialized at the time <code>activate</code> is emitted. This is because when a new tab is opened, its <code>activate</code> event may be emitted before the content is loaded.</p>
-
-<p>You can use the tab's <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#readyState"><code>readyState</code></a> property to determine whether the tab's content and <code>url</code> will be available: if <code>readyState</code> is <code>uninitialized</code> or <code>loading</code>, then you can't access the tab's properties and must wait for the tab's <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#ready_2"><code>ready</code></a> event.</p>
-
-<h5 id="Arguments_10">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object.</p>
-
-<h4 class="addon-sdk-api-name" id="deactivate_2"><code>deactivate</code></h4>
-
-<p>This event is emitted when the tab is made inactive.</p>
-
-<h5 id="Arguments_11">Arguments</h5>
-
-<p><strong>Tab</strong> : Listeners are passed the tab object.</p>
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
----
-<p> </p>
-
-<div class="warning">
-<p>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.</p>
-
-<p>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 <a href="/en-US/Add-ons/WebExtensions">WebExtensions</a> instead. If you maintain an add-on which uses the techniques described here, consider migrating it to use WebExtensions.</p>
-
-<p><strong>Starting from <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 53</a>, no new legacy add-ons will be accepted on addons.mozilla.org (AMO) for desktop Firefox and Firefox for Android.</strong></p>
-
-<p><strong>Starting from <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 57</a>, only extensions developed using WebExtensions APIs will be supported on Desktop Firefox and Firefox for Android. </strong></p>
-
-<p>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 <a href="https://blog.mozilla.org/addons/2017/02/16/the-road-to-firefox-57-compatibility-milestones/">"Compatibility Milestones" document</a> for more information.</p>
-
-<p>A wiki page containing <a href="https://wiki.mozilla.org/Add-ons/developer/communication">resources, migration paths, office hours, and more</a>, is available to help developers transition to the new technologies.</p>
-</div>
-
-<section class="Quick_links" id="Quick_Links">
-<ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions"><strong>Browser extensions</strong></a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Getting_started">Getting started</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/What_are_WebExtensions">What are extensions?</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension">Your first extension</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_second_WebExtension">Your second extension</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">Anatomy of an extension</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Examples">Example extensions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/What_next_">What next?</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Concepts">Concepts</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Using_the_JavaScript_APIs">Using the JavaScript APIs</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts">Content scripts</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns">Match patterns</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Working_with_files">Working with files</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Internationalization">Internationalization</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Security_best_practices">Security best practices</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">Content Security Policy</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">Native messaging</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#User_Interface">User interface</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface">User Interface</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_action">Toolbar button</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Page_actions">Address bar button</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars">Sidebars</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items">Context menu items</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages">Options page</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages">Extension pages</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Notifications">Notifications</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Omnibox">Address bar suggestions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/devtools_panels">Developer tools panels</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#How_to">How to</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests">Intercept HTTP requests</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Modify_a_web_page">Modify a web page</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Safely_inserting_external_content_into_a_page">Insert external content</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Add_a_button_to_the_toolbar">Add a button to the toolbar</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Implement_a_settings_page">Implement a settings page</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Working_with_the_Tabs_API">Work with the Tabs API</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_the_Bookmarks_API">Work with the Bookmarks API</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_the_Cookies_API">Work with the Cookies API</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_contextual_identities">Work with contextual identities</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Porting">Porting</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Porting_a_Google_Chrome_extension">Porting a Google Chrome extension</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Porting_a_legacy_Firefox_add-on">Porting a legacy Firefox extension</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Embedded_WebExtensions">Embedded WebExtensions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_the_Add-on_SDK">Comparison with the Add-on SDK</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_XUL_XPCOM_extensions">Comparison with XUL/XPCOM extensions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities">Chrome incompatibilities</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Differences_between_desktop_and_Android">Differences between desktop and Android</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Firefox_workflow">Firefox workflow</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/User_experience_best_practices">User Experience</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">Temporary Installation in Firefox</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Debugging">Debugging</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Testing_persistent_and_restart_features">Testing persistent and restart features</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Developing_WebExtensions_for_Firefox_for_Android">Developing for Firefox for Android</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Getting_started_with_web-ext">Getting started with web-ext</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/web-ext_command_reference">web-ext command reference</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID">Extensions and the Add-on ID</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Request_the_right_permissions">Request the right permissions</a></li>
- </ol>
- </li>
- <li data-default-state="closed"><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API">JavaScript APIs</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs">Browser support for JavaScript APIs</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/alarms">alarms</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks">bookmarks</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction">browserAction</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings">browserSettings</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browsingData">browsingData</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/clipboard">clipboard</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/commands">commands</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contentScripts">contentScripts</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities">contextualIdentities</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies">cookies</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow">devtools.inspectedWindow</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.network">devtools.network</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.panels">devtools.panels</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns">dns</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/downloads">downloads</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/events">events</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/extension">extension</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/extensionTypes">extensionTypes</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find">find</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history">history</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/i18n">i18n</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/identity">identity</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/idle">idle</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/management">management</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus">menus</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/notifications">notifications</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/omnibox">omnibox</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction">pageAction</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/permissions">permissions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pkcs11">pkcs11</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy">privacy</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy">proxy</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime">runtime</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/search">search</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions">sessions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sidebarAction">sidebarAction</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage">storage</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs">tabs</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/theme">theme</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/topSites">topSites</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/types">types</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation">webNavigation</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/windows">windows</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">Manifest keys</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/applications">applications</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author">author</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background">background</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action">browser_action</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides">chrome_settings_overrides</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/chrome_url_overrides">chrome_url_overrides</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/commands">commands</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts">content_scripts</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_security_policy">content_security_policy</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/default_locale">default_locale</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description">description</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/developer">developer</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/devtools_page">devtools_page</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url">homepage_url</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/icons">icons</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/incognito">incognito</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/manifest_version">manifest_version</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name">name</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/omnibox">omnibox</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions">optional_permissions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_ui">options_ui</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/page_action">page_action</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissions</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers">protocol_handlers</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/short_name">short_name</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/sidebar_action">sidebar_action</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/theme">theme</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version">version</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version_name">version_name</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources">web_accessible_resources</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Themes"><strong>Themes</strong></a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Theme_concepts">Browser themes</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Theme_concepts">Browser theme concepts</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_themes">Lightweight themes</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_themes">Lightweight themes</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_Themes/FAQ">Lightweight themes FAQ</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution"><strong>Publishing and Distribution</strong></a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution">Publishing add-ons</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution">Signing and distribution overview</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Package_your_extension_">Package your extension</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution/Submitting_an_add-on">Submit an add-on</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Source_Code_Submission">Source code submission</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution/Resources_for_publishers">Resources for publishers</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Listing">Creating an appealing listing</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/AMO/Policy/Reviews">Review policies</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/AMO/Policy/Agreement">Developer agreement</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/AMO/Policy/Featured">Featured add-ons</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution/Retiring_your_extension">Retiring your extension</a></li>
- </ol>
- </li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options">Distributing add-ons</a>
- <ol>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Sideloading_add-ons">For sideloading</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps">For desktop apps</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise">For an enterprise</a></li>
- </ol>
- </li>
- <li><a href="https://discourse.mozilla.org/c/add-ons"><strong>Community and Support</strong></a></li>
- <li><a href="#">Channels</a>
- <ol>
- <li><a href="https://blog.mozilla.org/addons">Add-ons blog</a></li>
- <li><a href="https://discourse.mozilla.org/c/add-ons">Add-on forums</a></li>
- <li><a href="http://stackoverflow.com/questions/tagged/firefox-addon">Stack Overflow</a></li>
- <li><a href="/en-US/docs/Mozilla/Add-ons/#Contact_us">Contact us</a></li>
- </ol>
- </li>
-</ol>
-</section>
-
-<p> </p>
-
-<p>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.</p>
-
-<hr>
-<h3 id="Tutorials"><a href="/en-US/Add-ons/SDK/Tutorials">Tutorials</a></h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/en-US/Add-ons/SDK/Tutorials#getting-started">Getting started</a></dt>
- <dd>How to <a href="/en-US/Add-ons/SDK/Tutorials/Installation">install the SDK</a> and <a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_(jpm)">use the jpm tool</a> to develop, test, and package add-ons.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Tutorials#interact-with-the-browser">Interact with the browser</a></dt>
- <dd><a href="/en-US/Add-ons/SDK/Tutorials/Open_a_Web_Page">Open web pages</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Listen_For_Page_Load">listen for pages loading</a> and <a href="/en-US/Add-ons/SDK/Tutorials/List_Open_Tabs">list open pages</a>.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Tutorials#development-techniques">Development techniques</a></dt>
- <dd>Learn about common development techniques, such as <a href="/en-US/Add-ons/SDK/Tutorials/Unit_testing">unit testing</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Logging">logging</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Creating_Reusable_Modules">creating reusable modules</a>, <a href="/en-US/Add-ons/SDK/Tutorials/l10n">localization</a>, and <a href="/en-US/Add-ons/SDK/Tutorials/Mobile_development">mobile development</a>.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/en-US/Add-ons/SDK/Tutorials#create-user-interfaces">Create user interface components</a></dt>
- <dd>Create user interface components such as <a href="/en-US/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">toolbar buttons</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item">context menus</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">menu items</a>, and <a href="/en-US/Add-ons/SDK/Tutorials/Display_a_Popup">dialogs</a>.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Tutorials#modify-web-pages">Modify web pages</a></dt>
- <dd>Modify pages <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">matching a URL pattern</a> or dynamically <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">modify a particular tab</a>.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Tutorials/Annotator">Putting it together</a></dt>
- <dd>Walkthrough of the Annotator example add-on.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<h3 id="Guides">Guides</h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/en-US/Add-ons/SDK/Guides#contributors-guide">Contributor's guide</a></dt>
- <dd>Learn <a href="/en-US/Add-ons/SDK/Guides/Getting_Started">how to start contributing</a> to the SDK and about the most important idioms used in the SDK code such as <a href="/en-US/Add-ons/SDK/Guides/Modules">modules</a>, <a href="/en-US/Add-ons/SDK/Guides/Classes_and_Inheritance">classes and inheritance</a>, <a href="/en-US/Add-ons/SDK/Guides/Private_Properties">private properties</a>, and <a href="/en-US/Add-ons/SDK/Guides/Content_Processes">content processes</a>.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Guides#sdk-infrastructure">SDK infrastructure</a></dt>
- <dd>Aspects of the SDK's underlying technology: <a href="/en-US/Add-ons/SDK/Guides/Module_structure_of_the_SDK">modules</a>, the <a href="/en-US/Add-ons/SDK/Guides/Program_ID">Program ID</a> and the rules defining <a href="/en-US/Add-ons/SDK/Guides/Firefox_Compatibility">Firefox compatibility</a>.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Content scripts</a></dt>
- <dd>A detailed guide to working with content scripts.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/en-US/Add-ons/SDK/Guides#sdk-idioms">SDK idioms</a></dt>
- <dd>The SDK's <a href="/en-US/Add-ons/SDK/Guides/Working_with_Events">event framework</a> and the <a href="/en-US/Add-ons/SDK/Guides/Two_Types_of_Scripts">distinction between add-on scripts and content scripts</a>.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">XUL migration</a></dt>
- <dd>A guide to <a href="/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">porting XUL add-ons to the SDK</a>. This guide includes a <a href="/en-US/Add-ons/SDK/Guides/XUL_vs_SDK">comparison of the two toolsets</a> and a <a href="/en-US/Add-ons/SDK/Guides/Porting_the_Library_Detector">working example</a> of porting a XUL add-on.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Guides/Multiprocess_Firefox_and_the_SDK">Multiprocess Firefox and the SDK</a></dt>
- <dd>How to check whether your add-on is compatible with multiprocess Firefox or not and fix it accordingly.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<h3 id="Reference">Reference</h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/en-US/Add-ons/SDK/High-Level_APIs">High-Level APIs</a></dt>
- <dd>Reference documentation for the high-level SDK APIs.</dd>
- <dt><a href="/en-US/Add-ons/SDK/Tools">Tools reference</a></dt>
- <dd>Reference documentation for the <a href="/en-US/Add-ons/SDK/Tools/jpm">jpm tool</a> used to develop, test and package add-ons, the <a href="/en-US/Add-ons/SDK/Tools/console">console</a> global used for logging, and the <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> file.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/en-US/Add-ons/SDK/Low-Level_APIs">Low-Level APIs</a></dt>
- <dd>Reference documentation for the low-level SDK APIs.</dd>
-</dl>
-</div>
-</div>
-
-<p> </p>
-
-<hr>
-<div>
-<div class="overheadIndicator communitybox" dir="ltr">
-<div class="column-container">
-<h2 id="Join_the_Add-on_SDK_community">Join the Add-on SDK community</h2>
-
-<div class="column-half">
-<div class="communitysubhead">Choose your preferred method for joining the discussion:</div>
-
-<ul class="communitymailinglist">
- <li><a href="https://mail.mozilla.org/listinfo/dev-addons">Mailing list</a></li>
- <li><a href="https://twitter.com/mozillajetpack">Twitter</a></li>
- <li><a href="http://stackoverflow.com/questions/tagged/firefox-addon-sdk">Stack Overflow</a></li>
- <li><a href="http://groups.google.com/group/https://groups.google.com/forum/?fromgroups#!forum/mozilla-labs-jetpack">Newsgroup</a></li>
- <li><a href="http://groups.google.com/group/https://groups.google.com/forum/?fromgroups#!forum/mozilla-labs-jetpack/feeds">RSS feed</a></li>
-</ul>
-</div>
-
-<div class="column-half">
-<ul class="communitycontact">
- <li><strong>IRC: </strong><a href="irc://irc.mozilla.org/jetpack">#jetpack</a> <span class="smaller">(<a href="https://wiki.mozilla.org/IRC">learn more</a>)</span></li>
- <li><strong>Team info: </strong><a href="https://wiki.mozilla.org/Jetpack" title="Designs and plans for the SDK tools">Jetpack Wiki</a></li>
-</ul>
-</div>
-</div>
-</div>
-</div>
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
----
-<p>Les modules de cette section implémentent des API de bas niveau. Ces modules se divisent à peu près en trois catégories:</p>
-
-<ul>
- <li>
- <p>utilitaires fondamentaux tels que la <a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_collection">collection</a>. De nombreux modules complémentaires voudront probablement utiliser des modules de cette catégorie.</p>
- </li>
- <li>
- <p>blocs de construction pour les modules de niveau supérieur, tels que les <a href="/en-US/Add-ons/SDK/Low-Level_APIs/event_core">events</a> et les <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker">worker</a>. Vous êtes plus susceptible de les utiliser si vous créez vos propres modules qui implémentent de nouvelles API, étendant ainsi le SDK lui-même.</p>
- </li>
- <li>
- <p>des modules privilégiés qui exposent de puissantes capacités de bas niveau telles que <a href="/en-US/Add-ons/SDK/Low-Level_APIs/window_utils">window/utils</a> et <a href="/en-US/Add-ons/SDK/Low-Level_APIs/net_xhr">net/xhr</a>. Vous pouvez utiliser ces modules dans votre module complémentaire si vous en avez besoin, mais sachez que le coût d'un accès privilégié est la nécessité de prendre des précautions de sécurité plus élaborées. Dans de nombreux cas, ces modules ont des analogues plus simples et plus restreints parmi les "API de haut niveau" (par exemple, <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows">windows</a> ou <a href="/en-US/Add-ons/SDK/High-Level_APIs/request">request</a>).</p>
- </li>
-</ul>
-
-<p>Ces modules sont toujours en développement actif et nous prévoyons d'y apporter des modifications incompatibles dans les prochaines versions.</p>
-
-<p>{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Low-Level_APIs", 5) }}</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">
-<p>Expérimental</p>
-</div>
-
-<p><span class="seoSummary">Fournit des flux d'octets en lecture/écriture.</span></p>
-
-<pre class="brush: js">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;
-}
-</pre>
-
-<pre class="brush: js">function writeBinaryDataToFile(data, filename) {
- var fileIO = require("sdk/io/file");
- var ByteWriter = fileIO.open(filename, "wb");
- if (!ByteWriter.closed) {
- ByteWriter.write(data);
- ByteWriter.close();
- }
-}</pre>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Constructeurs">Constructeurs</h3>
-
-<h4 class="addon-sdk-api-name" id="ByteReader(inputStream)"><code>ByteReader(inputStream)</code></h4>
-
-<p>Crée un flux d'entrée binaire qui lit les octets d'un flux de support.</p>
-
-<p>Vous pouvez également créer un objets <code>ByteReader</code> en utilisant la fonction io/file <a href="/fr/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/io_file#open(path.2C_mode)" title="/fr/Add-ons/SDK/Low-Level_APIs/io_file#open(path.2C_mode)"><code>open()</code></a>.</p>
-
-<h5 id="Paramètres">Paramètres</h5>
-
-<p><strong>inputStream: </strong><strong>flux</strong><br>
- Le flux de support, un <a href="/fr/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIInputStream" title="http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsIInputStream.idl"><code>nsIInputStream</code> </a></p>
-
-<h4 class="addon-sdk-api-name" id="ByteWriter(outputStream)"><code>ByteWriter(outputStream)</code></h4>
-
-<p>Crée un flux de sortie binaire qui écrit les octets dans un flux de support.</p>
-
-<p>Vous pouvez également créer un objets <code>ByteWriter</code> en utilisant la fonction io/file <a href="/fr/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/io_file#open(path.2C_mode)"><code>open()</code></a>.</p>
-
-<h5 id="Parameters">Parameters</h5>
-
-<p><strong>outputStream : flux</strong><br>
- Le flux de support, un <a href="/fr/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIOutputStream"><code>nsIOutputStream</code></a>.</p>
-
-<h2 id="ByteReader">ByteReader</h2>
-
-<h3 id="Méthodes">Méthodes</h3>
-
-<h4 class="addon-sdk-api-name" id="close()"><code>close()</code></h4>
-
-<p>Ferme à la fois le flux et son flux de support. Si le flux est déjà fermé, une exception est levée.</p>
-
-<h4 class="addon-sdk-api-name" id="read(numBytes)"><code>read(numBytes)</code></h4>
-
-<p>Lit une chaîne à partir du flux. Si le flux est fermé, une exception est levée.</p>
-
-<h5 id="Parameters_2">Parameters</h5>
-
-<p><strong>numBytes: nombre </strong> &lt;être&gt; Le nombre d'octets à lire. Sinon donné, la totalité du flux est lu.</p>
-
-<h5 id="Retours">Retours</h5>
-
-<p><strong>string </strong>: Une chaîne contenant les octets lus. Si le flux est finit, retourne une chaîne vide.</p>
-
-<h3 id="Propriétés">Propriétés</h3>
-
-<h4 class="addon-sdk-api-name" id="closed"><code>closed</code></h4>
-
-<p>Vrai si le flux est fermé.</p>
-
-<h2 id="ByteWriter">ByteWriter</h2>
-
-<h3 id="Méthodes_2">Méthodes</h3>
-
-<h4 class="addon-sdk-api-name" id="close()_2"><code>close()</code></h4>
-
-<p>Ferme à la fois le flux et son flux de support. Si le flux est déjà fermé, une exception est levée.</p>
-
-<h4 class="addon-sdk-api-name" id="write(str)"><code>write(str)</code></h4>
-
-<p>Ecrit une chaîne dans le flux. Si le flux est fermé, une exception est levée.</p>
-
-<h5 id="Paramètres_2">Paramètres</h5>
-
-<p>str: string La chaîne à écrire .</p>
-
-<h3 id="Propriétés_2">Propriétés</h3>
-
-<h4 class="addon-sdk-api-name" id="closed_2"><code>closed</code></h4>
-
-<p>Vrai si le flux est fermé.</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">
-<p>Expérimental</p>
-</div>
-
-<p><span class="seoSummary">Permet d'accéder au système de fichiers local.</span></p>
-
-<h2 id="Utilisation">Utilisation</h2>
-
-<h3 id="Paths">Paths</h3>
-
-<p>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 (<code>\</code>), et sur les systèmes de type Unix comme Linux et OS X les slash sont utilisés (<code>/</code>).</p>
-
-<p>To ensure your add-on works for everyone, generate paths using the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/io_file#join(...)"><code>join</code></a> function. Unfortunately this API does not currently provide a way to obtain an absolute base path which you could then use with <code>join</code>. For now, you need to <a href="/en-US/Add-ons/SDK/Tutorials/Chrome_Authority"><code>require("chrome")</code></a> and use the XPCOM directory service as described in <a href="/en-US/Add-ons/Code_snippets/File_I_O">this article about File I/O</a>.</p>
-
-<p>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 <code>C:\Users\Myk</code>, you need to use the string <code>"C:\\Users\\Myk"</code>, not <code>"C:\Users\Myk"</code>.  Read more about <a href="/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Escaping_characters">escaping characters in strings</a>.</p>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Functions">Functions</h3>
-
-<h4 class="addon-sdk-api-name" id="basename(path)"><code>basename(path)</code></h4>
-
-<div class="note">
-<p>The <code>path</code> parameter must be an absolute path, relative paths will cause an error.</p>
-
-<p>Use the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/fs_path">fs/path</a> module for relative path support.</p>
-</div>
-
-<p>Returns the last component of the given path. For example, <code>basename("/foo/bar/baz")</code> returns <code>"baz"</code>. If the path has no components, the empty string is returned.</p>
-
-<h5 id="Parameters">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of a file.</p>
-
-<h5 id="Returns">Returns</h5>
-
-<p><strong>string</strong> : The last component of the given path.</p>
-
-<h4 class="addon-sdk-api-name" id="dirname(path)"><code>dirname(path)</code></h4>
-
-<p>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.</p>
-
-<h5 id="Parameters_2">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of a file.</p>
-
-<h5 id="Returns_2">Returns</h5>
-
-<p><strong>string</strong> : The path of the directory containing the file.</p>
-
-<h4 class="addon-sdk-api-name" id="exists(path)"><code>exists(path)</code></h4>
-
-<p>Returns true if a file exists at the given path and false otherwise.</p>
-
-<h5 id="Parameters_3">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of a file.</p>
-
-<h5 id="Returns_3">Returns</h5>
-
-<p><strong>boolean</strong> : True if the file exists and false otherwise.</p>
-
-<h4 class="addon-sdk-api-name" id="join(...)"><code>join(...)</code></h4>
-
-<p>Takes a variable number of strings, joins them on the file system's path separator, and returns the result.</p>
-
-<h5 id="Parameters_4">Parameters</h5>
-
-<p><strong>... : strings</strong><br>
- A variable number of strings to join. The first string must be an absolute path.</p>
-
-<h5 id="Returns_4">Returns</h5>
-
-<p><strong>string</strong> : A single string formed by joining the strings on the file system's path separator.</p>
-
-<h4 class="addon-sdk-api-name" id="list(path)"><code>list(path)</code></h4>
-
-<p>Returns an array of file names in the given directory.</p>
-
-<h5 id="Parameters_5">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of the directory.</p>
-
-<h5 id="Returns_5">Returns</h5>
-
-<p><strong>array</strong> : An array of file names. Each is a basename, not a full path.</p>
-
-<h4 class="addon-sdk-api-name" id="mkpath(path)"><code>mkpath(path)</code></h4>
-
-<p>Makes a new directory named by the given path. Any subdirectories that do not exist are also created. <code>mkpath</code> can be called multiple times on the same path.</p>
-
-<h5 id="Parameters_6">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path to create.</p>
-
-<h4 class="addon-sdk-api-name" id="open(path_mode)"><code>open(path, mode)</code></h4>
-
-<p>Returns a stream providing access to the contents of a file.</p>
-
-<h5 id="Parameters_7">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of the file to open.</p>
-
-<p><strong>mode : string</strong><br>
- An optional string, each character of which describes a characteristic of the returned stream.</p>
-
-<ul>
- <li>If the string contains <code>"r"</code>, the file is opened in read-only mode.</li>
- <li><code>"w"</code> opens the file in write-only mode.</li>
- <li><code>"b"</code> opens the file in binary mode. If <code>"b"</code> is not present, the file is opened in text mode, and its contents are assumed to be UTF-8.</li>
-</ul>
-
-<p>If <em><code>mode</code></em> is not given, <code>"r"</code> is assumed, and the file is opened in read-only text mode.</p>
-
-<p>Apart from these options, this API always passes the following options:  <code>CREATE_FILE</code>, <code>TRUNCATE</code> (see <a href="https://dxr.mozilla.org/mozilla-central/source/nsprpub/pr/include/prio.h#550">https://dxr.mozilla.org/mozilla-central/source/nsprpub/pr/include/prio.h#550</a>). This means that:</p>
-
-<ul>
- <li>if the file does not exist it is created</li>
- <li>if the file exists, its length is truncated to zero</li>
- <li>it is not possible to open the file in append mode.</li>
-</ul>
-
-<h5 id="Returns_6">Returns</h5>
-
-<p><strong>stream</strong> : If the file is opened in text read-only <code>mode</code>, a <code>TextReader</code> is returned, and if text write-only mode, a <code>TextWriter</code> is returned. See <a href="/en-US/Add-ons/SDK/Low-Level_APIs/io_text-streams"><code>text-streams</code></a> for information on these text stream objects. If the file is opened in binary read-only <code>mode</code>, a <code>ByteReader</code> is returned, and if binary write-only mode, a <code>ByteWriter</code> is returned. See <a href="/en-US/Add-ons/SDK/Low-Level_APIs/io_byte-streams"><code>byte-streams</code></a> for more information on these byte stream objects. Opened files should always be closed after use by calling <code>close</code> on the returned stream.</p>
-
-<h4 class="addon-sdk-api-name" id="read(path_mode)"><code>read(path, mode)</code></h4>
-
-<p>Opens a file and returns a string containing its entire contents.</p>
-
-<h5 id="Parameters_8">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of the file to read.</p>
-
-<p><strong>mode : string</strong><br>
- An optional string, each character of which describes a characteristic of the returned stream. If the string contains <code>"b"</code>, the contents will be returned in binary mode. If <code>"b"</code> is not present or <code>mode</code> is not given, the file contents will be returned in text mode.</p>
-
-<h5 id="Returns_7">Returns</h5>
-
-<p><strong>string</strong> : A string containing the file's entire contents.</p>
-
-<h4 class="addon-sdk-api-name" id="remove(path)"><code>remove(path)</code></h4>
-
-<p>Removes a file from the file system. To remove directories, use <code>rmdir</code>.</p>
-
-<h5 id="Parameters_9">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of the file to remove.</p>
-
-<h4 class="addon-sdk-api-name" id="rmdir(path)"><code>rmdir(path)</code></h4>
-
-<p>Removes a directory from the file system. If the directory is not empty, an exception is thrown.</p>
-
-<h5 id="Parameters_10">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of the directory to remove.</p>
-
-<h4 class="addon-sdk-api-name" id="isFile(path)"><code>isFile(path)</code></h4>
-
-<p>Returns true only if this path specifies a file.</p>
-
-<pre class="brush: js">const fileIO = require("sdk/io/file");
-
-let path = "/Users/Work/";
-let list = fileIO.list(path);
-
-for (i = 0; i &lt; 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");
-  }
-}</pre>
-
-<h5 id="Parameters_11">Parameters</h5>
-
-<p><strong>path : string</strong><br>
- The path of the object.</p>
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
----
-<div class="note">
-<p>Expérimentale</p>
-</div>
-
-<p><span class="seoSummary">Une mise en œuvre de l'API <a href="http://nodejs.org/api/child_process.html" title="http://nodejs.org/api/child_process.html"> node.js <code>child_process</code></a>.</span></p>
-
-<p>Ce module vous permet d'exécuter un programme sous-jacent dans un nouveau processus. Il émule l'API node.js <code>child_process</code>, qui n'est pas documentées séparément. Cependant, il ya quelques différences :</p>
-
-<ul>
- <li>utiliser le module <code>require("sdk/system/child_process")</code></li>
- <li><code>fork()</code> n'est pas supporté</li>
- <li><code>gid</code> et <code>uid</code> ne sont pas supportés</li>
- <li>dans node.js, <code>spawn()</code> et <code>exec()</code> hériter des variables d'environnement du processus parent, par défaut. Les versions du SDK ne le font pas: alors quand vous spécifiez une commande, vous devez passer le chemin d'accès complet de la commande ou utilisez l'option <code>env</code> pour configurer l'environnement de processus enfant .</li>
-</ul>
-
-<p>Voici un exemple qui adapte l'exemple de la documentation de node.js pour <a href="http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options" title="http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options"> <code>spawn()</code> </a>:</p>
-
-<pre class="brush: js">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);
-});</pre>
-
-<h3 id="Utilisation_child_process_dans_les_extensions_non-jpm">Utilisation child_process dans les extensions non-jpm</h3>
-
-<p> </p>
-
-<pre>// 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</pre>
-
-<p> </p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">Experimental</div>
-
-<p><span class="seoSummary">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.</span></p>
-
-<h2 id="Usage">Usage</h2>
-
-<h3 id="Créer_des_bouttons"><br>
- Créer des  bouttons</h3>
-
-<p>Pour créer un boutton, vous devez lui donné un identifiant (id), une icône et un libellé:</p>
-
-<pre class="brush: js">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");
-    }
-  });</pre>
-
-<p>By default, the button appears in the Firefox toolbar:</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/6803/action-button-toolbar.png" style="display: block; height: 201px; margin-left: auto; margin-right: auto; width: 381px;">However, users can move it to the Firefox menu panel using the <a href="https://support.mozilla.org/en-US/kb/customize-firefox-controls-buttons-and-toolbars">toolbar customization feature</a>:</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/6809/action-button-menu.png" style="display: block; height: 573px; margin-left: auto; margin-right: auto; width: 381px;"></p>
-
-<h3 id="Badged_buttons">Badged buttons</h3>
-
-<div class="geckoVersionNote">
-<p>New in Firefox 36.</p>
-</div>
-
-<p>You can add a "badge" to a button using its <code>badge</code> 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 <code>badgeColor</code> property, specified as a CSS <a href="/en-US/docs/Web/CSS/color_value"><code>&lt;color&gt;</code></a> value:</p>
-
-<pre class="brush: js">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";
-  }
-}</pre>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/9803/badge.png" style="display: block; height: 168px; margin-left: auto; margin-right: auto; width: 384px;"></p>
-
-<h3 id="Specifying_multiple_icons">Specifying multiple icons</h3>
-
-<p>You can specify just one icon, or multiple icons in different sizes.</p>
-
-<p>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 <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#ActionButton(options)"><code>ActionButton</code> constructor</a>.</p>
-
-<h3 id="Responding_to_click_events">Responding to click events</h3>
-
-<p>You can respond to click events by assigning a listener to the button's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#click"><code>click</code></a> event. You can do this in the button's constructor, by assigning the listener to the <code>onClick</code> option. You can also add, or change, the listener afterwards:</p>
-
-<pre class="brush: js">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");
-}</pre>
-
-<p>The listener is passed a <code>state</code> object that contains all the button's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Properties">properties</a>.</p>
-
-<p>You can generate click events programmatically with the button's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#click()"><code>click()</code></a> method.</p>
-
-<h3 id="Disabling_buttons">Disabling buttons</h3>
-
-<p>You can disable a button by setting its <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#disabled"><code>disabled</code></a> property to <code>true</code>. A disabled button will not generate click events and its icon will appear disabled:</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/6805/action-button-toolbar-disabled.png" style="display: block; height: 201px; margin-left: auto; margin-right: auto; width: 381px;"></p>
-
-<h3 id="Updating_state">Updating state</h3>
-
-<p>You can update all the button's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Properties">properties</a> except for its <code>id</code>.</p>
-
-<p>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.</p>
-
-<p>You can set state to be specific to a window or tab using the button's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#state()"><code>state()</code></a> method. To set state like this, call <code>state()</code> with 2 parameters:</p>
-
-<ul>
- <li>the first parameter is a <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows"><code>window</code></a> or <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#Tab"><code>tab</code></a> object or as a shorthand, the string "window" for the currently active window, or the string "tab" for the currently active tab</li>
- <li>the second parameter is an object containing the state properties you wish to update.</li>
-</ul>
-
-<p>Here's an add-on with a button that disables itself when you click it, but only for the currently active window:</p>
-
-<pre class="brush: js">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
- });
-}</pre>
-
-<p>To fetch the state for a specific window or tab, call <code>state()</code>, passing in the window or tab you are interested in, and it will return the state:</p>
-
-<pre class="brush: js">var labelForActiveTab = button.state("tab").label;</pre>
-
-<p>To learn more about this, see the API documentation for <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#state()"><code>state()</code></a>.</p>
-
-<h3 id="Destroying_buttons">Destroying buttons</h3>
-
-<p>When you've finished with a button, destroy it by calling its <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#destroy()"><code>destroy()</code></a> method. After that, any attempts to access any of its properties or to call any of its methods will throw exceptions.</p>
-
-<h2 id="Globals">Globals</h2>
-
-<h3 id="Constructors">Constructors</h3>
-
-<h4 class="addon-sdk-api-name" id="ActionButton(options)"><code>ActionButton(options)</code></h4>
-
-<p>Creates an action button.</p>
-
-<h5 id="Parameters">Parameters</h5>
-
-<p><strong>options : object</strong><br>
- Required options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>id</td>
- <td>string</td>
- <td>
- <p>The button's ID. This is used internally to keep track of this button. The ID must be unique within your add-on.</p>
- </td>
- </tr>
- <tr>
- <td>label</td>
- <td>string</td>
- <td>
- <p>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.</p>
- </td>
- </tr>
- <tr>
- <td>icon</td>
- <td>url, string, object</td>
- <td>
- <p>One or more icons for the button. You can specify this in one of three ways: </p>
-
- <ul>
- <li><strong>as a resource:// URL</strong> pointing at an icon file in your add-on's "data" directory, typically constructed using <em><code>self.data.url(iconfile)</code></em></li>
- <li><strong>as a relative path</strong>: a string in the form "./iconfile", where "iconfile" is a relative path to the icon file beginning in your add-on's "data" directory</li>
- <li><strong>as an object, or dictionary of key-value pairs</strong>. Here you can specify a range of sizes for your button's icon. Each key-value pair specifies an icon:
- <ul>
- <li>each value specifies an image file as a resource:// URL or relative path.</li>
- <li>each key must be a numeric string such as "16", or "32", which represents the size in pixels of the corresponding image.</li>
- </ul>
- </li>
- </ul>
-
- <pre class="brush: js">
-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"
-    }
-  });</pre>
-
- <p>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 <a href="https://en.wikipedia.org/wiki/Retina_Display">HiDPI</a> display), these are doubled to 36 x 36 and 64 x 64 pixels, respectively. So you can supply three icon files:</p>
-
- <pre class="brush: js">
-icon: {
- "16": "./addon16.png",
- "32": "./addon32.png",
- "64": "./addon64.png"
-}</pre>
-
- <p>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:</p>
-
- <pre class="brush: js">
-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
-}
-</pre>
- </td>
- </tr>
- </tbody>
-</table>
-
-<p>Optional options:</p>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Type</th>
- <th scope="col"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>disabled</td>
- <td>boolean</td>
- <td>
- <p>Determines whether the button is disabled. Disabled buttons appear disabled in the UI, and do not respond to clicks. Defaults to false.</p>
- </td>
- </tr>
- <tr>
- <td>onClick</td>
- <td>function</td>
- <td>
- <p>Click handler for the button.</p>
- </td>
- </tr>
- <tr>
- <td>badge</td>
- <td>Number or String</td>
- <td>
- <div class="geckoVersionNote">
- <p>New in Firefox 36.</p>
- </div>
-
- <p><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Badged_buttons">Badge</a> to attach to the button.</p>
-
- <p>The badge can contain as many characters (or digits) as you like, but only the first four will be displayed.</p>
- </td>
- </tr>
- <tr>
- <td>badgeColor</td>
- <td>CSS <a href="/en-US/docs/Web/CSS/color_value">&lt;color&gt;</a> value</td>
- <td>
- <div class="geckoVersionNote">
- <p>New in Firefox 36.</p>
- </div>
-
- <p>Color for the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Badged_buttons">badge</a>. If <code>badgeColor</code> is omitted and <code>badge</code> is specified, then the badge is red.</p>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="ActionButton">ActionButton</h2>
-
-<h3 id="Methods">Methods</h3>
-
-<h4 class="addon-sdk-api-name" id="click()"><code>click()</code></h4>
-
-<p>Click the button. This will cause the button to generate the <code>click</code> event:</p>
-
-<pre class="brush: js">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();
-</pre>
-
-<h4 class="addon-sdk-api-name" id="state()"><code>state()</code></h4>
-
-<p>Get or set the button's state for a specific window or tab.</p>
-
-<p>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 <code>state()</code> is for.</p>
-
-<p>To set a button's properties for a specific window or tab, call <code>state()</code>, passing it the <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows"><code>window</code></a> or <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tab</code></a> 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.</p>
-
-<p>For example, if you have a button like this:</p>
-
-<pre class="brush: js">var { ActionButton } = require('sdk/ui/button/action');
-
-var button = ActionButton({
- id: "my-button",
- label: "default",
- icon: "./firefox-16.png"
-});</pre>
-
-<p>You can change its label for only the currently active window like this:</p>
-
-<pre class="brush: js">button.state("window", {
- "label" : "window-specific label"
-});</pre>
-
-<p>You can change its label for only the currently active tab like this:</p>
-
-<pre class="brush: js">button.state("tab", {
- "label" : "tab-specific label"
-});
-</pre>
-
-<p>To fetch the button state for a specific window or tab, call <code>state()</code>, passing it the window or tab you're interested in, and it will return a state object containing all the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Properties">properties</a> 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:</p>
-
-<ul>
- <li>creates a button with a default label</li>
- <li>opens a new tab</li>
- <li>sets a new label only for the new tab</li>
- <li>logs the result of accessing the global label, the window-specific label, and each of the 2 tab-specific labels</li>
-</ul>
-
-<pre class="brush: js">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 -&gt; "default label"
-  console.log(button.label);
-
-  // access the window's label -&gt; "default label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -&gt; "default label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -&gt; "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-}</pre>
-
-<p>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:</p>
-
-<pre class="brush: js">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 -&gt; "default label"
-  console.log(button.label);
-
-  // access the window's label -&gt; "window-specific label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -&gt; "window-specific label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -&gt; "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-}</pre>
-
-<p>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 <code>state()</code>, 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 <code>label</code> only for tab A, then tab B will inherit <code>label</code>'s value from the window, and changing the value for the window will implicitly change the value for tab B.</p>
-
-<p>To delete a tab- or window-specific state, assign <code>null</code> to the property. After that, the property will inherit its value from the less-specific state as before:</p>
-
-<pre class="brush: js">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 -&gt; "default label"
- console.log(button.label);
-
- // access the window's label -&gt; "window-specific label"
- console.log(button.state("window").label);
-
- // access the first tab's label -&gt; "window-specific label"
- console.log(button.state(tabs[0]).label);
-
- // access the second tab's label -&gt; "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 -&gt; "window-specific label"
- console.log(button.state(tabs[1]).label);
-}</pre>
-
-<p>Finally, you can pass the button itself into <code>state()</code>. 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:</p>
-
-<pre class="brush: js">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);
-    }
-  });
-</pre>
-
-<h5 id="Parameters_2">Parameters</h5>
-
-<p><strong>target : button, tab, window, string</strong></p>
-
-<ul>
- <li>To set or get the global state, this needs to be the <code>button</code> instance.</li>
- <li>To get or set window-specific state, this needs to be the <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows"><code>window</code></a> object for which you wish to set a specific state, or the string "window" to select the currently active window.</li>
- <li>To get or set tab-specific state this needs to be the <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tab</code></a> object for which you wish to set a specific state, or the string "tab" to select the currently active tab.</li>
-</ul>
-
-<p><strong>state : object, null</strong><br>
- Include this parameter only if you are setting state. It is an object containing all the properties you wish to set. For example:</p>
-
-<pre class="brush: js">button.state("tab", {
- "label" : "tab-specific label",
- "icon": "./tab-specific-icon.ico"
-});</pre>
-
-<p>To reset state, pass null:</p>
-
-<pre class="brush: js">button.state("tab", null);</pre>
-
-<h5 id="Returns">Returns</h5>
-
-<p><strong>state</strong> : if you have passed the second <code>state</code> argument to make this function a setter, it returns <code>undefined</code>. 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:</p>
-
-<pre class="brush: js">console.log(button.state("tab"));</pre>
-
-<p>This object represents a snapshot of the state at the time <code>state()</code> is called. It is not kept up to date with changes made to the button:</p>
-
-<pre class="brush: js">button.label = "foo";
-var state = button.state(button);
-button.label = "bar";
-console.log(state.label) // foo</pre>
-
-<h4 class="addon-sdk-api-name" id="on()"><code>on()</code></h4>
-
-<p>Add a listener to an event emitted by the button. The button only emits one type of event, <code><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#click">click</a></code>:</p>
-
-<pre class="brush: js">button.on("click", handleClick)
-
-function handleClick(state) {
- console.log("button '" + state.label + "' was clicked");
-}</pre>
-
-<h5 id="Parameters_3">Parameters</h5>
-
-<p><strong>event : string</strong><br>
- The event to listen for. Action buttons only emit one type of event, "<a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#click"><code>click</code></a>".</p>
-
-<p><strong>listener : function</strong><br>
- Function that will be called on click.</p>
-
-<h4 class="addon-sdk-api-name" id="once()"><code>once()</code></h4>
-
-<p>Assign a listener to the first occurrence only of an event emitted by the button. The button only emits one type of event, <code><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#click">click</a></code>. The listener is automatically removed after the first time the event is emitted.</p>
-
-<h5 id="Parameters_4">Parameters</h5>
-
-<p><strong>event : string</strong><br>
- The event to listen for. Action buttons only emit one type of event, "<a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#click"><code>click</code></a>".</p>
-
-<p><strong>listener : function</strong><br>
- Function that will be called on click.</p>
-
-<h4 class="addon-sdk-api-name" id="removeListener()"><code>removeListener()</code></h4>
-
-<p>Removes an event listener. For example, this code is equivalent to <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#once()"><code>once()</code></a>:</p>
-
-<pre class="brush: js">button.on("click", handleClick)
-
-function handleClick(state) {
- console.log("button '" + state.label + "' was clicked");
- button.removeListener("click", handleClick);
-} </pre>
-
-<h5 id="Parameters_5">Parameters</h5>
-
-<p><strong>event : string</strong><br>
- The event to listener is listening for. Action buttons only emit one type of event, "<a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#click"><code>click</code></a>".</p>
-
-<p><strong>listener : function</strong><br>
- The listener to remove.</p>
-
-<h4 class="addon-sdk-api-name" id="destroy()"><code>destroy()</code></h4>
-
-<p>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.</p>
-
-<h3 id="Properties">Properties</h3>
-
-<h4 class="addon-sdk-api-name" id="id"><code>id</code></h4>
-
-<p>The button's unique ID. This is read-only.</p>
-
-<h4 class="addon-sdk-api-name" id="label"><code>label</code></h4>
-
-<p>The button's label.</p>
-
-<h4 class="addon-sdk-api-name" id="icon"><code>icon</code></h4>
-
-<p>The button's icon or icons, as a URL, relative path, or object containing a set of key-value pairs.</p>
-
-<h4 class="addon-sdk-api-name" id="disabled"><code>disabled</code></h4>
-
-<p>Boolean property indicating whether or not the button is disabled.</p>
-
-<h4 class="addon-sdk-api-name" id="badge"><code>badge</code></h4>
-
-<div class="geckoVersionNote">
-<p>New in Firefox 36.</p>
-</div>
-
-<p>Value to attach to the button as a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Badged_buttons">badge</a>. May be a number or a string.</p>
-
-<p>The badge can contain as many characters (or digits) as you like, but only the first four will be displayed.</p>
-
-<h4 class="addon-sdk-api-name" id="badgeColor"><code>badgeColor</code></h4>
-
-<div class="geckoVersionNote">
-<p>New in Firefox 36.</p>
-</div>
-
-<p>Color for the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Badged_buttons">badge</a>, specified as a CSS <a href="/en-US/docs/Web/CSS/color_value">&lt;color&gt;</a> value.</p>
-
-<h3 id="Events">Events</h3>
-
-<h4 class="addon-sdk-api-name" id="click"><code>click</code></h4>
-
-<p>This event is emitted when a user clicks the button or your add-on calls the button's <code>click()</code> method.</p>
-
-<h5 id="Arguments">Arguments</h5>
-
-<p><strong>state</strong> : The button's state. This contains all the button's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Properties">properties</a>.</p>
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
----
-<div class="note">
-<p>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 <a href="http://nodejs.org/" title="http://nodejs.org/"> Node.js </a>. Il remplace l'outil cfx.</p>
-
-<p>Vous pouvez utiliser jpm à partir de Firefox 38.</p>
-
-<p>Cet article met en évidence les principales différences entre cfx et jpm.</p>
-</div>
-
-<p><span class="seoSummary">Un guide pour travailler avec jpm si vous êtes déjà familier avec cfx.</span></p>
-
-<h2 id="Installation">Installation</h2>
-
-<p>cfx est basée sur Python et est distribué comme un fichier zip. jpm est baser sur Node.js qui est <a href="https://www.npmjs.org/package/jpm" title="https://www.npmjs.org/package/jpm"> distribué par npm </a>. Donc, pour jpm vous n'avez pas besoin de Python, mais vous avez besoin npm.</p>
-
-<p>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 <a href="https://docs.npmjs.com/cli/update" title="https://www.npmjs.org/doc/api/npm-update.html"> <code>npm update</code> </a>.</p>
-
-<p>Pour obtenir des instructions d'installation de jmp, consultez la section de l' <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/jpm#Installation" title="/fr/Add-ons/SDK/Tools/jpm#Installation">Installation</a> dans la référentiel de jmp.</p>
-
-<h2 id="Activation">Activation</h2>
-
-<p>Vous devez appeler <code>cfx activate</code> 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 <code>activate</code> de nouveau</p>
-
-<p>Avec jpm, pas d'activation. Une fois qu'il est installé, vous pouvez simplement l'utiliser.</p>
-
-<h2 id="Incompatibilités">Incompatibilités</h2>
-
-<p>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.</p>
-
-<h3 id="Add-on_ID">Add-on ID</h3>
-
-<p>L'ID de add-on est l'identifiant unique de votre add-on. Dans un xpi, c'est le<a href="https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/Install_Manifests#id" title="https://developer.mozilla.org/en/install.rdf#id"> champ ID dans le fichier Manifest d'instalation de l'add-on</a> (install.rdf).</p>
-
-<p>L'identifiant est utilisé à des fins variées. Par exemple: <a href="http://addons.mozilla.org" title="http://addons.mozilla.org">addons.mozilla.org</a> l'utilise pour distinguer entre les nouvelles add-ons et les mises à jour d'add-ons existantes, et le module <a href="https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/simple-storage" title="https://developer.mozilla.org/fr/Add-ons/SDK/High-Level_APIs/simple-storage"><code>simple-storage</code></a> l'utilise pour déterminer lesquelles des données stockées appartiennent à tel add-on.</p>
-
-<h4 id="Manipulation_avec_l'ID_cfx">Manipulation avec l'ID cfx</h4>
-
-<p>Lorsque vous utilisez cfx, l'ID est tiré du <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#id" title="/fr/Add-ons/SDK/Tools/package_json#id">champ <code>id</code> dans le fichier de package.json de l'add-on</a>. 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 "<code>jid1-F3BoogbjQJE67A</code>". <a href="https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/Install_Manifests#id" title="https://developer.mozilla.org/fr/Add-ons/Install_Manifests#id">L'ID Add-on doit être l'un des deux types suivant </a>: un GUID ou une chaîne qui comprend un symbole <code>"@"</code>. Le SDK ne prévoit que le dernier format, et si l'ID dans package.json ne contient pas de "@", cfx xpi ajouter "<code>@jetpack</code>" dans le champ de package.json, ce qui transforme l'ID de l'add-on.</p>
-
-<p>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 "<code>jid1-F3BoogbjQJE67A</code>", et l'ID correspondant dans la install.rdf sera "<code>jid1-F3BoogbjQJE67A@jetpack</code>".</p>
-
-<h4 id="Manipulation_d'ID_avec_jpm">Manipulation d'ID avec jpm</h4>
-
-<p>Lorsque vous créez un xpi avec <code>jpm xpi</code>:</p>
-
-<ul>
- <li>si le package.json ne comprend pas un champ <code>id</code>, alor l'ID dans l'install.rdf à la valeur de la <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#name" title="/fr/Add-ons/SDK/Tools/package_json#name"> champ <code>name</code></a> Préfixé par "@".</li>
- <li>si le package.json inclut un champ <code>id</code>, et il contient «@», alors l'écriture est la même dans install.rdf.</li>
- <li>si le package.json inclut un champ <code>id</code>, sans "@", jpm XPI soulève une erreur et le xpi ne sera pas construit.</li>
-</ul>
-
-<h4 id="Ce_que_vous_devez_faire">Ce que vous devez faire</h4>
-
-<p>Tout cela signifie que: <em> si votre package.json contient un champ id, et sa valeur ne contient pas «@», alors vous devez ajouter "@jetpack» lors du passage à jpm </em>.</p>
-
-<p>Si vous faites cela, l'ID de l'add-on sera la même que l'id utilisée avec cfx.</p>
-
-<h3 id="Point_d'entrée">Point d'entrée</h3>
-
-<p>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 <code>main</code> champ dans le package.json .</p>
-
-<p>Dans jpm, le point d'entrée par défaut est "index.js". Donc, lors de la commutation vers jpm:</p>
-
-<ul>
- <li>renommez vos "main.js" en "index.js" et déplacez les de "lib" vers le plus haut niveau</li>
- <li>ou ajouter un champ <code>main</code> dans package.json avec pour valeur "lib/main.js".</li>
-</ul>
-
-<h3 id="Chargement_des_modules">Chargement des modules</h3>
-
-<p>L'outil jpm utilise la même logique que <a href="http://nodejs.org/api/modules.html#modules_all_together" title="http://nodejs.org/api/modules.html#modules_all_together"> Node.js </a> pour déterminer comment résoudre l'argument <code>require()</code>. Dans la plupart des cas, c'est la même <a href="/fr/docs/Mozilla/Add-ons/SDK/Guides/Module_structure_of_the_SDK" title="/fr/Add-ons/SDK/Guides/Module_structure_of_the_SDK">logique que cfx</a>. Cependant, il existe quelques différences, parce certaines compatibilités ont été retirées.</p>
-
-<h4 id="Requérir_à_des_modules_locaux">Requérir à des modules locaux</h4>
-
-<p>Supposons que votre add-on est <a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Creating_Reusable_Modules" title="/fr/Add-ons/SDK/Tutorials/Creating_Reusable_Modules"> structuré en modules séparés </a>:</p>
-
-<ul class="directory-tree">
- <li>my-addon
- <ul>
- <li>lib
- <ul>
- <li>main.js</li>
- <li>utils.js</li>
- </ul>
- </li>
- </ul>
- </li>
-</ul>
-
-<p>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:</p>
-
-<pre class="brush: js">var utils = require("./utils");</pre>
-
-<p>Cependant, avec cfx vous êtes également autorisé à omettre le "./":</p>
-
-<pre class="brush: js">var utils = require("utils"); // this will not work with jpm!</pre>
-
-<p>Cette seconde forme ne fonctionnera pas avec jpm.</p>
-
-<h4 id="Requérir_des_modules_de_code_de_test">Requérir des modules de code de test</h4>
-
-<p>Similarly, suppose you've written some tests for your add-on:</p>
-
-<ul class="directory-tree">
- <li>my-addon
- <ul>
- <li>lib
- <ul>
- <li>my-addon.js</li>
- </ul>
- </li>
- <li>test
- <ul>
- <li>test-my-addon-js</li>
- </ul>
- </li>
- </ul>
- </li>
-</ul>
-
-<p>Avec cfx, le code de "test-my-addon.js" peut importer "my-addon.js" en utilisant une déclaration de ce genre:</p>
-
-<pre class="brush: js">var my_addon = require("my-addon"); // ceci ne fonctionne pas avec jpm!</pre>
-
-<p>Avec jpm, vous devez spécifier le chemin vers «my-addon" explicitement, en utilisant un chemin relatif:</p>
-
-<pre class="brush: js">var my_addon = require("../lib/my-addon");
-</pre>
-
-<h3 id="Modules_tiers">Modules tiers</h3>
-
-<p>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.</p>
-
-<p>Dans jpm cette façon <a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox" title="/fr/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox"> d'utiliser des modules tiers </a> 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<a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Using_third-party_modules_(jpm)" title="/fr/Add-ons/SDK/Tutorials/Using_third-party_modules_(jpm)"> utilisant des modules tiers avec jpm</a>.</p>
-
-<h2 id="Les_commandes_et_les_options_de_commande">Les commandes et les options de commande</h2>
-
-<h3 id="Commandes_définitivement_retiré">Commandes définitivement retiré</h3>
-
-<p>jpm ne soutient plus les <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/cfx#Internal_Commands" title="/fr/Add-ons/SDK/Tools/cfx#Internal_Commands">commandes cfx "interne"</a>.</p>
-
-<h3 id="Options_définitivement_retiré">Options définitivement retiré</h3>
-
-<p>jpm ne soutient plus :</p>
-
-<pre>--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</pre>
-
-<p>Au lieu de <code>--profiledir</code> et de <code>--overload-modules</code>, utilisez <code>--profile</code> et <code>--overload</code></p>
-
-<h2 id="Champs_Package.json">Champs Package.json</h2>
-
-<p>Beaucoup de champs package.json <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json" title="/fr/Add-ons/SDK/Tools/package_json"> </a> 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.</p>
-
-<h3 id="Champs_définitivement_retiré">Champs définitivement retiré</h3>
-
-<ul>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#data">data</a></li>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#fullName">fullName</a> - use <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#title">title</a> instead</li>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#lib">lib</a></li>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#packages">packages</a></li>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#tests">tests</a></li>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#icon64">icon64</a></li>
-</ul>
-
-<h2 id="Echappement_dans_Package.json">Echappement dans Package.json</h2>
-
-<p>Où avec cfx vous auriez dû échapper avec 2 voir 3 barres obliques inverses (\), jpm n'en a besoin que d'une.</p>
-
-<p> </p>
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
----
-<p>Les articles répertoriés ici fournissent une référence pour les outils du SDK:</p>
-
-<p>{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Tools", 7) }}</p>
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
----
-<div class="note">
-<p>Vous pouvez utiliser <code>jpm</code> pour Firefox 38 et au-delà.</p>
-
-<p>Cet article est la référence pour jpm.</p>
-</div>
-
-<p><span class="seoSummary">The Node-based replacement for <a href="/en-US/Add-ons/SDK/Tools/cfx">cfx</a>. Enables you to test, run, and package add-ons.</span></p>
-
-<p>Voir aussi le <a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29" title="/fr/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29">tutoriel jpm</a> pour débuter.</p>
-
-<p>jpm usage is:</p>
-
-<pre class="brush: bash">jpm [command] [options]
-</pre>
-
-<p>jpm supports the following global options:</p>
-
-<pre class="brush: bash">-h, --help - show a help message and exit
--V, --version - print the jpm version number
-</pre>
-
-<h2 id="Installation">Installation</h2>
-
-<p>jpm is distributed using the node package manager <a class="external external-icon" href="https://www.npmjs.org/package/jpm">npm</a>, 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 <a class="external external-icon" href="http://nodejs.org/">nodejs.org</a> 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 <code>sudo apt-get install nodejs </code>followed by <code>sudo apt-get install npm </code>in a terminal window.</p>
-
-<p>After that you can install jpm just as you would any other npm package:</p>
-
-<pre><code>npm install jpm --global</code></pre>
-
-<p>Depending on your setup, you might need to run this as an administrator:</p>
-
-<pre class="brush: bash"><code>sudo npm install jpm --global</code></pre>
-
-<p>Or, you can install jpm using git:</p>
-
-<pre>git clone https://github.com/mozilla-jetpack/jpm.git
-cd jpm
-npm install
-npm link
-</pre>
-
-<p><span style="line-height: 1.5;">À l'invite de commande, tapez:</span></p>
-
-<pre class="brush: bash"><code>jpm</code></pre>
-
-<p>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 <code>--global</code> flag.</p>
-
-<p>If you get an error message saying  <em>/usr/bin/env: node: No such file or directory</em> and you have installed nodejs through a package manager, nodejs may have been installed in the wrong directory. A <a href="http://stackoverflow.com/questions/20886217/browserify-error-usr-bin-env-node-no-such-file-or-directory">corresponding topic at stackoverflow.org</a> might help you to solve this problem. Basically, you can solve it by creating a symlink to the node:</p>
-
-<pre class="lang-js prettyprint prettyprinted"><code><span class="pln">sudo ln </span><span class="pun">-</span><span class="pln">s </span><span class="str">"$(which nodejs)"</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">node</span></code></pre>
-
-<h3 id="Problems">Problems?</h3>
-
-<p>If you don't see this, ask for help. SDK users and project team members discuss problems and proposals on the <a class="external external-icon" href="http://groups.google.com/group/mozilla-labs-jetpack/topics">project mailing list</a>. 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 <a class="external external-icon" href="http://mibbit.com/?channel=%23jetpack&amp;server=irc.mozilla.org">#jetpack</a> on <a class="external external-icon" href="http://irc.mozilla.org/">Mozilla's IRC network</a>.</p>
-
-<h2 id="Command_reference">Command reference</h2>
-
-<p>There are six jpm commands:</p>
-
-<table class="fullwidth-table standard-table">
- <tbody>
- <tr>
- <td style="width: 20%;"><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_init"><code>jpm init</code></a></td>
- <td>Create a skeleton add-on as a starting point for your own add-on.</td>
- </tr>
- <tr>
- <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_run"><code>jpm run</code></a></td>
- <td>Launch an instance of Firefox with your add-on installed.</td>
- </tr>
- <tr>
- <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_test"><code>jpm test</code></a></td>
- <td>Runs your add-on's unit tests.</td>
- </tr>
- <tr>
- <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_xpi"><code>jpm xpi</code></a></td>
- <td>Package your add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file, which is the install file format for Firefox add-ons.</td>
- </tr>
- <tr>
- <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_post"><code>jpm post</code></a></td>
- <td>Package your add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file, then post it to some url.</td>
- </tr>
- <tr>
- <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_watchpost"><code>jpm watchpost</code></a></td>
- <td>Package your add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file whenever there is a file changed, and post that to some url.</td>
- </tr>
- <tr>
- <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_sign"><code>jpm sign</code></a></td>
- <td>Package your add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file, then retrieve a new XPI signed by Mozilla.</td>
- </tr>
- </tbody>
-</table>
-
-<h3 id="jpm_init">jpm init</h3>
-
-<p>This command initializes a new add-on from scratch.</p>
-
-<p>Create a new directory, change into it, and run <code>jpm init</code>.</p>
-
-<pre class="brush: bash">mkdir my-addon
-cd my-addon
-jpm init</pre>
-
-<p>You'll then be asked to supply some information about your add-on: this will be used to create your add-on's <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json">package.json</a> file.</p>
-
-<ul>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#title">title</a></li>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#name">name</a>: this defaults to the name of the directory in which you are running <code>jpm init</code>. Unless an <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#id"><code>id</code></a> field is present in package.json, jpm will prepend "@" to <code>name</code> and use the result as the <a href="https://developer.mozilla.org/en-US/Add-ons/Install_Manifests#id"><code>id</code> field in the add-on's install manifest</a>.</li>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#version">version</a></li>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#description">description</a></li>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#main">entry point</a> (which maps to "main" in package.json)</li>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#author">author</a></li>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#engines">engines</a> (supported applications)</li>
- <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#license">license</a></li>
-</ul>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<p>Then jpm will create an skeleton add-on, as a starting point for your own add-on development, with the following file structure:</p>
-
-<ul class="directory-tree">
- <li>my-addon
- <ul>
- <li>index.js</li>
- <li>package.json</li>
- <li>test
- <ul>
- <li>test-index.js</li>
- </ul>
- </li>
- </ul>
- </li>
-</ul>
-
-<h3 id="jpm_run">jpm run</h3>
-
-<p>This command runs a new instance of Firefox with the add-on installed:</p>
-
-<pre class="brush: bash">jpm run</pre>
-
-<p><code>jpm run</code> accepts the following options:</p>
-
-<table class="fullwidth-table standard-table">
- <tbody>
- <tr>
- <td style="width: 30%;"><code>-b --binary BINARY</code></td>
- <td>
- <p>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.</p>
-
- <pre class="brush: bash">
-jpm run -b /path/to/Firefox/Nightly</pre>
- See <a href="/en-US/Add-ons/SDK/Tools/jpm#Selecting_a_browser_version">Selecting a browser version</a>.</td>
- </tr>
- <tr>
- <td><code>--binary-args CMDARGS</code></td>
- <td>
- <p>Pass <a href="/en-US/docs/Mozilla/Command_Line_Options">extra arguments</a> to Firefox.</p>
-
- <p>For example, to pass the <code>-jsconsole</code> argument to Firefox, which will launch the <a href="/en-US/docs/Tools/Browser_Console">Browser Console</a>, try the following:</p>
-
- <pre class="brush: bash">
-jpm run --binary-args -jsconsole</pre>
-
- <p>To pass multiple arguments, or arguments containing spaces, quote them:</p>
-
- <pre class="brush: bash">
-jpm run --binary-args '-url mzl.la -jsconsole'</pre>
- </td>
- </tr>
- <tr>
- <td><code>--debug</code></td>
- <td>Run the <a href="/en-US/Add-ons/Add-on_Debugger">add-on debugger</a> attached to the add-on.</td>
- </tr>
- <tr>
- <td><code>-o --overload PATH</code></td>
- <td>
- <p>Rather than use the SDK modules built into Firefox, use the modules found at PATH. If <code>-o</code> is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.</p>
-
- <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Overloading_the_built-in_modules">Overloading the built-in modules</a> for more information.</p>
- </td>
- </tr>
- <tr>
- <td><code>-p --profile=<code> PROFILE</code></code></td>
- <td>
- <p>By default, jpm uses a clean temporary Firefox <a href="http://support.mozilla.com/en-US/kb/profiles">profile</a> each time you call jpm run. Use the <code>--profile</code> option to instruct jpm to launch Firefox with an existing profile.</p>
-
- <p>The PROFILE value may be a profile name or the path to the profile.</p>
-
- <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Using_profiles">Using profiles</a> for more information.</p>
- </td>
- </tr>
- <tr>
- <td><code>-v --verbose</code></td>
- <td>Verbose operation.</td>
- </tr>
- <tr>
- <td><code>--no-copy</code></td>
- <td>
- <div class="warning">Use with caution because <code>jpm run|test</code> changes many preferences, never use with your main profile.</div>
-
- <div class="note">This only applies when <code>--profile</code> is used.</div>
- Disables the copying of the profile used, which allows one to reuse a profile.</td>
- <td> </td>
- </tr>
- </tbody>
-</table>
-
-<h3 id="jpm_test">jpm test</h3>
-
-<p>Use this command to run an add-on's unit tests. It will:</p>
-
-<ul>
- <li>look for a directory called "test" under the add-on's root</li>
- <li>open every file in there whose name starts with "test-" (note the hyphen after "test" in the filename. <code>jpm test</code> will include a file called "test-myCode.js", but will exclude files called "test_myCode.js" or "testMyCode.js")</li>
- <li>call every function exported from that file whose name starts with "test"</li>
-</ul>
-
-<pre class="brush: bash">jpm test
-</pre>
-
-<p>See the <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Unit_testing">tutorial on unit testing</a> and the <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/test_assert">reference documentation for the <code>assert</code> module</a> for more details on this.</p>
-
-<p><code>jpm test</code> accepts the following options:</p>
-
-<table class="fullwidth-table standard-table">
- <tbody>
- <tr>
- <td><code>-b --binary BINARY</code></td>
- <td>
- <p>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.</p>
-
- <pre class="brush: bash">
-jpm test -b /path/to/Firefox/Nightly</pre>
-
- <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Selecting_a_browser_version">Selecting a browser version</a>.</p>
- </td>
- </tr>
- <tr>
- <td><code>--binary-args CMDARGS</code></td>
- <td>
- <p>Pass <a href="http://kb.mozillazine.org/Command_line_arguments">extra arguments</a> to Firefox.</p>
-
- <p>For example, to pass the <code>-jsconsole</code> argument to Firefox, which will launch the <a href="/en-US/docs/Tools/Browser_Console">Browser Console</a>, try the following:</p>
-
- <pre class="brush: bash">
-jpm test --binary-args -jsconsole</pre>
-
- <p>To pass multiple arguments, or arguments containing spaces, quote them:</p>
-
- <pre class="brush: bash">
-jpm test --binary-args '-url mzl.la -jsconsole'</pre>
- </td>
- </tr>
- <tr>
- <td><code>--debug</code></td>
- <td>Run the <a href="/en-US/Add-ons/Add-on_Debugger">add-on debugger</a> attached to the add-on.</td>
- </tr>
- <tr>
- <td style="width: 30%;"><code>-f --filter FILE[:TEST]</code></td>
- <td>
- <p>Only run tests whose filenames match FILE and optionally match TEST, both regexps.</p>
-
- <pre class="brush: bash">
-jpm test --filter base64:btoa</pre>
-
- <p>The above command only runs tests in files whose names contain "base64", and in those files only runs tests whose names contain "btoa".</p>
- </td>
- </tr>
- <tr>
- <td style="width: 30%;"><code>-o --overload PATH</code></td>
- <td>
- <p>Rather than use the SDK modules built into Firefox, use the modules found at PATH. If <code>-o</code> is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.</p>
-
- <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Overloading_the_built-in_modules">Overloading the built-in modules</a> for more information.</p>
- </td>
- </tr>
- <tr>
- <td style="width: 30%;"><code>-p --profile<code> PROFILE</code></code></td>
- <td>
- <p>By default, jpm uses a clean temporary Firefox <a href="http://support.mozilla.com/en-US/kb/profiles">profile</a> each time you call jpm run. Use the <code>--profile</code> option to instruct jpm to launch Firefox with an existing profile.</p>
-
- <p>The PROFILE value may be a profile name or the path to the profile.</p>
-
- <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Using_profiles">Using profiles</a> for more information.</p>
- </td>
- </tr>
- <tr>
- <td><code>--stop-on-error</code></td>
- <td>
- <p>By default jpm test keeps running tests even after tests fail. Specify <code>--stop-on-error</code> to stop running tests after the first failure:</p>
-
- <pre class="brush: bash">
-jpm test --stop-on-error</pre>
- </td>
- </tr>
- <tr>
- <td><code>--tbpl</code></td>
- <td>Print test output in <a href="https://treeherder.mozilla.org/">Treeherder</a> format</td>
- </tr>
- <tr>
- <td><code>--times NUMBER</code></td>
- <td>
- <p>Run tests NUMBER of times:</p>
-
- <pre class="brush: bash">
-jpm test --times 2</pre>
- </td>
- </tr>
- <tr>
- <td><code>-v --verbose</code></td>
- <td>Verbose operation.</td>
- </tr>
- <tr>
- <td><code>--no-copy</code></td>
- <td>
- <div class="warning">Use with caution because <code>jpm run|test</code> changes many preferences, never use with your main profile.</div>
-
- <div class="note">This only applies when <code>--profile</code> is used.</div>
- Disables the copying of the profile used, which allows one to reuse a profile.</td>
- </tr>
- </tbody>
-</table>
-
-<h3 id="jpm_xpi">jpm xpi</h3>
-
-<p>This command packages the add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file, which is the install file format for Mozilla add-ons.</p>
-
-<pre class="brush: bash">jpm xpi</pre>
-
-<p>It looks for a file called <code>package.json</code> 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 <a href="en-US/Add-ons/SDK/Tools/jpmignore">the .jpmignore file</a>.</p>
-
-<p>Once you have built an XPI file you can distribute your add-on by submitting it to <a href="http://addons.mozilla.org">addons.mozilla.org</a>.</p>
-
-<p><code>jpm xpi</code> accepts the following option:</p>
-
-<table class="fullwidth-table standard-table">
- <tbody>
- <tr>
- <td><code>-v --verbose</code></td>
- <td>
- <p>Verbose operation:</p>
-
- <pre class="brush: bash">
-jpm xpi -v</pre>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h3 id="jpm_post">jpm post</h3>
-
-<p>This command packages the add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file then posts it to some url.</p>
-
-<pre class="brush: bash">jpm post</pre>
-
-<p>It looks for a file called <code>package.json</code> in the current directory and creates a XPI file with which to post to the <code>--post-url</code>.</p>
-
-<p><code>jpm post</code> accepts the following options:</p>
-
-<table class="fullwidth-table standard-table">
- <tbody>
- <tr>
- <td><code>--post-url URL</code></td>
- <td>
- <p>The url to post the extension to after creating a XPI.</p>
-
- <pre class="brush: bash">
-jpm post --post-url http://localhost:8888/</pre>
-
- <p>See <a href="https://www.npmjs.com/package/jpm#using-post-and-watchpost">Using Post and Watchpost</a> for more information.</p>
- </td>
- </tr>
- <tr>
- <td><code>-v --verbose</code></td>
- <td>
- <p>Verbose operation:</p>
-
- <pre class="brush: bash">
-jpm post --post-url http://localhost:8888/ -v</pre>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h3 id="jpm_watchpost">jpm watchpost</h3>
-
-<p>This command packages the add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file then posts it to some url whenever a file in the current working directory changes.</p>
-
-<pre class="brush: bash">jpm watchpost</pre>
-
-<p>Creates a XPI whenever a file in the current working directory changes and posts that to the <code>--post-url</code>.</p>
-
-<p><code>jpm watchpost</code> accepts the following options:</p>
-
-<table class="fullwidth-table standard-table">
- <tbody>
- <tr>
- <td><code>--post-url URL</code></td>
- <td>
- <p>The url to post the extension to after creating a XPI.</p>
-
- <pre class="brush: bash">
-jpm watchpost --post-url http://localhost:8888/</pre>
-
- <p>See <a href="https://www.npmjs.com/package/jpm#using-post-and-watchpost">Using Post and Watchpost</a> for more information.</p>
- </td>
- </tr>
- <tr>
- <td><code>-v --verbose</code></td>
- <td>
- <p>Verbose operation:</p>
-
- <pre class="brush: bash">
-jpm watchpost --post-url http://localhost:8888/ -v</pre>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h3 id="jpm_sign">jpm sign</h3>
-
-<div class="note">
-<p>This feature is only supported from jpm 1.0.4 onwards.</p>
-</div>
-
-<p>This command retrieves a new <a href="/en-US/docs/XPI">XPI</a> for your add-on signed by Mozilla. This allows you to <a href="/en-US/Add-ons/SDK/Tools/jpm#Supporting_updates_for_self-hosted_add-ons">self-host your add-on</a> so that users can install it without error when <a href="https://wiki.mozilla.org/Add-ons/Extension_Signing">signed add-ons are required</a>.</p>
-
-<pre class="brush: bash">jpm sign --api-key ${AMO_API_KEY} --api-secret ${AMO_API_SECRET}</pre>
-
-<p>This creates an <a href="/en-US/docs/XPI">XPI</a>, submits it to the <a href="https://addons.mozilla.org/">addons.mozilla.org</a> <a href="http://olympia.readthedocs.org/en/latest/topics/api/signing.html">signing API</a>, then downloads a new signed <a href="/en-US/docs/XPI">XPI</a> to the working directory if it passes validation. Here are some possible outcomes of running the sign command:</p>
-
-<ul>
- <li>Your add-on passed validation, was signed by Mozilla, and a new signed <a href="/en-US/docs/XPI">XPI</a> was downloaded to your working directory.</li>
- <li>Your add-on failed validation, was not signed, and you got a link to a detailed report. After fixing the validation errors, you can run the command again.</li>
- <li>Your add-on at this exact version number already exists so it was not signed. You will need to increment the version number in your <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> file and run the command again.</li>
-</ul>
-
-<p>Under the hood, <code>jpm sign</code> creates an unlisted add-on inside <a href="https://addons.mozilla.org/">addons.mozilla.org</a> 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 <a href="https://addons.mozilla.org/en-US/developers/addon/submit/2">submit it directly to addons.mozilla.org</a> where it will be signed automatically. See the <a href="/en-US/docs/Extension_Versioning%2C_Update_and_Compatibility#Debugging_and_solving_problems">debugging</a> section if you're experiencing difficulty installing a signed add-on.</p>
-
-<p><code>jpm sign</code> accepts the following options:</p>
-
-<table class="fullwidth-table standard-table">
- <tbody>
- <tr>
- <td><code>--api-key API_KEY</code></td>
- <td>
- <p>API access key (string) generated on the <a href="https://addons.mozilla.org/en-US/developers/addon/api/key/">addons.mozilla.org key management page</a>.</p>
- </td>
- </tr>
- <tr>
- <td><code>--api-secret API_SECRET</code></td>
- <td>
- <p>API access secret (string) generated on the <a href="https://addons.mozilla.org/en-US/developers/addon/api/key/">addons.mozilla.org key management page</a>. 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.</p>
- </td>
- </tr>
- <tr>
- <td><code>--api-url-prefix http://.../api</code></td>
- <td>
- <p>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 <a href="https://addons.mozilla.org/">addons.mozilla.org</a> :</p>
-
- <pre class="brush: bash">
-jpm sign ... --api-url-prefix https://addons-dev.allizom.org/api/v3</pre>
- </td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="Techniques">Techniques</h2>
-
-<h3 id="Selecting_a_browser_version">Selecting a browser version</h3>
-
-<p>By default, <code>jpm run</code> and <code>jpm test</code> will run the release version of Firefox. You can instruct jpm to use a different version in one of two ways:</p>
-
-<ul>
- <li>
- <p>you can use the <code>-b</code> or <code>--binary</code> option to instruct jpm to run a different version of Firefox. You can supply a path to a specific binary:</p>
-
- <pre class="brush: bash">jpm run -b /path/to/Firefox/Nightly</pre>
-
- <p>As a shorthand for this, you can pass "nightly", "aurora", "beta", or "firefox" and jpm will look in the default location for these Firefox versions:</p>
-
- <pre class="brush: bash">jpm run -b nightly</pre>
- </li>
- <li>
- <p>you can set the <code>JPM_FIREFOX_BINARY</code> environment variable with the path to the version of Firefox you want to run. When you invoke <code>jpm run</code> or <code>jpm test</code> without the <code>-b</code> option, jpm will first check  <code>JPM_FIREFOX_BINARY</code>, and use this as the path if it is set.</p>
- </li>
-</ul>
-
-<h3 id="Using_.jpmignore_to_ignore_files">Using <code>.jpmignore</code> to ignore files</h3>
-
-<p>Using <code>.jpmignore</code> is similar to using <code>.gitignore</code> with <code>git</code>, <code>.hgignore</code> with Mercurial, or <code>.npmignore</code> with <code>npm</code>. By using this file you can let <code>jpm</code> know which files you would like it to ignore when building a <code>.xpi</code> file with <code>jpm xpi</code>.</p>
-
-<p>Here is an example:</p>
-
-<pre class="brush: bash"># Ignore .DS_Store files created by mac
-.DS_Store
-
-# Ignore any zip or xpi files
-*.zip
-*.xpi
-</pre>
-
-<p>A <code>.jpmignore</code> file with the above contents would ignore all zip files and <code>.DS_Store</code> files from the xpi generated by <code>jpm xpi</code>.</p>
-
-<h3 id="Using_profiles_2"><a name="Using_profiles">Using profiles</a></h3>
-
-<p>By default, <code>jpm run</code> uses a new profile each time it is executed. This means that any profile-specific data entered from one run of <code>jpm</code> will not, by default, be available in the next run.</p>
-
-<p>This includes, for example, any extra add-ons you installed, or your history, or any data stored using the <a href="/en-US/Add-ons/SDK/High-Level_APIs/simple-storage">simple-storage</a> API.</p>
-
-<p>To make <code>jpm</code> use a specific profile, pass the <code>--profile</code> option, specifying the name of the profile you wish to use, or the path to the profile.</p>
-
-<pre class="brush: bash">jpm run --profile boogaloo
-</pre>
-
-<pre class="brush: bash">jpm run --profile path/to/boogaloo</pre>
-
-<p>If you supply <code>--profile</code> but its argument is not the name of or path to an existing profile, jpm will open the <a href="https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles">profile manager</a>,  enabling you to select and existing profile or create a new one:</p>
-
-<pre class="brush: bash">jpm run --profile i-dont-exist</pre>
-
-<h3 id="Developing_without_browser_restarts">Developing without browser restarts</h3>
-
-<p>Because <code>jpm run</code> 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 <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/" rel="noreferrer">Extension Auto-Installer</a> 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:</p>
-
-<ul>
- <li>make a change to your add-on</li>
- <li>run <code>jpm post --post-url http://localhost:8888/</code>, to make a xpi and post it.</li>
-</ul>
-
-<p>You could even automate this workflow with a simple script. For example:</p>
-
-<pre class="brush: bash">jpm watchpost --post-url http://localhost:8888/
-</pre>
-
-<p>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 <code>jpm run</code>. This means that if you want to see output from <a href="/en-US/Add-ons/SDK/Tutorials/Logging" rel="noreferrer"><code>console.log()</code></a> messages, you'll have to tweak a setting. See the documentation on <a href="/en-US/Add-ons/SDK/Tools/console#Logging_Levels" rel="noreferrer">logging levels</a> for the details on this.</p>
-
-<h3 id="Overloading_the_built-in_modules">Overloading the built-in modules</h3>
-
-<p>The SDK modules you use to implement your add-on are built into Firefox. When you run or package an add-on using <code>jpm run</code> or <code>jpm xpi</code>, the add-on will use the versions of the modules in the version of Firefox that hosts it.</p>
-
-<p>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:</p>
-
-<ul>
- <li>get a local copy of the SDK modules that you want: this usually means checking out the SDK from its <a href="https://github.com/mozilla/addon-sdk" rel="noreferrer">GitHub repo</a></li>
- <li>set the <code>JETPACK_ROOT</code> environment variable to your local copy</li>
- <li>pass the <code>-o</code> option to <code>jpm run</code> or <code>jpm xpi</code>:</li>
-</ul>
-
-<pre>jpm run -o
-</pre>
-
-<p>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 <code>JETPACK_ROOT</code> environment variable, you can pass the location of your copy of the SDK modules along with <code>-o</code>:</p>
-
-<pre>jpm run -o "/path/to/SDK/"</pre>
-
-<h3 id="Supporting_updates_for_self-hosted_add-ons">Supporting updates for self-hosted add-ons</h3>
-
-<div class="note">
-<p>This feature is only supported from jpm 1.0.3 onwards.</p>
-</div>
-
-<p>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.</p>
-
-<p>If you list your add-on on <a href="https://addons.mozilla.org/">addons.mozilla.org</a>, then all you have to do here is submit the new version; add-ons default to checking <a href="https://addons.mozilla.org/">addons.mozilla.org</a> for new versions of themselves. You can stop reading this section.</p>
-
-<p>If you do not list your add-on on <a href="https://addons.mozilla.org/">addons.mozilla.org</a>, 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:</p>
-
-<ul>
- <li>you run <a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_sign">jpm sign</a> anytime you need to create a new version</li>
- <li>you host the signed add-on XPI and update it when you need to</li>
- <li>you host an "update manifest", which, among other things, contains a URL pointing to the XPI</li>
- <li>your add-on tells Firefox where it can find the update manifest</li>
-</ul>
-
-<p>To do this, include two extra keys in package.json:</p>
-
-<ul>
- <li><code><a href="/en-US/Add-ons/SDK/Tools/package_json#updateURL">updateURL</a></code>: this is a URL which will be included in the built XPI file (technically, it's in the <a href="/en-US/docs/Mozilla/Add-ons/Install_Manifests">install manifest</a> which <code>jpm xpi</code> builds). It points to your update manifest. The <code>updateURL</code> value <em>may</em> be HTTPS. If it isn't, then you'll also need to sign the update manifest, and then include the public key using the <code><a href="/en-US/Add-ons/SDK/Tools/package_json#updateKey">updateKey</a></code> field in package.json. See <a href="/en-US/docs/Extension_Versioning%2C_Update_and_Compatibility#Securing_Updates">Securing updates</a> for more on this.</li>
- <li><code><a href="/en-US/Add-ons/SDK/Tools/package_json#updateLink">updateLink</a></code>: this is the URL which will be included in the update manifest file. It points to the XPI, and <em>must</em> be an HTTPS URL.</li>
-</ul>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/11847/addons-update.svg" style="" title="[https://mdn.mozillademos.org]"></p>
-
-<p>If you include <code>updateURL</code> and <code>updateLink</code> (and also <code>updateKey</code> in case <code>updateURL</code> is not HTTPS), then <code>jpm xpi</code> will:</p>
-
-<ul>
- <li>embed the value you supplied for <code>updateURL</code> in the XPI it generates</li>
- <li>generate an update manifest alongside the XPI, and embed the value you supplied for <code>updateLink</code> in the manifest</li>
-</ul>
-
-<p>You then host the update manifest at <code>updateURL</code>, and host new versions of the XPI at <code>updateLink</code>.</p>
-
-<p>For some more details on this, see <a href="/en-US/docs/Extension_Versioning,_Update_and_Compatibility#Automatic_Add-on_Update_Checking">Automatic Add-on Update Checking</a>.</p>
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
----
-<p>{{AddonSidebar}}</p>
-
-<div class="note">
-<p><span>Pour suivre ce tuto , vous aurez besoin d'avoir appris des rudiments de<a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29"> <code>jpm</code></a>. </span></p>
-</div>
-
-<p>Pour ajouter des éléments et des sous-menus dans le menu contextuel de Firefox, utilisez le module <a href="https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/context-menu"><code>context-menu</code></a>.</p>
-
-<p>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.</p>
-
-<pre class="brush: js">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);
- }
-});</pre>
-
-<p>Executer l'add-on, charger une page web, séléctioner un texte et faites un clic droit, le nouvel élément doit apparaitre:<img src="https://mdn.mozillademos.org/files/6513/context-menu-selection.png" style="display: block; margin-left: auto; margin-right: auto;"></p>
-
-<p>Click it, and the selection is <a href="/en-US/Add-ons/SDK/Tutorials/Logging">logged to the console</a> (or the shell, if you're running an instance of Firefox from the command line):</p>
-
-<pre>info: elephantine lizard
-</pre>
-
-<h2 id="Details">Details</h2>
-
-<p>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: <code>label</code>, <code>context</code>, <code>contentScript</code>, and <code>onMessage</code>.</p>
-
-<h3 id="label">label</h3>
-
-<p>The <code>label</code> is just the string that's displayed.</p>
-
-<h3 id="context">context</h3>
-
-<p>The <code>context</code> describes the circumstances in which the item should be shown. The <code>context-menu</code> module provides a number of simple built-in contexts, including this <code>SelectionContext()</code>, which means: display the item when something on the page is selected.</p>
-
-<p>If these simple contexts aren't enough, you can define more sophisticated contexts using scripts.</p>
-
-<h3 id="contentScript">contentScript</h3>
-
-<p>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.</p>
-
-<h3 id="onMessage">onMessage</h3>
-
-<p>The <code>onMessage</code> 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.</p>
-
-<p>So:</p>
-
-<ol>
- <li>the user clicks the item</li>
- <li>the content script's <code>click</code> event fires, and the content script retrieves the selected text and sends a message to the add-on</li>
- <li>the add-on's <code>message</code> event fires, and the add-on code's handler function is passed the selected text, which it logs</li>
-</ol>
-
-<h2 id="More_options">More options</h2>
-
-<h3 id="Adding_an_image">Adding an image</h3>
-
-<p>You can add an image to a context menu item with the <code>image</code> 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 <code>self.data.url()</code>:</p>
-
-<pre class="brush: js">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);
- }
-});</pre>
-
-<h3 id="Adding_an_access_key">Adding an access key</h3>
-
-<div class="geckoVersionNote">
-<p>New in Firefox 35.</p>
-</div>
-
-<p>From Firefox 35 you can specify an access key using the <code>accessKey</code> option. This must be a single-character string. Pressing the key selects the option when the context menu is open:</p>
-
-<pre class="brush: js">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);
- }
-});
-</pre>
-
-<p> </p>
-
-<h2 id="Learning_More">Learning More</h2>
-
-<p>To learn more about the <code>context-menu</code> module, see the <a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu"><code>context-menu</code> API reference</a>.</p>
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)
----
-<div class="note">
-<p>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 <a href="http://nodejs.org/">Node.js</a>. It replaces the old cfx tool.</p>
-
-<p>You can use jpm from Firefox 38 onwards.</p>
-
-<p>This article describes how to develop using jpm.</p>
-</div>
-
-<p>Ce tutoriel est un exemple de création d'une add-on en utilisant le SDK.</p>
-
-<h2 id="Prérequis">Prérequis</h2>
-
-<p>Pour créer des add-ons pour Firefox en utilisant le SDK, vous aurez besoin:</p>
-
-<ul>
- <li>Firefox Version 38 ou plus. Si vous avez besoin de travailler avec les versions antérieures de Firefox, vous aurez besoin d'utiliser l'outil cfx. Voir les instructions pour <a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_started_(cfx)" title="/fr/Add-ons/SDK/Tutorials/Getting_started_(cfx)">débuter avec cfx </a>.</li>
- <li>l'outil de ligne de commande jpm. Voir les instructions pour l'installation <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/jpm#Installation" title="/fr/Add-ons/SDK/Tools/jpm#Installation"> jpm </a>. Une fois que vous avez fait cela, vous serez à la recherche de l'invite de commande.</li>
-</ul>
-
-<h2 id="Initialisation_d'un_add-on_vide">Initialisation d'un add-on vide</h2>
-
-<p>Dans l'invite de commande, créez un nouveau répertoire. Accédez à, tapez <code>jpm init</code>, et appuyez sur Entrée:</p>
-
-<pre>mkdir my-addon
-cd my-addon
-jpm init
-</pre>
-
-<p>Vous serez alors invité à fournir quelques informations sur votre add-on: elles seront utilisées pour créer votre fichier <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json" title="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json">package.json</a>. Pour l'instant, appuyez sur Entrée pour accepter la valeur par défaut pour chaque propriété. Pour plus d'informations sur <code>jpm init</code>, voir le <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/jpm#Command_reference" title="/fr/Add-ons/SDK/Tools/jpm#Command_reference">commande de référence jpm </a>.</p>
-
-<p>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.</p>
-
-<h2 id="Mise_en_œuvre_de_l'add-on">Mise en œuvre de l'add-on</h2>
-
-<p>Maintenant, vous pouvez écrire le code de l'add-on. Sauf si vous avez changé la valeur du "point d'entrée"("<a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/package_json#main" title="/fr/Add-ons/SDK/Tools/package_json#main">main</a>"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:</p>
-
-<pre class="brush: js">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/");
-}
-</pre>
-
-<div class="note">
-<p>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.</p>
-
-<p>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.</p>
-</div>
-
-<p>Enregistrez le fichier.</p>
-
-<p>Ensuite, créez un répertoire appelé "data" à la racine de votre add-on, et enregistrer ces trois fichiers d'icônes dans "data" :</p>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="height: 16px; width: 16px;"></td>
- <td>icon-16.png</td>
- </tr>
- <tr>
- <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="height: 32px; width: 32px;"></td>
- <td>icon-32.png</td>
- </tr>
- <tr>
- <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="height: 64px; width: 64px;"></td>
- <td>icon-64.png</td>
- </tr>
- </tbody>
-</table>
-
-<p>Retour à l'invite de commande, tapez:</p>
-
-<pre>jpm run</pre>
-
-<p>Ceci est la commande de jpm pour lancer une nouvelle instance de Firefox avec votre add-on installée.</p>
-
-<p>Si Firefox ne peut pas être localisé, vous devrez peut-être fournir le chemin d'accès (par exemple dans Ubuntu):</p>
-
-
-<pre>jpm run -b /usr/bin/firefox</pre>
-
-<div class="note">
-<p>Vous pouvez egalement modifier le chemin dans le fichier \npm\node_modules\jpm\node_modules\fx-runner\lib\utils.js.</p>
-
-<p>Par exemple sous windos : <code>var rootKey = '\\Programe Files\\Mozilla Firefox\\';</code></p>
-</div>
-
-<p>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 <a href="https://www.mozilla.org/" title="http://www.mozilla.org/"> https://www.mozilla.org/ </a> chargé.</p>
-
-<p>Voilà ce que fait cette add-on. Elle utilise deux modules: le module SDK <a href="/fr/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action" title="/fr/Add-ons/SDK/Low-Level_APIs/ui_button_action">button_action</a>, qui vous permet d'ajouter des boutons dans le navigateur, et le module<a href="https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/tabs" title="https://developer.mozilla.org/fr/Add-ons/SDK/High-Level_APIs/tabs"> tabs</a>, 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.</p>
-
-<p>Essayez d'éditer ce fichier. Par exemple, nous pourrions changer la page qui est chargé:</p>
-
-<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> buttons <span class="operator token">=</span> <span class="function token">require</span><span class="punctuation token">(</span><span class="string token">'sdk/ui/button/action'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
-<span class="keyword token">var</span> tabs <span class="operator token">=</span> <span class="function token">require</span><span class="punctuation token">(</span><span class="string token">"sdk/tabs"</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
-
-<span class="keyword token">var</span> button <span class="operator token">=</span> buttons<span class="punctuation token">.</span><span class="function token">ActionButton</span><span class="punctuation token">(</span><span class="punctuation token">{</span>
- id<span class="punctuation token">:</span> <span class="string token">"mozilla-link"</span><span class="punctuation token">,</span>
- label<span class="punctuation token">:</span> <span class="string token">"Visit Mozilla"</span><span class="punctuation token">,</span>
- icon<span class="punctuation token">:</span> <span class="punctuation token">{</span>
- <span class="string token">"16"</span><span class="punctuation token">:</span> <span class="string token">"./icon-16.png"</span><span class="punctuation token">,</span>
- <span class="string token">"32"</span><span class="punctuation token">:</span> <span class="string token">"./icon-32.png"</span><span class="punctuation token">,</span>
- <span class="string token">"64"</span><span class="punctuation token">:</span> <span class="string token">"./icon-64.png"</span>
- <span class="punctuation token">}</span><span class="punctuation token">,</span>
- onClick<span class="punctuation token">:</span> handleClick
-<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
-
-<span class="keyword token">function</span> <span class="function token">handleClick</span><span class="punctuation token">(</span>state<span class="punctuation token">)</span> <span class="punctuation token">{</span>
- tabs<span class="punctuation token">.</span><span class="function token">open</span><span class="punctuation token">(</span><span class="string token">"https://developer.mozilla.org/"</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
-<span class="punctuation token">}</span></code></pre>
-
-<p>À l'invite de commande, exécutez à nouveau <code>jpm run</code>. Vous ouvrirez cette fois en cliquant <a href="https://developer.mozilla.org/">https://developer.mozilla.org/</a>.</p>
-
-<h2 id="Empaquetté_l'add-on">Empaquetté l'add-on</h2>
-
-<p>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 <a href="https://addons.mozilla.org" title="https://addons.mozilla.org"> https://addons.mozilla.org </a> afin que les autres utilisateurs puissent la télécharger et l'installer.</p>
-
-<p>Pour construire un xpi, exécutez simplement la commande <code>jpm xpi</code> dans le répertoire de l'add-on:</p>
-
-<pre>jpm xpi
-</pre>
-
-<p>Vous devriez voir un message du type:</p>
-
-<pre>JPM info Successfully created xpi at /path/to/getting-started/@getting-started.xpi
-</pre>
-
-<p>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.</p>
-
-<p>Pour distribuer votre add-on, <a href="https://addons.mozilla.org/fr/developers/addon/submit/2" title="https://addons.mozilla.org/fr/developers/addon/submit/2"> soumettre le fichier xpi à addons.mozilla.org </a> ou exécuter <a href="https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/SDK/Tools/jpm#jpm_sign" title="https://developer.mozilla.org/fr/Add-ons/SDK/Tools/jpm#jpm_sign">jpm sign</a> si vous souhaitez distribuer l'add-on sur votre propre serveur.</p>
-
-<h2 id="Résumé">Résumé</h2>
-
-<p>Dans ce tutoriel, nous avons construit et emballé une add-on en utilisant trois commandes:</p>
-
-<ul>
- <li><code>jpm init</code> pour initialiser un modèle vide d'add-on</li>
- <li><code>jpm run</code> pour exécuter une nouvelle instance de Firefox avec l'add-on installé, afin que nous puissions l'essayer</li>
- <li><code>jpm xpi</code> pour emballer l'add-on dans un fichier xpi pour la distribution</li>
-</ul>
-
-<p>Ce sont les trois principales commandes que vous utiliserez lors de l'élaboration d'add-ons SDK. Il y a une <a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/jpm" title="/fr/Add-ons/SDK/Tools/jpm">documentation de référence</a> complète couvrant toutes les commandes que vous pouvez utiliser et toutes les options qu'elles prennent.</p>
-
-<p>Le code de add-on lui-même utilise deux modules de SDK, <a href="/fr/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action" title="/fr/Add-ons/SDK/Low-Level_APIs/ui_button_action"> action bouton </a> et <a href="/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/tabs" title="/fr/Add-ons/SDK/High-Level_APIs/tabs">tabs</a>. Il ya une documentation de référence pour toute les APIs <a href="/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs" title="/fr/Add-ons/SDK/High-Level_APIs">high-level </a> et <a href="/fr/docs/Mozilla/Add-ons/SDK/Low-Level_APIs" title="/fr/Add-ons/SDK/Low-Level_APIs">low-level</a> dans le SDK.</p>
-
-<h2 id="Et_en_suite">Et en suite?</h2>
-
-<p>Pour avoir une idée de certaines des choses que vous pouvez faire avec les API du SDK, essayer de travailler avec certains <a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials" title="/fr/Add-ons/SDK/Tutorials">tutoriels</a>.</p>
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
----
-<p>Cette page répertorie les articles sur la façon d'accomplir des tâches spécifiques en utilisant le SDK.</p>
-
-<hr>
-<h3 id="Commencer"><a name="getting-started">Commencer</a></h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tools/jpm#Installation">Installation</a></dt>
- <dd>Comment faire pour installer l'outil de jpm, que vous allez utiliser pour développer des add-ons.</dd>
-</dl>
-
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Troubleshooting">Dépannage</a></dt>
- <dd>Quelques conseils pour résoudre les problèmes courants et obtenir de l'aide.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_(jpm)">Commencer</a></dt>
- <dd>Démonstration de la création d'une add-on avec le SDK, en utilisant jpm.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<h3 id="Créer_des_interfaces_utilisateur"><a name="create-user-interfaces">Créer des interfaces utilisateur</a></h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">Ajouter un bouton de barre d'outils</a></dt>
- <dd>Attachez un bouton à la barre d'outils du module complémentaire Firefox.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">Ajouter un élément de menu à Firefox </a></dt>
- <dd>Ajoutez des éléments aux menus principaux de Firefox.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Display_a_Popup">Afficher une popup </a></dt>
- <dd>Afficher une boîte de dialogue contextuelle (popup) implémentée avec HTML et JavaScript.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item">Ajouter un élément de menu contextuel </a></dt>
- <dd>Ajoutez des éléments au menu contextuel de Firefox.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<h3 id="Interagir_avec_le_navigateur"><a name="interact-with-the-browser">Interagir avec le navigateur</a></h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Open_a_Web_Page">Ouvrir une page Web </a></dt>
- <dd>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.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Listen_for_Page_Load">Écouter le chargement de la page </a></dt>
- <dd>Utilisez le module onglets pour être averti lorsque de nouvelles pages Web sont chargées et accéder à leur contenu.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/List_Open_Tabs">Obtenir la liste des onglets ouverts </a></dt>
- <dd>Utilisez le module onglets pour parcourir les onglets actuellement ouverts et accéder à leur contenu.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<h3 id="Modifier_les_pages_Web"><a name="modify-web-pages">Modifier les pages Web</a></h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">Modifier les pages Web en fonction de l'URL </a></dt>
- <dd>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é.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">Modifier la page Web active </a></dt>
- <dd>Chargez dynamiquement un script dans la page Web actuellement active.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<h3 id="Techniques_de_développement"><a name="development-techniques">Techniques de développement</a></h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Logging">Enregistrement </a></dt>
- <dd>Enregistrez les messages sur la console à des fins de diagnostic.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Creating_reusable_modules">Création de modules réutilisables </a></dt>
- <dd>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.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Unit_testing">Tests unitaires </a></dt>
- <dd>Ecrire et exécuter des tests unitaires à l'aide du framework de test du SDK.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Chrome_authority">Autorité Chrome </a></dt>
- <dd>Accédez à l'objet Components, permettant à votre module complémentaire de charger et d'utiliser n'importe quel objet XPCOM.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Creating_event_targets">Création de cibles d'événements </a></dt>
- <dd>Permettez aux objets que vous définissez d'émettre leurs propres événements.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Listening_for_load_and_unload">Écouter pour charger et décharger </a></dt>
- <dd>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.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Using_third-party_modules_(jpm)">Utilisation de modules tiers (jpm)</a></dt>
- <dd>Installez et utilisez des modules supplémentaires qui ne sont pas fournis avec le SDK lui-même.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/l10n">Localisation </a></dt>
- <dd>Écriture de code localisable.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Mobile_development">Développement mobile </a></dt>
- <dd>Développez des modules complémentaires pour Firefox Mobile sur Android.</dd>
- <dt><a href="/fr/docs/Mozilla/Add-ons/Add-on_Debugger">Débogueur de module complémentaire (Add-on)</a></dt>
- <dd>Déboguez le JavaScript de votre module complémentaire.</dd>
-</dl>
-</div>
-</div>
-
-<hr>
-<h3 id="Mettre_ensemble"><a name="putting-it-together">Mettre ensemble</a></h3>
-
-<div class="column-container">
-<div class="column-half">
-<dl>
- <dt><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/Annotator">Module complémentaire Annotator </a></dt>
- <dd>Présentation d'un module complémentaire relativement complexe.</dd>
-</dl>
-</div>
-</div>
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
----
-<p>Le SDK supporte la localisation des chaînes figurant dans:</p>
-
-<ul>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/l10n#Using_Localized_Strings_in_JavaScript">Le code JavaScript dans le main ou l'index de l'add-on</a></li>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/l10n#Using_Localized_Strings_in_HTML">Les fichiers HTML emballés avec votre add-on</a></li>
- <li><a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/l10n#Using_Localized_Strings_in_Preferences">Les champs <code>title</code> et <code>description</code> de votre add-on</a>.</li>
-</ul>
-
-<p>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 <a href="/fr/docs/Mozilla/Add-ons/SDK/Tutorials/l10n#Limitations" title="/fr/Add-ons/SDK/Tutorials/l10n#Limitations">Limitations</a> ci-dessous.</p>
-
-<h2 id="Chaînes_localisées">Chaînes localisées</h2>
-
-<p>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:</p>
-
-<ul>
- <li>utiliser <a href="http://fr.wikipedia.org/wiki/.properties" title="http://en.wikipedia.org/wiki/.properties"> <code>.properties</code> Format</a></li>
- <li>sont nommés "xx-YY.properties", où "xx-YY" est le <a href="https://wiki.mozilla.org/L10n:Locale_Codes" title="https://wiki.mozilla.org/L10n:Locale_Codes">nom locale</a> en question (en français, uniquement "fr.properties")</li>
- <li>contienent une entrée pour chaque chaîne que vous voulez localiser, constitué d'un identifiant pour la chaîne et sa traduction dans cette langue, dans le format <code>identifier=translation</code></li>
- <li>utilisent UTF-8 sans codage BOM</li>
- <li>Les lignes commençant par "#" (après espaces optionnels) sont des commentaires</li>
-</ul>
-
-<p>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.</p>
-
-<p>Vous souhaitez ajouter deux fichiers au répertoire "locale" :</p>
-
-<pre>my-addon/
- data
- lib
- locale/
- en-US.properties
- fr.properties
-</pre>
-
-<p>"en-US.properties" contient ceci:</p>
-
-<pre>hello_id= Hello!
-</pre>
-
-<p>"fr.properties" contient ceci:</p>
-
-<pre>hello_id= Bonjour!
-</pre>
-
-<p>Maintenant, chaque fois que votre JavaScript ou HTML demande au système de localisation la traduction de l'identifiant <code>hello_id</code>, il obtiendra la traduction correcte pour la localisation en cours.</p>
-
-<h2 id="Utilisation_de_chaînes_localisées_en_HTML">Utilisation de chaînes localisées en HTML</h2>
-
-<div class="note">
-<p>Cet exemple utilise l'API <a href="https://developer.mozilla.org/fr/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action" title="https://developer.mozilla.org/fr/Add-ons/SDK/Low-Level_APIs/ui_button_action">button_action</a>, qui est uniquement disponible à partir de Firefox 29.</p>
-</div>
-
-<p>Pour référencer des chaînes localisées du HTML, ajouter un attribut <code>data-l10n-id</code> à la balise HTML où vous voulez que la chaîne localisée apparaisse, et assignez y l'identifiant :</p>
-
-<pre class="brush: html">&lt;html&gt;
-  &lt;body&gt;
-    &lt;h1 data-l10n-id="hello_id"&gt;&lt;/h1&gt;
-  &lt;/body&gt;
-&lt;/html&gt;
-</pre>
-
-<p>Ensuite, vous pouvez utiliser ce fichier HTML pour construire votre interface, par exemple à l'intérieur d'un panel :</p>
-
-<pre class="brush: js">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")
-});</pre>
-
-<p>Compte tenu de fichiers locaux pour "en-US" et "fr" qui fournissent les traductions de <code>hello_id</code>, le panneau affichera désormais "Bonjour!" ou "Hello!", selon la localisation en cours:</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/7663/bonjour.png" style="height: 160px; width: 255px;"><img alt="" src="https://mdn.mozillademos.org/files/7665/hello.png" style="height: 160px; width: 255px;"></p>
-
-<p>La traduction est inséré dans le nœud qui a l'attribut <code>data-l10n-id</code> défini. Tout contenu existant précédemment est simplement remplacé.</p>
-
-<p>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:</p>
-
-<pre class="brush: bash"># Ne fonctionne pas. Les balises HTML sont insérés sous forme de texte.
-hello_id= &lt;blink&gt;Hello!&lt;/blink&gt;
-</pre>
-
-<h3 id="Attributs_d'Elément_Localisation">Attributs d'Elément Localisation</h3>
-
-<div class="geckoVersionNote">Cette fonction est nouvelle dans Firefox 39</div>
-
-<p>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:</p>
-
-<pre>hello_id.accesskey= H</pre>
-
-<p>Les attributs suivants sont supportés:</p>
-
-<ul>
- <li><strong>accesskey</strong></li>
- <li><strong>alt</strong></li>
- <li><strong>label</strong></li>
- <li><strong>title</strong></li>
- <li><strong>placeholder</strong></li>
-</ul>
-
-<p>En outre, la localisation avec les attributs <a href="/fr/docs/Web/Accessibility/ARIA" title="/fr/docs/Web/Accessibility/ARIA">ARIA</a> <strong> aria-label </strong>, <strong>aria-valuetex</strong> et <strong> aria-moz-hint </strong> sont pris en charge avec les mêmes alias que sur Firefox OS :</p>
-
-<ul>
- <li><strong>ariaLabel</strong></li>
- <li><strong>ariaValueText</strong></li>
- <li><strong>ariaMozHint</strong></li>
-</ul>
-
-<h2 id="Utilisation_de_chaînes_localisées_en_JavaScript">Utilisation de chaînes localisées en JavaScript</h2>
-
-<p>Pour référencer les chaînes localisées à partir de votre code d'add-on principale, faites ceci:</p>
-
-<pre class="brush: js">var _ = require("sdk/l10n").get;
-console.log(_("hello_id!"));</pre>
-
-<p><span>L'affectation de "<code>_</code>" n'est pas nécessaire, mais pour travailler avec les outils <a href="https://www.gnu.org/software/gettext/gettext.html" title="https://www.gnu.org/software/gettext/gettext. html">gettext</a> qui attendent "<code>_</code>" pour indiquer les chaînes localisables, cela est préférable.</span></p>
-
-<ol>
- <li>Importez le module <code>l10n</code>, et assigner sa fonction <code>get</code> à "<code>_</code>"(underscore).</li>
- <li>Enveloppez toutes les références aux chaînes localisables avec la fonction <code>_()</code>.</li>
-</ol>
-
-<p>Si vous l'exécutez, vous verrez le résultat attendu pour la localisation en cours:</p>
-
-<pre>info: Hello!
-</pre>
-
-<pre>info: Bonjour!
-</pre>
-
-<p>Notez que parce que vous ne pouvez pas appeler des modules avec <code>require()</code> dans les content_scripts, vous ne pouvez pas encore référencer les chaînes localisées à partir des content_scripts.</p>
-
-<h3 id="Pluriels">Pluriels</h3>
-
-<p>Le module <code>l10n</code> 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":</p>
-
-<pre>one tomato
-no tomatoes
-two tomatoes
-</pre>
-
-<p>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:</p>
-
-<pre>один помидор // one tomato
-два помидора // two tomatoes
-пять помидоров // five tomatoes
-</pre>
-
-<p>Le SDK utilise les données de <a href="http://cldr.unicode.org/index" title="http://cldr.unicode.org/index">Unicode CLDR</a> pour décrire les différentes formes plurielles utilisés dans les différentes langues.</p>
-
-<h4 id="Formes_plurielles_de_Unicode_CLDR">Formes plurielles de Unicode CLDR</h4>
-
-<p>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 : <em>zero</em>, <em>one</em>, <em>two</em>, <em>few</em>, <em>many</em> et <em>other</em>.</p>
-
-<p>L'englais a deux formes, qui peuvent être décrits par les categories "1" à "<em>one</em>" et "everything else" à "<em>other</em>":</p>
-
-<pre>one → n is 1;
-other → everything else
-</pre>
-
-<p>Le russe utilise quatre formes, qui peuvent être décrits comme suit:</p>
-
-<pre>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
-</pre>
-
-<p>Les règles de pluriel pour toutes les langues peuvent être trouvés dans le CLDR <a href="http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html" title="http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html"> Langue règles pluriel</a> (ce tableau est mis à jour par rapport à la <a href="http://unicode.org/repos/cldr/trunk/common/supplemental/plurals.xml">source XML CLDR</a>).</p>
-
-<h4 id="Formes_plurielles_dans_le_SDK">Formes plurielles dans le SDK</h4>
-
-<p>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 :</p>
-
-<pre class="brush: js">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));</pre>
-
-<p>Dans le fichier <code>.properties</code> 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 «<em>other</em>» ne prendre <strong>pas</strong> le mot-clé CLDR):</p>
-
-<pre># en-US translations
-tomato_id[one]= %d tomato
-tomato_id= %d tomatoes
-</pre>
-
-<p>En Russe, nous pourrions avoir quatre localisations pluriel:</p>
-
-<pre># ru-RU translations
-tomato_id[one]= %d помидор
-tomato_id[few]= %d помидора
-tomato_id[many]= %d помидоров
-tomato_id= %d помидоры
-</pre>
-
-<p>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 <code>ru-RU.properties</code>. Ensuite, il récupère et renvoie la localisation pour le compte que vous avez fourni.</p>
-
-<h3 id="Espaces_réservés">Espaces réservés</h3>
-
-<p>Le module <code>l10n</code> 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 :</p>
-
-<pre class="brush: bash"># en-US translations
-hello_id= Hello %s!
-</pre>
-
-<pre class="brush: bash"># fr translations
-hello_id= Bonjour %s !
-</pre>
-
-<p>Pour utiliser les espaces réservés, fournir la chaîne de réservation après l'identifiant:</p>
-
-<pre class="brush: js">var _ = require("sdk/l10n").get;
-console.log(_("hello_id", "Bob"));
-console.log(_("hello_id", "Alice"));</pre>
-
-<p>Dans la localisation "en-US", cela nous donne:</p>
-
-<pre>info: Hello Bob!
-info: Hello Alice!
-</pre>
-
-<p>Dans "fr" nous obtenons:</p>
-
-<pre>info: Bonjour Bob !
-info: Bonjour Alice !
-</pre>
-
-<h3 id="Commande_espaces_réservés">Commande espaces réservés</h3>
-
-<p>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.</p>
-
-<p>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.</p>
-
-<p>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 :</p>
-
-<pre class="brush: js">var _ = require("sdk/l10n").get;
-console.log(_("home_town_id", "Bob", "London"));</pre>
-
-<p>Un traducteur anglais pourrait vouloir choisir entre les ordres suivantes:</p>
-
-<pre>"&lt;town_name&gt; is &lt;person_name&gt;'s home town."
-</pre>
-
-<pre>"&lt;person_name&gt;'s home town is &lt;town_name&gt;"
-</pre>
-
-<p>Pour choisir la première option, le fichier <code>.properties</code> peut commander les espaces réservés comme suit:</p>
-
-<pre>home_town_id= %2s is %1s's home town.
-</pre>
-
-<p>Cela nous donne le résultat suivant:</p>
-
-<pre>info: London is Bob's home town.
-</pre>
-
-<h2 id="Utilisation_de_chaînes_localisées_dans_les_Préférences">Utilisation de chaînes localisées dans les Préférences</h2>
-
-<p>En incluant une <a href="/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/simple-prefs" title="/fr/Add-ons/SDK/High-Level_APIs/simple-prefs">structure <code>"preferences"</code> dans votre fichier "package.json"</a>, vous pouvez définir des préférences pour votre add-on que l'utilisateur peut voir et modifier à l'aide de Firefox <a href="https://support.mozilla.org/fr/kb/Using%20extensions%20with%20Firefox#w_how-to-change-extension-settings" title="https://support.mozilla.org/fr/kb/Using%20extensions%20with%20Firefox#w_how-to-change-extension-settings">Add-ons Manager</a>.</p>
-
-<p>Les préférences ont obligatoirement des champs <code>title</code> et <code>description</code>. 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.</p>
-
-<ul>
- <li>
- <p>Pour fournir la forme localisée du titre de la préférence, inclure une entrée dans votre fichier "propriétés" dont l'identifiant est le nom de la préférence suivie par <code>_title</code>, et dont la valeur est le titre localisé.</p>
- </li>
- <li>
- <p>Pour fournir la forme localisée de la description de la préférence, inclure une entrée dans votre fichier "propriétés" dont l'identifiant est le nom de la préférence suivie par <code>_description</code>, et dont la valeur est la description localisée.</p>
- </li>
-</ul>
-
-<p>Par exemple, supposons que votre "package.json" définit une seule préférence:</p>
-
-<pre>{
- "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"
-}
-</pre>
-
-<p>Dans votre fichier "en-US.properties", inclure ces deux éléments :</p>
-
-<pre>monster_name_title= Name
-monster_name_description= What is the monster's name?
-</pre>
-
-<p>Dans votre fichier "fr.properties", inclure la traduction française:</p>
-
-<pre>monster_name_title= Nom
-monster_name_description= Quel est le nom du monstre ?
-</pre>
-
-<p>Quand la configuration locale du navigateur est "en-US", les utilisateurs voient dans le gestionnaire de modules complémentaires:</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/6525/preference-us.png" style="height: 77px; width: 571px;"></p>
-
-<p>Lorsque la configuration locale du navigateur est "fr", ils voient ceci:</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/6523/preference-french.png"></p>
-
-<p>Les types <code>menulist</code> et <code>radio</code> de préférences ont des options. L'attribut <code>label</code> 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 <code>label</code> 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.</p>
-
-<h2 id="Utilisation_de_l'identificateurs">Utilisation de l'identificateurs</h2>
-
-<p>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.</p>
-
-<p>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 <code>.properties</code> pour toutes les langues supplémentaires que vous souhaitez soutenir.</p>
-
-<p>Par exemple, dans le cas ci-dessus, vous pouvez utiliser "Bonjour!" comme identificateur, et juste avoir un <code>.properties</code> pour la locale "fr":</p>
-
-<pre>Hello!= Bonjour!
-</pre>
-
-<p>Puis, quand la locale "en-US", le système ne parviennent pas à trouver un <code>.properties</code>, et revoit "Bonjour!".</p>
-
-<div class="warning">
-<p>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.</p>
-</div>
-
-<h2 id="Locale_Updater">Locale Updater</h2>
-
-<p>L'add-on <a href="https://github.com/downloads/ochameau/locale-updater/locale-updater.xpi" title="https://github.com/downloads/ochameau/locale-updater/locale-updater.xpi">locale updater (paramètres régionaux de mise à jour)</a> 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é :</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/6515/locale-updater.png"></p>
-
-<p>Cliquez sur le bouton et vous serez invité à entrer un nouveau fichier <code>.properties</code> 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.</p>
-
-<h2 id="Limites">Limites</h2>
-
-<p>Le support de la localisation actuelle est un premier pas vers la prise en charge complète, et contient un certain nombre de limitations.</p>
-
-<ul>
- <li>
- <p>Il n'y a pas de soutien pour les scripts de contenu ou des fichiers CSS: pour le moment, vous ne pouvez localiser les chaînes apparaissant dans les fichiers JavaScript qui sont appelés avec <code>require()</code>.</p>
- </li>
- <li>
- <p>Il n'y a pas de soutien pour localiser <a href="/fr/docs/Mozilla/Add-ons/Install_Manifests#name" title="/fr/Add-ons/Install_Manifests#name">name</a> ou <a href="/fr/docs/Mozilla/Add-ons/Install_Manifests#description" title="/fr/Add-ons/Install_Manifests#description">description</a> de l'add-on : votre seule option étant de modifier le fichier install.rdf après la construction du XPI. Voir <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1218719" title="https://bugzilla.mozilla.org/show_bug.cgi?id=1218719">bug 1218719</a>.</p>
- </li>
- <li>
- <p>L'ensemble des fichiers locaux sont globaux à travers une add-on. Cela signifie qu'un module n'est pas en mesure de remplacer une traduction plus générale: si un module <code>informal.js</code> ne peut pas spécifier que "hello_id" survenant dans son code doit être traduit par "Salut!".</p>
- </li>
- <li>
- <p>Les outils SDK compilent les fichiers de localisation dans un format JSON lors de la production d'un XPI. Cela signifie que les traducteurs ne peuvent pas travailler directement sur le XPI, mais doivent avoir accès à la source de l'add-on.</p>
- </li>
- <li>
- <p>Le développeur de l'add-on doit assembler manuellement l'ensemble des chaînes localisables qui composent les fichiers locaux.</p>
- </li>
-</ul>
-
-<h2 id="Voir_aussi_-_pour_les_développeurs_qui_cherchent_à_localiser_les_add-ons_non-SDK">Voir aussi - pour les développeurs qui cherchent à localiser les add-ons non-SDK</h2>
-
-<ul>
- <li>Comment localiser les pages HTML, les fichiers XUL, et les fichiers js/jsm des add-ons bootstrapped : <a href="/fr/docs/Mozilla/Add-ons/Bootstrapped_extensions#Localization_%28L10n%29" title="/fr/Add-ons/Bootstrapped_extensions#Localization_%28L10n%29">Bootstrapped Extensions::Localization(l10n)</a></li>
- <li>Tutoriel Localisation XUL School : <a href="/fr/docs/Mozilla/Tech/XUL/Tutorial/Localization" title="/fr/docs/Mozilla/Tech/XUL/Tutorial/Localization">XUL : Localisation</a> et <a href="/fr/docs/Mozilla/Tech/XUL/Tutorial/Property_Files" title="/fr/docs/Mozilla/Tech/XUL/Tutorial/Property_Files">Les fichiers de propriétés</a></li>
- <li><a href="/fr/docs/Mozilla/Localization/Localizing_an_extension">Localisation d'une extension</a></li>
-</ul>
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
----
-<div class="callout-box"><strong><a href="/en/Extensions/Thunderbird/Building_a_Thunderbird_extension" title="en/Building_a_Thunderbird_extension">Building a Thunderbird extension</a></strong><br>
-Step-by-step explanation on how to build an extension for Thunderbird.</div>
-
-<div>
-<p>{{AddonSidebar}}</p>
-The following documentation provides help for creating extensions for Mozilla's <a class="internal" href="/en/Thunderbird" title="En/Thunderbird">Thunderbird</a> email client. Although there are many similarities with <a href="/en/Extensions" title="en/Extensions">Firefox extensions</a> there are also some differences that may confound the starting developer.</div>
-
-<div><br>
-<strong>Please help!</strong> You can <a class="internal" href="/en/Extensions/Thunderbird/HowTos" title="en/Extensions/Thunderbird/HowTos">add a how-to</a> (a question or an answer or a code snippet), <a class="internal" href="/en/Extensions/Thunderbird/Useful_newsgroups_discussions" title="En/Extensions/Thunderbird/Useful newsgroups discussions">summarize and link to a relevant newsgroup discussion</a>, or create a tutorial. Need help? Contact <a class="internal" href="/User:jenzed" title="User:jenzed">jenzed</a>.</div>
-
-<table class="topicpage-table">
- <tbody>
- <tr>
- <td>
- <h2 id="Documentation" name="Documentation"><a href="/Special:Tags?tag=Extensions&amp;language=en" title="Special:Tags?tag=Extensions&amp;language=en">Documentation</a></h2>
-
- <h3 id="Getting_started_with_Thunderbird">Getting started with Thunderbird</h3>
-
- <p>A brave, young developer wants to develop an add-on for Thunderbird. Here's a few links to help them through this journey.</p>
-
- <ul>
- <li>Start by reading the tutorial and learn how to<a class="internal" href="/en/Extensions/Thunderbird/Building_a_Thunderbird_extension" title="En/Building a Thunderbird extension"> build a Thunderbird extension</a> (Outdated, still talks about overlays and the add-on builder is no longer available but the tutorial has not been updated.)</li>
- <li>Read about the <a href="/en/Thunderbird/Main_Windows" title="Main Windows">main windows</a> so that you know what one means when they say « thread pane », « preview pane », and « folder pane ».</li>
-
- <li>Want to do some real stuff? See <a class="external" href="http://blog.xulforum.org/index.php?post/2011/03/14/Basic-MimeMessage-demo" title="http://blog.xulforum.org/index.php?post/2011/03/14/Basic-MimeMessage-demo">how to inspect a message</a> (demo add-on included!)</li>
- <li>Play with our other <a href="/en/Extensions/Thunderbird/Demo_Addon" title="Demo Addon">demo add-on</a> that exercises some more advanced Thunderbird-specific features</li>
- <li>Want to do even more stuff? Don't reinvent the wheel: steal functions from the <a class="link-https" href="https://github.com/protz/thunderbird-stdlib" title="https://github.com/protz/thunderbird-stdlib">thunderbird-stdlib</a> project (doc <a class="external" href="http://protz.github.com/thunderbird-stdlib/doc/symbols/_global_.html" title="http://protz.github.com/thunderbird-stdlib/doc/symbols/_global_.html">here</a>). Functions for dealing with messages (delete them, archive them, change their tags, etc.) are included.</li>
- <li>Haven't found what you're looking for? Read the <a class="internal" href="/en/Extensions/Thunderbird/HowTos" rel="internal" title="en/Extensions/Thunderbird/HowTos">Thunderbird how-tos</a>; they contain a lot of recipes for things extensions want to do.</li>
- <li>Still haven't managed to do what you wanted? See the list of all <a class="external" href="http://wiki.mozilla.org/Thunderbird/CommunicationChannels" title="http://wiki.mozilla.org/Thunderbird/CommunicationChannels">Thunderbird communication channels </a>so that you know where to ask when you get stuck :-).</li>
- <li>Feeling really brave? Read the source using a <a class="external" href="http://doxygen.db48x.net/comm-central/html/" title="http://doxygen.db48x.net/comm-central/html/">fancy interface</a>; you can often find tests that demonstrate how to do what you're trying to achieve.</li>
- </ul>
-
- <h3 id="The_Gloda_database">The Gloda database</h3>
-
- <p>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 (<strong>from</strong> field, <strong>to</strong> field) which are themselves part of a Contact: indeed, a contact has multiple identities.</p>
-
- <p>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.</p>
-
- <p>Gloda is extremely powerful and is used heavily by add-ons such as <a class="link-https" href="https://addons.mozilla.org/en-US/thunderbird/addon/gmail-conversation-view/" title="https://addons.mozilla.org/en-US/thunderbird/addon/gmail-conversation-view/">Thunderbird Conversations</a>. Learn more about Gloda:</p>
-
- <ul>
- <li>an overview of <a href="/en/Thunderbird/gloda" title="Gloda">Gloda</a></li>
- <li>learn how to create <a href="/en/Thunderbird/Creating_a_Gloda_message_query" title="Creating a gloda message query">your first message query</a> and read the <a href="/en/Thunderbird/Gloda_examples" title="Gloda examples">gloda examples</a></li>
- <li>learn about the Gloda internals: <a href="/en/Thunderbird/Gloda_debugging" title="Gloda debugging">Gloda debugging</a>, <a href="/en/Thunderbird/Gloda_indexing" title="Gloda indexing">Gloda indexing</a></li>
- </ul>
-
- <h3 id="More_Thunderbird-specific_links">More Thunderbird-specific links</h3>
-
- <p>Some of these links may be wildly out of date, but they still provide valuable information on the codebase.</p>
-
- <ul>
- <li><a class="internal" href="/en/Extensions/Thunderbird/An_overview_of_the_Thunderbird_interface" title="En/Extensions/Thunderbird/An overview of the Thunderbird interface">An overview of Thunderbird components</a></li>
- <li><a class="internal" href="/en/Extensions/Thunderbird/Thunderbird_developer_reference_docs" title="en/Extensions/Thunderbird/Thunderbird developer reference docs">Developer reference docs</a>:
- <ul>
- <li><a class="internal" href="/en/Folders" title="En/Folders">Folder classes</a></li>
- <li><a class="internal" href="/en/DB_Views_(message_lists)" title="En/DB Views (message lists)">DB views (message list)</a></li>
- <li><a class="internal" href="/en/Message_Summary_Database" title="En/Message Summary Database">Message summary database</a></li>
- <li><a class="internal" href="/en/MailNews_Protocols" title="En/MailNews Protocols">MailNews protocols</a></li>
- <li><a class="internal" href="/En/MailNews_Filters" rel="internal" title="En/MailNews Filters">MailNews filters</a></li>
- <li><a class="internal" href="/en/Extensions/Thunderbird/Error_reporting_tools" title="en/Extension Library/Extensions/Thunderbird/Error reporting tools">Error reporting tools</a></li>
- <li><a href="/en/Toolkit_API/STEEL" title="en/Toolkit API/STEEL">STEEL library</a> (obsolete as of Thunderbird 52, use <a class="link-https" href="https://github.com/protz/thunderbird-stdlib" title="https://github.com/protz/thunderbird-stdlib">https://github.com/protz/thunderbird-stdlib</a>)</li>
- <li><a class="external" href="http://quetzalcoatal.blogspot.com/2010/01/developing-new-account-types-part-0.html" title="http://quetzalcoatal.blogspot.com/2010/01/developing-new-account-types-part-0.html">Developing new account types</a> <strong>NEW!</strong></li>
- </ul>
- </li>
- <li><a class="internal" href="/en/Extensions/Thunderbird/Useful_newsgroups_discussions" title="En/Extensions/Thunderbird/Useful newsgroups discussions">Useful newsgroup discussions</a> (watch out, anything that's too old should be regarded suspiciously; there's been significant API rewrite over the past years, and most of these techniques are considerably easier now) </li>
- <li><a href="/en/Thunderbird/Thunderbird_API_documentation" title="en/Thunderbird/Thunderbird API documentation">Thunderbird API docs</a> (mostly a collection of out-of-date pages, relevance is rather dubious) </li>
- <li><a href="/en/Mozilla/Thunderbird/Releases" title="Thunderbird developer release notes">Thunderbird developer release notes</a> - changes in the recent Thunderbird updates affecting add-on developers. <a href="/Thunderbird_5_for_developers" title="Thunderbird 5 for developers">Thunderbird 5 for developers</a> has important information on MsgHdrToMimeMessage which is a central piece of code.</li>
- </ul>
-
- <h3 id="General_links">General links</h3>
-
- <ul>
- <li><a href="/en/Extensions/Thunderbird/Finding_the_code_for_a_feature" title="en/Extensions/Thunderbird/Finding the code for a feature">Finding the code for a feature</a></li>
- <li><a class="external" href="http://kb.mozillazine.org/Category:Thunderbird" title="http://kb.mozillazine.org/Category:Thunderbird">Mozillazine articles on Thunderbird</a></li>
- <li><a href="/Special:Tags?tag=Thunderbird" title="https://developer.mozilla.org/Special:Tags?tag=Thunderbird">All pages tagged with Thunderbird</a></li>
- <li><a href="/Special:Tags?tag=MailNews" title="https://developer.mozilla.org/Special:Tags?tag=MailNews">All pages tagged with MailNews</a></li>
- </ul>
- </td>
- <td>
- <h2 id="Community" name="Community">Community</h2>
-
- <ul>
- <li>See the list of all <a class="external" href="http://wiki.mozilla.org/Thunderbird/CommunicationChannels" title="http://wiki.mozilla.org/Thunderbird/CommunicationChannels">Thunderbird communication channels </a>first</li>
- <li>Among these are:</li>
- </ul>
-
- <p>{{ DiscussionList("dev-extensions", "mozilla.dev.extensions") }}</p>
-
- <ul>
- <li><a class="link-irc" href="irc://moznet/#extdev">#extdev IRC channel</a> / <a class="link-irc" href="irc://moznet/#maildev">#maildev IRC channel</a></li>
- <li><a class="external" href="http://forums.mozillazine.org/viewforum.php?f=19">MozillaZine forum</a></li>
- <li><a class="external" href="http://mozdev.org/mailman/listinfo/project_owners">mozdev project owners</a></li>
- <li><a href="/en/Extensions/Community" title="en/Extensions/Community">Other community links...</a></li>
- </ul>
-
- <h2 id="Tools" name="Tools">Tools</h2>
-
- <ul>
- <li><a class="link-https" href="https://addons.mozilla.org/en-US/firefox/addon/6622" rel="external nofollow" title="https://addons.mozilla.org/en-US/firefox/addon/6622">DOM Inspector</a> edit the live DOM (Firefox and Thunderbird)</li>
- <li><a class="link-https" href="https://addons.mozilla.org/thunderbird/addon/workspace-for-thunderbird/" title="https://addons.mozilla.org/thunderbird/addon/workspace-for-thunderbird/">Workspace for Thunderbird</a>, allows running code snippets in Thunderbird and inspecting variable structure and content</li>
- <li><a class="external" href="http://www.hacksrus.com/~ginda/venkman/" rel="external nofollow" title="http://www.hacksrus.com/~ginda/venkman/">Venkman</a>, a JavaScript debugger (<a class="external" href="http://addons.mozilla.org/en-US/firefox/addon/216" rel="external nofollow" title="http://addons.mozilla.org/en-US/firefox/addon/216">Firefox</a>, <a class="external" href="http://addons.mozilla.org/en-US/thunderbird/addon/216" rel="external nofollow" title="http://addons.mozilla.org/en-US/thunderbird/addon/216">Thunderbird</a>)</li>
- <li><a class="link-https" href="https://addons.mozilla.org/en-US/firefox/addon/7434/" rel="external nofollow" title="https://addons.mozilla.org/en-US/firefox/addon/7434/">Extension Developer's Extension</a> a suite of development tools</li>
- <li><a class="external" href="http://www.gijsk.com/" rel="external nofollow" title="http://www.gijsk.com/">Chrome List</a> view files in chrome:// (<a class="external" href="http://addons.mozilla.org/en-US/firefox/addon/4453" rel="external nofollow" title="http://addons.mozilla.org/en-US/firefox/addon/4453">Firefox</a>, <a class="external" href="http://addons.mozilla.org/en-US/thunderbird/addon/4453" rel="external nofollow" title="http://addons.mozilla.org/en-US/thunderbird/addon/4453">Thunderbird</a>)</li>
- <li><a href="/en/Mozmill" title="en/Mozmill">Mozmill</a> test tool and framework</li>
- <li><a class="external" href="http://xpcomviewer.mozdev.org/" rel="external nofollow" title="http://xpcomviewer.mozdev.org">XPCOMViewer</a> an XPCOM inspector (Firefox and Thunderbird)</li>
- </ul>
-
- <p>... <a class="internal" href="/en/Setting_up_extension_development_environment#Development_extensions" title="en/Setting up extension development environment#Development extensions">more tools</a> ...</p>
-
- <p><span class="alllinks"><a href="/Special:Tags?tag=Extensions:Tools&amp;language=en" title="Special:Tags?tag=Extensions:Tools&amp;language=en">View All...</a></span></p>
-
- <h2 id="Related_Topics" name="Related_Topics">Related Topics</h2>
-
- <dl>
- <dd><a href="/en/XUL" title="en/XUL">XUL</a>, <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a>, <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a>, <a href="/en/Themes" title="en/Themes">Themes</a>, <a href="/En/Developer_Guide" title="en/Developing_Mozilla">Developing Mozilla</a></dd>
- </dl>
- </td>
- </tr>
- </tbody>
-</table>
-
-<p><span class="comment">Categories</span></p>
-
-<p>{{ languages( { "ja": "ja/Extensions/Thunderbird" } ) }}</p>
diff --git a/files/fr/mozilla/add-ons/thèmes/fond/index.html b/files/fr/mozilla/add-ons/thèmes/fond/index.html
deleted file mode 100644
index 2af0b0031c..0000000000
--- a/files/fr/mozilla/add-ons/thèmes/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
----
-<p>{{AddonSidebar}}</p>
-
-<h2 id="Comment_créer_votre_propre_thème">Comment créer votre propre thème</h2>
-
-<div class="primary auto" id="getting-started">
-<p>Les thèmes sont fait d'une image "header" qui va remplacer le fond de base de Firefox.</p>
-
-<p>Vous avez fini votre thème ? <a href="https://addons.mozilla.org/developers/theme/submit">Mettez-le en ligne maintenant !</a></p>
-
-<h3 id="Création_de_l'image_header_du_thème">Création de l'image "header" du thème</h3>
-
-<p>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 <strong>ancrée au coin supérieur-droit</strong> de la fenêtre.</p>
-
-<p class="screenshot"><img alt="" src="https://mdn.mozillademos.org/files/9929/header-step.jpg" style="height: 215px; width: 1059px;"></p>
-
-<ul>
- <li><a href="https://addons.cdn.mozilla.net/static/img/docs/themes/header.jpg">Voir un exemple d'image Header ici.</a></li>
-</ul>
-
-<h4 id="Image_Requise">Image Requise</h4>
-
-<ul>
- <li>Les dimensions doivent être <strong>3000px de large × 200px de hauteur</strong></li>
- <li>En format PNG ou JPG</li>
- <li>L'image ne doit pas faire plus de 300KB de mémoire</li>
-</ul>
-
-<h4 id="Petites_aides">Petites aides</h4>
-
-<ul>
- <li>Une image discrète, peu contrastée et assez uniforme est recommandée; une image très détaillée ressortira trop par rapport à l'interface du navigateur</li>
- <li>Firefox peut afficher plus loin que la partie basse de l'image si une autre barre  d'outils ou d'autres éléments d'interface sont ajoutés en haut de la fenêtre.</li>
- <li>Le coin en haut à droite de l'image devrait avoir les informations les plus importantes -quand l'utilisateur agrandit la fenêtre du navigateur, celui-ci montre plus du côté gauche de l'image.</li>
-</ul>
-
-<h4 id="Ressources_édition_d'images_en_ligne">Ressources : édition d'images en ligne</h4>
-
-<ul>
- <li><a href="http://www.pixlr.com">Pixlr</a> — Pixlr offre un outil professionnel et simple d'utilisation pour créer et modifier des images dans votre navigateur.</li>
- <li><a href="http://www.photoshop.com/tools?wf=editor">Photoshop</a> — Retouchez, tournez et modifiez des photos avec Photoshop® Express, un éditeur de photo en ligne gratuit.</li>
-</ul>
-
-<h3 id="Envoyer_votre_thème_personnalisé">Envoyer votre thème personnalisé</h3>
-
-<p>Pour commencer à envoyer vos images, allez sur la page <a href="https://addons.mozilla.org/developers/theme/submit">Soumettre un thème.</a></p>
-
-<ol class="itemized">
- <li><strong>Nommez votre thème</strong> — 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.</li>
- <li><strong>Choisissez une catégorie et des tags</strong> — 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.</li>
- <li><strong>Décrivez votre thème</strong> — é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.</li>
- <li><strong>Sélectionnez</strong> une license pour votre thème — décidez une license de droits d'auteurs pour votre travail. <a href="http://creativecommons.org/licenses/">Lire plus à propos des types de licences Creative Common.</a>
- <ul>
- <li><strong>Important:</strong> Soyez sur d'avoir les droits d'utiliser cette image dans votre thème !</li>
- </ul>
- </li>
- <li><strong>Envoyez votre image</strong> — soyez sur qu'elle fait moins de 300 KB et qu'elle soit au formant JPG ou PNG !</li>
- <li><strong>Sélectionnez la couleur des textes et des onglets</strong> — vous pouvez choisir la couleur de "fond" des onglets et celle des textes qui colle le mieux avec votre image header.</li>
- <li><strong>Prévisualisez votre thème</strong> — 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.</li>
- <li><strong>Soumettre votre thème</strong> — 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.
- <ul>
- <li><strong>Info:</strong> 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 !</li>
- </ul>
- </li>
-</ol>
-
-<p class="call-to-submit"><a class="button prominent" href="https://addons.mozilla.org/en-US/developers/theme/submit">soumettre votre thème ici</a></p>
-
-<h2 class="call-to-submit" id="Plus_de_tutoriels">Plus de tutoriels</h2>
-
-<p><a href="http://vanillaorchidstutorials.blogspot.com/2015/11/mozilla-themes-focal-point-sizing.html">Mozilla Themes Focal Point on Sizing</a> - A tutorial on theming with a focus on sizing, by VanillaOrchids.<br>
- <br>
- <br>
- <sup>Traduit par Tocram2 ;)</sup></p>
-</div>
diff --git a/files/fr/mozilla/add-ons/thèmes/index.html b/files/fr/mozilla/add-ons/thèmes/index.html
deleted file mode 100644
index b0b2cd163a..0000000000
--- a/files/fr/mozilla/add-ons/thèmes/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
----
-<p>{{AddonSidebar}}</p>
-
-<p><span id="result_box" lang="fr"><span>Les thèmes vous permettent de modifier l'apparence de l'interface utilisateur et de la personnaliser selon vos goûts.</span> <span>Apprenez comment créer et partager des thèmes !</span></span></p>
-
-<div class="column-container">
-<div class="column-half">
-<h2 class="Documentation" id="Documentation" name="Documentation">Documentation</h2>
-
-<dl>
- <dt><a href="https://developer.mozilla.org/fr/Add-ons/Themes/Theme_concepts" title="Building a Theme">Créer un thème de navigateur</a></dt>
- <dd>Introduction pour la création de thèmes pour les dernières versions de Firefox.</dd>
- <dt>
- <h2 id="Thèmes_légers">Thèmes légers</h2>
- </dt>
- <dt><a href="https://developer.mozilla.org/fr/Add-ons/Themes/Lightweight_themes" title="Themes/Lightweight themes">Thèmes légers</a></dt>
- <dd>La création de thèmes utilisant peu d'espaces pour Firefox.</dd>
- <dt><a href="https://developer.mozilla.org/fr/Add-ons/Themes/Lightweight_Themes/FAQ" title="Themes/Common_Firefox_Theme_Issues_and_Solutions">FAQ des thèmes légers</a></dt>
- <dd>Donne les réponses aux questions les plus courantes.</dd>
-</dl>
-</div>
-
-<div class="column-half">
-<h2 class="Tools" id="Tools" name="Tools">Outils et ressources</h2>
-
-<ul>
- <li><a href="https://developer.mozilla.org/fr/Add-ons/WebExtensions/manifest.json/theme">Thème de navigateur les clés du manifest.json</a></li>
- <li><a href="https://developer.mozilla.org/fr/Add-ons/WebExtensions/API/theme">API extensions pour les thèmes de navigateur</a></li>
- <li><a href="http://vanillaorchidstutorials.blogspot.com/2015/11/mozilla-themes-focal-point-sizing.html">Tutoriel pour les thèmes légers (en)</a></li>
- <li><a href="https://discourse.mozilla.org/c/add-ons/themes">Discussions du forum (en)</a></li>
- <li><a href="https://blog.mozilla.org/addons/category/personas/">Thèmes abordés dans les fils du blog (en)</a></li>
- <li>  <a href="https://developer.mozilla.org/en-US/Mozilla/Add-ons/Themes/Obsolete">Ressources archivées</a></li>
-</ul>
-</div>
-</div>
-
-<p> </p>
diff --git a/files/fr/mozilla/add-ons/thèmes/theme_concepts/index.html b/files/fr/mozilla/add-ons/thèmes/theme_concepts/index.html
deleted file mode 100644
index 8856f4e38f..0000000000
--- a/files/fr/mozilla/add-ons/thèmes/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
----
-<div>{{AddonSidebar()}}</div>
-
-<p>Dans Firefox, les thèmes développés par la bibliothèque <a href="/en-US/Add-ons/WebExtensions">WebExtensions API</a> 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.</p>
-
-<p>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.</p>
-
-<div class="note">
-<p>If you have a <a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_themes">lightweight theme</a> 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.</p>
-</div>
-
-<h2 id="Static_themes">Static themes</h2>
-
-<div class="note">
-<p id="Image_formats">Note that you can't yet submit static WebExtension-based themes to addons.mozilla.org. The work to support this is tracked in <a href="https://github.com/mozilla/addons/issues/501">https://github.com/mozilla/addons/issues/501</a>. If you want to share a theme with other users, you'll need to make it either a <a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_themes">lightweight theme</a> or a <a href="/en-US/Add-ons/WebExtensions/API/theme">dynamic theme</a>.</p>
-</div>
-
-<p>Static themes are specified using the same resources as a browser extension: a <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a> 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 <a href="https://addons.mozilla.org">addons.mozilla.org</a> (AMO).</p>
-
-<div class="note">
-<p>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 <a href="#Dynamic_themes">Dynamic themes</a>.</p>
-</div>
-
-<h3 id="Defining_a_theme">Defining a theme</h3>
-
-<p>To create a theme (in this example a simple, single image theme):</p>
-
-<ul>
- <li>Create a folder in a suitable location on your computer.</li>
- <li>Add the theme image file to the folder:
- <pre>&lt;mytheme&gt;
- &lt;your_header_image&gt;.&lt;type&gt;</pre>
- </li>
- <li>Create a file called manifest.json in the folder and edit its content as follows:
- <pre class="brush: json">{
- "manifest_version": 2,
- "version": "1.0",
- "name": "&lt;your_theme_name&gt;",
- "theme": {
- "images": {
- "headerURL": "&lt;your_header_image&gt;.&lt;type&gt;"
- },
- "colors": {
- "accentcolor": "#FFFFFF",
- "textcolor": "#000"
- }
- }
-}
-</pre>
- Where:
-
- <ul>
- <li><code>"accentcolor":</code> is the heading area background color for your theme.</li>
- <li><code>"</code><code>textcolor</code><code>":</code> the color of the text in the heading area.</li>
- </ul>
- </li>
- <li>Package your theme and submit it to AMO, <a href="/en-US/Add-ons/WebExtensions/Publishing_your_WebExtension">following these instructions</a>.</li>
-</ul>
-
-<h3 id="Static_theme_approaches">Static theme approaches</h3>
-
-<p>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.</p>
-
-<h4 id="Single_image_themes">Single image themes</h4>
-
-<p>This is the basic or minimal theming option, where you define:</p>
-
-<ul>
- <li>a single image, which is anchored to the top right of the header area.</li>
- <li>A color for the text in the header.</li>
-</ul>
-
-<p>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<br>
- <img alt="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." src="https://mdn.mozillademos.org/files/15215/weta.png" style="height: 200px; width: 406px;"><br>
- combined with a complementary background color, to create this effect in the header<br>
- <img alt="A single image theme using the weta.png image" src="https://mdn.mozillademos.org/files/15217/basic_theme.png" style="height: 113px; width: 679px;"></p>
-
-<p>See details about this theme in the <a href="https://github.com/mdn/webextensions-examples/tree/master/themes">themes</a> example <a href="https://github.com/mdn/webextensions-examples/tree/master/themes/weta_fade">weta_fade</a>.</p>
-
-<p>Obviously, you can still provide a single wide image if you prefer.</p>
-
-<h4 id="Multiple_image_themes">Multiple image themes</h4>
-
-<p>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.</p>
-
-<p>Depending on the effect you want to create you may need to suppress the mandatory <code>"</code><code>headerURL</code><code>":</code> 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<br>
- <img alt="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." src="https://mdn.mozillademos.org/files/15219/weta_for_tiling.png" style="height: 200px; width: 270px;"><br>
- to create this effect<br>
- <img alt="A single image theme using the additional images option to align an image to the center of the heading and tile it. " src="https://mdn.mozillademos.org/files/15221/tiled_theme.png" style="height: 113px; width: 679px;"><br>
- Here you specify the weta image like this:</p>
-
-<pre class="brush: json" dir="ltr">"images": {
- "headerURL": "empty.png",
- "additional_backgrounds": [ "weta_for_tiling.png"]
-},</pre>
-
-<p dir="ltr">and the images tiling with:</p>
-
-<pre class="brush: json" dir="ltr">"properties": {
- "additional_backgrounds_alignment": [ "top" ],
- "additional_backgrounds_tiling": [ "repeat" ]
-},</pre>
-
-<p>Full details of how to setup this theme can be found in the <a href="https://github.com/mdn/webextensions-examples/tree/master/themes">themes</a> example <a href="https://github.com/mdn/webextensions-examples/tree/master/themes/weta_tiled">weta_tiled</a>. Full detais of the alignment and tiling options can be found in the <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/theme">"theme" key description</a>.</p>
-
-<p>Alternatively, you can use multiple images, say combining the original weta image with this one anchored to the left of the header<br>
- <img alt="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." src="https://mdn.mozillademos.org/files/15223/weta-left.png" style="height: 200px; width: 406px;"><br>
- to create this effect<br>
- <img alt="A theme using the additional images option to place two mirrored image to the left and right of the browser header." src="https://mdn.mozillademos.org/files/15225/multi_image_theme.png" style="height: 113px; width: 679px;"></p>
-
-<p>Where the images are specified with:</p>
-
-<pre class="brush: json" dir="ltr">"images": {
- "headerURL": "empty.png",
- "additional_backgrounds": [ "weta.png", "weta-left.png"]
-},</pre>
-
-<p dir="ltr">and their alignment by:</p>
-
-<pre class="brush: json" dir="ltr">"properties": {
- "additional_backgrounds_alignment": [ "right top" , "left top" ]
-},</pre>
-
-<p>Full details of how to setup this theme can be found in the <a href="https://github.com/mdn/webextensions-examples/tree/master/themes">themes</a> example <a href="https://github.com/mdn/webextensions-examples/tree/master/themes/weta_mirror">weta_mirror</a>. Full detais of the alignment options can be found in the <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/theme">"theme" key description</a>.</p>
-
-<h3 id="Static_animated_themes">Static animated themes</h3>
-
-<p>It is possible to create an animated theme using an APNG format image, as in the <a href="https://github.com/mdn/webextensions-examples/tree/master/themes">themes</a> example <a href="https://github.com/mdn/webextensions-examples/tree/master/themes/animated">animated</a>. However, remember that rapid animations, such as the one in the example might be too distracting for a practical theme.</p>
-
-<p dir="ltr">You can also animate themes programmatically, which we discuss in <a href="#Dynamic_themes">Dynamic themes</a>.</p>
-
-<h2 id="Dynamic_themes">Dynamic themes</h2>
-
-<p>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:</p>
-
-<ul>
- <li>To bundle a theme with a browser extension, as an added extra.</li>
- <li>Create a dynamic theme that changes under programmatic control.</li>
-</ul>
-
-<p>And, obviously, you can combine the two and bundle a programmatically controlled theme with your extension.</p>
-
-<p>Using the {{WebExtAPIRef("theme")}} API is straightforward. First, request "theme"<a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions"> permission</a> in the extension's<a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json"> manifest.json</a> 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.</p>
-
-<p>For example, the following code, from the <a href="https://github.com/mdn/webextensions-examples/tree/master/dynamic-theme">dynamic theme example</a> defines the content for the day and night elements of the dynamic theme:</p>
-
-<pre class="brush: js" dir="ltr">const themes = {
- 'day': {
- images: {
- headerURL: 'sun.jpg',
- },
- colors: {
- accentcolor: '#CF723F',
- textcolor: '#111',
- }
- },
- 'night': {
- images: {
- headerURL: 'moon.jpg',
- },
- colors: {
- accentcolor: '#000',
- textcolor: '#fff',
- }
- }
-};</pre>
-
-<p>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:</p>
-
-<pre class="brush: js" dir="ltr">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]);
-}</pre>
-
-<p dir="ltr">Learn more about dynamic themes and see an additional example in the following video:</p>
-
-<p dir="ltr">{{EmbedYouTube("ycckyrUN0AY")}}</p>
-
-<p dir="ltr"> </p>
-
-<p dir="ltr">If you have not built a browser extension before, check out <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension">Your first extension</a> for a step-by-step guide.</p>
-
-<h2 id="Cross_browser_compatibility">Cross browser compatibility</h2>
-
-<p>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.</p>
-
-<p>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:</p>
-
-<ul>
- <li><code>"headerURL":</code> to <code>"theme_frame":</code></li>
- <li><code>"accentcolor":</code> to <code>"frame":</code></li>
- <li><code>"textcolor":</code> to <code>"tab_text":</code></li>
-</ul>
-
-<p>Noting that "frame": and "tab_text": support RGB color definition only.</p>
-
-<p>So, in the single image theme example (weta_fade) could be supported in Chrome using the following manifest.json file:</p>
-
-<pre class="brush: json" dir="ltr">{
- "manifest_version": 2,
- "version": "1.0",
- "name": "&lt;your_theme_name&gt;",
- "theme": {
- "images": {
- "theme_frame": "weta.png"
- },
- "colors": {
- "frame": [ 173 , 176 , 159 ],
- "tab_text": [ 0 , 0 , 0 ]
- }
- }
-}</pre>
-
-<p>However, there will be a couple of differences:</p>
-
-<ul>
- <li>Chrome tiles the <code>“theme_frame”:</code> image from the left of the header area.</li>
- <li><code>"tab_text":</code> only affects the text on the highlighted/active tab.</li>
-</ul>
-
-<p dir="ltr"><img alt="The basic theme example using the Chrome compatible manifest.json keys, showing the differences in how those keys are implemented." src="https://mdn.mozillademos.org/files/15227/basic_in_chrome.png" style="height: 113px; width: 679px;"></p>
-
-<p>For more information, see the notes on <a href="/en-US/Add-ons/WebExtensions/manifest.json/theme#Chrome_compatibility">Chrome compatibility</a>.</p>
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
----
-<div>{{AddonSidebar}}</div>
-
-<div class="warning">
-<p>À 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.</p>
-
-<p>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.</p>
-</div>
-
-<p>A partir de Firefox 51, vous pouvez intégrer une WebExtension dans une <a href="/fr/docs/Mozilla/Add-ons/Bootstrapped_extensions">extension bootstrapped</a> classique ou dans une extension dans le <a href="/fr/docs/Mozilla/Add-ons/SDK">SDK des extensions</a>.</p>
-
-<p>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")}}.</p>
-
-<p><img alt="" src="https://mdn.mozillademos.org/files/13895/embedded-we.png" style="display: block; height: 522px; margin-left: auto; margin-right: auto; width: 429px;"></p>
-
-<p>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 <a href="/en-US/Add-ons/WebExtensions/Embedded_WebExtensions#Migrating_data_from_legacy_add-ons">migrer des données stockées</a> à 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, <a href="/en-US/docs/Mozilla/Add-ons/SDK/High-Level_APIs/simple-prefs">simple-prefs</a> ou le <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Services.jsm">service</a> de préférence) et les écrit en utilisant les APIs WebExtension (par exemple, {{WebExtAPIRef("storage")}}).</p>
-
-<p>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 <a href="https://github.com/mdn/webextensions-examples/tree/master/embedded-webextension-bootstrapped">comment porter à partir d'un add-on amorcé</a>, et l'autre montre <a href="https://github.com/mdn/webextensions-examples/tree/master/embedded-webextension-sdk">comment porter à partir d'un add-on sdk</a>.</p>
-
-<p>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 <a href="https://www.npmjs.com/package/jpm">jpm 1.2.0</a>.</p>
-
-<div class="note">
-<p>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 <a href="https://wiki.mozilla.org/RapidRelease/Calendar">date de sortie de Firefox 57</a>, 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.</p>
-</div>
-
-<h2 id="Incorporation_d'une_WebExtension">Incorporation d'une WebExtension</h2>
-
-<p>Si l'extension héritée est une extension bootstrap avec un <a href="/fr/Add-ons/Install_Manifests">install.rdf</a>, incluez la propriété  "hasEmbeddedWebExtension" dans le RDF, contenant la valeur "true":</p>
-
-<pre>&lt;<span class="pl-ent">em</span><span class="pl-ent">:</span><span class="pl-ent">hasEmbeddedWebExtension</span>&gt;true&lt;/<span class="pl-ent">em</span><span class="pl-ent">:</span><span class="pl-ent">hasEmbeddedWebExtension</span>&gt;</pre>
-
-<div>Si le complément hérité est une SDK add-on, incluez la clé "hasEmbeddedWebExtension" dans le package.json, définissez sur true:</div>
-
-<div> </div>
-
-<pre class="brush: json"><span class="pl-s"><span class="pl-pds">"</span>hasEmbeddedWebExtension<span class="pl-pds">"</span></span>: <span class="pl-c1">true</span>
-</pre>
-
-<div>La WebExtension elle-même vit dans un dossier de niveau supérieur appelé "webextension" dans l'add-on. Par exemple:</div>
-
-<div> </div>
-
-<pre>my-boostrapped-addon/
- chrome/
- webextension/
- manifest.json
- background.js
- ...
- bootstrap.js
- chrome.manifest
- install.rdf</pre>
-
-<div> </div>
-
-<div>
-<pre>my-sdk-addon/
- index.js
- package.json
- webextension/
- manifest.json
- background.js
- ...</pre>
-</div>
-
-<p>Notez que la WebExtension intégrée doit se trouver directement dans le répertoire <code>webextension/</code>.  Il ne peut pas être dans un sous-répertoire. Cela signifie également que vous ne pouvez pas intégrer plus d'une WebExtension.</p>
-
-<p>Firefox ne traite pas les WebExtensions intégrées comme une extension indépendante. Pour cette raison, vous ne devez pas spécifier une <a href="/fr/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID">identification d'extension</a> pour elle. Si vous le faites, il sera simplement ignoré.</p>
-
-<p>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'<a href="/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/applications">application</a> pour l'identifiant soit identique à un ID d'extension original. De cette façon, <a href="https://addons.mozilla.org/fr/firefox/">addons.mozilla.org</a> reconnaîtra que WebExtension est une mise à jour de l'extension existante.</p>
-
-<h2 id="Démarré_la_WebExtension">Démarré la WebExtension</h2>
-
-<p>La WebExtension intégrée doit être explicitement démarré par l'extension d'intégration.</p>
-
-<p>Si l'extension d'intégration est un add-on bootstrap, l'argument de données passé à la fonction de <code><a href="/fr/Add-ons/Bootstrapped_extensions#startup">startup()</a></code> obtiendra une propriété supplémentaire à la <code>webExtension</code> :</p>
-
-<pre class="brush: js">// bootstrapped add-on
-
-<span class="pl-k">function</span> <span class="pl-en">startup</span>({webExtension}) {
-
-...</pre>
-
-<p>Si l'add-on d'intégration est une extension SDK, il pourra accéder à un objet WebExtension à l'aide du module <code>sdk/webextension</code> :</p>
-
-<pre class="brush: js"><span class="pl-k">// SDK add-on
-
-const</span> <span class="pl-c1">webExtension</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>sdk/webextension<span class="pl-pds">"</span></span>);</pre>
-
-<p>Quoi qu'il en soit, cet objet a une seule fonction, <code>startup()</code>, qui renvoie une <code><a href="/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a></code>. 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é :</p>
-
-<ul>
- <li>{{WebExtAPIRef("runtime.onConnect")}}</li>
- <li>{{WebExtAPIRef("runtime.onMessage")}}</li>
-</ul>
-
-<p>Pour exemple:</p>
-
-<pre class="brush: js">// bootstrapped add-on
-
-function startup({webExtension}) {
- webExtension.startup().then(api =&gt; {
- const {browser} = api;
- browser.runtime.onMessage.addListener(handleMessage);
- });
-}</pre>
-
-<pre class="brush: js"><span class="pl-k">// SDK add-on</span>
-
-const webExtension = require("sdk/webextension");
-
-webExtension.startup().then(api =&gt; {
- const {browser} = api;
- browser.runtime.onMessage.addListener(handleMessage);
-});
-</pre>
-
-<p>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 <code>onMessage</code>, et peut accepter des requêtes de connexion en utilisant <code>onConnect</code>.</p>
-
-<p>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 <a href="/fr/Add-ons/WebExtensions/Debugging_(before_Firefox_50)#Viewing_log_output">boite à outils de la console du navigateur</a>.</p>
-
-<h2 id="Echange_des_messages">Echange des messages</h2>
-
-<p>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")}} :</p>
-
-<ul>
- <li>Il peut envoyer des messages uniques en utilisant {{WebExtAPIRef("runtime.sendMessage()")}}.</li>
- <li>Il peut configurer une connexion en utilisant  {{WebExtAPIRef("runtime.connect()")}}.</li>
-</ul>
-
-<h3 id="Messagerie_sans_connexion">Messagerie sans connexion</h3>
-
-<p>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 :</p>
-
-<pre class="brush: js">browser.runtime.sendMessage("message-from-webextension").then(reply =&gt; {
- if (reply) {
- console.log("response from legacy add-on: " + reply.content);
- }
-});</pre>
-
-<p>L'add-on d'intégration peut recevoir (et répondre facultativement) ce message en utilisant l'objet {{WebExtAPIRef("runtime.onMessage")}} :</p>
-
-<pre class="brush: js">// bootstrapped add-on
-
-function startup({webExtension}) {
- // Start the embedded webextension.
- webExtension.startup().then(api =&gt; {
- const {browser} = api;
- browser.runtime.onMessage.addListener((msg, sender, sendReply) =&gt; {
- if (msg == "message-from-webextension") {
- sendReply({
- content: "reply from legacy add-on"
- });
- }
- });
- });
-}</pre>
-
-<h3 id="Messagerie_orientée_connexion">Messagerie orientée connexion</h3>
-
-<p>Pour configurer une connexion plus longue entre la WebExtension et l'extension héritée, la WebExtension peut utiliser {{WebExtAPIRef("runtime.connect()")}}.</p>
-
-<pre class="brush: js">var port = browser.runtime.connect({name: "connection-to-legacy"});
-
-port.onMessage.addListener(function(message) {
- console.log("Message from legacy add-on: " + message.content);
-});
-</pre>
-
-<p>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 :</p>
-
-<pre class="brush: js">function startup({webExtension}) {
- // Start the embedded webextension.
- webExtension.startup().then(api =&gt; {
- const {browser} = api;
- browser.runtime.onConnect.addListener((port) =&gt; {
- port.postMessage({
- content: "content from legacy add-on"
- });
- });
- });
-}</pre>
-
-<h2 id="Migration_de_données_à_partir_d'extensions_existantes">Migration de données à partir d'extensions existantes</h2>
-
-<p>Une utilisation majeure pour les WebExtensions intégrées sont de migrer les données stockées d'une extension.</p>
-
-<p>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 <a href="/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/simple-prefs">simple-prefs</a>  pour stocker les préférences, la version WebExtension ne pourra pas accéder à ces données.</p>
-
-<p>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.</p>
-
-<ul>
- <li>Dans la version initiale, un add-on basé sur le SDK lit et écrit les préférences de l'add-on utilisé par l'API <a href="/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/simple-prefs">simple-prefs</a>.</li>
- <li>Dans la version intermédiaire, le complément SDK démarre la WebExtension intégrée. La WebExtension demande ensuite le complément SDK pour récupérer les données stockées à partir de  simples prefs. La WebExtension stocke ensuite les données à l'aide de l'API {{WebExtAPIRef("storage")}}.</li>
- <li>Dans la version finale, l'extension est juste une WebExtension et utilise seulement  que l'API de stockage.</li>
-</ul>
-
-<p>Nous avons fourni deux exemples illustrant ce modèle : <a href="https://github.com/mdn/webextensions-examples/tree/master/embedded-webextension-bootstrapped">"embedded-webextension-bootstrapped"</a> montre la migration à partir d'un add-on bootstrap, tandis que <a href="https://github.com/mdn/webextensions-examples/tree/master/embedded-webextension-sdk">"embedded-webextension-sdk"</a> montre la migration à partir du SDK de l'extension.</p>
-
-<h3 id="Préférences">Préférences</h3>
-
-<p>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, <a href="/fr/docs/Mozilla/Add-ons/SDK/High-Level_APIs/simple-prefs">simple-prefs</a> ou le <a href="/fr/docs/Mozilla/JavaScript_code_modules/Services.jsm">service</a> des préférences) ou dans la WebExtension intégrée (en utilisant <a href="/fr/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_ui">options_ui</a>).</p>
-
-<p>Si les deux parties définissent les préférences, que les préférences de la WebExtension intégrée annuleront les anciennes.</p>
-
-<p>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 <a href="/fr/Add-ons/WebExtensions/Embedded_WebExtensions#Starting_the_WebExtension">commencée</a>. 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 <a href="/fr/docs/Tools/Browser_Console">console du navigateur</a> lorsque "about:addons" is ouvert.</p>
-
-<p>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 <code>webExtension.startup()</code> dans le <a href="/fr/Add-ons/Bootstrapped_extensions#startup">bootstrap de démarrage</a>. Pour une extension SDK supplémentaire, cela signifie que vous devez appeler  <code>webExtension.startup()</code> dans le point d'entrée de l'add-on (par défaut, index.js).</p>
-
-<p>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".</p>
-
-<h2 id="Limitations">Limitations</h2>
-
-<h3 id="Debogage">Debogage</h3>
-
-<p>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'<a href="/fr/Add-ons/WebExtensions/Debugging_(before_Firefox_50)">ancien flux de travail de débogage</a>, basé sur la boite d'outils du navigateur.</p>