"use strict"; let List = { showPage: function(document, db, cat, tag, search, sort, page) { let cats = {"alerts-updates": 0, "appearance": 1, "bookmarks": 2, "download-management": 3, "feeds-news-blogging": 4, "games-entertainment": 5, "language-support":6 , "photos-music-videos": 7, "privacy-security": 8, "search-tools": 9, "shopping": 10, "social-communication": 11, "tabs": 12, "web-development": 13, "other": 14}; let catnames = ["Alerts & Updates", "Appearance", "Bookmarks", "Download Management", "Feeds, News & Blogging", "Games & Entertainment", "Language Support", "Photos, Music & Videos", "Privacy & Security", "Search Tools", "Shopping", "Social & Communication", "Tabs", "Web Development", "Other"]; let catstyle = ["72", "14", "22", "5", "1", "142", "37", "38", "12", "13", "141", "71", "93", "4", "73"]; if (cat === undefined || !(cat in cats)) { cat = ""; } if (tag === undefined) { tag = ""; } if (search === undefined || search == "list?q=") { search = ""; } else { search = decodeURIComponent(search.replace(/\+/g, " ").trim()); document.getElementById("search-q").value = search; } let sorts = {"users": 0, "rating": 1, "reviews": 2, "created": 3, "updated": 4, "name": 5}; let sortnames = ["Most Popular Extensions", "Top-Rated Extensions", "Most Reviewed Extensions", "Newest Extensions", "Recently Updated Extensions", "Extensions by Name"]; if (sort === undefined || !(sort in sorts)) { sort = "users"; } if (page === undefined) { page = 1; } document.body.className += " extensions s-" + sort; if (cat != "") { let css = '#c-%N% a{background:#ecf5fe;color:#333;font-weight:bold;}#c-%N% a:after{color:inherit;}#c-0{display:block}'; css = css.replace(/%N%/g, catstyle[cats[cat]]); let style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode(css)); document.head.appendChild(style); } let data = this.loadData(db, cat, tag, search, sort, page); data.cat = (cat == "") ? "" : "/" + cat; data.sort = sort; let title; if (tag == "") { if (search == "") { if (cat == "") { data.sortname = sortnames[sorts[sort]]; } else { data.sortname = catnames[cats[cat]]; } title = data.sortname; } else { data.sortname = 'Search Results for "' + search + '"'; title = search + " :: Search"; } } else { data.sortname = 'Search Results for tag "' + tag + '"'; title = tag + " :: Tag";; } data.tag = (tag == "") ? (search == "") ? "" : "q=" + search + "&" : "tag=" + tag + "&"; if (sort == "" || sort == "users") { data.tagc = (tag == "") ? (search == "") ? "" : "?q=" + search : "?tag=" + tag; } else { data.tagc = (tag == "") ? (search == "") ? "?sort=" + sort : "?q=" + search + "&sort=" + sort : "?tag=" + tag + "&sort=" + sort; } data.srt = ["", "", "", "", "", ""]; data.srt[sorts[sort]] = 'class="selected"'; document.title = title + " :: Classic Add-ons Archive"; let template = this.template; template = this.processTemplate(template, data); let contfrag = document.createRange().createContextualFragment(template); let pagediv = document.getElementById("page"); // Limpiar solo contenido dinámico, mantener cabecera Array.from(pagediv.children).forEach(child => { if (!child.classList.contains('amo-header')) child.remove(); }); let frag = contfrag.firstElementChild; pagediv.appendChild(frag.children[0]); pagediv.appendChild(frag.children[0]); }, loadData: function(db, cat, tag, search, sort, page) { let cq1, cq2; if (cat != "") { cq1 = "INNER JOIN categories ON addons.addon_id = categories.addon_id "; cq2 = "cat_name = '" + cat + "' AND "; } else { cq1 = ""; cq2 = "1 AND "; } if (tag != "") { cq1 += "INNER JOIN tags ON addons.addon_id = tags.addon_id "; cq2 += "tag_name = '" + tag + "' AND "; } else { cq1 += ""; cq2 += "1 AND "; } if (search != "") { cq1 += ""; cq2 += "addons.name LIKE '%" + search.replace(/'/g, "_") + "%' AND "; } else { cq1 += ""; cq2 += "1 AND "; } let cq = cq1 + "WHERE " + cq2.slice(0, -5); let dbQuery = db.createStatement("SELECT COUNT(*) AS count FROM addons " + cq); dbQuery.executeStep(); let count = dbQuery.row.count; dbQuery.finalize(); let data = {}; data.page = count > 0 ? page : 0; data.count = new Intl.NumberFormat("en-US").format(count); data.pages = Math.ceil(count / 20); let pfrom = count > 0 ? (page - 1) * 20 + 1 : 0; data.pfrom = new Intl.NumberFormat("en-US").format(pfrom); let pto = (pfrom + 19 < count) ? pfrom + 19 : count; data.pto = new Intl.NumberFormat("en-US").format(pto); if (page == 1) { data.disprev = "disabled"; data.prev = ""; } else { data.disprev = ""; data.prev = parseInt(page) - 1; } if (page == data.pages || count == 0) { data.disnext = "disabled"; data.next = ""; } else { data.disnext = ""; data.next = parseInt(page) + 1; } let order; switch (sort) { case "users": order = "users DESC, addons.addon_id"; break; case "reviews": order = "reviews DESC, addons.addon_id"; break; case "rating": order = "bayesian DESC, addons.addon_id"; break; case "created": order = "addons.addon_id DESC"; break; case "updated": order = "created DESC, addons.addon_id"; break; case "name": order = "name"; break; } dbQuery = db.createStatement("SELECT addons.addon_id AS addon_id, addons.name AS name, slug, summary, is_experimental, users, reviews, rating, version, is_restart_required, versions.url AS url, min, max, created, icon FROM ( SELECT addons.rowid AS add_row, versions.rowid AS ver_row, MAX(created) AS crt FROM addons INNER JOIN versions ON addons.addon_id = versions.addon_id " + cq + " GROUP BY addons.addon_id ORDER BY " + order + " LIMIT 20 OFFSET :offset ) INNER JOIN versions ON ver_row = versions.rowid INNER JOIN addons ON addons.rowid = add_row LEFT JOIN icons ON addons.addon_id = icons.addon_id"); dbQuery.params.offset = pfrom - 1; data.items = ""; while (dbQuery.executeStep()) { let item = this.item; item = item.replace("%NAME%", dbQuery.row.name); item = item.replace(/%SLUG%/g, dbQuery.row.slug); item = item.replace("%SUMMARY%", dbQuery.row.summary); if (dbQuery.row.icon) { item = item.replace("%ICON%", "../skin/icons/" + dbQuery.row.icon + ".png"); } else { item = item.replace("%ICON%", "../skin/icons/" + Math.trunc(dbQuery.row.addon_id/1000) + "/" + dbQuery.row.addon_id + ".png"); } let users; if (dbQuery.row.users >= 0) { users = '
This add-on is not compatible with your version of Firefox because of the following: