AMO: Manage My Add-on

Manage your add-on from add-on page without having to visit dev-hub page first

  1. /* This Source Code Form is subject to the terms of the Mozilla Public
  2. * License, v. 2.0. If a copy of the MPL was not distributed with this
  3. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  4.  
  5. // ==UserScript==
  6. // @name AMO: Manage My Add-on
  7. // @namespace http://mozilla.status.net/loucypher
  8. // @description Manage your add-on from add-on page without having to visit dev-hub page first
  9. // @version 3.8
  10. // @author LouCypher
  11. // @license MPL 2.0
  12. // @include https://addons.mozilla.org/*/addon/*
  13. // ==/UserScript==
  14.  
  15. /*
  16. Changelog:
  17. - v3.8
  18. 2012-08-12
  19. x De-E4X-ization
  20. - v3.7
  21. 2012-06-05
  22. x Updated to new AMO layout.
  23. - v3.6
  24. 2012-04-19:
  25. + Added Dutch (nl) translation, thanks to SBscripts.
  26. - v3.5
  27. 2012-04-07:
  28. x v0.3.5 is now v3.5.
  29. x Upgraded license from MPL 1.1 to MPL 2.0.
  30. x Fixed: menu top position if 'Social Buttons for AMO'
  31. userscript is running.
  32. - v0.3.4
  33. 2012-03-24:
  34. + Added Hebrew (he) translation, thanks to baryoni.
  35. + Added bg and ca translations.
  36. x Cosmetic changes.
  37. x Refactored.
  38. - v0.3.3
  39. 2012-03-09:
  40. + Added "View Recent Changes" menu.
  41. x Cosmetic changes.
  42. - v0.3.2
  43. 2012-03-01:
  44. + Added de, es-ES, fr, ru locale.
  45. - v0.3.1
  46. 2011-11-16:
  47. x Updated to new AMO layout.
  48. - v0.3
  49. 2011-07-08:
  50. x Updated to new AMO layout.
  51. - v0.2.1
  52. 2011-06-30:
  53. + Added link to l10n help if the chosen language is not supported.
  54. - v0.2:
  55. + Added: localization supports (default en-US).
  56. + Added: Bahasa Indonesia (id) locale.
  57. x Changed: don't hide menu when you click the link in menu.
  58. x Fixed: wrong position in "rtl" direction (Arabic, Hebrew).
  59. - v0.1:
  60. * Initial released.
  61. */
  62.  
  63. var profile = $("#aux-nav .account ul > li > a");
  64. if (!profile) {
  65. //GM_log("You're NOT LOGGED IN.");
  66. return; // you're not logged in to AMO
  67. }
  68. var addon = $("#page section > #addon", document.body);
  69. if (!addon) {
  70. //GM_log("This is NOT an ADD-ON page.");
  71. return; // not an add-on page
  72. }
  73.  
  74. var author = $("hgroup > h4.author > a");
  75. if (author.href != profile.href) {
  76. //GM_log("This is NOT YOUR add-on.");
  77. return; // not your extension
  78. }
  79.  
  80. var lang = location.pathname.split("/")[1];
  81. var text; // l10n
  82. switch (lang) {
  83. case "id": // Bahasa Indonesia
  84. text = {
  85. menu: "Kelola",
  86. edit: "Edit keterangan pengaya",
  87. ownership: "Kelola kepemilikan dan lisensi",
  88. profile: "Kelola profil pengembang",
  89. payments: "Kelola pembayaran",
  90. versions: "Kelola status dan riwayat",
  91. changes: "Lihat perubahan terakhir"
  92. }
  93. break;
  94. case "bg": // Български
  95. text = {
  96. edit: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440"
  97. + "\u0430\u0439 \u0441\u043F\u0438\u0441\u044A\u043A",
  98. ownership: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D"
  99. + "\u0438\u0435 \u043D\u0430 \u0430\u0432\u0442\u043E"
  100. + "\u0440\u0438 \u0438 \u043B\u0438\u0446\u0435\u043D\u0437",
  101. profile: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438"
  102. + "\u0435 \u043D\u0430 \u043F\u0440\u043E\u0444\u0438\u043B"
  103. + "\u0430 \u043D\u0430 \u0440\u0430\u0437\u0440\u0430\u0431"
  104. + "\u043E\u0442\u0447\u0438\u043A",
  105. payments: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438"
  106. + "\u0435 \u043D\u0430 \u043F\u043B\u0430\u0449\u0430\u043D"
  107. + "\u0438\u044F\u0442\u0430",
  108. versions: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438"
  109. + "\u0435 \u043D\u0430 \u0441\u044A\u0441\u0442\u043E\u044F"
  110. + "\u043D\u0438\u0435 \u0438 \u0432\u0435\u0440\u0441\u0438"
  111. + "\u0438",
  112. changes: "\u041F\u043E\u043A\u0430\u0436\u0438 \u043F\u043E\u0441"
  113. + "\u043B\u0435\u0434\u043D\u0438\u0442\u0435 \u043F\u0440"
  114. + "\u043E\u043C\u0435\u043D\u0438"
  115. }
  116. break;
  117. case "ca": // català
  118. text = {
  119. edit: "Edita la llista",
  120. ownership: "Gestiona els autors i la llic\u00E8ncia",
  121. profile: "Gestiona el perfil del desenvolupador",
  122. payments: "Gestiona les donacions",
  123. versions: "Gestiona l\'estat i les versions",
  124. changes: "Mostra els canvis recents"
  125. }
  126. break;
  127. case "de": // Deutsch
  128. text = {
  129. edit: "Listeneintrag bearbeiten",
  130. ownership: "Autoren und Lizenz verwalten",
  131. profile: "Entwicklerprofil editieren",
  132. payments: "Zahlungen verwalten",
  133. versions: "Status und Versionen verwalten",
  134. changes: "J\u00FCngste \u00C4nderungen anzeigen"
  135. }
  136. break;
  137. case "es-ES": // Español (de España)
  138. text = {
  139. edit: "Editar Listado",
  140. ownership: "Administrar autores y licencia",
  141. profile: "Administrar perfil del desarrollador",
  142. payments: "Administrar pagos",
  143. versions: "Administrar estado y versiones",
  144. changes: "Ver los cambios recientes"
  145. }
  146. break;
  147. case "fr": // Français
  148. text = {
  149. edit: "\u00C9diter le listing",
  150. ownership: "G\u00E9rer les auteurs et la licence",
  151. profile: "G\u00E9rer le profil d\u00E9veloppeur",
  152. payments: "G\u00E9rer les paiements",
  153. versions: "G\u00E9rer les statuts et versions",
  154. changes: "Voir les changements r\u00E9cents"
  155. }
  156. break;
  157. case "he": // עברית
  158. text = { // thanks to baryoni http://userscripts.org/users/48266
  159. menu: "\u05E0\u05D4\u05DC",
  160. edit: "\u05E2\u05E8\u05D5\u05DA \u05E8\u05E9\u05D9\u05DE\u05EA "
  161. + "\u05D4\u05E8\u05D7\u05D1\u05D5\u05EA",
  162. ownership: "\u05E0\u05D4\u05DC \u05DE\u05D7\u05D1\u05E8\u05D9\u05DD "
  163. + "\u05D5\u05E8\u05E9\u05D9\u05D5\u05DF",
  164. profile: "\u05E0\u05D4\u05DC \u05E4\u05E8\u05D5\u05E4\u05D9\u05DC "
  165. + "\u05DE\u05E4\u05EA\u05D7\u05D9\u05DD",
  166. payments: "\u05E0\u05D4\u05DC "
  167. + "\u05EA\u05E9\u05DC\u05D5\u05DE\u05D9\u05DD",
  168. versions: "\u05E0\u05D4\u05DC \u05DE\u05E6\u05D1 "
  169. + "\u05D5\u05D2\u05D9\u05E8\u05E1\u05D0\u05D5\u05EA",
  170. changes: "\u05D4\u05E6\u05D2 \u05E9\u05D9\u05E0\u05D5\u05D9"
  171. + "\u05D9\u05DD \u05D0\u05D7\u05E8\u05D5\u05E0\u05D9\u05DD"
  172. }
  173. break;
  174. case "ru": // Русский
  175. text = {
  176. edit: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438"
  177. + "\u0440\u043E\u0432\u0430\u0442\u044C \u0441"
  178. + "\u0442\u0440\u0430\u043D\u0438\u0446\u0443",
  179. ownership: "\u0423\u043F\u0440\u0430\u0432\u043B"
  180. + "\u0435\u043D\u0438\u0435 \u0430\u0432"
  181. + "\u0442\u043E\u0440\u0430\u043C\u0438 "
  182. + "\u0438 \u043B\u0438\u0446\u0435\u043D"
  183. + "\u0437\u0438\u0435\u0439",
  184. profile: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435"
  185. + "\u043D\u0438\u0435 \u043F\u0440\u043E\u0444"
  186. + "\u0438\u043B\u0435\u043C \u0440\u0430\u0437"
  187. + "\u0440\u0430\u0431\u043E\u0442\u0447\u0438"
  188. + "\u043A\u0430",
  189. payments: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435"
  190. + "\u043D\u0438\u0435 \u043F\u043B\u0430\u0442"
  191. + "\u0435\u0436\u0430\u043C\u0438",
  192. versions: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435"
  193. + "\u043D\u0438\u0435 \u0441\u0442\u0430\u0442"
  194. + "\u0443\u0441\u043E\u043C \u0438 \u0432\u0435"
  195. + "\u0440\u0441\u0438\u044F\u043C\u0438",
  196. changes: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440"
  197. + "\u0435\u0442\u044C \u043F\u043E\u0441\u043B\u0435"
  198. + "\u0434\u043D\u0438\u0435 \u0438\u0437\u043C\u0435"
  199. + "\u043D\u0435\u043D\u0438\u044F"
  200. }
  201. break;
  202. case "nl": // Nederlands
  203. text = { // Thanks to SBscripts http://userscripts.org/users/SBscripts
  204. edit: "Lijstvermelding bewerken",
  205. ownership: "Schrijvers & licentie beheren",
  206. profile: "Ontwikkelaarsprofiel bewerken",
  207. payments: "Betalingen beheren",
  208. versions: "Status & versies",
  209. changes: "Recente wijzigingen bekijken"
  210. }
  211. break;
  212. default: // en-US
  213. text = {
  214. edit: "Edit Add-on Listing",
  215. ownership: "Manage Authors & License",
  216. profile: "Manage Developer Profile",
  217. payments: "Manage Payments",
  218. versions: "Manage Status & Versions",
  219. changes: "View Recent Changes"
  220. }
  221. }
  222.  
  223. // available languages
  224. var languages = ["bg", "ca", "de", "en-US",
  225. "es-ES", "fr", "he", "id",
  226. "nl", "ru"];
  227.  
  228. var leftRight = (document.documentElement.dir == "rtl")
  229. ? "left: 220px; right: inherit; "
  230. : "right: 75px; left: inherit; ";
  231.  
  232. var block = "display: block;";
  233.  
  234. var l10n = "border-top: 1px dashed rgb(174, 207, 218); " +
  235. "padding-top: 0.5em; margin-top: 0.5em;"
  236.  
  237. for (var i = 0; i < languages.length; i++) {
  238. if (lang == languages[i]) {
  239. l10n = "display: none";
  240. break;
  241. }
  242. }
  243.  
  244. var app = location.pathname.split("/")[2];
  245. var baseURL = location.pathname.replace(app, "developers");
  246.  
  247. var menu = '<div id="edit-popup" class="popup"'
  248. + ' style="width: 300px; display: none;'
  249. + ' line-height: 1.5em; top: 380px; '
  250. + leftRight
  251. + ' bottom: inherit; font-size: medium;">'
  252. + '<div><ul id="dont-hide">'
  253. + '<li><a href="' + baseURL + 'edit" style="' + block + '">'
  254. + text.edit + '</a></li>'
  255. + '<li><a href="' + baseURL + 'ownership" style="' + block + '">'
  256. + text.ownership + '</a></li>'
  257. + '<li><a href="' + baseURL + 'profile" style="' + block + '">'
  258. + text.profile + '</a></li>'
  259. + '<li><a href="' + baseURL + 'payments" style="' + block + '">'
  260. + text.payments + '</a></li>'
  261. + '<li><a href="' + baseURL + 'versions" style="' + block + '">'
  262. + text.versions + '</a></li>'
  263. + '<li><a href="' + baseURL.replace(/addon/, "feed")
  264. + '" style="' + block + '">' + text.changes + '</a></li>'
  265. + '<li style="' + l10n + '">'
  266. + '<a href="http://userscripts.org/topics/78247#posts-357043"'
  267. + ' style="' + block + '">Translate this menu to your language</a>'
  268. + '</li>'
  269. + '</ul></div></div>';
  270.  
  271. var div = document.createElement("div");
  272. div.innerHTML = menu;
  273.  
  274. document.body.appendChild(div.firstChild);
  275.  
  276. // If 'Social Buttons for Amo' userscript is installed and running
  277. $("#GM_config_overlay") && (div.style.top = "402px");
  278.  
  279. var button = $("#page aside a.button.developer");
  280. if (text.menu) button.innerHTML = "<span>" + text.menu + "</span>";
  281. button.style.minWidth = "100px";
  282. button.addEventListener("click", function(e) {
  283. e.preventDefault();
  284. var popup = $("#edit-popup");
  285. popup.style.display = (popup.style.display == "none") ? "block" : "none";
  286. }, false);
  287.  
  288. addEventListener("click", function(e) {
  289. if ((e.target.className == "button developer prominent") ||
  290. (e.target.parentNode.className == "button developer prominent") ||
  291. (e.target.parentNode.parentNode.id == "dont-hide")) return;
  292. var popup = $("#edit-popup");
  293. popup.style.display = "none";
  294. }, false);
  295.  
  296. function $(aSelector, aNode) {
  297. return (aNode ? aNode : document).querySelector(aSelector);
  298. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址