Skip to content

Commit eabad3c

Browse files
authored
Merge pull request #1542 from getfider/roadmap-v2
Roadmap view
2 parents bc9f3eb + d070ca3 commit eabad3c

41 files changed

Lines changed: 1120 additions & 225 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/cmd/routes.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ func routes(r *web.Engine) *web.Engine {
139139
r.Use(middlewares.CheckTenantPrivacy())
140140

141141
r.Get("/", handlers.Index())
142+
r.Get("/roadmap", handlers.RoadmapPage())
142143
r.Get("/posts/:number", handlers.PostDetails())
143144
r.Get("/posts/:number/:slug", handlers.PostDetails())
144145

app/handlers/roadmap.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package handlers
2+
3+
import (
4+
"net/http"
5+
6+
"github.com/getfider/fider/app/models/query"
7+
"github.com/getfider/fider/app/pkg/bus"
8+
"github.com/getfider/fider/app/pkg/env"
9+
"github.com/getfider/fider/app/pkg/web"
10+
)
11+
12+
// RoadmapPage renders the roadmap board. Pro tenants and self-hosted
13+
// installations get the full data; other tenants render the page with no data
14+
// so the client shows the upgrade call-to-action.
15+
func RoadmapPage() web.HandlerFunc {
16+
return func(c *web.Context) error {
17+
props := web.Props{
18+
Page: "Roadmap/Roadmap.page",
19+
Title: "Roadmap",
20+
}
21+
22+
if env.IsSingleHostMode() || c.Tenant().IsPro {
23+
// Keep in sync with ROADMAP_DEFAULT_LIMIT on the client; the "Show more"
24+
// link uses posts.length >= limit as its heuristic and needs both ends
25+
// to agree on the initial cap.
26+
plannedPosts := &query.SearchPosts{View: "planned", Limit: "10"}
27+
startedPosts := &query.SearchPosts{View: "started", Limit: "10"}
28+
completedPosts := &query.SearchPosts{View: "completed", Limit: "10"}
29+
getAllTags := &query.GetAllTags{}
30+
31+
if err := bus.Dispatch(c, plannedPosts, startedPosts, completedPosts, getAllTags); err != nil {
32+
return c.Failure(err)
33+
}
34+
35+
props.Data = web.Map{
36+
"plannedPosts": plannedPosts.Result,
37+
"startedPosts": startedPosts.Result,
38+
"completedPosts": completedPosts.Result,
39+
"tags": getAllTags.Result,
40+
}
41+
}
42+
43+
return c.Page(http.StatusOK, props)
44+
}
45+
}

locale/ar/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"action.postsfeed": "تغذية المنشورات",
1515
"action.publish": "انشر",
1616
"action.publish.verify": "انشر وثق",
17-
"action.respond": "تحديث الحالة",
17+
"action.respond": "رد",
1818
"action.save": "احفظ",
1919
"action.signin": "تسجيل الدخول",
2020
"action.signup": "اشتراك",
@@ -45,6 +45,8 @@
4545
"error.pagenotfound.title": "الصفحة غير موجودة",
4646
"error.unauthorized.text": "لا تملك الصلاحيات لتصفح هذه الصفحة.",
4747
"error.unauthorized.title": "غير مخول",
48+
"header.nav.feedback": "جميع التعليقات",
49+
"header.nav.roadmap": "خارطة الطريق",
4850
"home.filter.label": "فلتر",
4951
"home.filter.search.label": "Search in filters",
5052
"home.form.defaultinvitation": "أدخل اقتراحك هنا...",
@@ -99,6 +101,7 @@
99101
"linkmodal.title": "إدراج الرابط",
100102
"linkmodal.url.label": "عنوان URL",
101103
"linkmodal.url.placeholder": "",
104+
"listposts.label.showmore": "أظهر المزيد من {0}",
102105
"menu.administration": "آلإدارة",
103106
"menu.mysettings": "إعداداتي",
104107
"menu.signout": "تسجيل الخروج",
@@ -185,6 +188,13 @@
185188
"pagination.prev": "سابق",
186189
"post.pending": "قيد الانتظار",
187190
"postdetails.backtoall": "العودة إلى جميع الاقتراحات",
191+
"postdetails.backtoroadmap": "العودة إلى خارطة الطريق",
192+
"roadmap.blank.description": "قم بتمييز المنشورات بأنها مخططة أو قيد التنفيذ وستظهر هنا على خارطة الطريق.",
193+
"roadmap.blank.title": "خارطة طريقك تنتظر تحديثها الأول",
194+
"roadmap.column.showmore": "عرض المزيد",
195+
"roadmap.upsell.billing": "قم بالترقية إلى الإصدار الاحترافي",
196+
"roadmap.upsell.description": "قم بالترقية إلى الإصدار الاحترافي لفتح خارطة الطريق الخاصة بك",
197+
"roadmap.upsell.title": "اطلع على ما يحدث في عرض خارطة الطريق",
188198
"showpost.comment.copylink.error": "فشل نسخ رابط التعليق، يرجى نسخ رابط الصفحة",
189199
"showpost.comment.copylink.success": "تم نسخ رابط التعليق إلى الحافظة",
190200
"showpost.comment.unknownhighlighted": "معرف تعليق غير صالح #{id}",

locale/cs/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"action.edit": "Upravit",
99
"action.markallasread": "Označit vše jako přečtené",
1010
"action.ok": "OK",
11-
"action.respond": "Stav aktualizace",
11+
"action.respond": "Reagovat",
1212
"action.save": "Uložit",
1313
"action.signin": "Přihlásit se",
1414
"action.submit": "Předložit",
@@ -230,9 +230,12 @@
230230
"error.accessdenied.contact": "Pokud se domníváte, že se jedná o chybu, kontaktujte prosím svého administrátora.",
231231
"error.accessdenied.text": "Nemáte potřebná oprávnění pro přístup k tomuto webu.",
232232
"error.accessdenied.title": "Přístup odepřen",
233+
"header.nav.feedback": "Veškerá zpětná vazba",
234+
"header.nav.roadmap": "Plán",
233235
"home.postfilter.label.moderation": "Umírněnost",
234236
"label.vote": "Hlasování",
235237
"label.votes": "Hlasy",
238+
"listposts.label.showmore": "Zobrazit další {0}",
236239
"moderation.comment.delete.block.error": "Nepodařilo se smazat komentář a zablokovat uživatele",
237240
"moderation.comment.delete.error": "Komentář se nepodařilo smazat",
238241
"moderation.comment.deleted": "Komentář byl úspěšně smazán",
@@ -257,6 +260,13 @@
257260
"pagination.prev": "Předchozí",
258261
"post.pending": "čeká na vyřízení",
259262
"postdetails.backtoall": "Zpět na všechny návrhy",
263+
"postdetails.backtoroadmap": "Zpět k plánu",
264+
"roadmap.blank.description": "Označte příspěvky jako plánované nebo rozpracované a zobrazí se zde v plánu.",
265+
"roadmap.blank.title": "Váš plán čeká na svou první aktualizaci",
266+
"roadmap.column.showmore": "Zobrazit více",
267+
"roadmap.upsell.billing": "Upgradujte na PRO verzi",
268+
"roadmap.upsell.description": "Upgradujte na Pro a odemkněte si svůj plán",
269+
"roadmap.upsell.title": "Podívejte se, co se děje, v zobrazení Plán",
260270
"showpost.loading": "Načítání...",
261271
"showpost.moderation.admin.description": "Tento nápad potřebuje vaše schválení před zveřejněním.",
262272
"showpost.moderation.admin.title": "Umírněnost",

locale/de/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"action.postsfeed": "Beiträge-Feed",
1515
"action.publish": "Veröffentlichen",
1616
"action.publish.verify": "Veröffentlichen & Vertrauen",
17-
"action.respond": "Aktualisierungsstatus",
17+
"action.respond": "Antworten",
1818
"action.save": "Sichern",
1919
"action.signin": "Anmelden",
2020
"action.signup": "Registrieren",
@@ -45,6 +45,8 @@
4545
"error.pagenotfound.title": "Die Seite wurde nicht gefunden",
4646
"error.unauthorized.text": "Du bist nicht berechtigt, diese Seite anzuschauen.",
4747
"error.unauthorized.title": "Nicht berechtigt",
48+
"header.nav.feedback": "Alle Rückmeldungen",
49+
"header.nav.roadmap": "",
4850
"home.filter.label": "Filter",
4951
"home.filter.search.label": "Filter durchsuchen...",
5052
"home.form.defaultinvitation": "Gib hier deinen Vorschlag ein...",
@@ -99,6 +101,7 @@
99101
"linkmodal.title": "Link einfügen",
100102
"linkmodal.url.label": "URL",
101103
"linkmodal.url.placeholder": "https://example.com",
104+
"listposts.label.showmore": "Mehr anzeigen (PH_0)",
102105
"menu.administration": "Verwaltung",
103106
"menu.mysettings": "Meine Einstellungen",
104107
"menu.signout": "Abmelden",
@@ -185,6 +188,13 @@
185188
"pagination.prev": "Zurück",
186189
"post.pending": "ausstehend",
187190
"postdetails.backtoall": "Zurück zu allen Vorschlägen",
191+
"postdetails.backtoroadmap": "Zurück zur Roadmap",
192+
"roadmap.blank.description": "Markiere Beiträge als geplant oder in Bearbeitung, dann erscheinen sie hier in der Roadmap.",
193+
"roadmap.blank.title": "Ihre Roadmap wartet auf ihr erstes Update.",
194+
"roadmap.column.showmore": "Mehr anzeigen",
195+
"roadmap.upsell.billing": "Upgrade auf PRO",
196+
"roadmap.upsell.description": "Upgrade auf Pro, um die Roadmap freizuschalten",
197+
"roadmap.upsell.title": "Sehen Sie, was in der Roadmap-Ansicht passiert.",
188198
"showpost.comment.copylink.error": "Kommentar-Link konnte nicht kopiert werden, bitte URL der Webseite kopieren",
189199
"showpost.comment.copylink.success": "Kommentar-Link in die Zwischenablage kopiert",
190200
"showpost.comment.unknownhighlighted": "Ungültige Kommentar ID #{id}",

locale/el/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"action.postsfeed": "Ροή αναρτήσεων",
1515
"action.publish": "Δημοσιεύω",
1616
"action.publish.verify": "Δημοσίευση & Εμπιστοσύνη",
17-
"action.respond": "Κατάσταση ενημέρωσης",
17+
"action.respond": "Απάντηση",
1818
"action.save": "Αποθήκευση",
1919
"action.signin": "Είσοδος",
2020
"action.signup": "Εγγραφή",
@@ -45,6 +45,8 @@
4545
"error.pagenotfound.title": "Η σελίδα δεν βρέθηκε",
4646
"error.unauthorized.text": "Δεν έχετε δικαίωμα πρόσβασης σε αυτή τη σελίδα.",
4747
"error.unauthorized.title": "Χωρίς Εξουσιοδότηση",
48+
"header.nav.feedback": "Όλα τα σχόλια",
49+
"header.nav.roadmap": "Χάρτης πορείας",
4850
"home.filter.label": "Φίλτρο",
4951
"home.filter.search.label": "Αναζήτηση σε φίλτρα...",
5052
"home.form.defaultinvitation": "Εισάγετε εδώ την πρότασή σας...",
@@ -99,6 +101,7 @@
99101
"linkmodal.title": "Εισαγωγή συνδέσμου",
100102
"linkmodal.url.label": "",
101103
"linkmodal.url.placeholder": "",
104+
"listposts.label.showmore": "Εμφάνιση {0} περισσότερων",
102105
"menu.administration": "Διαχείριση",
103106
"menu.mysettings": "Οι Ρυθμίσεις Μου",
104107
"menu.signout": "Αποσύνδεση",
@@ -185,6 +188,13 @@
185188
"pagination.prev": "Προηγούμενος",
186189
"post.pending": "εκκρεμής",
187190
"postdetails.backtoall": "Πίσω σε όλες τις προτάσεις",
191+
"postdetails.backtoroadmap": "Επιστροφή στον χάρτη πορείας",
192+
"roadmap.blank.description": "Επισημάνετε τις αναρτήσεις ως προγραμματισμένες ή σε εξέλιξη και θα εμφανιστούν εδώ στον οδικό χάρτη.",
193+
"roadmap.blank.title": "Ο οδικός σας χάρτης περιμένει την πρώτη του ενημέρωση",
194+
"roadmap.column.showmore": "Εμφάνιση περισσότερων",
195+
"roadmap.upsell.billing": "Αναβάθμιση σε PRO",
196+
"roadmap.upsell.description": "Αναβαθμίστε σε Pro για να ξεκλειδώσετε τον Χάρτη Πορείας σας",
197+
"roadmap.upsell.title": "Δείτε τι συμβαίνει στην προβολή Χάρτης πορείας",
188198
"showpost.comment.copylink.error": "Η αντιγραφή του συνδέσμου σχολίου απέτυχε. Παρακαλώ αντιγράψτε τη διεύθυνση URL της σελίδας.",
189199
"showpost.comment.copylink.success": "Ο σύνδεσμος σχολίου αντιγράφηκε στο πρόχειρο",
190200
"showpost.comment.unknownhighlighted": "Μη έγκυρο αναγνωριστικό σχολίου #{id}",

locale/en/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"action.postsfeed": "Posts Feed",
1515
"action.publish": "Publish",
1616
"action.publish.verify": "Publish & Trust",
17-
"action.respond": "Update Status",
17+
"action.respond": "Respond",
1818
"action.save": "Save",
1919
"action.signin": "Sign in",
2020
"action.signup": "Sign up",
@@ -45,6 +45,8 @@
4545
"error.pagenotfound.title": "Page not found",
4646
"error.unauthorized.text": "You need to sign in before accessing this page.",
4747
"error.unauthorized.title": "Unauthorized",
48+
"header.nav.feedback": "All Feedback",
49+
"header.nav.roadmap": "Roadmap",
4850
"home.filter.label": "Filter",
4951
"home.filter.search.label": "Search in filters...",
5052
"home.form.defaultinvitation": "Enter your suggestion here...",
@@ -99,6 +101,7 @@
99101
"linkmodal.title": "Insert Link",
100102
"linkmodal.url.label": "URL",
101103
"linkmodal.url.placeholder": "https://example.com",
104+
"listposts.label.showmore": "Show {0} more",
102105
"menu.administration": "Administration",
103106
"menu.mysettings": "My Settings",
104107
"menu.signout": "Sign out",
@@ -185,6 +188,13 @@
185188
"pagination.prev": "Previous",
186189
"post.pending": "pending",
187190
"postdetails.backtoall": "Back to all suggestions",
191+
"postdetails.backtoroadmap": "Back to roadmap",
192+
"roadmap.blank.description": "Mark posts as planned or in progress and they'll show up here on the roadmap.",
193+
"roadmap.blank.title": "Your roadmap is waiting for its first update",
194+
"roadmap.column.showmore": "Show more",
195+
"roadmap.upsell.billing": "Upgrade to PRO",
196+
"roadmap.upsell.description": "Upgrade to Pro to unlock your Roadmap",
197+
"roadmap.upsell.title": "See what's happening in the Roadmap view",
188198
"showpost.comment.copylink.error": "Could not copy comment link, please copy page URL",
189199
"showpost.comment.copylink.success": "Successfully copied comment link to clipboard",
190200
"showpost.comment.unknownhighlighted": "Unknown comment ID #{id}",

locale/es-ES/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"action.postsfeed": "Feed de publicaciones",
1515
"action.publish": "Publicar",
1616
"action.publish.verify": "Publicar y confiar",
17-
"action.respond": "Estado de actualización",
17+
"action.respond": "Responder",
1818
"action.save": "Guardar",
1919
"action.signin": "Iniciar sesión",
2020
"action.signup": "Inscribirse",
@@ -45,6 +45,8 @@
4545
"error.pagenotfound.title": "Página no encontrada",
4646
"error.unauthorized.text": "No estás autorizado para ver esta página.",
4747
"error.unauthorized.title": "No está autorizado",
48+
"header.nav.feedback": "Todos los comentarios",
49+
"header.nav.roadmap": "Hoja de ruta",
4850
"home.filter.label": "Filtrar",
4951
"home.filter.search.label": "Buscar en filtros...",
5052
"home.form.defaultinvitation": "Escriba aquí su sugerencia...",
@@ -99,6 +101,7 @@
99101
"linkmodal.title": "Insertar un enlace",
100102
"linkmodal.url.label": "URL",
101103
"linkmodal.url.placeholder": "https://example.com",
104+
"listposts.label.showmore": "Mostrar {0} más",
102105
"menu.administration": "Administración",
103106
"menu.mysettings": "Mis ajustes",
104107
"menu.signout": "Cerrar sesión",
@@ -185,6 +188,13 @@
185188
"pagination.prev": "Anterior",
186189
"post.pending": "pendiente",
187190
"postdetails.backtoall": "Volver a todas las sugerencias",
191+
"postdetails.backtoroadmap": "Volver a la hoja de ruta",
192+
"roadmap.blank.description": "Marca las publicaciones como planificadas o en curso y aparecerán aquí en la hoja de ruta.",
193+
"roadmap.blank.title": "Tu hoja de ruta está esperando su primera actualización.",
194+
"roadmap.column.showmore": "Mostrar más",
195+
"roadmap.upsell.billing": "Actualiza a PRO",
196+
"roadmap.upsell.description": "Actualiza a Pro para desbloquear tu hoja de ruta.",
197+
"roadmap.upsell.title": "Vea lo que está sucediendo en la vista de hoja de ruta.",
188198
"showpost.comment.copylink.error": "No se pudo copiar el enlace del comentario, copie la URL de la página",
189199
"showpost.comment.copylink.success": "Enlace de comentario copiado al portapapeles",
190200
"showpost.comment.unknownhighlighted": "ID de comentario no válido #{id}",

locale/fa/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"action.postsfeed": "فید پست‌ها",
1515
"action.publish": "منتشر کردن",
1616
"action.publish.verify": "منتشر کنید و اعتمادسازی کنید",
17-
"action.respond": "وضعیت به‌روزرسانی",
17+
"action.respond": "پاسخ",
1818
"action.save": "ذخیره",
1919
"action.signin": "ورود",
2020
"action.signup": "ثبت نام کنید",
@@ -45,6 +45,8 @@
4545
"error.pagenotfound.title": "صفحه پیدا نشد",
4646
"error.unauthorized.text": "شما اجازهٔ مشاهدهٔ این صفحه را ندارید.",
4747
"error.unauthorized.title": "مجوز ندارید",
48+
"header.nav.feedback": "همه بازخوردها",
49+
"header.nav.roadmap": "نقشه راه",
4850
"home.filter.label": "فیلتر",
4951
"home.filter.search.label": "جستجو در فیلترها...",
5052
"home.form.defaultinvitation": "پیشنهاد خود را اینجا وارد کنید...",
@@ -99,6 +101,7 @@
99101
"linkmodal.title": "درج لینک",
100102
"linkmodal.url.label": "آدرس اینترنتی",
101103
"linkmodal.url.placeholder": "",
104+
"listposts.label.showmore": "نمایش {0} موارد بیشتر",
102105
"menu.administration": "مدیریت",
103106
"menu.mysettings": "تنظیمات من",
104107
"menu.signout": "خروج",
@@ -185,6 +188,13 @@
185188
"pagination.prev": "قبلی",
186189
"post.pending": "در حال بررسی",
187190
"postdetails.backtoall": "بازگشت به همه پیشنهادات",
191+
"postdetails.backtoroadmap": "بازگشت به نقشه راه",
192+
"roadmap.blank.description": "پست‌ها را طبق برنامه‌ریزی یا در حال انجام علامت‌گذاری کنید تا در اینجا در نقشه راه نمایش داده شوند.",
193+
"roadmap.blank.title": "نقشه راه شما منتظر اولین به‌روزرسانی خود است",
194+
"roadmap.column.showmore": "نمایش بیشتر",
195+
"roadmap.upsell.billing": "ارتقا به نسخه حرفه‌ای (PRO)",
196+
"roadmap.upsell.description": "برای باز کردن قفل نقشه راه خود، به نسخه حرفه‌ای ارتقا دهید",
197+
"roadmap.upsell.title": "ببینید در نمای نقشه راه چه اتفاقی می‌افتد",
188198
"showpost.comment.copylink.error": "کپی لینک نظر ناموفق بود، URL صفحه را کپی کنید",
189199
"showpost.comment.copylink.success": "لینک نظر کپی شد",
190200
"showpost.comment.unknownhighlighted": "شناسهٔ نظر نامعتبر #{id}",

locale/fr/client.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"action.postsfeed": "Flux de publications",
1515
"action.publish": "Publier",
1616
"action.publish.verify": "Publier et faire confiance",
17-
"action.respond": "État de la mise à jour",
17+
"action.respond": "Répondre",
1818
"action.save": "Enregistrer",
1919
"action.signin": "Se connecter",
2020
"action.signup": "S'inscrire",
@@ -45,6 +45,8 @@
4545
"error.pagenotfound.title": "Page non trouvée",
4646
"error.unauthorized.text": "Vous n'êtes pas autorisé à accéder à cette page.",
4747
"error.unauthorized.title": "Non autorisé",
48+
"header.nav.feedback": "Tous les commentaires",
49+
"header.nav.roadmap": "Feuille de route",
4850
"home.filter.label": "Filtrer",
4951
"home.filter.search.label": "Rechercher dans les filtres...",
5052
"home.form.defaultinvitation": "Entrez votre suggestion ici...",
@@ -99,6 +101,7 @@
99101
"linkmodal.title": "Insérer un lien",
100102
"linkmodal.url.label": "",
101103
"linkmodal.url.placeholder": "https://exemple.com",
104+
"listposts.label.showmore": "Afficher plus de {0}",
102105
"menu.administration": "Administration",
103106
"menu.mysettings": "Mes paramètres",
104107
"menu.signout": "Se déconnecter",
@@ -185,6 +188,13 @@
185188
"pagination.prev": "Précédent",
186189
"post.pending": "en attente",
187190
"postdetails.backtoall": "Retour à toutes les suggestions",
191+
"postdetails.backtoroadmap": "Retour à la feuille de route",
192+
"roadmap.blank.description": "Indiquez si les articles sont planifiés ou en cours, et ils apparaîtront ici sur la feuille de route.",
193+
"roadmap.blank.title": "Votre feuille de route attend sa première mise à jour.",
194+
"roadmap.column.showmore": "Afficher plus",
195+
"roadmap.upsell.billing": "Passez à la version PRO",
196+
"roadmap.upsell.description": "Passez à la version Pro pour débloquer votre feuille de route",
197+
"roadmap.upsell.title": "Consultez la vue Feuille de route pour découvrir ce qui se passe.",
188198
"showpost.comment.copylink.error": "Impossible de copier le lien du commentaire, veuillez copier l'URL de la page",
189199
"showpost.comment.copylink.success": "Lien du commentaire copié dans le presse-papiers",
190200
"showpost.comment.unknownhighlighted": "ID de commentaire #{id} invalide",

0 commit comments

Comments
 (0)